Compare commits
13 Commits
fix/menu-b
...
feat/due-d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0dbc3309d | ||
|
|
d2a1bbede9 | ||
|
|
8969a3a97f | ||
|
|
4d7c6770fb | ||
|
|
6d2ca9e250 | ||
|
|
f71fb63203 | ||
|
|
7e3d64a4ff | ||
|
|
3d5f4f63a2 | ||
|
|
7bc83e70a9 | ||
|
|
172f94949e | ||
|
|
cea9c89284 | ||
|
|
b664c566a1 | ||
|
|
48d3b43223 |
1
.gitignore
vendored
@@ -34,7 +34,6 @@ yarn-error.log*
|
||||
.env
|
||||
.env*.local
|
||||
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
|
||||
|
||||
73
README.md
@@ -138,45 +138,44 @@ pnpm dev
|
||||
|
||||
## Environment Variables 🔐
|
||||
|
||||
| Variable | Description | Required | Example |
|
||||
| ----------------------------------------- | --------------------------------------------------------- | ------------------------------------- | ----------------------------------------------------------- |
|
||||
| `POSTGRES_URL` | PostgreSQL connection URL | To use external database | `postgres://user:pass@localhost:5432/db` |
|
||||
| `EMAIL_FROM` | Sender email address | For Email | `"Kan <hello@mail.kan.bn>"` |
|
||||
| `SMTP_HOST` | SMTP server hostname | For Email | `smtp.resend.com` |
|
||||
| `SMTP_PORT` | SMTP server port | For Email | `465` |
|
||||
| `SMTP_USER` | SMTP username/email | No | `resend` |
|
||||
| `SMTP_PASSWORD` | SMTP password/token | No | `re_xxxx` |
|
||||
| `SMTP_SECURE` | Use secure SMTP connection (defaults to true if not set) | For Email | `true` |
|
||||
| `SMTP_REJECT_UNAUTHORIZED` | Reject invalid certificates (defaults to true if not set) | For Email | `false` |
|
||||
| `NEXT_PUBLIC_DISABLE_EMAIL` | To disable all email features | For Email | `true` |
|
||||
| `NEXT_PUBLIC_BASE_URL` | Base URL of your installation | Yes | `http://localhost:3000` |
|
||||
| `BETTER_AUTH_ALLOWED_DOMAINS` | Comma-separated list of allowed domains for OIDC logins | For OIDC/Social login | `example.com,subsidiary.com` |
|
||||
| `BETTER_AUTH_SECRET` | Auth encryption secret | Yes | Random 32+ char string |
|
||||
| `BETTER_AUTH_TRUSTED_ORIGINS` | Allowed callback origins | No | `http://localhost:3000,http://localhost:3001` |
|
||||
| `GOOGLE_CLIENT_ID` | Google OAuth client ID | For Google login | `xxx.apps.googleusercontent.com` |
|
||||
| `GOOGLE_CLIENT_SECRET` | Google OAuth client secret | For Google login | `xxx` |
|
||||
| `DISCORD_CLIENT_ID` | Discord OAuth client ID | For Discord login | `xxx` |
|
||||
| `DISCORD_CLIENT_SECRET` | Discord OAuth client secret | For Discord login | `xxx` |
|
||||
| `GITHUB_CLIENT_ID` | GitHub OAuth client ID | For GitHub login | `xxx` |
|
||||
| `GITHUB_CLIENT_SECRET` | GitHub OAuth client secret | For GitHub login | `xxx` |
|
||||
| `OIDC_CLIENT_ID` | Generic OIDC client ID | For OIDC login | `xxx` |
|
||||
| `OIDC_CLIENT_SECRET` | Generic OIDC client secret | For OIDC login | `xxx` |
|
||||
| `OIDC_DISCOVERY_URL` | OIDC discovery URL | For OIDC login | `https://auth.example.com/.well-known/openid-configuration` |
|
||||
| `TRELLO_APP_API_KEY` | Trello app API key | For Trello import | `xxx` |
|
||||
| `TRELLO_APP_API_SECRET` | Trello app API secret | For Trello import | `xxx` |
|
||||
| `S3_REGION` | S3 storage region | For file uploads | `WEUR` |
|
||||
| `S3_ENDPOINT` | S3 endpoint URL | For file uploads | `https://xxx.r2.cloudflarestorage.com` |
|
||||
| Variable | Description | Required | Example |
|
||||
| ----------------------------------------- | --------------------------------------------------------- | ------------------------ | ----------------------------------------------------------- |
|
||||
| `POSTGRES_URL` | PostgreSQL connection URL | To use external database | `postgres://user:pass@localhost:5432/db` |
|
||||
| `EMAIL_FROM` | Sender email address | For Email | `"Kan <hello@mail.kan.bn>"` |
|
||||
| `SMTP_HOST` | SMTP server hostname | For Email | `smtp.resend.com` |
|
||||
| `SMTP_PORT` | SMTP server port | For Email | `465` |
|
||||
| `SMTP_USER` | SMTP username/email | No | `resend` |
|
||||
| `SMTP_PASSWORD` | SMTP password/token | No | `re_xxxx` |
|
||||
| `SMTP_SECURE` | Use secure SMTP connection (defaults to true if not set) | For Email | `true` |
|
||||
| `SMTP_REJECT_UNAUTHORIZED` | Reject invalid certificates (defaults to true if not set) | For Email | `false` |
|
||||
| `NEXT_PUBLIC_DISABLE_EMAIL` | To disable all email features | For Email | `true` |
|
||||
| `NEXT_PUBLIC_BASE_URL` | Base URL of your installation | Yes | `http://localhost:3000` |
|
||||
| `BETTER_AUTH_ALLOWED_DOMAINS` | Comma-separated list of allowed domains for OIDC logins | For OIDC/Social login | `example.com,subsidiary.com` |
|
||||
| `BETTER_AUTH_SECRET` | Auth encryption secret | Yes | Random 32+ char string |
|
||||
| `BETTER_AUTH_TRUSTED_ORIGINS` | Allowed callback origins | No | `http://localhost:3000,http://localhost:3001` |
|
||||
| `GOOGLE_CLIENT_ID` | Google OAuth client ID | For Google login | `xxx.apps.googleusercontent.com` |
|
||||
| `GOOGLE_CLIENT_SECRET` | Google OAuth client secret | For Google login | `xxx` |
|
||||
| `DISCORD_CLIENT_ID` | Discord OAuth client ID | For Discord login | `xxx` |
|
||||
| `DISCORD_CLIENT_SECRET` | Discord OAuth client secret | For Discord login | `xxx` |
|
||||
| `GITHUB_CLIENT_ID` | GitHub OAuth client ID | For GitHub login | `xxx` |
|
||||
| `GITHUB_CLIENT_SECRET` | GitHub OAuth client secret | For GitHub login | `xxx` |
|
||||
| `OIDC_CLIENT_ID` | Generic OIDC client ID | For OIDC login | `xxx` |
|
||||
| `OIDC_CLIENT_SECRET` | Generic OIDC client secret | For OIDC login | `xxx` |
|
||||
| `OIDC_DISCOVERY_URL` | OIDC discovery URL | For OIDC login | `https://auth.example.com/.well-known/openid-configuration` |
|
||||
| `TRELLO_APP_API_KEY` | Trello app API key | For Trello import | `xxx` |
|
||||
| `TRELLO_APP_API_SECRET` | Trello app API secret | For Trello import | `xxx` |
|
||||
| `S3_REGION` | S3 storage region | For file uploads | `WEUR` |
|
||||
| `S3_ENDPOINT` | S3 endpoint URL | For file uploads | `https://xxx.r2.cloudflarestorage.com` |
|
||||
| `S3_ACCESS_KEY_ID` | S3 access key | For file uploads (optional with IRSA) | `xxx` |
|
||||
| `S3_SECRET_ACCESS_KEY` | S3 secret key | For file uploads (optional with IRSA) | `xxx` |
|
||||
| `S3_FORCE_PATH_STYLE` | Use path-style URLs for S3 | For file uploads | `true` |
|
||||
| `NEXT_PUBLIC_STORAGE_URL` | Storage service URL | For file uploads | `https://storage.kanbn.com` |
|
||||
| `NEXT_PUBLIC_STORAGE_DOMAIN` | Storage domain name | For file uploads | `kanbn.com` |
|
||||
| `NEXT_PUBLIC_AVATAR_BUCKET_NAME` | S3 bucket name for avatars | For file uploads | `avatars` |
|
||||
| `NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME` | S3 bucket name for attachments | For file uploads | `attachments` |
|
||||
| `NEXT_PUBLIC_ALLOW_CREDENTIALS` | Allow email & password login | For authentication | `true` |
|
||||
| `NEXT_PUBLIC_DISABLE_SIGN_UP` | Disable sign up | For authentication | `false` |
|
||||
| `NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY` | Hide “Powered by kan.bn” on public boards (self-host) | For white labelling | `true` |
|
||||
| `KAN_ADMIN_API_KEY` | Admin API key for stats and admin endpoints | For admin/monitoring | `your-secret-admin-key` |
|
||||
| `S3_FORCE_PATH_STYLE` | Use path-style URLs for S3 | For file uploads | `true` |
|
||||
| `NEXT_PUBLIC_STORAGE_URL` | Storage service URL | For file uploads | `https://storage.kanbn.com` |
|
||||
| `NEXT_PUBLIC_STORAGE_DOMAIN` | Storage domain name | For file uploads | `kanbn.com` |
|
||||
| `NEXT_PUBLIC_AVATAR_BUCKET_NAME` | S3 bucket name for avatars | For file uploads | `avatars` |
|
||||
| `NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME` | S3 bucket name for attachments | For file uploads | `attachments` |
|
||||
| `NEXT_PUBLIC_ALLOW_CREDENTIALS` | Allow email & password login | For authentication | `true` |
|
||||
| `NEXT_PUBLIC_DISABLE_SIGN_UP` | Disable sign up | For authentication | `false` |
|
||||
| `NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY` | Hide “Powered by kan.bn” on public boards (self-host) | For white labelling | `true` |
|
||||
|
||||
See `.env.example` for a complete list of supported environment variables.
|
||||
|
||||
|
||||
@@ -4,9 +4,8 @@ ARG PROJECT=@kan/web
|
||||
|
||||
# 1. Alpine image
|
||||
FROM node:${NODE_VERSION}-alpine AS alpine
|
||||
RUN apk update && \
|
||||
apk add --no-cache --virtual .build-deps libc6-compat python3 make g++ && \
|
||||
rm -rf /var/cache/apk/* /tmp/* || true
|
||||
RUN apk update
|
||||
RUN apk add --no-cache libc6-compat python3 make g++
|
||||
|
||||
# Setup pnpm and turbo on the alpine base
|
||||
FROM alpine AS base
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"version": 0,
|
||||
"locale": {
|
||||
"source": "en",
|
||||
"targets": ["fr", "de", "es", "it", "nl", "ru", "pl", "ptbr"]
|
||||
"targets": ["fr", "de", "es", "it", "nl", "ru", "pl"]
|
||||
},
|
||||
"buckets": {
|
||||
"po": {
|
||||
|
||||
@@ -27,7 +27,6 @@ checksums:
|
||||
Add%20details.../singular: 2f42547fd5d199f173aa7a88c8a9b19a
|
||||
Add%20label/singular: 0be732d46df263265935fda342097a08
|
||||
Add%20member/singular: 11979625770516ca287e929381778e02
|
||||
added%20%7B0%7D%20labels%3A%20%3C0%3E%7BlabelList%7D%3C%2F0%3E/singular: 42b0488d570626dc887c58ff669c953c
|
||||
added%20a%20checklist/singular: 44304f4a5ef3a46378eea243b5d2df79
|
||||
added%20a%20checklist%20item/singular: 20bc0330dba5a9ec978e04bec174365a
|
||||
added%20a%20label%20to%20the%20card/singular: 04c5e4ee9b7b7e77ef089d2ac473d235
|
||||
@@ -315,8 +314,6 @@ checksums:
|
||||
List/singular: 94f13e7ef909a4de9db7abaa1f9f0b61
|
||||
List%20name/singular: e925e2e6ccaf0eb4064a888aaea8d3c2
|
||||
Lists/singular: 9f4a73afc8de321175d71935134ef066
|
||||
Load%20more%20activities/singular: f32d40a739ffaa700051c4c7d70055cf
|
||||
Loading.../singular: 82b4ea7ed1439094d7c4be13aaba9a66
|
||||
Login%20%7C%20kan.bn/singular: 42a6c8dcd73e0d46e652646dc86871eb
|
||||
Logout/singular: 07948fdf20705e04a7bf68ab197512bf
|
||||
Long-term/singular: 51cb6f0b112250c5a091ca5f0866904b
|
||||
@@ -412,7 +409,6 @@ checksums:
|
||||
Remote/singular: dc3e4280dfe5c455b38ba6c8884999cf
|
||||
Remove/singular: dba2fe5fe9f83f8078c687f28cba4b52
|
||||
Remove%20member/singular: 1d77c2ca3768e486fd1fb5df30cb60d9
|
||||
removed%20%7B0%7D%20labels%3A%20%3C0%3E%7BlabelList%7D%3C%2F0%3E/singular: 612fcfd4aca6818fc870f81d9687d63f
|
||||
removed%20a%20label%20from%20the%20card/singular: f83ec18850a2a8a3f8242a740a04df06
|
||||
removed%20a%20member%20from%20the%20card/singular: 0bd7561bb79358fde3d595c3e60a315a
|
||||
removed%20label%20%3C0%3E%7B0%7D%3C%2F0%3E/singular: 7e0936b15831e65754588b8512f62fcb
|
||||
@@ -506,7 +502,6 @@ checksums:
|
||||
Trusted%20by%20fast-moving%20teams%3C0%2F%3Earound%20the%20world/singular: b065575df380536df9541a91ca9b37bf
|
||||
Unable%20to%20add%20checklist%20item/singular: 4c4c3eaaf10b348b39ae97eb5dc455df
|
||||
Unable%20to%20add%20comment/singular: 49bb435880817434698f31a6069564d6
|
||||
Unable%20to%20add%20label/singular: b09fda6420ea1dc10dbea0b1dc373f29
|
||||
Unable%20to%20create%20card/singular: 90112ea12ec6fa42097a6e022ae048a4
|
||||
Unable%20to%20create%20checklist/singular: 94eed122e42e0951cd08b9ec62f5eeb6
|
||||
Unable%20to%20create%20list/singular: 7fbbf8314f8d08a4123c7daef09fed05
|
||||
@@ -518,7 +513,6 @@ checksums:
|
||||
Unable%20to%20delete%20checklist%20item/singular: a74144593b625e4d8d7ecf734462c60d
|
||||
Unable%20to%20delete%20comment/singular: 550198b2c87f06726a843c79c1026ed9
|
||||
Unable%20to%20remove%20member/singular: 39025a0c53818438829603d213baef06
|
||||
Unable%20to%20reorder%20checklist%20item/singular: dcc238c72b85daf74ebd46adcd914473
|
||||
Unable%20to%20send%20feedback/singular: 656c93265d7e2bef1245b17d85f85ae5
|
||||
Unable%20to%20update%20board%20URL/singular: 080746884059142358b58d9a44ff7d93
|
||||
Unable%20to%20update%20board%20visibility/singular: a76a21d561b8943e9276e027a1e3f70d
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { LinguiConfig } from "@lingui/conf";
|
||||
|
||||
const config: LinguiConfig = {
|
||||
locales: ["en", "fr", "de", "es", "it", "nl", "ru", "pl","ptbr"],
|
||||
locales: ["en", "fr", "de", "es", "it", "nl", "ru", "pl"],
|
||||
sourceLocale: "en",
|
||||
catalogs: [
|
||||
{
|
||||
|
||||
@@ -26,10 +26,8 @@ const config = {
|
||||
],
|
||||
|
||||
/** We already do linting and typechecking as separate tasks in CI */
|
||||
typescript: { ignoreBuildErrors: true },
|
||||
|
||||
// temporarily ignore eslint errors during build until we fix all the errors sigh
|
||||
eslint: { ignoreDuringBuilds: true },
|
||||
typescript: { ignoreBuildErrors: true },
|
||||
|
||||
images: {
|
||||
remotePatterns: (() => {
|
||||
@@ -77,13 +75,12 @@ const config = {
|
||||
return patterns;
|
||||
})(),
|
||||
},
|
||||
turbopack: {
|
||||
rules: {
|
||||
"*.svg": {
|
||||
loaders: ["@svgr/webpack"],
|
||||
as: "*.js",
|
||||
},
|
||||
},
|
||||
webpack(config) {
|
||||
config.module.rules.push({
|
||||
test: /\.svg$/,
|
||||
use: ["@svgr/webpack"],
|
||||
});
|
||||
return config;
|
||||
},
|
||||
experimental: {
|
||||
// instrumentationHook: true,
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "pnpm with-env next build --turbo",
|
||||
"build": "pnpm with-env next build",
|
||||
"clean": "git clean -xdf .cache .next .turbo node_modules",
|
||||
"dev": "pnpm with-env next dev --turbo",
|
||||
"dev": "pnpm with-env next dev",
|
||||
"format": "prettier --check . --ignore-path ../../.gitignore",
|
||||
"lint": "eslint",
|
||||
"start": "pnpm with-env next start",
|
||||
@@ -47,10 +47,12 @@
|
||||
"date-fns": "^4.1.0",
|
||||
"geist": "^1.3.1",
|
||||
"jose": "^6.1.2",
|
||||
"next": "15.5.9",
|
||||
"next": "^15.3.4",
|
||||
"next-logger": "^5.0.1",
|
||||
"next-runtime-env": "^1.7.2",
|
||||
"next-themes": "^0.4.6",
|
||||
"nextjs-cors": "^2.2.0",
|
||||
"pino": "^9.6.0",
|
||||
"posthog-js": "^1.254.0",
|
||||
"react": "catalog:react18",
|
||||
"react-beautiful-dnd": "^13.1.1",
|
||||
@@ -84,6 +86,7 @@
|
||||
"dotenv-cli": "^7.4.4",
|
||||
"eslint": "catalog:",
|
||||
"jiti": "^1.21.6",
|
||||
"pino-pretty": "^13.0.0",
|
||||
"prettier": "catalog:",
|
||||
"tailwindcss": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
|
||||
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
1
apps/web/public/logos/bitwarden.svg
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
@@ -46,8 +46,7 @@ const Button: React.FC<{
|
||||
onMouseEnter={handleMouseEnter}
|
||||
onClick={handleClick}
|
||||
className={twMerge(
|
||||
"group flex h-[34px] items-center rounded-md p-1.5 text-sm font-normal leading-6 hover:bg-light-200 hover:text-light-1000 dark:hover:bg-dark-200 dark:hover:text-dark-1000",
|
||||
isCollapsed ? "md:justify-center" : "justify-between",
|
||||
"group flex h-[34px] items-center justify-between rounded-md p-1.5 text-sm font-normal leading-6 hover:bg-light-200 hover:text-light-1000 dark:hover:bg-dark-200 dark:hover:text-dark-1000",
|
||||
current
|
||||
? "bg-light-200 text-light-1000 dark:bg-dark-200 dark:text-dark-1000"
|
||||
: "text-neutral-600 dark:bg-dark-100 dark:text-dark-900",
|
||||
|
||||
@@ -14,7 +14,6 @@ export const env = createEnv({
|
||||
* This way you can ensure the app isn't built with invalid env vars.
|
||||
*/
|
||||
server: {
|
||||
KAN_ADMIN_API_KEY: z.string().optional(),
|
||||
BETTER_AUTH_SECRET: z.string(),
|
||||
BETTER_AUTH_TRUSTED_ORIGINS: z
|
||||
.string()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Locale as DateFnsLocale } from "date-fns";
|
||||
import { useLingui } from "@lingui/react";
|
||||
import { de, enGB, es, fr, it, nl, pl, ru, ptBR} from "date-fns/locale";
|
||||
import { de, enGB, es, fr, it, nl, pl, ru } from "date-fns/locale";
|
||||
|
||||
import type { Locale } from "~/locales";
|
||||
import { useLinguiContext } from "~/providers/lingui";
|
||||
@@ -19,7 +19,6 @@ export function useLocalisation() {
|
||||
nl,
|
||||
ru,
|
||||
pl,
|
||||
ptbr: ptBR,
|
||||
};
|
||||
|
||||
const currentDateLocale = dateLocaleMap[locale] ?? enGB;
|
||||
|
||||
6
apps/web/src/instrumentation.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export async function register() {
|
||||
if (process.env.NEXT_RUNTIME === "nodejs") {
|
||||
await require("pino");
|
||||
await require("next-logger");
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:124
|
||||
#: src/views/card/components/Comment.tsx:123
|
||||
msgid " (edited)"
|
||||
msgstr " (bearbeitet)"
|
||||
|
||||
@@ -31,7 +31,7 @@ msgstr "{0}"
|
||||
#. placeholder {1}: board?.name ?? t`Board`
|
||||
#. placeholder {1}: workspace.name ?? t`Workspace`
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "{0} | {1}"
|
||||
msgstr "{0} | {1}"
|
||||
|
||||
@@ -41,7 +41,7 @@ msgid "{0} labels"
|
||||
msgstr "{0} Labels"
|
||||
|
||||
#. placeholder {0}: isTemplate ? "Template" : "Board"
|
||||
#: src/views/board/index.tsx:408
|
||||
#: src/views/board/index.tsx:412
|
||||
msgid "{0} not found"
|
||||
msgstr "{0} nicht gefunden"
|
||||
|
||||
@@ -83,7 +83,7 @@ msgstr "Konto gelöscht"
|
||||
msgid "Actions"
|
||||
msgstr "Aktionen"
|
||||
|
||||
#: src/views/card/index.tsx:386
|
||||
#: src/views/card/index.tsx:352
|
||||
#: src/views/public/board/CardModal.tsx:158
|
||||
msgid "Activity"
|
||||
msgstr "Aktivität"
|
||||
@@ -100,12 +100,12 @@ msgstr "Aktivitätsprotokolle"
|
||||
msgid "Add a card"
|
||||
msgstr "Karte hinzufügen"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:147
|
||||
#: src/views/card/components/NewCommentForm.tsx:55
|
||||
#: src/views/card/components/Comment.tsx:146
|
||||
#: src/views/card/components/NewCommentForm.tsx:57
|
||||
msgid "Add a comment..."
|
||||
msgstr "Kommentar hinzufügen..."
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:141
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:140
|
||||
msgid "Add an item..."
|
||||
msgstr "Element hinzufügen..."
|
||||
|
||||
@@ -117,53 +117,48 @@ msgstr "Checkliste hinzufügen"
|
||||
msgid "Add description... (type '/' to open commands or '@' to mention)"
|
||||
msgstr "Beschreibung hinzufügen... (tippe '/' um Befehle zu öffnen oder '@' um jemanden zu erwähnen)"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:195
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:172
|
||||
msgid "Add details..."
|
||||
msgstr "Details hinzufügen..."
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:110
|
||||
#: src/views/card/components/LabelSelector.tsx:115
|
||||
#: src/views/card/components/LabelSelector.tsx:109
|
||||
#: src/views/card/components/LabelSelector.tsx:114
|
||||
msgid "Add label"
|
||||
msgstr "Label hinzufügen"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:131
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:257
|
||||
msgid "Add member"
|
||||
msgstr "Mitglied hinzufügen"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:77
|
||||
msgid "added {0} labels: <0>{labelList}</0>"
|
||||
msgstr "{0} Labels hinzugefügt: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
#: src/views/card/components/ActivityList.tsx:66
|
||||
msgid "added a checklist"
|
||||
msgstr "hat eine Checkliste hinzugefügt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
#: src/views/card/components/ActivityList.tsx:69
|
||||
msgid "added a checklist item"
|
||||
msgstr "hat ein Checklistenelement hinzugefügt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:103
|
||||
#: src/views/card/components/ActivityList.tsx:62
|
||||
msgid "added a label to the card"
|
||||
msgstr "hat ein Label zur Karte hinzugefügt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:105
|
||||
#: src/views/card/components/ActivityList.tsx:64
|
||||
msgid "added a member to the card"
|
||||
msgstr "hat ein Mitglied zur Karte hinzugefügt"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:181
|
||||
#: src/views/card/components/ActivityList.tsx:146
|
||||
msgid "added checklist <0>{0}</0>"
|
||||
msgstr "hat Checkliste <0>{0}</0> hinzugefügt"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
#: src/views/card/components/ActivityList.tsx:170
|
||||
msgid "added checklist item <0>{0}</0>"
|
||||
msgstr "hat Checklistenelement <0>{0}</0> hinzugefügt"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:165
|
||||
#: src/views/card/components/ActivityList.tsx:130
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "hat Label <0>{0}</0> hinzugefügt"
|
||||
|
||||
@@ -254,11 +249,11 @@ msgstr "Sind Sie sicher, dass Sie diese(n) {0} löschen möchten?"
|
||||
msgid "Are you sure you want to delete this card?"
|
||||
msgstr "Bist du sicher, dass du diese Karte löschen möchtest?"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:56
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:55
|
||||
msgid "Are you sure you want to delete this checklist?"
|
||||
msgstr "Sind Sie sicher, dass Sie diese Checkliste löschen möchten?"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:65
|
||||
msgid "Are you sure you want to delete this comment?"
|
||||
msgstr "Bist du sicher, dass du diesen Kommentar löschen möchtest?"
|
||||
|
||||
@@ -271,7 +266,7 @@ msgid "Are you sure you want to delete your account?"
|
||||
msgstr "Bist du sicher, dass du dein Konto löschen möchtest?"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:145
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
msgid "assigned <0>{0}</0> to the card"
|
||||
msgstr "hat <0>{0}</0> der Karte zugewiesen"
|
||||
|
||||
@@ -279,7 +274,7 @@ msgstr "hat <0>{0}</0> der Karte zugewiesen"
|
||||
msgid "Assignees"
|
||||
msgstr "Zugewiesene Personen"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
#: src/views/card/components/AttachmentUpload.tsx:25
|
||||
msgid "Attachment uploaded"
|
||||
msgstr "Anhang hochgeladen"
|
||||
|
||||
@@ -317,9 +312,9 @@ msgstr "Abrechnungsportal"
|
||||
msgid "Blog Post"
|
||||
msgstr "Blogbeitrag"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/card/index.tsx:238
|
||||
#: src/views/public/board/index.tsx:113
|
||||
msgid "Board"
|
||||
msgstr "Board"
|
||||
|
||||
@@ -336,7 +331,7 @@ msgstr "Der Name des Boards darf 100 Zeichen nicht überschreiten"
|
||||
msgid "Board name is required"
|
||||
msgstr "Boardname ist erforderlich"
|
||||
|
||||
#: src/views/public/board/index.tsx:166
|
||||
#: src/views/public/board/index.tsx:165
|
||||
msgid "Board not found"
|
||||
msgstr "Board nicht gefunden"
|
||||
|
||||
@@ -352,7 +347,7 @@ msgstr "Board-URL darf nur Buchstaben, Zahlen und Bindestriche enthalten"
|
||||
msgid "Board URL cannot exceed 60 characters"
|
||||
msgstr "Board-URL darf 60 Zeichen nicht überschreiten"
|
||||
|
||||
#: src/views/public/board/index.tsx:80
|
||||
#: src/views/public/board/index.tsx:79
|
||||
msgid "Board URL copied to clipboard"
|
||||
msgstr "Board-URL in die Zwischenablage kopiert"
|
||||
|
||||
@@ -387,10 +382,10 @@ msgstr "Fehlerbericht"
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:44
|
||||
#: src/views/card/components/Comment.tsx:159
|
||||
#: src/views/card/components/Comment.tsx:158
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:77
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:63
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: src/views/settings/components/Avatar.tsx:306
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
@@ -400,12 +395,12 @@ msgstr "Fehlerbericht"
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "Card"
|
||||
msgstr "Karte"
|
||||
|
||||
#: src/views/card/index.tsx:306
|
||||
#: src/views/card/index.tsx:342
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:308
|
||||
msgid "Card not found"
|
||||
msgstr "Karte nicht gefunden"
|
||||
|
||||
@@ -424,8 +419,8 @@ msgstr "Passwort ändern"
|
||||
msgid "Change your language preferences."
|
||||
msgstr "Ändern Sie Ihre Spracheinstellungen."
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:255
|
||||
#: src/views/card/components/ActivityList.tsx:269
|
||||
#: src/views/card/components/ActivityList.tsx:220
|
||||
#: src/views/card/components/ActivityList.tsx:234
|
||||
msgid "changed the due date to <0>{formattedDate}</0>"
|
||||
msgstr "hat den Fälligkeitstermin auf <0>{formattedDate}</0> geändert"
|
||||
|
||||
@@ -438,7 +433,7 @@ msgstr "Entdecken Sie einige unserer liebsten Open-Source-Projekte."
|
||||
msgid "Check your inbox"
|
||||
msgstr "Überprüfe deinen Posteingang"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:119
|
||||
#: src/views/card/components/NewChecklistForm.tsx:118
|
||||
msgid "Checklist name"
|
||||
msgstr "Checklistenname"
|
||||
|
||||
@@ -499,12 +494,12 @@ msgstr "Abgeschlossen"
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Vollständige Kontrolle und Eigentum:"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:112
|
||||
#: src/views/card/components/ActivityList.tsx:71
|
||||
msgid "completed a checklist item"
|
||||
msgstr "hat ein Checklistenelement abgeschlossen"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:222
|
||||
#: src/views/card/components/ActivityList.tsx:187
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
msgstr "hat Checklistenelement <0>{0}</0> abgeschlossen"
|
||||
|
||||
@@ -578,7 +573,7 @@ msgstr "API-Schlüssel erstellen"
|
||||
msgid "Create card"
|
||||
msgstr "Karte erstellen"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:135
|
||||
#: src/views/card/components/NewChecklistForm.tsx:134
|
||||
msgid "Create checklist"
|
||||
msgstr "Checkliste erstellen"
|
||||
|
||||
@@ -605,12 +600,12 @@ msgid "Create new key"
|
||||
msgstr "Neuen Schlüssel erstellen"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:414
|
||||
#: src/views/card/components/LabelSelector.tsx:98
|
||||
#: src/views/card/components/LabelSelector.tsx:97
|
||||
msgid "Create new label"
|
||||
msgstr "Neues Label erstellen"
|
||||
|
||||
#: src/views/board/index.tsx:64
|
||||
#: src/views/board/index.tsx:499
|
||||
#: src/views/board/index.tsx:65
|
||||
#: src/views/board/index.tsx:503
|
||||
msgid "Create new list"
|
||||
msgstr "Neue Liste erstellen"
|
||||
|
||||
@@ -623,7 +618,7 @@ msgstr "Vorlage erstellen"
|
||||
msgid "Create workspace"
|
||||
msgstr "Arbeitsbereich erstellen"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:99
|
||||
#: src/views/card/components/ActivityList.tsx:58
|
||||
msgid "created the card"
|
||||
msgstr "hat die Karte erstellt"
|
||||
|
||||
@@ -681,8 +676,8 @@ msgstr "Einladungslink deaktivieren"
|
||||
#: src/components/LabelForm.tsx:228
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:47
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:67
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:83
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
@@ -700,7 +695,7 @@ msgstr "Board löschen"
|
||||
msgid "Delete card"
|
||||
msgstr "Karte löschen"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:92
|
||||
#: src/views/card/components/Comment.tsx:91
|
||||
msgid "Delete comment"
|
||||
msgstr "Kommentar löschen"
|
||||
|
||||
@@ -718,21 +713,21 @@ msgstr "Vorlage löschen"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Workspace löschen"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:109
|
||||
#: src/views/card/components/ActivityList.tsx:68
|
||||
msgid "deleted a checklist"
|
||||
msgstr "hat eine Checkliste gelöscht"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:114
|
||||
#: src/views/card/components/ActivityList.tsx:73
|
||||
msgid "deleted a checklist item"
|
||||
msgstr "hat ein Checklistenelement gelöscht"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:197
|
||||
#: src/views/card/components/ActivityList.tsx:162
|
||||
msgid "deleted checklist <0>{0}</0>"
|
||||
msgstr "hat Checkliste <0>{0}</0> gelöscht"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:240
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
msgid "deleted checklist item <0>{0}</0>"
|
||||
msgstr "hat Checklistenelement <0>{0}</0> gelöscht"
|
||||
|
||||
@@ -798,13 +793,13 @@ msgstr "Du hast noch kein Konto? <0><1>Registrieren</1></0>"
|
||||
msgid "Done"
|
||||
msgstr "Erledigt"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:141
|
||||
msgid "Download failed"
|
||||
msgstr "Download fehlgeschlagen"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:171
|
||||
#: src/views/board/components/NewCardForm.tsx:469
|
||||
#: src/views/card/index.tsx:139
|
||||
#: src/views/card/index.tsx:138
|
||||
msgid "Due date"
|
||||
msgstr "Fälligkeitsdatum"
|
||||
|
||||
@@ -829,7 +824,7 @@ msgstr "Morgen fällig"
|
||||
msgid "Edit board URL"
|
||||
msgstr "Board-URL bearbeiten"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:83
|
||||
#: src/views/card/components/Comment.tsx:82
|
||||
msgid "Edit comment"
|
||||
msgstr "Kommentar bearbeiten"
|
||||
|
||||
@@ -986,8 +981,8 @@ msgstr "Board konnte nicht erstellt werden"
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
msgstr "Anmeldung mit {0} fehlgeschlagen. Bitte versuche es erneut."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:34
|
||||
#: src/views/card/components/AttachmentUpload.tsx:80
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
msgid "Failed to upload attachment. Please try again."
|
||||
msgstr "Fehler beim Hochladen des Anhangs. Bitte versuchen Sie es erneut."
|
||||
|
||||
@@ -1092,7 +1087,7 @@ msgstr "Loslegen"
|
||||
msgid "Get started by creating a new {0}"
|
||||
msgstr "Beginnen Sie, indem Sie eine(n) neue(n) {0} erstellen"
|
||||
|
||||
#: src/views/board/index.tsx:491
|
||||
#: src/views/board/index.tsx:495
|
||||
msgid "Get started by creating a new list"
|
||||
msgstr "Beginne mit dem Erstellen einer neuen Liste"
|
||||
|
||||
@@ -1279,7 +1274,7 @@ msgstr "Einladungslinks"
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Einladungslinks erfordern ein Team- oder Pro-Abonnement. Bitte upgraden Sie Ihren Workspace."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:367
|
||||
msgid "Invite member"
|
||||
msgstr "Mitglied einladen"
|
||||
@@ -1328,7 +1323,7 @@ msgstr "Tastaturkürzel"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:418
|
||||
#: src/views/card/index.tsx:121
|
||||
#: src/views/card/index.tsx:120
|
||||
msgid "Labels"
|
||||
msgstr "Labels"
|
||||
|
||||
@@ -1378,11 +1373,11 @@ msgstr "Lizenz"
|
||||
msgid "Light"
|
||||
msgstr "Hell"
|
||||
|
||||
#: src/views/public/board/index.tsx:78
|
||||
#: src/views/public/board/index.tsx:77
|
||||
msgid "Link copied"
|
||||
msgstr "Link kopiert"
|
||||
|
||||
#: src/views/card/index.tsx:113
|
||||
#: src/views/card/index.tsx:112
|
||||
msgid "List"
|
||||
msgstr "Liste"
|
||||
|
||||
@@ -1394,14 +1389,6 @@ msgstr "Listenname"
|
||||
msgid "Lists"
|
||||
msgstr "Listen"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Load more activities"
|
||||
msgstr "Weitere Aktivitäten laden"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Loading..."
|
||||
msgstr "Wird geladen..."
|
||||
|
||||
#: src/views/auth/login/index.tsx:33
|
||||
msgid "Login | kan.bn"
|
||||
msgstr "Login | kan.bn"
|
||||
@@ -1430,12 +1417,12 @@ msgstr "Magic Link"
|
||||
msgid "Make template"
|
||||
msgstr "Als Vorlage speichern"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:113
|
||||
#: src/views/card/components/ActivityList.tsx:72
|
||||
msgid "marked a checklist item as incomplete"
|
||||
msgstr "hat ein Checklistenelement als unvollständig markiert"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:231
|
||||
#: src/views/card/components/ActivityList.tsx:196
|
||||
msgid "marked checklist item <0>{0}</0> as incomplete"
|
||||
msgstr "hat Checklistenelement <0>{0}</0> als unvollständig markiert"
|
||||
|
||||
@@ -1446,7 +1433,7 @@ msgstr "Mittlere Priorität"
|
||||
#: src/components/SideNavigation.tsx:121
|
||||
#: src/views/board/components/Filters.tsx:147
|
||||
#: src/views/board/components/NewCardForm.tsx:376
|
||||
#: src/views/card/index.tsx:130
|
||||
#: src/views/card/index.tsx:129
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Mitglieder"
|
||||
@@ -1467,11 +1454,11 @@ msgstr "monatliche Abrechnung"
|
||||
|
||||
#. placeholder {0}: truncate(fromList)
|
||||
#. placeholder {1}: truncate(toList)
|
||||
#: src/views/card/components/ActivityList.tsx:133
|
||||
#: src/views/card/components/ActivityList.tsx:98
|
||||
msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
msgstr "hat die Karte von <0>{0}</0> nach <1>{1}</1> verschoben"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:102
|
||||
#: src/views/card/components/ActivityList.tsx:61
|
||||
msgid "moved the card to another list"
|
||||
msgstr "hat die Karte in eine andere Liste verschoben"
|
||||
|
||||
@@ -1507,7 +1494,7 @@ msgstr "Neuer API-Schlüssel"
|
||||
msgid "New card"
|
||||
msgstr "Neue Karte"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:103
|
||||
#: src/views/card/components/NewChecklistForm.tsx:102
|
||||
msgid "New checklist"
|
||||
msgstr "Neue Checkliste"
|
||||
|
||||
@@ -1520,7 +1507,7 @@ msgid "New label"
|
||||
msgstr "Neues Label"
|
||||
|
||||
#: src/views/board/components/NewListForm.tsx:113
|
||||
#: src/views/board/index.tsx:462
|
||||
#: src/views/board/index.tsx:466
|
||||
msgid "New list"
|
||||
msgstr "Neue Liste"
|
||||
|
||||
@@ -1573,7 +1560,7 @@ msgstr "Keine Kreditkarte erforderlich"
|
||||
msgid "No dates"
|
||||
msgstr "Keine Termine"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:143
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
msgid "No download URL available for this attachment."
|
||||
msgstr "Für diesen Anhang ist keine Download-URL verfügbar."
|
||||
|
||||
@@ -1581,7 +1568,7 @@ msgstr "Für diesen Anhang ist keine Download-URL verfügbar."
|
||||
msgid "No keyboard shortcuts registered."
|
||||
msgstr "Keine Tastaturkürzel registriert."
|
||||
|
||||
#: src/views/board/index.tsx:488
|
||||
#: src/views/board/index.tsx:492
|
||||
msgid "No lists"
|
||||
msgstr "Keine Listen"
|
||||
|
||||
@@ -1732,27 +1719,25 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
|
||||
#: src/views/board/components/NewTemplateForm.tsx:77
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:73
|
||||
#: src/views/board/components/VisibilityButton.tsx:54
|
||||
#: src/views/board/index.tsx:170
|
||||
#: src/views/board/index.tsx:226
|
||||
#: src/views/board/index.tsx:174
|
||||
#: src/views/board/index.tsx:230
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:205
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:74
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:67
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:95
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:47
|
||||
#: src/views/card/components/Checklists.tsx:81
|
||||
#: src/views/card/components/Comment.tsx:65
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:60
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:88
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:52
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:46
|
||||
#: src/views/card/components/DueDateSelector.tsx:60
|
||||
#: src/views/card/components/LabelSelector.tsx:73
|
||||
#: src/views/card/components/ListSelector.tsx:53
|
||||
#: src/views/card/components/MemberSelector.tsx:80
|
||||
#: src/views/card/components/NewChecklistForm.tsx:71
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:90
|
||||
#: src/views/card/components/NewCommentForm.tsx:32
|
||||
#: src/views/card/index.tsx:187
|
||||
#: src/views/card/index.tsx:200
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:241
|
||||
@@ -1852,40 +1837,35 @@ msgstr "Entfernen"
|
||||
msgid "Remove member"
|
||||
msgstr "Mitglied entfernen"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:91
|
||||
msgid "removed {0} labels: <0>{labelList}</0>"
|
||||
msgstr "{0} Labels entfernt: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:104
|
||||
#: src/views/card/components/ActivityList.tsx:63
|
||||
msgid "removed a label from the card"
|
||||
msgstr "hat ein Label von der Karte entfernt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:106
|
||||
#: src/views/card/components/ActivityList.tsx:65
|
||||
msgid "removed a member from the card"
|
||||
msgstr "hat ein Mitglied von der Karte entfernt"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:173
|
||||
#: src/views/card/components/ActivityList.tsx:138
|
||||
msgid "removed label <0>{0}</0>"
|
||||
msgstr "hat Label <0>{0}</0> entfernt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:117
|
||||
#: src/views/card/components/ActivityList.tsx:276
|
||||
#: src/views/card/components/ActivityList.tsx:76
|
||||
#: src/views/card/components/ActivityList.tsx:241
|
||||
msgid "removed the due date"
|
||||
msgstr "hat den Fälligkeitstermin entfernt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:108
|
||||
#: src/views/card/components/ActivityList.tsx:67
|
||||
msgid "renamed a checklist"
|
||||
msgstr "hat eine Checkliste umbenannt"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:189
|
||||
#: src/views/card/components/ActivityList.tsx:154
|
||||
msgid "renamed checklist <0>{0}</0>"
|
||||
msgstr "hat Checkliste <0>{0}</0> umbenannt"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:213
|
||||
#: src/views/card/components/ActivityList.tsx:178
|
||||
msgid "renamed checklist item to <0>{0}</0>"
|
||||
msgstr "hat Checklistenelement in <0>{0}</0> umbenannt"
|
||||
|
||||
@@ -1924,7 +1904,7 @@ msgstr "Rolle"
|
||||
msgid "Run on your own infrastructure"
|
||||
msgstr "Auf eigener Infrastruktur betreiben"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:166
|
||||
#: src/views/card/components/Comment.tsx:165
|
||||
#: src/views/settings/components/Avatar.tsx:309
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
@@ -1962,7 +1942,7 @@ msgstr "Selbst hosten"
|
||||
msgid "Self host with Github"
|
||||
msgstr "Selbst hosten mit Github"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:142
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
msgid "self-assigned the card"
|
||||
msgstr "hat sich selbst die Karte zugewiesen"
|
||||
|
||||
@@ -1978,11 +1958,11 @@ msgstr "Feedback senden"
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:117
|
||||
#: src/views/card/components/DueDateSelector.tsx:116
|
||||
msgid "Set due date"
|
||||
msgstr "Fälligkeitsdatum festlegen"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:115
|
||||
#: src/views/card/components/ActivityList.tsx:74
|
||||
msgid "set the due date"
|
||||
msgstr "hat den Fälligkeitstermin festgelegt"
|
||||
|
||||
@@ -2107,8 +2087,8 @@ msgstr "Team-Plan"
|
||||
msgid "Teams"
|
||||
msgstr "Teams"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:417
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/board/index.tsx:421
|
||||
msgid "Template"
|
||||
msgstr "Vorlage"
|
||||
|
||||
@@ -2173,8 +2153,8 @@ msgstr "Sie werden keinen Zugriff mehr auf diesen Workspace haben."
|
||||
#: src/components/DeleteLabelConfirmation.tsx:44
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:39
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:59
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:69
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:58
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||
msgid "This action can't be undone."
|
||||
msgstr "Diese Aktion kann nicht rückgängig gemacht werden."
|
||||
|
||||
@@ -2182,7 +2162,7 @@ msgstr "Diese Aktion kann nicht rückgängig gemacht werden."
|
||||
msgid "This API key will only be shown once. Please save it in a secure location."
|
||||
msgstr "Dieser API-Schlüssel wird nur einmal angezeigt. Bitte speichern Sie ihn an einem sicheren Ort."
|
||||
|
||||
#: src/views/public/board/index.tsx:169
|
||||
#: src/views/public/board/index.tsx:168
|
||||
msgid "This board is private or does not exist"
|
||||
msgstr "Dieses Board ist privat oder existiert nicht"
|
||||
|
||||
@@ -2244,27 +2224,23 @@ msgstr "Trello-importe"
|
||||
msgid "Triaging"
|
||||
msgstr "Priorisierung"
|
||||
|
||||
#: src/views/home/components/Logos.tsx:67
|
||||
#: src/views/home/components/Logos.tsx:73
|
||||
msgid "Trusted by fast-moving teams<0/>around the world"
|
||||
msgstr "Von schnell agierenden Teams<0/>weltweit vertraut"
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:88
|
||||
msgid "Unable to add checklist item"
|
||||
msgstr "Checklistenelement kann nicht hinzugefügt werden"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Kommentar konnte nicht hinzugefügt werden"
|
||||
|
||||
#: src/views/card/index.tsx:199
|
||||
msgid "Unable to add label"
|
||||
msgstr "Label konnte nicht hinzugefügt werden"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:181
|
||||
msgid "Unable to create card"
|
||||
msgstr "Karte konnte nicht erstellt werden"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistForm.tsx:69
|
||||
msgid "Unable to create checklist"
|
||||
msgstr "Checkliste kann nicht erstellt werden"
|
||||
|
||||
@@ -2281,7 +2257,7 @@ msgstr "Vorlage konnte nicht erstellt werden"
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Workspace konnte nicht erstellt werden"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:72
|
||||
msgid "Unable to delete attachment"
|
||||
msgstr "Anhang kann nicht gelöscht werden"
|
||||
|
||||
@@ -2289,15 +2265,15 @@ msgstr "Anhang kann nicht gelöscht werden"
|
||||
msgid "Unable to delete card"
|
||||
msgstr "Karte konnte nicht gelöscht werden"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:36
|
||||
msgid "Unable to delete checklist"
|
||||
msgstr "Checkliste kann nicht gelöscht werden"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:94
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:87
|
||||
msgid "Unable to delete checklist item"
|
||||
msgstr "Checklistenelement kann nicht gelöscht werden"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:44
|
||||
msgid "Unable to delete comment"
|
||||
msgstr "Kommentar konnte nicht gelöscht werden"
|
||||
|
||||
@@ -2305,10 +2281,6 @@ msgstr "Kommentar konnte nicht gelöscht werden"
|
||||
msgid "Unable to remove member"
|
||||
msgstr "Mitglied konnte nicht entfernt werden"
|
||||
|
||||
#: src/views/card/components/Checklists.tsx:80
|
||||
msgid "Unable to reorder checklist item"
|
||||
msgstr "Checklisten-Element konnte nicht neu angeordnet werden"
|
||||
|
||||
#: src/components/FeedbackModal.tsx:40
|
||||
msgid "Unable to send feedback"
|
||||
msgstr "Feedback konnte nicht gesendet werden"
|
||||
@@ -2321,46 +2293,46 @@ msgstr "Board-URL kann nicht aktualisiert werden"
|
||||
msgid "Unable to update board visibility"
|
||||
msgstr "Board-Sichtbarkeit konnte nicht aktualisiert werden"
|
||||
|
||||
#: src/views/board/index.tsx:225
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/board/index.tsx:229
|
||||
#: src/views/card/index.tsx:185
|
||||
msgid "Unable to update card"
|
||||
msgstr "Karte konnte nicht aktualisiert werden"
|
||||
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:45
|
||||
msgid "Unable to update checklist"
|
||||
msgstr "Checkliste kann nicht aktualisiert werden"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:66
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:59
|
||||
msgid "Unable to update checklist item"
|
||||
msgstr "Checklistenelement kann nicht aktualisiert werden"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/Comment.tsx:63
|
||||
msgid "Unable to update comment"
|
||||
msgstr "Kommentar konnte nicht aktualisiert werden"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/DueDateSelector.tsx:58
|
||||
msgid "Unable to update due date"
|
||||
msgstr "Fälligkeitsdatum konnte nicht aktualisiert werden"
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/LabelSelector.tsx:71
|
||||
msgid "Unable to update labels"
|
||||
msgstr "Labels konnten nicht aktualisiert werden"
|
||||
|
||||
#: src/views/board/index.tsx:169
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/board/index.tsx:173
|
||||
#: src/views/card/components/ListSelector.tsx:51
|
||||
msgid "Unable to update list"
|
||||
msgstr "Liste konnte nicht aktualisiert werden"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/MemberSelector.tsx:78
|
||||
msgid "Unable to update members"
|
||||
msgstr "Mitglieder konnten nicht aktualisiert werden"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:156
|
||||
#: src/views/card/components/ActivityList.tsx:121
|
||||
msgid "unassigned <0>{0}</0> from the card"
|
||||
msgstr "hat <0>{0}</0> von der Karte entfernt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:153
|
||||
#: src/views/card/components/ActivityList.tsx:118
|
||||
msgid "unassigned themselves from the card"
|
||||
msgstr "hat sich selbst von der Karte entfernt"
|
||||
|
||||
@@ -2419,24 +2391,24 @@ msgstr "Aktualisieren"
|
||||
msgid "Update label"
|
||||
msgstr "Label aktualisieren"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:111
|
||||
#: src/views/card/components/ActivityList.tsx:70
|
||||
msgid "updated a checklist item"
|
||||
msgstr "hat ein Checklistenelement aktualisiert"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:101
|
||||
#: src/views/card/components/ActivityList.tsx:60
|
||||
msgid "updated the description"
|
||||
msgstr "hat die Beschreibung aktualisiert"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:116
|
||||
#: src/views/card/components/ActivityList.tsx:75
|
||||
msgid "updated the due date"
|
||||
msgstr "hat den Fälligkeitstermin aktualisiert"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:100
|
||||
#: src/views/card/components/ActivityList.tsx:59
|
||||
msgid "updated the title"
|
||||
msgstr "hat den Titel aktualisiert"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:125
|
||||
#: src/views/card/components/ActivityList.tsx:90
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "hat den Titel in <0>{0}</0> geändert"
|
||||
|
||||
@@ -2450,8 +2422,8 @@ msgstr "Upgrade auf Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Upgrade auf Pro ($29/Monat)"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
#: src/views/card/components/AttachmentUpload.tsx:32
|
||||
#: src/views/card/components/AttachmentUpload.tsx:78
|
||||
msgid "Upload failed"
|
||||
msgstr "Hochladen fehlgeschlagen"
|
||||
|
||||
@@ -2504,7 +2476,7 @@ msgstr "Verwalte deine Abrechnung und dein Abonnement."
|
||||
msgid "View docs"
|
||||
msgstr "Dokumentation ansehen"
|
||||
|
||||
#: src/views/public/board/index.tsx:142
|
||||
#: src/views/public/board/index.tsx:141
|
||||
msgid "View only"
|
||||
msgstr "Nur ansehen"
|
||||
|
||||
@@ -2512,7 +2484,7 @@ msgstr "Nur ansehen"
|
||||
msgid "View our roadmap."
|
||||
msgstr "Sieh dir unsere roadmap an."
|
||||
|
||||
#: src/views/public/board/index.tsx:172
|
||||
#: src/views/public/board/index.tsx:171
|
||||
msgid "View workspace"
|
||||
msgstr "Workspace anzeigen"
|
||||
|
||||
@@ -2557,10 +2529,10 @@ msgid "Why make an open source Trello?"
|
||||
msgstr "Warum ein open source Trello entwickeln?"
|
||||
|
||||
#: src/components/SettingsLayout.tsx:39
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/members/index.tsx:173
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/public/board/index.tsx:113
|
||||
#: src/views/public/boards/index.tsx:66
|
||||
msgid "Workspace"
|
||||
msgstr "Arbeitsbereich"
|
||||
@@ -2694,7 +2666,7 @@ msgstr "Deine Boards wurden importiert."
|
||||
msgid "Your display name has been updated."
|
||||
msgstr "Dein Anzeigename wurde aktualisiert."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:27
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
msgid "Your file has been uploaded successfully."
|
||||
msgstr "Ihre Datei wurde erfolgreich hochgeladen."
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:124
|
||||
#: src/views/card/components/Comment.tsx:123
|
||||
msgid " (edited)"
|
||||
msgstr " (edited)"
|
||||
|
||||
@@ -31,7 +31,7 @@ msgstr "{0}"
|
||||
#. placeholder {1}: board?.name ?? t`Board`
|
||||
#. placeholder {1}: workspace.name ?? t`Workspace`
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "{0} | {1}"
|
||||
msgstr "{0} | {1}"
|
||||
|
||||
@@ -41,7 +41,7 @@ msgid "{0} labels"
|
||||
msgstr "{0} labels"
|
||||
|
||||
#. placeholder {0}: isTemplate ? "Template" : "Board"
|
||||
#: src/views/board/index.tsx:408
|
||||
#: src/views/board/index.tsx:412
|
||||
msgid "{0} not found"
|
||||
msgstr "{0} not found"
|
||||
|
||||
@@ -95,7 +95,7 @@ msgstr "Account deleted"
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
|
||||
#: src/views/card/index.tsx:386
|
||||
#: src/views/card/index.tsx:352
|
||||
#: src/views/public/board/CardModal.tsx:158
|
||||
msgid "Activity"
|
||||
msgstr "Activity"
|
||||
@@ -112,12 +112,12 @@ msgstr "Activity logs"
|
||||
msgid "Add a card"
|
||||
msgstr "Add a card"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:147
|
||||
#: src/views/card/components/NewCommentForm.tsx:55
|
||||
#: src/views/card/components/Comment.tsx:146
|
||||
#: src/views/card/components/NewCommentForm.tsx:57
|
||||
msgid "Add a comment..."
|
||||
msgstr "Add a comment..."
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:141
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:140
|
||||
msgid "Add an item..."
|
||||
msgstr "Add an item..."
|
||||
|
||||
@@ -133,53 +133,48 @@ msgstr "Add description... (type '/' to open commands or '@' to mention)"
|
||||
#~ msgid "Add description... (type '/' to open commands)"
|
||||
#~ msgstr "Add description... (type '/' to open commands)"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:195
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:172
|
||||
msgid "Add details..."
|
||||
msgstr "Add details..."
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:110
|
||||
#: src/views/card/components/LabelSelector.tsx:115
|
||||
#: src/views/card/components/LabelSelector.tsx:109
|
||||
#: src/views/card/components/LabelSelector.tsx:114
|
||||
msgid "Add label"
|
||||
msgstr "Add label"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:131
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:257
|
||||
msgid "Add member"
|
||||
msgstr "Add member"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:77
|
||||
msgid "added {0} labels: <0>{labelList}</0>"
|
||||
msgstr "added {0} labels: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
#: src/views/card/components/ActivityList.tsx:66
|
||||
msgid "added a checklist"
|
||||
msgstr "added a checklist"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
#: src/views/card/components/ActivityList.tsx:69
|
||||
msgid "added a checklist item"
|
||||
msgstr "added a checklist item"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:103
|
||||
#: src/views/card/components/ActivityList.tsx:62
|
||||
msgid "added a label to the card"
|
||||
msgstr "added a label to the card"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:105
|
||||
#: src/views/card/components/ActivityList.tsx:64
|
||||
msgid "added a member to the card"
|
||||
msgstr "added a member to the card"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:181
|
||||
#: src/views/card/components/ActivityList.tsx:146
|
||||
msgid "added checklist <0>{0}</0>"
|
||||
msgstr "added checklist <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
#: src/views/card/components/ActivityList.tsx:170
|
||||
msgid "added checklist item <0>{0}</0>"
|
||||
msgstr "added checklist item <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:165
|
||||
#: src/views/card/components/ActivityList.tsx:130
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "added label <0>{0}</0>"
|
||||
|
||||
@@ -282,11 +277,11 @@ msgstr "Are you sure you want to delete this {0}?"
|
||||
msgid "Are you sure you want to delete this card?"
|
||||
msgstr "Are you sure you want to delete this card?"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:56
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:55
|
||||
msgid "Are you sure you want to delete this checklist?"
|
||||
msgstr "Are you sure you want to delete this checklist?"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:65
|
||||
msgid "Are you sure you want to delete this comment?"
|
||||
msgstr "Are you sure you want to delete this comment?"
|
||||
|
||||
@@ -303,7 +298,7 @@ msgstr "Are you sure you want to delete your account?"
|
||||
#~ msgstr "around the world"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:145
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
msgid "assigned <0>{0}</0> to the card"
|
||||
msgstr "assigned <0>{0}</0> to the card"
|
||||
|
||||
@@ -315,7 +310,7 @@ msgstr "assigned <0>{0}</0> to the card"
|
||||
msgid "Assignees"
|
||||
msgstr "Assignees"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
#: src/views/card/components/AttachmentUpload.tsx:25
|
||||
msgid "Attachment uploaded"
|
||||
msgstr "Attachment uploaded"
|
||||
|
||||
@@ -357,9 +352,9 @@ msgstr "Billing portal"
|
||||
msgid "Blog Post"
|
||||
msgstr "Blog Post"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/card/index.tsx:238
|
||||
#: src/views/public/board/index.tsx:113
|
||||
msgid "Board"
|
||||
msgstr "Board"
|
||||
|
||||
@@ -385,7 +380,7 @@ msgstr "Board name cannot exceed 100 characters"
|
||||
msgid "Board name is required"
|
||||
msgstr "Board name is required"
|
||||
|
||||
#: src/views/public/board/index.tsx:166
|
||||
#: src/views/public/board/index.tsx:165
|
||||
msgid "Board not found"
|
||||
msgstr "Board not found"
|
||||
|
||||
@@ -401,7 +396,7 @@ msgstr "Board URL can only contain letters, numbers, and hyphens"
|
||||
msgid "Board URL cannot exceed 60 characters"
|
||||
msgstr "Board URL cannot exceed 60 characters"
|
||||
|
||||
#: src/views/public/board/index.tsx:80
|
||||
#: src/views/public/board/index.tsx:79
|
||||
msgid "Board URL copied to clipboard"
|
||||
msgstr "Board URL copied to clipboard"
|
||||
|
||||
@@ -444,10 +439,10 @@ msgstr "Bug Report"
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:44
|
||||
#: src/views/card/components/Comment.tsx:159
|
||||
#: src/views/card/components/Comment.tsx:158
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:77
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:63
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: src/views/settings/components/Avatar.tsx:306
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
@@ -457,12 +452,12 @@ msgstr "Bug Report"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "Card"
|
||||
msgstr "Card"
|
||||
|
||||
#: src/views/card/index.tsx:306
|
||||
#: src/views/card/index.tsx:342
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:308
|
||||
msgid "Card not found"
|
||||
msgstr "Card not found"
|
||||
|
||||
@@ -485,8 +480,8 @@ msgstr "Change Password"
|
||||
msgid "Change your language preferences."
|
||||
msgstr "Change your language preferences."
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:255
|
||||
#: src/views/card/components/ActivityList.tsx:269
|
||||
#: src/views/card/components/ActivityList.tsx:220
|
||||
#: src/views/card/components/ActivityList.tsx:234
|
||||
msgid "changed the due date to <0>{formattedDate}</0>"
|
||||
msgstr "changed the due date to <0>{formattedDate}</0>"
|
||||
|
||||
@@ -499,7 +494,7 @@ msgstr "Check out some of our favorite open source projects."
|
||||
msgid "Check your inbox"
|
||||
msgstr "Check your inbox"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:119
|
||||
#: src/views/card/components/NewChecklistForm.tsx:118
|
||||
msgid "Checklist name"
|
||||
msgstr "Checklist name"
|
||||
|
||||
@@ -560,12 +555,12 @@ msgstr "Complete"
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Complete control and ownership:"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:112
|
||||
#: src/views/card/components/ActivityList.tsx:71
|
||||
msgid "completed a checklist item"
|
||||
msgstr "completed a checklist item"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:222
|
||||
#: src/views/card/components/ActivityList.tsx:187
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
msgstr "completed checklist item <0>{0}</0>"
|
||||
|
||||
@@ -651,7 +646,7 @@ msgstr "Create API key"
|
||||
msgid "Create card"
|
||||
msgstr "Create card"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:135
|
||||
#: src/views/card/components/NewChecklistForm.tsx:134
|
||||
msgid "Create checklist"
|
||||
msgstr "Create checklist"
|
||||
|
||||
@@ -682,12 +677,12 @@ msgid "Create new key"
|
||||
msgstr "Create new key"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:414
|
||||
#: src/views/card/components/LabelSelector.tsx:98
|
||||
#: src/views/card/components/LabelSelector.tsx:97
|
||||
msgid "Create new label"
|
||||
msgstr "Create new label"
|
||||
|
||||
#: src/views/board/index.tsx:64
|
||||
#: src/views/board/index.tsx:499
|
||||
#: src/views/board/index.tsx:65
|
||||
#: src/views/board/index.tsx:503
|
||||
msgid "Create new list"
|
||||
msgstr "Create new list"
|
||||
|
||||
@@ -704,7 +699,7 @@ msgstr "Create template"
|
||||
msgid "Create workspace"
|
||||
msgstr "Create workspace"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:99
|
||||
#: src/views/card/components/ActivityList.tsx:58
|
||||
msgid "created the card"
|
||||
msgstr "created the card"
|
||||
|
||||
@@ -770,8 +765,8 @@ msgstr "Deactivate invite link"
|
||||
#: src/components/LabelForm.tsx:228
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:47
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:67
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:83
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||
msgid "Delete"
|
||||
msgstr "Delete"
|
||||
|
||||
@@ -789,7 +784,7 @@ msgstr "Delete board"
|
||||
msgid "Delete card"
|
||||
msgstr "Delete card"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:92
|
||||
#: src/views/card/components/Comment.tsx:91
|
||||
msgid "Delete comment"
|
||||
msgstr "Delete comment"
|
||||
|
||||
@@ -807,21 +802,21 @@ msgstr "Delete template"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Delete workspace"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:109
|
||||
#: src/views/card/components/ActivityList.tsx:68
|
||||
msgid "deleted a checklist"
|
||||
msgstr "deleted a checklist"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:114
|
||||
#: src/views/card/components/ActivityList.tsx:73
|
||||
msgid "deleted a checklist item"
|
||||
msgstr "deleted a checklist item"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:197
|
||||
#: src/views/card/components/ActivityList.tsx:162
|
||||
msgid "deleted checklist <0>{0}</0>"
|
||||
msgstr "deleted checklist <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:240
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
msgid "deleted checklist item <0>{0}</0>"
|
||||
msgstr "deleted checklist item <0>{0}</0>"
|
||||
|
||||
@@ -887,13 +882,13 @@ msgstr "Don't have an account? <0><1>Sign up</1></0>"
|
||||
msgid "Done"
|
||||
msgstr "Done"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:141
|
||||
msgid "Download failed"
|
||||
msgstr "Download failed"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:171
|
||||
#: src/views/board/components/NewCardForm.tsx:469
|
||||
#: src/views/card/index.tsx:139
|
||||
#: src/views/card/index.tsx:138
|
||||
msgid "Due date"
|
||||
msgstr "Due date"
|
||||
|
||||
@@ -918,7 +913,7 @@ msgstr "Due tomorrow"
|
||||
msgid "Edit board URL"
|
||||
msgstr "Edit board URL"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:83
|
||||
#: src/views/card/components/Comment.tsx:82
|
||||
msgid "Edit comment"
|
||||
msgstr "Edit comment"
|
||||
|
||||
@@ -1075,8 +1070,8 @@ msgstr "Failed to create board"
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
msgstr "Failed to login with {0}. Please try again."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:34
|
||||
#: src/views/card/components/AttachmentUpload.tsx:80
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
msgid "Failed to upload attachment. Please try again."
|
||||
msgstr "Failed to upload attachment. Please try again."
|
||||
|
||||
@@ -1195,7 +1190,7 @@ msgstr "Get started by creating a new {0}"
|
||||
#~ msgid "Get started by creating a new board"
|
||||
#~ msgstr "Get started by creating a new board"
|
||||
|
||||
#: src/views/board/index.tsx:491
|
||||
#: src/views/board/index.tsx:495
|
||||
msgid "Get started by creating a new list"
|
||||
msgstr "Get started by creating a new list"
|
||||
|
||||
@@ -1390,7 +1385,7 @@ msgstr "Invite links"
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:367
|
||||
msgid "Invite member"
|
||||
msgstr "Invite member"
|
||||
@@ -1439,7 +1434,7 @@ msgstr "Keyboard Shortcuts"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:418
|
||||
#: src/views/card/index.tsx:121
|
||||
#: src/views/card/index.tsx:120
|
||||
msgid "Labels"
|
||||
msgstr "Labels"
|
||||
|
||||
@@ -1489,11 +1484,11 @@ msgstr "License"
|
||||
msgid "Light"
|
||||
msgstr "Light"
|
||||
|
||||
#: src/views/public/board/index.tsx:78
|
||||
#: src/views/public/board/index.tsx:77
|
||||
msgid "Link copied"
|
||||
msgstr "Link copied"
|
||||
|
||||
#: src/views/card/index.tsx:113
|
||||
#: src/views/card/index.tsx:112
|
||||
msgid "List"
|
||||
msgstr "List"
|
||||
|
||||
@@ -1505,14 +1500,6 @@ msgstr "List name"
|
||||
msgid "Lists"
|
||||
msgstr "Lists"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Load more activities"
|
||||
msgstr "Load more activities"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Loading..."
|
||||
msgstr "Loading..."
|
||||
|
||||
#: src/views/auth/login/index.tsx:33
|
||||
msgid "Login | kan.bn"
|
||||
msgstr "Login | kan.bn"
|
||||
@@ -1541,12 +1528,12 @@ msgstr "magic link"
|
||||
msgid "Make template"
|
||||
msgstr "Make template"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:113
|
||||
#: src/views/card/components/ActivityList.tsx:72
|
||||
msgid "marked a checklist item as incomplete"
|
||||
msgstr "marked a checklist item as incomplete"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:231
|
||||
#: src/views/card/components/ActivityList.tsx:196
|
||||
msgid "marked checklist item <0>{0}</0> as incomplete"
|
||||
msgstr "marked checklist item <0>{0}</0> as incomplete"
|
||||
|
||||
@@ -1557,7 +1544,7 @@ msgstr "Medium Priority"
|
||||
#: src/components/SideNavigation.tsx:121
|
||||
#: src/views/board/components/Filters.tsx:147
|
||||
#: src/views/board/components/NewCardForm.tsx:376
|
||||
#: src/views/card/index.tsx:130
|
||||
#: src/views/card/index.tsx:129
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Members"
|
||||
@@ -1578,7 +1565,7 @@ msgstr "monthly billing"
|
||||
|
||||
#. placeholder {0}: truncate(fromList)
|
||||
#. placeholder {1}: truncate(toList)
|
||||
#: src/views/card/components/ActivityList.tsx:133
|
||||
#: src/views/card/components/ActivityList.tsx:98
|
||||
msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
msgstr "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
|
||||
@@ -1586,7 +1573,7 @@ msgstr "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
#~ msgid "moved the card from <0>{fromList}</0> to<1>{toList}</1>"
|
||||
#~ msgstr "moved the card from <0>{fromList}</0> to<1>{toList}</1>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:102
|
||||
#: src/views/card/components/ActivityList.tsx:61
|
||||
msgid "moved the card to another list"
|
||||
msgstr "moved the card to another list"
|
||||
|
||||
@@ -1630,7 +1617,7 @@ msgstr "New API key"
|
||||
msgid "New card"
|
||||
msgstr "New card"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:103
|
||||
#: src/views/card/components/NewChecklistForm.tsx:102
|
||||
msgid "New checklist"
|
||||
msgstr "New checklist"
|
||||
|
||||
@@ -1643,7 +1630,7 @@ msgid "New label"
|
||||
msgstr "New label"
|
||||
|
||||
#: src/views/board/components/NewListForm.tsx:113
|
||||
#: src/views/board/index.tsx:462
|
||||
#: src/views/board/index.tsx:466
|
||||
msgid "New list"
|
||||
msgstr "New list"
|
||||
|
||||
@@ -1704,7 +1691,7 @@ msgstr "No credit card required"
|
||||
msgid "No dates"
|
||||
msgstr "No dates"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:143
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
msgid "No download URL available for this attachment."
|
||||
msgstr "No download URL available for this attachment."
|
||||
|
||||
@@ -1712,7 +1699,7 @@ msgstr "No download URL available for this attachment."
|
||||
msgid "No keyboard shortcuts registered."
|
||||
msgstr "No keyboard shortcuts registered."
|
||||
|
||||
#: src/views/board/index.tsx:488
|
||||
#: src/views/board/index.tsx:492
|
||||
msgid "No lists"
|
||||
msgstr "No lists"
|
||||
|
||||
@@ -1863,27 +1850,25 @@ msgstr "Please select a file to upload."
|
||||
#: src/views/board/components/NewTemplateForm.tsx:77
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:73
|
||||
#: src/views/board/components/VisibilityButton.tsx:54
|
||||
#: src/views/board/index.tsx:170
|
||||
#: src/views/board/index.tsx:226
|
||||
#: src/views/board/index.tsx:174
|
||||
#: src/views/board/index.tsx:230
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:205
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:74
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:67
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:95
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:47
|
||||
#: src/views/card/components/Checklists.tsx:81
|
||||
#: src/views/card/components/Comment.tsx:65
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:60
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:88
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:52
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:46
|
||||
#: src/views/card/components/DueDateSelector.tsx:60
|
||||
#: src/views/card/components/LabelSelector.tsx:73
|
||||
#: src/views/card/components/ListSelector.tsx:53
|
||||
#: src/views/card/components/MemberSelector.tsx:80
|
||||
#: src/views/card/components/NewChecklistForm.tsx:71
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:90
|
||||
#: src/views/card/components/NewCommentForm.tsx:32
|
||||
#: src/views/card/index.tsx:187
|
||||
#: src/views/card/index.tsx:200
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:241
|
||||
@@ -1983,21 +1968,16 @@ msgstr "Remove"
|
||||
msgid "Remove member"
|
||||
msgstr "Remove member"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:91
|
||||
msgid "removed {0} labels: <0>{labelList}</0>"
|
||||
msgstr "removed {0} labels: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:104
|
||||
#: src/views/card/components/ActivityList.tsx:63
|
||||
msgid "removed a label from the card"
|
||||
msgstr "removed a label from the card"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:106
|
||||
#: src/views/card/components/ActivityList.tsx:65
|
||||
msgid "removed a member from the card"
|
||||
msgstr "removed a member from the card"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:173
|
||||
#: src/views/card/components/ActivityList.tsx:138
|
||||
msgid "removed label <0>{0}</0>"
|
||||
msgstr "removed label <0>{0}</0>"
|
||||
|
||||
@@ -2005,22 +1985,22 @@ msgstr "removed label <0>{0}</0>"
|
||||
#~ msgid "removed label <0>{label}</0>"
|
||||
#~ msgstr "removed label <0>{label}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:117
|
||||
#: src/views/card/components/ActivityList.tsx:276
|
||||
#: src/views/card/components/ActivityList.tsx:76
|
||||
#: src/views/card/components/ActivityList.tsx:241
|
||||
msgid "removed the due date"
|
||||
msgstr "removed the due date"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:108
|
||||
#: src/views/card/components/ActivityList.tsx:67
|
||||
msgid "renamed a checklist"
|
||||
msgstr "renamed a checklist"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:189
|
||||
#: src/views/card/components/ActivityList.tsx:154
|
||||
msgid "renamed checklist <0>{0}</0>"
|
||||
msgstr "renamed checklist <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:213
|
||||
#: src/views/card/components/ActivityList.tsx:178
|
||||
msgid "renamed checklist item to <0>{0}</0>"
|
||||
msgstr "renamed checklist item to <0>{0}</0>"
|
||||
|
||||
@@ -2063,7 +2043,7 @@ msgstr "Role"
|
||||
msgid "Run on your own infrastructure"
|
||||
msgstr "Run on your own infrastructure"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:166
|
||||
#: src/views/card/components/Comment.tsx:165
|
||||
#: src/views/settings/components/Avatar.tsx:309
|
||||
msgid "Save"
|
||||
msgstr "Save"
|
||||
@@ -2101,7 +2081,7 @@ msgstr "Self Host"
|
||||
msgid "Self host with Github"
|
||||
msgstr "Self host with Github"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:142
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
msgid "self-assigned the card"
|
||||
msgstr "self-assigned the card"
|
||||
|
||||
@@ -2121,11 +2101,11 @@ msgstr "Send feedback"
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:117
|
||||
#: src/views/card/components/DueDateSelector.tsx:116
|
||||
msgid "Set due date"
|
||||
msgstr "Set due date"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:115
|
||||
#: src/views/card/components/ActivityList.tsx:74
|
||||
msgid "set the due date"
|
||||
msgstr "set the due date"
|
||||
|
||||
@@ -2258,8 +2238,8 @@ msgstr "Team Plan"
|
||||
msgid "Teams"
|
||||
msgstr "Teams"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:417
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/board/index.tsx:421
|
||||
msgid "Template"
|
||||
msgstr "Template"
|
||||
|
||||
@@ -2324,8 +2304,8 @@ msgstr "They won't be able to access this workspace."
|
||||
#: src/components/DeleteLabelConfirmation.tsx:44
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:39
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:59
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:69
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:58
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||
msgid "This action can't be undone."
|
||||
msgstr "This action can't be undone."
|
||||
|
||||
@@ -2333,7 +2313,7 @@ msgstr "This action can't be undone."
|
||||
msgid "This API key will only be shown once. Please save it in a secure location."
|
||||
msgstr "This API key will only be shown once. Please save it in a secure location."
|
||||
|
||||
#: src/views/public/board/index.tsx:169
|
||||
#: src/views/public/board/index.tsx:168
|
||||
msgid "This board is private or does not exist"
|
||||
msgstr "This board is private or does not exist"
|
||||
|
||||
@@ -2403,27 +2383,23 @@ msgstr "Triaging"
|
||||
#~ msgid "Trusted by fast-moving teams"
|
||||
#~ msgstr "Trusted by fast-moving teams"
|
||||
|
||||
#: src/views/home/components/Logos.tsx:67
|
||||
#: src/views/home/components/Logos.tsx:73
|
||||
msgid "Trusted by fast-moving teams<0/>around the world"
|
||||
msgstr "Trusted by fast-moving teams<0/>around the world"
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:88
|
||||
msgid "Unable to add checklist item"
|
||||
msgstr "Unable to add checklist item"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Unable to add comment"
|
||||
|
||||
#: src/views/card/index.tsx:199
|
||||
msgid "Unable to add label"
|
||||
msgstr "Unable to add label"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:181
|
||||
msgid "Unable to create card"
|
||||
msgstr "Unable to create card"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistForm.tsx:69
|
||||
msgid "Unable to create checklist"
|
||||
msgstr "Unable to create checklist"
|
||||
|
||||
@@ -2440,7 +2416,7 @@ msgstr "Unable to create template"
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Unable to create workspace"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:72
|
||||
msgid "Unable to delete attachment"
|
||||
msgstr "Unable to delete attachment"
|
||||
|
||||
@@ -2448,15 +2424,15 @@ msgstr "Unable to delete attachment"
|
||||
msgid "Unable to delete card"
|
||||
msgstr "Unable to delete card"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:36
|
||||
msgid "Unable to delete checklist"
|
||||
msgstr "Unable to delete checklist"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:94
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:87
|
||||
msgid "Unable to delete checklist item"
|
||||
msgstr "Unable to delete checklist item"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:44
|
||||
msgid "Unable to delete comment"
|
||||
msgstr "Unable to delete comment"
|
||||
|
||||
@@ -2464,10 +2440,6 @@ msgstr "Unable to delete comment"
|
||||
msgid "Unable to remove member"
|
||||
msgstr "Unable to remove member"
|
||||
|
||||
#: src/views/card/components/Checklists.tsx:80
|
||||
msgid "Unable to reorder checklist item"
|
||||
msgstr "Unable to reorder checklist item"
|
||||
|
||||
#: src/components/FeedbackModal.tsx:40
|
||||
msgid "Unable to send feedback"
|
||||
msgstr "Unable to send feedback"
|
||||
@@ -2480,42 +2452,42 @@ msgstr "Unable to update board URL"
|
||||
msgid "Unable to update board visibility"
|
||||
msgstr "Unable to update board visibility"
|
||||
|
||||
#: src/views/board/index.tsx:225
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/board/index.tsx:229
|
||||
#: src/views/card/index.tsx:185
|
||||
msgid "Unable to update card"
|
||||
msgstr "Unable to update card"
|
||||
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:45
|
||||
msgid "Unable to update checklist"
|
||||
msgstr "Unable to update checklist"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:66
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:59
|
||||
msgid "Unable to update checklist item"
|
||||
msgstr "Unable to update checklist item"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/Comment.tsx:63
|
||||
msgid "Unable to update comment"
|
||||
msgstr "Unable to update comment"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/DueDateSelector.tsx:58
|
||||
msgid "Unable to update due date"
|
||||
msgstr "Unable to update due date"
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/LabelSelector.tsx:71
|
||||
msgid "Unable to update labels"
|
||||
msgstr "Unable to update labels"
|
||||
|
||||
#: src/views/board/index.tsx:169
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/board/index.tsx:173
|
||||
#: src/views/card/components/ListSelector.tsx:51
|
||||
msgid "Unable to update list"
|
||||
msgstr "Unable to update list"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/MemberSelector.tsx:78
|
||||
msgid "Unable to update members"
|
||||
msgstr "Unable to update members"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:156
|
||||
#: src/views/card/components/ActivityList.tsx:121
|
||||
msgid "unassigned <0>{0}</0> from the card"
|
||||
msgstr "unassigned <0>{0}</0> from the card"
|
||||
|
||||
@@ -2523,7 +2495,7 @@ msgstr "unassigned <0>{0}</0> from the card"
|
||||
#~ msgid "unassigned <0>{memberName}</0> from the card"
|
||||
#~ msgstr "unassigned <0>{memberName}</0> from the card"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:153
|
||||
#: src/views/card/components/ActivityList.tsx:118
|
||||
msgid "unassigned themselves from the card"
|
||||
msgstr "unassigned themselves from the card"
|
||||
|
||||
@@ -2582,24 +2554,24 @@ msgstr "Update"
|
||||
msgid "Update label"
|
||||
msgstr "Update label"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:111
|
||||
#: src/views/card/components/ActivityList.tsx:70
|
||||
msgid "updated a checklist item"
|
||||
msgstr "updated a checklist item"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:101
|
||||
#: src/views/card/components/ActivityList.tsx:60
|
||||
msgid "updated the description"
|
||||
msgstr "updated the description"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:116
|
||||
#: src/views/card/components/ActivityList.tsx:75
|
||||
msgid "updated the due date"
|
||||
msgstr "updated the due date"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:100
|
||||
#: src/views/card/components/ActivityList.tsx:59
|
||||
msgid "updated the title"
|
||||
msgstr "updated the title"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:125
|
||||
#: src/views/card/components/ActivityList.tsx:90
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "updated the title to <0>{0}</0>"
|
||||
|
||||
@@ -2625,8 +2597,8 @@ msgstr "Upgrade to Pro ($29/month)"
|
||||
#~ msgid "Upgrade to Team Plan"
|
||||
#~ msgstr "Upgrade to Team Plan"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
#: src/views/card/components/AttachmentUpload.tsx:32
|
||||
#: src/views/card/components/AttachmentUpload.tsx:78
|
||||
msgid "Upload failed"
|
||||
msgstr "Upload failed"
|
||||
|
||||
@@ -2679,7 +2651,7 @@ msgstr "View and manage your billing and subscription."
|
||||
msgid "View docs"
|
||||
msgstr "View docs"
|
||||
|
||||
#: src/views/public/board/index.tsx:142
|
||||
#: src/views/public/board/index.tsx:141
|
||||
msgid "View only"
|
||||
msgstr "View only"
|
||||
|
||||
@@ -2687,7 +2659,7 @@ msgstr "View only"
|
||||
msgid "View our roadmap."
|
||||
msgstr "View our roadmap."
|
||||
|
||||
#: src/views/public/board/index.tsx:172
|
||||
#: src/views/public/board/index.tsx:171
|
||||
msgid "View workspace"
|
||||
msgstr "View workspace"
|
||||
|
||||
@@ -2740,10 +2712,10 @@ msgid "Why make an open source Trello?"
|
||||
msgstr "Why make an open source Trello?"
|
||||
|
||||
#: src/components/SettingsLayout.tsx:39
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/members/index.tsx:173
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/public/board/index.tsx:113
|
||||
#: src/views/public/boards/index.tsx:66
|
||||
msgid "Workspace"
|
||||
msgstr "Workspace"
|
||||
@@ -2881,7 +2853,7 @@ msgstr "Your boards have been imported."
|
||||
msgid "Your display name has been updated."
|
||||
msgstr "Your display name has been updated."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:27
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
msgid "Your file has been uploaded successfully."
|
||||
msgstr "Your file has been uploaded successfully."
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:124
|
||||
#: src/views/card/components/Comment.tsx:123
|
||||
msgid " (edited)"
|
||||
msgstr " (editado)"
|
||||
|
||||
@@ -31,7 +31,7 @@ msgstr "{0}"
|
||||
#. placeholder {1}: board?.name ?? t`Board`
|
||||
#. placeholder {1}: workspace.name ?? t`Workspace`
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "{0} | {1}"
|
||||
msgstr "{0} | {1}"
|
||||
|
||||
@@ -41,7 +41,7 @@ msgid "{0} labels"
|
||||
msgstr "{0} etiquetas"
|
||||
|
||||
#. placeholder {0}: isTemplate ? "Template" : "Board"
|
||||
#: src/views/board/index.tsx:408
|
||||
#: src/views/board/index.tsx:412
|
||||
msgid "{0} not found"
|
||||
msgstr "{0} no encontrado"
|
||||
|
||||
@@ -83,7 +83,7 @@ msgstr "Cuenta eliminada"
|
||||
msgid "Actions"
|
||||
msgstr "Acciones"
|
||||
|
||||
#: src/views/card/index.tsx:386
|
||||
#: src/views/card/index.tsx:352
|
||||
#: src/views/public/board/CardModal.tsx:158
|
||||
msgid "Activity"
|
||||
msgstr "Actividad"
|
||||
@@ -100,12 +100,12 @@ msgstr "Registros de actividad"
|
||||
msgid "Add a card"
|
||||
msgstr "Añadir una tarjeta"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:147
|
||||
#: src/views/card/components/NewCommentForm.tsx:55
|
||||
#: src/views/card/components/Comment.tsx:146
|
||||
#: src/views/card/components/NewCommentForm.tsx:57
|
||||
msgid "Add a comment..."
|
||||
msgstr "Añadir un comentario..."
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:141
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:140
|
||||
msgid "Add an item..."
|
||||
msgstr "Añadir un elemento..."
|
||||
|
||||
@@ -117,53 +117,48 @@ msgstr "Añadir lista de verificación"
|
||||
msgid "Add description... (type '/' to open commands or '@' to mention)"
|
||||
msgstr "Añadir descripción... (escribe '/' para abrir comandos o '@' para mencionar)"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:195
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:172
|
||||
msgid "Add details..."
|
||||
msgstr "Añadir detalles..."
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:110
|
||||
#: src/views/card/components/LabelSelector.tsx:115
|
||||
#: src/views/card/components/LabelSelector.tsx:109
|
||||
#: src/views/card/components/LabelSelector.tsx:114
|
||||
msgid "Add label"
|
||||
msgstr "Añadir etiqueta"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:131
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:257
|
||||
msgid "Add member"
|
||||
msgstr "Añadir miembro"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:77
|
||||
msgid "added {0} labels: <0>{labelList}</0>"
|
||||
msgstr "añadió {0} etiquetas: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
#: src/views/card/components/ActivityList.tsx:66
|
||||
msgid "added a checklist"
|
||||
msgstr "añadió una lista de verificación"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
#: src/views/card/components/ActivityList.tsx:69
|
||||
msgid "added a checklist item"
|
||||
msgstr "añadió un elemento a la lista de verificación"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:103
|
||||
#: src/views/card/components/ActivityList.tsx:62
|
||||
msgid "added a label to the card"
|
||||
msgstr "añadió una etiqueta a la tarjeta"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:105
|
||||
#: src/views/card/components/ActivityList.tsx:64
|
||||
msgid "added a member to the card"
|
||||
msgstr "añadió un miembro a la tarjeta"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:181
|
||||
#: src/views/card/components/ActivityList.tsx:146
|
||||
msgid "added checklist <0>{0}</0>"
|
||||
msgstr "añadió la lista de verificación <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
#: src/views/card/components/ActivityList.tsx:170
|
||||
msgid "added checklist item <0>{0}</0>"
|
||||
msgstr "añadió el elemento <0>{0}</0> a la lista de verificación"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:165
|
||||
#: src/views/card/components/ActivityList.tsx:130
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "añadió la etiqueta <0>{0}</0>"
|
||||
|
||||
@@ -254,11 +249,11 @@ msgstr "¿Estás seguro de que quieres eliminar este {0}?"
|
||||
msgid "Are you sure you want to delete this card?"
|
||||
msgstr "¿Estás seguro de que quieres eliminar esta tarjeta?"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:56
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:55
|
||||
msgid "Are you sure you want to delete this checklist?"
|
||||
msgstr "¿Estás seguro de que quieres eliminar esta lista de verificación?"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:65
|
||||
msgid "Are you sure you want to delete this comment?"
|
||||
msgstr "¿Estás seguro de que quieres eliminar este comentario?"
|
||||
|
||||
@@ -271,7 +266,7 @@ msgid "Are you sure you want to delete your account?"
|
||||
msgstr "¿Estás seguro de que quieres eliminar tu cuenta?"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:145
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
msgid "assigned <0>{0}</0> to the card"
|
||||
msgstr "asignó <0>{0}</0> a la tarjeta"
|
||||
|
||||
@@ -279,7 +274,7 @@ msgstr "asignó <0>{0}</0> a la tarjeta"
|
||||
msgid "Assignees"
|
||||
msgstr "Asignados"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
#: src/views/card/components/AttachmentUpload.tsx:25
|
||||
msgid "Attachment uploaded"
|
||||
msgstr "Archivo adjunto subido"
|
||||
|
||||
@@ -317,9 +312,9 @@ msgstr "Portal de facturación"
|
||||
msgid "Blog Post"
|
||||
msgstr "Entrada de blog"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/card/index.tsx:238
|
||||
#: src/views/public/board/index.tsx:113
|
||||
msgid "Board"
|
||||
msgstr "Tablero"
|
||||
|
||||
@@ -336,7 +331,7 @@ msgstr "El nombre del tablero no puede exceder los 100 caracteres"
|
||||
msgid "Board name is required"
|
||||
msgstr "El nombre del tablero es obligatorio"
|
||||
|
||||
#: src/views/public/board/index.tsx:166
|
||||
#: src/views/public/board/index.tsx:165
|
||||
msgid "Board not found"
|
||||
msgstr "Tablero no encontrado"
|
||||
|
||||
@@ -352,7 +347,7 @@ msgstr "La URL del tablero solo puede contener letras, números y guiones"
|
||||
msgid "Board URL cannot exceed 60 characters"
|
||||
msgstr "La URL del tablero no puede exceder los 60 caracteres"
|
||||
|
||||
#: src/views/public/board/index.tsx:80
|
||||
#: src/views/public/board/index.tsx:79
|
||||
msgid "Board URL copied to clipboard"
|
||||
msgstr "URL del tablero copiada al portapapeles"
|
||||
|
||||
@@ -387,10 +382,10 @@ msgstr "Informe de error"
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:44
|
||||
#: src/views/card/components/Comment.tsx:159
|
||||
#: src/views/card/components/Comment.tsx:158
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:77
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:63
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: src/views/settings/components/Avatar.tsx:306
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
@@ -400,12 +395,12 @@ msgstr "Informe de error"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "Card"
|
||||
msgstr "Tarjeta"
|
||||
|
||||
#: src/views/card/index.tsx:306
|
||||
#: src/views/card/index.tsx:342
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:308
|
||||
msgid "Card not found"
|
||||
msgstr "Tarjeta no encontrada"
|
||||
|
||||
@@ -424,8 +419,8 @@ msgstr "Cambiar contraseña"
|
||||
msgid "Change your language preferences."
|
||||
msgstr "Cambia tus preferencias de idioma."
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:255
|
||||
#: src/views/card/components/ActivityList.tsx:269
|
||||
#: src/views/card/components/ActivityList.tsx:220
|
||||
#: src/views/card/components/ActivityList.tsx:234
|
||||
msgid "changed the due date to <0>{formattedDate}</0>"
|
||||
msgstr "cambió la fecha de vencimiento a <0>{formattedDate}</0>"
|
||||
|
||||
@@ -438,7 +433,7 @@ msgstr "Descubre algunos de nuestros proyectos de código abierto favoritos."
|
||||
msgid "Check your inbox"
|
||||
msgstr "Revisa tu bandeja de entrada"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:119
|
||||
#: src/views/card/components/NewChecklistForm.tsx:118
|
||||
msgid "Checklist name"
|
||||
msgstr "Nombre de la lista de verificación"
|
||||
|
||||
@@ -499,12 +494,12 @@ msgstr "Completado"
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Control y propiedad completos:"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:112
|
||||
#: src/views/card/components/ActivityList.tsx:71
|
||||
msgid "completed a checklist item"
|
||||
msgstr "completó un elemento de la lista de verificación"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:222
|
||||
#: src/views/card/components/ActivityList.tsx:187
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
msgstr "completó el elemento <0>{0}</0> de la lista de verificación"
|
||||
|
||||
@@ -578,7 +573,7 @@ msgstr "Crear clave API"
|
||||
msgid "Create card"
|
||||
msgstr "Crear tarjeta"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:135
|
||||
#: src/views/card/components/NewChecklistForm.tsx:134
|
||||
msgid "Create checklist"
|
||||
msgstr "Crear lista de verificación"
|
||||
|
||||
@@ -605,12 +600,12 @@ msgid "Create new key"
|
||||
msgstr "Crear nueva clave"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:414
|
||||
#: src/views/card/components/LabelSelector.tsx:98
|
||||
#: src/views/card/components/LabelSelector.tsx:97
|
||||
msgid "Create new label"
|
||||
msgstr "Crear nueva etiqueta"
|
||||
|
||||
#: src/views/board/index.tsx:64
|
||||
#: src/views/board/index.tsx:499
|
||||
#: src/views/board/index.tsx:65
|
||||
#: src/views/board/index.tsx:503
|
||||
msgid "Create new list"
|
||||
msgstr "Crear nueva lista"
|
||||
|
||||
@@ -623,7 +618,7 @@ msgstr "Crear plantilla"
|
||||
msgid "Create workspace"
|
||||
msgstr "Crear espacio de trabajo"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:99
|
||||
#: src/views/card/components/ActivityList.tsx:58
|
||||
msgid "created the card"
|
||||
msgstr "creó la tarjeta"
|
||||
|
||||
@@ -681,8 +676,8 @@ msgstr "Desactivar enlace de invitación"
|
||||
#: src/components/LabelForm.tsx:228
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:47
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:67
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:83
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
@@ -700,7 +695,7 @@ msgstr "Eliminar tablero"
|
||||
msgid "Delete card"
|
||||
msgstr "Eliminar tarjeta"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:92
|
||||
#: src/views/card/components/Comment.tsx:91
|
||||
msgid "Delete comment"
|
||||
msgstr "Eliminar comentario"
|
||||
|
||||
@@ -718,21 +713,21 @@ msgstr "Eliminar plantilla"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Eliminar espacio de trabajo"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:109
|
||||
#: src/views/card/components/ActivityList.tsx:68
|
||||
msgid "deleted a checklist"
|
||||
msgstr "eliminó una lista de verificación"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:114
|
||||
#: src/views/card/components/ActivityList.tsx:73
|
||||
msgid "deleted a checklist item"
|
||||
msgstr "eliminó un elemento de la lista de verificación"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:197
|
||||
#: src/views/card/components/ActivityList.tsx:162
|
||||
msgid "deleted checklist <0>{0}</0>"
|
||||
msgstr "eliminó la lista de verificación <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:240
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
msgid "deleted checklist item <0>{0}</0>"
|
||||
msgstr "eliminó el elemento <0>{0}</0> de la lista de verificación"
|
||||
|
||||
@@ -798,13 +793,13 @@ msgstr "¿No tienes una cuenta? <0><1>Regístrate</1></0>"
|
||||
msgid "Done"
|
||||
msgstr "Terminado"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:141
|
||||
msgid "Download failed"
|
||||
msgstr "Error en la descarga"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:171
|
||||
#: src/views/board/components/NewCardForm.tsx:469
|
||||
#: src/views/card/index.tsx:139
|
||||
#: src/views/card/index.tsx:138
|
||||
msgid "Due date"
|
||||
msgstr "Fecha de vencimiento"
|
||||
|
||||
@@ -829,7 +824,7 @@ msgstr "Vence mañana"
|
||||
msgid "Edit board URL"
|
||||
msgstr "Editar URL del tablero"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:83
|
||||
#: src/views/card/components/Comment.tsx:82
|
||||
msgid "Edit comment"
|
||||
msgstr "Editar comentario"
|
||||
|
||||
@@ -986,8 +981,8 @@ msgstr "Error al crear el tablero"
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
msgstr "Error al iniciar sesión con {0}. Por favor, inténtalo de nuevo."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:34
|
||||
#: src/views/card/components/AttachmentUpload.tsx:80
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
msgid "Failed to upload attachment. Please try again."
|
||||
msgstr "Error al subir el archivo adjunto. Por favor, inténtalo de nuevo."
|
||||
|
||||
@@ -1092,7 +1087,7 @@ msgstr "Comenzar"
|
||||
msgid "Get started by creating a new {0}"
|
||||
msgstr "Comienza creando un nuevo {0}"
|
||||
|
||||
#: src/views/board/index.tsx:491
|
||||
#: src/views/board/index.tsx:495
|
||||
msgid "Get started by creating a new list"
|
||||
msgstr "Comienza creando una nueva lista"
|
||||
|
||||
@@ -1279,7 +1274,7 @@ msgstr "Enlaces de invitación"
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Los enlaces de invitación requieren una suscripción de Equipo o Pro. Por favor, actualiza tu espacio de trabajo."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:367
|
||||
msgid "Invite member"
|
||||
msgstr "Invitar miembro"
|
||||
@@ -1328,7 +1323,7 @@ msgstr "Atajos de teclado"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:418
|
||||
#: src/views/card/index.tsx:121
|
||||
#: src/views/card/index.tsx:120
|
||||
msgid "Labels"
|
||||
msgstr "Etiquetas"
|
||||
|
||||
@@ -1378,11 +1373,11 @@ msgstr "Licencia"
|
||||
msgid "Light"
|
||||
msgstr "Claro"
|
||||
|
||||
#: src/views/public/board/index.tsx:78
|
||||
#: src/views/public/board/index.tsx:77
|
||||
msgid "Link copied"
|
||||
msgstr "Enlace copiado"
|
||||
|
||||
#: src/views/card/index.tsx:113
|
||||
#: src/views/card/index.tsx:112
|
||||
msgid "List"
|
||||
msgstr "Lista"
|
||||
|
||||
@@ -1394,14 +1389,6 @@ msgstr "Nombre de la lista"
|
||||
msgid "Lists"
|
||||
msgstr "Listas"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Load more activities"
|
||||
msgstr "Cargar más actividades"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Loading..."
|
||||
msgstr "Cargando..."
|
||||
|
||||
#: src/views/auth/login/index.tsx:33
|
||||
msgid "Login | kan.bn"
|
||||
msgstr "Iniciar sesión | kan.bn"
|
||||
@@ -1430,12 +1417,12 @@ msgstr "enlace mágico"
|
||||
msgid "Make template"
|
||||
msgstr "Crear plantilla"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:113
|
||||
#: src/views/card/components/ActivityList.tsx:72
|
||||
msgid "marked a checklist item as incomplete"
|
||||
msgstr "marcó un elemento de la lista de verificación como incompleto"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:231
|
||||
#: src/views/card/components/ActivityList.tsx:196
|
||||
msgid "marked checklist item <0>{0}</0> as incomplete"
|
||||
msgstr "marcó el elemento <0>{0}</0> de la lista de verificación como incompleto"
|
||||
|
||||
@@ -1446,7 +1433,7 @@ msgstr "Prioridad media"
|
||||
#: src/components/SideNavigation.tsx:121
|
||||
#: src/views/board/components/Filters.tsx:147
|
||||
#: src/views/board/components/NewCardForm.tsx:376
|
||||
#: src/views/card/index.tsx:130
|
||||
#: src/views/card/index.tsx:129
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Miembros"
|
||||
@@ -1467,11 +1454,11 @@ msgstr "facturación mensual"
|
||||
|
||||
#. placeholder {0}: truncate(fromList)
|
||||
#. placeholder {1}: truncate(toList)
|
||||
#: src/views/card/components/ActivityList.tsx:133
|
||||
#: src/views/card/components/ActivityList.tsx:98
|
||||
msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
msgstr "movió la tarjeta de <0>{0}</0> a<1>{1}</1>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:102
|
||||
#: src/views/card/components/ActivityList.tsx:61
|
||||
msgid "moved the card to another list"
|
||||
msgstr "movió la tarjeta a otra lista"
|
||||
|
||||
@@ -1507,7 +1494,7 @@ msgstr "Nueva clave API"
|
||||
msgid "New card"
|
||||
msgstr "Nueva tarjeta"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:103
|
||||
#: src/views/card/components/NewChecklistForm.tsx:102
|
||||
msgid "New checklist"
|
||||
msgstr "Nueva lista de verificación"
|
||||
|
||||
@@ -1520,7 +1507,7 @@ msgid "New label"
|
||||
msgstr "Nueva etiqueta"
|
||||
|
||||
#: src/views/board/components/NewListForm.tsx:113
|
||||
#: src/views/board/index.tsx:462
|
||||
#: src/views/board/index.tsx:466
|
||||
msgid "New list"
|
||||
msgstr "Nueva lista"
|
||||
|
||||
@@ -1573,7 +1560,7 @@ msgstr "No se requiere tarjeta de crédito"
|
||||
msgid "No dates"
|
||||
msgstr "Sin fechas"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:143
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
msgid "No download URL available for this attachment."
|
||||
msgstr "No hay URL de descarga disponible para este archivo adjunto."
|
||||
|
||||
@@ -1581,7 +1568,7 @@ msgstr "No hay URL de descarga disponible para este archivo adjunto."
|
||||
msgid "No keyboard shortcuts registered."
|
||||
msgstr "No hay atajos de teclado registrados."
|
||||
|
||||
#: src/views/board/index.tsx:488
|
||||
#: src/views/board/index.tsx:492
|
||||
msgid "No lists"
|
||||
msgstr "Sin listas"
|
||||
|
||||
@@ -1732,27 +1719,25 @@ msgstr "Por favor selecciona un archivo para subir."
|
||||
#: src/views/board/components/NewTemplateForm.tsx:77
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:73
|
||||
#: src/views/board/components/VisibilityButton.tsx:54
|
||||
#: src/views/board/index.tsx:170
|
||||
#: src/views/board/index.tsx:226
|
||||
#: src/views/board/index.tsx:174
|
||||
#: src/views/board/index.tsx:230
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:205
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:74
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:67
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:95
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:47
|
||||
#: src/views/card/components/Checklists.tsx:81
|
||||
#: src/views/card/components/Comment.tsx:65
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:60
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:88
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:52
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:46
|
||||
#: src/views/card/components/DueDateSelector.tsx:60
|
||||
#: src/views/card/components/LabelSelector.tsx:73
|
||||
#: src/views/card/components/ListSelector.tsx:53
|
||||
#: src/views/card/components/MemberSelector.tsx:80
|
||||
#: src/views/card/components/NewChecklistForm.tsx:71
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:90
|
||||
#: src/views/card/components/NewCommentForm.tsx:32
|
||||
#: src/views/card/index.tsx:187
|
||||
#: src/views/card/index.tsx:200
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:241
|
||||
@@ -1852,40 +1837,35 @@ msgstr "Eliminar"
|
||||
msgid "Remove member"
|
||||
msgstr "Eliminar miembro"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:91
|
||||
msgid "removed {0} labels: <0>{labelList}</0>"
|
||||
msgstr "eliminó {0} etiquetas: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:104
|
||||
#: src/views/card/components/ActivityList.tsx:63
|
||||
msgid "removed a label from the card"
|
||||
msgstr "eliminó una etiqueta de la tarjeta"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:106
|
||||
#: src/views/card/components/ActivityList.tsx:65
|
||||
msgid "removed a member from the card"
|
||||
msgstr "eliminó un miembro de la tarjeta"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:173
|
||||
#: src/views/card/components/ActivityList.tsx:138
|
||||
msgid "removed label <0>{0}</0>"
|
||||
msgstr "eliminó la etiqueta <0>{0}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:117
|
||||
#: src/views/card/components/ActivityList.tsx:276
|
||||
#: src/views/card/components/ActivityList.tsx:76
|
||||
#: src/views/card/components/ActivityList.tsx:241
|
||||
msgid "removed the due date"
|
||||
msgstr "eliminó la fecha de vencimiento"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:108
|
||||
#: src/views/card/components/ActivityList.tsx:67
|
||||
msgid "renamed a checklist"
|
||||
msgstr "renombró una lista de verificación"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:189
|
||||
#: src/views/card/components/ActivityList.tsx:154
|
||||
msgid "renamed checklist <0>{0}</0>"
|
||||
msgstr "renombró la lista de verificación <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:213
|
||||
#: src/views/card/components/ActivityList.tsx:178
|
||||
msgid "renamed checklist item to <0>{0}</0>"
|
||||
msgstr "renombró el elemento de la lista de verificación a <0>{0}</0>"
|
||||
|
||||
@@ -1924,7 +1904,7 @@ msgstr "Rol"
|
||||
msgid "Run on your own infrastructure"
|
||||
msgstr "Ejecuta en tu propia infraestructura"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:166
|
||||
#: src/views/card/components/Comment.tsx:165
|
||||
#: src/views/settings/components/Avatar.tsx:309
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
@@ -1962,7 +1942,7 @@ msgstr "Autoalojamiento"
|
||||
msgid "Self host with Github"
|
||||
msgstr "Autoalojamiento con Github"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:142
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
msgid "self-assigned the card"
|
||||
msgstr "se autoasignó la tarjeta"
|
||||
|
||||
@@ -1978,11 +1958,11 @@ msgstr "Enviar comentarios"
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:117
|
||||
#: src/views/card/components/DueDateSelector.tsx:116
|
||||
msgid "Set due date"
|
||||
msgstr "Establecer fecha de vencimiento"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:115
|
||||
#: src/views/card/components/ActivityList.tsx:74
|
||||
msgid "set the due date"
|
||||
msgstr "estableció la fecha de vencimiento"
|
||||
|
||||
@@ -2107,8 +2087,8 @@ msgstr "Plan de Equipo"
|
||||
msgid "Teams"
|
||||
msgstr "Equipos"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:417
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/board/index.tsx:421
|
||||
msgid "Template"
|
||||
msgstr "Plantilla"
|
||||
|
||||
@@ -2173,8 +2153,8 @@ msgstr "No podrán acceder a este espacio de trabajo."
|
||||
#: src/components/DeleteLabelConfirmation.tsx:44
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:39
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:59
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:69
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:58
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||
msgid "This action can't be undone."
|
||||
msgstr "Esta acción no se puede deshacer."
|
||||
|
||||
@@ -2182,7 +2162,7 @@ msgstr "Esta acción no se puede deshacer."
|
||||
msgid "This API key will only be shown once. Please save it in a secure location."
|
||||
msgstr "Esta clave API solo se mostrará una vez. Por favor, guárdala en un lugar seguro."
|
||||
|
||||
#: src/views/public/board/index.tsx:169
|
||||
#: src/views/public/board/index.tsx:168
|
||||
msgid "This board is private or does not exist"
|
||||
msgstr "Este tablero es privado o no existe"
|
||||
|
||||
@@ -2244,27 +2224,23 @@ msgstr "Importaciones de Trello"
|
||||
msgid "Triaging"
|
||||
msgstr "Clasificación"
|
||||
|
||||
#: src/views/home/components/Logos.tsx:67
|
||||
#: src/views/home/components/Logos.tsx:73
|
||||
msgid "Trusted by fast-moving teams<0/>around the world"
|
||||
msgstr "Equipos ágiles de todo el mundo<0/>confían en nosotros"
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:88
|
||||
msgid "Unable to add checklist item"
|
||||
msgstr "No se puede añadir el elemento a la lista de verificación"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "No se puede añadir el comentario"
|
||||
|
||||
#: src/views/card/index.tsx:199
|
||||
msgid "Unable to add label"
|
||||
msgstr "No se puede añadir etiqueta"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:181
|
||||
msgid "Unable to create card"
|
||||
msgstr "No se puede crear la tarjeta"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistForm.tsx:69
|
||||
msgid "Unable to create checklist"
|
||||
msgstr "No se puede crear la lista de verificación"
|
||||
|
||||
@@ -2281,7 +2257,7 @@ msgstr "No se puede crear la plantilla"
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "No se puede crear el espacio de trabajo"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:72
|
||||
msgid "Unable to delete attachment"
|
||||
msgstr "No se puede eliminar el archivo adjunto"
|
||||
|
||||
@@ -2289,15 +2265,15 @@ msgstr "No se puede eliminar el archivo adjunto"
|
||||
msgid "Unable to delete card"
|
||||
msgstr "No se puede eliminar la tarjeta"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:36
|
||||
msgid "Unable to delete checklist"
|
||||
msgstr "No se puede eliminar la lista de verificación"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:94
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:87
|
||||
msgid "Unable to delete checklist item"
|
||||
msgstr "No se puede eliminar el elemento de la lista de verificación"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:44
|
||||
msgid "Unable to delete comment"
|
||||
msgstr "No se puede eliminar el comentario"
|
||||
|
||||
@@ -2305,10 +2281,6 @@ msgstr "No se puede eliminar el comentario"
|
||||
msgid "Unable to remove member"
|
||||
msgstr "No se puede eliminar al miembro"
|
||||
|
||||
#: src/views/card/components/Checklists.tsx:80
|
||||
msgid "Unable to reorder checklist item"
|
||||
msgstr "No se puede reordenar el elemento de la lista de verificación"
|
||||
|
||||
#: src/components/FeedbackModal.tsx:40
|
||||
msgid "Unable to send feedback"
|
||||
msgstr "No se pudieron enviar los comentarios"
|
||||
@@ -2321,46 +2293,46 @@ msgstr "No se puede actualizar la URL del tablero"
|
||||
msgid "Unable to update board visibility"
|
||||
msgstr "No se puede actualizar la visibilidad del tablero"
|
||||
|
||||
#: src/views/board/index.tsx:225
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/board/index.tsx:229
|
||||
#: src/views/card/index.tsx:185
|
||||
msgid "Unable to update card"
|
||||
msgstr "No se puede actualizar la tarjeta"
|
||||
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:45
|
||||
msgid "Unable to update checklist"
|
||||
msgstr "No se puede actualizar la lista de verificación"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:66
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:59
|
||||
msgid "Unable to update checklist item"
|
||||
msgstr "No se puede actualizar el elemento de la lista de verificación"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/Comment.tsx:63
|
||||
msgid "Unable to update comment"
|
||||
msgstr "No se puede actualizar el comentario"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/DueDateSelector.tsx:58
|
||||
msgid "Unable to update due date"
|
||||
msgstr "No se puede actualizar la fecha de vencimiento"
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/LabelSelector.tsx:71
|
||||
msgid "Unable to update labels"
|
||||
msgstr "No se pueden actualizar las etiquetas"
|
||||
|
||||
#: src/views/board/index.tsx:169
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/board/index.tsx:173
|
||||
#: src/views/card/components/ListSelector.tsx:51
|
||||
msgid "Unable to update list"
|
||||
msgstr "No se puede actualizar la lista"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/MemberSelector.tsx:78
|
||||
msgid "Unable to update members"
|
||||
msgstr "No se pueden actualizar los miembros"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:156
|
||||
#: src/views/card/components/ActivityList.tsx:121
|
||||
msgid "unassigned <0>{0}</0> from the card"
|
||||
msgstr "desasignó <0>{0}</0> de la tarjeta"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:153
|
||||
#: src/views/card/components/ActivityList.tsx:118
|
||||
msgid "unassigned themselves from the card"
|
||||
msgstr "se desasignó de la tarjeta"
|
||||
|
||||
@@ -2419,24 +2391,24 @@ msgstr "Actualizar"
|
||||
msgid "Update label"
|
||||
msgstr "Actualizar etiqueta"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:111
|
||||
#: src/views/card/components/ActivityList.tsx:70
|
||||
msgid "updated a checklist item"
|
||||
msgstr "actualizó un elemento de la lista de verificación"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:101
|
||||
#: src/views/card/components/ActivityList.tsx:60
|
||||
msgid "updated the description"
|
||||
msgstr "actualizó la descripción"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:116
|
||||
#: src/views/card/components/ActivityList.tsx:75
|
||||
msgid "updated the due date"
|
||||
msgstr "actualizó la fecha de vencimiento"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:100
|
||||
#: src/views/card/components/ActivityList.tsx:59
|
||||
msgid "updated the title"
|
||||
msgstr "actualizó el título"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:125
|
||||
#: src/views/card/components/ActivityList.tsx:90
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "actualizó el título a <0>{0}</0>"
|
||||
|
||||
@@ -2450,8 +2422,8 @@ msgstr "Actualizar a Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Actualizar a Pro ($29/mes)"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
#: src/views/card/components/AttachmentUpload.tsx:32
|
||||
#: src/views/card/components/AttachmentUpload.tsx:78
|
||||
msgid "Upload failed"
|
||||
msgstr "Error al subir"
|
||||
|
||||
@@ -2504,7 +2476,7 @@ msgstr "Ver y gestionar tu facturación y suscripción."
|
||||
msgid "View docs"
|
||||
msgstr "Ver documentación"
|
||||
|
||||
#: src/views/public/board/index.tsx:142
|
||||
#: src/views/public/board/index.tsx:141
|
||||
msgid "View only"
|
||||
msgstr "Solo visualización"
|
||||
|
||||
@@ -2512,7 +2484,7 @@ msgstr "Solo visualización"
|
||||
msgid "View our roadmap."
|
||||
msgstr "Ver nuestra hoja de ruta."
|
||||
|
||||
#: src/views/public/board/index.tsx:172
|
||||
#: src/views/public/board/index.tsx:171
|
||||
msgid "View workspace"
|
||||
msgstr "Ver espacio de trabajo"
|
||||
|
||||
@@ -2557,10 +2529,10 @@ msgid "Why make an open source Trello?"
|
||||
msgstr "¿Por qué crear un Trello de código abierto?"
|
||||
|
||||
#: src/components/SettingsLayout.tsx:39
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/members/index.tsx:173
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/public/board/index.tsx:113
|
||||
#: src/views/public/boards/index.tsx:66
|
||||
msgid "Workspace"
|
||||
msgstr "Espacio de trabajo"
|
||||
@@ -2694,7 +2666,7 @@ msgstr "Tus tableros han sido importados."
|
||||
msgid "Your display name has been updated."
|
||||
msgstr "Tu nombre de visualización ha sido actualizado."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:27
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
msgid "Your file has been uploaded successfully."
|
||||
msgstr "Tu archivo se ha subido correctamente."
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:124
|
||||
#: src/views/card/components/Comment.tsx:123
|
||||
msgid " (edited)"
|
||||
msgstr " (modifié)"
|
||||
|
||||
@@ -31,7 +31,7 @@ msgstr "{0}"
|
||||
#. placeholder {1}: board?.name ?? t`Board`
|
||||
#. placeholder {1}: workspace.name ?? t`Workspace`
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "{0} | {1}"
|
||||
msgstr "{0} | {1}"
|
||||
|
||||
@@ -41,7 +41,7 @@ msgid "{0} labels"
|
||||
msgstr "{0} étiquettes"
|
||||
|
||||
#. placeholder {0}: isTemplate ? "Template" : "Board"
|
||||
#: src/views/board/index.tsx:408
|
||||
#: src/views/board/index.tsx:412
|
||||
msgid "{0} not found"
|
||||
msgstr "{0} introuvable"
|
||||
|
||||
@@ -83,7 +83,7 @@ msgstr "Compte supprimé"
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
|
||||
#: src/views/card/index.tsx:386
|
||||
#: src/views/card/index.tsx:352
|
||||
#: src/views/public/board/CardModal.tsx:158
|
||||
msgid "Activity"
|
||||
msgstr "Activité"
|
||||
@@ -100,12 +100,12 @@ msgstr "Journaux d'activité"
|
||||
msgid "Add a card"
|
||||
msgstr "Ajouter une carte"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:147
|
||||
#: src/views/card/components/NewCommentForm.tsx:55
|
||||
#: src/views/card/components/Comment.tsx:146
|
||||
#: src/views/card/components/NewCommentForm.tsx:57
|
||||
msgid "Add a comment..."
|
||||
msgstr "Ajouter un commentaire..."
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:141
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:140
|
||||
msgid "Add an item..."
|
||||
msgstr "Ajouter un élément..."
|
||||
|
||||
@@ -117,53 +117,48 @@ msgstr "Ajouter une checklist"
|
||||
msgid "Add description... (type '/' to open commands or '@' to mention)"
|
||||
msgstr "Ajouter une description... (tapez '/' pour ouvrir les commandes ou '@' pour mentionner)"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:195
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:172
|
||||
msgid "Add details..."
|
||||
msgstr "Ajouter des détails..."
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:110
|
||||
#: src/views/card/components/LabelSelector.tsx:115
|
||||
#: src/views/card/components/LabelSelector.tsx:109
|
||||
#: src/views/card/components/LabelSelector.tsx:114
|
||||
msgid "Add label"
|
||||
msgstr "Ajouter une étiquette"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:131
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:257
|
||||
msgid "Add member"
|
||||
msgstr "Ajouter un membre"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:77
|
||||
msgid "added {0} labels: <0>{labelList}</0>"
|
||||
msgstr "a ajouté {0} étiquettes : <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
#: src/views/card/components/ActivityList.tsx:66
|
||||
msgid "added a checklist"
|
||||
msgstr "a ajouté une checklist"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
#: src/views/card/components/ActivityList.tsx:69
|
||||
msgid "added a checklist item"
|
||||
msgstr "a ajouté un élément à la checklist"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:103
|
||||
#: src/views/card/components/ActivityList.tsx:62
|
||||
msgid "added a label to the card"
|
||||
msgstr "a ajouté une étiquette à la carte"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:105
|
||||
#: src/views/card/components/ActivityList.tsx:64
|
||||
msgid "added a member to the card"
|
||||
msgstr "a ajouté un membre à la carte"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:181
|
||||
#: src/views/card/components/ActivityList.tsx:146
|
||||
msgid "added checklist <0>{0}</0>"
|
||||
msgstr "a ajouté la checklist <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
#: src/views/card/components/ActivityList.tsx:170
|
||||
msgid "added checklist item <0>{0}</0>"
|
||||
msgstr "a ajouté l'élément <0>{0}</0> à la checklist"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:165
|
||||
#: src/views/card/components/ActivityList.tsx:130
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "a ajouté l'étiquette <0>{0}</0>"
|
||||
|
||||
@@ -254,11 +249,11 @@ msgstr "Êtes-vous sûr de vouloir supprimer ce {0} ?"
|
||||
msgid "Are you sure you want to delete this card?"
|
||||
msgstr "Êtes-vous sûr de vouloir supprimer cette carte ?"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:56
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:55
|
||||
msgid "Are you sure you want to delete this checklist?"
|
||||
msgstr "Êtes-vous sûr de vouloir supprimer cette checklist ?"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:65
|
||||
msgid "Are you sure you want to delete this comment?"
|
||||
msgstr "Êtes-vous sûr de vouloir supprimer ce commentaire ?"
|
||||
|
||||
@@ -271,7 +266,7 @@ msgid "Are you sure you want to delete your account?"
|
||||
msgstr "Êtes-vous sûr de vouloir supprimer votre compte ?"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:145
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
msgid "assigned <0>{0}</0> to the card"
|
||||
msgstr "a assigné <0>{0}</0> à la carte"
|
||||
|
||||
@@ -279,7 +274,7 @@ msgstr "a assigné <0>{0}</0> à la carte"
|
||||
msgid "Assignees"
|
||||
msgstr "Assignés"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
#: src/views/card/components/AttachmentUpload.tsx:25
|
||||
msgid "Attachment uploaded"
|
||||
msgstr "Pièce jointe téléversée"
|
||||
|
||||
@@ -317,9 +312,9 @@ msgstr "Portail de facturation"
|
||||
msgid "Blog Post"
|
||||
msgstr "Article de blog"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/card/index.tsx:238
|
||||
#: src/views/public/board/index.tsx:113
|
||||
msgid "Board"
|
||||
msgstr "Tableau"
|
||||
|
||||
@@ -336,7 +331,7 @@ msgstr "Le nom du tableau ne peut pas dépasser 100 caractères"
|
||||
msgid "Board name is required"
|
||||
msgstr "Le nom du tableau est requis"
|
||||
|
||||
#: src/views/public/board/index.tsx:166
|
||||
#: src/views/public/board/index.tsx:165
|
||||
msgid "Board not found"
|
||||
msgstr "Tableau introuvable"
|
||||
|
||||
@@ -352,7 +347,7 @@ msgstr "L'URL du tableau ne peut contenir que des lettres, des chiffres et des t
|
||||
msgid "Board URL cannot exceed 60 characters"
|
||||
msgstr "L'URL du tableau ne peut pas dépasser 60 caractères"
|
||||
|
||||
#: src/views/public/board/index.tsx:80
|
||||
#: src/views/public/board/index.tsx:79
|
||||
msgid "Board URL copied to clipboard"
|
||||
msgstr "URL du tableau copiée dans le presse-papiers"
|
||||
|
||||
@@ -387,10 +382,10 @@ msgstr "Rapport de bug"
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:44
|
||||
#: src/views/card/components/Comment.tsx:159
|
||||
#: src/views/card/components/Comment.tsx:158
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:77
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:63
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: src/views/settings/components/Avatar.tsx:306
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
@@ -400,12 +395,12 @@ msgstr "Rapport de bug"
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "Card"
|
||||
msgstr "Carte"
|
||||
|
||||
#: src/views/card/index.tsx:306
|
||||
#: src/views/card/index.tsx:342
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:308
|
||||
msgid "Card not found"
|
||||
msgstr "Carte introuvable"
|
||||
|
||||
@@ -424,8 +419,8 @@ msgstr "Modifier le mot de passe"
|
||||
msgid "Change your language preferences."
|
||||
msgstr "Modifiez vos préférences linguistiques."
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:255
|
||||
#: src/views/card/components/ActivityList.tsx:269
|
||||
#: src/views/card/components/ActivityList.tsx:220
|
||||
#: src/views/card/components/ActivityList.tsx:234
|
||||
msgid "changed the due date to <0>{formattedDate}</0>"
|
||||
msgstr "a modifié la date d'échéance pour <0>{formattedDate}</0>"
|
||||
|
||||
@@ -438,7 +433,7 @@ msgstr "Découvrez certains de nos projets open source préférés."
|
||||
msgid "Check your inbox"
|
||||
msgstr "Vérifiez votre boîte de réception"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:119
|
||||
#: src/views/card/components/NewChecklistForm.tsx:118
|
||||
msgid "Checklist name"
|
||||
msgstr "Nom de la checklist"
|
||||
|
||||
@@ -499,12 +494,12 @@ msgstr "Terminé"
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Contrôle et propriété complets :"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:112
|
||||
#: src/views/card/components/ActivityList.tsx:71
|
||||
msgid "completed a checklist item"
|
||||
msgstr "a terminé un élément de la checklist"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:222
|
||||
#: src/views/card/components/ActivityList.tsx:187
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
msgstr "a terminé l'élément <0>{0}</0> de la checklist"
|
||||
|
||||
@@ -578,7 +573,7 @@ msgstr "Créer une clé API"
|
||||
msgid "Create card"
|
||||
msgstr "Créer une carte"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:135
|
||||
#: src/views/card/components/NewChecklistForm.tsx:134
|
||||
msgid "Create checklist"
|
||||
msgstr "Créer une checklist"
|
||||
|
||||
@@ -605,12 +600,12 @@ msgid "Create new key"
|
||||
msgstr "Créer une nouvelle clé"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:414
|
||||
#: src/views/card/components/LabelSelector.tsx:98
|
||||
#: src/views/card/components/LabelSelector.tsx:97
|
||||
msgid "Create new label"
|
||||
msgstr "Créer une nouvelle étiquette"
|
||||
|
||||
#: src/views/board/index.tsx:64
|
||||
#: src/views/board/index.tsx:499
|
||||
#: src/views/board/index.tsx:65
|
||||
#: src/views/board/index.tsx:503
|
||||
msgid "Create new list"
|
||||
msgstr "Créer une nouvelle liste"
|
||||
|
||||
@@ -623,7 +618,7 @@ msgstr "Créer un modèle"
|
||||
msgid "Create workspace"
|
||||
msgstr "Créer un espace de travail"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:99
|
||||
#: src/views/card/components/ActivityList.tsx:58
|
||||
msgid "created the card"
|
||||
msgstr "a créé la carte"
|
||||
|
||||
@@ -681,8 +676,8 @@ msgstr "Désactiver le lien d'invitation"
|
||||
#: src/components/LabelForm.tsx:228
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:47
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:67
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:83
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
@@ -700,7 +695,7 @@ msgstr "Supprimer le tableau"
|
||||
msgid "Delete card"
|
||||
msgstr "Supprimer la carte"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:92
|
||||
#: src/views/card/components/Comment.tsx:91
|
||||
msgid "Delete comment"
|
||||
msgstr "Supprimer le commentaire"
|
||||
|
||||
@@ -718,21 +713,21 @@ msgstr "Supprimer le modèle"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Supprimer l'espace de travail"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:109
|
||||
#: src/views/card/components/ActivityList.tsx:68
|
||||
msgid "deleted a checklist"
|
||||
msgstr "a supprimé une checklist"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:114
|
||||
#: src/views/card/components/ActivityList.tsx:73
|
||||
msgid "deleted a checklist item"
|
||||
msgstr "a supprimé un élément de la checklist"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:197
|
||||
#: src/views/card/components/ActivityList.tsx:162
|
||||
msgid "deleted checklist <0>{0}</0>"
|
||||
msgstr "a supprimé la checklist <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:240
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
msgid "deleted checklist item <0>{0}</0>"
|
||||
msgstr "a supprimé l'élément <0>{0}</0> de la checklist"
|
||||
|
||||
@@ -798,13 +793,13 @@ msgstr "Vous n'avez pas de compte ? <0><1>Inscrivez-vous</1></0>"
|
||||
msgid "Done"
|
||||
msgstr "Fait"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:141
|
||||
msgid "Download failed"
|
||||
msgstr "Échec du téléchargement"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:171
|
||||
#: src/views/board/components/NewCardForm.tsx:469
|
||||
#: src/views/card/index.tsx:139
|
||||
#: src/views/card/index.tsx:138
|
||||
msgid "Due date"
|
||||
msgstr "Date d'échéance"
|
||||
|
||||
@@ -829,7 +824,7 @@ msgstr "Échéance demain"
|
||||
msgid "Edit board URL"
|
||||
msgstr "Modifier l'URL du tableau"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:83
|
||||
#: src/views/card/components/Comment.tsx:82
|
||||
msgid "Edit comment"
|
||||
msgstr "Modifier le commentaire"
|
||||
|
||||
@@ -986,8 +981,8 @@ msgstr "Échec de la création du tableau"
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
msgstr "Échec de connexion avec {0}. Veuillez réessayer."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:34
|
||||
#: src/views/card/components/AttachmentUpload.tsx:80
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
msgid "Failed to upload attachment. Please try again."
|
||||
msgstr "Échec du téléversement de la pièce jointe. Veuillez réessayer."
|
||||
|
||||
@@ -1092,7 +1087,7 @@ msgstr "Commencer"
|
||||
msgid "Get started by creating a new {0}"
|
||||
msgstr "Commencez par créer un nouveau {0}"
|
||||
|
||||
#: src/views/board/index.tsx:491
|
||||
#: src/views/board/index.tsx:495
|
||||
msgid "Get started by creating a new list"
|
||||
msgstr "Commencez par créer une nouvelle liste"
|
||||
|
||||
@@ -1279,7 +1274,7 @@ msgstr "Liens d'invitation"
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Les liens d'invitation nécessitent un abonnement Team ou Pro. Veuillez mettre à niveau votre espace de travail."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:367
|
||||
msgid "Invite member"
|
||||
msgstr "Inviter un membre"
|
||||
@@ -1328,7 +1323,7 @@ msgstr "Raccourcis clavier"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:418
|
||||
#: src/views/card/index.tsx:121
|
||||
#: src/views/card/index.tsx:120
|
||||
msgid "Labels"
|
||||
msgstr "Étiquettes"
|
||||
|
||||
@@ -1378,11 +1373,11 @@ msgstr "Licence"
|
||||
msgid "Light"
|
||||
msgstr "Clair"
|
||||
|
||||
#: src/views/public/board/index.tsx:78
|
||||
#: src/views/public/board/index.tsx:77
|
||||
msgid "Link copied"
|
||||
msgstr "Lien copié"
|
||||
|
||||
#: src/views/card/index.tsx:113
|
||||
#: src/views/card/index.tsx:112
|
||||
msgid "List"
|
||||
msgstr "Liste"
|
||||
|
||||
@@ -1394,14 +1389,6 @@ msgstr "Nom de la liste"
|
||||
msgid "Lists"
|
||||
msgstr "Listes"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Load more activities"
|
||||
msgstr "Charger plus d'activités"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Loading..."
|
||||
msgstr "Chargement..."
|
||||
|
||||
#: src/views/auth/login/index.tsx:33
|
||||
msgid "Login | kan.bn"
|
||||
msgstr "Connexion | kan.bn"
|
||||
@@ -1430,12 +1417,12 @@ msgstr "lien magique"
|
||||
msgid "Make template"
|
||||
msgstr "Créer un modèle"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:113
|
||||
#: src/views/card/components/ActivityList.tsx:72
|
||||
msgid "marked a checklist item as incomplete"
|
||||
msgstr "a marqué un élément de la checklist comme incomplet"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:231
|
||||
#: src/views/card/components/ActivityList.tsx:196
|
||||
msgid "marked checklist item <0>{0}</0> as incomplete"
|
||||
msgstr "a marqué l'élément <0>{0}</0> de la checklist comme incomplet"
|
||||
|
||||
@@ -1446,7 +1433,7 @@ msgstr "Priorité moyenne"
|
||||
#: src/components/SideNavigation.tsx:121
|
||||
#: src/views/board/components/Filters.tsx:147
|
||||
#: src/views/board/components/NewCardForm.tsx:376
|
||||
#: src/views/card/index.tsx:130
|
||||
#: src/views/card/index.tsx:129
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Membres"
|
||||
@@ -1467,11 +1454,11 @@ msgstr "facturation mensuelle"
|
||||
|
||||
#. placeholder {0}: truncate(fromList)
|
||||
#. placeholder {1}: truncate(toList)
|
||||
#: src/views/card/components/ActivityList.tsx:133
|
||||
#: src/views/card/components/ActivityList.tsx:98
|
||||
msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
msgstr "a déplacé la carte de <0>{0}</0> vers <1>{1}</1>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:102
|
||||
#: src/views/card/components/ActivityList.tsx:61
|
||||
msgid "moved the card to another list"
|
||||
msgstr "a déplacé la carte vers une autre liste"
|
||||
|
||||
@@ -1507,7 +1494,7 @@ msgstr "Nouvelle clé API"
|
||||
msgid "New card"
|
||||
msgstr "Nouvelle carte"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:103
|
||||
#: src/views/card/components/NewChecklistForm.tsx:102
|
||||
msgid "New checklist"
|
||||
msgstr "Nouvelle checklist"
|
||||
|
||||
@@ -1520,7 +1507,7 @@ msgid "New label"
|
||||
msgstr "Nouvelle étiquette"
|
||||
|
||||
#: src/views/board/components/NewListForm.tsx:113
|
||||
#: src/views/board/index.tsx:462
|
||||
#: src/views/board/index.tsx:466
|
||||
msgid "New list"
|
||||
msgstr "Nouvelle liste"
|
||||
|
||||
@@ -1573,7 +1560,7 @@ msgstr "Aucune carte de crédit requise"
|
||||
msgid "No dates"
|
||||
msgstr "Aucune date"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:143
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
msgid "No download URL available for this attachment."
|
||||
msgstr "Aucune URL de téléchargement disponible pour cette pièce jointe."
|
||||
|
||||
@@ -1581,7 +1568,7 @@ msgstr "Aucune URL de téléchargement disponible pour cette pièce jointe."
|
||||
msgid "No keyboard shortcuts registered."
|
||||
msgstr "Aucun raccourci clavier enregistré."
|
||||
|
||||
#: src/views/board/index.tsx:488
|
||||
#: src/views/board/index.tsx:492
|
||||
msgid "No lists"
|
||||
msgstr "Aucune liste"
|
||||
|
||||
@@ -1732,27 +1719,25 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
|
||||
#: src/views/board/components/NewTemplateForm.tsx:77
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:73
|
||||
#: src/views/board/components/VisibilityButton.tsx:54
|
||||
#: src/views/board/index.tsx:170
|
||||
#: src/views/board/index.tsx:226
|
||||
#: src/views/board/index.tsx:174
|
||||
#: src/views/board/index.tsx:230
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:205
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:74
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:67
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:95
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:47
|
||||
#: src/views/card/components/Checklists.tsx:81
|
||||
#: src/views/card/components/Comment.tsx:65
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:60
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:88
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:52
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:46
|
||||
#: src/views/card/components/DueDateSelector.tsx:60
|
||||
#: src/views/card/components/LabelSelector.tsx:73
|
||||
#: src/views/card/components/ListSelector.tsx:53
|
||||
#: src/views/card/components/MemberSelector.tsx:80
|
||||
#: src/views/card/components/NewChecklistForm.tsx:71
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:90
|
||||
#: src/views/card/components/NewCommentForm.tsx:32
|
||||
#: src/views/card/index.tsx:187
|
||||
#: src/views/card/index.tsx:200
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:241
|
||||
@@ -1852,40 +1837,35 @@ msgstr "Supprimer"
|
||||
msgid "Remove member"
|
||||
msgstr "Supprimer le membre"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:91
|
||||
msgid "removed {0} labels: <0>{labelList}</0>"
|
||||
msgstr "a supprimé {0} étiquettes : <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:104
|
||||
#: src/views/card/components/ActivityList.tsx:63
|
||||
msgid "removed a label from the card"
|
||||
msgstr "a supprimé une étiquette de la carte"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:106
|
||||
#: src/views/card/components/ActivityList.tsx:65
|
||||
msgid "removed a member from the card"
|
||||
msgstr "a retiré un membre de la carte"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:173
|
||||
#: src/views/card/components/ActivityList.tsx:138
|
||||
msgid "removed label <0>{0}</0>"
|
||||
msgstr "a supprimé l'étiquette <0>{0}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:117
|
||||
#: src/views/card/components/ActivityList.tsx:276
|
||||
#: src/views/card/components/ActivityList.tsx:76
|
||||
#: src/views/card/components/ActivityList.tsx:241
|
||||
msgid "removed the due date"
|
||||
msgstr "a supprimé la date d'échéance"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:108
|
||||
#: src/views/card/components/ActivityList.tsx:67
|
||||
msgid "renamed a checklist"
|
||||
msgstr "a renommé une checklist"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:189
|
||||
#: src/views/card/components/ActivityList.tsx:154
|
||||
msgid "renamed checklist <0>{0}</0>"
|
||||
msgstr "a renommé la checklist <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:213
|
||||
#: src/views/card/components/ActivityList.tsx:178
|
||||
msgid "renamed checklist item to <0>{0}</0>"
|
||||
msgstr "a renommé l'élément de la liste de contrôle en <0>{0}</0>"
|
||||
|
||||
@@ -1924,7 +1904,7 @@ msgstr "Rôle"
|
||||
msgid "Run on your own infrastructure"
|
||||
msgstr "Exécutez sur votre propre infrastructure"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:166
|
||||
#: src/views/card/components/Comment.tsx:165
|
||||
#: src/views/settings/components/Avatar.tsx:309
|
||||
msgid "Save"
|
||||
msgstr "Enregistrer"
|
||||
@@ -1962,7 +1942,7 @@ msgstr "Auto-hébergement"
|
||||
msgid "Self host with Github"
|
||||
msgstr "Auto-hébergement avec Github"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:142
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
msgid "self-assigned the card"
|
||||
msgstr "s'est auto-assigné la carte"
|
||||
|
||||
@@ -1978,11 +1958,11 @@ msgstr "Envoyer des commentaires"
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:117
|
||||
#: src/views/card/components/DueDateSelector.tsx:116
|
||||
msgid "Set due date"
|
||||
msgstr "Définir la date d'échéance"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:115
|
||||
#: src/views/card/components/ActivityList.tsx:74
|
||||
msgid "set the due date"
|
||||
msgstr "a défini la date d'échéance"
|
||||
|
||||
@@ -2107,8 +2087,8 @@ msgstr "Forfait d'équipe"
|
||||
msgid "Teams"
|
||||
msgstr "Équipes"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:417
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/board/index.tsx:421
|
||||
msgid "Template"
|
||||
msgstr "Modèle"
|
||||
|
||||
@@ -2173,8 +2153,8 @@ msgstr "Ils ne pourront plus accéder à cet espace de travail."
|
||||
#: src/components/DeleteLabelConfirmation.tsx:44
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:39
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:59
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:69
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:58
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||
msgid "This action can't be undone."
|
||||
msgstr "Cette action ne peut pas être annulée."
|
||||
|
||||
@@ -2182,7 +2162,7 @@ msgstr "Cette action ne peut pas être annulée."
|
||||
msgid "This API key will only be shown once. Please save it in a secure location."
|
||||
msgstr "Cette clé API ne sera affichée qu'une seule fois. Veuillez la sauvegarder dans un emplacement sécurisé."
|
||||
|
||||
#: src/views/public/board/index.tsx:169
|
||||
#: src/views/public/board/index.tsx:168
|
||||
msgid "This board is private or does not exist"
|
||||
msgstr "Ce tableau est privé ou n'existe pas"
|
||||
|
||||
@@ -2244,27 +2224,23 @@ msgstr "Importations Trello"
|
||||
msgid "Triaging"
|
||||
msgstr "Triage"
|
||||
|
||||
#: src/views/home/components/Logos.tsx:67
|
||||
#: src/views/home/components/Logos.tsx:73
|
||||
msgid "Trusted by fast-moving teams<0/>around the world"
|
||||
msgstr "Approuvé par des équipes dynamiques<0/>du monde entier"
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:88
|
||||
msgid "Unable to add checklist item"
|
||||
msgstr "Impossible d'ajouter l'élément à la liste de contrôle"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Impossible d'ajouter un commentaire"
|
||||
|
||||
#: src/views/card/index.tsx:199
|
||||
msgid "Unable to add label"
|
||||
msgstr "Impossible d'ajouter l'étiquette"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:181
|
||||
msgid "Unable to create card"
|
||||
msgstr "Impossible de créer la carte"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistForm.tsx:69
|
||||
msgid "Unable to create checklist"
|
||||
msgstr "Impossible de créer la liste de contrôle"
|
||||
|
||||
@@ -2281,7 +2257,7 @@ msgstr "Impossible de créer le modèle"
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Impossible de créer l'espace de travail"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:72
|
||||
msgid "Unable to delete attachment"
|
||||
msgstr "Impossible de supprimer la pièce jointe"
|
||||
|
||||
@@ -2289,15 +2265,15 @@ msgstr "Impossible de supprimer la pièce jointe"
|
||||
msgid "Unable to delete card"
|
||||
msgstr "Impossible de supprimer la carte"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:36
|
||||
msgid "Unable to delete checklist"
|
||||
msgstr "Impossible de supprimer la liste de contrôle"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:94
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:87
|
||||
msgid "Unable to delete checklist item"
|
||||
msgstr "Impossible de supprimer l'élément de la liste de contrôle"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:44
|
||||
msgid "Unable to delete comment"
|
||||
msgstr "Impossible de supprimer le commentaire"
|
||||
|
||||
@@ -2305,10 +2281,6 @@ msgstr "Impossible de supprimer le commentaire"
|
||||
msgid "Unable to remove member"
|
||||
msgstr "Impossible de supprimer le membre"
|
||||
|
||||
#: src/views/card/components/Checklists.tsx:80
|
||||
msgid "Unable to reorder checklist item"
|
||||
msgstr "Impossible de réorganiser l'élément de la liste de contrôle"
|
||||
|
||||
#: src/components/FeedbackModal.tsx:40
|
||||
msgid "Unable to send feedback"
|
||||
msgstr "Impossible d'envoyer les commentaires"
|
||||
@@ -2321,46 +2293,46 @@ msgstr "Impossible de mettre à jour l'URL du tableau"
|
||||
msgid "Unable to update board visibility"
|
||||
msgstr "Impossible de mettre à jour la visibilité du tableau"
|
||||
|
||||
#: src/views/board/index.tsx:225
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/board/index.tsx:229
|
||||
#: src/views/card/index.tsx:185
|
||||
msgid "Unable to update card"
|
||||
msgstr "Impossible de mettre à jour la carte"
|
||||
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:45
|
||||
msgid "Unable to update checklist"
|
||||
msgstr "Impossible de mettre à jour la liste de contrôle"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:66
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:59
|
||||
msgid "Unable to update checklist item"
|
||||
msgstr "Impossible de mettre à jour l'élément de la liste de contrôle"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/Comment.tsx:63
|
||||
msgid "Unable to update comment"
|
||||
msgstr "Impossible de mettre à jour le commentaire"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/DueDateSelector.tsx:58
|
||||
msgid "Unable to update due date"
|
||||
msgstr "Impossible de mettre à jour la date d'échéance"
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/LabelSelector.tsx:71
|
||||
msgid "Unable to update labels"
|
||||
msgstr "Impossible de mettre à jour les étiquettes"
|
||||
|
||||
#: src/views/board/index.tsx:169
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/board/index.tsx:173
|
||||
#: src/views/card/components/ListSelector.tsx:51
|
||||
msgid "Unable to update list"
|
||||
msgstr "Impossible de mettre à jour la liste"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/MemberSelector.tsx:78
|
||||
msgid "Unable to update members"
|
||||
msgstr "Impossible de mettre à jour les membres"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:156
|
||||
#: src/views/card/components/ActivityList.tsx:121
|
||||
msgid "unassigned <0>{0}</0> from the card"
|
||||
msgstr "a désassigné <0>{0}</0> de la carte"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:153
|
||||
#: src/views/card/components/ActivityList.tsx:118
|
||||
msgid "unassigned themselves from the card"
|
||||
msgstr "s'est retiré de la carte"
|
||||
|
||||
@@ -2419,24 +2391,24 @@ msgstr "Mettre à jour"
|
||||
msgid "Update label"
|
||||
msgstr "Mettre à jour l'étiquette"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:111
|
||||
#: src/views/card/components/ActivityList.tsx:70
|
||||
msgid "updated a checklist item"
|
||||
msgstr "a mis à jour un élément de la liste de contrôle"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:101
|
||||
#: src/views/card/components/ActivityList.tsx:60
|
||||
msgid "updated the description"
|
||||
msgstr "a mis à jour la description"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:116
|
||||
#: src/views/card/components/ActivityList.tsx:75
|
||||
msgid "updated the due date"
|
||||
msgstr "a mis à jour la date d'échéance"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:100
|
||||
#: src/views/card/components/ActivityList.tsx:59
|
||||
msgid "updated the title"
|
||||
msgstr "a mis à jour le titre"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:125
|
||||
#: src/views/card/components/ActivityList.tsx:90
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "a mis à jour le titre en <0>{0}</0>"
|
||||
|
||||
@@ -2450,8 +2422,8 @@ msgstr "Passer à Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Passer à Pro (29 $/mois)"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
#: src/views/card/components/AttachmentUpload.tsx:32
|
||||
#: src/views/card/components/AttachmentUpload.tsx:78
|
||||
msgid "Upload failed"
|
||||
msgstr "Échec du téléversement"
|
||||
|
||||
@@ -2504,7 +2476,7 @@ msgstr "Consultez et gérez votre facturation et votre abonnement."
|
||||
msgid "View docs"
|
||||
msgstr "Voir la documentation"
|
||||
|
||||
#: src/views/public/board/index.tsx:142
|
||||
#: src/views/public/board/index.tsx:141
|
||||
msgid "View only"
|
||||
msgstr "Affichage uniquement"
|
||||
|
||||
@@ -2512,7 +2484,7 @@ msgstr "Affichage uniquement"
|
||||
msgid "View our roadmap."
|
||||
msgstr "Consultez notre feuille de route."
|
||||
|
||||
#: src/views/public/board/index.tsx:172
|
||||
#: src/views/public/board/index.tsx:171
|
||||
msgid "View workspace"
|
||||
msgstr "Voir l'espace de travail"
|
||||
|
||||
@@ -2557,10 +2529,10 @@ msgid "Why make an open source Trello?"
|
||||
msgstr "Pourquoi créer un Trello open source ?"
|
||||
|
||||
#: src/components/SettingsLayout.tsx:39
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/members/index.tsx:173
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/public/board/index.tsx:113
|
||||
#: src/views/public/boards/index.tsx:66
|
||||
msgid "Workspace"
|
||||
msgstr "Espace de travail"
|
||||
@@ -2694,7 +2666,7 @@ msgstr "Vos tableaux ont été importés."
|
||||
msgid "Your display name has been updated."
|
||||
msgstr "Votre nom d'affichage a été mis à jour."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:27
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
msgid "Your file has been uploaded successfully."
|
||||
msgstr "Votre fichier a été téléversé avec succès."
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ export const locales = [
|
||||
"nl",
|
||||
"ru",
|
||||
"pl",
|
||||
"ptbr"
|
||||
] as const;
|
||||
|
||||
export type Locale = (typeof locales)[number];
|
||||
@@ -23,5 +22,4 @@ export const localeNames: Record<Locale, string> = {
|
||||
nl: "Nederlands",
|
||||
ru: "Русский",
|
||||
pl: "Polski",
|
||||
ptbr: "Português",
|
||||
};
|
||||
|
||||
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:124
|
||||
#: src/views/card/components/Comment.tsx:123
|
||||
msgid " (edited)"
|
||||
msgstr " (modificato)"
|
||||
|
||||
@@ -31,7 +31,7 @@ msgstr "{0}"
|
||||
#. placeholder {1}: board?.name ?? t`Board`
|
||||
#. placeholder {1}: workspace.name ?? t`Workspace`
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "{0} | {1}"
|
||||
msgstr "{0} | {1}"
|
||||
|
||||
@@ -41,7 +41,7 @@ msgid "{0} labels"
|
||||
msgstr "{0} etichette"
|
||||
|
||||
#. placeholder {0}: isTemplate ? "Template" : "Board"
|
||||
#: src/views/board/index.tsx:408
|
||||
#: src/views/board/index.tsx:412
|
||||
msgid "{0} not found"
|
||||
msgstr "{0} non trovato"
|
||||
|
||||
@@ -83,7 +83,7 @@ msgstr "Account eliminato"
|
||||
msgid "Actions"
|
||||
msgstr "Azioni"
|
||||
|
||||
#: src/views/card/index.tsx:386
|
||||
#: src/views/card/index.tsx:352
|
||||
#: src/views/public/board/CardModal.tsx:158
|
||||
msgid "Activity"
|
||||
msgstr "Attività"
|
||||
@@ -100,12 +100,12 @@ msgstr "Registri attività"
|
||||
msgid "Add a card"
|
||||
msgstr "Aggiungi una carta"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:147
|
||||
#: src/views/card/components/NewCommentForm.tsx:55
|
||||
#: src/views/card/components/Comment.tsx:146
|
||||
#: src/views/card/components/NewCommentForm.tsx:57
|
||||
msgid "Add a comment..."
|
||||
msgstr "Aggiungi un commento..."
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:141
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:140
|
||||
msgid "Add an item..."
|
||||
msgstr "Aggiungi un elemento..."
|
||||
|
||||
@@ -117,53 +117,48 @@ msgstr "Aggiungi checklist"
|
||||
msgid "Add description... (type '/' to open commands or '@' to mention)"
|
||||
msgstr "Aggiungi descrizione... (digita '/' per aprire i comandi o '@' per menzionare)"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:195
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:172
|
||||
msgid "Add details..."
|
||||
msgstr "Aggiungi dettagli..."
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:110
|
||||
#: src/views/card/components/LabelSelector.tsx:115
|
||||
#: src/views/card/components/LabelSelector.tsx:109
|
||||
#: src/views/card/components/LabelSelector.tsx:114
|
||||
msgid "Add label"
|
||||
msgstr "Aggiungi etichetta"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:131
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:257
|
||||
msgid "Add member"
|
||||
msgstr "Aggiungi membro"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:77
|
||||
msgid "added {0} labels: <0>{labelList}</0>"
|
||||
msgstr "ha aggiunto {0} etichette: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
#: src/views/card/components/ActivityList.tsx:66
|
||||
msgid "added a checklist"
|
||||
msgstr "ha aggiunto una checklist"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
#: src/views/card/components/ActivityList.tsx:69
|
||||
msgid "added a checklist item"
|
||||
msgstr "ha aggiunto un elemento alla checklist"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:103
|
||||
#: src/views/card/components/ActivityList.tsx:62
|
||||
msgid "added a label to the card"
|
||||
msgstr "ha aggiunto un'etichetta alla carta"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:105
|
||||
#: src/views/card/components/ActivityList.tsx:64
|
||||
msgid "added a member to the card"
|
||||
msgstr "ha aggiunto un membro alla carta"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:181
|
||||
#: src/views/card/components/ActivityList.tsx:146
|
||||
msgid "added checklist <0>{0}</0>"
|
||||
msgstr "ha aggiunto la checklist <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
#: src/views/card/components/ActivityList.tsx:170
|
||||
msgid "added checklist item <0>{0}</0>"
|
||||
msgstr "ha aggiunto l'elemento <0>{0}</0> alla checklist"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:165
|
||||
#: src/views/card/components/ActivityList.tsx:130
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "ha aggiunto l'etichetta <0>{0}</0>"
|
||||
|
||||
@@ -254,11 +249,11 @@ msgstr "Sei sicuro di voler eliminare questo {0}?"
|
||||
msgid "Are you sure you want to delete this card?"
|
||||
msgstr "Sei sicuro di voler eliminare questa carta?"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:56
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:55
|
||||
msgid "Are you sure you want to delete this checklist?"
|
||||
msgstr "Sei sicuro di voler eliminare questa checklist?"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:65
|
||||
msgid "Are you sure you want to delete this comment?"
|
||||
msgstr "Sei sicuro di voler eliminare questo commento?"
|
||||
|
||||
@@ -271,7 +266,7 @@ msgid "Are you sure you want to delete your account?"
|
||||
msgstr "Sei sicuro di voler eliminare il tuo account?"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:145
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
msgid "assigned <0>{0}</0> to the card"
|
||||
msgstr "ha assegnato <0>{0}</0> alla scheda"
|
||||
|
||||
@@ -279,7 +274,7 @@ msgstr "ha assegnato <0>{0}</0> alla scheda"
|
||||
msgid "Assignees"
|
||||
msgstr "Assegnatari"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
#: src/views/card/components/AttachmentUpload.tsx:25
|
||||
msgid "Attachment uploaded"
|
||||
msgstr "Allegato caricato"
|
||||
|
||||
@@ -317,9 +312,9 @@ msgstr "Portale di fatturazione"
|
||||
msgid "Blog Post"
|
||||
msgstr "Post del blog"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/card/index.tsx:238
|
||||
#: src/views/public/board/index.tsx:113
|
||||
msgid "Board"
|
||||
msgstr "Bacheca"
|
||||
|
||||
@@ -336,7 +331,7 @@ msgstr "Il nome della bacheca non può superare i 100 caratteri"
|
||||
msgid "Board name is required"
|
||||
msgstr "Il nome della bacheca è obbligatorio"
|
||||
|
||||
#: src/views/public/board/index.tsx:166
|
||||
#: src/views/public/board/index.tsx:165
|
||||
msgid "Board not found"
|
||||
msgstr "Bacheca non trovata"
|
||||
|
||||
@@ -352,7 +347,7 @@ msgstr "L'URL della bacheca può contenere solo lettere, numeri e trattini"
|
||||
msgid "Board URL cannot exceed 60 characters"
|
||||
msgstr "L'URL della bacheca non può superare i 60 caratteri"
|
||||
|
||||
#: src/views/public/board/index.tsx:80
|
||||
#: src/views/public/board/index.tsx:79
|
||||
msgid "Board URL copied to clipboard"
|
||||
msgstr "URL della bacheca copiato negli appunti"
|
||||
|
||||
@@ -387,10 +382,10 @@ msgstr "Segnalazione bug"
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:44
|
||||
#: src/views/card/components/Comment.tsx:159
|
||||
#: src/views/card/components/Comment.tsx:158
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:77
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:63
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: src/views/settings/components/Avatar.tsx:306
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
@@ -400,12 +395,12 @@ msgstr "Segnalazione bug"
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "Card"
|
||||
msgstr "Carta"
|
||||
|
||||
#: src/views/card/index.tsx:306
|
||||
#: src/views/card/index.tsx:342
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:308
|
||||
msgid "Card not found"
|
||||
msgstr "Carta non trovata"
|
||||
|
||||
@@ -424,8 +419,8 @@ msgstr "Cambia password"
|
||||
msgid "Change your language preferences."
|
||||
msgstr "Modifica le tue preferenze di lingua."
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:255
|
||||
#: src/views/card/components/ActivityList.tsx:269
|
||||
#: src/views/card/components/ActivityList.tsx:220
|
||||
#: src/views/card/components/ActivityList.tsx:234
|
||||
msgid "changed the due date to <0>{formattedDate}</0>"
|
||||
msgstr "ha cambiato la data di scadenza a <0>{formattedDate}</0>"
|
||||
|
||||
@@ -438,7 +433,7 @@ msgstr "Dai un'occhiata ad alcuni dei nostri progetti open source preferiti."
|
||||
msgid "Check your inbox"
|
||||
msgstr "Controlla la tua casella di posta"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:119
|
||||
#: src/views/card/components/NewChecklistForm.tsx:118
|
||||
msgid "Checklist name"
|
||||
msgstr "Nome della checklist"
|
||||
|
||||
@@ -499,12 +494,12 @@ msgstr "Completato"
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Controllo e proprietà completi:"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:112
|
||||
#: src/views/card/components/ActivityList.tsx:71
|
||||
msgid "completed a checklist item"
|
||||
msgstr "ha completato un elemento della checklist"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:222
|
||||
#: src/views/card/components/ActivityList.tsx:187
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
msgstr "ha completato l'elemento <0>{0}</0> della checklist"
|
||||
|
||||
@@ -578,7 +573,7 @@ msgstr "Crea chiave API"
|
||||
msgid "Create card"
|
||||
msgstr "Crea carta"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:135
|
||||
#: src/views/card/components/NewChecklistForm.tsx:134
|
||||
msgid "Create checklist"
|
||||
msgstr "Crea checklist"
|
||||
|
||||
@@ -605,12 +600,12 @@ msgid "Create new key"
|
||||
msgstr "Crea nuova chiave"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:414
|
||||
#: src/views/card/components/LabelSelector.tsx:98
|
||||
#: src/views/card/components/LabelSelector.tsx:97
|
||||
msgid "Create new label"
|
||||
msgstr "Crea nuova etichetta"
|
||||
|
||||
#: src/views/board/index.tsx:64
|
||||
#: src/views/board/index.tsx:499
|
||||
#: src/views/board/index.tsx:65
|
||||
#: src/views/board/index.tsx:503
|
||||
msgid "Create new list"
|
||||
msgstr "Crea nuova lista"
|
||||
|
||||
@@ -623,7 +618,7 @@ msgstr "Crea template"
|
||||
msgid "Create workspace"
|
||||
msgstr "Crea spazio di lavoro"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:99
|
||||
#: src/views/card/components/ActivityList.tsx:58
|
||||
msgid "created the card"
|
||||
msgstr "ha creato la carta"
|
||||
|
||||
@@ -681,8 +676,8 @@ msgstr "Disattiva link di invito"
|
||||
#: src/components/LabelForm.tsx:228
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:47
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:67
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:83
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
@@ -700,7 +695,7 @@ msgstr "Elimina bacheca"
|
||||
msgid "Delete card"
|
||||
msgstr "Elimina carta"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:92
|
||||
#: src/views/card/components/Comment.tsx:91
|
||||
msgid "Delete comment"
|
||||
msgstr "Elimina commento"
|
||||
|
||||
@@ -718,21 +713,21 @@ msgstr "Elimina template"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Elimina spazio di lavoro"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:109
|
||||
#: src/views/card/components/ActivityList.tsx:68
|
||||
msgid "deleted a checklist"
|
||||
msgstr "ha eliminato una checklist"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:114
|
||||
#: src/views/card/components/ActivityList.tsx:73
|
||||
msgid "deleted a checklist item"
|
||||
msgstr "ha eliminato un elemento della checklist"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:197
|
||||
#: src/views/card/components/ActivityList.tsx:162
|
||||
msgid "deleted checklist <0>{0}</0>"
|
||||
msgstr "ha eliminato la checklist <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:240
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
msgid "deleted checklist item <0>{0}</0>"
|
||||
msgstr "ha eliminato l'elemento <0>{0}</0> della checklist"
|
||||
|
||||
@@ -798,13 +793,13 @@ msgstr "Non hai un account? <0><1>Registrati</1></0>"
|
||||
msgid "Done"
|
||||
msgstr "Fatto"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:141
|
||||
msgid "Download failed"
|
||||
msgstr "Download fallito"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:171
|
||||
#: src/views/board/components/NewCardForm.tsx:469
|
||||
#: src/views/card/index.tsx:139
|
||||
#: src/views/card/index.tsx:138
|
||||
msgid "Due date"
|
||||
msgstr "Data di scadenza"
|
||||
|
||||
@@ -829,7 +824,7 @@ msgstr "Scade domani"
|
||||
msgid "Edit board URL"
|
||||
msgstr "Modifica URL della bacheca"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:83
|
||||
#: src/views/card/components/Comment.tsx:82
|
||||
msgid "Edit comment"
|
||||
msgstr "Modifica commento"
|
||||
|
||||
@@ -986,8 +981,8 @@ msgstr "Impossibile creare la bacheca"
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
msgstr "Accesso con {0} fallito. Riprova."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:34
|
||||
#: src/views/card/components/AttachmentUpload.tsx:80
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
msgid "Failed to upload attachment. Please try again."
|
||||
msgstr "Impossibile caricare l'allegato. Riprova."
|
||||
|
||||
@@ -1092,7 +1087,7 @@ msgstr "Inizia ora"
|
||||
msgid "Get started by creating a new {0}"
|
||||
msgstr "Inizia creando un nuovo {0}"
|
||||
|
||||
#: src/views/board/index.tsx:491
|
||||
#: src/views/board/index.tsx:495
|
||||
msgid "Get started by creating a new list"
|
||||
msgstr "Inizia creando una nuova lista"
|
||||
|
||||
@@ -1279,7 +1274,7 @@ msgstr "Link di invito"
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "I link di invito richiedono un abbonamento Team o Pro. Per favore aggiorna il tuo spazio di lavoro."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:367
|
||||
msgid "Invite member"
|
||||
msgstr "Invita membro"
|
||||
@@ -1328,7 +1323,7 @@ msgstr "Scorciatoie da tastiera"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:418
|
||||
#: src/views/card/index.tsx:121
|
||||
#: src/views/card/index.tsx:120
|
||||
msgid "Labels"
|
||||
msgstr "Etichette"
|
||||
|
||||
@@ -1378,11 +1373,11 @@ msgstr "Licenza"
|
||||
msgid "Light"
|
||||
msgstr "Chiaro"
|
||||
|
||||
#: src/views/public/board/index.tsx:78
|
||||
#: src/views/public/board/index.tsx:77
|
||||
msgid "Link copied"
|
||||
msgstr "Link copiato"
|
||||
|
||||
#: src/views/card/index.tsx:113
|
||||
#: src/views/card/index.tsx:112
|
||||
msgid "List"
|
||||
msgstr "Lista"
|
||||
|
||||
@@ -1394,14 +1389,6 @@ msgstr "Nome lista"
|
||||
msgid "Lists"
|
||||
msgstr "Liste"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Load more activities"
|
||||
msgstr "Carica altre attività"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Loading..."
|
||||
msgstr "Caricamento in corso..."
|
||||
|
||||
#: src/views/auth/login/index.tsx:33
|
||||
msgid "Login | kan.bn"
|
||||
msgstr "Login | kan.bn"
|
||||
@@ -1430,12 +1417,12 @@ msgstr "link magico"
|
||||
msgid "Make template"
|
||||
msgstr "Crea template"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:113
|
||||
#: src/views/card/components/ActivityList.tsx:72
|
||||
msgid "marked a checklist item as incomplete"
|
||||
msgstr "ha segnato un elemento della checklist come incompleto"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:231
|
||||
#: src/views/card/components/ActivityList.tsx:196
|
||||
msgid "marked checklist item <0>{0}</0> as incomplete"
|
||||
msgstr "ha segnato l'elemento <0>{0}</0> della checklist come incompleto"
|
||||
|
||||
@@ -1446,7 +1433,7 @@ msgstr "Media priorità"
|
||||
#: src/components/SideNavigation.tsx:121
|
||||
#: src/views/board/components/Filters.tsx:147
|
||||
#: src/views/board/components/NewCardForm.tsx:376
|
||||
#: src/views/card/index.tsx:130
|
||||
#: src/views/card/index.tsx:129
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Membri"
|
||||
@@ -1467,11 +1454,11 @@ msgstr "fatturazione mensile"
|
||||
|
||||
#. placeholder {0}: truncate(fromList)
|
||||
#. placeholder {1}: truncate(toList)
|
||||
#: src/views/card/components/ActivityList.tsx:133
|
||||
#: src/views/card/components/ActivityList.tsx:98
|
||||
msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
msgstr "ha spostato la scheda da <0>{0}</0> a<1>{1}</1>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:102
|
||||
#: src/views/card/components/ActivityList.tsx:61
|
||||
msgid "moved the card to another list"
|
||||
msgstr "ha spostato la scheda in un'altra lista"
|
||||
|
||||
@@ -1507,7 +1494,7 @@ msgstr "Nuova chiave API"
|
||||
msgid "New card"
|
||||
msgstr "Nuova carta"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:103
|
||||
#: src/views/card/components/NewChecklistForm.tsx:102
|
||||
msgid "New checklist"
|
||||
msgstr "Nuova checklist"
|
||||
|
||||
@@ -1520,7 +1507,7 @@ msgid "New label"
|
||||
msgstr "Nuova etichetta"
|
||||
|
||||
#: src/views/board/components/NewListForm.tsx:113
|
||||
#: src/views/board/index.tsx:462
|
||||
#: src/views/board/index.tsx:466
|
||||
msgid "New list"
|
||||
msgstr "Nuova lista"
|
||||
|
||||
@@ -1573,7 +1560,7 @@ msgstr "Nessuna carta di credito richiesta"
|
||||
msgid "No dates"
|
||||
msgstr "Nessuna data"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:143
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
msgid "No download URL available for this attachment."
|
||||
msgstr "Nessun URL di download disponibile per questo allegato."
|
||||
|
||||
@@ -1581,7 +1568,7 @@ msgstr "Nessun URL di download disponibile per questo allegato."
|
||||
msgid "No keyboard shortcuts registered."
|
||||
msgstr "Nessuna scorciatoia da tastiera registrata."
|
||||
|
||||
#: src/views/board/index.tsx:488
|
||||
#: src/views/board/index.tsx:492
|
||||
msgid "No lists"
|
||||
msgstr "Nessuna lista"
|
||||
|
||||
@@ -1732,27 +1719,25 @@ msgstr "Seleziona un file da caricare."
|
||||
#: src/views/board/components/NewTemplateForm.tsx:77
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:73
|
||||
#: src/views/board/components/VisibilityButton.tsx:54
|
||||
#: src/views/board/index.tsx:170
|
||||
#: src/views/board/index.tsx:226
|
||||
#: src/views/board/index.tsx:174
|
||||
#: src/views/board/index.tsx:230
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:205
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:74
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:67
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:95
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:47
|
||||
#: src/views/card/components/Checklists.tsx:81
|
||||
#: src/views/card/components/Comment.tsx:65
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:60
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:88
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:52
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:46
|
||||
#: src/views/card/components/DueDateSelector.tsx:60
|
||||
#: src/views/card/components/LabelSelector.tsx:73
|
||||
#: src/views/card/components/ListSelector.tsx:53
|
||||
#: src/views/card/components/MemberSelector.tsx:80
|
||||
#: src/views/card/components/NewChecklistForm.tsx:71
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:90
|
||||
#: src/views/card/components/NewCommentForm.tsx:32
|
||||
#: src/views/card/index.tsx:187
|
||||
#: src/views/card/index.tsx:200
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:241
|
||||
@@ -1852,40 +1837,35 @@ msgstr "Rimuovi"
|
||||
msgid "Remove member"
|
||||
msgstr "Rimuovi membro"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:91
|
||||
msgid "removed {0} labels: <0>{labelList}</0>"
|
||||
msgstr "ha rimosso {0} etichette: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:104
|
||||
#: src/views/card/components/ActivityList.tsx:63
|
||||
msgid "removed a label from the card"
|
||||
msgstr "ha rimosso un'etichetta dalla scheda"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:106
|
||||
#: src/views/card/components/ActivityList.tsx:65
|
||||
msgid "removed a member from the card"
|
||||
msgstr "ha rimosso un membro dalla scheda"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:173
|
||||
#: src/views/card/components/ActivityList.tsx:138
|
||||
msgid "removed label <0>{0}</0>"
|
||||
msgstr "ha rimosso l'etichetta <0>{0}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:117
|
||||
#: src/views/card/components/ActivityList.tsx:276
|
||||
#: src/views/card/components/ActivityList.tsx:76
|
||||
#: src/views/card/components/ActivityList.tsx:241
|
||||
msgid "removed the due date"
|
||||
msgstr "ha rimosso la data di scadenza"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:108
|
||||
#: src/views/card/components/ActivityList.tsx:67
|
||||
msgid "renamed a checklist"
|
||||
msgstr "ha rinominato una checklist"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:189
|
||||
#: src/views/card/components/ActivityList.tsx:154
|
||||
msgid "renamed checklist <0>{0}</0>"
|
||||
msgstr "ha rinominato la checklist <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:213
|
||||
#: src/views/card/components/ActivityList.tsx:178
|
||||
msgid "renamed checklist item to <0>{0}</0>"
|
||||
msgstr "ha rinominato l'elemento della checklist in <0>{0}</0>"
|
||||
|
||||
@@ -1924,7 +1904,7 @@ msgstr "Ruolo"
|
||||
msgid "Run on your own infrastructure"
|
||||
msgstr "Esegui sulla tua infrastruttura"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:166
|
||||
#: src/views/card/components/Comment.tsx:165
|
||||
#: src/views/settings/components/Avatar.tsx:309
|
||||
msgid "Save"
|
||||
msgstr "Salva"
|
||||
@@ -1962,7 +1942,7 @@ msgstr "Self Host"
|
||||
msgid "Self host with Github"
|
||||
msgstr "Self host con Github"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:142
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
msgid "self-assigned the card"
|
||||
msgstr "si è auto-assegnato la scheda"
|
||||
|
||||
@@ -1978,11 +1958,11 @@ msgstr "Invia feedback"
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:117
|
||||
#: src/views/card/components/DueDateSelector.tsx:116
|
||||
msgid "Set due date"
|
||||
msgstr "Imposta data di scadenza"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:115
|
||||
#: src/views/card/components/ActivityList.tsx:74
|
||||
msgid "set the due date"
|
||||
msgstr "ha impostato la data di scadenza"
|
||||
|
||||
@@ -2107,8 +2087,8 @@ msgstr "Piano Team"
|
||||
msgid "Teams"
|
||||
msgstr "Team"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:417
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/board/index.tsx:421
|
||||
msgid "Template"
|
||||
msgstr "Template"
|
||||
|
||||
@@ -2173,8 +2153,8 @@ msgstr "Non potranno accedere a questo spazio di lavoro."
|
||||
#: src/components/DeleteLabelConfirmation.tsx:44
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:39
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:59
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:69
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:58
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||
msgid "This action can't be undone."
|
||||
msgstr "Questa azione non può essere annullata."
|
||||
|
||||
@@ -2182,7 +2162,7 @@ msgstr "Questa azione non può essere annullata."
|
||||
msgid "This API key will only be shown once. Please save it in a secure location."
|
||||
msgstr "Questa chiave API verrà mostrata una sola volta. Salvala in un luogo sicuro."
|
||||
|
||||
#: src/views/public/board/index.tsx:169
|
||||
#: src/views/public/board/index.tsx:168
|
||||
msgid "This board is private or does not exist"
|
||||
msgstr "Questa bacheca è privata o non esiste"
|
||||
|
||||
@@ -2244,27 +2224,23 @@ msgstr "Importazioni da Trello"
|
||||
msgid "Triaging"
|
||||
msgstr "Smistamento"
|
||||
|
||||
#: src/views/home/components/Logos.tsx:67
|
||||
#: src/views/home/components/Logos.tsx:73
|
||||
msgid "Trusted by fast-moving teams<0/>around the world"
|
||||
msgstr "Team dinamici di tutto il mondo<0/>si fidano di noi"
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:88
|
||||
msgid "Unable to add checklist item"
|
||||
msgstr "Impossibile aggiungere l'elemento della checklist"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Impossibile aggiungere il commento"
|
||||
|
||||
#: src/views/card/index.tsx:199
|
||||
msgid "Unable to add label"
|
||||
msgstr "Impossibile aggiungere etichetta"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:181
|
||||
msgid "Unable to create card"
|
||||
msgstr "Impossibile creare la scheda"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistForm.tsx:69
|
||||
msgid "Unable to create checklist"
|
||||
msgstr "Impossibile creare la checklist"
|
||||
|
||||
@@ -2281,7 +2257,7 @@ msgstr "Impossibile creare il template"
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Impossibile creare lo spazio di lavoro"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:72
|
||||
msgid "Unable to delete attachment"
|
||||
msgstr "Impossibile eliminare l'allegato"
|
||||
|
||||
@@ -2289,15 +2265,15 @@ msgstr "Impossibile eliminare l'allegato"
|
||||
msgid "Unable to delete card"
|
||||
msgstr "Impossibile eliminare la scheda"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:36
|
||||
msgid "Unable to delete checklist"
|
||||
msgstr "Impossibile eliminare la checklist"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:94
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:87
|
||||
msgid "Unable to delete checklist item"
|
||||
msgstr "Impossibile eliminare l'elemento della checklist"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:44
|
||||
msgid "Unable to delete comment"
|
||||
msgstr "Impossibile eliminare il commento"
|
||||
|
||||
@@ -2305,10 +2281,6 @@ msgstr "Impossibile eliminare il commento"
|
||||
msgid "Unable to remove member"
|
||||
msgstr "Impossibile rimuovere il membro"
|
||||
|
||||
#: src/views/card/components/Checklists.tsx:80
|
||||
msgid "Unable to reorder checklist item"
|
||||
msgstr "Impossibile riordinare elemento della checklist"
|
||||
|
||||
#: src/components/FeedbackModal.tsx:40
|
||||
msgid "Unable to send feedback"
|
||||
msgstr "Impossibile inviare feedback"
|
||||
@@ -2321,46 +2293,46 @@ msgstr "Impossibile aggiornare l'URL della bacheca"
|
||||
msgid "Unable to update board visibility"
|
||||
msgstr "Impossibile aggiornare la visibilità della bacheca"
|
||||
|
||||
#: src/views/board/index.tsx:225
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/board/index.tsx:229
|
||||
#: src/views/card/index.tsx:185
|
||||
msgid "Unable to update card"
|
||||
msgstr "Impossibile aggiornare la scheda"
|
||||
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:45
|
||||
msgid "Unable to update checklist"
|
||||
msgstr "Impossibile aggiornare la checklist"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:66
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:59
|
||||
msgid "Unable to update checklist item"
|
||||
msgstr "Impossibile aggiornare l'elemento della checklist"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/Comment.tsx:63
|
||||
msgid "Unable to update comment"
|
||||
msgstr "Impossibile aggiornare il commento"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/DueDateSelector.tsx:58
|
||||
msgid "Unable to update due date"
|
||||
msgstr "Impossibile aggiornare la data di scadenza"
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/LabelSelector.tsx:71
|
||||
msgid "Unable to update labels"
|
||||
msgstr "Impossibile aggiornare le etichette"
|
||||
|
||||
#: src/views/board/index.tsx:169
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/board/index.tsx:173
|
||||
#: src/views/card/components/ListSelector.tsx:51
|
||||
msgid "Unable to update list"
|
||||
msgstr "Impossibile aggiornare la lista"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/MemberSelector.tsx:78
|
||||
msgid "Unable to update members"
|
||||
msgstr "Impossibile aggiornare i membri"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:156
|
||||
#: src/views/card/components/ActivityList.tsx:121
|
||||
msgid "unassigned <0>{0}</0> from the card"
|
||||
msgstr "ha rimosso l'assegnazione di <0>{0}</0> dalla scheda"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:153
|
||||
#: src/views/card/components/ActivityList.tsx:118
|
||||
msgid "unassigned themselves from the card"
|
||||
msgstr "si è rimosso dall'assegnazione della scheda"
|
||||
|
||||
@@ -2419,24 +2391,24 @@ msgstr "Aggiorna"
|
||||
msgid "Update label"
|
||||
msgstr "Aggiorna etichetta"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:111
|
||||
#: src/views/card/components/ActivityList.tsx:70
|
||||
msgid "updated a checklist item"
|
||||
msgstr "ha aggiornato un elemento della checklist"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:101
|
||||
#: src/views/card/components/ActivityList.tsx:60
|
||||
msgid "updated the description"
|
||||
msgstr "ha aggiornato la descrizione"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:116
|
||||
#: src/views/card/components/ActivityList.tsx:75
|
||||
msgid "updated the due date"
|
||||
msgstr "ha aggiornato la data di scadenza"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:100
|
||||
#: src/views/card/components/ActivityList.tsx:59
|
||||
msgid "updated the title"
|
||||
msgstr "ha aggiornato il titolo"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:125
|
||||
#: src/views/card/components/ActivityList.tsx:90
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "ha aggiornato il titolo in <0>{0}</0>"
|
||||
|
||||
@@ -2450,8 +2422,8 @@ msgstr "Passa a Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Passa a Pro ($29/mese)"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
#: src/views/card/components/AttachmentUpload.tsx:32
|
||||
#: src/views/card/components/AttachmentUpload.tsx:78
|
||||
msgid "Upload failed"
|
||||
msgstr "Caricamento fallito"
|
||||
|
||||
@@ -2504,7 +2476,7 @@ msgstr "Visualizza e gestisci la tua fatturazione e abbonamento."
|
||||
msgid "View docs"
|
||||
msgstr "Visualizza documenti"
|
||||
|
||||
#: src/views/public/board/index.tsx:142
|
||||
#: src/views/public/board/index.tsx:141
|
||||
msgid "View only"
|
||||
msgstr "Solo visualizzazione"
|
||||
|
||||
@@ -2512,7 +2484,7 @@ msgstr "Solo visualizzazione"
|
||||
msgid "View our roadmap."
|
||||
msgstr "Visualizza la nostra roadmap."
|
||||
|
||||
#: src/views/public/board/index.tsx:172
|
||||
#: src/views/public/board/index.tsx:171
|
||||
msgid "View workspace"
|
||||
msgstr "Visualizza spazio di lavoro"
|
||||
|
||||
@@ -2557,10 +2529,10 @@ msgid "Why make an open source Trello?"
|
||||
msgstr "Perché creare un Trello open source?"
|
||||
|
||||
#: src/components/SettingsLayout.tsx:39
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/members/index.tsx:173
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/public/board/index.tsx:113
|
||||
#: src/views/public/boards/index.tsx:66
|
||||
msgid "Workspace"
|
||||
msgstr "Spazio di lavoro"
|
||||
@@ -2694,7 +2666,7 @@ msgstr "Le tue bacheche sono state importate."
|
||||
msgid "Your display name has been updated."
|
||||
msgstr "Il tuo nome visualizzato è stato aggiornato."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:27
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
msgid "Your file has been uploaded successfully."
|
||||
msgstr "Il tuo file è stato caricato con successo."
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:124
|
||||
#: src/views/card/components/Comment.tsx:123
|
||||
msgid " (edited)"
|
||||
msgstr " (bewerkt)"
|
||||
|
||||
@@ -31,7 +31,7 @@ msgstr "{0}"
|
||||
#. placeholder {1}: board?.name ?? t`Board`
|
||||
#. placeholder {1}: workspace.name ?? t`Workspace`
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "{0} | {1}"
|
||||
msgstr "{0} | {1}"
|
||||
|
||||
@@ -41,7 +41,7 @@ msgid "{0} labels"
|
||||
msgstr "{0} labels"
|
||||
|
||||
#. placeholder {0}: isTemplate ? "Template" : "Board"
|
||||
#: src/views/board/index.tsx:408
|
||||
#: src/views/board/index.tsx:412
|
||||
msgid "{0} not found"
|
||||
msgstr "{0} niet gevonden"
|
||||
|
||||
@@ -83,7 +83,7 @@ msgstr "Account verwijderd"
|
||||
msgid "Actions"
|
||||
msgstr "Acties"
|
||||
|
||||
#: src/views/card/index.tsx:386
|
||||
#: src/views/card/index.tsx:352
|
||||
#: src/views/public/board/CardModal.tsx:158
|
||||
msgid "Activity"
|
||||
msgstr "Activiteit"
|
||||
@@ -100,12 +100,12 @@ msgstr "Activiteitenlogboeken"
|
||||
msgid "Add a card"
|
||||
msgstr "Voeg een kaart toe"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:147
|
||||
#: src/views/card/components/NewCommentForm.tsx:55
|
||||
#: src/views/card/components/Comment.tsx:146
|
||||
#: src/views/card/components/NewCommentForm.tsx:57
|
||||
msgid "Add a comment..."
|
||||
msgstr "Voeg een reactie toe..."
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:141
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:140
|
||||
msgid "Add an item..."
|
||||
msgstr "Voeg een item toe..."
|
||||
|
||||
@@ -117,53 +117,48 @@ msgstr "Checklist toevoegen"
|
||||
msgid "Add description... (type '/' to open commands or '@' to mention)"
|
||||
msgstr "Beschrijving toevoegen... (typ '/' om commando's te openen of '@' om te vermelden)"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:195
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:172
|
||||
msgid "Add details..."
|
||||
msgstr "Details toevoegen..."
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:110
|
||||
#: src/views/card/components/LabelSelector.tsx:115
|
||||
#: src/views/card/components/LabelSelector.tsx:109
|
||||
#: src/views/card/components/LabelSelector.tsx:114
|
||||
msgid "Add label"
|
||||
msgstr "Label toevoegen"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:131
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:257
|
||||
msgid "Add member"
|
||||
msgstr "Lid toevoegen"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:77
|
||||
msgid "added {0} labels: <0>{labelList}</0>"
|
||||
msgstr "{0} labels toegevoegd: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
#: src/views/card/components/ActivityList.tsx:66
|
||||
msgid "added a checklist"
|
||||
msgstr "heeft een checklist toegevoegd"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
#: src/views/card/components/ActivityList.tsx:69
|
||||
msgid "added a checklist item"
|
||||
msgstr "heeft een checklistitem toegevoegd"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:103
|
||||
#: src/views/card/components/ActivityList.tsx:62
|
||||
msgid "added a label to the card"
|
||||
msgstr "heeft een label aan de kaart toegevoegd"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:105
|
||||
#: src/views/card/components/ActivityList.tsx:64
|
||||
msgid "added a member to the card"
|
||||
msgstr "heeft een lid aan de kaart toegevoegd"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:181
|
||||
#: src/views/card/components/ActivityList.tsx:146
|
||||
msgid "added checklist <0>{0}</0>"
|
||||
msgstr "heeft checklist <0>{0}</0> toegevoegd"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
#: src/views/card/components/ActivityList.tsx:170
|
||||
msgid "added checklist item <0>{0}</0>"
|
||||
msgstr "heeft checklistitem <0>{0}</0> toegevoegd"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:165
|
||||
#: src/views/card/components/ActivityList.tsx:130
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "heeft label <0>{0}</0> toegevoegd"
|
||||
|
||||
@@ -254,11 +249,11 @@ msgstr "Weet je zeker dat je deze {0} wilt verwijderen?"
|
||||
msgid "Are you sure you want to delete this card?"
|
||||
msgstr "Weet je zeker dat je deze kaart wilt verwijderen?"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:56
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:55
|
||||
msgid "Are you sure you want to delete this checklist?"
|
||||
msgstr "Weet je zeker dat je deze checklist wilt verwijderen?"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:65
|
||||
msgid "Are you sure you want to delete this comment?"
|
||||
msgstr "Weet je zeker dat je deze opmerking wilt verwijderen?"
|
||||
|
||||
@@ -271,7 +266,7 @@ msgid "Are you sure you want to delete your account?"
|
||||
msgstr "Weet je zeker dat je je account wilt verwijderen?"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:145
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
msgid "assigned <0>{0}</0> to the card"
|
||||
msgstr "heeft <0>{0}</0> aan de kaart toegewezen"
|
||||
|
||||
@@ -279,7 +274,7 @@ msgstr "heeft <0>{0}</0> aan de kaart toegewezen"
|
||||
msgid "Assignees"
|
||||
msgstr "Toegewezen personen"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
#: src/views/card/components/AttachmentUpload.tsx:25
|
||||
msgid "Attachment uploaded"
|
||||
msgstr "Bijlage geüpload"
|
||||
|
||||
@@ -317,9 +312,9 @@ msgstr "Factureringsportaal"
|
||||
msgid "Blog Post"
|
||||
msgstr "Blogbericht"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/card/index.tsx:238
|
||||
#: src/views/public/board/index.tsx:113
|
||||
msgid "Board"
|
||||
msgstr "Bord"
|
||||
|
||||
@@ -336,7 +331,7 @@ msgstr "Bordnaam mag niet langer zijn dan 100 tekens"
|
||||
msgid "Board name is required"
|
||||
msgstr "Bordnaam is verplicht"
|
||||
|
||||
#: src/views/public/board/index.tsx:166
|
||||
#: src/views/public/board/index.tsx:165
|
||||
msgid "Board not found"
|
||||
msgstr "Bord niet gevonden"
|
||||
|
||||
@@ -352,7 +347,7 @@ msgstr "Board URL kan alleen letters, cijfers en koppeltekens bevatten"
|
||||
msgid "Board URL cannot exceed 60 characters"
|
||||
msgstr "Board URL mag niet langer zijn dan 60 tekens"
|
||||
|
||||
#: src/views/public/board/index.tsx:80
|
||||
#: src/views/public/board/index.tsx:79
|
||||
msgid "Board URL copied to clipboard"
|
||||
msgstr "Board URL gekopieerd naar klembord"
|
||||
|
||||
@@ -387,10 +382,10 @@ msgstr "Bugrapport"
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:44
|
||||
#: src/views/card/components/Comment.tsx:159
|
||||
#: src/views/card/components/Comment.tsx:158
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:77
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:63
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: src/views/settings/components/Avatar.tsx:306
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
@@ -400,12 +395,12 @@ msgstr "Bugrapport"
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "Card"
|
||||
msgstr "Kaart"
|
||||
|
||||
#: src/views/card/index.tsx:306
|
||||
#: src/views/card/index.tsx:342
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:308
|
||||
msgid "Card not found"
|
||||
msgstr "Kaart niet gevonden"
|
||||
|
||||
@@ -424,8 +419,8 @@ msgstr "Wachtwoord wijzigen"
|
||||
msgid "Change your language preferences."
|
||||
msgstr "Wijzig je taalvoorkeuren."
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:255
|
||||
#: src/views/card/components/ActivityList.tsx:269
|
||||
#: src/views/card/components/ActivityList.tsx:220
|
||||
#: src/views/card/components/ActivityList.tsx:234
|
||||
msgid "changed the due date to <0>{formattedDate}</0>"
|
||||
msgstr "heeft de vervaldatum gewijzigd naar <0>{formattedDate}</0>"
|
||||
|
||||
@@ -438,7 +433,7 @@ msgstr "Bekijk enkele van onze favoriete open source projecten."
|
||||
msgid "Check your inbox"
|
||||
msgstr "Controleer je inbox"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:119
|
||||
#: src/views/card/components/NewChecklistForm.tsx:118
|
||||
msgid "Checklist name"
|
||||
msgstr "Naam checklist"
|
||||
|
||||
@@ -499,12 +494,12 @@ msgstr "Voltooid"
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Volledige controle en eigendom:"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:112
|
||||
#: src/views/card/components/ActivityList.tsx:71
|
||||
msgid "completed a checklist item"
|
||||
msgstr "heeft een checklistitem voltooid"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:222
|
||||
#: src/views/card/components/ActivityList.tsx:187
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
msgstr "heeft checklistitem <0>{0}</0> voltooid"
|
||||
|
||||
@@ -578,7 +573,7 @@ msgstr "API-sleutel aanmaken"
|
||||
msgid "Create card"
|
||||
msgstr "Maak kaart"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:135
|
||||
#: src/views/card/components/NewChecklistForm.tsx:134
|
||||
msgid "Create checklist"
|
||||
msgstr "Checklist maken"
|
||||
|
||||
@@ -605,12 +600,12 @@ msgid "Create new key"
|
||||
msgstr "Nieuwe sleutel aanmaken"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:414
|
||||
#: src/views/card/components/LabelSelector.tsx:98
|
||||
#: src/views/card/components/LabelSelector.tsx:97
|
||||
msgid "Create new label"
|
||||
msgstr "Maak nieuw label"
|
||||
|
||||
#: src/views/board/index.tsx:64
|
||||
#: src/views/board/index.tsx:499
|
||||
#: src/views/board/index.tsx:65
|
||||
#: src/views/board/index.tsx:503
|
||||
msgid "Create new list"
|
||||
msgstr "Maak nieuwe lijst"
|
||||
|
||||
@@ -623,7 +618,7 @@ msgstr "Sjabloon maken"
|
||||
msgid "Create workspace"
|
||||
msgstr "Werkruimte maken"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:99
|
||||
#: src/views/card/components/ActivityList.tsx:58
|
||||
msgid "created the card"
|
||||
msgstr "heeft de kaart aangemaakt"
|
||||
|
||||
@@ -681,8 +676,8 @@ msgstr "Uitnodigingslink deactiveren"
|
||||
#: src/components/LabelForm.tsx:228
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:47
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:67
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:83
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
@@ -700,7 +695,7 @@ msgstr "Board verwijderen"
|
||||
msgid "Delete card"
|
||||
msgstr "Kaart verwijderen"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:92
|
||||
#: src/views/card/components/Comment.tsx:91
|
||||
msgid "Delete comment"
|
||||
msgstr "Reactie verwijderen"
|
||||
|
||||
@@ -718,21 +713,21 @@ msgstr "Sjabloon verwijderen"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Werkruimte verwijderen"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:109
|
||||
#: src/views/card/components/ActivityList.tsx:68
|
||||
msgid "deleted a checklist"
|
||||
msgstr "heeft een checklist verwijderd"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:114
|
||||
#: src/views/card/components/ActivityList.tsx:73
|
||||
msgid "deleted a checklist item"
|
||||
msgstr "heeft een checklistitem verwijderd"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:197
|
||||
#: src/views/card/components/ActivityList.tsx:162
|
||||
msgid "deleted checklist <0>{0}</0>"
|
||||
msgstr "heeft checklist <0>{0}</0> verwijderd"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:240
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
msgid "deleted checklist item <0>{0}</0>"
|
||||
msgstr "heeft checklistitem <0>{0}</0> verwijderd"
|
||||
|
||||
@@ -798,13 +793,13 @@ msgstr "Heb je geen account? <0><1>Registreer je</1></0>"
|
||||
msgid "Done"
|
||||
msgstr "Klaar"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:141
|
||||
msgid "Download failed"
|
||||
msgstr "Download mislukt"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:171
|
||||
#: src/views/board/components/NewCardForm.tsx:469
|
||||
#: src/views/card/index.tsx:139
|
||||
#: src/views/card/index.tsx:138
|
||||
msgid "Due date"
|
||||
msgstr "Vervaldatum"
|
||||
|
||||
@@ -829,7 +824,7 @@ msgstr "Vervalt morgen"
|
||||
msgid "Edit board URL"
|
||||
msgstr "Board URL bewerken"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:83
|
||||
#: src/views/card/components/Comment.tsx:82
|
||||
msgid "Edit comment"
|
||||
msgstr "Reactie bewerken"
|
||||
|
||||
@@ -986,8 +981,8 @@ msgstr "Bord maken mislukt"
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
msgstr "Inloggen met {0} is mislukt. Probeer het opnieuw."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:34
|
||||
#: src/views/card/components/AttachmentUpload.tsx:80
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
msgid "Failed to upload attachment. Please try again."
|
||||
msgstr "Bijlage uploaden mislukt. Probeer het opnieuw."
|
||||
|
||||
@@ -1092,7 +1087,7 @@ msgstr "Aan de slag"
|
||||
msgid "Get started by creating a new {0}"
|
||||
msgstr "Begin door een nieuwe {0} te maken"
|
||||
|
||||
#: src/views/board/index.tsx:491
|
||||
#: src/views/board/index.tsx:495
|
||||
msgid "Get started by creating a new list"
|
||||
msgstr "Begin door een nieuwe lijst te maken"
|
||||
|
||||
@@ -1279,7 +1274,7 @@ msgstr "Uitnodigingslinks"
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Uitnodigingslinks vereisen een Team- of Pro-abonnement. Upgrade je werkruimte."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:367
|
||||
msgid "Invite member"
|
||||
msgstr "Lid uitnodigen"
|
||||
@@ -1328,7 +1323,7 @@ msgstr "Sneltoetsen"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:418
|
||||
#: src/views/card/index.tsx:121
|
||||
#: src/views/card/index.tsx:120
|
||||
msgid "Labels"
|
||||
msgstr "Labels"
|
||||
|
||||
@@ -1378,11 +1373,11 @@ msgstr "Licentie"
|
||||
msgid "Light"
|
||||
msgstr "Licht"
|
||||
|
||||
#: src/views/public/board/index.tsx:78
|
||||
#: src/views/public/board/index.tsx:77
|
||||
msgid "Link copied"
|
||||
msgstr "Link gekopieerd"
|
||||
|
||||
#: src/views/card/index.tsx:113
|
||||
#: src/views/card/index.tsx:112
|
||||
msgid "List"
|
||||
msgstr "Lijst"
|
||||
|
||||
@@ -1394,14 +1389,6 @@ msgstr "Lijstnaam"
|
||||
msgid "Lists"
|
||||
msgstr "Lijsten"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Load more activities"
|
||||
msgstr "Meer activiteiten laden"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Loading..."
|
||||
msgstr "Laden..."
|
||||
|
||||
#: src/views/auth/login/index.tsx:33
|
||||
msgid "Login | kan.bn"
|
||||
msgstr "Login | kan.bn"
|
||||
@@ -1430,12 +1417,12 @@ msgstr "magische link"
|
||||
msgid "Make template"
|
||||
msgstr "Sjabloon maken"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:113
|
||||
#: src/views/card/components/ActivityList.tsx:72
|
||||
msgid "marked a checklist item as incomplete"
|
||||
msgstr "heeft een checklistitem als onvoltooid gemarkeerd"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:231
|
||||
#: src/views/card/components/ActivityList.tsx:196
|
||||
msgid "marked checklist item <0>{0}</0> as incomplete"
|
||||
msgstr "heeft checklistitem <0>{0}</0> als onvoltooid gemarkeerd"
|
||||
|
||||
@@ -1446,7 +1433,7 @@ msgstr "Gemiddelde prioriteit"
|
||||
#: src/components/SideNavigation.tsx:121
|
||||
#: src/views/board/components/Filters.tsx:147
|
||||
#: src/views/board/components/NewCardForm.tsx:376
|
||||
#: src/views/card/index.tsx:130
|
||||
#: src/views/card/index.tsx:129
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Leden"
|
||||
@@ -1467,11 +1454,11 @@ msgstr "maandelijkse facturering"
|
||||
|
||||
#. placeholder {0}: truncate(fromList)
|
||||
#. placeholder {1}: truncate(toList)
|
||||
#: src/views/card/components/ActivityList.tsx:133
|
||||
#: src/views/card/components/ActivityList.tsx:98
|
||||
msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
msgstr "heeft de kaart verplaatst van <0>{0}</0> naar<1>{1}</1>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:102
|
||||
#: src/views/card/components/ActivityList.tsx:61
|
||||
msgid "moved the card to another list"
|
||||
msgstr "heeft de kaart naar een andere lijst verplaatst"
|
||||
|
||||
@@ -1507,7 +1494,7 @@ msgstr "Nieuwe API-sleutel"
|
||||
msgid "New card"
|
||||
msgstr "Nieuwe kaart"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:103
|
||||
#: src/views/card/components/NewChecklistForm.tsx:102
|
||||
msgid "New checklist"
|
||||
msgstr "Nieuwe checklist"
|
||||
|
||||
@@ -1520,7 +1507,7 @@ msgid "New label"
|
||||
msgstr "Nieuw label"
|
||||
|
||||
#: src/views/board/components/NewListForm.tsx:113
|
||||
#: src/views/board/index.tsx:462
|
||||
#: src/views/board/index.tsx:466
|
||||
msgid "New list"
|
||||
msgstr "Nieuwe lijst"
|
||||
|
||||
@@ -1573,7 +1560,7 @@ msgstr "Geen creditcard vereist"
|
||||
msgid "No dates"
|
||||
msgstr "Geen datums"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:143
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
msgid "No download URL available for this attachment."
|
||||
msgstr "Geen download-URL beschikbaar voor deze bijlage."
|
||||
|
||||
@@ -1581,7 +1568,7 @@ msgstr "Geen download-URL beschikbaar voor deze bijlage."
|
||||
msgid "No keyboard shortcuts registered."
|
||||
msgstr "Geen sneltoetsen geregistreerd."
|
||||
|
||||
#: src/views/board/index.tsx:488
|
||||
#: src/views/board/index.tsx:492
|
||||
msgid "No lists"
|
||||
msgstr "Geen lijsten"
|
||||
|
||||
@@ -1732,27 +1719,25 @@ msgstr "Selecteer een bestand om te uploaden."
|
||||
#: src/views/board/components/NewTemplateForm.tsx:77
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:73
|
||||
#: src/views/board/components/VisibilityButton.tsx:54
|
||||
#: src/views/board/index.tsx:170
|
||||
#: src/views/board/index.tsx:226
|
||||
#: src/views/board/index.tsx:174
|
||||
#: src/views/board/index.tsx:230
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:205
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:74
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:67
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:95
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:47
|
||||
#: src/views/card/components/Checklists.tsx:81
|
||||
#: src/views/card/components/Comment.tsx:65
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:60
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:88
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:52
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:46
|
||||
#: src/views/card/components/DueDateSelector.tsx:60
|
||||
#: src/views/card/components/LabelSelector.tsx:73
|
||||
#: src/views/card/components/ListSelector.tsx:53
|
||||
#: src/views/card/components/MemberSelector.tsx:80
|
||||
#: src/views/card/components/NewChecklistForm.tsx:71
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:90
|
||||
#: src/views/card/components/NewCommentForm.tsx:32
|
||||
#: src/views/card/index.tsx:187
|
||||
#: src/views/card/index.tsx:200
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:241
|
||||
@@ -1852,40 +1837,35 @@ msgstr "Verwijderen"
|
||||
msgid "Remove member"
|
||||
msgstr "Lid verwijderen"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:91
|
||||
msgid "removed {0} labels: <0>{labelList}</0>"
|
||||
msgstr "{0} labels verwijderd: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:104
|
||||
#: src/views/card/components/ActivityList.tsx:63
|
||||
msgid "removed a label from the card"
|
||||
msgstr "heeft een label van de kaart verwijderd"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:106
|
||||
#: src/views/card/components/ActivityList.tsx:65
|
||||
msgid "removed a member from the card"
|
||||
msgstr "heeft een lid van de kaart verwijderd"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:173
|
||||
#: src/views/card/components/ActivityList.tsx:138
|
||||
msgid "removed label <0>{0}</0>"
|
||||
msgstr "heeft label <0>{0}</0> verwijderd"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:117
|
||||
#: src/views/card/components/ActivityList.tsx:276
|
||||
#: src/views/card/components/ActivityList.tsx:76
|
||||
#: src/views/card/components/ActivityList.tsx:241
|
||||
msgid "removed the due date"
|
||||
msgstr "heeft de vervaldatum verwijderd"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:108
|
||||
#: src/views/card/components/ActivityList.tsx:67
|
||||
msgid "renamed a checklist"
|
||||
msgstr "heeft een checklist hernoemd"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:189
|
||||
#: src/views/card/components/ActivityList.tsx:154
|
||||
msgid "renamed checklist <0>{0}</0>"
|
||||
msgstr "heeft checklist <0>{0}</0> hernoemd"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:213
|
||||
#: src/views/card/components/ActivityList.tsx:178
|
||||
msgid "renamed checklist item to <0>{0}</0>"
|
||||
msgstr "checklistitem hernoemd naar <0>{0}</0>"
|
||||
|
||||
@@ -1924,7 +1904,7 @@ msgstr "Rol"
|
||||
msgid "Run on your own infrastructure"
|
||||
msgstr "Draai op je eigen infrastructuur"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:166
|
||||
#: src/views/card/components/Comment.tsx:165
|
||||
#: src/views/settings/components/Avatar.tsx:309
|
||||
msgid "Save"
|
||||
msgstr "Opslaan"
|
||||
@@ -1962,7 +1942,7 @@ msgstr "Zelf hosten"
|
||||
msgid "Self host with Github"
|
||||
msgstr "Zelf hosten met Github"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:142
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
msgid "self-assigned the card"
|
||||
msgstr "heeft de kaart aan zichzelf toegewezen"
|
||||
|
||||
@@ -1978,11 +1958,11 @@ msgstr "Feedback versturen"
|
||||
msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:117
|
||||
#: src/views/card/components/DueDateSelector.tsx:116
|
||||
msgid "Set due date"
|
||||
msgstr "Vervaldatum instellen"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:115
|
||||
#: src/views/card/components/ActivityList.tsx:74
|
||||
msgid "set the due date"
|
||||
msgstr "heeft de vervaldatum ingesteld"
|
||||
|
||||
@@ -2107,8 +2087,8 @@ msgstr "Teamplan"
|
||||
msgid "Teams"
|
||||
msgstr "Teams"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:417
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/board/index.tsx:421
|
||||
msgid "Template"
|
||||
msgstr "Sjabloon"
|
||||
|
||||
@@ -2173,8 +2153,8 @@ msgstr "Ze zullen geen toegang meer hebben tot deze werkruimte."
|
||||
#: src/components/DeleteLabelConfirmation.tsx:44
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:39
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:59
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:69
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:58
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||
msgid "This action can't be undone."
|
||||
msgstr "Deze actie kan niet ongedaan worden gemaakt."
|
||||
|
||||
@@ -2182,7 +2162,7 @@ msgstr "Deze actie kan niet ongedaan worden gemaakt."
|
||||
msgid "This API key will only be shown once. Please save it in a secure location."
|
||||
msgstr "Deze API-sleutel wordt slechts één keer getoond. Bewaar deze op een veilige plaats."
|
||||
|
||||
#: src/views/public/board/index.tsx:169
|
||||
#: src/views/public/board/index.tsx:168
|
||||
msgid "This board is private or does not exist"
|
||||
msgstr "Dit bord is privé of bestaat niet"
|
||||
|
||||
@@ -2244,27 +2224,23 @@ msgstr "Trello-imports"
|
||||
msgid "Triaging"
|
||||
msgstr "Triage"
|
||||
|
||||
#: src/views/home/components/Logos.tsx:67
|
||||
#: src/views/home/components/Logos.tsx:73
|
||||
msgid "Trusted by fast-moving teams<0/>around the world"
|
||||
msgstr "Vertrouwd door snelbewegende teams<0/>over de hele wereld"
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:88
|
||||
msgid "Unable to add checklist item"
|
||||
msgstr "Kan checklistitem niet toevoegen"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Kan geen reactie toevoegen"
|
||||
|
||||
#: src/views/card/index.tsx:199
|
||||
msgid "Unable to add label"
|
||||
msgstr "Kan label niet toevoegen"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:181
|
||||
msgid "Unable to create card"
|
||||
msgstr "Kan kaart niet aanmaken"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistForm.tsx:69
|
||||
msgid "Unable to create checklist"
|
||||
msgstr "Kan checklist niet maken"
|
||||
|
||||
@@ -2281,7 +2257,7 @@ msgstr "Kan sjabloon niet maken"
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Kan werkruimte niet aanmaken"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:72
|
||||
msgid "Unable to delete attachment"
|
||||
msgstr "Kan bijlage niet verwijderen"
|
||||
|
||||
@@ -2289,15 +2265,15 @@ msgstr "Kan bijlage niet verwijderen"
|
||||
msgid "Unable to delete card"
|
||||
msgstr "Kan kaart niet verwijderen"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:36
|
||||
msgid "Unable to delete checklist"
|
||||
msgstr "Kan checklist niet verwijderen"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:94
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:87
|
||||
msgid "Unable to delete checklist item"
|
||||
msgstr "Kan checklistitem niet verwijderen"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:44
|
||||
msgid "Unable to delete comment"
|
||||
msgstr "Kan opmerking niet verwijderen"
|
||||
|
||||
@@ -2305,10 +2281,6 @@ msgstr "Kan opmerking niet verwijderen"
|
||||
msgid "Unable to remove member"
|
||||
msgstr "Kan lid niet verwijderen"
|
||||
|
||||
#: src/views/card/components/Checklists.tsx:80
|
||||
msgid "Unable to reorder checklist item"
|
||||
msgstr "Kan checklistitem niet opnieuw ordenen"
|
||||
|
||||
#: src/components/FeedbackModal.tsx:40
|
||||
msgid "Unable to send feedback"
|
||||
msgstr "Feedback kon niet worden verzonden"
|
||||
@@ -2321,46 +2293,46 @@ msgstr "Kan board URL niet bijwerken"
|
||||
msgid "Unable to update board visibility"
|
||||
msgstr "Kan bordzichtbaarheid niet bijwerken"
|
||||
|
||||
#: src/views/board/index.tsx:225
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/board/index.tsx:229
|
||||
#: src/views/card/index.tsx:185
|
||||
msgid "Unable to update card"
|
||||
msgstr "Kan kaart niet bijwerken"
|
||||
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:45
|
||||
msgid "Unable to update checklist"
|
||||
msgstr "Kan checklist niet bijwerken"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:66
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:59
|
||||
msgid "Unable to update checklist item"
|
||||
msgstr "Kan checklistitem niet bijwerken"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/Comment.tsx:63
|
||||
msgid "Unable to update comment"
|
||||
msgstr "Kan reactie niet bijwerken"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/DueDateSelector.tsx:58
|
||||
msgid "Unable to update due date"
|
||||
msgstr "Kan vervaldatum niet bijwerken"
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/LabelSelector.tsx:71
|
||||
msgid "Unable to update labels"
|
||||
msgstr "Kan labels niet bijwerken"
|
||||
|
||||
#: src/views/board/index.tsx:169
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/board/index.tsx:173
|
||||
#: src/views/card/components/ListSelector.tsx:51
|
||||
msgid "Unable to update list"
|
||||
msgstr "Kan lijst niet bijwerken"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/MemberSelector.tsx:78
|
||||
msgid "Unable to update members"
|
||||
msgstr "Kan leden niet bijwerken"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:156
|
||||
#: src/views/card/components/ActivityList.tsx:121
|
||||
msgid "unassigned <0>{0}</0> from the card"
|
||||
msgstr "<0>{0}</0> van de kaart verwijderd"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:153
|
||||
#: src/views/card/components/ActivityList.tsx:118
|
||||
msgid "unassigned themselves from the card"
|
||||
msgstr "zichzelf van de kaart verwijderd"
|
||||
|
||||
@@ -2419,24 +2391,24 @@ msgstr "Bijwerken"
|
||||
msgid "Update label"
|
||||
msgstr "Label bijwerken"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:111
|
||||
#: src/views/card/components/ActivityList.tsx:70
|
||||
msgid "updated a checklist item"
|
||||
msgstr "een checklistitem bijgewerkt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:101
|
||||
#: src/views/card/components/ActivityList.tsx:60
|
||||
msgid "updated the description"
|
||||
msgstr "beschrijving bijgewerkt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:116
|
||||
#: src/views/card/components/ActivityList.tsx:75
|
||||
msgid "updated the due date"
|
||||
msgstr "heeft de vervaldatum bijgewerkt"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:100
|
||||
#: src/views/card/components/ActivityList.tsx:59
|
||||
msgid "updated the title"
|
||||
msgstr "titel bijgewerkt"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:125
|
||||
#: src/views/card/components/ActivityList.tsx:90
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "titel bijgewerkt naar <0>{0}</0>"
|
||||
|
||||
@@ -2450,8 +2422,8 @@ msgstr "Upgraden naar Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Upgrade naar Pro ($29/maand)"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
#: src/views/card/components/AttachmentUpload.tsx:32
|
||||
#: src/views/card/components/AttachmentUpload.tsx:78
|
||||
msgid "Upload failed"
|
||||
msgstr "Uploaden mislukt"
|
||||
|
||||
@@ -2504,7 +2476,7 @@ msgstr "Bekijk en beheer je facturering en abonnement."
|
||||
msgid "View docs"
|
||||
msgstr "Bekijk documentatie"
|
||||
|
||||
#: src/views/public/board/index.tsx:142
|
||||
#: src/views/public/board/index.tsx:141
|
||||
msgid "View only"
|
||||
msgstr "Alleen bekijken"
|
||||
|
||||
@@ -2512,7 +2484,7 @@ msgstr "Alleen bekijken"
|
||||
msgid "View our roadmap."
|
||||
msgstr "Bekijk onze roadmap."
|
||||
|
||||
#: src/views/public/board/index.tsx:172
|
||||
#: src/views/public/board/index.tsx:171
|
||||
msgid "View workspace"
|
||||
msgstr "Werkruimte bekijken"
|
||||
|
||||
@@ -2557,10 +2529,10 @@ msgid "Why make an open source Trello?"
|
||||
msgstr "Waarom een open source Trello maken?"
|
||||
|
||||
#: src/components/SettingsLayout.tsx:39
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/members/index.tsx:173
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/public/board/index.tsx:113
|
||||
#: src/views/public/boards/index.tsx:66
|
||||
msgid "Workspace"
|
||||
msgstr "Werkruimte"
|
||||
@@ -2694,7 +2666,7 @@ msgstr "Je borden zijn geïmporteerd."
|
||||
msgid "Your display name has been updated."
|
||||
msgstr "Je weergavenaam is bijgewerkt."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:27
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
msgid "Your file has been uploaded successfully."
|
||||
msgstr "Je bestand is succesvol geüpload."
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:124
|
||||
#: src/views/card/components/Comment.tsx:123
|
||||
msgid " (edited)"
|
||||
msgstr " (edytowano)"
|
||||
|
||||
@@ -36,7 +36,7 @@ msgstr "{0}"
|
||||
#. placeholder {1}: board?.name ?? t`Board`
|
||||
#. placeholder {1}: workspace.name ?? t`Workspace`
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "{0} | {1}"
|
||||
msgstr "{0} | {1}"
|
||||
|
||||
@@ -46,7 +46,7 @@ msgid "{0} labels"
|
||||
msgstr "{0} etykiety"
|
||||
|
||||
#. placeholder {0}: isTemplate ? "Template" : "Board"
|
||||
#: src/views/board/index.tsx:408
|
||||
#: src/views/board/index.tsx:412
|
||||
msgid "{0} not found"
|
||||
msgstr "{0} nie znaleziono"
|
||||
|
||||
@@ -88,7 +88,7 @@ msgstr "Konto zostało usunięte"
|
||||
msgid "Actions"
|
||||
msgstr "Działania"
|
||||
|
||||
#: src/views/card/index.tsx:386
|
||||
#: src/views/card/index.tsx:352
|
||||
#: src/views/public/board/CardModal.tsx:158
|
||||
msgid "Activity"
|
||||
msgstr "Aktywność"
|
||||
@@ -105,12 +105,12 @@ msgstr "Dzienniki aktywności"
|
||||
msgid "Add a card"
|
||||
msgstr "Dodaj kartę"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:147
|
||||
#: src/views/card/components/NewCommentForm.tsx:55
|
||||
#: src/views/card/components/Comment.tsx:146
|
||||
#: src/views/card/components/NewCommentForm.tsx:57
|
||||
msgid "Add a comment..."
|
||||
msgstr "Dodaj komentarz..."
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:141
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:140
|
||||
msgid "Add an item..."
|
||||
msgstr "Dodaj element..."
|
||||
|
||||
@@ -122,53 +122,48 @@ msgstr "Dodaj listę kontrolną"
|
||||
msgid "Add description... (type '/' to open commands or '@' to mention)"
|
||||
msgstr "Dodaj opis... (wpisz '/' aby otworzyć polecenia lub '@' aby wspomnieć)"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:195
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:172
|
||||
msgid "Add details..."
|
||||
msgstr "Dodaj szczegóły..."
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:110
|
||||
#: src/views/card/components/LabelSelector.tsx:115
|
||||
#: src/views/card/components/LabelSelector.tsx:109
|
||||
#: src/views/card/components/LabelSelector.tsx:114
|
||||
msgid "Add label"
|
||||
msgstr "Dodaj etykietę"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:131
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:257
|
||||
msgid "Add member"
|
||||
msgstr "Dodaj członka"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:77
|
||||
msgid "added {0} labels: <0>{labelList}</0>"
|
||||
msgstr "dodano {0} etykiety: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
#: src/views/card/components/ActivityList.tsx:66
|
||||
msgid "added a checklist"
|
||||
msgstr "dodał listę kontrolną"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
#: src/views/card/components/ActivityList.tsx:69
|
||||
msgid "added a checklist item"
|
||||
msgstr "dodał(a) element listy kontrolnej"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:103
|
||||
#: src/views/card/components/ActivityList.tsx:62
|
||||
msgid "added a label to the card"
|
||||
msgstr "dodał(a) etykietę do karty"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:105
|
||||
#: src/views/card/components/ActivityList.tsx:64
|
||||
msgid "added a member to the card"
|
||||
msgstr "dodał(a) członka do karty"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:181
|
||||
#: src/views/card/components/ActivityList.tsx:146
|
||||
msgid "added checklist <0>{0}</0>"
|
||||
msgstr "dodał(a) listę kontrolną <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
#: src/views/card/components/ActivityList.tsx:170
|
||||
msgid "added checklist item <0>{0}</0>"
|
||||
msgstr "dodał(a) element listy kontrolnej <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:165
|
||||
#: src/views/card/components/ActivityList.tsx:130
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "dodał(a) etykietę <0>{0}</0>"
|
||||
|
||||
@@ -259,11 +254,11 @@ msgstr "Czy na pewno chcesz usunąć ten {0}?"
|
||||
msgid "Are you sure you want to delete this card?"
|
||||
msgstr "Czy na pewno chcesz usunąć tę kartę?"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:56
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:55
|
||||
msgid "Are you sure you want to delete this checklist?"
|
||||
msgstr "Czy na pewno chcesz usunąć tę listę kontrolną?"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:65
|
||||
msgid "Are you sure you want to delete this comment?"
|
||||
msgstr "Czy na pewno chcesz usunąć ten komentarz?"
|
||||
|
||||
@@ -276,7 +271,7 @@ msgid "Are you sure you want to delete your account?"
|
||||
msgstr "Czy na pewno chcesz usunąć swoje konto?"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:145
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
msgid "assigned <0>{0}</0> to the card"
|
||||
msgstr "przypisano <0>{0}</0> do karty"
|
||||
|
||||
@@ -284,7 +279,7 @@ msgstr "przypisano <0>{0}</0> do karty"
|
||||
msgid "Assignees"
|
||||
msgstr "Osoby przypisane"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
#: src/views/card/components/AttachmentUpload.tsx:25
|
||||
msgid "Attachment uploaded"
|
||||
msgstr "Załącznik został przesłany"
|
||||
|
||||
@@ -322,9 +317,9 @@ msgstr "Portal rozliczeniowy"
|
||||
msgid "Blog Post"
|
||||
msgstr "Post na blogu"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/card/index.tsx:238
|
||||
#: src/views/public/board/index.tsx:113
|
||||
msgid "Board"
|
||||
msgstr "Tablica"
|
||||
|
||||
@@ -341,7 +336,7 @@ msgstr "Nazwa tablicy nie może przekraczać 100 znaków"
|
||||
msgid "Board name is required"
|
||||
msgstr "Nazwa tablicy jest wymagana"
|
||||
|
||||
#: src/views/public/board/index.tsx:166
|
||||
#: src/views/public/board/index.tsx:165
|
||||
msgid "Board not found"
|
||||
msgstr "Tablica nie została znaleziona"
|
||||
|
||||
@@ -357,7 +352,7 @@ msgstr "Adres URL tablicy może zawierać tylko litery, cyfry i myślniki"
|
||||
msgid "Board URL cannot exceed 60 characters"
|
||||
msgstr "Adres URL tablicy nie może przekraczać 60 znaków"
|
||||
|
||||
#: src/views/public/board/index.tsx:80
|
||||
#: src/views/public/board/index.tsx:79
|
||||
msgid "Board URL copied to clipboard"
|
||||
msgstr "Adres URL tablicy został skopiowany do schowka"
|
||||
|
||||
@@ -392,10 +387,10 @@ msgstr "Zgłoszenie błędu"
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:44
|
||||
#: src/views/card/components/Comment.tsx:159
|
||||
#: src/views/card/components/Comment.tsx:158
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:77
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:63
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: src/views/settings/components/Avatar.tsx:306
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
@@ -405,12 +400,12 @@ msgstr "Zgłoszenie błędu"
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "Card"
|
||||
msgstr "Karta"
|
||||
|
||||
#: src/views/card/index.tsx:306
|
||||
#: src/views/card/index.tsx:342
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:308
|
||||
msgid "Card not found"
|
||||
msgstr "Nie można było znaleźć karty"
|
||||
|
||||
@@ -429,8 +424,8 @@ msgstr "Zmień hasło"
|
||||
msgid "Change your language preferences."
|
||||
msgstr "Zmień swoje preferencje językowe."
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:255
|
||||
#: src/views/card/components/ActivityList.tsx:269
|
||||
#: src/views/card/components/ActivityList.tsx:220
|
||||
#: src/views/card/components/ActivityList.tsx:234
|
||||
msgid "changed the due date to <0>{formattedDate}</0>"
|
||||
msgstr "zmieniono termin na <0>{formattedDate}</0>"
|
||||
|
||||
@@ -443,7 +438,7 @@ msgstr "Sprawdź niektóre z naszych ulubionych projektów otwartoźródłowych.
|
||||
msgid "Check your inbox"
|
||||
msgstr "Sprawdź swoją skrzynkę odbiorczą"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:119
|
||||
#: src/views/card/components/NewChecklistForm.tsx:118
|
||||
msgid "Checklist name"
|
||||
msgstr "Nazwa listy kontrolnej"
|
||||
|
||||
@@ -504,12 +499,12 @@ msgstr "Zakończ"
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Pełna kontrola i własność:"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:112
|
||||
#: src/views/card/components/ActivityList.tsx:71
|
||||
msgid "completed a checklist item"
|
||||
msgstr "ukończono element listy kontrolnej"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:222
|
||||
#: src/views/card/components/ActivityList.tsx:187
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
msgstr "ukończono element listy kontrolnej <0>{0}</0>"
|
||||
|
||||
@@ -583,7 +578,7 @@ msgstr "Utwórz klucz API"
|
||||
msgid "Create card"
|
||||
msgstr "Utwórz kartę"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:135
|
||||
#: src/views/card/components/NewChecklistForm.tsx:134
|
||||
msgid "Create checklist"
|
||||
msgstr "Utwórz listę kontrolną"
|
||||
|
||||
@@ -610,12 +605,12 @@ msgid "Create new key"
|
||||
msgstr "Utwórz nowy klucz"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:414
|
||||
#: src/views/card/components/LabelSelector.tsx:98
|
||||
#: src/views/card/components/LabelSelector.tsx:97
|
||||
msgid "Create new label"
|
||||
msgstr "Utwórz nową etykietę"
|
||||
|
||||
#: src/views/board/index.tsx:64
|
||||
#: src/views/board/index.tsx:499
|
||||
#: src/views/board/index.tsx:65
|
||||
#: src/views/board/index.tsx:503
|
||||
msgid "Create new list"
|
||||
msgstr "Utwórz nową listę"
|
||||
|
||||
@@ -628,7 +623,7 @@ msgstr "Utwórz szablon"
|
||||
msgid "Create workspace"
|
||||
msgstr "Utwórz przestrzeń roboczą"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:99
|
||||
#: src/views/card/components/ActivityList.tsx:58
|
||||
msgid "created the card"
|
||||
msgstr "utworzył(a) kartę"
|
||||
|
||||
@@ -686,8 +681,8 @@ msgstr "Dezaktywuj link zaproszenia"
|
||||
#: src/components/LabelForm.tsx:228
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:47
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:67
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:83
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||
msgid "Delete"
|
||||
msgstr "Usuń"
|
||||
|
||||
@@ -705,7 +700,7 @@ msgstr "Usuń tablicę"
|
||||
msgid "Delete card"
|
||||
msgstr "Usuń kartę"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:92
|
||||
#: src/views/card/components/Comment.tsx:91
|
||||
msgid "Delete comment"
|
||||
msgstr "Usuń komentarz"
|
||||
|
||||
@@ -723,21 +718,21 @@ msgstr "Usuń szablon"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Usuń przestrzeń roboczą"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:109
|
||||
#: src/views/card/components/ActivityList.tsx:68
|
||||
msgid "deleted a checklist"
|
||||
msgstr "usunięto listę kontrolną"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:114
|
||||
#: src/views/card/components/ActivityList.tsx:73
|
||||
msgid "deleted a checklist item"
|
||||
msgstr "usunięto element listy kontrolnej"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:197
|
||||
#: src/views/card/components/ActivityList.tsx:162
|
||||
msgid "deleted checklist <0>{0}</0>"
|
||||
msgstr "usunięto listę kontrolną <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:240
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
msgid "deleted checklist item <0>{0}</0>"
|
||||
msgstr "usunięto element listy kontrolnej <0>{0}</0>"
|
||||
|
||||
@@ -803,13 +798,13 @@ msgstr "Nie masz konta? <0><1>Zarejestruj się</1></0>"
|
||||
msgid "Done"
|
||||
msgstr "Gotowe"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:141
|
||||
msgid "Download failed"
|
||||
msgstr "Pobieranie nie powiodło się"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:171
|
||||
#: src/views/board/components/NewCardForm.tsx:469
|
||||
#: src/views/card/index.tsx:139
|
||||
#: src/views/card/index.tsx:138
|
||||
msgid "Due date"
|
||||
msgstr "Termin"
|
||||
|
||||
@@ -834,7 +829,7 @@ msgstr "Termin na jutro"
|
||||
msgid "Edit board URL"
|
||||
msgstr "Edytuj URL tablicy"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:83
|
||||
#: src/views/card/components/Comment.tsx:82
|
||||
msgid "Edit comment"
|
||||
msgstr "Edytuj komentarz"
|
||||
|
||||
@@ -991,8 +986,8 @@ msgstr "Nie udało się utworzyć tablicy"
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
msgstr "Nie udało się zalogować za pomocą {0}. Spróbuj ponownie."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:34
|
||||
#: src/views/card/components/AttachmentUpload.tsx:80
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
msgid "Failed to upload attachment. Please try again."
|
||||
msgstr "Nie udało się przesłać załącznika. Proszę spróbować ponownie."
|
||||
|
||||
@@ -1097,7 +1092,7 @@ msgstr "Rozpocznij"
|
||||
msgid "Get started by creating a new {0}"
|
||||
msgstr "Rozpocznij, tworząc nowy {0}"
|
||||
|
||||
#: src/views/board/index.tsx:491
|
||||
#: src/views/board/index.tsx:495
|
||||
msgid "Get started by creating a new list"
|
||||
msgstr "Rozpocznij, tworząc nową listę"
|
||||
|
||||
@@ -1284,7 +1279,7 @@ msgstr "Linki zaproszeń"
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Linki zaproszeń wymagają subskrypcji Team lub Pro. Proszę ulepszyć swoje środowisko pracy."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:367
|
||||
msgid "Invite member"
|
||||
msgstr "Zaproś członka"
|
||||
@@ -1333,7 +1328,7 @@ msgstr "Skróty klawiaturowe"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:418
|
||||
#: src/views/card/index.tsx:121
|
||||
#: src/views/card/index.tsx:120
|
||||
msgid "Labels"
|
||||
msgstr "Etykiety"
|
||||
|
||||
@@ -1383,11 +1378,11 @@ msgstr "Licencja"
|
||||
msgid "Light"
|
||||
msgstr "Jasny"
|
||||
|
||||
#: src/views/public/board/index.tsx:78
|
||||
#: src/views/public/board/index.tsx:77
|
||||
msgid "Link copied"
|
||||
msgstr "Link skopiowany"
|
||||
|
||||
#: src/views/card/index.tsx:113
|
||||
#: src/views/card/index.tsx:112
|
||||
msgid "List"
|
||||
msgstr "Lista"
|
||||
|
||||
@@ -1399,14 +1394,6 @@ msgstr "Nazwa listy"
|
||||
msgid "Lists"
|
||||
msgstr "Listy"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Load more activities"
|
||||
msgstr "Załaduj więcej aktywności"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Loading..."
|
||||
msgstr "Ładowanie..."
|
||||
|
||||
#: src/views/auth/login/index.tsx:33
|
||||
msgid "Login | kan.bn"
|
||||
msgstr "Zaloguj się | kan.bn"
|
||||
@@ -1435,12 +1422,12 @@ msgstr "magiczny link"
|
||||
msgid "Make template"
|
||||
msgstr "Utwórz szablon"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:113
|
||||
#: src/views/card/components/ActivityList.tsx:72
|
||||
msgid "marked a checklist item as incomplete"
|
||||
msgstr "oznaczył element listy kontrolnej jako nieukończony"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:231
|
||||
#: src/views/card/components/ActivityList.tsx:196
|
||||
msgid "marked checklist item <0>{0}</0> as incomplete"
|
||||
msgstr "oznaczył element listy kontrolnej <0>{0}</0> jako nieukończony"
|
||||
|
||||
@@ -1451,7 +1438,7 @@ msgstr "Średni priorytet"
|
||||
#: src/components/SideNavigation.tsx:121
|
||||
#: src/views/board/components/Filters.tsx:147
|
||||
#: src/views/board/components/NewCardForm.tsx:376
|
||||
#: src/views/card/index.tsx:130
|
||||
#: src/views/card/index.tsx:129
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Członkowie"
|
||||
@@ -1472,11 +1459,11 @@ msgstr "rozliczenie miesięczne"
|
||||
|
||||
#. placeholder {0}: truncate(fromList)
|
||||
#. placeholder {1}: truncate(toList)
|
||||
#: src/views/card/components/ActivityList.tsx:133
|
||||
#: src/views/card/components/ActivityList.tsx:98
|
||||
msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
msgstr "przeniesiono kartę z <0>{0}</0> do<1>{1}</1>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:102
|
||||
#: src/views/card/components/ActivityList.tsx:61
|
||||
msgid "moved the card to another list"
|
||||
msgstr "przeniesiono kartę do innej listy"
|
||||
|
||||
@@ -1512,7 +1499,7 @@ msgstr "Nowy klucz API"
|
||||
msgid "New card"
|
||||
msgstr "Nowa karta"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:103
|
||||
#: src/views/card/components/NewChecklistForm.tsx:102
|
||||
msgid "New checklist"
|
||||
msgstr "Nowa lista kontrolna"
|
||||
|
||||
@@ -1525,7 +1512,7 @@ msgid "New label"
|
||||
msgstr "Nowa etykieta"
|
||||
|
||||
#: src/views/board/components/NewListForm.tsx:113
|
||||
#: src/views/board/index.tsx:462
|
||||
#: src/views/board/index.tsx:466
|
||||
msgid "New list"
|
||||
msgstr "Nowa lista"
|
||||
|
||||
@@ -1578,7 +1565,7 @@ msgstr "Nie wymagana karta kredytowa"
|
||||
msgid "No dates"
|
||||
msgstr "Brak terminów"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:143
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
msgid "No download URL available for this attachment."
|
||||
msgstr "Brak dostępnego URL do pobrania tego załącznika."
|
||||
|
||||
@@ -1586,7 +1573,7 @@ msgstr "Brak dostępnego URL do pobrania tego załącznika."
|
||||
msgid "No keyboard shortcuts registered."
|
||||
msgstr "Brak zarejestrowanych skrótów klawiaturowych."
|
||||
|
||||
#: src/views/board/index.tsx:488
|
||||
#: src/views/board/index.tsx:492
|
||||
msgid "No lists"
|
||||
msgstr "Brak list"
|
||||
|
||||
@@ -1737,27 +1724,25 @@ msgstr "Proszę wybrać plik do przesłania."
|
||||
#: src/views/board/components/NewTemplateForm.tsx:77
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:73
|
||||
#: src/views/board/components/VisibilityButton.tsx:54
|
||||
#: src/views/board/index.tsx:170
|
||||
#: src/views/board/index.tsx:226
|
||||
#: src/views/board/index.tsx:174
|
||||
#: src/views/board/index.tsx:230
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:205
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:74
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:67
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:95
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:47
|
||||
#: src/views/card/components/Checklists.tsx:81
|
||||
#: src/views/card/components/Comment.tsx:65
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:60
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:88
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:52
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:46
|
||||
#: src/views/card/components/DueDateSelector.tsx:60
|
||||
#: src/views/card/components/LabelSelector.tsx:73
|
||||
#: src/views/card/components/ListSelector.tsx:53
|
||||
#: src/views/card/components/MemberSelector.tsx:80
|
||||
#: src/views/card/components/NewChecklistForm.tsx:71
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:90
|
||||
#: src/views/card/components/NewCommentForm.tsx:32
|
||||
#: src/views/card/index.tsx:187
|
||||
#: src/views/card/index.tsx:200
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:241
|
||||
@@ -1857,40 +1842,35 @@ msgstr "Usuń"
|
||||
msgid "Remove member"
|
||||
msgstr "Usuń członka"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:91
|
||||
msgid "removed {0} labels: <0>{labelList}</0>"
|
||||
msgstr "usunięto {0} etykiety: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:104
|
||||
#: src/views/card/components/ActivityList.tsx:63
|
||||
msgid "removed a label from the card"
|
||||
msgstr "usunął etykietę z karty"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:106
|
||||
#: src/views/card/components/ActivityList.tsx:65
|
||||
msgid "removed a member from the card"
|
||||
msgstr "usunął członka z karty"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:173
|
||||
#: src/views/card/components/ActivityList.tsx:138
|
||||
msgid "removed label <0>{0}</0>"
|
||||
msgstr "usunięto etykietę <0>{0}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:117
|
||||
#: src/views/card/components/ActivityList.tsx:276
|
||||
#: src/views/card/components/ActivityList.tsx:76
|
||||
#: src/views/card/components/ActivityList.tsx:241
|
||||
msgid "removed the due date"
|
||||
msgstr "usunięto termin"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:108
|
||||
#: src/views/card/components/ActivityList.tsx:67
|
||||
msgid "renamed a checklist"
|
||||
msgstr "zmieniono nazwę listy kontrolnej"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:189
|
||||
#: src/views/card/components/ActivityList.tsx:154
|
||||
msgid "renamed checklist <0>{0}</0>"
|
||||
msgstr "zmieniono nazwę listy kontrolnej <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:213
|
||||
#: src/views/card/components/ActivityList.tsx:178
|
||||
msgid "renamed checklist item to <0>{0}</0>"
|
||||
msgstr "zmieniono nazwę elementu listy kontrolnej na <0>{0}</0>"
|
||||
|
||||
@@ -1929,7 +1909,7 @@ msgstr "Rola"
|
||||
msgid "Run on your own infrastructure"
|
||||
msgstr "Uruchom na własnej infrastrukturze"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:166
|
||||
#: src/views/card/components/Comment.tsx:165
|
||||
#: src/views/settings/components/Avatar.tsx:309
|
||||
msgid "Save"
|
||||
msgstr "Zapisz"
|
||||
@@ -1967,7 +1947,7 @@ msgstr "Hostuj samodzielnie"
|
||||
msgid "Self host with Github"
|
||||
msgstr "Hostuj samodzielnie z Github"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:142
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
msgid "self-assigned the card"
|
||||
msgstr "przypisał(a) sobie kartę"
|
||||
|
||||
@@ -1983,11 +1963,11 @@ msgstr "Prześlij opinię"
|
||||
msgid "Senior"
|
||||
msgstr "Starszy"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:117
|
||||
#: src/views/card/components/DueDateSelector.tsx:116
|
||||
msgid "Set due date"
|
||||
msgstr "Ustaw termin"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:115
|
||||
#: src/views/card/components/ActivityList.tsx:74
|
||||
msgid "set the due date"
|
||||
msgstr "ustawiono termin"
|
||||
|
||||
@@ -2112,8 +2092,8 @@ msgstr "Plan zespołowy"
|
||||
msgid "Teams"
|
||||
msgstr "Zespoły"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:417
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/board/index.tsx:421
|
||||
msgid "Template"
|
||||
msgstr "Szablon"
|
||||
|
||||
@@ -2178,8 +2158,8 @@ msgstr "Nie będą mieli dostępu do tego obszaru roboczego."
|
||||
#: src/components/DeleteLabelConfirmation.tsx:44
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:39
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:59
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:69
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:58
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||
msgid "This action can't be undone."
|
||||
msgstr "Tej akcji nie można cofnąć."
|
||||
|
||||
@@ -2187,7 +2167,7 @@ msgstr "Tej akcji nie można cofnąć."
|
||||
msgid "This API key will only be shown once. Please save it in a secure location."
|
||||
msgstr "Ten klucz API zostanie wyświetlony tylko raz. Proszę zapisać go w bezpiecznym miejscu."
|
||||
|
||||
#: src/views/public/board/index.tsx:169
|
||||
#: src/views/public/board/index.tsx:168
|
||||
msgid "This board is private or does not exist"
|
||||
msgstr "Ta tablica jest prywatna lub nie istnieje"
|
||||
|
||||
@@ -2249,27 +2229,23 @@ msgstr "Importy Trello"
|
||||
msgid "Triaging"
|
||||
msgstr "Sortowanie"
|
||||
|
||||
#: src/views/home/components/Logos.tsx:67
|
||||
#: src/views/home/components/Logos.tsx:73
|
||||
msgid "Trusted by fast-moving teams<0/>around the world"
|
||||
msgstr "Zaufany przez dynamiczne zespoły<0/>na całym świecie"
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:88
|
||||
msgid "Unable to add checklist item"
|
||||
msgstr "Nie można dodać elementu listy kontrolnej"
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Nie można dodać komentarza"
|
||||
|
||||
#: src/views/card/index.tsx:199
|
||||
msgid "Unable to add label"
|
||||
msgstr "Nie można dodać etykiety"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:181
|
||||
msgid "Unable to create card"
|
||||
msgstr "Nie można utworzyć karty"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistForm.tsx:69
|
||||
msgid "Unable to create checklist"
|
||||
msgstr "Nie można utworzyć listy kontrolnej"
|
||||
|
||||
@@ -2286,7 +2262,7 @@ msgstr "Nie można utworzyć szablonu"
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Nie można utworzyć przestrzeni roboczej"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:72
|
||||
msgid "Unable to delete attachment"
|
||||
msgstr "Nie można usunąć załącznika"
|
||||
|
||||
@@ -2294,15 +2270,15 @@ msgstr "Nie można usunąć załącznika"
|
||||
msgid "Unable to delete card"
|
||||
msgstr "Nie można usunąć karty"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:36
|
||||
msgid "Unable to delete checklist"
|
||||
msgstr "Nie można usunąć listy kontrolnej"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:94
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:87
|
||||
msgid "Unable to delete checklist item"
|
||||
msgstr "Nie można usunąć elementu listy kontrolnej"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:44
|
||||
msgid "Unable to delete comment"
|
||||
msgstr "Nie można usunąć komentarza"
|
||||
|
||||
@@ -2310,10 +2286,6 @@ msgstr "Nie można usunąć komentarza"
|
||||
msgid "Unable to remove member"
|
||||
msgstr "Nie można usunąć członka"
|
||||
|
||||
#: src/views/card/components/Checklists.tsx:80
|
||||
msgid "Unable to reorder checklist item"
|
||||
msgstr "Nie można zmienić kolejności elementu listy kontrolnej"
|
||||
|
||||
#: src/components/FeedbackModal.tsx:40
|
||||
msgid "Unable to send feedback"
|
||||
msgstr "Nie można wysłać opinii"
|
||||
@@ -2326,46 +2298,46 @@ msgstr "Nie można zaktualizować adresu URL tablicy"
|
||||
msgid "Unable to update board visibility"
|
||||
msgstr "Nie można zaktualizować widoczności tablicy"
|
||||
|
||||
#: src/views/board/index.tsx:225
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/board/index.tsx:229
|
||||
#: src/views/card/index.tsx:185
|
||||
msgid "Unable to update card"
|
||||
msgstr "Nie można zaktualizować karty"
|
||||
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:45
|
||||
msgid "Unable to update checklist"
|
||||
msgstr "Nie można zaktualizować listy kontrolnej"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:66
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:59
|
||||
msgid "Unable to update checklist item"
|
||||
msgstr "Nie można zaktualizować elementu listy kontrolnej"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/Comment.tsx:63
|
||||
msgid "Unable to update comment"
|
||||
msgstr "Nie można zaktualizować komentarza"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/DueDateSelector.tsx:58
|
||||
msgid "Unable to update due date"
|
||||
msgstr "Nie można zaktualizować terminu"
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/LabelSelector.tsx:71
|
||||
msgid "Unable to update labels"
|
||||
msgstr "Nie można zaktualizować etykiet"
|
||||
|
||||
#: src/views/board/index.tsx:169
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/board/index.tsx:173
|
||||
#: src/views/card/components/ListSelector.tsx:51
|
||||
msgid "Unable to update list"
|
||||
msgstr "Nie można zaktualizować listy"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/MemberSelector.tsx:78
|
||||
msgid "Unable to update members"
|
||||
msgstr "Nie można zaktualizować członków"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:156
|
||||
#: src/views/card/components/ActivityList.tsx:121
|
||||
msgid "unassigned <0>{0}</0> from the card"
|
||||
msgstr "usunięto przypisanie <0>{0}</0> z karty"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:153
|
||||
#: src/views/card/components/ActivityList.tsx:118
|
||||
msgid "unassigned themselves from the card"
|
||||
msgstr "usunęli swoje przypisanie z karty"
|
||||
|
||||
@@ -2424,24 +2396,24 @@ msgstr "Aktualizuj"
|
||||
msgid "Update label"
|
||||
msgstr "Zaktualizuj etykietę"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:111
|
||||
#: src/views/card/components/ActivityList.tsx:70
|
||||
msgid "updated a checklist item"
|
||||
msgstr "zaktualizowano element listy kontrolnej"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:101
|
||||
#: src/views/card/components/ActivityList.tsx:60
|
||||
msgid "updated the description"
|
||||
msgstr "zaktualizowano opis"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:116
|
||||
#: src/views/card/components/ActivityList.tsx:75
|
||||
msgid "updated the due date"
|
||||
msgstr "zaktualizowano termin"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:100
|
||||
#: src/views/card/components/ActivityList.tsx:59
|
||||
msgid "updated the title"
|
||||
msgstr "zaktualizowano tytuł"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:125
|
||||
#: src/views/card/components/ActivityList.tsx:90
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "zaktualizowano tytuł na <0>{0}</0>"
|
||||
|
||||
@@ -2455,8 +2427,8 @@ msgstr "Ulepsz do planu Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Ulepsz do planu Pro (29 USD/miesiąc)"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
#: src/views/card/components/AttachmentUpload.tsx:32
|
||||
#: src/views/card/components/AttachmentUpload.tsx:78
|
||||
msgid "Upload failed"
|
||||
msgstr "Przesyłanie nie powiodło się"
|
||||
|
||||
@@ -2509,7 +2481,7 @@ msgstr "Zobacz i zarządzaj swoimi płatnościami i subskrypcją."
|
||||
msgid "View docs"
|
||||
msgstr "Zobacz dokumentację"
|
||||
|
||||
#: src/views/public/board/index.tsx:142
|
||||
#: src/views/public/board/index.tsx:141
|
||||
msgid "View only"
|
||||
msgstr "Tylko podgląd"
|
||||
|
||||
@@ -2517,7 +2489,7 @@ msgstr "Tylko podgląd"
|
||||
msgid "View our roadmap."
|
||||
msgstr "Zobacz nasz plan ulepszeń."
|
||||
|
||||
#: src/views/public/board/index.tsx:172
|
||||
#: src/views/public/board/index.tsx:171
|
||||
msgid "View workspace"
|
||||
msgstr "Zobacz obszar roboczy"
|
||||
|
||||
@@ -2562,10 +2534,10 @@ msgid "Why make an open source Trello?"
|
||||
msgstr "Dlaczego próbujecie stworzyć Trello w wersji otwartoźródłowej?"
|
||||
|
||||
#: src/components/SettingsLayout.tsx:39
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/members/index.tsx:173
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/public/board/index.tsx:113
|
||||
#: src/views/public/boards/index.tsx:66
|
||||
msgid "Workspace"
|
||||
msgstr "Obszar roboczy"
|
||||
@@ -2699,7 +2671,7 @@ msgstr "Twoje tablice zostały zaimportowane."
|
||||
msgid "Your display name has been updated."
|
||||
msgstr "Twoja nazwa wyświetlana została zaktualizowana."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:27
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
msgid "Your file has been uploaded successfully."
|
||||
msgstr "Twój plik został pomyślnie przesłany."
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:124
|
||||
#: src/views/card/components/Comment.tsx:123
|
||||
msgid " (edited)"
|
||||
msgstr " (отредактировано)"
|
||||
|
||||
@@ -31,7 +31,7 @@ msgstr "{0}"
|
||||
#. placeholder {1}: board?.name ?? t`Board`
|
||||
#. placeholder {1}: workspace.name ?? t`Workspace`
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "{0} | {1}"
|
||||
msgstr "{0} | {1}"
|
||||
|
||||
@@ -41,7 +41,7 @@ msgid "{0} labels"
|
||||
msgstr "{0} метки"
|
||||
|
||||
#. placeholder {0}: isTemplate ? "Template" : "Board"
|
||||
#: src/views/board/index.tsx:408
|
||||
#: src/views/board/index.tsx:412
|
||||
msgid "{0} not found"
|
||||
msgstr "{0} не найден"
|
||||
|
||||
@@ -83,7 +83,7 @@ msgstr "Аккаунт удалён"
|
||||
msgid "Actions"
|
||||
msgstr "Действия"
|
||||
|
||||
#: src/views/card/index.tsx:386
|
||||
#: src/views/card/index.tsx:352
|
||||
#: src/views/public/board/CardModal.tsx:158
|
||||
msgid "Activity"
|
||||
msgstr "Активность"
|
||||
@@ -100,12 +100,12 @@ msgstr "Журналы активности"
|
||||
msgid "Add a card"
|
||||
msgstr "Добавить карточку"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:147
|
||||
#: src/views/card/components/NewCommentForm.tsx:55
|
||||
#: src/views/card/components/Comment.tsx:146
|
||||
#: src/views/card/components/NewCommentForm.tsx:57
|
||||
msgid "Add a comment..."
|
||||
msgstr "Добавить комментарий..."
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:141
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:140
|
||||
msgid "Add an item..."
|
||||
msgstr "Добавить элемент..."
|
||||
|
||||
@@ -117,53 +117,48 @@ msgstr "Добавить чек-лист"
|
||||
msgid "Add description... (type '/' to open commands or '@' to mention)"
|
||||
msgstr "Добавить описание... (введите '/' для открытия команд или '@' для упоминания)"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:195
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:172
|
||||
msgid "Add details..."
|
||||
msgstr "Добавить детали..."
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:110
|
||||
#: src/views/card/components/LabelSelector.tsx:115
|
||||
#: src/views/card/components/LabelSelector.tsx:109
|
||||
#: src/views/card/components/LabelSelector.tsx:114
|
||||
msgid "Add label"
|
||||
msgstr "Добавить метку"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:131
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:257
|
||||
msgid "Add member"
|
||||
msgstr "Добавить участника"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:77
|
||||
msgid "added {0} labels: <0>{labelList}</0>"
|
||||
msgstr "добавил {0} метки: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
#: src/views/card/components/ActivityList.tsx:66
|
||||
msgid "added a checklist"
|
||||
msgstr "добавил(а) чек-лист"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
#: src/views/card/components/ActivityList.tsx:69
|
||||
msgid "added a checklist item"
|
||||
msgstr "добавил(а) элемент чек-листа"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:103
|
||||
#: src/views/card/components/ActivityList.tsx:62
|
||||
msgid "added a label to the card"
|
||||
msgstr "добавил(а) метку к карточке"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:105
|
||||
#: src/views/card/components/ActivityList.tsx:64
|
||||
msgid "added a member to the card"
|
||||
msgstr "добавил(а) участника к карточке"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:181
|
||||
#: src/views/card/components/ActivityList.tsx:146
|
||||
msgid "added checklist <0>{0}</0>"
|
||||
msgstr "добавлен контрольный список <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
#: src/views/card/components/ActivityList.tsx:170
|
||||
msgid "added checklist item <0>{0}</0>"
|
||||
msgstr "добавлен элемент контрольного списка <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:165
|
||||
#: src/views/card/components/ActivityList.tsx:130
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "добавлена метка <0>{0}</0>"
|
||||
|
||||
@@ -254,11 +249,11 @@ msgstr "Вы уверены, что хотите удалить этот {0}?"
|
||||
msgid "Are you sure you want to delete this card?"
|
||||
msgstr "Вы уверены, что хотите удалить эту карточку?"
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:56
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:55
|
||||
msgid "Are you sure you want to delete this checklist?"
|
||||
msgstr "Вы уверены, что хотите удалить этот контрольный список?"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:65
|
||||
msgid "Are you sure you want to delete this comment?"
|
||||
msgstr "Вы уверены, что хотите удалить этот комментарий?"
|
||||
|
||||
@@ -271,7 +266,7 @@ msgid "Are you sure you want to delete your account?"
|
||||
msgstr "Вы уверены, что хотите удалить свой аккаунт?"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:145
|
||||
#: src/views/card/components/ActivityList.tsx:110
|
||||
msgid "assigned <0>{0}</0> to the card"
|
||||
msgstr "назначено <0>{0}</0> к карточке"
|
||||
|
||||
@@ -279,7 +274,7 @@ msgstr "назначено <0>{0}</0> к карточке"
|
||||
msgid "Assignees"
|
||||
msgstr "Исполнители"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
#: src/views/card/components/AttachmentUpload.tsx:25
|
||||
msgid "Attachment uploaded"
|
||||
msgstr "Вложение загружено"
|
||||
|
||||
@@ -317,9 +312,9 @@ msgstr "Портал выставления счетов"
|
||||
msgid "Blog Post"
|
||||
msgstr "Пост в блоге"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/card/index.tsx:238
|
||||
#: src/views/public/board/index.tsx:113
|
||||
msgid "Board"
|
||||
msgstr "Доска"
|
||||
|
||||
@@ -336,7 +331,7 @@ msgstr "Название доски не может превышать 100 си
|
||||
msgid "Board name is required"
|
||||
msgstr "Название доски обязательно"
|
||||
|
||||
#: src/views/public/board/index.tsx:166
|
||||
#: src/views/public/board/index.tsx:165
|
||||
msgid "Board not found"
|
||||
msgstr "Доска не найдена"
|
||||
|
||||
@@ -352,7 +347,7 @@ msgstr "URL доски может содержать только буквы, ц
|
||||
msgid "Board URL cannot exceed 60 characters"
|
||||
msgstr "URL доски не может превышать 60 символов"
|
||||
|
||||
#: src/views/public/board/index.tsx:80
|
||||
#: src/views/public/board/index.tsx:79
|
||||
msgid "Board URL copied to clipboard"
|
||||
msgstr "URL доски скопирован в буфер обмена"
|
||||
|
||||
@@ -387,10 +382,10 @@ msgstr "Отчет об ошибке"
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:44
|
||||
#: src/views/card/components/Comment.tsx:159
|
||||
#: src/views/card/components/Comment.tsx:158
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:77
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:63
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
|
||||
#: src/views/settings/components/Avatar.tsx:306
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
@@ -400,12 +395,12 @@ msgstr "Отчет об ошибке"
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:238
|
||||
msgid "Card"
|
||||
msgstr "Карточка"
|
||||
|
||||
#: src/views/card/index.tsx:306
|
||||
#: src/views/card/index.tsx:342
|
||||
#: src/views/card/index.tsx:272
|
||||
#: src/views/card/index.tsx:308
|
||||
msgid "Card not found"
|
||||
msgstr "Карточка не найдена"
|
||||
|
||||
@@ -424,8 +419,8 @@ msgstr "Изменить пароль"
|
||||
msgid "Change your language preferences."
|
||||
msgstr "Измените настройки языка."
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:255
|
||||
#: src/views/card/components/ActivityList.tsx:269
|
||||
#: src/views/card/components/ActivityList.tsx:220
|
||||
#: src/views/card/components/ActivityList.tsx:234
|
||||
msgid "changed the due date to <0>{formattedDate}</0>"
|
||||
msgstr "изменил(а) дату выполнения на <0>{formattedDate}</0>"
|
||||
|
||||
@@ -438,7 +433,7 @@ msgstr "Ознакомьтесь с некоторыми из наших люб
|
||||
msgid "Check your inbox"
|
||||
msgstr "Проверьте ваш почтовый ящик"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:119
|
||||
#: src/views/card/components/NewChecklistForm.tsx:118
|
||||
msgid "Checklist name"
|
||||
msgstr "Название контрольного списка"
|
||||
|
||||
@@ -499,12 +494,12 @@ msgstr "Завершить"
|
||||
msgid "Complete control and ownership:"
|
||||
msgstr "Полный контроль и владение:"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:112
|
||||
#: src/views/card/components/ActivityList.tsx:71
|
||||
msgid "completed a checklist item"
|
||||
msgstr "завершил элемент контрольного списка"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:222
|
||||
#: src/views/card/components/ActivityList.tsx:187
|
||||
msgid "completed checklist item <0>{0}</0>"
|
||||
msgstr "завершил элемент контрольного списка <0>{0}</0>"
|
||||
|
||||
@@ -578,7 +573,7 @@ msgstr "Создать API-ключ"
|
||||
msgid "Create card"
|
||||
msgstr "Создать карточку"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:135
|
||||
#: src/views/card/components/NewChecklistForm.tsx:134
|
||||
msgid "Create checklist"
|
||||
msgstr "Создать чек-лист"
|
||||
|
||||
@@ -605,12 +600,12 @@ msgid "Create new key"
|
||||
msgstr "Создать новый ключ"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:414
|
||||
#: src/views/card/components/LabelSelector.tsx:98
|
||||
#: src/views/card/components/LabelSelector.tsx:97
|
||||
msgid "Create new label"
|
||||
msgstr "Создать новую метку"
|
||||
|
||||
#: src/views/board/index.tsx:64
|
||||
#: src/views/board/index.tsx:499
|
||||
#: src/views/board/index.tsx:65
|
||||
#: src/views/board/index.tsx:503
|
||||
msgid "Create new list"
|
||||
msgstr "Создать новый список"
|
||||
|
||||
@@ -623,7 +618,7 @@ msgstr "Создать шаблон"
|
||||
msgid "Create workspace"
|
||||
msgstr "Создать рабочее пространство"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:99
|
||||
#: src/views/card/components/ActivityList.tsx:58
|
||||
msgid "created the card"
|
||||
msgstr "создал(а) карточку"
|
||||
|
||||
@@ -681,8 +676,8 @@ msgstr "Деактивировать ссылку-приглашение"
|
||||
#: src/components/LabelForm.tsx:228
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:47
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:67
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:83
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:66
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
@@ -700,7 +695,7 @@ msgstr "Удалить доску"
|
||||
msgid "Delete card"
|
||||
msgstr "Удалить карточку"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:92
|
||||
#: src/views/card/components/Comment.tsx:91
|
||||
msgid "Delete comment"
|
||||
msgstr "Удалить комментарий"
|
||||
|
||||
@@ -718,21 +713,21 @@ msgstr "Удалить шаблон"
|
||||
msgid "Delete workspace"
|
||||
msgstr "Удалить рабочее пространство"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:109
|
||||
#: src/views/card/components/ActivityList.tsx:68
|
||||
msgid "deleted a checklist"
|
||||
msgstr "удалил контрольный список"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:114
|
||||
#: src/views/card/components/ActivityList.tsx:73
|
||||
msgid "deleted a checklist item"
|
||||
msgstr "удалил элемент контрольного списка"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:197
|
||||
#: src/views/card/components/ActivityList.tsx:162
|
||||
msgid "deleted checklist <0>{0}</0>"
|
||||
msgstr "удалил контрольный список <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(fromTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:240
|
||||
#: src/views/card/components/ActivityList.tsx:205
|
||||
msgid "deleted checklist item <0>{0}</0>"
|
||||
msgstr "удалил элемент контрольного списка <0>{0}</0>"
|
||||
|
||||
@@ -798,13 +793,13 @@ msgstr "Нет аккаунта? <0><1>Зарегистрируйтесь</1></0
|
||||
msgid "Done"
|
||||
msgstr "Готово"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:141
|
||||
msgid "Download failed"
|
||||
msgstr "Не удалось загрузить"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:171
|
||||
#: src/views/board/components/NewCardForm.tsx:469
|
||||
#: src/views/card/index.tsx:139
|
||||
#: src/views/card/index.tsx:138
|
||||
msgid "Due date"
|
||||
msgstr "Дата выполнения"
|
||||
|
||||
@@ -829,7 +824,7 @@ msgstr "Срок завтра"
|
||||
msgid "Edit board URL"
|
||||
msgstr "Изменить URL доски"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:83
|
||||
#: src/views/card/components/Comment.tsx:82
|
||||
msgid "Edit comment"
|
||||
msgstr "Редактировать комментарий"
|
||||
|
||||
@@ -986,8 +981,8 @@ msgstr "Не удалось создать доску"
|
||||
msgid "Failed to login with {0}. Please try again."
|
||||
msgstr "Не удалось войти с {0}. Пожалуйста, попробуйте снова."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:34
|
||||
#: src/views/card/components/AttachmentUpload.tsx:80
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
msgid "Failed to upload attachment. Please try again."
|
||||
msgstr "Не удалось загрузить вложение. Пожалуйста, попробуйте еще раз."
|
||||
|
||||
@@ -1092,7 +1087,7 @@ msgstr "Начать"
|
||||
msgid "Get started by creating a new {0}"
|
||||
msgstr "Начните с создания нового {0}"
|
||||
|
||||
#: src/views/board/index.tsx:491
|
||||
#: src/views/board/index.tsx:495
|
||||
msgid "Get started by creating a new list"
|
||||
msgstr "Начните с создания нового списка"
|
||||
|
||||
@@ -1279,7 +1274,7 @@ msgstr "Ссылки-приглашения"
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Ссылки для приглашений требуют подписки Team или Pro. Пожалуйста, обновите ваше рабочее пространство."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:112
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:367
|
||||
msgid "Invite member"
|
||||
msgstr "Пригласить участника"
|
||||
@@ -1328,7 +1323,7 @@ msgstr "Горячие клавиши"
|
||||
|
||||
#: src/views/board/components/Filters.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:418
|
||||
#: src/views/card/index.tsx:121
|
||||
#: src/views/card/index.tsx:120
|
||||
msgid "Labels"
|
||||
msgstr "Метки"
|
||||
|
||||
@@ -1378,11 +1373,11 @@ msgstr "Лицензия"
|
||||
msgid "Light"
|
||||
msgstr "Светлый"
|
||||
|
||||
#: src/views/public/board/index.tsx:78
|
||||
#: src/views/public/board/index.tsx:77
|
||||
msgid "Link copied"
|
||||
msgstr "Ссылка скопирована"
|
||||
|
||||
#: src/views/card/index.tsx:113
|
||||
#: src/views/card/index.tsx:112
|
||||
msgid "List"
|
||||
msgstr "Список"
|
||||
|
||||
@@ -1394,14 +1389,6 @@ msgstr "Название списка"
|
||||
msgid "Lists"
|
||||
msgstr "Списки"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Load more activities"
|
||||
msgstr "Загрузить больше действий"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:530
|
||||
msgid "Loading..."
|
||||
msgstr "Загрузка..."
|
||||
|
||||
#: src/views/auth/login/index.tsx:33
|
||||
msgid "Login | kan.bn"
|
||||
msgstr "Вход | kan.bn"
|
||||
@@ -1430,12 +1417,12 @@ msgstr "магическая ссылка"
|
||||
msgid "Make template"
|
||||
msgstr "Создать шаблон"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:113
|
||||
#: src/views/card/components/ActivityList.tsx:72
|
||||
msgid "marked a checklist item as incomplete"
|
||||
msgstr "отметил элемент контрольного списка как незавершённый"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:231
|
||||
#: src/views/card/components/ActivityList.tsx:196
|
||||
msgid "marked checklist item <0>{0}</0> as incomplete"
|
||||
msgstr "отметил элемент контрольного списка <0>{0}</0> как незавершённый"
|
||||
|
||||
@@ -1446,7 +1433,7 @@ msgstr "Средний приоритет"
|
||||
#: src/components/SideNavigation.tsx:121
|
||||
#: src/views/board/components/Filters.tsx:147
|
||||
#: src/views/board/components/NewCardForm.tsx:376
|
||||
#: src/views/card/index.tsx:130
|
||||
#: src/views/card/index.tsx:129
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Участники"
|
||||
@@ -1467,11 +1454,11 @@ msgstr "ежемесячная оплата"
|
||||
|
||||
#. placeholder {0}: truncate(fromList)
|
||||
#. placeholder {1}: truncate(toList)
|
||||
#: src/views/card/components/ActivityList.tsx:133
|
||||
#: src/views/card/components/ActivityList.tsx:98
|
||||
msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
msgstr "переместил карточку из <0>{0}</0> в <1>{1}</1>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:102
|
||||
#: src/views/card/components/ActivityList.tsx:61
|
||||
msgid "moved the card to another list"
|
||||
msgstr "переместил карточку в другой список"
|
||||
|
||||
@@ -1507,7 +1494,7 @@ msgstr "Новый API-ключ"
|
||||
msgid "New card"
|
||||
msgstr "Новая карточка"
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:103
|
||||
#: src/views/card/components/NewChecklistForm.tsx:102
|
||||
msgid "New checklist"
|
||||
msgstr "Новый контрольный список"
|
||||
|
||||
@@ -1520,7 +1507,7 @@ msgid "New label"
|
||||
msgstr "Новая метка"
|
||||
|
||||
#: src/views/board/components/NewListForm.tsx:113
|
||||
#: src/views/board/index.tsx:462
|
||||
#: src/views/board/index.tsx:466
|
||||
msgid "New list"
|
||||
msgstr "Новый список"
|
||||
|
||||
@@ -1573,7 +1560,7 @@ msgstr "Кредитная карта не требуется"
|
||||
msgid "No dates"
|
||||
msgstr "Нет дат"
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:143
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:142
|
||||
msgid "No download URL available for this attachment."
|
||||
msgstr "URL для загрузки этого вложения недоступен."
|
||||
|
||||
@@ -1581,7 +1568,7 @@ msgstr "URL для загрузки этого вложения недоступ
|
||||
msgid "No keyboard shortcuts registered."
|
||||
msgstr "Горячие клавиши не зарегистрированы."
|
||||
|
||||
#: src/views/board/index.tsx:488
|
||||
#: src/views/board/index.tsx:492
|
||||
msgid "No lists"
|
||||
msgstr "Нет списков"
|
||||
|
||||
@@ -1732,27 +1719,25 @@ msgstr "Пожалуйста, выберите файл для загрузки.
|
||||
#: src/views/board/components/NewTemplateForm.tsx:77
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:73
|
||||
#: src/views/board/components/VisibilityButton.tsx:54
|
||||
#: src/views/board/index.tsx:170
|
||||
#: src/views/board/index.tsx:226
|
||||
#: src/views/board/index.tsx:174
|
||||
#: src/views/board/index.tsx:230
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:205
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:74
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:67
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:95
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:47
|
||||
#: src/views/card/components/Checklists.tsx:81
|
||||
#: src/views/card/components/Comment.tsx:65
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:60
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:88
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:52
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:46
|
||||
#: src/views/card/components/DueDateSelector.tsx:60
|
||||
#: src/views/card/components/LabelSelector.tsx:73
|
||||
#: src/views/card/components/ListSelector.tsx:53
|
||||
#: src/views/card/components/MemberSelector.tsx:80
|
||||
#: src/views/card/components/NewChecklistForm.tsx:71
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:90
|
||||
#: src/views/card/components/NewCommentForm.tsx:32
|
||||
#: src/views/card/index.tsx:187
|
||||
#: src/views/card/index.tsx:200
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:241
|
||||
@@ -1852,40 +1837,35 @@ msgstr "Удалить"
|
||||
msgid "Remove member"
|
||||
msgstr "Удалить участника"
|
||||
|
||||
#. placeholder {0}: mergedLabels.length
|
||||
#: src/views/card/components/ActivityList.tsx:91
|
||||
msgid "removed {0} labels: <0>{labelList}</0>"
|
||||
msgstr "удалил {0} метки: <0>{labelList}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:104
|
||||
#: src/views/card/components/ActivityList.tsx:63
|
||||
msgid "removed a label from the card"
|
||||
msgstr "удалил метку с карточки"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:106
|
||||
#: src/views/card/components/ActivityList.tsx:65
|
||||
msgid "removed a member from the card"
|
||||
msgstr "удалил участника из карточки"
|
||||
|
||||
#. placeholder {0}: truncate(label)
|
||||
#: src/views/card/components/ActivityList.tsx:173
|
||||
#: src/views/card/components/ActivityList.tsx:138
|
||||
msgid "removed label <0>{0}</0>"
|
||||
msgstr "удалил метку <0>{0}</0>"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:117
|
||||
#: src/views/card/components/ActivityList.tsx:276
|
||||
#: src/views/card/components/ActivityList.tsx:76
|
||||
#: src/views/card/components/ActivityList.tsx:241
|
||||
msgid "removed the due date"
|
||||
msgstr "удалил(а) дату выполнения"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:108
|
||||
#: src/views/card/components/ActivityList.tsx:67
|
||||
msgid "renamed a checklist"
|
||||
msgstr "переименовал контрольный список"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:189
|
||||
#: src/views/card/components/ActivityList.tsx:154
|
||||
msgid "renamed checklist <0>{0}</0>"
|
||||
msgstr "переименовал контрольный список <0>{0}</0>"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:213
|
||||
#: src/views/card/components/ActivityList.tsx:178
|
||||
msgid "renamed checklist item to <0>{0}</0>"
|
||||
msgstr "переименовал элемент контрольного списка в <0>{0}</0>"
|
||||
|
||||
@@ -1924,7 +1904,7 @@ msgstr "Роль"
|
||||
msgid "Run on your own infrastructure"
|
||||
msgstr "Запустите на своей инфраструктуре"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:166
|
||||
#: src/views/card/components/Comment.tsx:165
|
||||
#: src/views/settings/components/Avatar.tsx:309
|
||||
msgid "Save"
|
||||
msgstr "Сохранить"
|
||||
@@ -1962,7 +1942,7 @@ msgstr "Самостоятельный хостинг"
|
||||
msgid "Self host with Github"
|
||||
msgstr "Самостоятельный хостинг с Github"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:142
|
||||
#: src/views/card/components/ActivityList.tsx:107
|
||||
msgid "self-assigned the card"
|
||||
msgstr "самостоятельно назначил карточку"
|
||||
|
||||
@@ -1978,11 +1958,11 @@ msgstr "Отправить отзыв"
|
||||
msgid "Senior"
|
||||
msgstr "Старший"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:117
|
||||
#: src/views/card/components/DueDateSelector.tsx:116
|
||||
msgid "Set due date"
|
||||
msgstr "Установить дату выполнения"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:115
|
||||
#: src/views/card/components/ActivityList.tsx:74
|
||||
msgid "set the due date"
|
||||
msgstr "установил(а) дату выполнения"
|
||||
|
||||
@@ -2107,8 +2087,8 @@ msgstr "Командный план"
|
||||
msgid "Teams"
|
||||
msgstr "Команды"
|
||||
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:417
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/board/index.tsx:421
|
||||
msgid "Template"
|
||||
msgstr "Шаблон"
|
||||
|
||||
@@ -2173,8 +2153,8 @@ msgstr "Они не смогут получить доступ к этому р
|
||||
#: src/components/DeleteLabelConfirmation.tsx:44
|
||||
#: src/views/board/components/DeleteBoardConfirmation.tsx:39
|
||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:59
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:69
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:58
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||
msgid "This action can't be undone."
|
||||
msgstr "Это действие нельзя будет отменить."
|
||||
|
||||
@@ -2182,7 +2162,7 @@ msgstr "Это действие нельзя будет отменить."
|
||||
msgid "This API key will only be shown once. Please save it in a secure location."
|
||||
msgstr "Этот API-ключ будет показан только один раз. Пожалуйста, сохраните его в безопасном месте."
|
||||
|
||||
#: src/views/public/board/index.tsx:169
|
||||
#: src/views/public/board/index.tsx:168
|
||||
msgid "This board is private or does not exist"
|
||||
msgstr "Эта доска является приватной или не существует."
|
||||
|
||||
@@ -2244,27 +2224,23 @@ msgstr "Импорт Trello"
|
||||
msgid "Triaging"
|
||||
msgstr "Сортировка"
|
||||
|
||||
#: src/views/home/components/Logos.tsx:67
|
||||
#: src/views/home/components/Logos.tsx:73
|
||||
msgid "Trusted by fast-moving teams<0/>around the world"
|
||||
msgstr "Доверяют динамичным командам<0/>по всему миру"
|
||||
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:89
|
||||
#: src/views/card/components/NewChecklistItemForm.tsx:88
|
||||
msgid "Unable to add checklist item"
|
||||
msgstr "Не удалось добавить элемент контрольного списка."
|
||||
|
||||
#: src/views/card/components/NewCommentForm.tsx:31
|
||||
#: src/views/card/components/NewCommentForm.tsx:30
|
||||
msgid "Unable to add comment"
|
||||
msgstr "Не удалось добавить комментарий."
|
||||
|
||||
#: src/views/card/index.tsx:199
|
||||
msgid "Unable to add label"
|
||||
msgstr "Не удалось добавить метку"
|
||||
|
||||
#: src/views/board/components/NewCardForm.tsx:181
|
||||
msgid "Unable to create card"
|
||||
msgstr "Не удалось создать карточку."
|
||||
|
||||
#: src/views/card/components/NewChecklistForm.tsx:70
|
||||
#: src/views/card/components/NewChecklistForm.tsx:69
|
||||
msgid "Unable to create checklist"
|
||||
msgstr "Не удалось создать контрольный список."
|
||||
|
||||
@@ -2281,7 +2257,7 @@ msgstr "Не удалось создать шаблон"
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Не удалось создать рабочее пространство."
|
||||
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:73
|
||||
#: src/views/card/components/AttachmentThumbnails.tsx:72
|
||||
msgid "Unable to delete attachment"
|
||||
msgstr "Не удалось удалить вложение"
|
||||
|
||||
@@ -2289,15 +2265,15 @@ msgstr "Не удалось удалить вложение"
|
||||
msgid "Unable to delete card"
|
||||
msgstr "Не удалось удалить карточку."
|
||||
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
|
||||
#: src/views/card/components/DeleteChecklistConfirmation.tsx:36
|
||||
msgid "Unable to delete checklist"
|
||||
msgstr "Не удалось удалить контрольный список"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:94
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:87
|
||||
msgid "Unable to delete checklist item"
|
||||
msgstr "Не удалось удалить элемент контрольного списка"
|
||||
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
|
||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:44
|
||||
msgid "Unable to delete comment"
|
||||
msgstr "Не удалось удалить комментарий"
|
||||
|
||||
@@ -2305,10 +2281,6 @@ msgstr "Не удалось удалить комментарий"
|
||||
msgid "Unable to remove member"
|
||||
msgstr "Не удалось удалить участника"
|
||||
|
||||
#: src/views/card/components/Checklists.tsx:80
|
||||
msgid "Unable to reorder checklist item"
|
||||
msgstr "Не удалось изменить порядок элемента контрольного списка"
|
||||
|
||||
#: src/components/FeedbackModal.tsx:40
|
||||
msgid "Unable to send feedback"
|
||||
msgstr "Не удалось отправить отзыв"
|
||||
@@ -2321,46 +2293,46 @@ msgstr "Не удалось обновить URL доски"
|
||||
msgid "Unable to update board visibility"
|
||||
msgstr "Не удалось обновить видимость доски"
|
||||
|
||||
#: src/views/board/index.tsx:225
|
||||
#: src/views/card/index.tsx:186
|
||||
#: src/views/board/index.tsx:229
|
||||
#: src/views/card/index.tsx:185
|
||||
msgid "Unable to update card"
|
||||
msgstr "Не удалось обновить карточку"
|
||||
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:46
|
||||
#: src/views/card/components/ChecklistNameInput.tsx:45
|
||||
msgid "Unable to update checklist"
|
||||
msgstr "Не удалось обновить контрольный список"
|
||||
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:66
|
||||
#: src/views/card/components/ChecklistItemRow.tsx:59
|
||||
msgid "Unable to update checklist item"
|
||||
msgstr "Не удалось обновить элемент контрольного списка"
|
||||
|
||||
#: src/views/card/components/Comment.tsx:64
|
||||
#: src/views/card/components/Comment.tsx:63
|
||||
msgid "Unable to update comment"
|
||||
msgstr "Не удалось обновить комментарий"
|
||||
|
||||
#: src/views/card/components/DueDateSelector.tsx:59
|
||||
#: src/views/card/components/DueDateSelector.tsx:58
|
||||
msgid "Unable to update due date"
|
||||
msgstr "Не удалось обновить дату выполнения"
|
||||
|
||||
#: src/views/card/components/LabelSelector.tsx:72
|
||||
#: src/views/card/components/LabelSelector.tsx:71
|
||||
msgid "Unable to update labels"
|
||||
msgstr "Не удалось обновить метки"
|
||||
|
||||
#: src/views/board/index.tsx:169
|
||||
#: src/views/card/components/ListSelector.tsx:52
|
||||
#: src/views/board/index.tsx:173
|
||||
#: src/views/card/components/ListSelector.tsx:51
|
||||
msgid "Unable to update list"
|
||||
msgstr "Не удалось обновить список"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:79
|
||||
#: src/views/card/components/MemberSelector.tsx:78
|
||||
msgid "Unable to update members"
|
||||
msgstr "Не удалось обновить участников"
|
||||
|
||||
#. placeholder {0}: truncate(memberName)
|
||||
#: src/views/card/components/ActivityList.tsx:156
|
||||
#: src/views/card/components/ActivityList.tsx:121
|
||||
msgid "unassigned <0>{0}</0> from the card"
|
||||
msgstr "удалил(а) <0>{0}</0> из карточки"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:153
|
||||
#: src/views/card/components/ActivityList.tsx:118
|
||||
msgid "unassigned themselves from the card"
|
||||
msgstr "удалил(а) себя из карточки"
|
||||
|
||||
@@ -2419,24 +2391,24 @@ msgstr "Обновить"
|
||||
msgid "Update label"
|
||||
msgstr "Обновить метку"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:111
|
||||
#: src/views/card/components/ActivityList.tsx:70
|
||||
msgid "updated a checklist item"
|
||||
msgstr "обновлен элемент контрольного списка"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:101
|
||||
#: src/views/card/components/ActivityList.tsx:60
|
||||
msgid "updated the description"
|
||||
msgstr "обновлено описание"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:116
|
||||
#: src/views/card/components/ActivityList.tsx:75
|
||||
msgid "updated the due date"
|
||||
msgstr "обновил(а) дату выполнения"
|
||||
|
||||
#: src/views/card/components/ActivityList.tsx:100
|
||||
#: src/views/card/components/ActivityList.tsx:59
|
||||
msgid "updated the title"
|
||||
msgstr "обновлен заголовок"
|
||||
|
||||
#. placeholder {0}: truncate(toTitle)
|
||||
#: src/views/card/components/ActivityList.tsx:125
|
||||
#: src/views/card/components/ActivityList.tsx:90
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "обновлен заголовок на <0>{0}</0>"
|
||||
|
||||
@@ -2450,8 +2422,8 @@ msgstr "Обновить до Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Обновить до Pro ($29/месяц)"
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:33
|
||||
#: src/views/card/components/AttachmentUpload.tsx:79
|
||||
#: src/views/card/components/AttachmentUpload.tsx:32
|
||||
#: src/views/card/components/AttachmentUpload.tsx:78
|
||||
msgid "Upload failed"
|
||||
msgstr "Не удалось загрузить"
|
||||
|
||||
@@ -2504,7 +2476,7 @@ msgstr "Просмотр и управление вашими счетами и
|
||||
msgid "View docs"
|
||||
msgstr "Просмотреть документацию"
|
||||
|
||||
#: src/views/public/board/index.tsx:142
|
||||
#: src/views/public/board/index.tsx:141
|
||||
msgid "View only"
|
||||
msgstr "Только просмотр"
|
||||
|
||||
@@ -2512,7 +2484,7 @@ msgstr "Только просмотр"
|
||||
msgid "View our roadmap."
|
||||
msgstr "Просмотреть нашу дорожную карту."
|
||||
|
||||
#: src/views/public/board/index.tsx:172
|
||||
#: src/views/public/board/index.tsx:171
|
||||
msgid "View workspace"
|
||||
msgstr "Просмотреть рабочее пространство"
|
||||
|
||||
@@ -2557,10 +2529,10 @@ msgid "Why make an open source Trello?"
|
||||
msgstr "Зачем создавать Trello с открытым исходным кодом?"
|
||||
|
||||
#: src/components/SettingsLayout.tsx:39
|
||||
#: src/views/board/index.tsx:382
|
||||
#: src/views/board/index.tsx:386
|
||||
#: src/views/boards/index.tsx:33
|
||||
#: src/views/members/index.tsx:173
|
||||
#: src/views/public/board/index.tsx:114
|
||||
#: src/views/public/board/index.tsx:113
|
||||
#: src/views/public/boards/index.tsx:66
|
||||
msgid "Workspace"
|
||||
msgstr "Рабочее пространство"
|
||||
@@ -2694,7 +2666,7 @@ msgstr "Ваши доски были импортированы."
|
||||
msgid "Your display name has been updated."
|
||||
msgstr "Ваше отображаемое имя было обновлено."
|
||||
|
||||
#: src/views/card/components/AttachmentUpload.tsx:27
|
||||
#: src/views/card/components/AttachmentUpload.tsx:26
|
||||
msgid "Your file has been uploaded successfully."
|
||||
msgstr "Ваш файл успешно загружен."
|
||||
|
||||
|
||||
@@ -88,7 +88,6 @@ export default async function handler(
|
||||
|
||||
const session = await stripe.checkout.sessions.create({
|
||||
mode: "subscription",
|
||||
payment_method_collection: "always",
|
||||
line_items: [
|
||||
{
|
||||
price: process.env.STRIPE_PRO_PLAN_MONTHLY_PRICE_ID,
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
import type { api } from "~/utils/api";
|
||||
|
||||
/**
|
||||
* Invalidates all card-related queries for a given card.
|
||||
* Use this after any mutation that affects card data or activities.
|
||||
*/
|
||||
export async function invalidateCard(
|
||||
utils: ReturnType<typeof api.useUtils>,
|
||||
cardPublicId: string,
|
||||
) {
|
||||
await Promise.all([
|
||||
utils.card.byId.invalidate({ cardPublicId }),
|
||||
utils.card.getActivities.invalidate({ cardPublicId }),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { addDays, endOfDay, startOfDay } from "date-fns";
|
||||
|
||||
export type DueDateFilterKey =
|
||||
type DueDateFilterKey =
|
||||
| "overdue"
|
||||
| "today"
|
||||
| "tomorrow"
|
||||
@@ -9,8 +9,8 @@ export type DueDateFilterKey =
|
||||
| "no-due-date";
|
||||
|
||||
export interface DueDateFilter {
|
||||
startDate?: Date;
|
||||
endDate?: Date;
|
||||
startDate?: string;
|
||||
endDate?: string;
|
||||
hasNoDueDate?: boolean;
|
||||
}
|
||||
|
||||
@@ -21,35 +21,35 @@ export const convertDueDateFiltersToRanges = (
|
||||
|
||||
const today = startOfDay(new Date());
|
||||
const tomorrow = addDays(today, 1);
|
||||
const nextWeekEnd = addDays(today, 8);
|
||||
const nextMonthEnd = addDays(today, 31);
|
||||
const nextWeekEnd = addDays(today, 8); // 7 days ahead
|
||||
const nextMonthEnd = addDays(today, 31); // 30 days ahead
|
||||
|
||||
return filters.map((filter) => {
|
||||
switch (filter) {
|
||||
case "overdue":
|
||||
return {
|
||||
endDate: today,
|
||||
endDate: today.toISOString(),
|
||||
};
|
||||
case "today":
|
||||
return {
|
||||
startDate: today,
|
||||
endDate: endOfDay(today),
|
||||
startDate: today.toISOString(),
|
||||
endDate: endOfDay(today).toISOString(),
|
||||
};
|
||||
case "tomorrow":
|
||||
return {
|
||||
startDate: tomorrow,
|
||||
endDate: endOfDay(tomorrow),
|
||||
startDate: tomorrow.toISOString(),
|
||||
endDate: endOfDay(tomorrow).toISOString(),
|
||||
};
|
||||
case "next-week": {
|
||||
return {
|
||||
startDate: today,
|
||||
endDate: nextWeekEnd,
|
||||
startDate: today.toISOString(),
|
||||
endDate: nextWeekEnd.toISOString(),
|
||||
};
|
||||
}
|
||||
case "next-month": {
|
||||
return {
|
||||
startDate: nextWeekEnd,
|
||||
endDate: nextMonthEnd,
|
||||
startDate: nextWeekEnd.toISOString(),
|
||||
endDate: nextMonthEnd.toISOString(),
|
||||
};
|
||||
}
|
||||
case "no-due-date":
|
||||
@@ -22,8 +22,6 @@ const loadMessages = async (locale: Locale) => {
|
||||
return (await import("~/locales/ru/messages")).messages;
|
||||
case "pl":
|
||||
return (await import("~/locales/pl/messages")).messages;
|
||||
case "ptbr":
|
||||
return (await import("~/locales/ptbr/messages")).messages;
|
||||
default:
|
||||
return enMessages;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { useWorkspace } from "~/providers/workspace";
|
||||
import { api } from "~/utils/api";
|
||||
import { convertDueDateFiltersToRanges } from "~/utils/dueDateFilters";
|
||||
import { formatToArray } from "~/utils/helpers";
|
||||
import BoardDropdown from "./components/BoardDropdown";
|
||||
import Card from "./components/Card";
|
||||
@@ -96,17 +97,20 @@ export default function BoardPage({ isTemplate }: { isTemplate?: boolean }) {
|
||||
| "no-due-date"
|
||||
)[];
|
||||
|
||||
const boardType: "regular" | "template" = isTemplate ? "template" : "regular";
|
||||
|
||||
const queryParams = {
|
||||
const queryParams: {
|
||||
boardPublicId: string;
|
||||
members: string[];
|
||||
labels: string[];
|
||||
lists: string[];
|
||||
dueDate: ReturnType<typeof convertDueDateFiltersToRanges>;
|
||||
type: "regular" | "template";
|
||||
} = {
|
||||
boardPublicId: boardId ?? "",
|
||||
members: formatToArray(router.query.members),
|
||||
labels: formatToArray(router.query.labels),
|
||||
lists: formatToArray(router.query.lists),
|
||||
...(semanticFilters.length > 0 && {
|
||||
dueDateFilters: semanticFilters,
|
||||
}),
|
||||
type: boardType,
|
||||
dueDate: convertDueDateFiltersToRanges(semanticFilters),
|
||||
type: isTemplate ? "template" : "regular",
|
||||
};
|
||||
|
||||
const {
|
||||
|
||||
@@ -2,7 +2,6 @@ import type { Locale as DateFnsLocale } from "date-fns";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
import { format, formatDistanceToNow, isSameYear } from "date-fns";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import {
|
||||
HiOutlineArrowLeft,
|
||||
HiOutlineArrowRight,
|
||||
@@ -16,15 +15,11 @@ import {
|
||||
HiOutlineUserPlus,
|
||||
} from "react-icons/hi2";
|
||||
|
||||
import type {
|
||||
GetCardActivitiesOutput,
|
||||
GetCardByIdOutput,
|
||||
} from "@kan/api/types";
|
||||
import type { GetCardByIdOutput } from "@kan/api/types";
|
||||
import { authClient } from "@kan/auth/client";
|
||||
|
||||
import Avatar from "~/components/Avatar";
|
||||
import { useLocalisation } from "~/hooks/useLocalisation";
|
||||
import { api } from "~/utils/api";
|
||||
import Comment from "./Comment";
|
||||
|
||||
type ActivityType =
|
||||
@@ -46,7 +41,6 @@ const getActivityText = ({
|
||||
fromTitle,
|
||||
toDueDate,
|
||||
dateLocale,
|
||||
mergedLabels,
|
||||
}: {
|
||||
type: ActivityType;
|
||||
toTitle: string | null;
|
||||
@@ -59,42 +53,7 @@ const getActivityText = ({
|
||||
fromDueDate?: Date | null;
|
||||
toDueDate?: Date | null;
|
||||
dateLocale: DateFnsLocale;
|
||||
mergedLabels?: string[];
|
||||
}) => {
|
||||
const TextHighlight = ({ children }: { children: React.ReactNode }) => (
|
||||
<span className="font-medium text-light-1000 dark:text-dark-1000">
|
||||
{children}
|
||||
</span>
|
||||
);
|
||||
|
||||
if (
|
||||
type === "card.updated.label.added" &&
|
||||
mergedLabels &&
|
||||
mergedLabels.length > 1
|
||||
) {
|
||||
const labelList = mergedLabels.join(", ");
|
||||
return (
|
||||
<Trans>
|
||||
added {mergedLabels.length} labels:{" "}
|
||||
<TextHighlight>{labelList}</TextHighlight>
|
||||
</Trans>
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
type === "card.updated.label.removed" &&
|
||||
mergedLabels &&
|
||||
mergedLabels.length > 1
|
||||
) {
|
||||
const labelList = mergedLabels.join(", ");
|
||||
return (
|
||||
<Trans>
|
||||
removed {mergedLabels.length} labels:{" "}
|
||||
<TextHighlight>{labelList}</TextHighlight>
|
||||
</Trans>
|
||||
);
|
||||
}
|
||||
|
||||
const ACTIVITY_TYPE_MAP = {
|
||||
"card.created": t`created the card`,
|
||||
"card.updated.title": t`updated the title`,
|
||||
@@ -120,6 +79,12 @@ const getActivityText = ({
|
||||
if (!(type in ACTIVITY_TYPE_MAP)) return null;
|
||||
const baseText = ACTIVITY_TYPE_MAP[type as keyof typeof ACTIVITY_TYPE_MAP];
|
||||
|
||||
const TextHighlight = ({ children }: { children: React.ReactNode }) => (
|
||||
<span className="font-medium text-light-1000 dark:text-dark-1000">
|
||||
{children}
|
||||
</span>
|
||||
);
|
||||
|
||||
if (type === "card.updated.title" && toTitle) {
|
||||
return (
|
||||
<Trans>
|
||||
@@ -316,151 +281,37 @@ const getActivityIcon = (
|
||||
return ACTIVITY_ICON_MAP[type] ?? null;
|
||||
};
|
||||
|
||||
const ACTIVITIES_PAGE_SIZE = 20;
|
||||
|
||||
const ActivityList = ({
|
||||
activities,
|
||||
cardPublicId,
|
||||
isLoading: cardIsLoading,
|
||||
isLoading,
|
||||
isAdmin,
|
||||
isViewOnly,
|
||||
}: {
|
||||
activities: NonNullable<GetCardByIdOutput>["activities"];
|
||||
cardPublicId: string;
|
||||
isLoading: boolean;
|
||||
isAdmin?: boolean;
|
||||
isViewOnly?: boolean;
|
||||
}) => {
|
||||
const { dateLocale, locale } = useLocalisation();
|
||||
const { data: sessionData } = authClient.useSession();
|
||||
const utils = api.useUtils();
|
||||
const [allActivities, setAllActivities] = useState<
|
||||
GetCardActivitiesOutput["activities"]
|
||||
>([]);
|
||||
const [hasMore, setHasMore] = useState(true);
|
||||
const [isLoadingMore, setIsLoadingMore] = useState(false);
|
||||
|
||||
const isFullyExpandedRef = useRef(false);
|
||||
const lastDataUpdatedAtRef = useRef<number | null>(null);
|
||||
|
||||
const {
|
||||
data: firstPageData,
|
||||
isFetching: isFetchingFirst,
|
||||
dataUpdatedAt,
|
||||
} = api.card.getActivities.useQuery(
|
||||
{
|
||||
cardPublicId,
|
||||
limit: ACTIVITIES_PAGE_SIZE,
|
||||
},
|
||||
{
|
||||
enabled: !!cardPublicId,
|
||||
},
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (firstPageData && dataUpdatedAt !== lastDataUpdatedAtRef.current) {
|
||||
lastDataUpdatedAtRef.current = dataUpdatedAt;
|
||||
|
||||
if (isFullyExpandedRef.current && firstPageData.hasMore) {
|
||||
setAllActivities(firstPageData.activities);
|
||||
setHasMore(firstPageData.hasMore);
|
||||
|
||||
const fetchAllRemaining = async () => {
|
||||
let currentActivities = [...firstPageData.activities];
|
||||
let currentHasMore = firstPageData.hasMore;
|
||||
|
||||
while (currentHasMore) {
|
||||
const lastActivity =
|
||||
currentActivities[currentActivities.length - 1];
|
||||
if (!lastActivity) break;
|
||||
|
||||
const nextCursor = new Date(lastActivity.createdAt).toISOString();
|
||||
const nextPage = await utils.card.getActivities.fetch({
|
||||
cardPublicId,
|
||||
limit: ACTIVITIES_PAGE_SIZE,
|
||||
cursor: nextCursor,
|
||||
});
|
||||
|
||||
if (nextPage) {
|
||||
const existingIds = new Set(
|
||||
currentActivities.map((a) => a.publicId),
|
||||
);
|
||||
const newActivities = nextPage.activities.filter(
|
||||
(a: { publicId: string }) => !existingIds.has(a.publicId),
|
||||
);
|
||||
currentActivities = [...currentActivities, ...newActivities];
|
||||
currentHasMore = nextPage.hasMore;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
setAllActivities(currentActivities);
|
||||
setHasMore(false);
|
||||
};
|
||||
|
||||
fetchAllRemaining();
|
||||
} else {
|
||||
setAllActivities(firstPageData.activities);
|
||||
setHasMore(firstPageData.hasMore);
|
||||
|
||||
if (!firstPageData.hasMore) {
|
||||
isFullyExpandedRef.current = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}, [firstPageData, dataUpdatedAt, cardPublicId, utils.card.getActivities]);
|
||||
|
||||
const handleLoadMore = async () => {
|
||||
if (isLoadingMore || !hasMore || allActivities.length === 0) return;
|
||||
|
||||
const lastActivity = allActivities[allActivities.length - 1];
|
||||
if (!lastActivity) return;
|
||||
|
||||
setIsLoadingMore(true);
|
||||
try {
|
||||
const nextCursor = new Date(lastActivity.createdAt).toISOString();
|
||||
const nextPage = await utils.card.getActivities.fetch({
|
||||
cardPublicId,
|
||||
limit: ACTIVITIES_PAGE_SIZE,
|
||||
cursor: nextCursor,
|
||||
});
|
||||
|
||||
if (nextPage) {
|
||||
const existingIds = new Set(allActivities.map((a) => a.publicId));
|
||||
const newActivities = nextPage.activities.filter(
|
||||
(a: { publicId: string }) => !existingIds.has(a.publicId),
|
||||
);
|
||||
setAllActivities((prev) => [...prev, ...newActivities]);
|
||||
setHasMore(nextPage.hasMore);
|
||||
|
||||
if (!nextPage.hasMore) {
|
||||
isFullyExpandedRef.current = true;
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
setIsLoadingMore(false);
|
||||
}
|
||||
};
|
||||
|
||||
const isFetching = isFetchingFirst || isLoadingMore;
|
||||
const isLoading =
|
||||
cardIsLoading || (isFetchingFirst && allActivities.length === 0);
|
||||
const { data } = authClient.useSession();
|
||||
const { dateLocale } = useLocalisation();
|
||||
|
||||
return (
|
||||
<div className="flex flex-col space-y-4 pt-4">
|
||||
{allActivities.map((activity, index) => {
|
||||
{activities.map((activity, index) => {
|
||||
const activityText = getActivityText({
|
||||
type: activity.type,
|
||||
toTitle: activity.toTitle,
|
||||
fromList: activity.fromList?.name ?? null,
|
||||
toList: activity.toList?.name ?? null,
|
||||
memberName: activity.member?.user?.name ?? null,
|
||||
isSelf: activity.member?.user?.id === sessionData?.user.id,
|
||||
isSelf: activity.member?.user?.id === data?.user.id,
|
||||
label: activity.label?.name ?? null,
|
||||
fromTitle: activity.fromTitle ?? null,
|
||||
fromDueDate: activity.fromDueDate ?? null,
|
||||
toDueDate: activity.toDueDate ?? null,
|
||||
dateLocale: dateLocale,
|
||||
mergedLabels: (activity as any).mergedLabels,
|
||||
});
|
||||
|
||||
if (activity.type === "card.updated.comment.added")
|
||||
@@ -475,7 +326,7 @@ const ActivityList = ({
|
||||
createdAt={activity.createdAt.toISOString()}
|
||||
comment={activity.comment?.comment}
|
||||
isEdited={!!activity.comment?.updatedAt}
|
||||
isAuthor={activity.comment?.createdBy === sessionData?.user.id}
|
||||
isAuthor={activity.comment?.createdBy === data?.user.id}
|
||||
isAdmin={isAdmin ?? false}
|
||||
isViewOnly={!!isViewOnly}
|
||||
/>
|
||||
@@ -500,9 +351,11 @@ const ActivityList = ({
|
||||
)}
|
||||
isLoading={isLoading}
|
||||
/>
|
||||
{index !== allActivities.length - 1 && (
|
||||
<div className="absolute bottom-[-14px] left-1/2 top-[30px] w-0.5 -translate-x-1/2 bg-light-600 dark:bg-dark-600" />
|
||||
)}
|
||||
{index !== activities.length - 1 &&
|
||||
activities[index + 1]?.type !==
|
||||
"card.updated.comment.added" && (
|
||||
<div className="absolute bottom-[-14px] left-1/2 top-[30px] w-0.5 -translate-x-1/2 bg-light-600 dark:bg-dark-600" />
|
||||
)}
|
||||
</div>
|
||||
<p className="text-sm">
|
||||
<span className="font-medium dark:text-dark-1000">{`${activity.user?.name} `}</span>
|
||||
@@ -520,17 +373,6 @@ const ActivityList = ({
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
{hasMore && (
|
||||
<div className="flex justify-center pt-4">
|
||||
<button
|
||||
onClick={handleLoadMore}
|
||||
disabled={isFetching}
|
||||
className="text-sm font-medium text-light-900 hover:text-light-1000 disabled:opacity-50 dark:text-dark-800 dark:hover:text-dark-1000"
|
||||
>
|
||||
{isFetching ? t`Loading...` : t`Load more activities`}
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface Attachment {
|
||||
publicId: string;
|
||||
@@ -82,7 +81,7 @@ export function AttachmentThumbnails({
|
||||
},
|
||||
onSettled: async () => {
|
||||
if (isReadOnly) return;
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import Button from "~/components/Button";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
export function AttachmentUpload({ cardPublicId }: { cardPublicId: string }) {
|
||||
const { openModal } = useModal();
|
||||
@@ -21,7 +20,7 @@ export function AttachmentUpload({ cardPublicId }: { cardPublicId: string }) {
|
||||
const generateUploadUrl = api.attachment.generateUploadUrl.useMutation();
|
||||
const confirmAttachment = api.attachment.confirm.useMutation({
|
||||
onSuccess: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
showPopup({
|
||||
header: t`Attachment uploaded`,
|
||||
message: t`Your file has been uploaded successfully.`,
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
import type { DraggableProvided } from "react-beautiful-dnd";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { useEffect, useState } from "react";
|
||||
import ContentEditable from "react-contenteditable";
|
||||
import { HiXMark } from "react-icons/hi2";
|
||||
import { RiDraggable } from "react-icons/ri";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface ChecklistItemRowProps {
|
||||
item: {
|
||||
@@ -17,19 +14,13 @@ interface ChecklistItemRowProps {
|
||||
completed: boolean;
|
||||
};
|
||||
cardPublicId: string;
|
||||
onCreateNewItem?: () => void;
|
||||
viewOnly?: boolean;
|
||||
dragHandleProps?: DraggableProvided["dragHandleProps"];
|
||||
isDragging?: boolean;
|
||||
}
|
||||
|
||||
export default function ChecklistItemRow({
|
||||
item,
|
||||
cardPublicId,
|
||||
onCreateNewItem,
|
||||
viewOnly = false,
|
||||
dragHandleProps,
|
||||
isDragging = false,
|
||||
}: ChecklistItemRowProps) {
|
||||
const utils = api.useUtils();
|
||||
const { showPopup } = usePopup();
|
||||
@@ -71,7 +62,7 @@ export default function ChecklistItemRow({
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
@@ -99,7 +90,7 @@ export default function ChecklistItemRow({
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
@@ -147,23 +138,7 @@ export default function ChecklistItemRow({
|
||||
};
|
||||
|
||||
return (
|
||||
<div
|
||||
className={twMerge(
|
||||
"group relative flex items-start gap-3 rounded-md py-2 pl-4 hover:bg-light-100 dark:hover:bg-dark-100",
|
||||
isDragging && "opacity-80",
|
||||
)}
|
||||
>
|
||||
{!viewOnly && (
|
||||
<div
|
||||
{...dragHandleProps}
|
||||
className="absolute left-0 top-1/2 flex h-[20px] w-[20px] -translate-x-full -translate-y-1/2 cursor-grab items-center justify-center pr-1 opacity-0 transition-opacity group-hover:opacity-75 hover:opacity-100 active:cursor-grabbing"
|
||||
>
|
||||
<RiDraggable className="h-4 w-4 text-light-700 dark:text-dark-700" />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{viewOnly && <div className="w-[20px] flex-shrink-0" />}
|
||||
|
||||
<div className="group relative flex items-start gap-3 rounded-md py-2 pl-4 hover:bg-light-100 dark:hover:bg-dark-100">
|
||||
<label
|
||||
className={`relative mt-[2px] inline-flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center`}
|
||||
>
|
||||
@@ -189,10 +164,7 @@ export default function ChecklistItemRow({
|
||||
disabled={viewOnly}
|
||||
onChange={(e) => setTitle(e.target.value)}
|
||||
// @ts-expect-error - valid event
|
||||
onBlur={(e: Event) => {
|
||||
const innerHTML = (e.target as HTMLElement).innerHTML;
|
||||
commitTitle(innerHTML);
|
||||
}}
|
||||
onBlur={(e: Event) => commitTitle(e.target.innerHTML as string)}
|
||||
className={twMerge(
|
||||
"m-0 min-h-[20px] w-full p-0 text-sm leading-[20px] text-light-950 outline-none focus-visible:outline-none dark:text-dark-950",
|
||||
viewOnly && "cursor-default",
|
||||
@@ -202,9 +174,7 @@ export default function ChecklistItemRow({
|
||||
if (viewOnly) return;
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
const innerHTML = (e.currentTarget as HTMLElement).innerHTML;
|
||||
commitTitle(innerHTML);
|
||||
onCreateNewItem?.();
|
||||
commitTitle(title);
|
||||
}
|
||||
if (e.key === "Escape") {
|
||||
e.preventDefault();
|
||||
|
||||
@@ -4,7 +4,6 @@ import { twMerge } from "tailwind-merge";
|
||||
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
export default function ChecklistNameInput({
|
||||
checklistPublicId,
|
||||
@@ -49,7 +48,7 @@ export default function ChecklistNameInput({
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -1,13 +1,7 @@
|
||||
import type { DropResult } from "react-beautiful-dnd";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { DragDropContext, Draggable } from "react-beautiful-dnd";
|
||||
import { HiPlus, HiXMark } from "react-icons/hi2";
|
||||
|
||||
import CircularProgress from "~/components/CircularProgress";
|
||||
import { StrictModeDroppable as Droppable } from "~/components/StrictModeDroppable";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import ChecklistItemRow from "./ChecklistItemRow";
|
||||
import ChecklistNameInput from "./ChecklistNameInput";
|
||||
import NewChecklistItemForm from "./NewChecklistItemForm";
|
||||
@@ -40,206 +34,109 @@ export default function Checklists({
|
||||
viewOnly = false,
|
||||
}: ChecklistsProps) {
|
||||
const { openModal } = useModal();
|
||||
const { showPopup } = usePopup();
|
||||
|
||||
const utils = api.useUtils();
|
||||
|
||||
const reorderItemMutation = api.checklist.updateItem.useMutation({
|
||||
onMutate: async (vars) => {
|
||||
await utils.card.byId.cancel({ cardPublicId });
|
||||
const previous = utils.card.byId.getData({ cardPublicId });
|
||||
|
||||
utils.card.byId.setData({ cardPublicId }, (old) => {
|
||||
if (!old) return old;
|
||||
|
||||
const updatedChecklists = old.checklists.map((cl) => {
|
||||
const itemIndex = cl.items.findIndex(
|
||||
(item) => item.publicId === vars.checklistItemPublicId,
|
||||
);
|
||||
|
||||
if (itemIndex === -1 || vars.index === undefined) return cl;
|
||||
|
||||
const newIndex = vars.index;
|
||||
const items = Array.from(cl.items);
|
||||
const [movedItem] = items.splice(itemIndex, 1);
|
||||
if (!movedItem) return cl;
|
||||
items.splice(newIndex, 0, movedItem);
|
||||
|
||||
return { ...cl, items };
|
||||
});
|
||||
|
||||
return { ...old, checklists: updatedChecklists } as typeof old;
|
||||
});
|
||||
|
||||
return { previous };
|
||||
},
|
||||
onError: (_err, _vars, ctx) => {
|
||||
if (ctx?.previous)
|
||||
utils.card.byId.setData({ cardPublicId }, ctx.previous);
|
||||
showPopup({
|
||||
header: t`Unable to reorder checklist item`,
|
||||
message: t`Please try again later, or contact customer support.`,
|
||||
icon: "error",
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
const onDragEnd = (result: DropResult) => {
|
||||
if (!result.destination) return;
|
||||
|
||||
const { source, destination, draggableId } = result;
|
||||
|
||||
if (source.droppableId !== destination.droppableId) return;
|
||||
|
||||
if (source.index === destination.index) return;
|
||||
|
||||
reorderItemMutation.mutate({
|
||||
checklistItemPublicId: draggableId,
|
||||
index: destination.index,
|
||||
});
|
||||
};
|
||||
|
||||
if (checklists.length === 0) return null;
|
||||
if (!checklists || checklists.length === 0) return null;
|
||||
|
||||
return (
|
||||
<DragDropContext onDragEnd={onDragEnd}>
|
||||
<div className="border-light-300 pb-4 dark:border-dark-300">
|
||||
<div>
|
||||
{checklists.map((checklist) => {
|
||||
const completedItems = checklist.items.filter(
|
||||
(item) => item.completed,
|
||||
);
|
||||
const progress =
|
||||
checklist.items.length > 0 && completedItems.length > 0
|
||||
? (completedItems.length / checklist.items.length) * 100
|
||||
: 2;
|
||||
<div className="border-light-300 pb-4 dark:border-dark-300">
|
||||
<div>
|
||||
{checklists.map((checklist) => {
|
||||
const completedItems = checklist.items.filter(
|
||||
(item) => item.completed,
|
||||
);
|
||||
const progress =
|
||||
checklist.items.length > 0 && completedItems.length > 0
|
||||
? (completedItems.length / checklist.items.length) * 100
|
||||
: 2;
|
||||
|
||||
return (
|
||||
<div key={checklist.publicId} className="mb-4">
|
||||
<div className="mb-2 flex items-center font-medium text-light-1000 dark:text-dark-1000">
|
||||
<div className="min-w-0 flex-1">
|
||||
<ChecklistNameInput
|
||||
checklistPublicId={checklist.publicId}
|
||||
initialName={checklist.name}
|
||||
cardPublicId={cardPublicId}
|
||||
viewOnly={viewOnly}
|
||||
/>
|
||||
</div>
|
||||
{!viewOnly && (
|
||||
<div className="ml-2 flex flex-shrink-0 items-center gap-2">
|
||||
<div className="flex items-center gap-1 rounded-full border-[1px] border-light-300 px-2 py-1 dark:border-dark-300">
|
||||
<CircularProgress
|
||||
progress={progress}
|
||||
size="sm"
|
||||
className="flex-shrink-0"
|
||||
/>
|
||||
<span className="text-[11px] text-light-900 dark:text-dark-700">
|
||||
{completedItems.length}/{checklist.items.length}
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<button
|
||||
className="rounded-md p-1 text-light-900 hover:bg-light-100 dark:text-dark-700 dark:hover:bg-dark-100"
|
||||
onClick={() =>
|
||||
openModal("DELETE_CHECKLIST", checklist.publicId)
|
||||
}
|
||||
>
|
||||
<HiXMark size={16} />
|
||||
</button>
|
||||
<button
|
||||
onClick={() =>
|
||||
setActiveChecklistForm?.(checklist.publicId)
|
||||
}
|
||||
className="rounded-md p-1 text-light-900 hover:bg-light-100 dark:text-dark-700 dark:hover:bg-dark-100"
|
||||
>
|
||||
<HiPlus size={16} />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{viewOnly && (
|
||||
<div className="ml-2 flex flex-shrink-0 items-center gap-2">
|
||||
<div className="flex items-center gap-1 rounded-full border-[1px] border-light-300 px-2 py-1 dark:border-dark-300">
|
||||
<CircularProgress
|
||||
progress={progress}
|
||||
size="sm"
|
||||
className="flex-shrink-0"
|
||||
/>
|
||||
<span className="text-[11px] text-light-900 dark:text-dark-700">
|
||||
{completedItems.length}/{checklist.items.length}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
return (
|
||||
<div key={checklist.publicId} className="mb-4">
|
||||
<div className="mb-2 flex items-center font-medium text-light-1000 dark:text-dark-1000">
|
||||
<div className="min-w-0 flex-1">
|
||||
<ChecklistNameInput
|
||||
checklistPublicId={checklist.publicId}
|
||||
initialName={checklist.name}
|
||||
cardPublicId={cardPublicId}
|
||||
viewOnly={viewOnly}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<Droppable
|
||||
droppableId={checklist.publicId}
|
||||
type="CHECKLIST_ITEM"
|
||||
isDropDisabled={viewOnly}
|
||||
>
|
||||
{(provided) => (
|
||||
<div
|
||||
ref={provided.innerRef}
|
||||
{...provided.droppableProps}
|
||||
className="ml-1"
|
||||
>
|
||||
{checklist.items.map((item, index) => (
|
||||
<Draggable
|
||||
key={item.publicId}
|
||||
draggableId={item.publicId}
|
||||
index={index}
|
||||
isDragDisabled={viewOnly}
|
||||
>
|
||||
{(provided, snapshot) => (
|
||||
<div
|
||||
ref={provided.innerRef}
|
||||
{...provided.draggableProps}
|
||||
style={{
|
||||
...provided.draggableProps.style,
|
||||
opacity: snapshot.isDragging ? 0.8 : 1,
|
||||
}}
|
||||
>
|
||||
<ChecklistItemRow
|
||||
item={{
|
||||
publicId: item.publicId,
|
||||
title: item.title,
|
||||
completed: item.completed,
|
||||
}}
|
||||
cardPublicId={cardPublicId}
|
||||
onCreateNewItem={() =>
|
||||
setActiveChecklistForm?.(checklist.publicId)
|
||||
}
|
||||
viewOnly={viewOnly}
|
||||
dragHandleProps={provided.dragHandleProps}
|
||||
isDragging={snapshot.isDragging}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</Draggable>
|
||||
))}
|
||||
{provided.placeholder}
|
||||
{!viewOnly && (
|
||||
<div className="ml-2 flex flex-shrink-0 items-center gap-2">
|
||||
<div className="flex items-center gap-1 rounded-full border-[1px] border-light-300 px-2 py-1 dark:border-dark-300">
|
||||
<CircularProgress
|
||||
progress={progress}
|
||||
size="sm"
|
||||
className="flex-shrink-0"
|
||||
/>
|
||||
<span className="text-[11px] text-light-900 dark:text-dark-700">
|
||||
{completedItems.length}/{checklist.items.length}
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<button
|
||||
className="rounded-md p-1 text-light-900 hover:bg-light-100 dark:text-dark-700 dark:hover:bg-dark-100"
|
||||
onClick={() =>
|
||||
openModal("DELETE_CHECKLIST", checklist.publicId)
|
||||
}
|
||||
>
|
||||
<HiXMark size={16} />
|
||||
</button>
|
||||
<button
|
||||
onClick={() =>
|
||||
setActiveChecklistForm?.(checklist.publicId)
|
||||
}
|
||||
className="rounded-md p-1 text-light-900 hover:bg-light-100 dark:text-dark-700 dark:hover:bg-dark-100"
|
||||
>
|
||||
<HiPlus size={16} />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{viewOnly && (
|
||||
<div className="ml-2 flex flex-shrink-0 items-center gap-2">
|
||||
<div className="flex items-center gap-1 rounded-full border-[1px] border-light-300 px-2 py-1 dark:border-dark-300">
|
||||
<CircularProgress
|
||||
progress={progress}
|
||||
size="sm"
|
||||
className="flex-shrink-0"
|
||||
/>
|
||||
<span className="text-[11px] text-light-900 dark:text-dark-700">
|
||||
{completedItems.length}/{checklist.items.length}
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
</Droppable>
|
||||
{activeChecklistForm === checklist.publicId && !viewOnly && (
|
||||
<div className="ml-1">
|
||||
<NewChecklistItemForm
|
||||
checklistPublicId={checklist.publicId}
|
||||
cardPublicId={cardPublicId}
|
||||
onCancel={() => setActiveChecklistForm?.(null)}
|
||||
readOnly={viewOnly}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
|
||||
<div className="ml-1">
|
||||
{checklist.items.map((item) => (
|
||||
<ChecklistItemRow
|
||||
key={item.publicId}
|
||||
item={{
|
||||
publicId: item.publicId,
|
||||
title: item.title,
|
||||
completed: item.completed,
|
||||
}}
|
||||
cardPublicId={cardPublicId}
|
||||
viewOnly={viewOnly}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{activeChecklistForm === checklist.publicId && !viewOnly && (
|
||||
<div className="ml-1">
|
||||
<NewChecklistItemForm
|
||||
checklistPublicId={checklist.publicId}
|
||||
cardPublicId={cardPublicId}
|
||||
onCancel={() => setActiveChecklistForm?.(null)}
|
||||
readOnly={viewOnly}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</DragDropContext>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ import Dropdown from "~/components/Dropdown";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface FormValues {
|
||||
comment: string;
|
||||
@@ -56,7 +55,7 @@ const Comment = ({
|
||||
|
||||
const updateCommentMutation = api.card.updateComment.useMutation({
|
||||
onSuccess: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.refetch();
|
||||
setIsEditing(false);
|
||||
},
|
||||
onError: () => {
|
||||
|
||||
@@ -4,7 +4,6 @@ import Button from "~/components/Button";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
export function DeleteChecklistConfirmation({
|
||||
cardPublicId,
|
||||
@@ -41,7 +40,7 @@ export function DeleteChecklistConfirmation({
|
||||
},
|
||||
onSettled: async () => {
|
||||
closeModal();
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import Button from "~/components/Button";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface DeleteCommentConfirmationProps {
|
||||
cardPublicId: string;
|
||||
@@ -48,7 +47,7 @@ export function DeleteCommentConfirmation({
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate(queryParams);
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import { HiMiniPlus } from "react-icons/hi2";
|
||||
import DateSelector from "~/components/DateSelector";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface DueDateSelectorProps {
|
||||
cardPublicId: string;
|
||||
@@ -62,7 +61,7 @@ export function DueDateSelector({
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
await utils.board.byId.invalidate();
|
||||
},
|
||||
});
|
||||
|
||||
@@ -6,7 +6,6 @@ import CheckboxDropdown from "~/components/CheckboxDropdown";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface LabelSelectorProps {
|
||||
cardPublicId: string;
|
||||
@@ -75,7 +74,7 @@ export default function LabelSelector({
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ import { t } from "@lingui/core/macro";
|
||||
import CheckboxDropdown from "~/components/CheckboxDropdown";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface ListSelectorProps {
|
||||
cardPublicId: string;
|
||||
@@ -55,7 +54,7 @@ export default function ListSelector({
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import CheckboxDropdown from "~/components/CheckboxDropdown";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface MemberSelectorProps {
|
||||
cardPublicId: string;
|
||||
@@ -82,7 +81,7 @@ export default function MemberSelector({
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import Input from "~/components/Input";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface NewChecklistFormInput {
|
||||
name: string;
|
||||
@@ -73,7 +72,7 @@ export function NewChecklistForm({ cardPublicId }: { cardPublicId: string }) {
|
||||
});
|
||||
},
|
||||
onSettled: async (_data, _error, vars) => {
|
||||
await invalidateCard(utils, vars.cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId: vars.cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface FormValues {
|
||||
title: string;
|
||||
@@ -92,7 +91,7 @@ const NewChecklistItemForm = ({
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate({ cardPublicId });
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import { HiOutlineArrowUp } from "react-icons/hi2";
|
||||
import LoadingSpinner from "~/components/LoadingSpinner";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
|
||||
interface FormValues {
|
||||
comment: string;
|
||||
@@ -35,7 +34,10 @@ const NewCommentForm = ({ cardPublicId }: { cardPublicId: string }) => {
|
||||
},
|
||||
onSettled: async () => {
|
||||
reset();
|
||||
await invalidateCard(utils, cardPublicId);
|
||||
await utils.card.byId.invalidate(queryParams);
|
||||
},
|
||||
onSuccess: async () => {
|
||||
await utils.card.byId.refetch();
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { useWorkspace } from "~/providers/workspace";
|
||||
import { api } from "~/utils/api";
|
||||
import { invalidateCard } from "~/utils/cardInvalidation";
|
||||
import { formatMemberDisplayName, getAvatarUrl } from "~/utils/helpers";
|
||||
import { DeleteLabelConfirmation } from "../../components/DeleteLabelConfirmation";
|
||||
import ActivityList from "./components/ActivityList";
|
||||
@@ -157,7 +156,6 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
|
||||
getModalState,
|
||||
clearModalState,
|
||||
isOpen,
|
||||
modalStates,
|
||||
} = useModal();
|
||||
const { showPopup } = usePopup();
|
||||
const { workspace } = useWorkspace();
|
||||
@@ -179,6 +177,7 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
|
||||
|
||||
const board = card?.list.board;
|
||||
const boardId = board?.publicId;
|
||||
const activities = card?.activities;
|
||||
|
||||
const updateCard = api.card.update.useMutation({
|
||||
onError: () => {
|
||||
@@ -189,22 +188,7 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
if (cardId) await invalidateCard(utils, cardId);
|
||||
},
|
||||
});
|
||||
|
||||
const addOrRemoveLabel = api.card.addOrRemoveLabel.useMutation({
|
||||
onError: () => {
|
||||
showPopup({
|
||||
header: t`Unable to add label`,
|
||||
message: t`Please try again later, or contact customer support.`,
|
||||
icon: "error",
|
||||
});
|
||||
},
|
||||
onSettled: async () => {
|
||||
if (cardId) {
|
||||
await utils.card.byId.invalidate({ cardPublicId: cardId });
|
||||
}
|
||||
await utils.card.byId.invalidate({ cardPublicId: cardId });
|
||||
},
|
||||
});
|
||||
|
||||
@@ -224,24 +208,6 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
|
||||
});
|
||||
};
|
||||
|
||||
// this adds the new created label to selected labels
|
||||
useEffect(() => {
|
||||
const newLabelId = modalStates.NEW_LABEL_CREATED;
|
||||
if (newLabelId && cardId) {
|
||||
const isAlreadyAdded = card?.labels.some(
|
||||
(label) => label.publicId === newLabelId,
|
||||
);
|
||||
|
||||
if (!isAlreadyAdded) {
|
||||
addOrRemoveLabel.mutate({
|
||||
cardPublicId: cardId,
|
||||
labelPublicId: newLabelId,
|
||||
});
|
||||
}
|
||||
clearModalState("NEW_LABEL_CREATED");
|
||||
}
|
||||
}, [modalStates.NEW_LABEL_CREATED, card, cardId]);
|
||||
|
||||
// Open the new item form after creating a new checklist
|
||||
useEffect(() => {
|
||||
if (!card) return;
|
||||
@@ -388,6 +354,7 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
|
||||
<div>
|
||||
<ActivityList
|
||||
cardPublicId={cardId}
|
||||
activities={activities ?? []}
|
||||
isLoading={!card}
|
||||
isAdmin={workspace.role === "admin"}
|
||||
/>
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
import type { FC, SVGProps } from "react";
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
|
||||
import AirbusLogo from "~/assets/logos/airbus.svg";
|
||||
import CouchbaseLogo from "~/assets/logos/couchbase.svg";
|
||||
import DeloitteLogo from "~/assets/logos/deloitte.svg";
|
||||
import FastCompanyLogo from "~/assets/logos/fast_company.svg";
|
||||
import LegoLogo from "~/assets/logos/lego.svg";
|
||||
import LinkedinLogo from "~/assets/logos/linkedin.svg";
|
||||
import SanaLogo from "~/assets/logos/sana.svg";
|
||||
import WakamLogo from "~/assets/logos/wakam.svg";
|
||||
import AirbusLogo from "/public/logos/airbus.svg";
|
||||
import BitwardenLogo from "/public/logos/bitwarden.svg";
|
||||
import CouchbaseLogo from "/public/logos/couchbase.svg";
|
||||
import DeloitteLogo from "/public/logos/deloitte.svg";
|
||||
import FastCompanyLogo from "/public/logos/fast_company.svg";
|
||||
import LegoLogo from "/public/logos/lego.svg";
|
||||
import LinkedinLogo from "/public/logos/linkedin.svg";
|
||||
import SanaLogo from "/public/logos/sana.svg";
|
||||
import WakamLogo from "/public/logos/wakam.svg";
|
||||
|
||||
type LogoComponent = FC<SVGProps<SVGSVGElement>>;
|
||||
|
||||
@@ -30,31 +31,36 @@ export default function Logos() {
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
component: BitwardenLogo as LogoComponent,
|
||||
alt: "Bitwarden Logo",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
component: CouchbaseLogo as LogoComponent,
|
||||
alt: "Couchbase Logo",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
id: 5,
|
||||
component: LegoLogo as LogoComponent,
|
||||
alt: "Lego Logo",
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
id: 6,
|
||||
component: AirbusLogo as LogoComponent,
|
||||
alt: "Airbus Logo",
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
id: 7,
|
||||
component: DeloitteLogo as LogoComponent,
|
||||
alt: "Deloitte Logo",
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
id: 8,
|
||||
component: WakamLogo as LogoComponent,
|
||||
alt: "Wakam Logo",
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
id: 9,
|
||||
component: LinkedinLogo as LogoComponent,
|
||||
alt: "Linked In Logo",
|
||||
},
|
||||
@@ -76,7 +82,7 @@ export default function Logos() {
|
||||
<div className="absolute left-0 top-0 z-10 h-full w-8 bg-gradient-to-r from-white/60 to-transparent dark:from-dark-50" />
|
||||
<div className="absolute right-0 top-0 z-10 h-full w-8 bg-gradient-to-l from-white/60 to-transparent dark:from-dark-50" />
|
||||
|
||||
<div className="flex animate-scroll" style={{ width: "max-content" }}>
|
||||
<div className="animate-scroll flex" style={{ width: "max-content" }}>
|
||||
<div className="flex flex-shrink-0 items-center space-x-12">
|
||||
{logos.map((logo) => {
|
||||
const LogoComponent: LogoComponent = logo.component;
|
||||
|
||||
@@ -161,6 +161,7 @@ export function CardModal({
|
||||
{cardPublicId && (
|
||||
<ActivityList
|
||||
cardPublicId={cardPublicId}
|
||||
activities={data?.activities ?? []}
|
||||
isLoading={isLoading}
|
||||
isViewOnly={true}
|
||||
/>
|
||||
|
||||
@@ -15,6 +15,7 @@ import ThemeToggle from "~/components/ThemeToggle";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { api } from "~/utils/api";
|
||||
import { convertDueDateFiltersToRanges } from "~/utils/dueDateFilters";
|
||||
import { formatToArray } from "~/utils/helpers";
|
||||
import Card from "~/views/board/components/Card";
|
||||
import Filters from "~/views/board/components/Filters";
|
||||
@@ -54,9 +55,7 @@ export default function PublicBoardView() {
|
||||
members: formatToArray(router.query.members),
|
||||
labels: formatToArray(router.query.labels),
|
||||
lists: formatToArray(router.query.lists),
|
||||
...(dueDateFilters.length > 0 && {
|
||||
dueDateFilters: dueDateFilters,
|
||||
}),
|
||||
dueDate: convertDueDateFiltersToRanges(dueDateFilters),
|
||||
},
|
||||
{
|
||||
enabled: router.isReady && !!boardSlug,
|
||||
|
||||
@@ -13,7 +13,6 @@ services:
|
||||
- .env
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- KAN_ADMIN_API_KEY=${KAN_ADMIN_API_KEY}
|
||||
- NEXT_PUBLIC_KAN_ENV=${NEXT_PUBLIC_KAN_ENV}
|
||||
- NEXT_PUBLIC_BASE_URL=${NEXT_PUBLIC_BASE_URL}
|
||||
- BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
|
||||
|
||||
@@ -18,9 +18,6 @@ services:
|
||||
- BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
|
||||
- POSTGRES_URL=${POSTGRES_URL}
|
||||
|
||||
# Admin API key (optional)
|
||||
- KAN_ADMIN_API_KEY=${KAN_ADMIN_API_KEY}
|
||||
|
||||
# SMTP (optional)
|
||||
- SMTP_HOST=${SMTP_HOST}
|
||||
- SMTP_PORT=${SMTP_PORT}
|
||||
|
||||
@@ -9,15 +9,5 @@ export const openApiDocument = generateOpenApiDocument(appRouter, {
|
||||
version: "1.0.0",
|
||||
baseUrl: `${env("NEXT_PUBLIC_BASE_URL")}/api/v1`,
|
||||
docsUrl: "docs.kan.bn",
|
||||
tags: [
|
||||
"Auth",
|
||||
"Users",
|
||||
"Boards",
|
||||
"Lists",
|
||||
"Cards",
|
||||
"Labels",
|
||||
"Imports",
|
||||
"Integrations",
|
||||
"Health",
|
||||
],
|
||||
tags: ["Auth", "Users", "Boards", "Lists", "Cards", "Labels", "Imports", "Integrations"],
|
||||
});
|
||||
|
||||
@@ -3,7 +3,6 @@ import { boardRouter } from "./routers/board";
|
||||
import { cardRouter } from "./routers/card";
|
||||
import { checklistRouter } from "./routers/checklist";
|
||||
import { feedbackRouter } from "./routers/feedback";
|
||||
import { healthRouter } from "./routers/health";
|
||||
import { importRouter } from "./routers/import";
|
||||
import { integrationRouter } from "./routers/integration";
|
||||
import { labelRouter } from "./routers/label";
|
||||
@@ -19,7 +18,6 @@ export const appRouter = createTRPCRouter({
|
||||
card: cardRouter,
|
||||
checklist: checklistRouter,
|
||||
feedback: feedbackRouter,
|
||||
health: healthRouter,
|
||||
label: labelRouter,
|
||||
list: listRouter,
|
||||
member: memberRouter,
|
||||
|
||||
@@ -9,7 +9,7 @@ import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
import { createTRPCRouter, protectedProcedure } from "../trpc";
|
||||
import { assertUserInWorkspace } from "../utils/auth";
|
||||
import { deleteObject, generateUploadUrl } from "../utils/s3";
|
||||
import { generateUploadUrl } from "../utils/s3";
|
||||
|
||||
export const attachmentRouter = createTRPCRouter({
|
||||
generateUploadUrl: protectedProcedure
|
||||
@@ -189,18 +189,6 @@ export const attachmentRouter = createTRPCRouter({
|
||||
|
||||
await assertUserInWorkspace(ctx.db, userId, workspaceId);
|
||||
|
||||
const bucket = process.env.NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME;
|
||||
if (bucket) {
|
||||
try {
|
||||
await deleteObject(bucket, attachment.s3Key);
|
||||
} catch (error) {
|
||||
console.error(
|
||||
`Failed to delete attachment from S3: ${attachment.s3Key}`,
|
||||
error,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
await cardAttachmentRepo.softDelete(ctx.db, {
|
||||
attachmentId: attachment.id,
|
||||
deletedAt: new Date(),
|
||||
|
||||
@@ -8,15 +8,17 @@ import * as labelRepo from "@kan/db/repository/label.repo";
|
||||
import * as listRepo from "@kan/db/repository/list.repo";
|
||||
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
|
||||
import { colours } from "@kan/shared/constants";
|
||||
import {
|
||||
convertDueDateFiltersToRanges,
|
||||
generateSlug,
|
||||
generateUID,
|
||||
} from "@kan/shared/utils";
|
||||
import { generateSlug, generateUID } from "@kan/shared/utils";
|
||||
|
||||
import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc";
|
||||
import { assertUserInWorkspace } from "../utils/auth";
|
||||
|
||||
const dueDateFilterSchema = z.object({
|
||||
startDate: z.string().datetime().optional(),
|
||||
endDate: z.string().datetime().optional(),
|
||||
hasNoDueDate: z.boolean().optional(),
|
||||
});
|
||||
|
||||
export const boardRouter = createTRPCRouter({
|
||||
all: protectedProcedure
|
||||
.meta({
|
||||
@@ -83,18 +85,7 @@ export const boardRouter = createTRPCRouter({
|
||||
members: z.array(z.string().min(12)).optional(),
|
||||
labels: z.array(z.string().min(12)).optional(),
|
||||
lists: z.array(z.string().min(12)).optional(),
|
||||
dueDateFilters: z
|
||||
.array(
|
||||
z.enum([
|
||||
"overdue",
|
||||
"today",
|
||||
"tomorrow",
|
||||
"next-week",
|
||||
"next-month",
|
||||
"no-due-date",
|
||||
]),
|
||||
)
|
||||
.optional(),
|
||||
dueDate: z.array(dueDateFilterSchema).optional(),
|
||||
type: z.enum(["regular", "template"]).optional(),
|
||||
}),
|
||||
)
|
||||
@@ -121,11 +112,6 @@ export const boardRouter = createTRPCRouter({
|
||||
|
||||
await assertUserInWorkspace(ctx.db, userId, board.workspaceId);
|
||||
|
||||
// Convert semantic string filters to date ranges expected by the repo
|
||||
const dueDateFilters = input.dueDateFilters
|
||||
? convertDueDateFiltersToRanges(input.dueDateFilters)
|
||||
: [];
|
||||
|
||||
const result = await boardRepo.getByPublicId(
|
||||
ctx.db,
|
||||
input.boardPublicId,
|
||||
@@ -133,7 +119,14 @@ export const boardRouter = createTRPCRouter({
|
||||
members: input.members ?? [],
|
||||
labels: input.labels ?? [],
|
||||
lists: input.lists ?? [],
|
||||
dueDate: dueDateFilters,
|
||||
dueDate:
|
||||
input.dueDate?.map((filter) => ({
|
||||
startDate: filter.startDate
|
||||
? new Date(filter.startDate)
|
||||
: undefined,
|
||||
endDate: filter.endDate ? new Date(filter.endDate) : undefined,
|
||||
hasNoDueDate: filter.hasNoDueDate,
|
||||
})) ?? [],
|
||||
type: input.type,
|
||||
},
|
||||
);
|
||||
@@ -167,18 +160,7 @@ export const boardRouter = createTRPCRouter({
|
||||
members: z.array(z.string().min(12)).optional(),
|
||||
labels: z.array(z.string().min(12)).optional(),
|
||||
lists: z.array(z.string().min(12)).optional(),
|
||||
dueDateFilters: z
|
||||
.array(
|
||||
z.enum([
|
||||
"overdue",
|
||||
"today",
|
||||
"tomorrow",
|
||||
"next-week",
|
||||
"next-month",
|
||||
"no-due-date",
|
||||
]),
|
||||
)
|
||||
.optional(),
|
||||
dueDate: z.array(dueDateFilterSchema).optional(),
|
||||
}),
|
||||
)
|
||||
.output(z.custom<Awaited<ReturnType<typeof boardRepo.getBySlug>>>())
|
||||
@@ -194,11 +176,6 @@ export const boardRouter = createTRPCRouter({
|
||||
code: "NOT_FOUND",
|
||||
});
|
||||
|
||||
// Convert semantic string filters to date ranges expected by the repo
|
||||
const dueDateFilters = input.dueDateFilters
|
||||
? convertDueDateFiltersToRanges(input.dueDateFilters)
|
||||
: [];
|
||||
|
||||
const result = await boardRepo.getBySlug(
|
||||
ctx.db,
|
||||
input.boardSlug,
|
||||
@@ -207,7 +184,14 @@ export const boardRouter = createTRPCRouter({
|
||||
members: input.members ?? [],
|
||||
labels: input.labels ?? [],
|
||||
lists: input.lists ?? [],
|
||||
dueDate: dueDateFilters,
|
||||
dueDate:
|
||||
input.dueDate?.map((filter) => ({
|
||||
startDate: filter.startDate
|
||||
? new Date(filter.startDate)
|
||||
: undefined,
|
||||
endDate: filter.endDate ? new Date(filter.endDate) : undefined,
|
||||
hasNoDueDate: filter.hasNoDueDate,
|
||||
})) ?? [],
|
||||
},
|
||||
);
|
||||
|
||||
@@ -322,6 +306,12 @@ export const boardRouter = createTRPCRouter({
|
||||
sourceBoardId: sourceBoardInfo.id,
|
||||
});
|
||||
|
||||
if (!result)
|
||||
throw new TRPCError({
|
||||
message: `Failed to create board from source`,
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import * as listRepo from "@kan/db/repository/list.repo";
|
||||
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
|
||||
|
||||
import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc";
|
||||
import { mergeActivities } from "../utils/activities";
|
||||
import { assertUserInWorkspace } from "../utils/auth";
|
||||
import { generateDownloadUrl } from "../utils/s3";
|
||||
|
||||
@@ -27,7 +26,7 @@ export const cardRouter = createTRPCRouter({
|
||||
})
|
||||
.input(
|
||||
z.object({
|
||||
title: z.string().min(1).max(2000),
|
||||
title: z.string().min(1),
|
||||
description: z.string().max(10000),
|
||||
listPublicId: z.string().min(12),
|
||||
labelPublicIds: z.array(z.string().min(12)),
|
||||
@@ -671,81 +670,6 @@ export const cardRouter = createTRPCRouter({
|
||||
|
||||
return { ...result, attachments: [] };
|
||||
}),
|
||||
getActivities: publicProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
summary: "Get paginated card activities",
|
||||
method: "GET",
|
||||
path: "/cards/{cardPublicId}/activities",
|
||||
description:
|
||||
"Retrieves paginated activities for a card with merged frequent changes",
|
||||
tags: ["Cards"],
|
||||
},
|
||||
})
|
||||
.input(
|
||||
z.object({
|
||||
cardPublicId: z.string().min(12),
|
||||
limit: z.number().min(1).max(100).optional().default(10),
|
||||
cursor: z.string().datetime().optional(), // ISO datetime string
|
||||
}),
|
||||
)
|
||||
.output(
|
||||
z.object({
|
||||
activities: z.array(
|
||||
z.custom<
|
||||
NonNullable<
|
||||
Awaited<
|
||||
ReturnType<typeof cardActivityRepo.getPaginatedActivities>
|
||||
>
|
||||
>["activities"][number]
|
||||
>(),
|
||||
),
|
||||
hasMore: z.boolean(),
|
||||
nextCursor: z.string().datetime().nullable(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ ctx, input }) => {
|
||||
const card = await cardRepo.getWorkspaceAndCardIdByCardPublicId(
|
||||
ctx.db,
|
||||
input.cardPublicId,
|
||||
);
|
||||
|
||||
if (!card)
|
||||
throw new TRPCError({
|
||||
message: `Card with public ID ${input.cardPublicId} not found`,
|
||||
code: "NOT_FOUND",
|
||||
});
|
||||
|
||||
if (card.workspaceVisibility === "private") {
|
||||
const userId = ctx.user?.id;
|
||||
|
||||
if (!userId)
|
||||
throw new TRPCError({
|
||||
message: `User not authenticated`,
|
||||
code: "UNAUTHORIZED",
|
||||
});
|
||||
|
||||
await assertUserInWorkspace(ctx.db, userId, card.workspaceId);
|
||||
}
|
||||
|
||||
const cursor = input.cursor ? new Date(input.cursor) : undefined;
|
||||
const result = await cardActivityRepo.getPaginatedActivities(
|
||||
ctx.db,
|
||||
card.id,
|
||||
{
|
||||
limit: input.limit,
|
||||
cursor,
|
||||
},
|
||||
);
|
||||
|
||||
const mergedActivities = mergeActivities(result.activities);
|
||||
|
||||
return {
|
||||
activities: mergedActivities,
|
||||
hasMore: result.hasMore,
|
||||
nextCursor: result.nextCursor?.toISOString() ?? null,
|
||||
};
|
||||
}),
|
||||
update: protectedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
@@ -760,7 +684,7 @@ export const cardRouter = createTRPCRouter({
|
||||
.input(
|
||||
z.object({
|
||||
cardPublicId: z.string().min(12),
|
||||
title: z.string().min(1).max(2000).optional(),
|
||||
title: z.string().min(1).optional(),
|
||||
description: z.string().optional(),
|
||||
index: z.number().optional(),
|
||||
listPublicId: z.string().min(12).optional(),
|
||||
|
||||
@@ -269,7 +269,7 @@ export const checklistRouter = createTRPCRouter({
|
||||
.meta({
|
||||
openapi: {
|
||||
summary: "Update a checklist item",
|
||||
method: "PATCH",
|
||||
method: "PUT",
|
||||
path: "/checklists/items/{checklistItemPublicId}",
|
||||
description: "Updates a checklist item (title/completed)",
|
||||
tags: ["Cards"],
|
||||
@@ -281,7 +281,6 @@ export const checklistRouter = createTRPCRouter({
|
||||
checklistItemPublicId: z.string().length(12),
|
||||
title: z.string().min(1).max(500).optional(),
|
||||
completed: z.boolean().optional(),
|
||||
index: z.number().int().min(0).optional(),
|
||||
}),
|
||||
)
|
||||
.output(checklistItemSchema)
|
||||
@@ -313,30 +312,17 @@ export const checklistRouter = createTRPCRouter({
|
||||
|
||||
const previousTitle = item.title;
|
||||
|
||||
let updatedItem;
|
||||
|
||||
if (input.title !== undefined || input.completed !== undefined) {
|
||||
updatedItem = await checklistRepo.updateItemById(ctx.db, {
|
||||
id: item.id,
|
||||
title: input.title,
|
||||
completed: input.completed,
|
||||
});
|
||||
}
|
||||
|
||||
if (input.index !== undefined) {
|
||||
updatedItem = await checklistRepo.reorderItem(ctx.db, {
|
||||
itemId: item.id,
|
||||
newIndex: input.index,
|
||||
});
|
||||
}
|
||||
|
||||
if (!updatedItem) {
|
||||
throw new TRPCError({
|
||||
message: `Failed to update checklist item`,
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
});
|
||||
}
|
||||
const updated = await checklistRepo.updateItemById(ctx.db, {
|
||||
id: item.id,
|
||||
title: input.title,
|
||||
completed: input.completed,
|
||||
});
|
||||
|
||||
if (!updated)
|
||||
throw new TRPCError({
|
||||
message: `Failed to update checklist item`,
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
});
|
||||
|
||||
// Log completion toggle
|
||||
if (input.completed !== undefined) {
|
||||
@@ -345,7 +331,7 @@ export const checklistRouter = createTRPCRouter({
|
||||
? "card.updated.checklist.item.completed"
|
||||
: "card.updated.checklist.item.uncompleted",
|
||||
cardId: item.checklist.cardId,
|
||||
toTitle: updatedItem.title,
|
||||
toTitle: updated.title,
|
||||
createdBy: userId,
|
||||
});
|
||||
}
|
||||
@@ -356,13 +342,12 @@ export const checklistRouter = createTRPCRouter({
|
||||
type: "card.updated.checklist.item.updated",
|
||||
cardId: item.checklist.cardId,
|
||||
fromTitle: previousTitle,
|
||||
toTitle: updatedItem.title,
|
||||
toTitle: updated.title,
|
||||
createdBy: userId,
|
||||
});
|
||||
}
|
||||
|
||||
return updatedItem;
|
||||
|
||||
return updated;
|
||||
}),
|
||||
deleteItem: protectedProcedure
|
||||
.meta({
|
||||
|
||||
@@ -1,203 +0,0 @@
|
||||
import { HeadBucketCommand } from "@aws-sdk/client-s3";
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { sql } from "drizzle-orm";
|
||||
import { env } from "next-runtime-env";
|
||||
import { z } from "zod";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import * as boardRepo from "@kan/db/repository/board.repo";
|
||||
import * as cardRepo from "@kan/db/repository/card.repo";
|
||||
import * as cardActivityRepo from "@kan/db/repository/cardActivity.repo";
|
||||
import * as cardAttachmentRepo from "@kan/db/repository/cardAttachment.repo";
|
||||
import * as cardCommentRepo from "@kan/db/repository/cardComment.repo";
|
||||
import * as checklistRepo from "@kan/db/repository/checklist.repo";
|
||||
import * as importRepo from "@kan/db/repository/import.repo";
|
||||
import * as inviteLinkRepo from "@kan/db/repository/inviteLink.repo";
|
||||
import * as labelRepo from "@kan/db/repository/label.repo";
|
||||
import * as listRepo from "@kan/db/repository/list.repo";
|
||||
import * as memberRepo from "@kan/db/repository/member.repo";
|
||||
import * as userRepo from "@kan/db/repository/user.repo";
|
||||
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
|
||||
|
||||
import {
|
||||
adminProtectedProcedure,
|
||||
createTRPCRouter,
|
||||
publicProcedure,
|
||||
} from "../trpc";
|
||||
import { createS3Client } from "../utils/s3";
|
||||
|
||||
const checkDatabaseConnection = async (db: dbClient) => {
|
||||
try {
|
||||
await db.execute(sql`SELECT 1`);
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
const checkS3Connection = async () => {
|
||||
try {
|
||||
// Check if S3 is configured
|
||||
if (
|
||||
!process.env.S3_ENDPOINT ||
|
||||
!process.env.S3_ACCESS_KEY_ID ||
|
||||
!process.env.S3_SECRET_ACCESS_KEY
|
||||
) {
|
||||
// S3 is optional, so return true if not configured
|
||||
return true;
|
||||
}
|
||||
|
||||
const client = createS3Client();
|
||||
const avatarBucketName = env("NEXT_PUBLIC_AVATAR_BUCKET_NAME");
|
||||
const attachmentsBucketName = env("NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME");
|
||||
|
||||
await client.send(new HeadBucketCommand({ Bucket: avatarBucketName }));
|
||||
await client.send(new HeadBucketCommand({ Bucket: attachmentsBucketName }));
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
export const healthRouter = createTRPCRouter({
|
||||
health: publicProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
method: "GET",
|
||||
path: "/health",
|
||||
summary: "Health check",
|
||||
description:
|
||||
"Returns the health status of the application and its dependencies",
|
||||
tags: ["Health"],
|
||||
protect: false,
|
||||
},
|
||||
})
|
||||
.input(z.void())
|
||||
.output(
|
||||
z.object({
|
||||
status: z.enum(["ok", "error"]),
|
||||
database: z.enum(["ok", "error"]).optional(),
|
||||
storage: z.enum(["ok", "error", "not_configured"]).optional(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ ctx }) => {
|
||||
const dbHealthy = await checkDatabaseConnection(ctx.db);
|
||||
const s3Healthy = await checkS3Connection();
|
||||
const s3Configured = !!(
|
||||
process.env.S3_ENDPOINT &&
|
||||
process.env.S3_ACCESS_KEY_ID &&
|
||||
process.env.S3_SECRET_ACCESS_KEY
|
||||
);
|
||||
|
||||
const database = dbHealthy ? "ok" : "error";
|
||||
const storage = !s3Configured
|
||||
? "not_configured"
|
||||
: s3Healthy
|
||||
? "ok"
|
||||
: "error";
|
||||
|
||||
// Overall status is "ok" only if database is healthy and (storage is not configured or storage is healthy)
|
||||
const status = dbHealthy && (!s3Configured || s3Healthy) ? "ok" : "error";
|
||||
|
||||
return {
|
||||
status,
|
||||
database,
|
||||
storage,
|
||||
};
|
||||
}),
|
||||
stats: adminProtectedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
method: "GET",
|
||||
path: "/stats",
|
||||
summary: "Get statistics",
|
||||
description:
|
||||
"Returns statistics about the application (workspaces, users, cards, etc.)",
|
||||
tags: ["Health"],
|
||||
protect: true,
|
||||
},
|
||||
})
|
||||
.input(z.void())
|
||||
.output(
|
||||
z.object({
|
||||
users: z.number(),
|
||||
workspaces: z.number(),
|
||||
boards: z.number(),
|
||||
lists: z.number(),
|
||||
cards: z.number(),
|
||||
cardComments: z.number(),
|
||||
cardAttachments: z.number(),
|
||||
cardActivityLogs: z.number(),
|
||||
labels: z.number(),
|
||||
checklists: z.number(),
|
||||
checklistItems: z.number(),
|
||||
activeMembers: z.number(),
|
||||
activeInviteLinks: z.number(),
|
||||
imports: z.number(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ ctx }) => {
|
||||
try {
|
||||
// Execute all count queries in parallel
|
||||
const [
|
||||
usersCount,
|
||||
workspacesCount,
|
||||
boardsCount,
|
||||
listsCount,
|
||||
cardsCount,
|
||||
cardCommentsCount,
|
||||
checklistItemsCount,
|
||||
checklistsCount,
|
||||
labelsCount,
|
||||
cardAttachmentsCount,
|
||||
cardActivitiesCount,
|
||||
activeMembersCount,
|
||||
activeInviteLinksCount,
|
||||
importsCount,
|
||||
cardActivityLogsCount,
|
||||
] = await Promise.all([
|
||||
userRepo.getCount(ctx.db),
|
||||
workspaceRepo.getCount(ctx.db),
|
||||
boardRepo.getCount(ctx.db),
|
||||
listRepo.getCount(ctx.db),
|
||||
cardRepo.getCount(ctx.db),
|
||||
cardCommentRepo.getCount(ctx.db),
|
||||
checklistRepo.getCountItems(ctx.db),
|
||||
checklistRepo.getCount(ctx.db),
|
||||
labelRepo.getCount(ctx.db),
|
||||
cardAttachmentRepo.getCount(ctx.db),
|
||||
cardActivityRepo.getCount(ctx.db),
|
||||
memberRepo.getActiveCount(ctx.db),
|
||||
inviteLinkRepo.getActiveCount(ctx.db),
|
||||
importRepo.getCount(ctx.db),
|
||||
memberRepo.getActiveCount(ctx.db),
|
||||
cardActivityRepo.getCount(ctx.db),
|
||||
]);
|
||||
|
||||
return {
|
||||
users: usersCount,
|
||||
workspaces: workspacesCount,
|
||||
boards: boardsCount,
|
||||
lists: listsCount,
|
||||
cards: cardsCount,
|
||||
cardComments: cardCommentsCount,
|
||||
checklistItems: checklistItemsCount,
|
||||
checklists: checklistsCount,
|
||||
labels: labelsCount,
|
||||
cardAttachments: cardAttachmentsCount,
|
||||
cardActivities: cardActivitiesCount,
|
||||
activeMembers: activeMembersCount,
|
||||
activeInviteLinks: activeInviteLinksCount,
|
||||
imports: importsCount,
|
||||
cardActivityLogs: cardActivityLogsCount,
|
||||
};
|
||||
} catch (error) {
|
||||
throw new TRPCError({
|
||||
message: `Failed to retrieve statistics: ${error instanceof Error ? error.message : "Unknown error"}`,
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
});
|
||||
}
|
||||
}),
|
||||
});
|
||||
@@ -52,7 +52,7 @@ interface TrelloCheckItem {
|
||||
|
||||
interface TrelloCard {
|
||||
id: string;
|
||||
name: string | null;
|
||||
name: string;
|
||||
desc: string;
|
||||
idList: string;
|
||||
labels: TrelloLabel[];
|
||||
@@ -290,7 +290,7 @@ export const importRouter = createTRPCRouter({
|
||||
if (list.cards.length && newListId) {
|
||||
const cardsInsert = list.cards.map((card, index) => ({
|
||||
publicId: generateUID(),
|
||||
title: (card.name?.trim() ?? "Untitled Card").slice(0, 2000),
|
||||
title: card.name,
|
||||
description: card.description,
|
||||
createdBy: userId,
|
||||
listId: newListId,
|
||||
|
||||
@@ -2,7 +2,6 @@ import type { CreateNextContextOptions } from "@trpc/server/adapters/next";
|
||||
import type { NextApiRequest } from "next";
|
||||
import type { OpenApiMeta } from "trpc-to-openapi";
|
||||
import { initTRPC, TRPCError } from "@trpc/server";
|
||||
import { env } from "next-runtime-env";
|
||||
import superjson from "superjson";
|
||||
import { ZodError } from "zod";
|
||||
|
||||
@@ -46,7 +45,6 @@ interface CreateContextOptions {
|
||||
user: User | null | undefined;
|
||||
db: dbClient;
|
||||
auth: ReturnType<typeof createAuthWithHeaders>;
|
||||
headers: Headers;
|
||||
}
|
||||
|
||||
export const createInnerTRPCContext = (opts: CreateContextOptions) => {
|
||||
@@ -54,7 +52,6 @@ export const createInnerTRPCContext = (opts: CreateContextOptions) => {
|
||||
user: opts.user,
|
||||
db: opts.db,
|
||||
auth: opts.auth,
|
||||
headers: opts.headers,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -66,7 +63,7 @@ export const createTRPCContext = async ({ req }: CreateNextContextOptions) => {
|
||||
|
||||
const session = await auth.api.getSession();
|
||||
|
||||
return createInnerTRPCContext({ db, user: session?.user, auth, headers });
|
||||
return createInnerTRPCContext({ db, user: session?.user, auth });
|
||||
};
|
||||
|
||||
export const createNextApiContext = async (req: NextApiRequest) => {
|
||||
@@ -77,7 +74,7 @@ export const createNextApiContext = async (req: NextApiRequest) => {
|
||||
|
||||
const session = await auth.api.getSession();
|
||||
|
||||
return createInnerTRPCContext({ db, user: session?.user, auth, headers });
|
||||
return createInnerTRPCContext({ db, user: session?.user, auth });
|
||||
};
|
||||
|
||||
export const createRESTContext = async ({ req }: CreateNextContextOptions) => {
|
||||
@@ -94,7 +91,7 @@ export const createRESTContext = async ({ req }: CreateNextContextOptions) => {
|
||||
throw error;
|
||||
}
|
||||
|
||||
return createInnerTRPCContext({ db, user: session?.user, auth, headers });
|
||||
return createInnerTRPCContext({ db, user: session?.user, auth });
|
||||
};
|
||||
|
||||
const t = initTRPC
|
||||
@@ -132,28 +129,9 @@ const enforceUserIsAuthed = t.middleware(async ({ ctx, next }) => {
|
||||
});
|
||||
});
|
||||
|
||||
const enforceUserIsAdmin = t.middleware(async ({ ctx, next }) => {
|
||||
if (ctx.headers.get("x-admin-api-key") !== env("KAN_ADMIN_API_KEY")) {
|
||||
throw new TRPCError({ code: "UNAUTHORIZED" });
|
||||
}
|
||||
|
||||
return next({
|
||||
ctx,
|
||||
});
|
||||
});
|
||||
|
||||
export const protectedProcedure = t.procedure.use(enforceUserIsAuthed).meta({
|
||||
openapi: {
|
||||
method: "GET",
|
||||
path: "/protected",
|
||||
},
|
||||
});
|
||||
|
||||
export const adminProtectedProcedure = t.procedure
|
||||
.use(enforceUserIsAdmin)
|
||||
.meta({
|
||||
openapi: {
|
||||
method: "GET",
|
||||
path: "/admin/protected",
|
||||
},
|
||||
});
|
||||
|
||||
@@ -2,7 +2,6 @@ import type { RouterInputs, RouterOutputs } from "../index";
|
||||
|
||||
export type GetBoardByIdOutput = RouterOutputs["board"]["byId"];
|
||||
export type GetCardByIdOutput = RouterOutputs["card"]["byId"];
|
||||
export type GetCardActivitiesOutput = RouterOutputs["card"]["getActivities"];
|
||||
export type UpdateBoardInput = RouterInputs["board"]["update"];
|
||||
export type NewLabelInput = RouterInputs["label"]["create"];
|
||||
export type NewListInput = RouterInputs["list"]["create"];
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
import type { PaginatedActivitiesResult } from "@kan/db/repository/cardActivity.repo";
|
||||
import type { ActivityType } from "@kan/db/schema";
|
||||
|
||||
type ActivityBase = PaginatedActivitiesResult["activities"][number];
|
||||
|
||||
interface Activity extends ActivityBase {
|
||||
mergeCount?: number; // number of activities merged into this one
|
||||
mergedLabels?: string[]; // list of label names when merging label activities
|
||||
}
|
||||
|
||||
// types that can be merged with simple count
|
||||
const MERGEABLE_COUNT_TYPES: readonly ActivityType[] = [
|
||||
"card.updated.description",
|
||||
];
|
||||
|
||||
// types that merge with a list of items
|
||||
const MERGEABLE_LIST_TYPES: readonly ActivityType[] = [
|
||||
"card.updated.label.added",
|
||||
"card.updated.label.removed",
|
||||
];
|
||||
|
||||
const MERGE_TIME_WINDOW_MS = 5 * 60 * 1000; // 5 minutes window for merging activities
|
||||
|
||||
export function mergeActivities(activities: Activity[]): Activity[] {
|
||||
if (activities.length === 0) return [];
|
||||
|
||||
const merged: Activity[] = [];
|
||||
let i = 0;
|
||||
|
||||
while (i < activities.length) {
|
||||
const current = activities[i];
|
||||
if (!current) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
const currentType = current.type;
|
||||
|
||||
const isCountMergeable = MERGEABLE_COUNT_TYPES.includes(currentType);
|
||||
const isListMergeable = MERGEABLE_LIST_TYPES.includes(currentType);
|
||||
const canMerge = (isCountMergeable || isListMergeable) && current.user?.id;
|
||||
|
||||
if (!canMerge) {
|
||||
merged.push(current);
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
const group: Activity[] = [current];
|
||||
let j = i + 1;
|
||||
|
||||
while (j < activities.length) {
|
||||
const next = activities[j];
|
||||
if (!next) break;
|
||||
|
||||
const timeDiff =
|
||||
new Date(next.createdAt).getTime() -
|
||||
new Date(current.createdAt).getTime();
|
||||
|
||||
if (
|
||||
next.type === current.type &&
|
||||
next.user?.id === current.user?.id &&
|
||||
timeDiff >= 0 && // next is newer or same time
|
||||
timeDiff <= MERGE_TIME_WINDOW_MS
|
||||
) {
|
||||
group.push(next);
|
||||
j++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (group.length > 1) {
|
||||
const oldest = group[0];
|
||||
const latest = group[group.length - 1];
|
||||
|
||||
if (oldest && latest) {
|
||||
if (isListMergeable) {
|
||||
const labelNames = group
|
||||
.map((a) => a.label?.name)
|
||||
.filter((name): name is string => !!name);
|
||||
|
||||
merged.push({
|
||||
...oldest,
|
||||
createdAt: oldest.createdAt,
|
||||
mergeCount: group.length,
|
||||
mergedLabels: labelNames,
|
||||
});
|
||||
} else {
|
||||
merged.push({
|
||||
...oldest,
|
||||
createdAt: oldest.createdAt,
|
||||
toDescription: latest.toDescription,
|
||||
fromDescription: oldest.fromDescription,
|
||||
mergeCount: group.length,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
merged.push(current);
|
||||
}
|
||||
} else {
|
||||
merged.push(current);
|
||||
}
|
||||
|
||||
i = j;
|
||||
}
|
||||
|
||||
return merged;
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
import {
|
||||
DeleteObjectCommand,
|
||||
GetObjectCommand,
|
||||
PutObjectCommand,
|
||||
S3Client,
|
||||
@@ -57,13 +56,3 @@ export async function generateDownloadUrl(
|
||||
{ expiresIn },
|
||||
);
|
||||
}
|
||||
|
||||
export async function deleteObject(bucket: string, key: string) {
|
||||
const client = createS3Client();
|
||||
await client.send(
|
||||
new DeleteObjectCommand({
|
||||
Bucket: bucket,
|
||||
Key: key,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
},
|
||||
"prettier": "@kan/prettier-config",
|
||||
"dependencies": {
|
||||
"@better-auth/stripe": "^1.4.6",
|
||||
"better-auth": "^1.4.6"
|
||||
"@better-auth/stripe": "^1.3.7",
|
||||
"better-auth": "^1.3.7"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,8 @@ export const configuredProviders = socialProviderList.reduce<
|
||||
Object.keys(acc).includes("google") &&
|
||||
acc[provider]
|
||||
) {
|
||||
const allowed = process.env.BETTER_AUTH_ALLOWED_DOMAINS?.split(",")
|
||||
const allowed = process.env.BETTER_AUTH_ALLOWED_DOMAINS
|
||||
?.split(",")
|
||||
.map((d) => d.trim().toLowerCase())
|
||||
.filter(Boolean);
|
||||
if (allowed && allowed.length > 0) {
|
||||
@@ -298,8 +299,9 @@ export const initAuth = (db: dbClient) => {
|
||||
}),
|
||||
]
|
||||
: []),
|
||||
// @todo: hasing is disabled due to a bug in the api key plugin
|
||||
apiKey({
|
||||
enableSessionForAPIKeys: true,
|
||||
disableKeyHashing: true,
|
||||
rateLimit: {
|
||||
enabled: true,
|
||||
timeWindow: 1000 * 60, // 1 minute
|
||||
@@ -339,37 +341,6 @@ export const initAuth = (db: dbClient) => {
|
||||
discoveryUrl: process.env.OIDC_DISCOVERY_URL,
|
||||
scopes: ["openid", "email", "profile"],
|
||||
pkce: true,
|
||||
mapProfileToUser: (profile: {
|
||||
name?: string;
|
||||
display_name?: string;
|
||||
preferred_username?: string;
|
||||
given_name?: string;
|
||||
family_name?: string;
|
||||
email?: string;
|
||||
email_verified?: boolean;
|
||||
sub?: string;
|
||||
picture?: string;
|
||||
avatar?: string;
|
||||
}) => {
|
||||
console.log("OIDC profile:", profile);
|
||||
|
||||
const name =
|
||||
profile.name ??
|
||||
profile.display_name ??
|
||||
profile.preferred_username ??
|
||||
(profile.given_name && profile.family_name
|
||||
? `${profile.given_name} ${profile.family_name}`.trim()
|
||||
: (profile.given_name ?? profile.family_name)) ??
|
||||
profile.sub ??
|
||||
"";
|
||||
|
||||
return {
|
||||
email: profile.email,
|
||||
name: name,
|
||||
emailVerified: profile.email_verified ?? false,
|
||||
image: profile.picture ?? profile.avatar ?? null,
|
||||
};
|
||||
},
|
||||
},
|
||||
],
|
||||
}),
|
||||
@@ -394,7 +365,8 @@ export const initAuth = (db: dbClient) => {
|
||||
// Fall through to any additional checks below
|
||||
}
|
||||
// Enforce allowed domains (OIDC/social) if configured
|
||||
const allowed = process.env.BETTER_AUTH_ALLOWED_DOMAINS?.split(",")
|
||||
const allowed = process.env.BETTER_AUTH_ALLOWED_DOMAINS
|
||||
?.split(",")
|
||||
.map((d) => d.trim().toLowerCase())
|
||||
.filter(Boolean);
|
||||
if (allowed && allowed.length > 0) {
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
ALTER TABLE "card_activity" ALTER COLUMN "fromTitle" SET DATA TYPE text;--> statement-breakpoint
|
||||
ALTER TABLE "card_activity" ALTER COLUMN "toTitle" SET DATA TYPE text;--> statement-breakpoint
|
||||
ALTER TABLE "card" ALTER COLUMN "title" SET DATA TYPE text;
|
||||
@@ -148,13 +148,6 @@
|
||||
"when": 1764621815672,
|
||||
"tag": "20251201204335_AddCardDueDates",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"version": "7",
|
||||
"when": 1767045713686,
|
||||
"tag": "20251229220153_UpdateCardTitleFromVarcharToText",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
import {
|
||||
and,
|
||||
asc,
|
||||
count,
|
||||
desc,
|
||||
eq,
|
||||
gte,
|
||||
@@ -30,15 +29,6 @@ import {
|
||||
} from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(boards)
|
||||
.where(isNull(boards.deletedAt));
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const getAllByWorkspaceId = (
|
||||
db: dbClient,
|
||||
workspaceId: number,
|
||||
|
||||
@@ -1,14 +1,4 @@
|
||||
import {
|
||||
and,
|
||||
asc,
|
||||
count,
|
||||
desc,
|
||||
eq,
|
||||
gt,
|
||||
inArray,
|
||||
isNull,
|
||||
sql,
|
||||
} from "drizzle-orm";
|
||||
import { and, asc, desc, eq, gt, inArray, isNull, sql } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import {
|
||||
@@ -25,15 +15,6 @@ import {
|
||||
} from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(cards)
|
||||
.where(isNull(cards.deletedAt));
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
cardInput: {
|
||||
|
||||
@@ -1,16 +1,8 @@
|
||||
import { and, asc, count, eq, gt, inArray, isNull, or } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import type { ActivityType } from "@kan/db/schema";
|
||||
import { cardActivities, comments } from "@kan/db/schema";
|
||||
import { cardActivities } from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db.select({ count: count() }).from(cardActivities);
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
activityInput: {
|
||||
@@ -97,114 +89,3 @@ export const bulkCreate = async (
|
||||
|
||||
return results;
|
||||
};
|
||||
|
||||
export const getPaginatedActivities = async (
|
||||
db: dbClient,
|
||||
cardId: number,
|
||||
options?: {
|
||||
limit?: number;
|
||||
cursor?: Date; // createdAt cursor for pagination
|
||||
},
|
||||
) => {
|
||||
const limit = options?.limit ?? 20;
|
||||
const cursor = options?.cursor;
|
||||
|
||||
const validComments = await db
|
||||
.select({ id: comments.id })
|
||||
.from(comments)
|
||||
.where(and(eq(comments.cardId, cardId), isNull(comments.deletedAt)));
|
||||
|
||||
const validCommentIds = validComments.map((comment) => comment.id);
|
||||
|
||||
const activities = await db.query.cardActivities.findMany({
|
||||
columns: {
|
||||
publicId: true,
|
||||
type: true,
|
||||
createdAt: true,
|
||||
fromIndex: true,
|
||||
toIndex: true,
|
||||
fromTitle: true,
|
||||
toTitle: true,
|
||||
fromDescription: true,
|
||||
toDescription: true,
|
||||
fromDueDate: true,
|
||||
toDueDate: true,
|
||||
},
|
||||
where: and(
|
||||
eq(cardActivities.cardId, cardId),
|
||||
cursor ? gt(cardActivities.createdAt, cursor) : undefined,
|
||||
or(
|
||||
isNull(cardActivities.commentId),
|
||||
inArray(cardActivities.commentId, validCommentIds),
|
||||
),
|
||||
),
|
||||
with: {
|
||||
fromList: {
|
||||
columns: {
|
||||
publicId: true,
|
||||
name: true,
|
||||
index: true,
|
||||
},
|
||||
},
|
||||
toList: {
|
||||
columns: {
|
||||
publicId: true,
|
||||
name: true,
|
||||
index: true,
|
||||
},
|
||||
},
|
||||
label: {
|
||||
columns: {
|
||||
publicId: true,
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
member: {
|
||||
columns: {
|
||||
publicId: true,
|
||||
},
|
||||
with: {
|
||||
user: {
|
||||
columns: {
|
||||
id: true,
|
||||
name: true,
|
||||
email: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
user: {
|
||||
columns: {
|
||||
id: true,
|
||||
name: true,
|
||||
email: true,
|
||||
},
|
||||
},
|
||||
comment: {
|
||||
columns: {
|
||||
publicId: true,
|
||||
comment: true,
|
||||
createdBy: true,
|
||||
updatedAt: true,
|
||||
deletedAt: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: asc(cardActivities.createdAt), // required for merging and pagination
|
||||
limit: limit + 1, // fetch one extra to check if there are more
|
||||
});
|
||||
|
||||
const hasMore = activities.length > limit;
|
||||
const items = activities.slice(0, limit);
|
||||
const nextCursor = hasMore ? items[items.length - 1]?.createdAt : undefined;
|
||||
|
||||
return {
|
||||
activities: items,
|
||||
hasMore,
|
||||
nextCursor,
|
||||
};
|
||||
};
|
||||
|
||||
export type PaginatedActivitiesResult = Awaited<
|
||||
ReturnType<typeof getPaginatedActivities>
|
||||
>;
|
||||
|
||||
@@ -1,18 +1,9 @@
|
||||
import { and, count, eq, isNull } from "drizzle-orm";
|
||||
import { and, eq, isNull } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { cardAttachments } from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(cardAttachments)
|
||||
.where(isNull(cardAttachments.deletedAt));
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
attachmentInput: {
|
||||
|
||||
@@ -1,18 +1,9 @@
|
||||
import { count, eq, isNull } from "drizzle-orm";
|
||||
import { eq } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { comments } from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(comments)
|
||||
.where(isNull(comments.deletedAt));
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
commentInput: {
|
||||
|
||||
@@ -1,25 +1,9 @@
|
||||
import { and, count, desc, eq, isNull, sql } from "drizzle-orm";
|
||||
import { and, desc, eq, isNull } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { checklistItems, checklists } from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(checklists)
|
||||
.where(isNull(checklists.deletedAt));
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const getCountItems = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(checklistItems)
|
||||
.where(isNull(checklistItems.deletedAt));
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
checklistInput: {
|
||||
@@ -357,88 +341,3 @@ const groupByKey = <T extends Record<string, unknown>>(
|
||||
}
|
||||
return grouped;
|
||||
};
|
||||
|
||||
export const reorderItem = async (
|
||||
db: dbClient,
|
||||
args: {
|
||||
itemId: number;
|
||||
newIndex: number;
|
||||
},
|
||||
) => {
|
||||
return db.transaction(async (tx) => {
|
||||
const item = await tx.query.checklistItems.findFirst({
|
||||
columns: {
|
||||
id: true,
|
||||
index: true,
|
||||
checklistId: true,
|
||||
},
|
||||
where: and(
|
||||
eq(checklistItems.id, args.itemId),
|
||||
isNull(checklistItems.deletedAt),
|
||||
),
|
||||
});
|
||||
|
||||
if (!item) {
|
||||
throw new Error(`Checklist item not found for ID ${args.itemId}`);
|
||||
}
|
||||
|
||||
const currentIndex = item.index;
|
||||
const newIndex = args.newIndex;
|
||||
|
||||
if (currentIndex === newIndex) {
|
||||
const unchanged = await tx.query.checklistItems.findFirst({
|
||||
columns: {
|
||||
publicId: true,
|
||||
title: true,
|
||||
completed: true,
|
||||
},
|
||||
where: and(
|
||||
eq(checklistItems.id, args.itemId),
|
||||
isNull(checklistItems.deletedAt),
|
||||
),
|
||||
});
|
||||
|
||||
if (!unchanged) {
|
||||
throw new Error(`Checklist item not found for ID ${args.itemId}`);
|
||||
}
|
||||
|
||||
return unchanged;
|
||||
}
|
||||
|
||||
if (currentIndex < newIndex) {
|
||||
await tx.execute(sql`
|
||||
UPDATE card_checklist_item
|
||||
SET index = index - 1
|
||||
WHERE "checklistId" = ${item.checklistId}
|
||||
AND index > ${currentIndex}
|
||||
AND index <= ${newIndex}
|
||||
AND "deletedAt" IS NULL
|
||||
`);
|
||||
} else {
|
||||
await tx.execute(sql`
|
||||
UPDATE card_checklist_item
|
||||
SET index = index + 1
|
||||
WHERE "checklistId" = ${item.checklistId}
|
||||
AND index >= ${newIndex}
|
||||
AND index < ${currentIndex}
|
||||
AND "deletedAt" IS NULL
|
||||
`);
|
||||
}
|
||||
|
||||
const [updated] = await tx
|
||||
.update(checklistItems)
|
||||
.set({ index: newIndex })
|
||||
.where(eq(checklistItems.id, args.itemId))
|
||||
.returning({
|
||||
publicId: checklistItems.publicId,
|
||||
title: checklistItems.title,
|
||||
completed: checklistItems.completed,
|
||||
});
|
||||
|
||||
if (!updated) {
|
||||
throw new Error(`Failed to update checklist item with ID ${args.itemId}`);
|
||||
}
|
||||
|
||||
return updated;
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
import { count, eq } from "drizzle-orm";
|
||||
import { eq } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { imports } from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db.select({ count: count() }).from(imports);
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
importInput: { source: string; createdBy: string },
|
||||
|
||||
@@ -1,18 +1,9 @@
|
||||
import { and, count, eq } from "drizzle-orm";
|
||||
import { and, eq, gt } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { workspaceInviteLinks } from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getActiveCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(workspaceInviteLinks)
|
||||
.where(eq(workspaceInviteLinks.status, "active"));
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const createInviteLink = async (
|
||||
db: dbClient,
|
||||
args: {
|
||||
|
||||
@@ -1,18 +1,9 @@
|
||||
import { and, count, eq, inArray, isNull } from "drizzle-orm";
|
||||
import { and, eq, inArray, isNull } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { cardsToLabels, labels } from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(labels)
|
||||
.where(isNull(labels.deletedAt));
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
labelInput: {
|
||||
|
||||
@@ -1,18 +1,9 @@
|
||||
import { and, count, desc, eq, gt, isNull, sql } from "drizzle-orm";
|
||||
import { and, desc, eq, gt, isNull, sql } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { lists } from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(lists)
|
||||
.where(isNull(lists.deletedAt));
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
listInput: {
|
||||
|
||||
@@ -1,24 +1,10 @@
|
||||
import { and, count, eq, isNull } from "drizzle-orm";
|
||||
import { and, eq, isNull } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import type { MemberRole, MemberStatus } from "@kan/db/schema";
|
||||
import { workspaceMembers } from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getActiveCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(workspaceMembers)
|
||||
.where(
|
||||
and(
|
||||
isNull(workspaceMembers.deletedAt),
|
||||
eq(workspaceMembers.status, "active"),
|
||||
),
|
||||
);
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
memberInput: {
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
import { count, desc, eq } from "drizzle-orm";
|
||||
import { desc, eq } from "drizzle-orm";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { apikey, users } from "@kan/db/schema";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db.select({ count: count() }).from(users);
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const getById = async (db: dbClient, userId: string) => {
|
||||
return await db.query.users.findFirst({
|
||||
columns: {
|
||||
|
||||
@@ -1,14 +1,4 @@
|
||||
import {
|
||||
and,
|
||||
count,
|
||||
desc,
|
||||
eq,
|
||||
ilike,
|
||||
inArray,
|
||||
isNull,
|
||||
or,
|
||||
sql,
|
||||
} from "drizzle-orm";
|
||||
import { and, desc, eq, ilike, inArray, isNull, or, sql } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import {
|
||||
@@ -20,15 +10,6 @@ import {
|
||||
} from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const getCount = async (db: dbClient) => {
|
||||
const result = await db
|
||||
.select({ count: count() })
|
||||
.from(workspaces)
|
||||
.where(isNull(workspaces.deletedAt));
|
||||
|
||||
return result[0]?.count ?? 0;
|
||||
};
|
||||
|
||||
export const create = async (
|
||||
db: dbClient,
|
||||
workspaceInput: {
|
||||
|
||||
@@ -57,7 +57,7 @@ export const activityTypeEnum = pgEnum("card_activity_type", activityTypes);
|
||||
export const cards = pgTable("card", {
|
||||
id: bigserial("id", { mode: "number" }).primaryKey(),
|
||||
publicId: varchar("publicId", { length: 12 }).notNull().unique(),
|
||||
title: text("title").notNull(),
|
||||
title: varchar("title", { length: 255 }).notNull(),
|
||||
description: text("description"),
|
||||
index: integer("index").notNull(),
|
||||
createdBy: uuid("createdBy").references(() => users.id, {
|
||||
@@ -127,8 +127,8 @@ export const cardActivities = pgTable("card_activity", {
|
||||
workspaceMemberId: bigint("workspaceMemberId", {
|
||||
mode: "number",
|
||||
}).references(() => workspaceMembers.id, { onDelete: "set null" }),
|
||||
fromTitle: text("fromTitle"),
|
||||
toTitle: text("toTitle"),
|
||||
fromTitle: varchar("fromTitle", { length: 255 }),
|
||||
toTitle: varchar("toTitle", { length: 255 }),
|
||||
fromDescription: text("fromDescription"),
|
||||
toDescription: text("toDescription"),
|
||||
createdBy: uuid("createdBy").references(() => users.id, {
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@novu/api": "^3.11.0",
|
||||
"@react-email/components": "^1.0.1",
|
||||
"@react-email/components": "^0.0.25",
|
||||
"nodemailer": "^7.0.3",
|
||||
"react-email": "^5.0.6"
|
||||
"react-email": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kan/eslint-config": "workspace:*",
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
},
|
||||
"prettier": "@kan/prettier-config",
|
||||
"dependencies": {
|
||||
"date-fns": "^4.1.0",
|
||||
"jose": "^6.1.2",
|
||||
"nanoid": "^5.0.9",
|
||||
"next-runtime-env": "^1.7.2"
|
||||
|
||||