Compare commits

..

2 Commits

Author SHA1 Message Date
Henry
d04fd62b8d feat: add fetch depth 2026-01-13 11:02:38 +00:00
Henry
cd3f6fc918 feat: display app version 2026-01-12 21:34:50 +00:00
79 changed files with 2169 additions and 3642 deletions

View File

@@ -15,4 +15,4 @@ pnpm-debug.log
README.md README.md
.next .next
# .git .git

View File

@@ -37,17 +37,10 @@ NEXT_PUBLIC_STORAGE_DOMAIN=
NEXT_PUBLIC_ALLOW_CREDENTIALS= NEXT_PUBLIC_ALLOW_CREDENTIALS=
NEXT_PUBLIC_DISABLE_SIGN_UP= NEXT_PUBLIC_DISABLE_SIGN_UP=
# API configuration (optional)
NEXT_API_BODY_SIZE_LIMIT= # e.g. 50mb (defaults to 1mb)
# Integration providers (optional) # Integration providers (optional)
TRELLO_APP_API_KEY= TRELLO_APP_API_KEY=
TRELLO_APP_SECRET= TRELLO_APP_SECRET=
# Redis (optional - for rate limiting)
# If not provided, rate limiting will use in-memory storage
REDIS_URL= # e.g. redis://default:your_password@your_host:6379
# OAuth providers (optional) # OAuth providers (optional)
BETTER_AUTH_TRUSTED_ORIGINS= BETTER_AUTH_TRUSTED_ORIGINS=
# Optional: Restrict OIDC/Social sign-ins to specific email domains (comma-separated) # Optional: Restrict OIDC/Social sign-ins to specific email domains (comma-separated)

View File

@@ -141,7 +141,6 @@ pnpm dev
| Variable | Description | Required | Example | | Variable | Description | Required | Example |
| ----------------------------------------- | --------------------------------------------------------- | ------------------------------------- | ----------------------------------------------------------- | | ----------------------------------------- | --------------------------------------------------------- | ------------------------------------- | ----------------------------------------------------------- |
| `POSTGRES_URL` | PostgreSQL connection URL | To use external database | `postgres://user:pass@localhost:5432/db` | | `POSTGRES_URL` | PostgreSQL connection URL | To use external database | `postgres://user:pass@localhost:5432/db` |
| `REDIS_URL` | Redis connection URL | For rate limiting (optional) | `redis://localhost:6379` or `redis://redis:6379` (Docker) |
| `EMAIL_FROM` | Sender email address | For Email | `"Kan <hello@mail.kan.bn>"` | | `EMAIL_FROM` | Sender email address | For Email | `"Kan <hello@mail.kan.bn>"` |
| `SMTP_HOST` | SMTP server hostname | For Email | `smtp.resend.com` | | `SMTP_HOST` | SMTP server hostname | For Email | `smtp.resend.com` |
| `SMTP_PORT` | SMTP server port | For Email | `465` | | `SMTP_PORT` | SMTP server port | For Email | `465` |
@@ -151,7 +150,6 @@ pnpm dev
| `SMTP_REJECT_UNAUTHORIZED` | Reject invalid certificates (defaults to true if not set) | For Email | `false` | | `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_DISABLE_EMAIL` | To disable all email features | For Email | `true` |
| `NEXT_PUBLIC_BASE_URL` | Base URL of your installation | Yes | `http://localhost:3000` | | `NEXT_PUBLIC_BASE_URL` | Base URL of your installation | Yes | `http://localhost:3000` |
| `NEXT_API_BODY_SIZE_LIMIT` | Maximum API request body size (defaults to 1mb) | No | `50mb` |
| `BETTER_AUTH_ALLOWED_DOMAINS` | Comma-separated list of allowed domains for OIDC logins | For OIDC/Social login | `example.com,subsidiary.com` | | `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_SECRET` | Auth encryption secret | Yes | Random 32+ char string |
| `BETTER_AUTH_TRUSTED_ORIGINS` | Allowed callback origins | No | `http://localhost:3000,http://localhost:3001` | | `BETTER_AUTH_TRUSTED_ORIGINS` | Allowed callback origins | No | `http://localhost:3000,http://localhost:3001` |

View File

@@ -19,22 +19,19 @@ RUN pnpm config set store-dir ~/.pnpm-store
# 2. Prune projects # 2. Prune projects
FROM base AS pruner FROM base AS pruner
# https://stackoverflow.com/questions/49681984/how-to-get-version-value-of-package-json-inside-of-dockerfile
# RUN export VERSION=$(npm run version)
ARG PROJECT ARG PROJECT
RUN apk add --no-cache git # Set working directory
WORKDIR /app WORKDIR /app
# It might be the path to <ROOT> turborepo
COPY . . COPY . .
# Generate version from git (fallback if APP_VERSION not provided) # Generate a partial monorepo with a pruned lockfile for a target workspace.
RUN git fetch --tags --unshallow 2>/dev/null || git fetch --tags 2>/dev/null || true && \ # Assuming "@acme/nextjs" is the name entered in the project's package.json: { name: "@acme/nextjs" }
AUTO_VERSION=$(git describe --tags --always --long 2>/dev/null | \
sed -E 's/^v?([0-9]+\.[0-9]+\.[0-9]+)-[0-9]+-g([a-f0-9]{7}).*/\1+\2/' | \
sed 's/^v//' || \
git rev-parse --short HEAD 2>/dev/null | head -c 7 || \
echo "unknown") && \
echo "$AUTO_VERSION" > /app/AUTO_VERSION
RUN turbo prune --scope=${PROJECT} --scope=@kan/db --docker RUN turbo prune --scope=${PROJECT} --scope=@kan/db --docker
# 3. Build the project # 3. Build the project
@@ -42,22 +39,25 @@ FROM base AS builder
ARG PROJECT ARG PROJECT
ARG APP_VERSION ARG APP_VERSION
# Environment to skip .env validation on build
ENV CI=true
ENV NEXT_PUBLIC_APP_VERSION=${APP_VERSION}
WORKDIR /app WORKDIR /app
# Copy lockfile and package.json's of isolated subworkspace
COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml
COPY --from=pruner /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml COPY --from=pruner /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml
COPY --from=pruner /app/out/json/ . COPY --from=pruner /app/out/json/ .
COPY --from=pruner /app/AUTO_VERSION /tmp/AUTO_VERSION
ENV CI=true
# First install the dependencies (as they change less often)
RUN --mount=type=cache,id=pnpm,target=~/.pnpm-store pnpm install --frozen-lockfile RUN --mount=type=cache,id=pnpm,target=~/.pnpm-store pnpm install --frozen-lockfile
# Copy source code of isolated subworkspace
COPY --from=pruner /app/out/full/ . COPY --from=pruner /app/out/full/ .
# Use provided APP_VERSION or auto-generated from pruner stage
RUN VERSION="${APP_VERSION:-$(cat /tmp/AUTO_VERSION 2>/dev/null | tr -d '\n\r' || echo 'unknown')}" && \ RUN pnpm build --filter=${PROJECT}
NEXT_PUBLIC_APP_VERSION="$VERSION" pnpm build --filter=${PROJECT}
# # Copy static files to standalone directory # # Copy static files to standalone directory
# RUN mkdir -p apps/web/.next/standalone/.next && \ # RUN mkdir -p apps/web/.next/standalone/.next && \

View File

@@ -2,7 +2,7 @@
"version": 0, "version": 0,
"locale": { "locale": {
"source": "en", "source": "en",
"targets": ["fr", "de", "es", "it", "nl", "ru", "pl", "pt-BR"] "targets": ["fr", "de", "es", "it", "nl", "ru", "pl", "ptbr"]
}, },
"buckets": { "buckets": {
"po": { "po": {

View File

@@ -39,7 +39,6 @@ checksums:
Adjust%20the%20square%20crop%20to%20fit%20your%20avatar./singular: a4df26bbce6f14c6962fac1324db00a8 Adjust%20the%20square%20crop%20to%20fit%20your%20avatar./singular: a4df26bbce6f14c6962fac1324db00a8
Admin%20roles/singular: 32a5d78073b9bb9a246773afba8831df Admin%20roles/singular: 32a5d78073b9bb9a246773afba8831df
All%20systems%20operational/singular: ee943a4046b09e6334cceeea9fda2bfc All%20systems%20operational/singular: ee943a4046b09e6334cceeea9fda2bfc
Allow%20workspace%20members%20to%20see%20each%20other's%20email%20addresses/singular: 0077436d9f37bfd64f3ae076a5a05040
Already%20have%20an%20account%3F%20%3C0%3E%3C1%3ESign%20in%3C%2F1%3E%3C%2F0%3E/singular: 2959fd276248208b65cb27ed46b20135 Already%20have%20an%20account%3F%20%3C0%3E%3C1%3ESign%20in%3C%2F1%3E%3C%2F0%3E/singular: 2959fd276248208b65cb27ed46b20135
An%20error%20occurred%20while%20disconnecting%20your%20Trello%20account./singular: 0aa3973b860c1faf8d9123aebf567e40 An%20error%20occurred%20while%20disconnecting%20your%20Trello%20account./singular: 0aa3973b860c1faf8d9123aebf567e40
An%20unexpected%20error%20occurred.%20Please%20try%20again%20later./singular: 1b5749b0cca6a62d75a577bee6804074 An%20unexpected%20error%20occurred.%20Please%20try%20again%20later./singular: 1b5749b0cca6a62d75a577bee6804074
@@ -194,7 +193,6 @@ checksums:
Editing/singular: 3449a7988cd69207b7c6929af1f4abf1 Editing/singular: 3449a7988cd69207b7c6929af1f4abf1
email/singular: f31eb214738e037d58e26149797739df email/singular: f31eb214738e037d58e26149797739df
Email/singular: e7f34943a0c2fb849db1839ff6ef5cb5 Email/singular: e7f34943a0c2fb849db1839ff6ef5cb5
Email%20visibility/singular: 81d41cf573a7109c376d30d905beb596
Enhancement/singular: 785fe23c0eef0a5b60b5b2a88151de31 Enhancement/singular: 785fe23c0eef0a5b60b5b2a88151de31
Enter%20a%20custom%20title/singular: f002074db0bd51d4f28d2736e140370a Enter%20a%20custom%20title/singular: f002074db0bd51d4f28d2736e140370a
Enter%20your%20current%20password/singular: bfceabde4c0b6f2cb439015b76549651 Enter%20your%20current%20password/singular: bfceabde4c0b6f2cb439015b76549651

View File

@@ -1,7 +1,7 @@
import type { LinguiConfig } from "@lingui/conf"; import type { LinguiConfig } from "@lingui/conf";
const config: LinguiConfig = { const config: LinguiConfig = {
locales: ["en", "fr", "de", "es", "it", "nl", "ru", "pl","pt-BR"], locales: ["en", "fr", "de", "es", "it", "nl", "ru", "pl","ptbr"],
sourceLocale: "en", sourceLocale: "en",
catalogs: [ catalogs: [
{ {

View File

@@ -50,11 +50,6 @@ const config = {
protocol: "https", protocol: "https",
hostname: "*.googleusercontent.com", hostname: "*.googleusercontent.com",
}, },
{
protocol: 'https',
hostname: 'cdn.discordapp.com',
pathname: '/avatars/**',
},
]; ];
// Extract root domain from S3_ENDPOINT and add wildcard pattern // Extract root domain from S3_ENDPOINT and add wildcard pattern
@@ -95,12 +90,6 @@ const config = {
swcPlugins: [["@lingui/swc-plugin", {}]], swcPlugins: [["@lingui/swc-plugin", {}]],
}, },
api: {
bodyParser: {
sizeLimit: env("NEXT_API_BODY_SIZE_LIMIT") || '1mb',
},
},
async rewrites() { async rewrites() {
return [ return [
{ {

View File

@@ -10,8 +10,6 @@
"format": "prettier --check . --ignore-path ../../.gitignore", "format": "prettier --check . --ignore-path ../../.gitignore",
"lint": "eslint", "lint": "eslint",
"start": "pnpm with-env next start", "start": "pnpm with-env next start",
"test": "vitest run",
"test:watch": "vitest",
"typecheck": "tsc --noEmit", "typecheck": "tsc --noEmit",
"with-env": "dotenv -e ../../.env --", "with-env": "dotenv -e ../../.env --",
"lingui:extract": "lingui extract", "lingui:extract": "lingui extract",
@@ -88,8 +86,7 @@
"jiti": "^1.21.6", "jiti": "^1.21.6",
"prettier": "catalog:", "prettier": "catalog:",
"tailwindcss": "catalog:", "tailwindcss": "catalog:",
"typescript": "catalog:", "typescript": "catalog:"
"vitest": "^3.0.0"
}, },
"prettier": "@kan/prettier-config" "prettier": "@kan/prettier-config"
} }

View File

@@ -155,7 +155,7 @@ export default function Dashboard({
className={`fixed top-12 z-40 h-[calc(100dvh-3rem)] w-[calc(100vw-1.5rem)] transform transition-transform duration-300 ease-in-out md:relative md:top-0 md:h-full md:w-auto md:translate-x-0 ${isSideNavOpen ? "translate-x-0" : "-translate-x-full md:translate-x-0"} `} className={`fixed top-12 z-40 h-[calc(100dvh-3rem)] w-[calc(100vw-1.5rem)] transform transition-transform duration-300 ease-in-out md:relative md:top-0 md:h-full md:w-auto md:translate-x-0 ${isSideNavOpen ? "translate-x-0" : "-translate-x-full md:translate-x-0"} `}
> >
<SideNavigation <SideNavigation
user={{ displayName: session?.user.name, email: session?.user.email, image: session?.user.image }} user={{ email: session?.user.email, image: session?.user.image }}
isLoading={sessionLoading} isLoading={sessionLoading}
onCloseSideNav={closeSideNav} onCloseSideNav={closeSideNav}
/> />

View File

@@ -39,7 +39,6 @@ interface SideNavigationProps {
} }
interface UserType { interface UserType {
displayName?: string | null | undefined;
email?: string | null | undefined; email?: string | null | undefined;
image?: string | null | undefined; image?: string | null | undefined;
} }
@@ -207,8 +206,7 @@ export default function SideNavigation({
<div className="space-y-2"> <div className="space-y-2">
<UserMenu <UserMenu
displayName={user.displayName ?? undefined} email={user.email ?? ""}
email={user.email ?? "Email not provided?"}
imageUrl={user.image ?? undefined} imageUrl={user.image ?? undefined}
isLoading={isLoading} isLoading={isLoading}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}

View File

@@ -35,7 +35,6 @@ export function Tooltip({
delay, delay,
interactive: false, interactive: false,
theme: "tooltip", theme: "tooltip",
touch: false,
}); });
return () => { return () => {

View File

@@ -17,7 +17,6 @@ import { getAvatarUrl } from "~/utils/helpers";
interface UserMenuProps { interface UserMenuProps {
imageUrl: string | undefined; imageUrl: string | undefined;
displayName: string | undefined;
email: string; email: string;
isLoading: boolean; isLoading: boolean;
isCollapsed?: boolean; isCollapsed?: boolean;
@@ -27,7 +26,6 @@ interface UserMenuProps {
export default function UserMenu({ export default function UserMenu({
imageUrl, imageUrl,
email, email,
displayName,
isLoading, isLoading,
isCollapsed = false, isCollapsed = false,
onCloseSideNav, onCloseSideNav,
@@ -77,7 +75,7 @@ export default function UserMenu({
) : ( ) : (
<Menu.Button <Menu.Button
className="flex w-full items-center rounded-md p-1.5 text-neutral-900 hover:bg-light-200 dark:text-dark-900 dark:hover:bg-dark-200 dark:hover:text-dark-1000" className="flex w-full items-center rounded-md p-1.5 text-neutral-900 hover:bg-light-200 dark:text-dark-900 dark:hover:bg-dark-200 dark:hover:text-dark-1000"
title={isCollapsed ? displayName ?? email : undefined} title={isCollapsed ? email : undefined}
> >
{avatarUrl ? ( {avatarUrl ? (
<Image <Image
@@ -104,7 +102,7 @@ export default function UserMenu({
isCollapsed && "md:hidden", isCollapsed && "md:hidden",
)} )}
> >
{displayName ?? email} {email}
</span> </span>
</Menu.Button> </Menu.Button>
)} )}

View File

@@ -78,7 +78,6 @@ export const env = createEnv({
S3_ENDPOINT: z.string().optional(), S3_ENDPOINT: z.string().optional(),
S3_FORCE_PATH_STYLE: z.string().optional(), S3_FORCE_PATH_STYLE: z.string().optional(),
EMAIL_FROM: z.string().optional(), EMAIL_FROM: z.string().optional(),
REDIS_URL: z.string().url().optional(),
}, },
/** /**

View File

@@ -1,101 +0,0 @@
import { useEffect, useRef, useState } from "react";
interface UseDragToScrollOptions {
/**
* Whether drag-to-scroll is enabled
*/
enabled?: boolean;
/**
* The direction to scroll
*/
direction?: "horizontal" | "vertical" | "both";
}
/**
* Hook to enable drag-to-scroll functionality on a scrollable element
* @param options Configuration options
* @returns Ref to attach to the scrollable element and mouse event handlers
*/
export function useDragToScroll({
enabled = true,
direction = "horizontal",
}: UseDragToScrollOptions = {}) {
const scrollRef = useRef<HTMLDivElement>(null);
const [isDragging, setIsDragging] = useState(false);
const startPosRef = useRef({ x: 0, y: 0 });
const scrollStartRef = useRef({ x: 0, y: 0 });
useEffect(() => {
if (!enabled || !isDragging) return;
const handleMouseMove = (e: MouseEvent) => {
if (!scrollRef.current) return;
const deltaX = e.clientX - startPosRef.current.x;
const deltaY = e.clientY - startPosRef.current.y;
if (direction === "horizontal" || direction === "both") {
scrollRef.current.scrollLeft = scrollStartRef.current.x - deltaX;
}
if (direction === "vertical" || direction === "both") {
scrollRef.current.scrollTop = scrollStartRef.current.y - deltaY;
}
};
const handleMouseUp = () => {
setIsDragging(false);
};
document.addEventListener("mousemove", handleMouseMove);
document.addEventListener("mouseup", handleMouseUp);
document.body.style.cursor = "grabbing";
document.body.style.userSelect = "none";
return () => {
document.removeEventListener("mousemove", handleMouseMove);
document.removeEventListener("mouseup", handleMouseUp);
document.body.style.cursor = "";
document.body.style.userSelect = "";
};
}, [enabled, isDragging, direction]);
const handleMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {
if (!scrollRef.current) return;
const target = e.target as HTMLElement;
const container = scrollRef.current;
// Check if the click is on an interactive or draggable element
// We need to be careful not to interfere with react-beautiful-dnd dragging
const isInteractiveElement =
target.closest("a") ||
target.closest("button") ||
target.closest("input") ||
target.closest("textarea") ||
target.closest("[role='button']") ||
target.closest("[draggable='true']") ||
target.closest(".react-beautiful-dnd-drag-handle") ||
target.closest("[data-rbd-drag-handle-draggable-id]") ||
target.closest("[data-rbd-draggable-id]");
// Don't start dragging if clicking on interactive elements
if (isInteractiveElement) return;
// Enable drag-to-scroll for any non-interactive element within the container
if (container.contains(target)) {
e.preventDefault();
setIsDragging(true);
startPosRef.current = { x: e.clientX, y: e.clientY };
scrollStartRef.current = {
x: container.scrollLeft,
y: container.scrollTop,
};
}
};
return {
ref: scrollRef,
onMouseDown: handleMouseDown,
isDragging,
};
}

View File

@@ -19,7 +19,7 @@ export function useLocalisation() {
nl, nl,
ru, ru,
pl, pl,
"pt-BR": ptBR, ptbr: ptBR,
}; };
const currentDateLocale = dateLocaleMap[locale] ?? enGB; const currentDateLocale = dateLocaleMap[locale] ?? enGB;

View File

@@ -13,7 +13,7 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"Plural-Forms: \n" "Plural-Forms: \n"
#: src/views/card/components/Comment.tsx:128 #: src/views/card/components/Comment.tsx:124
msgid " (edited)" msgid " (edited)"
msgstr " (bearbeitet)" msgstr " (bearbeitet)"
@@ -41,7 +41,7 @@ msgid "{0} labels"
msgstr "{0} Labels" msgstr "{0} Labels"
#. placeholder {0}: isTemplate ? "Template" : "Board" #. placeholder {0}: isTemplate ? "Template" : "Board"
#: src/views/board/index.tsx:422 #: src/views/board/index.tsx:416
msgid "{0} not found" msgid "{0} not found"
msgstr "{0} nicht gefunden" msgstr "{0} nicht gefunden"
@@ -100,7 +100,7 @@ msgstr "Aktivitätsprotokolle"
msgid "Add a card" msgid "Add a card"
msgstr "Karte hinzufügen" msgstr "Karte hinzufügen"
#: src/views/card/components/Comment.tsx:151 #: src/views/card/components/Comment.tsx:147
#: src/views/card/components/NewCommentForm.tsx:55 #: src/views/card/components/NewCommentForm.tsx:55
msgid "Add a comment..." msgid "Add a comment..."
msgstr "Kommentar hinzufügen..." msgstr "Kommentar hinzufügen..."
@@ -132,38 +132,38 @@ msgid "Add member"
msgstr "Mitglied hinzufügen" msgstr "Mitglied hinzufügen"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:78 #: src/views/card/components/ActivityList.tsx:77
msgid "added {0} labels: <0>{labelList}</0>" msgid "added {0} labels: <0>{labelList}</0>"
msgstr "{0} Labels hinzugefügt: <0>{labelList}</0>" msgstr "{0} Labels hinzugefügt: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:108 #: src/views/card/components/ActivityList.tsx:107
msgid "added a checklist" msgid "added a checklist"
msgstr "hat eine Checkliste hinzugefügt" msgstr "hat eine Checkliste hinzugefügt"
#: src/views/card/components/ActivityList.tsx:111 #: src/views/card/components/ActivityList.tsx:110
msgid "added a checklist item" msgid "added a checklist item"
msgstr "hat ein Checklistenelement hinzugefügt" msgstr "hat ein Checklistenelement hinzugefügt"
#: src/views/card/components/ActivityList.tsx:104 #: src/views/card/components/ActivityList.tsx:103
msgid "added a label to the card" msgid "added a label to the card"
msgstr "hat ein Label zur Karte hinzugefügt" msgstr "hat ein Label zur Karte hinzugefügt"
#: src/views/card/components/ActivityList.tsx:106 #: src/views/card/components/ActivityList.tsx:105
msgid "added a member to the card" msgid "added a member to the card"
msgstr "hat ein Mitglied zur Karte hinzugefügt" msgstr "hat ein Mitglied zur Karte hinzugefügt"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:182 #: src/views/card/components/ActivityList.tsx:181
msgid "added checklist <0>{0}</0>" msgid "added checklist <0>{0}</0>"
msgstr "hat Checkliste <0>{0}</0> hinzugefügt" msgstr "hat Checkliste <0>{0}</0> hinzugefügt"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:206 #: src/views/card/components/ActivityList.tsx:205
msgid "added checklist item <0>{0}</0>" msgid "added checklist item <0>{0}</0>"
msgstr "hat Checklistenelement <0>{0}</0> hinzugefügt" msgstr "hat Checklistenelement <0>{0}</0> hinzugefügt"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:166 #: src/views/card/components/ActivityList.tsx:165
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "hat Label <0>{0}</0> hinzugefügt" msgstr "hat Label <0>{0}</0> hinzugefügt"
@@ -184,10 +184,6 @@ msgstr "Administratorrollen"
msgid "All systems operational" msgid "All systems operational"
msgstr "Alle Systeme funktionieren" msgstr "Alle Systeme funktionieren"
#: src/views/settings/components/UpdateWorkspaceEmailVisibilityForm.tsx:42
msgid "Allow workspace members to see each other's email addresses"
msgstr "Workspace-Mitgliedern erlauben, die E-Mail-Adressen der anderen zu sehen"
#: src/views/auth/signup/index.tsx:88 #: src/views/auth/signup/index.tsx:88
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Du hast bereits ein Konto? <0><1>Anmelden</1></0>" msgstr "Du hast bereits ein Konto? <0><1>Anmelden</1></0>"
@@ -275,7 +271,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "Bist du sicher, dass du dein Konto löschen möchtest?" msgstr "Bist du sicher, dass du dein Konto löschen möchtest?"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:146 #: src/views/card/components/ActivityList.tsx:145
msgid "assigned <0>{0}</0> to the card" msgid "assigned <0>{0}</0> to the card"
msgstr "hat <0>{0}</0> der Karte zugewiesen" msgstr "hat <0>{0}</0> der Karte zugewiesen"
@@ -321,9 +317,9 @@ msgstr "Abrechnungsportal"
msgid "Blog Post" msgid "Blog Post"
msgstr "Blogbeitrag" msgstr "Blogbeitrag"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/card/index.tsx:273 #: src/views/card/index.tsx:273
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
msgid "Board" msgid "Board"
msgstr "Board" msgstr "Board"
@@ -340,7 +336,7 @@ msgstr "Der Name des Boards darf 100 Zeichen nicht überschreiten"
msgid "Board name is required" msgid "Board name is required"
msgstr "Boardname ist erforderlich" msgstr "Boardname ist erforderlich"
#: src/views/public/board/index.tsx:176 #: src/views/public/board/index.tsx:166
msgid "Board not found" msgid "Board not found"
msgstr "Board nicht gefunden" msgstr "Board nicht gefunden"
@@ -356,7 +352,7 @@ msgstr "Board-URL darf nur Buchstaben, Zahlen und Bindestriche enthalten"
msgid "Board URL cannot exceed 60 characters" msgid "Board URL cannot exceed 60 characters"
msgstr "Board-URL darf 60 Zeichen nicht überschreiten" msgstr "Board-URL darf 60 Zeichen nicht überschreiten"
#: src/views/public/board/index.tsx:86 #: src/views/public/board/index.tsx:80
msgid "Board URL copied to clipboard" msgid "Board URL copied to clipboard"
msgstr "Board-URL in die Zwischenablage kopiert" msgstr "Board-URL in die Zwischenablage kopiert"
@@ -373,7 +369,7 @@ msgstr "Board-Sichtbarkeit"
msgid "Board visibility updated" msgid "Board visibility updated"
msgstr "Board-Sichtbarkeit aktualisiert" msgstr "Board-Sichtbarkeit aktualisiert"
#: src/components/SideNavigation.tsx:98 #: src/components/SideNavigation.tsx:97
msgid "Boards" msgid "Boards"
msgstr "Boards" msgstr "Boards"
@@ -392,7 +388,7 @@ msgstr "Fehlerbericht"
#: src/components/DeleteLabelConfirmation.tsx:49 #: src/components/DeleteLabelConfirmation.tsx:49
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176
#: src/views/board/components/DeleteBoardConfirmation.tsx:44 #: src/views/board/components/DeleteBoardConfirmation.tsx:44
#: src/views/card/components/Comment.tsx:163 #: src/views/card/components/Comment.tsx:159
#: src/views/card/components/DeleteCardConfirmation.tsx:86 #: src/views/card/components/DeleteCardConfirmation.tsx:86
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64 #: src/views/card/components/DeleteChecklistConfirmation.tsx:64
#: src/views/card/components/DeleteCommentConfirmation.tsx:77 #: src/views/card/components/DeleteCommentConfirmation.tsx:77
@@ -418,19 +414,19 @@ msgstr "Karte nicht gefunden"
msgid "Card title" msgid "Card title"
msgstr "Kartentitel" msgstr "Kartentitel"
#: src/views/settings/AccountSettings.tsx:77 #: src/views/settings/AccountSettings.tsx:70
#: src/views/settings/AccountSettings.tsx:87 #: src/views/settings/AccountSettings.tsx:80
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
msgid "Change Password" msgid "Change Password"
msgstr "Passwort ändern" msgstr "Passwort ändern"
#: src/views/settings/AccountSettings.tsx:52 #: src/views/settings/AccountSettings.tsx:45
msgid "Change your language preferences." msgid "Change your language preferences."
msgstr "Ändern Sie Ihre Spracheinstellungen." msgstr "Ändern Sie Ihre Spracheinstellungen."
#: src/views/card/components/ActivityList.tsx:256 #: src/views/card/components/ActivityList.tsx:255
#: src/views/card/components/ActivityList.tsx:270 #: src/views/card/components/ActivityList.tsx:269
msgid "changed the due date to <0>{formattedDate}</0>" msgid "changed the due date to <0>{formattedDate}</0>"
msgstr "hat den Fälligkeitstermin auf <0>{formattedDate}</0> geändert" msgstr "hat den Fälligkeitstermin auf <0>{formattedDate}</0> geändert"
@@ -504,12 +500,12 @@ msgstr "Abgeschlossen"
msgid "Complete control and ownership:" msgid "Complete control and ownership:"
msgstr "Vollständige Kontrolle und Eigentum:" msgstr "Vollständige Kontrolle und Eigentum:"
#: src/views/card/components/ActivityList.tsx:113 #: src/views/card/components/ActivityList.tsx:112
msgid "completed a checklist item" msgid "completed a checklist item"
msgstr "hat ein Checklistenelement abgeschlossen" msgstr "hat ein Checklistenelement abgeschlossen"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:223 #: src/views/card/components/ActivityList.tsx:222
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "hat Checklistenelement <0>{0}</0> abgeschlossen" msgstr "hat Checklistenelement <0>{0}</0> abgeschlossen"
@@ -618,8 +614,8 @@ msgstr "Neuen Schlüssel erstellen"
msgid "Create new label" msgid "Create new label"
msgstr "Neues Label erstellen" msgstr "Neues Label erstellen"
#: src/views/board/index.tsx:71 #: src/views/board/index.tsx:65
#: src/views/board/index.tsx:517 #: src/views/board/index.tsx:507
msgid "Create new list" msgid "Create new list"
msgstr "Neue Liste erstellen" msgstr "Neue Liste erstellen"
@@ -632,7 +628,7 @@ msgstr "Vorlage erstellen"
msgid "Create workspace" msgid "Create workspace"
msgstr "Arbeitsbereich erstellen" msgstr "Arbeitsbereich erstellen"
#: src/views/card/components/ActivityList.tsx:100 #: src/views/card/components/ActivityList.tsx:99
msgid "created the card" msgid "created the card"
msgstr "hat die Karte erstellt" msgstr "hat die Karte erstellt"
@@ -678,7 +674,7 @@ msgstr "Benutzerdefinierte Workspace-URL"
msgid "Customer Support" msgid "Customer Support"
msgstr "Kundensupport" msgstr "Kundensupport"
#: src/components/UserMenu.tsx:158 #: src/components/UserMenu.tsx:155
msgid "Dark" msgid "Dark"
msgstr "Dunkel" msgstr "Dunkel"
@@ -696,8 +692,8 @@ msgstr "Einladungslink deaktivieren"
msgid "Delete" msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
#: src/views/settings/AccountSettings.tsx:59 #: src/views/settings/AccountSettings.tsx:52
#: src/views/settings/AccountSettings.tsx:69 #: src/views/settings/AccountSettings.tsx:62
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
msgid "Delete account" msgid "Delete account"
msgstr "Konto löschen" msgstr "Konto löschen"
@@ -710,7 +706,7 @@ msgstr "Board löschen"
msgid "Delete card" msgid "Delete card"
msgstr "Karte löschen" msgstr "Karte löschen"
#: src/views/card/components/Comment.tsx:95 #: src/views/card/components/Comment.tsx:92
msgid "Delete comment" msgid "Delete comment"
msgstr "Kommentar löschen" msgstr "Kommentar löschen"
@@ -723,26 +719,26 @@ msgid "Delete template"
msgstr "Vorlage löschen" msgstr "Vorlage löschen"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/WorkspaceSettings.tsx:106 #: src/views/settings/WorkspaceSettings.tsx:97
#: src/views/settings/WorkspaceSettings.tsx:117 #: src/views/settings/WorkspaceSettings.tsx:108
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Workspace löschen" msgstr "Workspace löschen"
#: src/views/card/components/ActivityList.tsx:110 #: src/views/card/components/ActivityList.tsx:109
msgid "deleted a checklist" msgid "deleted a checklist"
msgstr "hat eine Checkliste gelöscht" msgstr "hat eine Checkliste gelöscht"
#: src/views/card/components/ActivityList.tsx:115 #: src/views/card/components/ActivityList.tsx:114
msgid "deleted a checklist item" msgid "deleted a checklist item"
msgstr "hat ein Checklistenelement gelöscht" msgstr "hat ein Checklistenelement gelöscht"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:198 #: src/views/card/components/ActivityList.tsx:197
msgid "deleted checklist <0>{0}</0>" msgid "deleted checklist <0>{0}</0>"
msgstr "hat Checkliste <0>{0}</0> gelöscht" msgstr "hat Checkliste <0>{0}</0> gelöscht"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:241 #: src/views/card/components/ActivityList.tsx:240
msgid "deleted checklist item <0>{0}</0>" msgid "deleted checklist item <0>{0}</0>"
msgstr "hat Checklistenelement <0>{0}</0> gelöscht" msgstr "hat Checklistenelement <0>{0}</0> gelöscht"
@@ -790,7 +786,7 @@ msgstr "Dokumente"
msgid "Docs" msgid "Docs"
msgstr "Dokumente" msgstr "Dokumente"
#: src/components/UserMenu.tsx:209 #: src/components/UserMenu.tsx:206
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
#: src/views/home/components/Footer.tsx:78 #: src/views/home/components/Footer.tsx:78
#: src/views/home/components/Header.tsx:36 #: src/views/home/components/Header.tsx:36
@@ -843,7 +839,7 @@ msgstr "Bearbeiten"
msgid "Edit board URL" msgid "Edit board URL"
msgstr "Board-URL bearbeiten" msgstr "Board-URL bearbeiten"
#: src/views/card/components/Comment.tsx:86 #: src/views/card/components/Comment.tsx:83
msgid "Edit comment" msgid "Edit comment"
msgstr "Kommentar bearbeiten" msgstr "Kommentar bearbeiten"
@@ -868,14 +864,9 @@ msgid "email"
msgstr "E-Mail" msgstr "E-Mail"
#: src/views/members/components/InviteMemberForm.tsx:272 #: src/views/members/components/InviteMemberForm.tsx:272
#: src/views/settings/AccountSettings.tsx:42
msgid "Email" msgid "Email"
msgstr "E-Mail" msgstr "E-Mail"
#: src/views/settings/WorkspaceSettings.tsx:84
msgid "Email visibility"
msgstr "E-Mail-Sichtbarkeit"
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
msgid "Enhancement" msgid "Enhancement"
msgstr "Verbesserung" msgstr "Verbesserung"
@@ -1057,7 +1048,7 @@ msgid "Features"
msgstr "Features" msgstr "Features"
#: src/components/FeedbackModal.tsx:59 #: src/components/FeedbackModal.tsx:59
#: src/components/UserMenu.tsx:217 #: src/components/UserMenu.tsx:214
msgid "Feedback" msgid "Feedback"
msgstr "Feedback" msgstr "Feedback"
@@ -1078,12 +1069,14 @@ msgid "For long-term sustainability, we recognise all good open source projects
msgstr "Für langfristige Nachhaltigkeit erkennen wir an, dass alle guten Open-Source-Projekte eine Einnahmequelle benötigen. Unsere stammt aus dem kostenpflichtigen Cloud-Angebot für Workspaces mit mehreren Benutzern und für benutzerdefinierte Workspace-Slugs. Es besteht keine Verpflichtung, es zu nutzen, und Sie können die Software kostenlos auf Ihrer eigenen Infrastruktur selbst hosten." msgstr "Für langfristige Nachhaltigkeit erkennen wir an, dass alle guten Open-Source-Projekte eine Einnahmequelle benötigen. Unsere stammt aus dem kostenpflichtigen Cloud-Angebot für Workspaces mit mehreren Benutzern und für benutzerdefinierte Workspace-Slugs. Es besteht keine Verpflichtung, es zu nutzen, und Sie können die Software kostenlos auf Ihrer eigenen Infrastruktur selbst hosten."
#: src/views/pricing/components/Pricing.tsx:32 #: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/PricingTiers.tsx:30
#: src/views/pricing/components/PricingTiers.tsx:30 #: src/views/pricing/components/PricingTiers.tsx:30
msgid "Free" msgid "Free"
msgstr "Kostenlos" msgstr "Kostenlos"
#: src/views/members/components/InviteMemberForm.tsx:333 #: src/views/members/components/InviteMemberForm.tsx:333
#: src/views/members/index.tsx:217 #: src/views/members/index.tsx:208
msgid "Free Plan" msgid "Free Plan"
msgstr "Kostenloser Plan" msgstr "Kostenloser Plan"
@@ -1123,7 +1116,7 @@ msgstr "Loslegen"
msgid "Get started by creating a new {0}" msgid "Get started by creating a new {0}"
msgstr "Beginnen Sie, indem Sie eine(n) neue(n) {0} erstellen" msgstr "Beginnen Sie, indem Sie eine(n) neue(n) {0} erstellen"
#: src/views/board/index.tsx:509 #: src/views/board/index.tsx:499
msgid "Get started by creating a new list" msgid "Get started by creating a new list"
msgstr "Beginne mit dem Erstellen einer neuen Liste" msgstr "Beginne mit dem Erstellen einer neuen Liste"
@@ -1157,19 +1150,19 @@ msgstr "Zur Startseite"
msgid "Go to app" msgid "Go to app"
msgstr "Zur App" msgstr "Zur App"
#: src/components/SideNavigation.tsx:106 #: src/components/SideNavigation.tsx:105
msgid "Go to boards" msgid "Go to boards"
msgstr "Zu Boards gehen" msgstr "Zu Boards gehen"
#: src/components/SideNavigation.tsx:130 #: src/components/SideNavigation.tsx:129
msgid "Go to members" msgid "Go to members"
msgstr "Zu Mitgliedern gehen" msgstr "Zu Mitgliedern gehen"
#: src/components/SideNavigation.tsx:142 #: src/components/SideNavigation.tsx:141
msgid "Go to settings" msgid "Go to settings"
msgstr "Zu Einstellungen gehen" msgstr "Zu Einstellungen gehen"
#: src/components/SideNavigation.tsx:118 #: src/components/SideNavigation.tsx:117
msgid "Go to templates" msgid "Go to templates"
msgstr "Zu Vorlagen gehen" msgstr "Zu Vorlagen gehen"
@@ -1294,7 +1287,7 @@ msgstr "Ungültige E-Mail-Adresse"
msgid "Invalid invitation" msgid "Invalid invitation"
msgstr "Ungültige Einladung" msgstr "Ungültige Einladung"
#: src/views/members/index.tsx:230 #: src/views/members/index.tsx:221
msgid "Invite" msgid "Invite"
msgstr "Einladen" msgstr "Einladen"
@@ -1375,7 +1368,7 @@ msgstr "Labels & Filter"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Labels & Filter" msgstr "Labels & Filter"
#: src/views/settings/AccountSettings.tsx:49 #: src/views/settings/AccountSettings.tsx:42
msgid "Language" msgid "Language"
msgstr "Sprache" msgstr "Sprache"
@@ -1384,7 +1377,7 @@ msgstr "Sprache"
msgid "Launch offer" msgid "Launch offer"
msgstr "Einführungsangebot" msgstr "Einführungsangebot"
#: src/views/members/index.tsx:200 #: src/views/members/index.tsx:191
msgid "Launch offer: Get unlimited members with Pro" msgid "Launch offer: Get unlimited members with Pro"
msgstr "Einführungsangebot: Erhalten Sie unbegrenzte Mitglieder mit Pro" msgstr "Einführungsangebot: Erhalten Sie unbegrenzte Mitglieder mit Pro"
@@ -1409,11 +1402,11 @@ msgstr "Rechtliches"
msgid "License" msgid "License"
msgstr "Lizenz" msgstr "Lizenz"
#: src/components/UserMenu.tsx:172 #: src/components/UserMenu.tsx:169
msgid "Light" msgid "Light"
msgstr "Hell" msgstr "Hell"
#: src/views/public/board/index.tsx:84 #: src/views/public/board/index.tsx:78
msgid "Link copied" msgid "Link copied"
msgstr "Link kopiert" msgstr "Link kopiert"
@@ -1429,11 +1422,11 @@ msgstr "Listenname"
msgid "Lists" msgid "Lists"
msgstr "Listen" msgstr "Listen"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Load more activities" msgid "Load more activities"
msgstr "Weitere Aktivitäten laden" msgstr "Weitere Aktivitäten laden"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Loading..." msgid "Loading..."
msgstr "Wird geladen..." msgstr "Wird geladen..."
@@ -1441,7 +1434,7 @@ msgstr "Wird geladen..."
msgid "Login | kan.bn" msgid "Login | kan.bn"
msgstr "Login | kan.bn" msgstr "Login | kan.bn"
#: src/components/UserMenu.tsx:227 #: src/components/UserMenu.tsx:224
msgid "Logout" msgid "Logout"
msgstr "Abmelden" msgstr "Abmelden"
@@ -1465,12 +1458,12 @@ msgstr "Magic Link"
msgid "Make template" msgid "Make template"
msgstr "Als Vorlage speichern" msgstr "Als Vorlage speichern"
#: src/views/card/components/ActivityList.tsx:114 #: src/views/card/components/ActivityList.tsx:113
msgid "marked a checklist item as incomplete" msgid "marked a checklist item as incomplete"
msgstr "hat ein Checklistenelement als unvollständig markiert" msgstr "hat ein Checklistenelement als unvollständig markiert"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:232 #: src/views/card/components/ActivityList.tsx:231
msgid "marked checklist item <0>{0}</0> as incomplete" msgid "marked checklist item <0>{0}</0> as incomplete"
msgstr "hat Checklistenelement <0>{0}</0> als unvollständig markiert" msgstr "hat Checklistenelement <0>{0}</0> als unvollständig markiert"
@@ -1478,16 +1471,16 @@ msgstr "hat Checklistenelement <0>{0}</0> als unvollständig markiert"
msgid "Medium Priority" msgid "Medium Priority"
msgstr "Mittlere Priorität" msgstr "Mittlere Priorität"
#: src/components/SideNavigation.tsx:122 #: src/components/SideNavigation.tsx:121
#: src/views/board/components/Filters.tsx:147 #: src/views/board/components/Filters.tsx:147
#: src/views/board/components/NewCardForm.tsx:377 #: src/views/board/components/NewCardForm.tsx:377
#: src/views/card/index.tsx:131 #: src/views/card/index.tsx:131
#: src/views/members/index.tsx:187 #: src/views/members/index.tsx:178
msgid "Members" msgid "Members"
msgstr "Mitglieder" msgstr "Mitglieder"
#. placeholder {0}: workspace.name ?? t`Workspace` #. placeholder {0}: workspace.name ?? t`Workspace`
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Mitglieder | {0}" msgstr "Mitglieder | {0}"
@@ -1502,11 +1495,11 @@ msgstr "monatliche Abrechnung"
#. placeholder {0}: truncate(fromList) #. placeholder {0}: truncate(fromList)
#. placeholder {1}: truncate(toList) #. placeholder {1}: truncate(toList)
#: src/views/card/components/ActivityList.tsx:134 #: src/views/card/components/ActivityList.tsx:133
msgid "moved the card from <0>{0}</0> to<1>{1}</1>" 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" msgstr "hat die Karte von <0>{0}</0> nach <1>{1}</1> verschoben"
#: src/views/card/components/ActivityList.tsx:103 #: src/views/card/components/ActivityList.tsx:102
msgid "moved the card to another list" msgid "moved the card to another list"
msgstr "hat die Karte in eine andere Liste verschoben" msgstr "hat die Karte in eine andere Liste verschoben"
@@ -1555,7 +1548,7 @@ msgid "New label"
msgstr "Neues Label" msgstr "Neues Label"
#: src/views/board/components/NewListForm.tsx:113 #: src/views/board/components/NewListForm.tsx:113
#: src/views/board/index.tsx:476 #: src/views/board/index.tsx:470
msgid "New list" msgid "New list"
msgstr "Neue Liste" msgstr "Neue Liste"
@@ -1616,7 +1609,7 @@ msgstr "Für diesen Anhang ist keine Download-URL verfügbar."
msgid "No keyboard shortcuts registered." msgid "No keyboard shortcuts registered."
msgstr "Keine Tastaturkürzel registriert." msgstr "Keine Tastaturkürzel registriert."
#: src/views/board/index.tsx:506 #: src/views/board/index.tsx:496
msgid "No lists" msgid "No lists"
msgstr "Keine Listen" msgstr "Keine Listen"
@@ -1632,11 +1625,11 @@ msgstr "Angebot"
msgid "Onboarding" msgid "Onboarding"
msgstr "Einarbeitung" msgstr "Einarbeitung"
#: src/views/settings/AccountSettings.tsx:62 #: src/views/settings/AccountSettings.tsx:55
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Sobald Sie Ihr Konto löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden." msgstr "Sobald Sie Ihr Konto löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden."
#: src/views/settings/WorkspaceSettings.tsx:109 #: src/views/settings/WorkspaceSettings.tsx:100
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Sobald Sie Ihren Arbeitsbereich löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden." msgstr "Sobald Sie Ihren Arbeitsbereich löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden."
@@ -1706,7 +1699,7 @@ msgstr "Passwort muss mindestens 8 Zeichen lang sein"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Passwörter stimmen nicht überein" msgstr "Passwörter stimmen nicht überein"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Paused" msgid "Paused"
msgstr "Pausiert" msgstr "Pausiert"
@@ -1715,7 +1708,7 @@ msgstr "Pausiert"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Zahlungshäufigkeit" msgstr "Zahlungshäufigkeit"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Pending" msgid "Pending"
msgstr "Ausstehend" msgstr "Ausstehend"
@@ -1772,15 +1765,15 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
#: src/views/board/components/NewTemplateForm.tsx:77 #: src/views/board/components/NewTemplateForm.tsx:77
#: src/views/board/components/UpdateBoardSlugForm.tsx:73 #: src/views/board/components/UpdateBoardSlugForm.tsx:73
#: src/views/board/components/VisibilityButton.tsx:54 #: src/views/board/components/VisibilityButton.tsx:54
#: src/views/board/index.tsx:177 #: src/views/board/index.tsx:171
#: src/views/board/index.tsx:233 #: src/views/board/index.tsx:227
#: src/views/boards/components/ImportBoardsForm.tsx:205 #: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/card/components/AttachmentThumbnails.tsx:74 #: src/views/card/components/AttachmentThumbnails.tsx:74
#: src/views/card/components/ChecklistItemRow.tsx:69 #: src/views/card/components/ChecklistItemRow.tsx:69
#: src/views/card/components/ChecklistItemRow.tsx:97 #: src/views/card/components/ChecklistItemRow.tsx:97
#: src/views/card/components/ChecklistNameInput.tsx:47 #: src/views/card/components/ChecklistNameInput.tsx:47
#: src/views/card/components/Checklists.tsx:81 #: src/views/card/components/Checklists.tsx:81
#: src/views/card/components/Comment.tsx:68 #: src/views/card/components/Comment.tsx:65
#: src/views/card/components/DeleteCardConfirmation.tsx:52 #: src/views/card/components/DeleteCardConfirmation.tsx:52
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38 #: src/views/card/components/DeleteChecklistConfirmation.tsx:38
#: src/views/card/components/DeleteCommentConfirmation.tsx:46 #: src/views/card/components/DeleteCommentConfirmation.tsx:46
@@ -1840,7 +1833,7 @@ msgstr "Datenschutzrichtlinie"
msgid "Private" msgid "Private"
msgstr "Privat" msgstr "Privat"
#: src/views/members/index.tsx:214 #: src/views/members/index.tsx:205
msgid "Pro Plan" msgid "Pro Plan"
msgstr "Pro-Plan" msgstr "Pro-Plan"
@@ -1888,44 +1881,44 @@ msgstr "Remote"
msgid "Remove" msgid "Remove"
msgstr "Entfernen" msgstr "Entfernen"
#: src/views/members/index.tsx:157 #: src/views/members/index.tsx:148
msgid "Remove member" msgid "Remove member"
msgstr "Mitglied entfernen" msgstr "Mitglied entfernen"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:92 #: src/views/card/components/ActivityList.tsx:91
msgid "removed {0} labels: <0>{labelList}</0>" msgid "removed {0} labels: <0>{labelList}</0>"
msgstr "{0} Labels entfernt: <0>{labelList}</0>" msgstr "{0} Labels entfernt: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:105 #: src/views/card/components/ActivityList.tsx:104
msgid "removed a label from the card" msgid "removed a label from the card"
msgstr "hat ein Label von der Karte entfernt" msgstr "hat ein Label von der Karte entfernt"
#: src/views/card/components/ActivityList.tsx:107 #: src/views/card/components/ActivityList.tsx:106
msgid "removed a member from the card" msgid "removed a member from the card"
msgstr "hat ein Mitglied von der Karte entfernt" msgstr "hat ein Mitglied von der Karte entfernt"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:174 #: src/views/card/components/ActivityList.tsx:173
msgid "removed label <0>{0}</0>" msgid "removed label <0>{0}</0>"
msgstr "hat Label <0>{0}</0> entfernt" msgstr "hat Label <0>{0}</0> entfernt"
#: src/views/card/components/ActivityList.tsx:118 #: src/views/card/components/ActivityList.tsx:117
#: src/views/card/components/ActivityList.tsx:277 #: src/views/card/components/ActivityList.tsx:276
msgid "removed the due date" msgid "removed the due date"
msgstr "hat den Fälligkeitstermin entfernt" msgstr "hat den Fälligkeitstermin entfernt"
#: src/views/card/components/ActivityList.tsx:109 #: src/views/card/components/ActivityList.tsx:108
msgid "renamed a checklist" msgid "renamed a checklist"
msgstr "hat eine Checkliste umbenannt" msgstr "hat eine Checkliste umbenannt"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:190 #: src/views/card/components/ActivityList.tsx:189
msgid "renamed checklist <0>{0}</0>" msgid "renamed checklist <0>{0}</0>"
msgstr "hat Checkliste <0>{0}</0> umbenannt" msgstr "hat Checkliste <0>{0}</0> umbenannt"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:214 #: src/views/card/components/ActivityList.tsx:213
msgid "renamed checklist item to <0>{0}</0>" msgid "renamed checklist item to <0>{0}</0>"
msgstr "hat Checklistenelement in <0>{0}</0> umbenannt" msgstr "hat Checklistenelement in <0>{0}</0> umbenannt"
@@ -1955,7 +1948,7 @@ msgstr "Überprüfung"
msgid "Roadmap" msgid "Roadmap"
msgstr "Roadmap" msgstr "Roadmap"
#: src/views/members/index.tsx:252 #: src/views/members/index.tsx:243
msgid "Role" msgid "Role"
msgstr "Rolle" msgstr "Rolle"
@@ -1965,7 +1958,7 @@ msgid "Run on your own infrastructure"
msgstr "Auf eigener Infrastruktur betreiben" msgstr "Auf eigener Infrastruktur betreiben"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183
#: src/views/card/components/Comment.tsx:170 #: src/views/card/components/Comment.tsx:166
#: src/views/settings/components/Avatar.tsx:309 #: src/views/settings/components/Avatar.tsx:309
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@@ -2003,7 +1996,7 @@ msgstr "Selbst hosten"
msgid "Self host with Github" msgid "Self host with Github"
msgstr "Selbst hosten mit Github" msgstr "Selbst hosten mit Github"
#: src/views/card/components/ActivityList.tsx:143 #: src/views/card/components/ActivityList.tsx:142
msgid "self-assigned the card" msgid "self-assigned the card"
msgstr "hat sich selbst die Karte zugewiesen" msgstr "hat sich selbst die Karte zugewiesen"
@@ -2023,12 +2016,12 @@ msgstr "Senior"
msgid "Set due date" msgid "Set due date"
msgstr "Fälligkeitsdatum festlegen" msgstr "Fälligkeitsdatum festlegen"
#: src/views/card/components/ActivityList.tsx:116 #: src/views/card/components/ActivityList.tsx:115
msgid "set the due date" msgid "set the due date"
msgstr "hat den Fälligkeitstermin festgelegt" msgstr "hat den Fälligkeitstermin festgelegt"
#: src/components/SettingsLayout.tsx:82 #: src/components/SettingsLayout.tsx:82
#: src/components/SideNavigation.tsx:134 #: src/components/SideNavigation.tsx:133
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
@@ -2048,11 +2041,11 @@ msgstr "Einstellungen | Abrechnung"
msgid "Settings | Integrations" msgid "Settings | Integrations"
msgstr "Einstellungen | Integrationen" msgstr "Einstellungen | Integrationen"
#: src/views/settings/WorkspaceSettings.tsx:55 #: src/views/settings/WorkspaceSettings.tsx:54
msgid "Settings | Workspace" msgid "Settings | Workspace"
msgstr "Einstellungen | Arbeitsbereich" msgstr "Einstellungen | Arbeitsbereich"
#: src/components/UserMenu.tsx:187 #: src/components/UserMenu.tsx:184
msgid "Shortcuts" msgid "Shortcuts"
msgstr "Kürzel" msgstr "Kürzel"
@@ -2124,7 +2117,7 @@ msgstr "Erfolg"
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:" msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Optimiere deinen Workspace für nur $29/Monat. Das bekommst du dafür:" msgstr "Optimiere deinen Workspace für nur $29/Monat. Das bekommst du dafür:"
#: src/components/UserMenu.tsx:198 #: src/components/UserMenu.tsx:195
msgid "Support" msgid "Support"
msgstr "Support" msgstr "Support"
@@ -2133,12 +2126,12 @@ msgstr "Support"
msgid "Support the development of the project" msgid "Support the development of the project"
msgstr "Unterstütze die Entwicklung des Projekts" msgstr "Unterstütze die Entwicklung des Projekts"
#: src/components/UserMenu.tsx:144 #: src/components/UserMenu.tsx:141
msgid "System" msgid "System"
msgstr "System" msgstr "System"
#: src/views/members/components/InviteMemberForm.tsx:322 #: src/views/members/components/InviteMemberForm.tsx:322
#: src/views/members/index.tsx:216 #: src/views/members/index.tsx:207
msgid "Team Plan" msgid "Team Plan"
msgstr "Team-Plan" msgstr "Team-Plan"
@@ -2148,8 +2141,8 @@ msgstr "Team-Plan"
msgid "Teams" msgid "Teams"
msgstr "Teams" msgstr "Teams"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/board/index.tsx:431 #: src/views/board/index.tsx:425
msgid "Template" msgid "Template"
msgstr "Vorlage" msgstr "Vorlage"
@@ -2169,7 +2162,7 @@ msgstr "Vorlagenname darf 100 Zeichen nicht überschreiten"
msgid "Template name is required" msgid "Template name is required"
msgstr "Vorlagenname ist erforderlich" msgstr "Vorlagenname ist erforderlich"
#: src/components/SideNavigation.tsx:110 #: src/components/SideNavigation.tsx:109
#: src/views/home/components/Features.tsx:115 #: src/views/home/components/Features.tsx:115
msgid "Templates" msgid "Templates"
msgstr "Vorlagen" msgstr "Vorlagen"
@@ -2203,7 +2196,7 @@ msgstr "Die open source <0/> alternative zu Trello"
msgid "The visibility of your board has been set to {0}." msgid "The visibility of your board has been set to {0}."
msgstr "Die Sichtbarkeit deines Boards wurde auf {0} gesetzt." msgstr "Die Sichtbarkeit deines Boards wurde auf {0} gesetzt."
#: src/components/UserMenu.tsx:131 #: src/components/UserMenu.tsx:128
msgid "Theme" msgid "Theme"
msgstr "Design" msgstr "Design"
@@ -2223,7 +2216,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." 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." msgstr "Dieser API-Schlüssel wird nur einmal angezeigt. Bitte speichern Sie ihn an einem sicheren Ort."
#: src/views/public/board/index.tsx:179 #: src/views/public/board/index.tsx:169
msgid "This board is private or does not exist" msgid "This board is private or does not exist"
msgstr "Dieses Board ist privat oder existiert nicht" msgstr "Dieses Board ist privat oder existiert nicht"
@@ -2366,7 +2359,7 @@ msgstr "Board-URL kann nicht aktualisiert werden"
msgid "Unable to update board visibility" msgid "Unable to update board visibility"
msgstr "Board-Sichtbarkeit konnte nicht aktualisiert werden" msgstr "Board-Sichtbarkeit konnte nicht aktualisiert werden"
#: src/views/board/index.tsx:232 #: src/views/board/index.tsx:226
#: src/views/card/index.tsx:187 #: src/views/card/index.tsx:187
msgid "Unable to update card" msgid "Unable to update card"
msgstr "Karte konnte nicht aktualisiert werden" msgstr "Karte konnte nicht aktualisiert werden"
@@ -2379,7 +2372,7 @@ msgstr "Checkliste kann nicht aktualisiert werden"
msgid "Unable to update checklist item" msgid "Unable to update checklist item"
msgstr "Checklistenelement kann nicht aktualisiert werden" msgstr "Checklistenelement kann nicht aktualisiert werden"
#: src/views/card/components/Comment.tsx:67 #: src/views/card/components/Comment.tsx:64
msgid "Unable to update comment" msgid "Unable to update comment"
msgstr "Kommentar konnte nicht aktualisiert werden" msgstr "Kommentar konnte nicht aktualisiert werden"
@@ -2391,7 +2384,7 @@ msgstr "Fälligkeitsdatum konnte nicht aktualisiert werden"
msgid "Unable to update labels" msgid "Unable to update labels"
msgstr "Labels konnten nicht aktualisiert werden" msgstr "Labels konnten nicht aktualisiert werden"
#: src/views/board/index.tsx:176 #: src/views/board/index.tsx:170
#: src/views/card/components/ListSelector.tsx:52 #: src/views/card/components/ListSelector.tsx:52
msgid "Unable to update list" msgid "Unable to update list"
msgstr "Liste konnte nicht aktualisiert werden" msgstr "Liste konnte nicht aktualisiert werden"
@@ -2401,11 +2394,11 @@ msgid "Unable to update members"
msgstr "Mitglieder konnten nicht aktualisiert werden" msgstr "Mitglieder konnten nicht aktualisiert werden"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:157 #: src/views/card/components/ActivityList.tsx:156
msgid "unassigned <0>{0}</0> from the card" msgid "unassigned <0>{0}</0> from the card"
msgstr "hat <0>{0}</0> von der Karte entfernt" msgstr "hat <0>{0}</0> von der Karte entfernt"
#: src/views/card/components/ActivityList.tsx:154 #: src/views/card/components/ActivityList.tsx:153
msgid "unassigned themselves from the card" msgid "unassigned themselves from the card"
msgstr "hat sich selbst von der Karte entfernt" msgstr "hat sich selbst von der Karte entfernt"
@@ -2464,30 +2457,30 @@ msgstr "Aktualisieren"
msgid "Update label" msgid "Update label"
msgstr "Label aktualisieren" msgstr "Label aktualisieren"
#: src/views/card/components/ActivityList.tsx:112 #: src/views/card/components/ActivityList.tsx:111
msgid "updated a checklist item" msgid "updated a checklist item"
msgstr "hat ein Checklistenelement aktualisiert" msgstr "hat ein Checklistenelement aktualisiert"
#: src/views/card/components/ActivityList.tsx:102 #: src/views/card/components/ActivityList.tsx:101
msgid "updated the description" msgid "updated the description"
msgstr "hat die Beschreibung aktualisiert" msgstr "hat die Beschreibung aktualisiert"
#: src/views/card/components/ActivityList.tsx:117 #: src/views/card/components/ActivityList.tsx:116
msgid "updated the due date" msgid "updated the due date"
msgstr "hat den Fälligkeitstermin aktualisiert" msgstr "hat den Fälligkeitstermin aktualisiert"
#: src/views/card/components/ActivityList.tsx:101 #: src/views/card/components/ActivityList.tsx:100
msgid "updated the title" msgid "updated the title"
msgstr "hat den Titel aktualisiert" msgstr "hat den Titel aktualisiert"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:126 #: src/views/card/components/ActivityList.tsx:125
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "hat den Titel in <0>{0}</0> geändert" msgstr "hat den Titel in <0>{0}</0> geändert"
#: src/components/SideNavigation.tsx:239 #: src/components/SideNavigation.tsx:237
#: src/views/settings/components/UpgradeToProConfirmation.tsx:53 #: src/views/settings/components/UpgradeToProConfirmation.tsx:53
#: src/views/settings/WorkspaceSettings.tsx:99 #: src/views/settings/WorkspaceSettings.tsx:90
msgid "Upgrade to Pro" msgid "Upgrade to Pro"
msgstr "Upgrade auf Pro" msgstr "Upgrade auf Pro"
@@ -2524,7 +2517,7 @@ msgstr "URL muss mindestens 3 Zeichen lang sein"
msgid "Use template" msgid "Use template"
msgstr "Vorlage verwenden" msgstr "Vorlage verwenden"
#: src/views/members/index.tsx:246 #: src/views/members/index.tsx:237
msgid "User" msgid "User"
msgstr "Benutzer" msgstr "Benutzer"
@@ -2549,7 +2542,7 @@ msgstr "Verwalte deine Abrechnung und dein Abonnement."
msgid "View docs" msgid "View docs"
msgstr "Dokumentation ansehen" msgstr "Dokumentation ansehen"
#: src/views/public/board/index.tsx:148 #: src/views/public/board/index.tsx:142
msgid "View only" msgid "View only"
msgstr "Nur ansehen" msgstr "Nur ansehen"
@@ -2557,7 +2550,7 @@ msgstr "Nur ansehen"
msgid "View our roadmap." msgid "View our roadmap."
msgstr "Sieh dir unsere roadmap an." msgstr "Sieh dir unsere roadmap an."
#: src/views/public/board/index.tsx:182 #: src/views/public/board/index.tsx:172
msgid "View workspace" msgid "View workspace"
msgstr "Workspace anzeigen" msgstr "Workspace anzeigen"
@@ -2602,10 +2595,10 @@ msgid "Why make an open source Trello?"
msgstr "Warum ein open source Trello entwickeln?" msgstr "Warum ein open source Trello entwickeln?"
#: src/components/SettingsLayout.tsx:39 #: src/components/SettingsLayout.tsx:39
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/boards/index.tsx:33 #: src/views/boards/index.tsx:33
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
#: src/views/public/boards/index.tsx:66 #: src/views/public/boards/index.tsx:66
msgid "Workspace" msgid "Workspace"
msgstr "Arbeitsbereich" msgstr "Arbeitsbereich"
@@ -2618,7 +2611,7 @@ msgstr "Workspace erfolgreich erstellt. Du kannst später in den Einstellungen u
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Workspace gelöscht" msgstr "Workspace gelöscht"
#: src/views/settings/WorkspaceSettings.tsx:76 #: src/views/settings/WorkspaceSettings.tsx:75
msgid "Workspace description" msgid "Workspace description"
msgstr "Workspace-Beschreibung" msgstr "Workspace-Beschreibung"
@@ -2641,7 +2634,7 @@ msgid "Workspace members"
msgstr "Workspace-mitglieder" msgstr "Workspace-mitglieder"
#: src/components/NewWorkspaceForm.tsx:262 #: src/components/NewWorkspaceForm.tsx:262
#: src/views/settings/WorkspaceSettings.tsx:59 #: src/views/settings/WorkspaceSettings.tsx:58
msgid "Workspace name" msgid "Workspace name"
msgstr "Name des Workspaces" msgstr "Name des Workspaces"
@@ -2666,7 +2659,7 @@ msgstr "Workspace-Name aktualisiert"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Workspace-Slug aktualisiert" msgstr "Workspace-Slug aktualisiert"
#: src/views/settings/WorkspaceSettings.tsx:67 #: src/views/settings/WorkspaceSettings.tsx:66
msgid "Workspace URL" msgid "Workspace URL"
msgstr "Workspace-URL" msgstr "Workspace-URL"
@@ -2687,7 +2680,7 @@ msgstr "Jährlich"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Ja, wir bieten einen dauerhaft kostenlosen plan für die individuelle nutzung an. Keine einschränkungen, keine paywalls, keine limits." msgstr "Ja, wir bieten einen dauerhaft kostenlosen plan für die individuelle nutzung an. Keine einschränkungen, keine paywalls, keine limits."
#: src/views/settings/AccountSettings.tsx:80 #: src/views/settings/AccountSettings.tsx:73
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Sie sind dabei, Ihr Passwort zu ändern." msgstr "Sie sind dabei, Ihr Passwort zu ändern."

File diff suppressed because one or more lines are too long

View File

@@ -13,7 +13,7 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"Plural-Forms: \n" "Plural-Forms: \n"
#: src/views/card/components/Comment.tsx:128 #: src/views/card/components/Comment.tsx:124
msgid " (edited)" msgid " (edited)"
msgstr " (edited)" msgstr " (edited)"
@@ -41,7 +41,7 @@ msgid "{0} labels"
msgstr "{0} labels" msgstr "{0} labels"
#. placeholder {0}: isTemplate ? "Template" : "Board" #. placeholder {0}: isTemplate ? "Template" : "Board"
#: src/views/board/index.tsx:422 #: src/views/board/index.tsx:416
msgid "{0} not found" msgid "{0} not found"
msgstr "{0} not found" msgstr "{0} not found"
@@ -112,7 +112,7 @@ msgstr "Activity logs"
msgid "Add a card" msgid "Add a card"
msgstr "Add a card" msgstr "Add a card"
#: src/views/card/components/Comment.tsx:151 #: src/views/card/components/Comment.tsx:147
#: src/views/card/components/NewCommentForm.tsx:55 #: src/views/card/components/NewCommentForm.tsx:55
msgid "Add a comment..." msgid "Add a comment..."
msgstr "Add a comment..." msgstr "Add a comment..."
@@ -148,38 +148,38 @@ msgid "Add member"
msgstr "Add member" msgstr "Add member"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:78 #: src/views/card/components/ActivityList.tsx:77
msgid "added {0} labels: <0>{labelList}</0>" msgid "added {0} labels: <0>{labelList}</0>"
msgstr "added {0} labels: <0>{labelList}</0>" msgstr "added {0} labels: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:108 #: src/views/card/components/ActivityList.tsx:107
msgid "added a checklist" msgid "added a checklist"
msgstr "added a checklist" msgstr "added a checklist"
#: src/views/card/components/ActivityList.tsx:111 #: src/views/card/components/ActivityList.tsx:110
msgid "added a checklist item" msgid "added a checklist item"
msgstr "added a checklist item" msgstr "added a checklist item"
#: src/views/card/components/ActivityList.tsx:104 #: src/views/card/components/ActivityList.tsx:103
msgid "added a label to the card" msgid "added a label to the card"
msgstr "added a label to the card" msgstr "added a label to the card"
#: src/views/card/components/ActivityList.tsx:106 #: src/views/card/components/ActivityList.tsx:105
msgid "added a member to the card" msgid "added a member to the card"
msgstr "added a member to the card" msgstr "added a member to the card"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:182 #: src/views/card/components/ActivityList.tsx:181
msgid "added checklist <0>{0}</0>" msgid "added checklist <0>{0}</0>"
msgstr "added checklist <0>{0}</0>" msgstr "added checklist <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:206 #: src/views/card/components/ActivityList.tsx:205
msgid "added checklist item <0>{0}</0>" msgid "added checklist item <0>{0}</0>"
msgstr "added checklist item <0>{0}</0>" msgstr "added checklist item <0>{0}</0>"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:166 #: src/views/card/components/ActivityList.tsx:165
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "added label <0>{0}</0>" msgstr "added label <0>{0}</0>"
@@ -208,10 +208,6 @@ msgstr "Admin roles"
msgid "All systems operational" msgid "All systems operational"
msgstr "All systems operational" msgstr "All systems operational"
#: src/views/settings/components/UpdateWorkspaceEmailVisibilityForm.tsx:42
msgid "Allow workspace members to see each other's email addresses"
msgstr "Allow workspace members to see each other's email addresses"
#: src/views/auth/signup/index.tsx:88 #: src/views/auth/signup/index.tsx:88
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Already have an account? <0><1>Sign in</1></0>" msgstr "Already have an account? <0><1>Sign in</1></0>"
@@ -307,7 +303,7 @@ msgstr "Are you sure you want to delete your account?"
#~ msgstr "around the world" #~ msgstr "around the world"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:146 #: src/views/card/components/ActivityList.tsx:145
msgid "assigned <0>{0}</0> to the card" msgid "assigned <0>{0}</0> to the card"
msgstr "assigned <0>{0}</0> to the card" msgstr "assigned <0>{0}</0> to the card"
@@ -361,9 +357,9 @@ msgstr "Billing portal"
msgid "Blog Post" msgid "Blog Post"
msgstr "Blog Post" msgstr "Blog Post"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/card/index.tsx:273 #: src/views/card/index.tsx:273
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
msgid "Board" msgid "Board"
msgstr "Board" msgstr "Board"
@@ -389,7 +385,7 @@ msgstr "Board name cannot exceed 100 characters"
msgid "Board name is required" msgid "Board name is required"
msgstr "Board name is required" msgstr "Board name is required"
#: src/views/public/board/index.tsx:176 #: src/views/public/board/index.tsx:166
msgid "Board not found" msgid "Board not found"
msgstr "Board not found" msgstr "Board not found"
@@ -405,7 +401,7 @@ msgstr "Board URL can only contain letters, numbers, and hyphens"
msgid "Board URL cannot exceed 60 characters" msgid "Board URL cannot exceed 60 characters"
msgstr "Board URL cannot exceed 60 characters" msgstr "Board URL cannot exceed 60 characters"
#: src/views/public/board/index.tsx:86 #: src/views/public/board/index.tsx:80
msgid "Board URL copied to clipboard" msgid "Board URL copied to clipboard"
msgstr "Board URL copied to clipboard" msgstr "Board URL copied to clipboard"
@@ -422,7 +418,7 @@ msgstr "Board visibility"
msgid "Board visibility updated" msgid "Board visibility updated"
msgstr "Board visibility updated" msgstr "Board visibility updated"
#: src/components/SideNavigation.tsx:98 #: src/components/SideNavigation.tsx:97
msgid "Boards" msgid "Boards"
msgstr "Boards" msgstr "Boards"
@@ -449,7 +445,7 @@ msgstr "Bug Report"
#: src/components/DeleteLabelConfirmation.tsx:49 #: src/components/DeleteLabelConfirmation.tsx:49
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176
#: src/views/board/components/DeleteBoardConfirmation.tsx:44 #: src/views/board/components/DeleteBoardConfirmation.tsx:44
#: src/views/card/components/Comment.tsx:163 #: src/views/card/components/Comment.tsx:159
#: src/views/card/components/DeleteCardConfirmation.tsx:86 #: src/views/card/components/DeleteCardConfirmation.tsx:86
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64 #: src/views/card/components/DeleteChecklistConfirmation.tsx:64
#: src/views/card/components/DeleteCommentConfirmation.tsx:77 #: src/views/card/components/DeleteCommentConfirmation.tsx:77
@@ -475,8 +471,8 @@ msgstr "Card not found"
msgid "Card title" msgid "Card title"
msgstr "Card title" msgstr "Card title"
#: src/views/settings/AccountSettings.tsx:77 #: src/views/settings/AccountSettings.tsx:70
#: src/views/settings/AccountSettings.tsx:87 #: src/views/settings/AccountSettings.tsx:80
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
msgid "Change Password" msgid "Change Password"
@@ -486,12 +482,12 @@ msgstr "Change Password"
#~ msgid "Change the language of the app." #~ msgid "Change the language of the app."
#~ msgstr "Change the language of the app." #~ msgstr "Change the language of the app."
#: src/views/settings/AccountSettings.tsx:52 #: src/views/settings/AccountSettings.tsx:45
msgid "Change your language preferences." msgid "Change your language preferences."
msgstr "Change your language preferences." msgstr "Change your language preferences."
#: src/views/card/components/ActivityList.tsx:256 #: src/views/card/components/ActivityList.tsx:255
#: src/views/card/components/ActivityList.tsx:270 #: src/views/card/components/ActivityList.tsx:269
msgid "changed the due date to <0>{formattedDate}</0>" msgid "changed the due date to <0>{formattedDate}</0>"
msgstr "changed the due date to <0>{formattedDate}</0>" msgstr "changed the due date to <0>{formattedDate}</0>"
@@ -565,12 +561,12 @@ msgstr "Complete"
msgid "Complete control and ownership:" msgid "Complete control and ownership:"
msgstr "Complete control and ownership:" msgstr "Complete control and ownership:"
#: src/views/card/components/ActivityList.tsx:113 #: src/views/card/components/ActivityList.tsx:112
msgid "completed a checklist item" msgid "completed a checklist item"
msgstr "completed a checklist item" msgstr "completed a checklist item"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:223 #: src/views/card/components/ActivityList.tsx:222
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "completed checklist item <0>{0}</0>" msgstr "completed checklist item <0>{0}</0>"
@@ -695,8 +691,8 @@ msgstr "Create new key"
msgid "Create new label" msgid "Create new label"
msgstr "Create new label" msgstr "Create new label"
#: src/views/board/index.tsx:71 #: src/views/board/index.tsx:65
#: src/views/board/index.tsx:517 #: src/views/board/index.tsx:507
msgid "Create new list" msgid "Create new list"
msgstr "Create new list" msgstr "Create new list"
@@ -713,7 +709,7 @@ msgstr "Create template"
msgid "Create workspace" msgid "Create workspace"
msgstr "Create workspace" msgstr "Create workspace"
#: src/views/card/components/ActivityList.tsx:100 #: src/views/card/components/ActivityList.tsx:99
msgid "created the card" msgid "created the card"
msgstr "created the card" msgstr "created the card"
@@ -767,7 +763,7 @@ msgstr "Custom workspace URL"
msgid "Customer Support" msgid "Customer Support"
msgstr "Customer Support" msgstr "Customer Support"
#: src/components/UserMenu.tsx:158 #: src/components/UserMenu.tsx:155
msgid "Dark" msgid "Dark"
msgstr "Dark" msgstr "Dark"
@@ -785,8 +781,8 @@ msgstr "Deactivate invite link"
msgid "Delete" msgid "Delete"
msgstr "Delete" msgstr "Delete"
#: src/views/settings/AccountSettings.tsx:59 #: src/views/settings/AccountSettings.tsx:52
#: src/views/settings/AccountSettings.tsx:69 #: src/views/settings/AccountSettings.tsx:62
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
msgid "Delete account" msgid "Delete account"
msgstr "Delete account" msgstr "Delete account"
@@ -799,7 +795,7 @@ msgstr "Delete board"
msgid "Delete card" msgid "Delete card"
msgstr "Delete card" msgstr "Delete card"
#: src/views/card/components/Comment.tsx:95 #: src/views/card/components/Comment.tsx:92
msgid "Delete comment" msgid "Delete comment"
msgstr "Delete comment" msgstr "Delete comment"
@@ -812,26 +808,26 @@ msgid "Delete template"
msgstr "Delete template" msgstr "Delete template"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/WorkspaceSettings.tsx:106 #: src/views/settings/WorkspaceSettings.tsx:97
#: src/views/settings/WorkspaceSettings.tsx:117 #: src/views/settings/WorkspaceSettings.tsx:108
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Delete workspace" msgstr "Delete workspace"
#: src/views/card/components/ActivityList.tsx:110 #: src/views/card/components/ActivityList.tsx:109
msgid "deleted a checklist" msgid "deleted a checklist"
msgstr "deleted a checklist" msgstr "deleted a checklist"
#: src/views/card/components/ActivityList.tsx:115 #: src/views/card/components/ActivityList.tsx:114
msgid "deleted a checklist item" msgid "deleted a checklist item"
msgstr "deleted a checklist item" msgstr "deleted a checklist item"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:198 #: src/views/card/components/ActivityList.tsx:197
msgid "deleted checklist <0>{0}</0>" msgid "deleted checklist <0>{0}</0>"
msgstr "deleted checklist <0>{0}</0>" msgstr "deleted checklist <0>{0}</0>"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:241 #: src/views/card/components/ActivityList.tsx:240
msgid "deleted checklist item <0>{0}</0>" msgid "deleted checklist item <0>{0}</0>"
msgstr "deleted checklist item <0>{0}</0>" msgstr "deleted checklist item <0>{0}</0>"
@@ -879,7 +875,7 @@ msgstr "docs"
msgid "Docs" msgid "Docs"
msgstr "Docs" msgstr "Docs"
#: src/components/UserMenu.tsx:209 #: src/components/UserMenu.tsx:206
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
#: src/views/home/components/Footer.tsx:78 #: src/views/home/components/Footer.tsx:78
#: src/views/home/components/Header.tsx:36 #: src/views/home/components/Header.tsx:36
@@ -932,7 +928,7 @@ msgstr "Edit"
msgid "Edit board URL" msgid "Edit board URL"
msgstr "Edit board URL" msgstr "Edit board URL"
#: src/views/card/components/Comment.tsx:86 #: src/views/card/components/Comment.tsx:83
msgid "Edit comment" msgid "Edit comment"
msgstr "Edit comment" msgstr "Edit comment"
@@ -957,14 +953,9 @@ msgid "email"
msgstr "email" msgstr "email"
#: src/views/members/components/InviteMemberForm.tsx:272 #: src/views/members/components/InviteMemberForm.tsx:272
#: src/views/settings/AccountSettings.tsx:42
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
#: src/views/settings/WorkspaceSettings.tsx:84
msgid "Email visibility"
msgstr "Email visibility"
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
msgid "Enhancement" msgid "Enhancement"
msgstr "Enhancement" msgstr "Enhancement"
@@ -1146,7 +1137,7 @@ msgid "Features"
msgstr "Features" msgstr "Features"
#: src/components/FeedbackModal.tsx:59 #: src/components/FeedbackModal.tsx:59
#: src/components/UserMenu.tsx:217 #: src/components/UserMenu.tsx:214
msgid "Feedback" msgid "Feedback"
msgstr "Feedback" msgstr "Feedback"
@@ -1182,7 +1173,7 @@ msgid "Free"
msgstr "Free" msgstr "Free"
#: src/views/members/components/InviteMemberForm.tsx:333 #: src/views/members/components/InviteMemberForm.tsx:333
#: src/views/members/index.tsx:217 #: src/views/members/index.tsx:208
msgid "Free Plan" msgid "Free Plan"
msgstr "Free Plan" msgstr "Free Plan"
@@ -1226,7 +1217,7 @@ msgstr "Get started by creating a new {0}"
#~ msgid "Get started by creating a new board" #~ msgid "Get started by creating a new board"
#~ msgstr "Get started by creating a new board" #~ msgstr "Get started by creating a new board"
#: src/views/board/index.tsx:509 #: src/views/board/index.tsx:499
msgid "Get started by creating a new list" msgid "Get started by creating a new list"
msgstr "Get started by creating a new list" msgstr "Get started by creating a new list"
@@ -1260,19 +1251,19 @@ msgstr "Go Home"
msgid "Go to app" msgid "Go to app"
msgstr "Go to app" msgstr "Go to app"
#: src/components/SideNavigation.tsx:106 #: src/components/SideNavigation.tsx:105
msgid "Go to boards" msgid "Go to boards"
msgstr "Go to boards" msgstr "Go to boards"
#: src/components/SideNavigation.tsx:130 #: src/components/SideNavigation.tsx:129
msgid "Go to members" msgid "Go to members"
msgstr "Go to members" msgstr "Go to members"
#: src/components/SideNavigation.tsx:142 #: src/components/SideNavigation.tsx:141
msgid "Go to settings" msgid "Go to settings"
msgstr "Go to settings" msgstr "Go to settings"
#: src/components/SideNavigation.tsx:118 #: src/components/SideNavigation.tsx:117
msgid "Go to templates" msgid "Go to templates"
msgstr "Go to templates" msgstr "Go to templates"
@@ -1401,7 +1392,7 @@ msgstr "Invalid email address"
msgid "Invalid invitation" msgid "Invalid invitation"
msgstr "Invalid invitation" msgstr "Invalid invitation"
#: src/views/members/index.tsx:230 #: src/views/members/index.tsx:221
msgid "Invite" msgid "Invite"
msgstr "Invite" msgstr "Invite"
@@ -1486,7 +1477,7 @@ msgstr "Labels & filters"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Labels & Filters" msgstr "Labels & Filters"
#: src/views/settings/AccountSettings.tsx:49 #: src/views/settings/AccountSettings.tsx:42
msgid "Language" msgid "Language"
msgstr "Language" msgstr "Language"
@@ -1495,7 +1486,7 @@ msgstr "Language"
msgid "Launch offer" msgid "Launch offer"
msgstr "Launch offer" msgstr "Launch offer"
#: src/views/members/index.tsx:200 #: src/views/members/index.tsx:191
msgid "Launch offer: Get unlimited members with Pro" msgid "Launch offer: Get unlimited members with Pro"
msgstr "Launch offer: Get unlimited members with Pro" msgstr "Launch offer: Get unlimited members with Pro"
@@ -1520,11 +1511,11 @@ msgstr "Legal"
msgid "License" msgid "License"
msgstr "License" msgstr "License"
#: src/components/UserMenu.tsx:172 #: src/components/UserMenu.tsx:169
msgid "Light" msgid "Light"
msgstr "Light" msgstr "Light"
#: src/views/public/board/index.tsx:84 #: src/views/public/board/index.tsx:78
msgid "Link copied" msgid "Link copied"
msgstr "Link copied" msgstr "Link copied"
@@ -1540,11 +1531,11 @@ msgstr "List name"
msgid "Lists" msgid "Lists"
msgstr "Lists" msgstr "Lists"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Load more activities" msgid "Load more activities"
msgstr "Load more activities" msgstr "Load more activities"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Loading..." msgid "Loading..."
msgstr "Loading..." msgstr "Loading..."
@@ -1552,7 +1543,7 @@ msgstr "Loading..."
msgid "Login | kan.bn" msgid "Login | kan.bn"
msgstr "Login | kan.bn" msgstr "Login | kan.bn"
#: src/components/UserMenu.tsx:227 #: src/components/UserMenu.tsx:224
msgid "Logout" msgid "Logout"
msgstr "Logout" msgstr "Logout"
@@ -1576,12 +1567,12 @@ msgstr "magic link"
msgid "Make template" msgid "Make template"
msgstr "Make template" msgstr "Make template"
#: src/views/card/components/ActivityList.tsx:114 #: src/views/card/components/ActivityList.tsx:113
msgid "marked a checklist item as incomplete" msgid "marked a checklist item as incomplete"
msgstr "marked a checklist item as incomplete" msgstr "marked a checklist item as incomplete"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:232 #: src/views/card/components/ActivityList.tsx:231
msgid "marked checklist item <0>{0}</0> as incomplete" msgid "marked checklist item <0>{0}</0> as incomplete"
msgstr "marked checklist item <0>{0}</0> as incomplete" msgstr "marked checklist item <0>{0}</0> as incomplete"
@@ -1589,16 +1580,16 @@ msgstr "marked checklist item <0>{0}</0> as incomplete"
msgid "Medium Priority" msgid "Medium Priority"
msgstr "Medium Priority" msgstr "Medium Priority"
#: src/components/SideNavigation.tsx:122 #: src/components/SideNavigation.tsx:121
#: src/views/board/components/Filters.tsx:147 #: src/views/board/components/Filters.tsx:147
#: src/views/board/components/NewCardForm.tsx:377 #: src/views/board/components/NewCardForm.tsx:377
#: src/views/card/index.tsx:131 #: src/views/card/index.tsx:131
#: src/views/members/index.tsx:187 #: src/views/members/index.tsx:178
msgid "Members" msgid "Members"
msgstr "Members" msgstr "Members"
#. placeholder {0}: workspace.name ?? t`Workspace` #. placeholder {0}: workspace.name ?? t`Workspace`
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Members | {0}" msgstr "Members | {0}"
@@ -1613,7 +1604,7 @@ msgstr "monthly billing"
#. placeholder {0}: truncate(fromList) #. placeholder {0}: truncate(fromList)
#. placeholder {1}: truncate(toList) #. placeholder {1}: truncate(toList)
#: src/views/card/components/ActivityList.tsx:134 #: src/views/card/components/ActivityList.tsx:133
msgid "moved the card from <0>{0}</0> to<1>{1}</1>" msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
msgstr "moved the card from <0>{0}</0> to<1>{1}</1>" msgstr "moved the card from <0>{0}</0> to<1>{1}</1>"
@@ -1621,7 +1612,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>" #~ msgid "moved the card from <0>{fromList}</0> to<1>{toList}</1>"
#~ msgstr "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:103 #: src/views/card/components/ActivityList.tsx:102
msgid "moved the card to another list" msgid "moved the card to another list"
msgstr "moved the card to another list" msgstr "moved the card to another list"
@@ -1678,7 +1669,7 @@ msgid "New label"
msgstr "New label" msgstr "New label"
#: src/views/board/components/NewListForm.tsx:113 #: src/views/board/components/NewListForm.tsx:113
#: src/views/board/index.tsx:476 #: src/views/board/index.tsx:470
msgid "New list" msgid "New list"
msgstr "New list" msgstr "New list"
@@ -1747,7 +1738,7 @@ msgstr "No download URL available for this attachment."
msgid "No keyboard shortcuts registered." msgid "No keyboard shortcuts registered."
msgstr "No keyboard shortcuts registered." msgstr "No keyboard shortcuts registered."
#: src/views/board/index.tsx:506 #: src/views/board/index.tsx:496
msgid "No lists" msgid "No lists"
msgstr "No lists" msgstr "No lists"
@@ -1763,11 +1754,11 @@ msgstr "Offer"
msgid "Onboarding" msgid "Onboarding"
msgstr "Onboarding" msgstr "Onboarding"
#: src/views/settings/AccountSettings.tsx:62 #: src/views/settings/AccountSettings.tsx:55
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Once you delete your account, there is no going back. This action cannot be undone." msgstr "Once you delete your account, there is no going back. This action cannot be undone."
#: src/views/settings/WorkspaceSettings.tsx:109 #: src/views/settings/WorkspaceSettings.tsx:100
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Once you delete your workspace, there is no going back. This action cannot be undone." msgstr "Once you delete your workspace, there is no going back. This action cannot be undone."
@@ -1837,7 +1828,7 @@ msgstr "Password must be at least 8 characters"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Passwords do not match" msgstr "Passwords do not match"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Paused" msgid "Paused"
msgstr "Paused" msgstr "Paused"
@@ -1846,7 +1837,7 @@ msgstr "Paused"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Payment frequency" msgstr "Payment frequency"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Pending" msgid "Pending"
msgstr "Pending" msgstr "Pending"
@@ -1903,15 +1894,15 @@ msgstr "Please select a file to upload."
#: src/views/board/components/NewTemplateForm.tsx:77 #: src/views/board/components/NewTemplateForm.tsx:77
#: src/views/board/components/UpdateBoardSlugForm.tsx:73 #: src/views/board/components/UpdateBoardSlugForm.tsx:73
#: src/views/board/components/VisibilityButton.tsx:54 #: src/views/board/components/VisibilityButton.tsx:54
#: src/views/board/index.tsx:177 #: src/views/board/index.tsx:171
#: src/views/board/index.tsx:233 #: src/views/board/index.tsx:227
#: src/views/boards/components/ImportBoardsForm.tsx:205 #: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/card/components/AttachmentThumbnails.tsx:74 #: src/views/card/components/AttachmentThumbnails.tsx:74
#: src/views/card/components/ChecklistItemRow.tsx:69 #: src/views/card/components/ChecklistItemRow.tsx:69
#: src/views/card/components/ChecklistItemRow.tsx:97 #: src/views/card/components/ChecklistItemRow.tsx:97
#: src/views/card/components/ChecklistNameInput.tsx:47 #: src/views/card/components/ChecklistNameInput.tsx:47
#: src/views/card/components/Checklists.tsx:81 #: src/views/card/components/Checklists.tsx:81
#: src/views/card/components/Comment.tsx:68 #: src/views/card/components/Comment.tsx:65
#: src/views/card/components/DeleteCardConfirmation.tsx:52 #: src/views/card/components/DeleteCardConfirmation.tsx:52
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38 #: src/views/card/components/DeleteChecklistConfirmation.tsx:38
#: src/views/card/components/DeleteCommentConfirmation.tsx:46 #: src/views/card/components/DeleteCommentConfirmation.tsx:46
@@ -1971,7 +1962,7 @@ msgstr "Privacy policy"
msgid "Private" msgid "Private"
msgstr "Private" msgstr "Private"
#: src/views/members/index.tsx:214 #: src/views/members/index.tsx:205
msgid "Pro Plan" msgid "Pro Plan"
msgstr "Pro Plan" msgstr "Pro Plan"
@@ -2019,25 +2010,25 @@ msgstr "Remote"
msgid "Remove" msgid "Remove"
msgstr "Remove" msgstr "Remove"
#: src/views/members/index.tsx:157 #: src/views/members/index.tsx:148
msgid "Remove member" msgid "Remove member"
msgstr "Remove member" msgstr "Remove member"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:92 #: src/views/card/components/ActivityList.tsx:91
msgid "removed {0} labels: <0>{labelList}</0>" msgid "removed {0} labels: <0>{labelList}</0>"
msgstr "removed {0} labels: <0>{labelList}</0>" msgstr "removed {0} labels: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:105 #: src/views/card/components/ActivityList.tsx:104
msgid "removed a label from the card" msgid "removed a label from the card"
msgstr "removed a label from the card" msgstr "removed a label from the card"
#: src/views/card/components/ActivityList.tsx:107 #: src/views/card/components/ActivityList.tsx:106
msgid "removed a member from the card" msgid "removed a member from the card"
msgstr "removed a member from the card" msgstr "removed a member from the card"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:174 #: src/views/card/components/ActivityList.tsx:173
msgid "removed label <0>{0}</0>" msgid "removed label <0>{0}</0>"
msgstr "removed label <0>{0}</0>" msgstr "removed label <0>{0}</0>"
@@ -2045,22 +2036,22 @@ msgstr "removed label <0>{0}</0>"
#~ msgid "removed label <0>{label}</0>" #~ msgid "removed label <0>{label}</0>"
#~ msgstr "removed label <0>{label}</0>" #~ msgstr "removed label <0>{label}</0>"
#: src/views/card/components/ActivityList.tsx:118 #: src/views/card/components/ActivityList.tsx:117
#: src/views/card/components/ActivityList.tsx:277 #: src/views/card/components/ActivityList.tsx:276
msgid "removed the due date" msgid "removed the due date"
msgstr "removed the due date" msgstr "removed the due date"
#: src/views/card/components/ActivityList.tsx:109 #: src/views/card/components/ActivityList.tsx:108
msgid "renamed a checklist" msgid "renamed a checklist"
msgstr "renamed a checklist" msgstr "renamed a checklist"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:190 #: src/views/card/components/ActivityList.tsx:189
msgid "renamed checklist <0>{0}</0>" msgid "renamed checklist <0>{0}</0>"
msgstr "renamed checklist <0>{0}</0>" msgstr "renamed checklist <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:214 #: src/views/card/components/ActivityList.tsx:213
msgid "renamed checklist item to <0>{0}</0>" msgid "renamed checklist item to <0>{0}</0>"
msgstr "renamed checklist item to <0>{0}</0>" msgstr "renamed checklist item to <0>{0}</0>"
@@ -2094,7 +2085,7 @@ msgstr "Review"
msgid "Roadmap" msgid "Roadmap"
msgstr "Roadmap" msgstr "Roadmap"
#: src/views/members/index.tsx:252 #: src/views/members/index.tsx:243
msgid "Role" msgid "Role"
msgstr "Role" msgstr "Role"
@@ -2104,7 +2095,7 @@ msgid "Run on your own infrastructure"
msgstr "Run on your own infrastructure" msgstr "Run on your own infrastructure"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183
#: src/views/card/components/Comment.tsx:170 #: src/views/card/components/Comment.tsx:166
#: src/views/settings/components/Avatar.tsx:309 #: src/views/settings/components/Avatar.tsx:309
msgid "Save" msgid "Save"
msgstr "Save" msgstr "Save"
@@ -2142,7 +2133,7 @@ msgstr "Self Host"
msgid "Self host with Github" msgid "Self host with Github"
msgstr "Self host with Github" msgstr "Self host with Github"
#: src/views/card/components/ActivityList.tsx:143 #: src/views/card/components/ActivityList.tsx:142
msgid "self-assigned the card" msgid "self-assigned the card"
msgstr "self-assigned the card" msgstr "self-assigned the card"
@@ -2166,12 +2157,12 @@ msgstr "Senior"
msgid "Set due date" msgid "Set due date"
msgstr "Set due date" msgstr "Set due date"
#: src/views/card/components/ActivityList.tsx:116 #: src/views/card/components/ActivityList.tsx:115
msgid "set the due date" msgid "set the due date"
msgstr "set the due date" msgstr "set the due date"
#: src/components/SettingsLayout.tsx:82 #: src/components/SettingsLayout.tsx:82
#: src/components/SideNavigation.tsx:134 #: src/components/SideNavigation.tsx:133
msgid "Settings" msgid "Settings"
msgstr "Settings" msgstr "Settings"
@@ -2195,7 +2186,7 @@ msgstr "Settings | Billing"
msgid "Settings | Integrations" msgid "Settings | Integrations"
msgstr "Settings | Integrations" msgstr "Settings | Integrations"
#: src/views/settings/WorkspaceSettings.tsx:55 #: src/views/settings/WorkspaceSettings.tsx:54
msgid "Settings | Workspace" msgid "Settings | Workspace"
msgstr "Settings | Workspace" msgstr "Settings | Workspace"
@@ -2203,7 +2194,7 @@ msgstr "Settings | Workspace"
#~ msgid "Share invite link" #~ msgid "Share invite link"
#~ msgstr "Share invite link" #~ msgstr "Share invite link"
#: src/components/UserMenu.tsx:187 #: src/components/UserMenu.tsx:184
msgid "Shortcuts" msgid "Shortcuts"
msgstr "Shortcuts" msgstr "Shortcuts"
@@ -2275,7 +2266,7 @@ msgstr "Success"
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:" msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Supercharge your workspace for just $29/month. Here's what you'll get:" msgstr "Supercharge your workspace for just $29/month. Here's what you'll get:"
#: src/components/UserMenu.tsx:198 #: src/components/UserMenu.tsx:195
msgid "Support" msgid "Support"
msgstr "Support" msgstr "Support"
@@ -2284,12 +2275,12 @@ msgstr "Support"
msgid "Support the development of the project" msgid "Support the development of the project"
msgstr "Support the development of the project" msgstr "Support the development of the project"
#: src/components/UserMenu.tsx:144 #: src/components/UserMenu.tsx:141
msgid "System" msgid "System"
msgstr "System" msgstr "System"
#: src/views/members/components/InviteMemberForm.tsx:322 #: src/views/members/components/InviteMemberForm.tsx:322
#: src/views/members/index.tsx:216 #: src/views/members/index.tsx:207
msgid "Team Plan" msgid "Team Plan"
msgstr "Team Plan" msgstr "Team Plan"
@@ -2299,8 +2290,8 @@ msgstr "Team Plan"
msgid "Teams" msgid "Teams"
msgstr "Teams" msgstr "Teams"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/board/index.tsx:431 #: src/views/board/index.tsx:425
msgid "Template" msgid "Template"
msgstr "Template" msgstr "Template"
@@ -2320,7 +2311,7 @@ msgstr "Template name cannot exceed 100 characters"
msgid "Template name is required" msgid "Template name is required"
msgstr "Template name is required" msgstr "Template name is required"
#: src/components/SideNavigation.tsx:110 #: src/components/SideNavigation.tsx:109
#: src/views/home/components/Features.tsx:115 #: src/views/home/components/Features.tsx:115
msgid "Templates" msgid "Templates"
msgstr "Templates" msgstr "Templates"
@@ -2354,7 +2345,7 @@ msgstr "The open source <0/> alternative to Trello"
msgid "The visibility of your board has been set to {0}." msgid "The visibility of your board has been set to {0}."
msgstr "The visibility of your board has been set to {0}." msgstr "The visibility of your board has been set to {0}."
#: src/components/UserMenu.tsx:131 #: src/components/UserMenu.tsx:128
msgid "Theme" msgid "Theme"
msgstr "Theme" msgstr "Theme"
@@ -2374,7 +2365,7 @@ msgstr "This action can't be undone."
msgid "This API key will only be shown once. Please save it in a secure location." 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." msgstr "This API key will only be shown once. Please save it in a secure location."
#: src/views/public/board/index.tsx:179 #: src/views/public/board/index.tsx:169
msgid "This board is private or does not exist" msgid "This board is private or does not exist"
msgstr "This board is private or does not exist" msgstr "This board is private or does not exist"
@@ -2525,7 +2516,7 @@ msgstr "Unable to update board URL"
msgid "Unable to update board visibility" msgid "Unable to update board visibility"
msgstr "Unable to update board visibility" msgstr "Unable to update board visibility"
#: src/views/board/index.tsx:232 #: src/views/board/index.tsx:226
#: src/views/card/index.tsx:187 #: src/views/card/index.tsx:187
msgid "Unable to update card" msgid "Unable to update card"
msgstr "Unable to update card" msgstr "Unable to update card"
@@ -2538,7 +2529,7 @@ msgstr "Unable to update checklist"
msgid "Unable to update checklist item" msgid "Unable to update checklist item"
msgstr "Unable to update checklist item" msgstr "Unable to update checklist item"
#: src/views/card/components/Comment.tsx:67 #: src/views/card/components/Comment.tsx:64
msgid "Unable to update comment" msgid "Unable to update comment"
msgstr "Unable to update comment" msgstr "Unable to update comment"
@@ -2550,7 +2541,7 @@ msgstr "Unable to update due date"
msgid "Unable to update labels" msgid "Unable to update labels"
msgstr "Unable to update labels" msgstr "Unable to update labels"
#: src/views/board/index.tsx:176 #: src/views/board/index.tsx:170
#: src/views/card/components/ListSelector.tsx:52 #: src/views/card/components/ListSelector.tsx:52
msgid "Unable to update list" msgid "Unable to update list"
msgstr "Unable to update list" msgstr "Unable to update list"
@@ -2560,7 +2551,7 @@ msgid "Unable to update members"
msgstr "Unable to update members" msgstr "Unable to update members"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:157 #: src/views/card/components/ActivityList.tsx:156
msgid "unassigned <0>{0}</0> from the card" msgid "unassigned <0>{0}</0> from the card"
msgstr "unassigned <0>{0}</0> from the card" msgstr "unassigned <0>{0}</0> from the card"
@@ -2568,7 +2559,7 @@ msgstr "unassigned <0>{0}</0> from the card"
#~ msgid "unassigned <0>{memberName}</0> from the card" #~ msgid "unassigned <0>{memberName}</0> from the card"
#~ msgstr "unassigned <0>{memberName}</0> from the card" #~ msgstr "unassigned <0>{memberName}</0> from the card"
#: src/views/card/components/ActivityList.tsx:154 #: src/views/card/components/ActivityList.tsx:153
msgid "unassigned themselves from the card" msgid "unassigned themselves from the card"
msgstr "unassigned themselves from the card" msgstr "unassigned themselves from the card"
@@ -2627,24 +2618,24 @@ msgstr "Update"
msgid "Update label" msgid "Update label"
msgstr "Update label" msgstr "Update label"
#: src/views/card/components/ActivityList.tsx:112 #: src/views/card/components/ActivityList.tsx:111
msgid "updated a checklist item" msgid "updated a checklist item"
msgstr "updated a checklist item" msgstr "updated a checklist item"
#: src/views/card/components/ActivityList.tsx:102 #: src/views/card/components/ActivityList.tsx:101
msgid "updated the description" msgid "updated the description"
msgstr "updated the description" msgstr "updated the description"
#: src/views/card/components/ActivityList.tsx:117 #: src/views/card/components/ActivityList.tsx:116
msgid "updated the due date" msgid "updated the due date"
msgstr "updated the due date" msgstr "updated the due date"
#: src/views/card/components/ActivityList.tsx:101 #: src/views/card/components/ActivityList.tsx:100
msgid "updated the title" msgid "updated the title"
msgstr "updated the title" msgstr "updated the title"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:126 #: src/views/card/components/ActivityList.tsx:125
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "updated the title to <0>{0}</0>" msgstr "updated the title to <0>{0}</0>"
@@ -2656,9 +2647,9 @@ msgstr "updated the title to <0>{0}</0>"
#~ msgid "Upgrade" #~ msgid "Upgrade"
#~ msgstr "Upgrade" #~ msgstr "Upgrade"
#: src/components/SideNavigation.tsx:239 #: src/components/SideNavigation.tsx:237
#: src/views/settings/components/UpgradeToProConfirmation.tsx:53 #: src/views/settings/components/UpgradeToProConfirmation.tsx:53
#: src/views/settings/WorkspaceSettings.tsx:99 #: src/views/settings/WorkspaceSettings.tsx:90
msgid "Upgrade to Pro" msgid "Upgrade to Pro"
msgstr "Upgrade to Pro" msgstr "Upgrade to Pro"
@@ -2699,7 +2690,7 @@ msgstr "URL must be at least 3 characters long"
msgid "Use template" msgid "Use template"
msgstr "Use template" msgstr "Use template"
#: src/views/members/index.tsx:246 #: src/views/members/index.tsx:237
msgid "User" msgid "User"
msgstr "User" msgstr "User"
@@ -2724,7 +2715,7 @@ msgstr "View and manage your billing and subscription."
msgid "View docs" msgid "View docs"
msgstr "View docs" msgstr "View docs"
#: src/views/public/board/index.tsx:148 #: src/views/public/board/index.tsx:142
msgid "View only" msgid "View only"
msgstr "View only" msgstr "View only"
@@ -2732,7 +2723,7 @@ msgstr "View only"
msgid "View our roadmap." msgid "View our roadmap."
msgstr "View our roadmap." msgstr "View our roadmap."
#: src/views/public/board/index.tsx:182 #: src/views/public/board/index.tsx:172
msgid "View workspace" msgid "View workspace"
msgstr "View workspace" msgstr "View workspace"
@@ -2785,10 +2776,10 @@ msgid "Why make an open source Trello?"
msgstr "Why make an open source Trello?" msgstr "Why make an open source Trello?"
#: src/components/SettingsLayout.tsx:39 #: src/components/SettingsLayout.tsx:39
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/boards/index.tsx:33 #: src/views/boards/index.tsx:33
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
#: src/views/public/boards/index.tsx:66 #: src/views/public/boards/index.tsx:66
msgid "Workspace" msgid "Workspace"
msgstr "Workspace" msgstr "Workspace"
@@ -2801,7 +2792,7 @@ msgstr "Workspace created successfully. You can upgrade later in settings."
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Workspace deleted" msgstr "Workspace deleted"
#: src/views/settings/WorkspaceSettings.tsx:76 #: src/views/settings/WorkspaceSettings.tsx:75
msgid "Workspace description" msgid "Workspace description"
msgstr "Workspace description" msgstr "Workspace description"
@@ -2824,7 +2815,7 @@ msgid "Workspace members"
msgstr "Workspace members" msgstr "Workspace members"
#: src/components/NewWorkspaceForm.tsx:262 #: src/components/NewWorkspaceForm.tsx:262
#: src/views/settings/WorkspaceSettings.tsx:59 #: src/views/settings/WorkspaceSettings.tsx:58
msgid "Workspace name" msgid "Workspace name"
msgstr "Workspace name" msgstr "Workspace name"
@@ -2853,7 +2844,7 @@ msgstr "Workspace name updated"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Workspace slug updated" msgstr "Workspace slug updated"
#: src/views/settings/WorkspaceSettings.tsx:67 #: src/views/settings/WorkspaceSettings.tsx:66
msgid "Workspace URL" msgid "Workspace URL"
msgstr "Workspace URL" msgstr "Workspace URL"
@@ -2874,7 +2865,7 @@ msgstr "Yearly"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgstr "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
#: src/views/settings/AccountSettings.tsx:80 #: src/views/settings/AccountSettings.tsx:73
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "You are about to change your password." msgstr "You are about to change your password."

File diff suppressed because one or more lines are too long

View File

@@ -13,7 +13,7 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"Plural-Forms: \n" "Plural-Forms: \n"
#: src/views/card/components/Comment.tsx:128 #: src/views/card/components/Comment.tsx:124
msgid " (edited)" msgid " (edited)"
msgstr " (editado)" msgstr " (editado)"
@@ -41,7 +41,7 @@ msgid "{0} labels"
msgstr "{0} etiquetas" msgstr "{0} etiquetas"
#. placeholder {0}: isTemplate ? "Template" : "Board" #. placeholder {0}: isTemplate ? "Template" : "Board"
#: src/views/board/index.tsx:422 #: src/views/board/index.tsx:416
msgid "{0} not found" msgid "{0} not found"
msgstr "{0} no encontrado" msgstr "{0} no encontrado"
@@ -100,7 +100,7 @@ msgstr "Registros de actividad"
msgid "Add a card" msgid "Add a card"
msgstr "Añadir una tarjeta" msgstr "Añadir una tarjeta"
#: src/views/card/components/Comment.tsx:151 #: src/views/card/components/Comment.tsx:147
#: src/views/card/components/NewCommentForm.tsx:55 #: src/views/card/components/NewCommentForm.tsx:55
msgid "Add a comment..." msgid "Add a comment..."
msgstr "Añadir un comentario..." msgstr "Añadir un comentario..."
@@ -132,38 +132,38 @@ msgid "Add member"
msgstr "Añadir miembro" msgstr "Añadir miembro"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:78 #: src/views/card/components/ActivityList.tsx:77
msgid "added {0} labels: <0>{labelList}</0>" msgid "added {0} labels: <0>{labelList}</0>"
msgstr "añadió {0} etiquetas: <0>{labelList}</0>" msgstr "añadió {0} etiquetas: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:108 #: src/views/card/components/ActivityList.tsx:107
msgid "added a checklist" msgid "added a checklist"
msgstr "añadió una lista de verificación" msgstr "añadió una lista de verificación"
#: src/views/card/components/ActivityList.tsx:111 #: src/views/card/components/ActivityList.tsx:110
msgid "added a checklist item" msgid "added a checklist item"
msgstr "añadió un elemento a la lista de verificación" msgstr "añadió un elemento a la lista de verificación"
#: src/views/card/components/ActivityList.tsx:104 #: src/views/card/components/ActivityList.tsx:103
msgid "added a label to the card" msgid "added a label to the card"
msgstr "añadió una etiqueta a la tarjeta" msgstr "añadió una etiqueta a la tarjeta"
#: src/views/card/components/ActivityList.tsx:106 #: src/views/card/components/ActivityList.tsx:105
msgid "added a member to the card" msgid "added a member to the card"
msgstr "añadió un miembro a la tarjeta" msgstr "añadió un miembro a la tarjeta"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:182 #: src/views/card/components/ActivityList.tsx:181
msgid "added checklist <0>{0}</0>" msgid "added checklist <0>{0}</0>"
msgstr "añadió la lista de verificación <0>{0}</0>" msgstr "añadió la lista de verificación <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:206 #: src/views/card/components/ActivityList.tsx:205
msgid "added checklist item <0>{0}</0>" msgid "added checklist item <0>{0}</0>"
msgstr "añadió el elemento <0>{0}</0> a la lista de verificación" msgstr "añadió el elemento <0>{0}</0> a la lista de verificación"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:166 #: src/views/card/components/ActivityList.tsx:165
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "añadió la etiqueta <0>{0}</0>" msgstr "añadió la etiqueta <0>{0}</0>"
@@ -184,10 +184,6 @@ msgstr "Roles de administrador"
msgid "All systems operational" msgid "All systems operational"
msgstr "Todos los sistemas operativos" msgstr "Todos los sistemas operativos"
#: src/views/settings/components/UpdateWorkspaceEmailVisibilityForm.tsx:42
msgid "Allow workspace members to see each other's email addresses"
msgstr "Permitir que los miembros del espacio de trabajo vean las direcciones de correo electrónico de los demás"
#: src/views/auth/signup/index.tsx:88 #: src/views/auth/signup/index.tsx:88
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "¿Ya tienes una cuenta? <0><1>Iniciar sesión</1></0>" msgstr "¿Ya tienes una cuenta? <0><1>Iniciar sesión</1></0>"
@@ -275,7 +271,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "¿Estás seguro de que quieres eliminar tu cuenta?" msgstr "¿Estás seguro de que quieres eliminar tu cuenta?"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:146 #: src/views/card/components/ActivityList.tsx:145
msgid "assigned <0>{0}</0> to the card" msgid "assigned <0>{0}</0> to the card"
msgstr "asignó <0>{0}</0> a la tarjeta" msgstr "asignó <0>{0}</0> a la tarjeta"
@@ -321,9 +317,9 @@ msgstr "Portal de facturación"
msgid "Blog Post" msgid "Blog Post"
msgstr "Entrada de blog" msgstr "Entrada de blog"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/card/index.tsx:273 #: src/views/card/index.tsx:273
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
msgid "Board" msgid "Board"
msgstr "Tablero" msgstr "Tablero"
@@ -340,7 +336,7 @@ msgstr "El nombre del tablero no puede exceder los 100 caracteres"
msgid "Board name is required" msgid "Board name is required"
msgstr "El nombre del tablero es obligatorio" msgstr "El nombre del tablero es obligatorio"
#: src/views/public/board/index.tsx:176 #: src/views/public/board/index.tsx:166
msgid "Board not found" msgid "Board not found"
msgstr "Tablero no encontrado" msgstr "Tablero no encontrado"
@@ -356,7 +352,7 @@ msgstr "La URL del tablero solo puede contener letras, números y guiones"
msgid "Board URL cannot exceed 60 characters" msgid "Board URL cannot exceed 60 characters"
msgstr "La URL del tablero no puede exceder los 60 caracteres" msgstr "La URL del tablero no puede exceder los 60 caracteres"
#: src/views/public/board/index.tsx:86 #: src/views/public/board/index.tsx:80
msgid "Board URL copied to clipboard" msgid "Board URL copied to clipboard"
msgstr "URL del tablero copiada al portapapeles" msgstr "URL del tablero copiada al portapapeles"
@@ -373,7 +369,7 @@ msgstr "Visibilidad del tablero"
msgid "Board visibility updated" msgid "Board visibility updated"
msgstr "Visibilidad del tablero actualizada" msgstr "Visibilidad del tablero actualizada"
#: src/components/SideNavigation.tsx:98 #: src/components/SideNavigation.tsx:97
msgid "Boards" msgid "Boards"
msgstr "Tableros" msgstr "Tableros"
@@ -392,7 +388,7 @@ msgstr "Informe de error"
#: src/components/DeleteLabelConfirmation.tsx:49 #: src/components/DeleteLabelConfirmation.tsx:49
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176
#: src/views/board/components/DeleteBoardConfirmation.tsx:44 #: src/views/board/components/DeleteBoardConfirmation.tsx:44
#: src/views/card/components/Comment.tsx:163 #: src/views/card/components/Comment.tsx:159
#: src/views/card/components/DeleteCardConfirmation.tsx:86 #: src/views/card/components/DeleteCardConfirmation.tsx:86
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64 #: src/views/card/components/DeleteChecklistConfirmation.tsx:64
#: src/views/card/components/DeleteCommentConfirmation.tsx:77 #: src/views/card/components/DeleteCommentConfirmation.tsx:77
@@ -418,19 +414,19 @@ msgstr "Tarjeta no encontrada"
msgid "Card title" msgid "Card title"
msgstr "Título de la tarjeta" msgstr "Título de la tarjeta"
#: src/views/settings/AccountSettings.tsx:77 #: src/views/settings/AccountSettings.tsx:70
#: src/views/settings/AccountSettings.tsx:87 #: src/views/settings/AccountSettings.tsx:80
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
msgid "Change Password" msgid "Change Password"
msgstr "Cambiar contraseña" msgstr "Cambiar contraseña"
#: src/views/settings/AccountSettings.tsx:52 #: src/views/settings/AccountSettings.tsx:45
msgid "Change your language preferences." msgid "Change your language preferences."
msgstr "Cambia tus preferencias de idioma." msgstr "Cambia tus preferencias de idioma."
#: src/views/card/components/ActivityList.tsx:256 #: src/views/card/components/ActivityList.tsx:255
#: src/views/card/components/ActivityList.tsx:270 #: src/views/card/components/ActivityList.tsx:269
msgid "changed the due date to <0>{formattedDate}</0>" msgid "changed the due date to <0>{formattedDate}</0>"
msgstr "cambió la fecha de vencimiento a <0>{formattedDate}</0>" msgstr "cambió la fecha de vencimiento a <0>{formattedDate}</0>"
@@ -504,12 +500,12 @@ msgstr "Completado"
msgid "Complete control and ownership:" msgid "Complete control and ownership:"
msgstr "Control y propiedad completos:" msgstr "Control y propiedad completos:"
#: src/views/card/components/ActivityList.tsx:113 #: src/views/card/components/ActivityList.tsx:112
msgid "completed a checklist item" msgid "completed a checklist item"
msgstr "completó un elemento de la lista de verificación" msgstr "completó un elemento de la lista de verificación"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:223 #: src/views/card/components/ActivityList.tsx:222
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "completó el elemento <0>{0}</0> de la lista de verificación" msgstr "completó el elemento <0>{0}</0> de la lista de verificación"
@@ -618,8 +614,8 @@ msgstr "Crear nueva clave"
msgid "Create new label" msgid "Create new label"
msgstr "Crear nueva etiqueta" msgstr "Crear nueva etiqueta"
#: src/views/board/index.tsx:71 #: src/views/board/index.tsx:65
#: src/views/board/index.tsx:517 #: src/views/board/index.tsx:507
msgid "Create new list" msgid "Create new list"
msgstr "Crear nueva lista" msgstr "Crear nueva lista"
@@ -632,7 +628,7 @@ msgstr "Crear plantilla"
msgid "Create workspace" msgid "Create workspace"
msgstr "Crear espacio de trabajo" msgstr "Crear espacio de trabajo"
#: src/views/card/components/ActivityList.tsx:100 #: src/views/card/components/ActivityList.tsx:99
msgid "created the card" msgid "created the card"
msgstr "creó la tarjeta" msgstr "creó la tarjeta"
@@ -678,7 +674,7 @@ msgstr "URL personalizada del espacio de trabajo"
msgid "Customer Support" msgid "Customer Support"
msgstr "Atención al cliente" msgstr "Atención al cliente"
#: src/components/UserMenu.tsx:158 #: src/components/UserMenu.tsx:155
msgid "Dark" msgid "Dark"
msgstr "Oscuro" msgstr "Oscuro"
@@ -696,8 +692,8 @@ msgstr "Desactivar enlace de invitación"
msgid "Delete" msgid "Delete"
msgstr "Eliminar" msgstr "Eliminar"
#: src/views/settings/AccountSettings.tsx:59 #: src/views/settings/AccountSettings.tsx:52
#: src/views/settings/AccountSettings.tsx:69 #: src/views/settings/AccountSettings.tsx:62
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
msgid "Delete account" msgid "Delete account"
msgstr "Eliminar cuenta" msgstr "Eliminar cuenta"
@@ -710,7 +706,7 @@ msgstr "Eliminar tablero"
msgid "Delete card" msgid "Delete card"
msgstr "Eliminar tarjeta" msgstr "Eliminar tarjeta"
#: src/views/card/components/Comment.tsx:95 #: src/views/card/components/Comment.tsx:92
msgid "Delete comment" msgid "Delete comment"
msgstr "Eliminar comentario" msgstr "Eliminar comentario"
@@ -723,26 +719,26 @@ msgid "Delete template"
msgstr "Eliminar plantilla" msgstr "Eliminar plantilla"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/WorkspaceSettings.tsx:106 #: src/views/settings/WorkspaceSettings.tsx:97
#: src/views/settings/WorkspaceSettings.tsx:117 #: src/views/settings/WorkspaceSettings.tsx:108
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Eliminar espacio de trabajo" msgstr "Eliminar espacio de trabajo"
#: src/views/card/components/ActivityList.tsx:110 #: src/views/card/components/ActivityList.tsx:109
msgid "deleted a checklist" msgid "deleted a checklist"
msgstr "eliminó una lista de verificación" msgstr "eliminó una lista de verificación"
#: src/views/card/components/ActivityList.tsx:115 #: src/views/card/components/ActivityList.tsx:114
msgid "deleted a checklist item" msgid "deleted a checklist item"
msgstr "eliminó un elemento de la lista de verificación" msgstr "eliminó un elemento de la lista de verificación"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:198 #: src/views/card/components/ActivityList.tsx:197
msgid "deleted checklist <0>{0}</0>" msgid "deleted checklist <0>{0}</0>"
msgstr "eliminó la lista de verificación <0>{0}</0>" msgstr "eliminó la lista de verificación <0>{0}</0>"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:241 #: src/views/card/components/ActivityList.tsx:240
msgid "deleted checklist item <0>{0}</0>" msgid "deleted checklist item <0>{0}</0>"
msgstr "eliminó el elemento <0>{0}</0> de la lista de verificación" msgstr "eliminó el elemento <0>{0}</0> de la lista de verificación"
@@ -790,7 +786,7 @@ msgstr "documentos"
msgid "Docs" msgid "Docs"
msgstr "Documentos" msgstr "Documentos"
#: src/components/UserMenu.tsx:209 #: src/components/UserMenu.tsx:206
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
#: src/views/home/components/Footer.tsx:78 #: src/views/home/components/Footer.tsx:78
#: src/views/home/components/Header.tsx:36 #: src/views/home/components/Header.tsx:36
@@ -843,7 +839,7 @@ msgstr "Editar"
msgid "Edit board URL" msgid "Edit board URL"
msgstr "Editar URL del tablero" msgstr "Editar URL del tablero"
#: src/views/card/components/Comment.tsx:86 #: src/views/card/components/Comment.tsx:83
msgid "Edit comment" msgid "Edit comment"
msgstr "Editar comentario" msgstr "Editar comentario"
@@ -868,14 +864,9 @@ msgid "email"
msgstr "correo electrónico" msgstr "correo electrónico"
#: src/views/members/components/InviteMemberForm.tsx:272 #: src/views/members/components/InviteMemberForm.tsx:272
#: src/views/settings/AccountSettings.tsx:42
msgid "Email" msgid "Email"
msgstr "Correo electrónico" msgstr "Correo electrónico"
#: src/views/settings/WorkspaceSettings.tsx:84
msgid "Email visibility"
msgstr "Visibilidad del correo electrónico"
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
msgid "Enhancement" msgid "Enhancement"
msgstr "Mejora" msgstr "Mejora"
@@ -1057,7 +1048,7 @@ msgid "Features"
msgstr "Características" msgstr "Características"
#: src/components/FeedbackModal.tsx:59 #: src/components/FeedbackModal.tsx:59
#: src/components/UserMenu.tsx:217 #: src/components/UserMenu.tsx:214
msgid "Feedback" msgid "Feedback"
msgstr "Comentarios" msgstr "Comentarios"
@@ -1078,12 +1069,14 @@ msgid "For long-term sustainability, we recognise all good open source projects
msgstr "Para la sostenibilidad a largo plazo, reconocemos que todos los buenos proyectos de código abierto necesitan una fuente de ingresos. La nuestra proviene de la oferta de nube de pago para espacios de trabajo con múltiples usuarios y para slugs de espacio de trabajo personalizados. No hay obligación de usarla, y puedes alojar el software en tu propia infraestructura sin costo alguno." msgstr "Para la sostenibilidad a largo plazo, reconocemos que todos los buenos proyectos de código abierto necesitan una fuente de ingresos. La nuestra proviene de la oferta de nube de pago para espacios de trabajo con múltiples usuarios y para slugs de espacio de trabajo personalizados. No hay obligación de usarla, y puedes alojar el software en tu propia infraestructura sin costo alguno."
#: src/views/pricing/components/Pricing.tsx:32 #: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/PricingTiers.tsx:30
#: src/views/pricing/components/PricingTiers.tsx:30 #: src/views/pricing/components/PricingTiers.tsx:30
msgid "Free" msgid "Free"
msgstr "Gratis" msgstr "Gratis"
#: src/views/members/components/InviteMemberForm.tsx:333 #: src/views/members/components/InviteMemberForm.tsx:333
#: src/views/members/index.tsx:217 #: src/views/members/index.tsx:208
msgid "Free Plan" msgid "Free Plan"
msgstr "Plan gratuito" msgstr "Plan gratuito"
@@ -1123,7 +1116,7 @@ msgstr "Comenzar"
msgid "Get started by creating a new {0}" msgid "Get started by creating a new {0}"
msgstr "Comienza creando un nuevo {0}" msgstr "Comienza creando un nuevo {0}"
#: src/views/board/index.tsx:509 #: src/views/board/index.tsx:499
msgid "Get started by creating a new list" msgid "Get started by creating a new list"
msgstr "Comienza creando una nueva lista" msgstr "Comienza creando una nueva lista"
@@ -1157,19 +1150,19 @@ msgstr "Ir a inicio"
msgid "Go to app" msgid "Go to app"
msgstr "Ir a la aplicación" msgstr "Ir a la aplicación"
#: src/components/SideNavigation.tsx:106 #: src/components/SideNavigation.tsx:105
msgid "Go to boards" msgid "Go to boards"
msgstr "Ir a tableros" msgstr "Ir a tableros"
#: src/components/SideNavigation.tsx:130 #: src/components/SideNavigation.tsx:129
msgid "Go to members" msgid "Go to members"
msgstr "Ir a miembros" msgstr "Ir a miembros"
#: src/components/SideNavigation.tsx:142 #: src/components/SideNavigation.tsx:141
msgid "Go to settings" msgid "Go to settings"
msgstr "Ir a configuración" msgstr "Ir a configuración"
#: src/components/SideNavigation.tsx:118 #: src/components/SideNavigation.tsx:117
msgid "Go to templates" msgid "Go to templates"
msgstr "Ir a plantillas" msgstr "Ir a plantillas"
@@ -1294,7 +1287,7 @@ msgstr "Dirección de correo electrónico no válida"
msgid "Invalid invitation" msgid "Invalid invitation"
msgstr "Invitación inválida" msgstr "Invitación inválida"
#: src/views/members/index.tsx:230 #: src/views/members/index.tsx:221
msgid "Invite" msgid "Invite"
msgstr "Invitar" msgstr "Invitar"
@@ -1375,7 +1368,7 @@ msgstr "Etiquetas y filtros"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Etiquetas y filtros" msgstr "Etiquetas y filtros"
#: src/views/settings/AccountSettings.tsx:49 #: src/views/settings/AccountSettings.tsx:42
msgid "Language" msgid "Language"
msgstr "Idioma" msgstr "Idioma"
@@ -1384,7 +1377,7 @@ msgstr "Idioma"
msgid "Launch offer" msgid "Launch offer"
msgstr "Oferta de lanzamiento" msgstr "Oferta de lanzamiento"
#: src/views/members/index.tsx:200 #: src/views/members/index.tsx:191
msgid "Launch offer: Get unlimited members with Pro" msgid "Launch offer: Get unlimited members with Pro"
msgstr "Oferta de lanzamiento: Obtén miembros ilimitados con Pro" msgstr "Oferta de lanzamiento: Obtén miembros ilimitados con Pro"
@@ -1409,11 +1402,11 @@ msgstr "Legal"
msgid "License" msgid "License"
msgstr "Licencia" msgstr "Licencia"
#: src/components/UserMenu.tsx:172 #: src/components/UserMenu.tsx:169
msgid "Light" msgid "Light"
msgstr "Claro" msgstr "Claro"
#: src/views/public/board/index.tsx:84 #: src/views/public/board/index.tsx:78
msgid "Link copied" msgid "Link copied"
msgstr "Enlace copiado" msgstr "Enlace copiado"
@@ -1429,11 +1422,11 @@ msgstr "Nombre de la lista"
msgid "Lists" msgid "Lists"
msgstr "Listas" msgstr "Listas"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Load more activities" msgid "Load more activities"
msgstr "Cargar más actividades" msgstr "Cargar más actividades"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Loading..." msgid "Loading..."
msgstr "Cargando..." msgstr "Cargando..."
@@ -1441,7 +1434,7 @@ msgstr "Cargando..."
msgid "Login | kan.bn" msgid "Login | kan.bn"
msgstr "Iniciar sesión | kan.bn" msgstr "Iniciar sesión | kan.bn"
#: src/components/UserMenu.tsx:227 #: src/components/UserMenu.tsx:224
msgid "Logout" msgid "Logout"
msgstr "Cerrar sesión" msgstr "Cerrar sesión"
@@ -1465,12 +1458,12 @@ msgstr "enlace mágico"
msgid "Make template" msgid "Make template"
msgstr "Crear plantilla" msgstr "Crear plantilla"
#: src/views/card/components/ActivityList.tsx:114 #: src/views/card/components/ActivityList.tsx:113
msgid "marked a checklist item as incomplete" msgid "marked a checklist item as incomplete"
msgstr "marcó un elemento de la lista de verificación como incompleto" msgstr "marcó un elemento de la lista de verificación como incompleto"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:232 #: src/views/card/components/ActivityList.tsx:231
msgid "marked checklist item <0>{0}</0> as incomplete" msgid "marked checklist item <0>{0}</0> as incomplete"
msgstr "marcó el elemento <0>{0}</0> de la lista de verificación como incompleto" msgstr "marcó el elemento <0>{0}</0> de la lista de verificación como incompleto"
@@ -1478,16 +1471,16 @@ msgstr "marcó el elemento <0>{0}</0> de la lista de verificación como incomple
msgid "Medium Priority" msgid "Medium Priority"
msgstr "Prioridad media" msgstr "Prioridad media"
#: src/components/SideNavigation.tsx:122 #: src/components/SideNavigation.tsx:121
#: src/views/board/components/Filters.tsx:147 #: src/views/board/components/Filters.tsx:147
#: src/views/board/components/NewCardForm.tsx:377 #: src/views/board/components/NewCardForm.tsx:377
#: src/views/card/index.tsx:131 #: src/views/card/index.tsx:131
#: src/views/members/index.tsx:187 #: src/views/members/index.tsx:178
msgid "Members" msgid "Members"
msgstr "Miembros" msgstr "Miembros"
#. placeholder {0}: workspace.name ?? t`Workspace` #. placeholder {0}: workspace.name ?? t`Workspace`
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Miembros | {0}" msgstr "Miembros | {0}"
@@ -1502,11 +1495,11 @@ msgstr "facturación mensual"
#. placeholder {0}: truncate(fromList) #. placeholder {0}: truncate(fromList)
#. placeholder {1}: truncate(toList) #. placeholder {1}: truncate(toList)
#: src/views/card/components/ActivityList.tsx:134 #: src/views/card/components/ActivityList.tsx:133
msgid "moved the card from <0>{0}</0> to<1>{1}</1>" msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
msgstr "movió la tarjeta de <0>{0}</0> a<1>{1}</1>" msgstr "movió la tarjeta de <0>{0}</0> a<1>{1}</1>"
#: src/views/card/components/ActivityList.tsx:103 #: src/views/card/components/ActivityList.tsx:102
msgid "moved the card to another list" msgid "moved the card to another list"
msgstr "movió la tarjeta a otra lista" msgstr "movió la tarjeta a otra lista"
@@ -1555,7 +1548,7 @@ msgid "New label"
msgstr "Nueva etiqueta" msgstr "Nueva etiqueta"
#: src/views/board/components/NewListForm.tsx:113 #: src/views/board/components/NewListForm.tsx:113
#: src/views/board/index.tsx:476 #: src/views/board/index.tsx:470
msgid "New list" msgid "New list"
msgstr "Nueva lista" msgstr "Nueva lista"
@@ -1616,7 +1609,7 @@ msgstr "No hay URL de descarga disponible para este archivo adjunto."
msgid "No keyboard shortcuts registered." msgid "No keyboard shortcuts registered."
msgstr "No hay atajos de teclado registrados." msgstr "No hay atajos de teclado registrados."
#: src/views/board/index.tsx:506 #: src/views/board/index.tsx:496
msgid "No lists" msgid "No lists"
msgstr "Sin listas" msgstr "Sin listas"
@@ -1632,11 +1625,11 @@ msgstr "Oferta"
msgid "Onboarding" msgid "Onboarding"
msgstr "Incorporación" msgstr "Incorporación"
#: src/views/settings/AccountSettings.tsx:62 #: src/views/settings/AccountSettings.tsx:55
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Una vez que elimines tu cuenta, no hay vuelta atrás. Esta acción no se puede deshacer." msgstr "Una vez que elimines tu cuenta, no hay vuelta atrás. Esta acción no se puede deshacer."
#: src/views/settings/WorkspaceSettings.tsx:109 #: src/views/settings/WorkspaceSettings.tsx:100
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Una vez que elimines tu espacio de trabajo, no hay vuelta atrás. Esta acción no se puede deshacer." msgstr "Una vez que elimines tu espacio de trabajo, no hay vuelta atrás. Esta acción no se puede deshacer."
@@ -1706,7 +1699,7 @@ msgstr "La contraseña debe tener al menos 8 caracteres"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Las contraseñas no coinciden" msgstr "Las contraseñas no coinciden"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Paused" msgid "Paused"
msgstr "Pausado" msgstr "Pausado"
@@ -1715,7 +1708,7 @@ msgstr "Pausado"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Frecuencia de pago" msgstr "Frecuencia de pago"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Pending" msgid "Pending"
msgstr "Pendiente" msgstr "Pendiente"
@@ -1772,15 +1765,15 @@ msgstr "Por favor selecciona un archivo para subir."
#: src/views/board/components/NewTemplateForm.tsx:77 #: src/views/board/components/NewTemplateForm.tsx:77
#: src/views/board/components/UpdateBoardSlugForm.tsx:73 #: src/views/board/components/UpdateBoardSlugForm.tsx:73
#: src/views/board/components/VisibilityButton.tsx:54 #: src/views/board/components/VisibilityButton.tsx:54
#: src/views/board/index.tsx:177 #: src/views/board/index.tsx:171
#: src/views/board/index.tsx:233 #: src/views/board/index.tsx:227
#: src/views/boards/components/ImportBoardsForm.tsx:205 #: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/card/components/AttachmentThumbnails.tsx:74 #: src/views/card/components/AttachmentThumbnails.tsx:74
#: src/views/card/components/ChecklistItemRow.tsx:69 #: src/views/card/components/ChecklistItemRow.tsx:69
#: src/views/card/components/ChecklistItemRow.tsx:97 #: src/views/card/components/ChecklistItemRow.tsx:97
#: src/views/card/components/ChecklistNameInput.tsx:47 #: src/views/card/components/ChecklistNameInput.tsx:47
#: src/views/card/components/Checklists.tsx:81 #: src/views/card/components/Checklists.tsx:81
#: src/views/card/components/Comment.tsx:68 #: src/views/card/components/Comment.tsx:65
#: src/views/card/components/DeleteCardConfirmation.tsx:52 #: src/views/card/components/DeleteCardConfirmation.tsx:52
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38 #: src/views/card/components/DeleteChecklistConfirmation.tsx:38
#: src/views/card/components/DeleteCommentConfirmation.tsx:46 #: src/views/card/components/DeleteCommentConfirmation.tsx:46
@@ -1840,7 +1833,7 @@ msgstr "Política de privacidad"
msgid "Private" msgid "Private"
msgstr "Privado" msgstr "Privado"
#: src/views/members/index.tsx:214 #: src/views/members/index.tsx:205
msgid "Pro Plan" msgid "Pro Plan"
msgstr "Plan Pro" msgstr "Plan Pro"
@@ -1888,44 +1881,44 @@ msgstr "Remoto"
msgid "Remove" msgid "Remove"
msgstr "Eliminar" msgstr "Eliminar"
#: src/views/members/index.tsx:157 #: src/views/members/index.tsx:148
msgid "Remove member" msgid "Remove member"
msgstr "Eliminar miembro" msgstr "Eliminar miembro"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:92 #: src/views/card/components/ActivityList.tsx:91
msgid "removed {0} labels: <0>{labelList}</0>" msgid "removed {0} labels: <0>{labelList}</0>"
msgstr "eliminó {0} etiquetas: <0>{labelList}</0>" msgstr "eliminó {0} etiquetas: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:105 #: src/views/card/components/ActivityList.tsx:104
msgid "removed a label from the card" msgid "removed a label from the card"
msgstr "eliminó una etiqueta de la tarjeta" msgstr "eliminó una etiqueta de la tarjeta"
#: src/views/card/components/ActivityList.tsx:107 #: src/views/card/components/ActivityList.tsx:106
msgid "removed a member from the card" msgid "removed a member from the card"
msgstr "eliminó un miembro de la tarjeta" msgstr "eliminó un miembro de la tarjeta"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:174 #: src/views/card/components/ActivityList.tsx:173
msgid "removed label <0>{0}</0>" msgid "removed label <0>{0}</0>"
msgstr "eliminó la etiqueta <0>{0}</0>" msgstr "eliminó la etiqueta <0>{0}</0>"
#: src/views/card/components/ActivityList.tsx:118 #: src/views/card/components/ActivityList.tsx:117
#: src/views/card/components/ActivityList.tsx:277 #: src/views/card/components/ActivityList.tsx:276
msgid "removed the due date" msgid "removed the due date"
msgstr "eliminó la fecha de vencimiento" msgstr "eliminó la fecha de vencimiento"
#: src/views/card/components/ActivityList.tsx:109 #: src/views/card/components/ActivityList.tsx:108
msgid "renamed a checklist" msgid "renamed a checklist"
msgstr "renombró una lista de verificación" msgstr "renombró una lista de verificación"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:190 #: src/views/card/components/ActivityList.tsx:189
msgid "renamed checklist <0>{0}</0>" msgid "renamed checklist <0>{0}</0>"
msgstr "renombró la lista de verificación <0>{0}</0>" msgstr "renombró la lista de verificación <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:214 #: src/views/card/components/ActivityList.tsx:213
msgid "renamed checklist item to <0>{0}</0>" msgid "renamed checklist item to <0>{0}</0>"
msgstr "renombró el elemento de la lista de verificación a <0>{0}</0>" msgstr "renombró el elemento de la lista de verificación a <0>{0}</0>"
@@ -1955,7 +1948,7 @@ msgstr "Revisión"
msgid "Roadmap" msgid "Roadmap"
msgstr "Hoja de ruta" msgstr "Hoja de ruta"
#: src/views/members/index.tsx:252 #: src/views/members/index.tsx:243
msgid "Role" msgid "Role"
msgstr "Rol" msgstr "Rol"
@@ -1965,7 +1958,7 @@ msgid "Run on your own infrastructure"
msgstr "Ejecuta en tu propia infraestructura" msgstr "Ejecuta en tu propia infraestructura"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183
#: src/views/card/components/Comment.tsx:170 #: src/views/card/components/Comment.tsx:166
#: src/views/settings/components/Avatar.tsx:309 #: src/views/settings/components/Avatar.tsx:309
msgid "Save" msgid "Save"
msgstr "Guardar" msgstr "Guardar"
@@ -2003,7 +1996,7 @@ msgstr "Autoalojamiento"
msgid "Self host with Github" msgid "Self host with Github"
msgstr "Autoalojamiento con Github" msgstr "Autoalojamiento con Github"
#: src/views/card/components/ActivityList.tsx:143 #: src/views/card/components/ActivityList.tsx:142
msgid "self-assigned the card" msgid "self-assigned the card"
msgstr "se autoasignó la tarjeta" msgstr "se autoasignó la tarjeta"
@@ -2023,12 +2016,12 @@ msgstr "Senior"
msgid "Set due date" msgid "Set due date"
msgstr "Establecer fecha de vencimiento" msgstr "Establecer fecha de vencimiento"
#: src/views/card/components/ActivityList.tsx:116 #: src/views/card/components/ActivityList.tsx:115
msgid "set the due date" msgid "set the due date"
msgstr "estableció la fecha de vencimiento" msgstr "estableció la fecha de vencimiento"
#: src/components/SettingsLayout.tsx:82 #: src/components/SettingsLayout.tsx:82
#: src/components/SideNavigation.tsx:134 #: src/components/SideNavigation.tsx:133
msgid "Settings" msgid "Settings"
msgstr "Configuración" msgstr "Configuración"
@@ -2048,11 +2041,11 @@ msgstr "Configuración | Facturación"
msgid "Settings | Integrations" msgid "Settings | Integrations"
msgstr "Configuración | Integraciones" msgstr "Configuración | Integraciones"
#: src/views/settings/WorkspaceSettings.tsx:55 #: src/views/settings/WorkspaceSettings.tsx:54
msgid "Settings | Workspace" msgid "Settings | Workspace"
msgstr "Configuración | Espacio de trabajo" msgstr "Configuración | Espacio de trabajo"
#: src/components/UserMenu.tsx:187 #: src/components/UserMenu.tsx:184
msgid "Shortcuts" msgid "Shortcuts"
msgstr "Atajos" msgstr "Atajos"
@@ -2124,7 +2117,7 @@ msgstr "Éxito"
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:" msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Potencia tu espacio de trabajo por solo $29/mes. Esto es lo que obtendrás:" msgstr "Potencia tu espacio de trabajo por solo $29/mes. Esto es lo que obtendrás:"
#: src/components/UserMenu.tsx:198 #: src/components/UserMenu.tsx:195
msgid "Support" msgid "Support"
msgstr "Soporte" msgstr "Soporte"
@@ -2133,12 +2126,12 @@ msgstr "Soporte"
msgid "Support the development of the project" msgid "Support the development of the project"
msgstr "Apoya el desarrollo del proyecto" msgstr "Apoya el desarrollo del proyecto"
#: src/components/UserMenu.tsx:144 #: src/components/UserMenu.tsx:141
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: src/views/members/components/InviteMemberForm.tsx:322 #: src/views/members/components/InviteMemberForm.tsx:322
#: src/views/members/index.tsx:216 #: src/views/members/index.tsx:207
msgid "Team Plan" msgid "Team Plan"
msgstr "Plan de Equipo" msgstr "Plan de Equipo"
@@ -2148,8 +2141,8 @@ msgstr "Plan de Equipo"
msgid "Teams" msgid "Teams"
msgstr "Equipos" msgstr "Equipos"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/board/index.tsx:431 #: src/views/board/index.tsx:425
msgid "Template" msgid "Template"
msgstr "Plantilla" msgstr "Plantilla"
@@ -2169,7 +2162,7 @@ msgstr "El nombre de la plantilla no puede exceder los 100 caracteres"
msgid "Template name is required" msgid "Template name is required"
msgstr "El nombre de la plantilla es obligatorio" msgstr "El nombre de la plantilla es obligatorio"
#: src/components/SideNavigation.tsx:110 #: src/components/SideNavigation.tsx:109
#: src/views/home/components/Features.tsx:115 #: src/views/home/components/Features.tsx:115
msgid "Templates" msgid "Templates"
msgstr "Plantillas" msgstr "Plantillas"
@@ -2203,7 +2196,7 @@ msgstr "La alternativa de código abierto <0/> a Trello"
msgid "The visibility of your board has been set to {0}." msgid "The visibility of your board has been set to {0}."
msgstr "La visibilidad de tu tablero ha sido establecida a {0}." msgstr "La visibilidad de tu tablero ha sido establecida a {0}."
#: src/components/UserMenu.tsx:131 #: src/components/UserMenu.tsx:128
msgid "Theme" msgid "Theme"
msgstr "Tema" msgstr "Tema"
@@ -2223,7 +2216,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." 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." msgstr "Esta clave API solo se mostrará una vez. Por favor, guárdala en un lugar seguro."
#: src/views/public/board/index.tsx:179 #: src/views/public/board/index.tsx:169
msgid "This board is private or does not exist" msgid "This board is private or does not exist"
msgstr "Este tablero es privado o no existe" msgstr "Este tablero es privado o no existe"
@@ -2366,7 +2359,7 @@ msgstr "No se puede actualizar la URL del tablero"
msgid "Unable to update board visibility" msgid "Unable to update board visibility"
msgstr "No se puede actualizar la visibilidad del tablero" msgstr "No se puede actualizar la visibilidad del tablero"
#: src/views/board/index.tsx:232 #: src/views/board/index.tsx:226
#: src/views/card/index.tsx:187 #: src/views/card/index.tsx:187
msgid "Unable to update card" msgid "Unable to update card"
msgstr "No se puede actualizar la tarjeta" msgstr "No se puede actualizar la tarjeta"
@@ -2379,7 +2372,7 @@ msgstr "No se puede actualizar la lista de verificación"
msgid "Unable to update checklist item" msgid "Unable to update checklist item"
msgstr "No se puede actualizar el elemento de la lista de verificación" msgstr "No se puede actualizar el elemento de la lista de verificación"
#: src/views/card/components/Comment.tsx:67 #: src/views/card/components/Comment.tsx:64
msgid "Unable to update comment" msgid "Unable to update comment"
msgstr "No se puede actualizar el comentario" msgstr "No se puede actualizar el comentario"
@@ -2391,7 +2384,7 @@ msgstr "No se puede actualizar la fecha de vencimiento"
msgid "Unable to update labels" msgid "Unable to update labels"
msgstr "No se pueden actualizar las etiquetas" msgstr "No se pueden actualizar las etiquetas"
#: src/views/board/index.tsx:176 #: src/views/board/index.tsx:170
#: src/views/card/components/ListSelector.tsx:52 #: src/views/card/components/ListSelector.tsx:52
msgid "Unable to update list" msgid "Unable to update list"
msgstr "No se puede actualizar la lista" msgstr "No se puede actualizar la lista"
@@ -2401,11 +2394,11 @@ msgid "Unable to update members"
msgstr "No se pueden actualizar los miembros" msgstr "No se pueden actualizar los miembros"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:157 #: src/views/card/components/ActivityList.tsx:156
msgid "unassigned <0>{0}</0> from the card" msgid "unassigned <0>{0}</0> from the card"
msgstr "desasignó <0>{0}</0> de la tarjeta" msgstr "desasignó <0>{0}</0> de la tarjeta"
#: src/views/card/components/ActivityList.tsx:154 #: src/views/card/components/ActivityList.tsx:153
msgid "unassigned themselves from the card" msgid "unassigned themselves from the card"
msgstr "se desasignó de la tarjeta" msgstr "se desasignó de la tarjeta"
@@ -2464,30 +2457,30 @@ msgstr "Actualizar"
msgid "Update label" msgid "Update label"
msgstr "Actualizar etiqueta" msgstr "Actualizar etiqueta"
#: src/views/card/components/ActivityList.tsx:112 #: src/views/card/components/ActivityList.tsx:111
msgid "updated a checklist item" msgid "updated a checklist item"
msgstr "actualizó un elemento de la lista de verificación" msgstr "actualizó un elemento de la lista de verificación"
#: src/views/card/components/ActivityList.tsx:102 #: src/views/card/components/ActivityList.tsx:101
msgid "updated the description" msgid "updated the description"
msgstr "actualizó la descripción" msgstr "actualizó la descripción"
#: src/views/card/components/ActivityList.tsx:117 #: src/views/card/components/ActivityList.tsx:116
msgid "updated the due date" msgid "updated the due date"
msgstr "actualizó la fecha de vencimiento" msgstr "actualizó la fecha de vencimiento"
#: src/views/card/components/ActivityList.tsx:101 #: src/views/card/components/ActivityList.tsx:100
msgid "updated the title" msgid "updated the title"
msgstr "actualizó el título" msgstr "actualizó el título"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:126 #: src/views/card/components/ActivityList.tsx:125
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "actualizó el título a <0>{0}</0>" msgstr "actualizó el título a <0>{0}</0>"
#: src/components/SideNavigation.tsx:239 #: src/components/SideNavigation.tsx:237
#: src/views/settings/components/UpgradeToProConfirmation.tsx:53 #: src/views/settings/components/UpgradeToProConfirmation.tsx:53
#: src/views/settings/WorkspaceSettings.tsx:99 #: src/views/settings/WorkspaceSettings.tsx:90
msgid "Upgrade to Pro" msgid "Upgrade to Pro"
msgstr "Actualizar a Pro" msgstr "Actualizar a Pro"
@@ -2524,7 +2517,7 @@ msgstr "La URL debe tener al menos 3 caracteres"
msgid "Use template" msgid "Use template"
msgstr "Usar plantilla" msgstr "Usar plantilla"
#: src/views/members/index.tsx:246 #: src/views/members/index.tsx:237
msgid "User" msgid "User"
msgstr "Usuario" msgstr "Usuario"
@@ -2549,7 +2542,7 @@ msgstr "Ver y gestionar tu facturación y suscripción."
msgid "View docs" msgid "View docs"
msgstr "Ver documentación" msgstr "Ver documentación"
#: src/views/public/board/index.tsx:148 #: src/views/public/board/index.tsx:142
msgid "View only" msgid "View only"
msgstr "Solo visualización" msgstr "Solo visualización"
@@ -2557,7 +2550,7 @@ msgstr "Solo visualización"
msgid "View our roadmap." msgid "View our roadmap."
msgstr "Ver nuestra hoja de ruta." msgstr "Ver nuestra hoja de ruta."
#: src/views/public/board/index.tsx:182 #: src/views/public/board/index.tsx:172
msgid "View workspace" msgid "View workspace"
msgstr "Ver espacio de trabajo" msgstr "Ver espacio de trabajo"
@@ -2602,10 +2595,10 @@ msgid "Why make an open source Trello?"
msgstr "¿Por qué crear un Trello de código abierto?" msgstr "¿Por qué crear un Trello de código abierto?"
#: src/components/SettingsLayout.tsx:39 #: src/components/SettingsLayout.tsx:39
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/boards/index.tsx:33 #: src/views/boards/index.tsx:33
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
#: src/views/public/boards/index.tsx:66 #: src/views/public/boards/index.tsx:66
msgid "Workspace" msgid "Workspace"
msgstr "Espacio de trabajo" msgstr "Espacio de trabajo"
@@ -2618,7 +2611,7 @@ msgstr "Espacio de trabajo creado con éxito. Puedes actualizar más tarde en co
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Espacio de trabajo eliminado" msgstr "Espacio de trabajo eliminado"
#: src/views/settings/WorkspaceSettings.tsx:76 #: src/views/settings/WorkspaceSettings.tsx:75
msgid "Workspace description" msgid "Workspace description"
msgstr "Descripción del espacio de trabajo" msgstr "Descripción del espacio de trabajo"
@@ -2641,7 +2634,7 @@ msgid "Workspace members"
msgstr "Miembros del espacio de trabajo" msgstr "Miembros del espacio de trabajo"
#: src/components/NewWorkspaceForm.tsx:262 #: src/components/NewWorkspaceForm.tsx:262
#: src/views/settings/WorkspaceSettings.tsx:59 #: src/views/settings/WorkspaceSettings.tsx:58
msgid "Workspace name" msgid "Workspace name"
msgstr "Nombre del espacio de trabajo" msgstr "Nombre del espacio de trabajo"
@@ -2666,7 +2659,7 @@ msgstr "Nombre del espacio de trabajo actualizado"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Slug del espacio de trabajo actualizado" msgstr "Slug del espacio de trabajo actualizado"
#: src/views/settings/WorkspaceSettings.tsx:67 #: src/views/settings/WorkspaceSettings.tsx:66
msgid "Workspace URL" msgid "Workspace URL"
msgstr "URL del espacio de trabajo" msgstr "URL del espacio de trabajo"
@@ -2687,7 +2680,7 @@ msgstr "Anual"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Sí, ofrecemos un plan gratuito para siempre para uso individual. Sin restricciones, sin muros de pago, sin límites." msgstr "Sí, ofrecemos un plan gratuito para siempre para uso individual. Sin restricciones, sin muros de pago, sin límites."
#: src/views/settings/AccountSettings.tsx:80 #: src/views/settings/AccountSettings.tsx:73
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Estás a punto de cambiar tu contraseña." msgstr "Estás a punto de cambiar tu contraseña."

File diff suppressed because one or more lines are too long

View File

@@ -13,7 +13,7 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"Plural-Forms: \n" "Plural-Forms: \n"
#: src/views/card/components/Comment.tsx:128 #: src/views/card/components/Comment.tsx:124
msgid " (edited)" msgid " (edited)"
msgstr " (modifié)" msgstr " (modifié)"
@@ -41,7 +41,7 @@ msgid "{0} labels"
msgstr "{0} étiquettes" msgstr "{0} étiquettes"
#. placeholder {0}: isTemplate ? "Template" : "Board" #. placeholder {0}: isTemplate ? "Template" : "Board"
#: src/views/board/index.tsx:422 #: src/views/board/index.tsx:416
msgid "{0} not found" msgid "{0} not found"
msgstr "{0} introuvable" msgstr "{0} introuvable"
@@ -100,7 +100,7 @@ msgstr "Journaux d'activité"
msgid "Add a card" msgid "Add a card"
msgstr "Ajouter une carte" msgstr "Ajouter une carte"
#: src/views/card/components/Comment.tsx:151 #: src/views/card/components/Comment.tsx:147
#: src/views/card/components/NewCommentForm.tsx:55 #: src/views/card/components/NewCommentForm.tsx:55
msgid "Add a comment..." msgid "Add a comment..."
msgstr "Ajouter un commentaire..." msgstr "Ajouter un commentaire..."
@@ -132,38 +132,38 @@ msgid "Add member"
msgstr "Ajouter un membre" msgstr "Ajouter un membre"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:78 #: src/views/card/components/ActivityList.tsx:77
msgid "added {0} labels: <0>{labelList}</0>" msgid "added {0} labels: <0>{labelList}</0>"
msgstr "a ajouté {0} étiquettes : <0>{labelList}</0>" msgstr "a ajouté {0} étiquettes : <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:108 #: src/views/card/components/ActivityList.tsx:107
msgid "added a checklist" msgid "added a checklist"
msgstr "a ajouté une checklist" msgstr "a ajouté une checklist"
#: src/views/card/components/ActivityList.tsx:111 #: src/views/card/components/ActivityList.tsx:110
msgid "added a checklist item" msgid "added a checklist item"
msgstr "a ajouté un élément à la checklist" msgstr "a ajouté un élément à la checklist"
#: src/views/card/components/ActivityList.tsx:104 #: src/views/card/components/ActivityList.tsx:103
msgid "added a label to the card" msgid "added a label to the card"
msgstr "a ajouté une étiquette à la carte" msgstr "a ajouté une étiquette à la carte"
#: src/views/card/components/ActivityList.tsx:106 #: src/views/card/components/ActivityList.tsx:105
msgid "added a member to the card" msgid "added a member to the card"
msgstr "a ajouté un membre à la carte" msgstr "a ajouté un membre à la carte"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:182 #: src/views/card/components/ActivityList.tsx:181
msgid "added checklist <0>{0}</0>" msgid "added checklist <0>{0}</0>"
msgstr "a ajouté la checklist <0>{0}</0>" msgstr "a ajouté la checklist <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:206 #: src/views/card/components/ActivityList.tsx:205
msgid "added checklist item <0>{0}</0>" msgid "added checklist item <0>{0}</0>"
msgstr "a ajouté l'élément <0>{0}</0> à la checklist" msgstr "a ajouté l'élément <0>{0}</0> à la checklist"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:166 #: src/views/card/components/ActivityList.tsx:165
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "a ajouté l'étiquette <0>{0}</0>" msgstr "a ajouté l'étiquette <0>{0}</0>"
@@ -184,10 +184,6 @@ msgstr "Rôles d'administrateur"
msgid "All systems operational" msgid "All systems operational"
msgstr "Tous les systèmes opérationnels" msgstr "Tous les systèmes opérationnels"
#: src/views/settings/components/UpdateWorkspaceEmailVisibilityForm.tsx:42
msgid "Allow workspace members to see each other's email addresses"
msgstr "Permettre aux membres de l'espace de travail de voir les adresses e-mail des autres"
#: src/views/auth/signup/index.tsx:88 #: src/views/auth/signup/index.tsx:88
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Vous avez déjà un compte ? <0><1>Connectez-vous</1></0>" msgstr "Vous avez déjà un compte ? <0><1>Connectez-vous</1></0>"
@@ -275,7 +271,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "Êtes-vous sûr de vouloir supprimer votre compte ?" msgstr "Êtes-vous sûr de vouloir supprimer votre compte ?"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:146 #: src/views/card/components/ActivityList.tsx:145
msgid "assigned <0>{0}</0> to the card" msgid "assigned <0>{0}</0> to the card"
msgstr "a assigné <0>{0}</0> à la carte" msgstr "a assigné <0>{0}</0> à la carte"
@@ -321,9 +317,9 @@ msgstr "Portail de facturation"
msgid "Blog Post" msgid "Blog Post"
msgstr "Article de blog" msgstr "Article de blog"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/card/index.tsx:273 #: src/views/card/index.tsx:273
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
msgid "Board" msgid "Board"
msgstr "Tableau" msgstr "Tableau"
@@ -340,7 +336,7 @@ msgstr "Le nom du tableau ne peut pas dépasser 100 caractères"
msgid "Board name is required" msgid "Board name is required"
msgstr "Le nom du tableau est requis" msgstr "Le nom du tableau est requis"
#: src/views/public/board/index.tsx:176 #: src/views/public/board/index.tsx:166
msgid "Board not found" msgid "Board not found"
msgstr "Tableau introuvable" msgstr "Tableau introuvable"
@@ -356,7 +352,7 @@ msgstr "L'URL du tableau ne peut contenir que des lettres, des chiffres et des t
msgid "Board URL cannot exceed 60 characters" msgid "Board URL cannot exceed 60 characters"
msgstr "L'URL du tableau ne peut pas dépasser 60 caractères" msgstr "L'URL du tableau ne peut pas dépasser 60 caractères"
#: src/views/public/board/index.tsx:86 #: src/views/public/board/index.tsx:80
msgid "Board URL copied to clipboard" msgid "Board URL copied to clipboard"
msgstr "URL du tableau copiée dans le presse-papiers" msgstr "URL du tableau copiée dans le presse-papiers"
@@ -373,7 +369,7 @@ msgstr "Visibilité du tableau"
msgid "Board visibility updated" msgid "Board visibility updated"
msgstr "Visibilité du tableau mise à jour" msgstr "Visibilité du tableau mise à jour"
#: src/components/SideNavigation.tsx:98 #: src/components/SideNavigation.tsx:97
msgid "Boards" msgid "Boards"
msgstr "Tableaux" msgstr "Tableaux"
@@ -392,7 +388,7 @@ msgstr "Rapport de bug"
#: src/components/DeleteLabelConfirmation.tsx:49 #: src/components/DeleteLabelConfirmation.tsx:49
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176
#: src/views/board/components/DeleteBoardConfirmation.tsx:44 #: src/views/board/components/DeleteBoardConfirmation.tsx:44
#: src/views/card/components/Comment.tsx:163 #: src/views/card/components/Comment.tsx:159
#: src/views/card/components/DeleteCardConfirmation.tsx:86 #: src/views/card/components/DeleteCardConfirmation.tsx:86
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64 #: src/views/card/components/DeleteChecklistConfirmation.tsx:64
#: src/views/card/components/DeleteCommentConfirmation.tsx:77 #: src/views/card/components/DeleteCommentConfirmation.tsx:77
@@ -418,19 +414,19 @@ msgstr "Carte introuvable"
msgid "Card title" msgid "Card title"
msgstr "Titre de la carte" msgstr "Titre de la carte"
#: src/views/settings/AccountSettings.tsx:77 #: src/views/settings/AccountSettings.tsx:70
#: src/views/settings/AccountSettings.tsx:87 #: src/views/settings/AccountSettings.tsx:80
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
msgid "Change Password" msgid "Change Password"
msgstr "Modifier le mot de passe" msgstr "Modifier le mot de passe"
#: src/views/settings/AccountSettings.tsx:52 #: src/views/settings/AccountSettings.tsx:45
msgid "Change your language preferences." msgid "Change your language preferences."
msgstr "Modifiez vos préférences linguistiques." msgstr "Modifiez vos préférences linguistiques."
#: src/views/card/components/ActivityList.tsx:256 #: src/views/card/components/ActivityList.tsx:255
#: src/views/card/components/ActivityList.tsx:270 #: src/views/card/components/ActivityList.tsx:269
msgid "changed the due date to <0>{formattedDate}</0>" msgid "changed the due date to <0>{formattedDate}</0>"
msgstr "a modifié la date d'échéance pour <0>{formattedDate}</0>" msgstr "a modifié la date d'échéance pour <0>{formattedDate}</0>"
@@ -504,12 +500,12 @@ msgstr "Terminé"
msgid "Complete control and ownership:" msgid "Complete control and ownership:"
msgstr "Contrôle et propriété complets :" msgstr "Contrôle et propriété complets :"
#: src/views/card/components/ActivityList.tsx:113 #: src/views/card/components/ActivityList.tsx:112
msgid "completed a checklist item" msgid "completed a checklist item"
msgstr "a terminé un élément de la checklist" msgstr "a terminé un élément de la checklist"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:223 #: src/views/card/components/ActivityList.tsx:222
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "a terminé l'élément <0>{0}</0> de la checklist" msgstr "a terminé l'élément <0>{0}</0> de la checklist"
@@ -618,8 +614,8 @@ msgstr "Créer une nouvelle clé"
msgid "Create new label" msgid "Create new label"
msgstr "Créer une nouvelle étiquette" msgstr "Créer une nouvelle étiquette"
#: src/views/board/index.tsx:71 #: src/views/board/index.tsx:65
#: src/views/board/index.tsx:517 #: src/views/board/index.tsx:507
msgid "Create new list" msgid "Create new list"
msgstr "Créer une nouvelle liste" msgstr "Créer une nouvelle liste"
@@ -632,7 +628,7 @@ msgstr "Créer un modèle"
msgid "Create workspace" msgid "Create workspace"
msgstr "Créer un espace de travail" msgstr "Créer un espace de travail"
#: src/views/card/components/ActivityList.tsx:100 #: src/views/card/components/ActivityList.tsx:99
msgid "created the card" msgid "created the card"
msgstr "a créé la carte" msgstr "a créé la carte"
@@ -678,7 +674,7 @@ msgstr "URL d'espace de travail personnalisée"
msgid "Customer Support" msgid "Customer Support"
msgstr "Support client" msgstr "Support client"
#: src/components/UserMenu.tsx:158 #: src/components/UserMenu.tsx:155
msgid "Dark" msgid "Dark"
msgstr "Sombre" msgstr "Sombre"
@@ -696,8 +692,8 @@ msgstr "Désactiver le lien d'invitation"
msgid "Delete" msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: src/views/settings/AccountSettings.tsx:59 #: src/views/settings/AccountSettings.tsx:52
#: src/views/settings/AccountSettings.tsx:69 #: src/views/settings/AccountSettings.tsx:62
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
msgid "Delete account" msgid "Delete account"
msgstr "Supprimer le compte" msgstr "Supprimer le compte"
@@ -710,7 +706,7 @@ msgstr "Supprimer le tableau"
msgid "Delete card" msgid "Delete card"
msgstr "Supprimer la carte" msgstr "Supprimer la carte"
#: src/views/card/components/Comment.tsx:95 #: src/views/card/components/Comment.tsx:92
msgid "Delete comment" msgid "Delete comment"
msgstr "Supprimer le commentaire" msgstr "Supprimer le commentaire"
@@ -723,26 +719,26 @@ msgid "Delete template"
msgstr "Supprimer le modèle" msgstr "Supprimer le modèle"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/WorkspaceSettings.tsx:106 #: src/views/settings/WorkspaceSettings.tsx:97
#: src/views/settings/WorkspaceSettings.tsx:117 #: src/views/settings/WorkspaceSettings.tsx:108
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Supprimer l'espace de travail" msgstr "Supprimer l'espace de travail"
#: src/views/card/components/ActivityList.tsx:110 #: src/views/card/components/ActivityList.tsx:109
msgid "deleted a checklist" msgid "deleted a checklist"
msgstr "a supprimé une checklist" msgstr "a supprimé une checklist"
#: src/views/card/components/ActivityList.tsx:115 #: src/views/card/components/ActivityList.tsx:114
msgid "deleted a checklist item" msgid "deleted a checklist item"
msgstr "a supprimé un élément de la checklist" msgstr "a supprimé un élément de la checklist"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:198 #: src/views/card/components/ActivityList.tsx:197
msgid "deleted checklist <0>{0}</0>" msgid "deleted checklist <0>{0}</0>"
msgstr "a supprimé la checklist <0>{0}</0>" msgstr "a supprimé la checklist <0>{0}</0>"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:241 #: src/views/card/components/ActivityList.tsx:240
msgid "deleted checklist item <0>{0}</0>" msgid "deleted checklist item <0>{0}</0>"
msgstr "a supprimé l'élément <0>{0}</0> de la checklist" msgstr "a supprimé l'élément <0>{0}</0> de la checklist"
@@ -790,7 +786,7 @@ msgstr "documentation"
msgid "Docs" msgid "Docs"
msgstr "Documentation" msgstr "Documentation"
#: src/components/UserMenu.tsx:209 #: src/components/UserMenu.tsx:206
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
#: src/views/home/components/Footer.tsx:78 #: src/views/home/components/Footer.tsx:78
#: src/views/home/components/Header.tsx:36 #: src/views/home/components/Header.tsx:36
@@ -843,7 +839,7 @@ msgstr "Modifier"
msgid "Edit board URL" msgid "Edit board URL"
msgstr "Modifier l'URL du tableau" msgstr "Modifier l'URL du tableau"
#: src/views/card/components/Comment.tsx:86 #: src/views/card/components/Comment.tsx:83
msgid "Edit comment" msgid "Edit comment"
msgstr "Modifier le commentaire" msgstr "Modifier le commentaire"
@@ -868,14 +864,9 @@ msgid "email"
msgstr "e-mail" msgstr "e-mail"
#: src/views/members/components/InviteMemberForm.tsx:272 #: src/views/members/components/InviteMemberForm.tsx:272
#: src/views/settings/AccountSettings.tsx:42
msgid "Email" msgid "Email"
msgstr "E-mail" msgstr "E-mail"
#: src/views/settings/WorkspaceSettings.tsx:84
msgid "Email visibility"
msgstr "Visibilité des e-mails"
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
msgid "Enhancement" msgid "Enhancement"
msgstr "Amélioration" msgstr "Amélioration"
@@ -1057,7 +1048,7 @@ msgid "Features"
msgstr "Fonctionnalités" msgstr "Fonctionnalités"
#: src/components/FeedbackModal.tsx:59 #: src/components/FeedbackModal.tsx:59
#: src/components/UserMenu.tsx:217 #: src/components/UserMenu.tsx:214
msgid "Feedback" msgid "Feedback"
msgstr "Commentaires" msgstr "Commentaires"
@@ -1078,12 +1069,14 @@ msgid "For long-term sustainability, we recognise all good open source projects
msgstr "Pour une durabilité à long terme, nous reconnaissons que tous les bons projets open source ont besoin d'une source de revenus. La nôtre provient de l'offre cloud payante pour les espaces de travail avec plusieurs utilisateurs et pour les slugs d'espace de travail personnalisés. Il n'y a aucune obligation de l'utiliser, et vous pouvez auto-héberger le logiciel sur votre propre infrastructure gratuitement." msgstr "Pour une durabilité à long terme, nous reconnaissons que tous les bons projets open source ont besoin d'une source de revenus. La nôtre provient de l'offre cloud payante pour les espaces de travail avec plusieurs utilisateurs et pour les slugs d'espace de travail personnalisés. Il n'y a aucune obligation de l'utiliser, et vous pouvez auto-héberger le logiciel sur votre propre infrastructure gratuitement."
#: src/views/pricing/components/Pricing.tsx:32 #: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/PricingTiers.tsx:30
#: src/views/pricing/components/PricingTiers.tsx:30 #: src/views/pricing/components/PricingTiers.tsx:30
msgid "Free" msgid "Free"
msgstr "Gratuit" msgstr "Gratuit"
#: src/views/members/components/InviteMemberForm.tsx:333 #: src/views/members/components/InviteMemberForm.tsx:333
#: src/views/members/index.tsx:217 #: src/views/members/index.tsx:208
msgid "Free Plan" msgid "Free Plan"
msgstr "Forfait gratuit" msgstr "Forfait gratuit"
@@ -1123,7 +1116,7 @@ msgstr "Commencer"
msgid "Get started by creating a new {0}" msgid "Get started by creating a new {0}"
msgstr "Commencez par créer un nouveau {0}" msgstr "Commencez par créer un nouveau {0}"
#: src/views/board/index.tsx:509 #: src/views/board/index.tsx:499
msgid "Get started by creating a new list" msgid "Get started by creating a new list"
msgstr "Commencez par créer une nouvelle liste" msgstr "Commencez par créer une nouvelle liste"
@@ -1157,19 +1150,19 @@ msgstr "Aller à l'accueil"
msgid "Go to app" msgid "Go to app"
msgstr "Accéder à l'application" msgstr "Accéder à l'application"
#: src/components/SideNavigation.tsx:106 #: src/components/SideNavigation.tsx:105
msgid "Go to boards" msgid "Go to boards"
msgstr "Aller aux tableaux" msgstr "Aller aux tableaux"
#: src/components/SideNavigation.tsx:130 #: src/components/SideNavigation.tsx:129
msgid "Go to members" msgid "Go to members"
msgstr "Aller aux membres" msgstr "Aller aux membres"
#: src/components/SideNavigation.tsx:142 #: src/components/SideNavigation.tsx:141
msgid "Go to settings" msgid "Go to settings"
msgstr "Aller aux paramètres" msgstr "Aller aux paramètres"
#: src/components/SideNavigation.tsx:118 #: src/components/SideNavigation.tsx:117
msgid "Go to templates" msgid "Go to templates"
msgstr "Aller aux modèles" msgstr "Aller aux modèles"
@@ -1294,7 +1287,7 @@ msgstr "Adresse e-mail invalide"
msgid "Invalid invitation" msgid "Invalid invitation"
msgstr "Invitation invalide" msgstr "Invitation invalide"
#: src/views/members/index.tsx:230 #: src/views/members/index.tsx:221
msgid "Invite" msgid "Invite"
msgstr "Inviter" msgstr "Inviter"
@@ -1375,7 +1368,7 @@ msgstr "Étiquettes & filtres"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Étiquettes & filtres" msgstr "Étiquettes & filtres"
#: src/views/settings/AccountSettings.tsx:49 #: src/views/settings/AccountSettings.tsx:42
msgid "Language" msgid "Language"
msgstr "Langue" msgstr "Langue"
@@ -1384,7 +1377,7 @@ msgstr "Langue"
msgid "Launch offer" msgid "Launch offer"
msgstr "Offre de lancement" msgstr "Offre de lancement"
#: src/views/members/index.tsx:200 #: src/views/members/index.tsx:191
msgid "Launch offer: Get unlimited members with Pro" msgid "Launch offer: Get unlimited members with Pro"
msgstr "Offre de lancement : obtenez des membres illimités avec Pro" msgstr "Offre de lancement : obtenez des membres illimités avec Pro"
@@ -1409,11 +1402,11 @@ msgstr "Mentions légales"
msgid "License" msgid "License"
msgstr "Licence" msgstr "Licence"
#: src/components/UserMenu.tsx:172 #: src/components/UserMenu.tsx:169
msgid "Light" msgid "Light"
msgstr "Clair" msgstr "Clair"
#: src/views/public/board/index.tsx:84 #: src/views/public/board/index.tsx:78
msgid "Link copied" msgid "Link copied"
msgstr "Lien copié" msgstr "Lien copié"
@@ -1429,11 +1422,11 @@ msgstr "Nom de la liste"
msgid "Lists" msgid "Lists"
msgstr "Listes" msgstr "Listes"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Load more activities" msgid "Load more activities"
msgstr "Charger plus d'activités" msgstr "Charger plus d'activités"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Loading..." msgid "Loading..."
msgstr "Chargement..." msgstr "Chargement..."
@@ -1441,7 +1434,7 @@ msgstr "Chargement..."
msgid "Login | kan.bn" msgid "Login | kan.bn"
msgstr "Connexion | kan.bn" msgstr "Connexion | kan.bn"
#: src/components/UserMenu.tsx:227 #: src/components/UserMenu.tsx:224
msgid "Logout" msgid "Logout"
msgstr "Déconnexion" msgstr "Déconnexion"
@@ -1465,12 +1458,12 @@ msgstr "lien magique"
msgid "Make template" msgid "Make template"
msgstr "Créer un modèle" msgstr "Créer un modèle"
#: src/views/card/components/ActivityList.tsx:114 #: src/views/card/components/ActivityList.tsx:113
msgid "marked a checklist item as incomplete" msgid "marked a checklist item as incomplete"
msgstr "a marqué un élément de la checklist comme incomplet" msgstr "a marqué un élément de la checklist comme incomplet"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:232 #: src/views/card/components/ActivityList.tsx:231
msgid "marked checklist item <0>{0}</0> as incomplete" msgid "marked checklist item <0>{0}</0> as incomplete"
msgstr "a marqué l'élément <0>{0}</0> de la checklist comme incomplet" msgstr "a marqué l'élément <0>{0}</0> de la checklist comme incomplet"
@@ -1478,16 +1471,16 @@ msgstr "a marqué l'élément <0>{0}</0> de la checklist comme incomplet"
msgid "Medium Priority" msgid "Medium Priority"
msgstr "Priorité moyenne" msgstr "Priorité moyenne"
#: src/components/SideNavigation.tsx:122 #: src/components/SideNavigation.tsx:121
#: src/views/board/components/Filters.tsx:147 #: src/views/board/components/Filters.tsx:147
#: src/views/board/components/NewCardForm.tsx:377 #: src/views/board/components/NewCardForm.tsx:377
#: src/views/card/index.tsx:131 #: src/views/card/index.tsx:131
#: src/views/members/index.tsx:187 #: src/views/members/index.tsx:178
msgid "Members" msgid "Members"
msgstr "Membres" msgstr "Membres"
#. placeholder {0}: workspace.name ?? t`Workspace` #. placeholder {0}: workspace.name ?? t`Workspace`
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Membres | {0}" msgstr "Membres | {0}"
@@ -1502,11 +1495,11 @@ msgstr "facturation mensuelle"
#. placeholder {0}: truncate(fromList) #. placeholder {0}: truncate(fromList)
#. placeholder {1}: truncate(toList) #. placeholder {1}: truncate(toList)
#: src/views/card/components/ActivityList.tsx:134 #: src/views/card/components/ActivityList.tsx:133
msgid "moved the card from <0>{0}</0> to<1>{1}</1>" 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>" msgstr "a déplacé la carte de <0>{0}</0> vers <1>{1}</1>"
#: src/views/card/components/ActivityList.tsx:103 #: src/views/card/components/ActivityList.tsx:102
msgid "moved the card to another list" msgid "moved the card to another list"
msgstr "a déplacé la carte vers une autre liste" msgstr "a déplacé la carte vers une autre liste"
@@ -1555,7 +1548,7 @@ msgid "New label"
msgstr "Nouvelle étiquette" msgstr "Nouvelle étiquette"
#: src/views/board/components/NewListForm.tsx:113 #: src/views/board/components/NewListForm.tsx:113
#: src/views/board/index.tsx:476 #: src/views/board/index.tsx:470
msgid "New list" msgid "New list"
msgstr "Nouvelle liste" msgstr "Nouvelle liste"
@@ -1616,7 +1609,7 @@ msgstr "Aucune URL de téléchargement disponible pour cette pièce jointe."
msgid "No keyboard shortcuts registered." msgid "No keyboard shortcuts registered."
msgstr "Aucun raccourci clavier enregistré." msgstr "Aucun raccourci clavier enregistré."
#: src/views/board/index.tsx:506 #: src/views/board/index.tsx:496
msgid "No lists" msgid "No lists"
msgstr "Aucune liste" msgstr "Aucune liste"
@@ -1632,11 +1625,11 @@ msgstr "Offre"
msgid "Onboarding" msgid "Onboarding"
msgstr "Intégration" msgstr "Intégration"
#: src/views/settings/AccountSettings.tsx:62 #: src/views/settings/AccountSettings.tsx:55
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Une fois que vous supprimez votre compte, il n'y a pas de retour possible. Cette action ne peut pas être annulée." msgstr "Une fois que vous supprimez votre compte, il n'y a pas de retour possible. Cette action ne peut pas être annulée."
#: src/views/settings/WorkspaceSettings.tsx:109 #: src/views/settings/WorkspaceSettings.tsx:100
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Une fois que vous supprimez votre espace de travail, il n'y a pas de retour possible. Cette action ne peut pas être annulée." msgstr "Une fois que vous supprimez votre espace de travail, il n'y a pas de retour possible. Cette action ne peut pas être annulée."
@@ -1706,7 +1699,7 @@ msgstr "Le mot de passe doit comporter au moins 8 caractères"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Les mots de passe ne correspondent pas" msgstr "Les mots de passe ne correspondent pas"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Paused" msgid "Paused"
msgstr "En pause" msgstr "En pause"
@@ -1715,7 +1708,7 @@ msgstr "En pause"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Fréquence de paiement" msgstr "Fréquence de paiement"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Pending" msgid "Pending"
msgstr "En attente" msgstr "En attente"
@@ -1772,15 +1765,15 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
#: src/views/board/components/NewTemplateForm.tsx:77 #: src/views/board/components/NewTemplateForm.tsx:77
#: src/views/board/components/UpdateBoardSlugForm.tsx:73 #: src/views/board/components/UpdateBoardSlugForm.tsx:73
#: src/views/board/components/VisibilityButton.tsx:54 #: src/views/board/components/VisibilityButton.tsx:54
#: src/views/board/index.tsx:177 #: src/views/board/index.tsx:171
#: src/views/board/index.tsx:233 #: src/views/board/index.tsx:227
#: src/views/boards/components/ImportBoardsForm.tsx:205 #: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/card/components/AttachmentThumbnails.tsx:74 #: src/views/card/components/AttachmentThumbnails.tsx:74
#: src/views/card/components/ChecklistItemRow.tsx:69 #: src/views/card/components/ChecklistItemRow.tsx:69
#: src/views/card/components/ChecklistItemRow.tsx:97 #: src/views/card/components/ChecklistItemRow.tsx:97
#: src/views/card/components/ChecklistNameInput.tsx:47 #: src/views/card/components/ChecklistNameInput.tsx:47
#: src/views/card/components/Checklists.tsx:81 #: src/views/card/components/Checklists.tsx:81
#: src/views/card/components/Comment.tsx:68 #: src/views/card/components/Comment.tsx:65
#: src/views/card/components/DeleteCardConfirmation.tsx:52 #: src/views/card/components/DeleteCardConfirmation.tsx:52
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38 #: src/views/card/components/DeleteChecklistConfirmation.tsx:38
#: src/views/card/components/DeleteCommentConfirmation.tsx:46 #: src/views/card/components/DeleteCommentConfirmation.tsx:46
@@ -1840,7 +1833,7 @@ msgstr "Politique de confidentialité"
msgid "Private" msgid "Private"
msgstr "Privé" msgstr "Privé"
#: src/views/members/index.tsx:214 #: src/views/members/index.tsx:205
msgid "Pro Plan" msgid "Pro Plan"
msgstr "Plan Pro" msgstr "Plan Pro"
@@ -1888,44 +1881,44 @@ msgstr "À distance"
msgid "Remove" msgid "Remove"
msgstr "Supprimer" msgstr "Supprimer"
#: src/views/members/index.tsx:157 #: src/views/members/index.tsx:148
msgid "Remove member" msgid "Remove member"
msgstr "Supprimer le membre" msgstr "Supprimer le membre"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:92 #: src/views/card/components/ActivityList.tsx:91
msgid "removed {0} labels: <0>{labelList}</0>" msgid "removed {0} labels: <0>{labelList}</0>"
msgstr "a supprimé {0} étiquettes : <0>{labelList}</0>" msgstr "a supprimé {0} étiquettes : <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:105 #: src/views/card/components/ActivityList.tsx:104
msgid "removed a label from the card" msgid "removed a label from the card"
msgstr "a supprimé une étiquette de la carte" msgstr "a supprimé une étiquette de la carte"
#: src/views/card/components/ActivityList.tsx:107 #: src/views/card/components/ActivityList.tsx:106
msgid "removed a member from the card" msgid "removed a member from the card"
msgstr "a retiré un membre de la carte" msgstr "a retiré un membre de la carte"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:174 #: src/views/card/components/ActivityList.tsx:173
msgid "removed label <0>{0}</0>" msgid "removed label <0>{0}</0>"
msgstr "a supprimé l'étiquette <0>{0}</0>" msgstr "a supprimé l'étiquette <0>{0}</0>"
#: src/views/card/components/ActivityList.tsx:118 #: src/views/card/components/ActivityList.tsx:117
#: src/views/card/components/ActivityList.tsx:277 #: src/views/card/components/ActivityList.tsx:276
msgid "removed the due date" msgid "removed the due date"
msgstr "a supprimé la date d'échéance" msgstr "a supprimé la date d'échéance"
#: src/views/card/components/ActivityList.tsx:109 #: src/views/card/components/ActivityList.tsx:108
msgid "renamed a checklist" msgid "renamed a checklist"
msgstr "a renommé une checklist" msgstr "a renommé une checklist"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:190 #: src/views/card/components/ActivityList.tsx:189
msgid "renamed checklist <0>{0}</0>" msgid "renamed checklist <0>{0}</0>"
msgstr "a renommé la checklist <0>{0}</0>" msgstr "a renommé la checklist <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:214 #: src/views/card/components/ActivityList.tsx:213
msgid "renamed checklist item to <0>{0}</0>" msgid "renamed checklist item to <0>{0}</0>"
msgstr "a renommé l'élément de la liste de contrôle en <0>{0}</0>" msgstr "a renommé l'élément de la liste de contrôle en <0>{0}</0>"
@@ -1955,7 +1948,7 @@ msgstr "Révision"
msgid "Roadmap" msgid "Roadmap"
msgstr "Feuille de route" msgstr "Feuille de route"
#: src/views/members/index.tsx:252 #: src/views/members/index.tsx:243
msgid "Role" msgid "Role"
msgstr "Rôle" msgstr "Rôle"
@@ -1965,7 +1958,7 @@ msgid "Run on your own infrastructure"
msgstr "Exécutez sur votre propre infrastructure" msgstr "Exécutez sur votre propre infrastructure"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183
#: src/views/card/components/Comment.tsx:170 #: src/views/card/components/Comment.tsx:166
#: src/views/settings/components/Avatar.tsx:309 #: src/views/settings/components/Avatar.tsx:309
msgid "Save" msgid "Save"
msgstr "Enregistrer" msgstr "Enregistrer"
@@ -2003,7 +1996,7 @@ msgstr "Auto-hébergement"
msgid "Self host with Github" msgid "Self host with Github"
msgstr "Auto-hébergement avec Github" msgstr "Auto-hébergement avec Github"
#: src/views/card/components/ActivityList.tsx:143 #: src/views/card/components/ActivityList.tsx:142
msgid "self-assigned the card" msgid "self-assigned the card"
msgstr "s'est auto-assigné la carte" msgstr "s'est auto-assigné la carte"
@@ -2023,12 +2016,12 @@ msgstr "Senior"
msgid "Set due date" msgid "Set due date"
msgstr "Définir la date d'échéance" msgstr "Définir la date d'échéance"
#: src/views/card/components/ActivityList.tsx:116 #: src/views/card/components/ActivityList.tsx:115
msgid "set the due date" msgid "set the due date"
msgstr "a défini la date d'échéance" msgstr "a défini la date d'échéance"
#: src/components/SettingsLayout.tsx:82 #: src/components/SettingsLayout.tsx:82
#: src/components/SideNavigation.tsx:134 #: src/components/SideNavigation.tsx:133
msgid "Settings" msgid "Settings"
msgstr "Paramètres" msgstr "Paramètres"
@@ -2048,11 +2041,11 @@ msgstr "Paramètres | Facturation"
msgid "Settings | Integrations" msgid "Settings | Integrations"
msgstr "Paramètres | Intégrations" msgstr "Paramètres | Intégrations"
#: src/views/settings/WorkspaceSettings.tsx:55 #: src/views/settings/WorkspaceSettings.tsx:54
msgid "Settings | Workspace" msgid "Settings | Workspace"
msgstr "Paramètres | Espace de travail" msgstr "Paramètres | Espace de travail"
#: src/components/UserMenu.tsx:187 #: src/components/UserMenu.tsx:184
msgid "Shortcuts" msgid "Shortcuts"
msgstr "Raccourcis" msgstr "Raccourcis"
@@ -2124,7 +2117,7 @@ msgstr "Succès"
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:" msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Optimisez votre espace de travail pour seulement 29 $/mois. Voici ce que vous obtiendrez :" msgstr "Optimisez votre espace de travail pour seulement 29 $/mois. Voici ce que vous obtiendrez :"
#: src/components/UserMenu.tsx:198 #: src/components/UserMenu.tsx:195
msgid "Support" msgid "Support"
msgstr "Assistance" msgstr "Assistance"
@@ -2133,12 +2126,12 @@ msgstr "Assistance"
msgid "Support the development of the project" msgid "Support the development of the project"
msgstr "Soutenir le développement du projet" msgstr "Soutenir le développement du projet"
#: src/components/UserMenu.tsx:144 #: src/components/UserMenu.tsx:141
msgid "System" msgid "System"
msgstr "Système" msgstr "Système"
#: src/views/members/components/InviteMemberForm.tsx:322 #: src/views/members/components/InviteMemberForm.tsx:322
#: src/views/members/index.tsx:216 #: src/views/members/index.tsx:207
msgid "Team Plan" msgid "Team Plan"
msgstr "Forfait d'équipe" msgstr "Forfait d'équipe"
@@ -2148,8 +2141,8 @@ msgstr "Forfait d'équipe"
msgid "Teams" msgid "Teams"
msgstr "Équipes" msgstr "Équipes"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/board/index.tsx:431 #: src/views/board/index.tsx:425
msgid "Template" msgid "Template"
msgstr "Modèle" msgstr "Modèle"
@@ -2169,7 +2162,7 @@ msgstr "Le nom du modèle ne peut pas dépasser 100 caractères"
msgid "Template name is required" msgid "Template name is required"
msgstr "Le nom du modèle est requis" msgstr "Le nom du modèle est requis"
#: src/components/SideNavigation.tsx:110 #: src/components/SideNavigation.tsx:109
#: src/views/home/components/Features.tsx:115 #: src/views/home/components/Features.tsx:115
msgid "Templates" msgid "Templates"
msgstr "Modèles" msgstr "Modèles"
@@ -2203,7 +2196,7 @@ msgstr "L'alternative open source <0/> à Trello"
msgid "The visibility of your board has been set to {0}." msgid "The visibility of your board has been set to {0}."
msgstr "La visibilité de votre tableau a été définie sur {0}." msgstr "La visibilité de votre tableau a été définie sur {0}."
#: src/components/UserMenu.tsx:131 #: src/components/UserMenu.tsx:128
msgid "Theme" msgid "Theme"
msgstr "Thème" msgstr "Thème"
@@ -2223,7 +2216,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." 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é." 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:179 #: src/views/public/board/index.tsx:169
msgid "This board is private or does not exist" msgid "This board is private or does not exist"
msgstr "Ce tableau est privé ou n'existe pas" msgstr "Ce tableau est privé ou n'existe pas"
@@ -2366,7 +2359,7 @@ msgstr "Impossible de mettre à jour l'URL du tableau"
msgid "Unable to update board visibility" msgid "Unable to update board visibility"
msgstr "Impossible de mettre à jour la visibilité du tableau" msgstr "Impossible de mettre à jour la visibilité du tableau"
#: src/views/board/index.tsx:232 #: src/views/board/index.tsx:226
#: src/views/card/index.tsx:187 #: src/views/card/index.tsx:187
msgid "Unable to update card" msgid "Unable to update card"
msgstr "Impossible de mettre à jour la carte" msgstr "Impossible de mettre à jour la carte"
@@ -2379,7 +2372,7 @@ msgstr "Impossible de mettre à jour la liste de contrôle"
msgid "Unable to update checklist item" msgid "Unable to update checklist item"
msgstr "Impossible de mettre à jour l'élément de la liste de contrôle" msgstr "Impossible de mettre à jour l'élément de la liste de contrôle"
#: src/views/card/components/Comment.tsx:67 #: src/views/card/components/Comment.tsx:64
msgid "Unable to update comment" msgid "Unable to update comment"
msgstr "Impossible de mettre à jour le commentaire" msgstr "Impossible de mettre à jour le commentaire"
@@ -2391,7 +2384,7 @@ msgstr "Impossible de mettre à jour la date d'échéance"
msgid "Unable to update labels" msgid "Unable to update labels"
msgstr "Impossible de mettre à jour les étiquettes" msgstr "Impossible de mettre à jour les étiquettes"
#: src/views/board/index.tsx:176 #: src/views/board/index.tsx:170
#: src/views/card/components/ListSelector.tsx:52 #: src/views/card/components/ListSelector.tsx:52
msgid "Unable to update list" msgid "Unable to update list"
msgstr "Impossible de mettre à jour la liste" msgstr "Impossible de mettre à jour la liste"
@@ -2401,11 +2394,11 @@ msgid "Unable to update members"
msgstr "Impossible de mettre à jour les membres" msgstr "Impossible de mettre à jour les membres"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:157 #: src/views/card/components/ActivityList.tsx:156
msgid "unassigned <0>{0}</0> from the card" msgid "unassigned <0>{0}</0> from the card"
msgstr "a désassigné <0>{0}</0> de la carte" msgstr "a désassigné <0>{0}</0> de la carte"
#: src/views/card/components/ActivityList.tsx:154 #: src/views/card/components/ActivityList.tsx:153
msgid "unassigned themselves from the card" msgid "unassigned themselves from the card"
msgstr "s'est retiré de la carte" msgstr "s'est retiré de la carte"
@@ -2464,30 +2457,30 @@ msgstr "Mettre à jour"
msgid "Update label" msgid "Update label"
msgstr "Mettre à jour l'étiquette" msgstr "Mettre à jour l'étiquette"
#: src/views/card/components/ActivityList.tsx:112 #: src/views/card/components/ActivityList.tsx:111
msgid "updated a checklist item" msgid "updated a checklist item"
msgstr "a mis à jour un élément de la liste de contrôle" msgstr "a mis à jour un élément de la liste de contrôle"
#: src/views/card/components/ActivityList.tsx:102 #: src/views/card/components/ActivityList.tsx:101
msgid "updated the description" msgid "updated the description"
msgstr "a mis à jour la description" msgstr "a mis à jour la description"
#: src/views/card/components/ActivityList.tsx:117 #: src/views/card/components/ActivityList.tsx:116
msgid "updated the due date" msgid "updated the due date"
msgstr "a mis à jour la date d'échéance" msgstr "a mis à jour la date d'échéance"
#: src/views/card/components/ActivityList.tsx:101 #: src/views/card/components/ActivityList.tsx:100
msgid "updated the title" msgid "updated the title"
msgstr "a mis à jour le titre" msgstr "a mis à jour le titre"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:126 #: src/views/card/components/ActivityList.tsx:125
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "a mis à jour le titre en <0>{0}</0>" msgstr "a mis à jour le titre en <0>{0}</0>"
#: src/components/SideNavigation.tsx:239 #: src/components/SideNavigation.tsx:237
#: src/views/settings/components/UpgradeToProConfirmation.tsx:53 #: src/views/settings/components/UpgradeToProConfirmation.tsx:53
#: src/views/settings/WorkspaceSettings.tsx:99 #: src/views/settings/WorkspaceSettings.tsx:90
msgid "Upgrade to Pro" msgid "Upgrade to Pro"
msgstr "Passer à Pro" msgstr "Passer à Pro"
@@ -2524,7 +2517,7 @@ msgstr "L'URL doit comporter au moins 3 caractères"
msgid "Use template" msgid "Use template"
msgstr "Utiliser le modèle" msgstr "Utiliser le modèle"
#: src/views/members/index.tsx:246 #: src/views/members/index.tsx:237
msgid "User" msgid "User"
msgstr "Utilisateur" msgstr "Utilisateur"
@@ -2549,7 +2542,7 @@ msgstr "Consultez et gérez votre facturation et votre abonnement."
msgid "View docs" msgid "View docs"
msgstr "Voir la documentation" msgstr "Voir la documentation"
#: src/views/public/board/index.tsx:148 #: src/views/public/board/index.tsx:142
msgid "View only" msgid "View only"
msgstr "Affichage uniquement" msgstr "Affichage uniquement"
@@ -2557,7 +2550,7 @@ msgstr "Affichage uniquement"
msgid "View our roadmap." msgid "View our roadmap."
msgstr "Consultez notre feuille de route." msgstr "Consultez notre feuille de route."
#: src/views/public/board/index.tsx:182 #: src/views/public/board/index.tsx:172
msgid "View workspace" msgid "View workspace"
msgstr "Voir l'espace de travail" msgstr "Voir l'espace de travail"
@@ -2602,10 +2595,10 @@ msgid "Why make an open source Trello?"
msgstr "Pourquoi créer un Trello open source ?" msgstr "Pourquoi créer un Trello open source ?"
#: src/components/SettingsLayout.tsx:39 #: src/components/SettingsLayout.tsx:39
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/boards/index.tsx:33 #: src/views/boards/index.tsx:33
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
#: src/views/public/boards/index.tsx:66 #: src/views/public/boards/index.tsx:66
msgid "Workspace" msgid "Workspace"
msgstr "Espace de travail" msgstr "Espace de travail"
@@ -2618,7 +2611,7 @@ msgstr "Espace de travail créé avec succès. Vous pourrez effectuer la mise à
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Espace de travail supprimé" msgstr "Espace de travail supprimé"
#: src/views/settings/WorkspaceSettings.tsx:76 #: src/views/settings/WorkspaceSettings.tsx:75
msgid "Workspace description" msgid "Workspace description"
msgstr "Description de l'espace de travail" msgstr "Description de l'espace de travail"
@@ -2641,7 +2634,7 @@ msgid "Workspace members"
msgstr "Membres de l'espace de travail" msgstr "Membres de l'espace de travail"
#: src/components/NewWorkspaceForm.tsx:262 #: src/components/NewWorkspaceForm.tsx:262
#: src/views/settings/WorkspaceSettings.tsx:59 #: src/views/settings/WorkspaceSettings.tsx:58
msgid "Workspace name" msgid "Workspace name"
msgstr "Nom de l'espace de travail" msgstr "Nom de l'espace de travail"
@@ -2666,7 +2659,7 @@ msgstr "Nom de l'espace de travail mis à jour"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Slug de l'espace de travail mis à jour" msgstr "Slug de l'espace de travail mis à jour"
#: src/views/settings/WorkspaceSettings.tsx:67 #: src/views/settings/WorkspaceSettings.tsx:66
msgid "Workspace URL" msgid "Workspace URL"
msgstr "URL de l'espace de travail" msgstr "URL de l'espace de travail"
@@ -2687,7 +2680,7 @@ msgstr "Annuel"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Oui, nous proposons un plan gratuit à vie pour un usage individuel. Aucune restriction, aucun paywall, aucune limite." msgstr "Oui, nous proposons un plan gratuit à vie pour un usage individuel. Aucune restriction, aucun paywall, aucune limite."
#: src/views/settings/AccountSettings.tsx:80 #: src/views/settings/AccountSettings.tsx:73
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Vous êtes sur le point de modifier votre mot de passe." msgstr "Vous êtes sur le point de modifier votre mot de passe."

File diff suppressed because one or more lines are too long

View File

@@ -7,7 +7,7 @@ export const locales = [
"nl", "nl",
"ru", "ru",
"pl", "pl",
"pt-BR" "ptbr"
] as const; ] as const;
export type Locale = (typeof locales)[number]; export type Locale = (typeof locales)[number];
@@ -23,5 +23,5 @@ export const localeNames: Record<Locale, string> = {
nl: "Nederlands", nl: "Nederlands",
ru: "Русский", ru: "Русский",
pl: "Polski", pl: "Polski",
"pt-BR": "Português", ptbr: "Português",
}; };

View File

@@ -13,7 +13,7 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"Plural-Forms: \n" "Plural-Forms: \n"
#: src/views/card/components/Comment.tsx:128 #: src/views/card/components/Comment.tsx:124
msgid " (edited)" msgid " (edited)"
msgstr " (modificato)" msgstr " (modificato)"
@@ -41,7 +41,7 @@ msgid "{0} labels"
msgstr "{0} etichette" msgstr "{0} etichette"
#. placeholder {0}: isTemplate ? "Template" : "Board" #. placeholder {0}: isTemplate ? "Template" : "Board"
#: src/views/board/index.tsx:422 #: src/views/board/index.tsx:416
msgid "{0} not found" msgid "{0} not found"
msgstr "{0} non trovato" msgstr "{0} non trovato"
@@ -100,7 +100,7 @@ msgstr "Registri attività"
msgid "Add a card" msgid "Add a card"
msgstr "Aggiungi una carta" msgstr "Aggiungi una carta"
#: src/views/card/components/Comment.tsx:151 #: src/views/card/components/Comment.tsx:147
#: src/views/card/components/NewCommentForm.tsx:55 #: src/views/card/components/NewCommentForm.tsx:55
msgid "Add a comment..." msgid "Add a comment..."
msgstr "Aggiungi un commento..." msgstr "Aggiungi un commento..."
@@ -132,38 +132,38 @@ msgid "Add member"
msgstr "Aggiungi membro" msgstr "Aggiungi membro"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:78 #: src/views/card/components/ActivityList.tsx:77
msgid "added {0} labels: <0>{labelList}</0>" msgid "added {0} labels: <0>{labelList}</0>"
msgstr "ha aggiunto {0} etichette: <0>{labelList}</0>" msgstr "ha aggiunto {0} etichette: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:108 #: src/views/card/components/ActivityList.tsx:107
msgid "added a checklist" msgid "added a checklist"
msgstr "ha aggiunto una checklist" msgstr "ha aggiunto una checklist"
#: src/views/card/components/ActivityList.tsx:111 #: src/views/card/components/ActivityList.tsx:110
msgid "added a checklist item" msgid "added a checklist item"
msgstr "ha aggiunto un elemento alla checklist" msgstr "ha aggiunto un elemento alla checklist"
#: src/views/card/components/ActivityList.tsx:104 #: src/views/card/components/ActivityList.tsx:103
msgid "added a label to the card" msgid "added a label to the card"
msgstr "ha aggiunto un'etichetta alla carta" msgstr "ha aggiunto un'etichetta alla carta"
#: src/views/card/components/ActivityList.tsx:106 #: src/views/card/components/ActivityList.tsx:105
msgid "added a member to the card" msgid "added a member to the card"
msgstr "ha aggiunto un membro alla carta" msgstr "ha aggiunto un membro alla carta"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:182 #: src/views/card/components/ActivityList.tsx:181
msgid "added checklist <0>{0}</0>" msgid "added checklist <0>{0}</0>"
msgstr "ha aggiunto la checklist <0>{0}</0>" msgstr "ha aggiunto la checklist <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:206 #: src/views/card/components/ActivityList.tsx:205
msgid "added checklist item <0>{0}</0>" msgid "added checklist item <0>{0}</0>"
msgstr "ha aggiunto l'elemento <0>{0}</0> alla checklist" msgstr "ha aggiunto l'elemento <0>{0}</0> alla checklist"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:166 #: src/views/card/components/ActivityList.tsx:165
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "ha aggiunto l'etichetta <0>{0}</0>" msgstr "ha aggiunto l'etichetta <0>{0}</0>"
@@ -184,10 +184,6 @@ msgstr "Ruoli amministratore"
msgid "All systems operational" msgid "All systems operational"
msgstr "Tutti i sistemi operativi" msgstr "Tutti i sistemi operativi"
#: src/views/settings/components/UpdateWorkspaceEmailVisibilityForm.tsx:42
msgid "Allow workspace members to see each other's email addresses"
msgstr "Consenti ai membri dello spazio di lavoro di vedere gli indirizzi email degli altri"
#: src/views/auth/signup/index.tsx:88 #: src/views/auth/signup/index.tsx:88
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Hai già un account? <0><1>Accedi</1></0>" msgstr "Hai già un account? <0><1>Accedi</1></0>"
@@ -275,7 +271,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "Sei sicuro di voler eliminare il tuo account?" msgstr "Sei sicuro di voler eliminare il tuo account?"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:146 #: src/views/card/components/ActivityList.tsx:145
msgid "assigned <0>{0}</0> to the card" msgid "assigned <0>{0}</0> to the card"
msgstr "ha assegnato <0>{0}</0> alla scheda" msgstr "ha assegnato <0>{0}</0> alla scheda"
@@ -321,9 +317,9 @@ msgstr "Portale di fatturazione"
msgid "Blog Post" msgid "Blog Post"
msgstr "Post del blog" msgstr "Post del blog"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/card/index.tsx:273 #: src/views/card/index.tsx:273
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
msgid "Board" msgid "Board"
msgstr "Bacheca" msgstr "Bacheca"
@@ -340,7 +336,7 @@ msgstr "Il nome della bacheca non può superare i 100 caratteri"
msgid "Board name is required" msgid "Board name is required"
msgstr "Il nome della bacheca è obbligatorio" msgstr "Il nome della bacheca è obbligatorio"
#: src/views/public/board/index.tsx:176 #: src/views/public/board/index.tsx:166
msgid "Board not found" msgid "Board not found"
msgstr "Bacheca non trovata" msgstr "Bacheca non trovata"
@@ -356,7 +352,7 @@ msgstr "L'URL della bacheca può contenere solo lettere, numeri e trattini"
msgid "Board URL cannot exceed 60 characters" msgid "Board URL cannot exceed 60 characters"
msgstr "L'URL della bacheca non può superare i 60 caratteri" msgstr "L'URL della bacheca non può superare i 60 caratteri"
#: src/views/public/board/index.tsx:86 #: src/views/public/board/index.tsx:80
msgid "Board URL copied to clipboard" msgid "Board URL copied to clipboard"
msgstr "URL della bacheca copiato negli appunti" msgstr "URL della bacheca copiato negli appunti"
@@ -373,7 +369,7 @@ msgstr "Visibilità bacheca"
msgid "Board visibility updated" msgid "Board visibility updated"
msgstr "Visibilità della bacheca aggiornata" msgstr "Visibilità della bacheca aggiornata"
#: src/components/SideNavigation.tsx:98 #: src/components/SideNavigation.tsx:97
msgid "Boards" msgid "Boards"
msgstr "Bacheche" msgstr "Bacheche"
@@ -392,7 +388,7 @@ msgstr "Segnalazione bug"
#: src/components/DeleteLabelConfirmation.tsx:49 #: src/components/DeleteLabelConfirmation.tsx:49
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176
#: src/views/board/components/DeleteBoardConfirmation.tsx:44 #: src/views/board/components/DeleteBoardConfirmation.tsx:44
#: src/views/card/components/Comment.tsx:163 #: src/views/card/components/Comment.tsx:159
#: src/views/card/components/DeleteCardConfirmation.tsx:86 #: src/views/card/components/DeleteCardConfirmation.tsx:86
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64 #: src/views/card/components/DeleteChecklistConfirmation.tsx:64
#: src/views/card/components/DeleteCommentConfirmation.tsx:77 #: src/views/card/components/DeleteCommentConfirmation.tsx:77
@@ -418,19 +414,19 @@ msgstr "Carta non trovata"
msgid "Card title" msgid "Card title"
msgstr "Titolo della carta" msgstr "Titolo della carta"
#: src/views/settings/AccountSettings.tsx:77 #: src/views/settings/AccountSettings.tsx:70
#: src/views/settings/AccountSettings.tsx:87 #: src/views/settings/AccountSettings.tsx:80
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
msgid "Change Password" msgid "Change Password"
msgstr "Cambia password" msgstr "Cambia password"
#: src/views/settings/AccountSettings.tsx:52 #: src/views/settings/AccountSettings.tsx:45
msgid "Change your language preferences." msgid "Change your language preferences."
msgstr "Modifica le tue preferenze di lingua." msgstr "Modifica le tue preferenze di lingua."
#: src/views/card/components/ActivityList.tsx:256 #: src/views/card/components/ActivityList.tsx:255
#: src/views/card/components/ActivityList.tsx:270 #: src/views/card/components/ActivityList.tsx:269
msgid "changed the due date to <0>{formattedDate}</0>" msgid "changed the due date to <0>{formattedDate}</0>"
msgstr "ha cambiato la data di scadenza a <0>{formattedDate}</0>" msgstr "ha cambiato la data di scadenza a <0>{formattedDate}</0>"
@@ -504,12 +500,12 @@ msgstr "Completato"
msgid "Complete control and ownership:" msgid "Complete control and ownership:"
msgstr "Controllo e proprietà completi:" msgstr "Controllo e proprietà completi:"
#: src/views/card/components/ActivityList.tsx:113 #: src/views/card/components/ActivityList.tsx:112
msgid "completed a checklist item" msgid "completed a checklist item"
msgstr "ha completato un elemento della checklist" msgstr "ha completato un elemento della checklist"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:223 #: src/views/card/components/ActivityList.tsx:222
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "ha completato l'elemento <0>{0}</0> della checklist" msgstr "ha completato l'elemento <0>{0}</0> della checklist"
@@ -618,8 +614,8 @@ msgstr "Crea nuova chiave"
msgid "Create new label" msgid "Create new label"
msgstr "Crea nuova etichetta" msgstr "Crea nuova etichetta"
#: src/views/board/index.tsx:71 #: src/views/board/index.tsx:65
#: src/views/board/index.tsx:517 #: src/views/board/index.tsx:507
msgid "Create new list" msgid "Create new list"
msgstr "Crea nuova lista" msgstr "Crea nuova lista"
@@ -632,7 +628,7 @@ msgstr "Crea template"
msgid "Create workspace" msgid "Create workspace"
msgstr "Crea spazio di lavoro" msgstr "Crea spazio di lavoro"
#: src/views/card/components/ActivityList.tsx:100 #: src/views/card/components/ActivityList.tsx:99
msgid "created the card" msgid "created the card"
msgstr "ha creato la carta" msgstr "ha creato la carta"
@@ -678,7 +674,7 @@ msgstr "URL personalizzato dell'area di lavoro"
msgid "Customer Support" msgid "Customer Support"
msgstr "Assistenza clienti" msgstr "Assistenza clienti"
#: src/components/UserMenu.tsx:158 #: src/components/UserMenu.tsx:155
msgid "Dark" msgid "Dark"
msgstr "Scuro" msgstr "Scuro"
@@ -696,8 +692,8 @@ msgstr "Disattiva link di invito"
msgid "Delete" msgid "Delete"
msgstr "Elimina" msgstr "Elimina"
#: src/views/settings/AccountSettings.tsx:59 #: src/views/settings/AccountSettings.tsx:52
#: src/views/settings/AccountSettings.tsx:69 #: src/views/settings/AccountSettings.tsx:62
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
msgid "Delete account" msgid "Delete account"
msgstr "Elimina account" msgstr "Elimina account"
@@ -710,7 +706,7 @@ msgstr "Elimina bacheca"
msgid "Delete card" msgid "Delete card"
msgstr "Elimina carta" msgstr "Elimina carta"
#: src/views/card/components/Comment.tsx:95 #: src/views/card/components/Comment.tsx:92
msgid "Delete comment" msgid "Delete comment"
msgstr "Elimina commento" msgstr "Elimina commento"
@@ -723,26 +719,26 @@ msgid "Delete template"
msgstr "Elimina template" msgstr "Elimina template"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/WorkspaceSettings.tsx:106 #: src/views/settings/WorkspaceSettings.tsx:97
#: src/views/settings/WorkspaceSettings.tsx:117 #: src/views/settings/WorkspaceSettings.tsx:108
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Elimina spazio di lavoro" msgstr "Elimina spazio di lavoro"
#: src/views/card/components/ActivityList.tsx:110 #: src/views/card/components/ActivityList.tsx:109
msgid "deleted a checklist" msgid "deleted a checklist"
msgstr "ha eliminato una checklist" msgstr "ha eliminato una checklist"
#: src/views/card/components/ActivityList.tsx:115 #: src/views/card/components/ActivityList.tsx:114
msgid "deleted a checklist item" msgid "deleted a checklist item"
msgstr "ha eliminato un elemento della checklist" msgstr "ha eliminato un elemento della checklist"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:198 #: src/views/card/components/ActivityList.tsx:197
msgid "deleted checklist <0>{0}</0>" msgid "deleted checklist <0>{0}</0>"
msgstr "ha eliminato la checklist <0>{0}</0>" msgstr "ha eliminato la checklist <0>{0}</0>"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:241 #: src/views/card/components/ActivityList.tsx:240
msgid "deleted checklist item <0>{0}</0>" msgid "deleted checklist item <0>{0}</0>"
msgstr "ha eliminato l'elemento <0>{0}</0> della checklist" msgstr "ha eliminato l'elemento <0>{0}</0> della checklist"
@@ -790,7 +786,7 @@ msgstr "documenti"
msgid "Docs" msgid "Docs"
msgstr "Documenti" msgstr "Documenti"
#: src/components/UserMenu.tsx:209 #: src/components/UserMenu.tsx:206
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
#: src/views/home/components/Footer.tsx:78 #: src/views/home/components/Footer.tsx:78
#: src/views/home/components/Header.tsx:36 #: src/views/home/components/Header.tsx:36
@@ -843,7 +839,7 @@ msgstr "Modifica"
msgid "Edit board URL" msgid "Edit board URL"
msgstr "Modifica URL della bacheca" msgstr "Modifica URL della bacheca"
#: src/views/card/components/Comment.tsx:86 #: src/views/card/components/Comment.tsx:83
msgid "Edit comment" msgid "Edit comment"
msgstr "Modifica commento" msgstr "Modifica commento"
@@ -868,14 +864,9 @@ msgid "email"
msgstr "email" msgstr "email"
#: src/views/members/components/InviteMemberForm.tsx:272 #: src/views/members/components/InviteMemberForm.tsx:272
#: src/views/settings/AccountSettings.tsx:42
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
#: src/views/settings/WorkspaceSettings.tsx:84
msgid "Email visibility"
msgstr "Visibilità email"
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
msgid "Enhancement" msgid "Enhancement"
msgstr "Miglioramento" msgstr "Miglioramento"
@@ -1057,7 +1048,7 @@ msgid "Features"
msgstr "Funzionalità" msgstr "Funzionalità"
#: src/components/FeedbackModal.tsx:59 #: src/components/FeedbackModal.tsx:59
#: src/components/UserMenu.tsx:217 #: src/components/UserMenu.tsx:214
msgid "Feedback" msgid "Feedback"
msgstr "Feedback" msgstr "Feedback"
@@ -1078,12 +1069,14 @@ msgid "For long-term sustainability, we recognise all good open source projects
msgstr "Per la sostenibilità a lungo termine, riconosciamo che tutti i buoni progetti open source necessitano di una fonte di entrate. La nostra proviene dall'offerta cloud a pagamento per gli spazi di lavoro con più utenti e per gli slug personalizzati degli spazi di lavoro. Non c'è alcun obbligo di utilizzarla, e puoi ospitare autonomamente il software sulla tua infrastruttura gratuitamente." msgstr "Per la sostenibilità a lungo termine, riconosciamo che tutti i buoni progetti open source necessitano di una fonte di entrate. La nostra proviene dall'offerta cloud a pagamento per gli spazi di lavoro con più utenti e per gli slug personalizzati degli spazi di lavoro. Non c'è alcun obbligo di utilizzarla, e puoi ospitare autonomamente il software sulla tua infrastruttura gratuitamente."
#: src/views/pricing/components/Pricing.tsx:32 #: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/PricingTiers.tsx:30
#: src/views/pricing/components/PricingTiers.tsx:30 #: src/views/pricing/components/PricingTiers.tsx:30
msgid "Free" msgid "Free"
msgstr "Gratuito" msgstr "Gratuito"
#: src/views/members/components/InviteMemberForm.tsx:333 #: src/views/members/components/InviteMemberForm.tsx:333
#: src/views/members/index.tsx:217 #: src/views/members/index.tsx:208
msgid "Free Plan" msgid "Free Plan"
msgstr "Piano gratuito" msgstr "Piano gratuito"
@@ -1123,7 +1116,7 @@ msgstr "Inizia ora"
msgid "Get started by creating a new {0}" msgid "Get started by creating a new {0}"
msgstr "Inizia creando un nuovo {0}" msgstr "Inizia creando un nuovo {0}"
#: src/views/board/index.tsx:509 #: src/views/board/index.tsx:499
msgid "Get started by creating a new list" msgid "Get started by creating a new list"
msgstr "Inizia creando una nuova lista" msgstr "Inizia creando una nuova lista"
@@ -1157,19 +1150,19 @@ msgstr "Vai alla home"
msgid "Go to app" msgid "Go to app"
msgstr "Vai all'app" msgstr "Vai all'app"
#: src/components/SideNavigation.tsx:106 #: src/components/SideNavigation.tsx:105
msgid "Go to boards" msgid "Go to boards"
msgstr "Vai alle bacheche" msgstr "Vai alle bacheche"
#: src/components/SideNavigation.tsx:130 #: src/components/SideNavigation.tsx:129
msgid "Go to members" msgid "Go to members"
msgstr "Vai ai membri" msgstr "Vai ai membri"
#: src/components/SideNavigation.tsx:142 #: src/components/SideNavigation.tsx:141
msgid "Go to settings" msgid "Go to settings"
msgstr "Vai alle impostazioni" msgstr "Vai alle impostazioni"
#: src/components/SideNavigation.tsx:118 #: src/components/SideNavigation.tsx:117
msgid "Go to templates" msgid "Go to templates"
msgstr "Vai ai modelli" msgstr "Vai ai modelli"
@@ -1294,7 +1287,7 @@ msgstr "Indirizzo email non valido"
msgid "Invalid invitation" msgid "Invalid invitation"
msgstr "Invito non valido" msgstr "Invito non valido"
#: src/views/members/index.tsx:230 #: src/views/members/index.tsx:221
msgid "Invite" msgid "Invite"
msgstr "Invita" msgstr "Invita"
@@ -1375,7 +1368,7 @@ msgstr "Etichette & filtri"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Etichette & Filtri" msgstr "Etichette & Filtri"
#: src/views/settings/AccountSettings.tsx:49 #: src/views/settings/AccountSettings.tsx:42
msgid "Language" msgid "Language"
msgstr "Lingua" msgstr "Lingua"
@@ -1384,7 +1377,7 @@ msgstr "Lingua"
msgid "Launch offer" msgid "Launch offer"
msgstr "Offerta di lancio" msgstr "Offerta di lancio"
#: src/views/members/index.tsx:200 #: src/views/members/index.tsx:191
msgid "Launch offer: Get unlimited members with Pro" msgid "Launch offer: Get unlimited members with Pro"
msgstr "Offerta di lancio: ottieni membri illimitati con Pro" msgstr "Offerta di lancio: ottieni membri illimitati con Pro"
@@ -1409,11 +1402,11 @@ msgstr "Legale"
msgid "License" msgid "License"
msgstr "Licenza" msgstr "Licenza"
#: src/components/UserMenu.tsx:172 #: src/components/UserMenu.tsx:169
msgid "Light" msgid "Light"
msgstr "Chiaro" msgstr "Chiaro"
#: src/views/public/board/index.tsx:84 #: src/views/public/board/index.tsx:78
msgid "Link copied" msgid "Link copied"
msgstr "Link copiato" msgstr "Link copiato"
@@ -1429,11 +1422,11 @@ msgstr "Nome lista"
msgid "Lists" msgid "Lists"
msgstr "Liste" msgstr "Liste"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Load more activities" msgid "Load more activities"
msgstr "Carica altre attività" msgstr "Carica altre attività"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Loading..." msgid "Loading..."
msgstr "Caricamento in corso..." msgstr "Caricamento in corso..."
@@ -1441,7 +1434,7 @@ msgstr "Caricamento in corso..."
msgid "Login | kan.bn" msgid "Login | kan.bn"
msgstr "Login | kan.bn" msgstr "Login | kan.bn"
#: src/components/UserMenu.tsx:227 #: src/components/UserMenu.tsx:224
msgid "Logout" msgid "Logout"
msgstr "Esci" msgstr "Esci"
@@ -1465,12 +1458,12 @@ msgstr "link magico"
msgid "Make template" msgid "Make template"
msgstr "Crea template" msgstr "Crea template"
#: src/views/card/components/ActivityList.tsx:114 #: src/views/card/components/ActivityList.tsx:113
msgid "marked a checklist item as incomplete" msgid "marked a checklist item as incomplete"
msgstr "ha segnato un elemento della checklist come incompleto" msgstr "ha segnato un elemento della checklist come incompleto"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:232 #: src/views/card/components/ActivityList.tsx:231
msgid "marked checklist item <0>{0}</0> as incomplete" msgid "marked checklist item <0>{0}</0> as incomplete"
msgstr "ha segnato l'elemento <0>{0}</0> della checklist come incompleto" msgstr "ha segnato l'elemento <0>{0}</0> della checklist come incompleto"
@@ -1478,16 +1471,16 @@ msgstr "ha segnato l'elemento <0>{0}</0> della checklist come incompleto"
msgid "Medium Priority" msgid "Medium Priority"
msgstr "Media priorità" msgstr "Media priorità"
#: src/components/SideNavigation.tsx:122 #: src/components/SideNavigation.tsx:121
#: src/views/board/components/Filters.tsx:147 #: src/views/board/components/Filters.tsx:147
#: src/views/board/components/NewCardForm.tsx:377 #: src/views/board/components/NewCardForm.tsx:377
#: src/views/card/index.tsx:131 #: src/views/card/index.tsx:131
#: src/views/members/index.tsx:187 #: src/views/members/index.tsx:178
msgid "Members" msgid "Members"
msgstr "Membri" msgstr "Membri"
#. placeholder {0}: workspace.name ?? t`Workspace` #. placeholder {0}: workspace.name ?? t`Workspace`
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Membri | {0}" msgstr "Membri | {0}"
@@ -1502,11 +1495,11 @@ msgstr "fatturazione mensile"
#. placeholder {0}: truncate(fromList) #. placeholder {0}: truncate(fromList)
#. placeholder {1}: truncate(toList) #. placeholder {1}: truncate(toList)
#: src/views/card/components/ActivityList.tsx:134 #: src/views/card/components/ActivityList.tsx:133
msgid "moved the card from <0>{0}</0> to<1>{1}</1>" 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>" msgstr "ha spostato la scheda da <0>{0}</0> a<1>{1}</1>"
#: src/views/card/components/ActivityList.tsx:103 #: src/views/card/components/ActivityList.tsx:102
msgid "moved the card to another list" msgid "moved the card to another list"
msgstr "ha spostato la scheda in un'altra lista" msgstr "ha spostato la scheda in un'altra lista"
@@ -1555,7 +1548,7 @@ msgid "New label"
msgstr "Nuova etichetta" msgstr "Nuova etichetta"
#: src/views/board/components/NewListForm.tsx:113 #: src/views/board/components/NewListForm.tsx:113
#: src/views/board/index.tsx:476 #: src/views/board/index.tsx:470
msgid "New list" msgid "New list"
msgstr "Nuova lista" msgstr "Nuova lista"
@@ -1616,7 +1609,7 @@ msgstr "Nessun URL di download disponibile per questo allegato."
msgid "No keyboard shortcuts registered." msgid "No keyboard shortcuts registered."
msgstr "Nessuna scorciatoia da tastiera registrata." msgstr "Nessuna scorciatoia da tastiera registrata."
#: src/views/board/index.tsx:506 #: src/views/board/index.tsx:496
msgid "No lists" msgid "No lists"
msgstr "Nessuna lista" msgstr "Nessuna lista"
@@ -1632,11 +1625,11 @@ msgstr "Offerta"
msgid "Onboarding" msgid "Onboarding"
msgstr "Inserimento" msgstr "Inserimento"
#: src/views/settings/AccountSettings.tsx:62 #: src/views/settings/AccountSettings.tsx:55
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Una volta eliminato il tuo account, non si può tornare indietro. Questa azione non può essere annullata." msgstr "Una volta eliminato il tuo account, non si può tornare indietro. Questa azione non può essere annullata."
#: src/views/settings/WorkspaceSettings.tsx:109 #: src/views/settings/WorkspaceSettings.tsx:100
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Una volta eliminata l'area di lavoro, non si può tornare indietro. Questa azione non può essere annullata." msgstr "Una volta eliminata l'area di lavoro, non si può tornare indietro. Questa azione non può essere annullata."
@@ -1706,7 +1699,7 @@ msgstr "La password deve contenere almeno 8 caratteri"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Le password non corrispondono" msgstr "Le password non corrispondono"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Paused" msgid "Paused"
msgstr "In pausa" msgstr "In pausa"
@@ -1715,7 +1708,7 @@ msgstr "In pausa"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Frequenza di pagamento" msgstr "Frequenza di pagamento"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Pending" msgid "Pending"
msgstr "In attesa" msgstr "In attesa"
@@ -1772,15 +1765,15 @@ msgstr "Seleziona un file da caricare."
#: src/views/board/components/NewTemplateForm.tsx:77 #: src/views/board/components/NewTemplateForm.tsx:77
#: src/views/board/components/UpdateBoardSlugForm.tsx:73 #: src/views/board/components/UpdateBoardSlugForm.tsx:73
#: src/views/board/components/VisibilityButton.tsx:54 #: src/views/board/components/VisibilityButton.tsx:54
#: src/views/board/index.tsx:177 #: src/views/board/index.tsx:171
#: src/views/board/index.tsx:233 #: src/views/board/index.tsx:227
#: src/views/boards/components/ImportBoardsForm.tsx:205 #: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/card/components/AttachmentThumbnails.tsx:74 #: src/views/card/components/AttachmentThumbnails.tsx:74
#: src/views/card/components/ChecklistItemRow.tsx:69 #: src/views/card/components/ChecklistItemRow.tsx:69
#: src/views/card/components/ChecklistItemRow.tsx:97 #: src/views/card/components/ChecklistItemRow.tsx:97
#: src/views/card/components/ChecklistNameInput.tsx:47 #: src/views/card/components/ChecklistNameInput.tsx:47
#: src/views/card/components/Checklists.tsx:81 #: src/views/card/components/Checklists.tsx:81
#: src/views/card/components/Comment.tsx:68 #: src/views/card/components/Comment.tsx:65
#: src/views/card/components/DeleteCardConfirmation.tsx:52 #: src/views/card/components/DeleteCardConfirmation.tsx:52
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38 #: src/views/card/components/DeleteChecklistConfirmation.tsx:38
#: src/views/card/components/DeleteCommentConfirmation.tsx:46 #: src/views/card/components/DeleteCommentConfirmation.tsx:46
@@ -1840,7 +1833,7 @@ msgstr "Informativa sulla privacy"
msgid "Private" msgid "Private"
msgstr "Privato" msgstr "Privato"
#: src/views/members/index.tsx:214 #: src/views/members/index.tsx:205
msgid "Pro Plan" msgid "Pro Plan"
msgstr "Piano Pro" msgstr "Piano Pro"
@@ -1888,44 +1881,44 @@ msgstr "Remoto"
msgid "Remove" msgid "Remove"
msgstr "Rimuovi" msgstr "Rimuovi"
#: src/views/members/index.tsx:157 #: src/views/members/index.tsx:148
msgid "Remove member" msgid "Remove member"
msgstr "Rimuovi membro" msgstr "Rimuovi membro"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:92 #: src/views/card/components/ActivityList.tsx:91
msgid "removed {0} labels: <0>{labelList}</0>" msgid "removed {0} labels: <0>{labelList}</0>"
msgstr "ha rimosso {0} etichette: <0>{labelList}</0>" msgstr "ha rimosso {0} etichette: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:105 #: src/views/card/components/ActivityList.tsx:104
msgid "removed a label from the card" msgid "removed a label from the card"
msgstr "ha rimosso un'etichetta dalla scheda" msgstr "ha rimosso un'etichetta dalla scheda"
#: src/views/card/components/ActivityList.tsx:107 #: src/views/card/components/ActivityList.tsx:106
msgid "removed a member from the card" msgid "removed a member from the card"
msgstr "ha rimosso un membro dalla scheda" msgstr "ha rimosso un membro dalla scheda"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:174 #: src/views/card/components/ActivityList.tsx:173
msgid "removed label <0>{0}</0>" msgid "removed label <0>{0}</0>"
msgstr "ha rimosso l'etichetta <0>{0}</0>" msgstr "ha rimosso l'etichetta <0>{0}</0>"
#: src/views/card/components/ActivityList.tsx:118 #: src/views/card/components/ActivityList.tsx:117
#: src/views/card/components/ActivityList.tsx:277 #: src/views/card/components/ActivityList.tsx:276
msgid "removed the due date" msgid "removed the due date"
msgstr "ha rimosso la data di scadenza" msgstr "ha rimosso la data di scadenza"
#: src/views/card/components/ActivityList.tsx:109 #: src/views/card/components/ActivityList.tsx:108
msgid "renamed a checklist" msgid "renamed a checklist"
msgstr "ha rinominato una checklist" msgstr "ha rinominato una checklist"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:190 #: src/views/card/components/ActivityList.tsx:189
msgid "renamed checklist <0>{0}</0>" msgid "renamed checklist <0>{0}</0>"
msgstr "ha rinominato la checklist <0>{0}</0>" msgstr "ha rinominato la checklist <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:214 #: src/views/card/components/ActivityList.tsx:213
msgid "renamed checklist item to <0>{0}</0>" msgid "renamed checklist item to <0>{0}</0>"
msgstr "ha rinominato l'elemento della checklist in <0>{0}</0>" msgstr "ha rinominato l'elemento della checklist in <0>{0}</0>"
@@ -1955,7 +1948,7 @@ msgstr "Revisione"
msgid "Roadmap" msgid "Roadmap"
msgstr "Roadmap" msgstr "Roadmap"
#: src/views/members/index.tsx:252 #: src/views/members/index.tsx:243
msgid "Role" msgid "Role"
msgstr "Ruolo" msgstr "Ruolo"
@@ -1965,7 +1958,7 @@ msgid "Run on your own infrastructure"
msgstr "Esegui sulla tua infrastruttura" msgstr "Esegui sulla tua infrastruttura"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183
#: src/views/card/components/Comment.tsx:170 #: src/views/card/components/Comment.tsx:166
#: src/views/settings/components/Avatar.tsx:309 #: src/views/settings/components/Avatar.tsx:309
msgid "Save" msgid "Save"
msgstr "Salva" msgstr "Salva"
@@ -2003,7 +1996,7 @@ msgstr "Self Host"
msgid "Self host with Github" msgid "Self host with Github"
msgstr "Self host con Github" msgstr "Self host con Github"
#: src/views/card/components/ActivityList.tsx:143 #: src/views/card/components/ActivityList.tsx:142
msgid "self-assigned the card" msgid "self-assigned the card"
msgstr "si è auto-assegnato la scheda" msgstr "si è auto-assegnato la scheda"
@@ -2023,12 +2016,12 @@ msgstr "Senior"
msgid "Set due date" msgid "Set due date"
msgstr "Imposta data di scadenza" msgstr "Imposta data di scadenza"
#: src/views/card/components/ActivityList.tsx:116 #: src/views/card/components/ActivityList.tsx:115
msgid "set the due date" msgid "set the due date"
msgstr "ha impostato la data di scadenza" msgstr "ha impostato la data di scadenza"
#: src/components/SettingsLayout.tsx:82 #: src/components/SettingsLayout.tsx:82
#: src/components/SideNavigation.tsx:134 #: src/components/SideNavigation.tsx:133
msgid "Settings" msgid "Settings"
msgstr "Impostazioni" msgstr "Impostazioni"
@@ -2048,11 +2041,11 @@ msgstr "Impostazioni | Fatturazione"
msgid "Settings | Integrations" msgid "Settings | Integrations"
msgstr "Impostazioni | Integrazioni" msgstr "Impostazioni | Integrazioni"
#: src/views/settings/WorkspaceSettings.tsx:55 #: src/views/settings/WorkspaceSettings.tsx:54
msgid "Settings | Workspace" msgid "Settings | Workspace"
msgstr "Impostazioni | Area di lavoro" msgstr "Impostazioni | Area di lavoro"
#: src/components/UserMenu.tsx:187 #: src/components/UserMenu.tsx:184
msgid "Shortcuts" msgid "Shortcuts"
msgstr "Scorciatoie" msgstr "Scorciatoie"
@@ -2124,7 +2117,7 @@ msgstr "Operazione riuscita"
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:" msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Potenzia la tua area di lavoro per soli $29/mese. Ecco cosa otterrai:" msgstr "Potenzia la tua area di lavoro per soli $29/mese. Ecco cosa otterrai:"
#: src/components/UserMenu.tsx:198 #: src/components/UserMenu.tsx:195
msgid "Support" msgid "Support"
msgstr "Supporto" msgstr "Supporto"
@@ -2133,12 +2126,12 @@ msgstr "Supporto"
msgid "Support the development of the project" msgid "Support the development of the project"
msgstr "Sostieni lo sviluppo del progetto" msgstr "Sostieni lo sviluppo del progetto"
#: src/components/UserMenu.tsx:144 #: src/components/UserMenu.tsx:141
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: src/views/members/components/InviteMemberForm.tsx:322 #: src/views/members/components/InviteMemberForm.tsx:322
#: src/views/members/index.tsx:216 #: src/views/members/index.tsx:207
msgid "Team Plan" msgid "Team Plan"
msgstr "Piano Team" msgstr "Piano Team"
@@ -2148,8 +2141,8 @@ msgstr "Piano Team"
msgid "Teams" msgid "Teams"
msgstr "Team" msgstr "Team"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/board/index.tsx:431 #: src/views/board/index.tsx:425
msgid "Template" msgid "Template"
msgstr "Template" msgstr "Template"
@@ -2169,7 +2162,7 @@ msgstr "Il nome del template non può superare i 100 caratteri"
msgid "Template name is required" msgid "Template name is required"
msgstr "Il nome del template è obbligatorio" msgstr "Il nome del template è obbligatorio"
#: src/components/SideNavigation.tsx:110 #: src/components/SideNavigation.tsx:109
#: src/views/home/components/Features.tsx:115 #: src/views/home/components/Features.tsx:115
msgid "Templates" msgid "Templates"
msgstr "Template" msgstr "Template"
@@ -2203,7 +2196,7 @@ msgstr "L'alternativa open source <0/> a Trello"
msgid "The visibility of your board has been set to {0}." msgid "The visibility of your board has been set to {0}."
msgstr "La visibilità della tua bacheca è stata impostata su {0}." msgstr "La visibilità della tua bacheca è stata impostata su {0}."
#: src/components/UserMenu.tsx:131 #: src/components/UserMenu.tsx:128
msgid "Theme" msgid "Theme"
msgstr "Tema" msgstr "Tema"
@@ -2223,7 +2216,7 @@ msgstr "Questa azione non può essere annullata."
msgid "This API key will only be shown once. Please save it in a secure location." 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." msgstr "Questa chiave API verrà mostrata una sola volta. Salvala in un luogo sicuro."
#: src/views/public/board/index.tsx:179 #: src/views/public/board/index.tsx:169
msgid "This board is private or does not exist" msgid "This board is private or does not exist"
msgstr "Questa bacheca è privata o non esiste" msgstr "Questa bacheca è privata o non esiste"
@@ -2366,7 +2359,7 @@ msgstr "Impossibile aggiornare l'URL della bacheca"
msgid "Unable to update board visibility" msgid "Unable to update board visibility"
msgstr "Impossibile aggiornare la visibilità della bacheca" msgstr "Impossibile aggiornare la visibilità della bacheca"
#: src/views/board/index.tsx:232 #: src/views/board/index.tsx:226
#: src/views/card/index.tsx:187 #: src/views/card/index.tsx:187
msgid "Unable to update card" msgid "Unable to update card"
msgstr "Impossibile aggiornare la scheda" msgstr "Impossibile aggiornare la scheda"
@@ -2379,7 +2372,7 @@ msgstr "Impossibile aggiornare la checklist"
msgid "Unable to update checklist item" msgid "Unable to update checklist item"
msgstr "Impossibile aggiornare l'elemento della checklist" msgstr "Impossibile aggiornare l'elemento della checklist"
#: src/views/card/components/Comment.tsx:67 #: src/views/card/components/Comment.tsx:64
msgid "Unable to update comment" msgid "Unable to update comment"
msgstr "Impossibile aggiornare il commento" msgstr "Impossibile aggiornare il commento"
@@ -2391,7 +2384,7 @@ msgstr "Impossibile aggiornare la data di scadenza"
msgid "Unable to update labels" msgid "Unable to update labels"
msgstr "Impossibile aggiornare le etichette" msgstr "Impossibile aggiornare le etichette"
#: src/views/board/index.tsx:176 #: src/views/board/index.tsx:170
#: src/views/card/components/ListSelector.tsx:52 #: src/views/card/components/ListSelector.tsx:52
msgid "Unable to update list" msgid "Unable to update list"
msgstr "Impossibile aggiornare la lista" msgstr "Impossibile aggiornare la lista"
@@ -2401,11 +2394,11 @@ msgid "Unable to update members"
msgstr "Impossibile aggiornare i membri" msgstr "Impossibile aggiornare i membri"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:157 #: src/views/card/components/ActivityList.tsx:156
msgid "unassigned <0>{0}</0> from the card" msgid "unassigned <0>{0}</0> from the card"
msgstr "ha rimosso l'assegnazione di <0>{0}</0> dalla scheda" msgstr "ha rimosso l'assegnazione di <0>{0}</0> dalla scheda"
#: src/views/card/components/ActivityList.tsx:154 #: src/views/card/components/ActivityList.tsx:153
msgid "unassigned themselves from the card" msgid "unassigned themselves from the card"
msgstr "si è rimosso dall'assegnazione della scheda" msgstr "si è rimosso dall'assegnazione della scheda"
@@ -2464,30 +2457,30 @@ msgstr "Aggiorna"
msgid "Update label" msgid "Update label"
msgstr "Aggiorna etichetta" msgstr "Aggiorna etichetta"
#: src/views/card/components/ActivityList.tsx:112 #: src/views/card/components/ActivityList.tsx:111
msgid "updated a checklist item" msgid "updated a checklist item"
msgstr "ha aggiornato un elemento della checklist" msgstr "ha aggiornato un elemento della checklist"
#: src/views/card/components/ActivityList.tsx:102 #: src/views/card/components/ActivityList.tsx:101
msgid "updated the description" msgid "updated the description"
msgstr "ha aggiornato la descrizione" msgstr "ha aggiornato la descrizione"
#: src/views/card/components/ActivityList.tsx:117 #: src/views/card/components/ActivityList.tsx:116
msgid "updated the due date" msgid "updated the due date"
msgstr "ha aggiornato la data di scadenza" msgstr "ha aggiornato la data di scadenza"
#: src/views/card/components/ActivityList.tsx:101 #: src/views/card/components/ActivityList.tsx:100
msgid "updated the title" msgid "updated the title"
msgstr "ha aggiornato il titolo" msgstr "ha aggiornato il titolo"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:126 #: src/views/card/components/ActivityList.tsx:125
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "ha aggiornato il titolo in <0>{0}</0>" msgstr "ha aggiornato il titolo in <0>{0}</0>"
#: src/components/SideNavigation.tsx:239 #: src/components/SideNavigation.tsx:237
#: src/views/settings/components/UpgradeToProConfirmation.tsx:53 #: src/views/settings/components/UpgradeToProConfirmation.tsx:53
#: src/views/settings/WorkspaceSettings.tsx:99 #: src/views/settings/WorkspaceSettings.tsx:90
msgid "Upgrade to Pro" msgid "Upgrade to Pro"
msgstr "Passa a Pro" msgstr "Passa a Pro"
@@ -2524,7 +2517,7 @@ msgstr "L'URL deve contenere almeno 3 caratteri"
msgid "Use template" msgid "Use template"
msgstr "Usa template" msgstr "Usa template"
#: src/views/members/index.tsx:246 #: src/views/members/index.tsx:237
msgid "User" msgid "User"
msgstr "Utente" msgstr "Utente"
@@ -2549,7 +2542,7 @@ msgstr "Visualizza e gestisci la tua fatturazione e abbonamento."
msgid "View docs" msgid "View docs"
msgstr "Visualizza documenti" msgstr "Visualizza documenti"
#: src/views/public/board/index.tsx:148 #: src/views/public/board/index.tsx:142
msgid "View only" msgid "View only"
msgstr "Solo visualizzazione" msgstr "Solo visualizzazione"
@@ -2557,7 +2550,7 @@ msgstr "Solo visualizzazione"
msgid "View our roadmap." msgid "View our roadmap."
msgstr "Visualizza la nostra roadmap." msgstr "Visualizza la nostra roadmap."
#: src/views/public/board/index.tsx:182 #: src/views/public/board/index.tsx:172
msgid "View workspace" msgid "View workspace"
msgstr "Visualizza spazio di lavoro" msgstr "Visualizza spazio di lavoro"
@@ -2602,10 +2595,10 @@ msgid "Why make an open source Trello?"
msgstr "Perché creare un Trello open source?" msgstr "Perché creare un Trello open source?"
#: src/components/SettingsLayout.tsx:39 #: src/components/SettingsLayout.tsx:39
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/boards/index.tsx:33 #: src/views/boards/index.tsx:33
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
#: src/views/public/boards/index.tsx:66 #: src/views/public/boards/index.tsx:66
msgid "Workspace" msgid "Workspace"
msgstr "Spazio di lavoro" msgstr "Spazio di lavoro"
@@ -2618,7 +2611,7 @@ msgstr "Spazio di lavoro creato con successo. Puoi effettuare l'aggiornamento pi
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Spazio di lavoro eliminato" msgstr "Spazio di lavoro eliminato"
#: src/views/settings/WorkspaceSettings.tsx:76 #: src/views/settings/WorkspaceSettings.tsx:75
msgid "Workspace description" msgid "Workspace description"
msgstr "Descrizione dello spazio di lavoro" msgstr "Descrizione dello spazio di lavoro"
@@ -2641,7 +2634,7 @@ msgid "Workspace members"
msgstr "Membri del workspace" msgstr "Membri del workspace"
#: src/components/NewWorkspaceForm.tsx:262 #: src/components/NewWorkspaceForm.tsx:262
#: src/views/settings/WorkspaceSettings.tsx:59 #: src/views/settings/WorkspaceSettings.tsx:58
msgid "Workspace name" msgid "Workspace name"
msgstr "Nome dello spazio di lavoro" msgstr "Nome dello spazio di lavoro"
@@ -2666,7 +2659,7 @@ msgstr "Nome dello spazio di lavoro aggiornato"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Slug dell'area di lavoro aggiornato" msgstr "Slug dell'area di lavoro aggiornato"
#: src/views/settings/WorkspaceSettings.tsx:67 #: src/views/settings/WorkspaceSettings.tsx:66
msgid "Workspace URL" msgid "Workspace URL"
msgstr "URL dello spazio di lavoro" msgstr "URL dello spazio di lavoro"
@@ -2687,7 +2680,7 @@ msgstr "Annuale"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Sì, offriamo un piano gratuito per sempre per uso individuale. Nessuna restrizione, nessun paywall, nessun limite." msgstr "Sì, offriamo un piano gratuito per sempre per uso individuale. Nessuna restrizione, nessun paywall, nessun limite."
#: src/views/settings/AccountSettings.tsx:80 #: src/views/settings/AccountSettings.tsx:73
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Stai per cambiare la tua password." msgstr "Stai per cambiare la tua password."

File diff suppressed because one or more lines are too long

View File

@@ -13,7 +13,7 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"Plural-Forms: \n" "Plural-Forms: \n"
#: src/views/card/components/Comment.tsx:128 #: src/views/card/components/Comment.tsx:124
msgid " (edited)" msgid " (edited)"
msgstr " (bewerkt)" msgstr " (bewerkt)"
@@ -41,7 +41,7 @@ msgid "{0} labels"
msgstr "{0} labels" msgstr "{0} labels"
#. placeholder {0}: isTemplate ? "Template" : "Board" #. placeholder {0}: isTemplate ? "Template" : "Board"
#: src/views/board/index.tsx:422 #: src/views/board/index.tsx:416
msgid "{0} not found" msgid "{0} not found"
msgstr "{0} niet gevonden" msgstr "{0} niet gevonden"
@@ -100,7 +100,7 @@ msgstr "Activiteitenlogboeken"
msgid "Add a card" msgid "Add a card"
msgstr "Voeg een kaart toe" msgstr "Voeg een kaart toe"
#: src/views/card/components/Comment.tsx:151 #: src/views/card/components/Comment.tsx:147
#: src/views/card/components/NewCommentForm.tsx:55 #: src/views/card/components/NewCommentForm.tsx:55
msgid "Add a comment..." msgid "Add a comment..."
msgstr "Voeg een reactie toe..." msgstr "Voeg een reactie toe..."
@@ -132,38 +132,38 @@ msgid "Add member"
msgstr "Lid toevoegen" msgstr "Lid toevoegen"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:78 #: src/views/card/components/ActivityList.tsx:77
msgid "added {0} labels: <0>{labelList}</0>" msgid "added {0} labels: <0>{labelList}</0>"
msgstr "{0} labels toegevoegd: <0>{labelList}</0>" msgstr "{0} labels toegevoegd: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:108 #: src/views/card/components/ActivityList.tsx:107
msgid "added a checklist" msgid "added a checklist"
msgstr "heeft een checklist toegevoegd" msgstr "heeft een checklist toegevoegd"
#: src/views/card/components/ActivityList.tsx:111 #: src/views/card/components/ActivityList.tsx:110
msgid "added a checklist item" msgid "added a checklist item"
msgstr "heeft een checklistitem toegevoegd" msgstr "heeft een checklistitem toegevoegd"
#: src/views/card/components/ActivityList.tsx:104 #: src/views/card/components/ActivityList.tsx:103
msgid "added a label to the card" msgid "added a label to the card"
msgstr "heeft een label aan de kaart toegevoegd" msgstr "heeft een label aan de kaart toegevoegd"
#: src/views/card/components/ActivityList.tsx:106 #: src/views/card/components/ActivityList.tsx:105
msgid "added a member to the card" msgid "added a member to the card"
msgstr "heeft een lid aan de kaart toegevoegd" msgstr "heeft een lid aan de kaart toegevoegd"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:182 #: src/views/card/components/ActivityList.tsx:181
msgid "added checklist <0>{0}</0>" msgid "added checklist <0>{0}</0>"
msgstr "heeft checklist <0>{0}</0> toegevoegd" msgstr "heeft checklist <0>{0}</0> toegevoegd"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:206 #: src/views/card/components/ActivityList.tsx:205
msgid "added checklist item <0>{0}</0>" msgid "added checklist item <0>{0}</0>"
msgstr "heeft checklistitem <0>{0}</0> toegevoegd" msgstr "heeft checklistitem <0>{0}</0> toegevoegd"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:166 #: src/views/card/components/ActivityList.tsx:165
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "heeft label <0>{0}</0> toegevoegd" msgstr "heeft label <0>{0}</0> toegevoegd"
@@ -184,10 +184,6 @@ msgstr "Beheerdersrollen"
msgid "All systems operational" msgid "All systems operational"
msgstr "Alle systemen operationeel" msgstr "Alle systemen operationeel"
#: src/views/settings/components/UpdateWorkspaceEmailVisibilityForm.tsx:42
msgid "Allow workspace members to see each other's email addresses"
msgstr "Sta werkruimteleden toe elkaars e-mailadressen te zien"
#: src/views/auth/signup/index.tsx:88 #: src/views/auth/signup/index.tsx:88
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Heb je al een account? <0><1>Log in</1></0>" msgstr "Heb je al een account? <0><1>Log in</1></0>"
@@ -275,7 +271,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "Weet je zeker dat je je account wilt verwijderen?" msgstr "Weet je zeker dat je je account wilt verwijderen?"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:146 #: src/views/card/components/ActivityList.tsx:145
msgid "assigned <0>{0}</0> to the card" msgid "assigned <0>{0}</0> to the card"
msgstr "heeft <0>{0}</0> aan de kaart toegewezen" msgstr "heeft <0>{0}</0> aan de kaart toegewezen"
@@ -321,9 +317,9 @@ msgstr "Factureringsportaal"
msgid "Blog Post" msgid "Blog Post"
msgstr "Blogbericht" msgstr "Blogbericht"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/card/index.tsx:273 #: src/views/card/index.tsx:273
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
msgid "Board" msgid "Board"
msgstr "Bord" msgstr "Bord"
@@ -340,7 +336,7 @@ msgstr "Bordnaam mag niet langer zijn dan 100 tekens"
msgid "Board name is required" msgid "Board name is required"
msgstr "Bordnaam is verplicht" msgstr "Bordnaam is verplicht"
#: src/views/public/board/index.tsx:176 #: src/views/public/board/index.tsx:166
msgid "Board not found" msgid "Board not found"
msgstr "Bord niet gevonden" msgstr "Bord niet gevonden"
@@ -356,7 +352,7 @@ msgstr "Board URL kan alleen letters, cijfers en koppeltekens bevatten"
msgid "Board URL cannot exceed 60 characters" msgid "Board URL cannot exceed 60 characters"
msgstr "Board URL mag niet langer zijn dan 60 tekens" msgstr "Board URL mag niet langer zijn dan 60 tekens"
#: src/views/public/board/index.tsx:86 #: src/views/public/board/index.tsx:80
msgid "Board URL copied to clipboard" msgid "Board URL copied to clipboard"
msgstr "Board URL gekopieerd naar klembord" msgstr "Board URL gekopieerd naar klembord"
@@ -373,7 +369,7 @@ msgstr "Bordzichtbaarheid"
msgid "Board visibility updated" msgid "Board visibility updated"
msgstr "Zichtbaarheid van bord bijgewerkt" msgstr "Zichtbaarheid van bord bijgewerkt"
#: src/components/SideNavigation.tsx:98 #: src/components/SideNavigation.tsx:97
msgid "Boards" msgid "Boards"
msgstr "Borden" msgstr "Borden"
@@ -392,7 +388,7 @@ msgstr "Bugrapport"
#: src/components/DeleteLabelConfirmation.tsx:49 #: src/components/DeleteLabelConfirmation.tsx:49
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176
#: src/views/board/components/DeleteBoardConfirmation.tsx:44 #: src/views/board/components/DeleteBoardConfirmation.tsx:44
#: src/views/card/components/Comment.tsx:163 #: src/views/card/components/Comment.tsx:159
#: src/views/card/components/DeleteCardConfirmation.tsx:86 #: src/views/card/components/DeleteCardConfirmation.tsx:86
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64 #: src/views/card/components/DeleteChecklistConfirmation.tsx:64
#: src/views/card/components/DeleteCommentConfirmation.tsx:77 #: src/views/card/components/DeleteCommentConfirmation.tsx:77
@@ -418,19 +414,19 @@ msgstr "Kaart niet gevonden"
msgid "Card title" msgid "Card title"
msgstr "Kaarttitel" msgstr "Kaarttitel"
#: src/views/settings/AccountSettings.tsx:77 #: src/views/settings/AccountSettings.tsx:70
#: src/views/settings/AccountSettings.tsx:87 #: src/views/settings/AccountSettings.tsx:80
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
msgid "Change Password" msgid "Change Password"
msgstr "Wachtwoord wijzigen" msgstr "Wachtwoord wijzigen"
#: src/views/settings/AccountSettings.tsx:52 #: src/views/settings/AccountSettings.tsx:45
msgid "Change your language preferences." msgid "Change your language preferences."
msgstr "Wijzig je taalvoorkeuren." msgstr "Wijzig je taalvoorkeuren."
#: src/views/card/components/ActivityList.tsx:256 #: src/views/card/components/ActivityList.tsx:255
#: src/views/card/components/ActivityList.tsx:270 #: src/views/card/components/ActivityList.tsx:269
msgid "changed the due date to <0>{formattedDate}</0>" msgid "changed the due date to <0>{formattedDate}</0>"
msgstr "heeft de vervaldatum gewijzigd naar <0>{formattedDate}</0>" msgstr "heeft de vervaldatum gewijzigd naar <0>{formattedDate}</0>"
@@ -504,12 +500,12 @@ msgstr "Voltooid"
msgid "Complete control and ownership:" msgid "Complete control and ownership:"
msgstr "Volledige controle en eigendom:" msgstr "Volledige controle en eigendom:"
#: src/views/card/components/ActivityList.tsx:113 #: src/views/card/components/ActivityList.tsx:112
msgid "completed a checklist item" msgid "completed a checklist item"
msgstr "heeft een checklistitem voltooid" msgstr "heeft een checklistitem voltooid"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:223 #: src/views/card/components/ActivityList.tsx:222
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "heeft checklistitem <0>{0}</0> voltooid" msgstr "heeft checklistitem <0>{0}</0> voltooid"
@@ -618,8 +614,8 @@ msgstr "Nieuwe sleutel aanmaken"
msgid "Create new label" msgid "Create new label"
msgstr "Maak nieuw label" msgstr "Maak nieuw label"
#: src/views/board/index.tsx:71 #: src/views/board/index.tsx:65
#: src/views/board/index.tsx:517 #: src/views/board/index.tsx:507
msgid "Create new list" msgid "Create new list"
msgstr "Maak nieuwe lijst" msgstr "Maak nieuwe lijst"
@@ -632,7 +628,7 @@ msgstr "Sjabloon maken"
msgid "Create workspace" msgid "Create workspace"
msgstr "Werkruimte maken" msgstr "Werkruimte maken"
#: src/views/card/components/ActivityList.tsx:100 #: src/views/card/components/ActivityList.tsx:99
msgid "created the card" msgid "created the card"
msgstr "heeft de kaart aangemaakt" msgstr "heeft de kaart aangemaakt"
@@ -678,7 +674,7 @@ msgstr "Aangepaste werkruimte-URL"
msgid "Customer Support" msgid "Customer Support"
msgstr "Klantenservice" msgstr "Klantenservice"
#: src/components/UserMenu.tsx:158 #: src/components/UserMenu.tsx:155
msgid "Dark" msgid "Dark"
msgstr "Donker" msgstr "Donker"
@@ -696,8 +692,8 @@ msgstr "Uitnodigingslink deactiveren"
msgid "Delete" msgid "Delete"
msgstr "Verwijderen" msgstr "Verwijderen"
#: src/views/settings/AccountSettings.tsx:59 #: src/views/settings/AccountSettings.tsx:52
#: src/views/settings/AccountSettings.tsx:69 #: src/views/settings/AccountSettings.tsx:62
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
msgid "Delete account" msgid "Delete account"
msgstr "Account verwijderen" msgstr "Account verwijderen"
@@ -710,7 +706,7 @@ msgstr "Board verwijderen"
msgid "Delete card" msgid "Delete card"
msgstr "Kaart verwijderen" msgstr "Kaart verwijderen"
#: src/views/card/components/Comment.tsx:95 #: src/views/card/components/Comment.tsx:92
msgid "Delete comment" msgid "Delete comment"
msgstr "Reactie verwijderen" msgstr "Reactie verwijderen"
@@ -723,26 +719,26 @@ msgid "Delete template"
msgstr "Sjabloon verwijderen" msgstr "Sjabloon verwijderen"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/WorkspaceSettings.tsx:106 #: src/views/settings/WorkspaceSettings.tsx:97
#: src/views/settings/WorkspaceSettings.tsx:117 #: src/views/settings/WorkspaceSettings.tsx:108
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Werkruimte verwijderen" msgstr "Werkruimte verwijderen"
#: src/views/card/components/ActivityList.tsx:110 #: src/views/card/components/ActivityList.tsx:109
msgid "deleted a checklist" msgid "deleted a checklist"
msgstr "heeft een checklist verwijderd" msgstr "heeft een checklist verwijderd"
#: src/views/card/components/ActivityList.tsx:115 #: src/views/card/components/ActivityList.tsx:114
msgid "deleted a checklist item" msgid "deleted a checklist item"
msgstr "heeft een checklistitem verwijderd" msgstr "heeft een checklistitem verwijderd"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:198 #: src/views/card/components/ActivityList.tsx:197
msgid "deleted checklist <0>{0}</0>" msgid "deleted checklist <0>{0}</0>"
msgstr "heeft checklist <0>{0}</0> verwijderd" msgstr "heeft checklist <0>{0}</0> verwijderd"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:241 #: src/views/card/components/ActivityList.tsx:240
msgid "deleted checklist item <0>{0}</0>" msgid "deleted checklist item <0>{0}</0>"
msgstr "heeft checklistitem <0>{0}</0> verwijderd" msgstr "heeft checklistitem <0>{0}</0> verwijderd"
@@ -790,7 +786,7 @@ msgstr "docs"
msgid "Docs" msgid "Docs"
msgstr "Docs" msgstr "Docs"
#: src/components/UserMenu.tsx:209 #: src/components/UserMenu.tsx:206
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
#: src/views/home/components/Footer.tsx:78 #: src/views/home/components/Footer.tsx:78
#: src/views/home/components/Header.tsx:36 #: src/views/home/components/Header.tsx:36
@@ -843,7 +839,7 @@ msgstr "Bewerken"
msgid "Edit board URL" msgid "Edit board URL"
msgstr "Board URL bewerken" msgstr "Board URL bewerken"
#: src/views/card/components/Comment.tsx:86 #: src/views/card/components/Comment.tsx:83
msgid "Edit comment" msgid "Edit comment"
msgstr "Reactie bewerken" msgstr "Reactie bewerken"
@@ -868,14 +864,9 @@ msgid "email"
msgstr "e-mail" msgstr "e-mail"
#: src/views/members/components/InviteMemberForm.tsx:272 #: src/views/members/components/InviteMemberForm.tsx:272
#: src/views/settings/AccountSettings.tsx:42
msgid "Email" msgid "Email"
msgstr "E-mail" msgstr "E-mail"
#: src/views/settings/WorkspaceSettings.tsx:84
msgid "Email visibility"
msgstr "E-mailzichtbaarheid"
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
msgid "Enhancement" msgid "Enhancement"
msgstr "Verbetering" msgstr "Verbetering"
@@ -1057,7 +1048,7 @@ msgid "Features"
msgstr "Functies" msgstr "Functies"
#: src/components/FeedbackModal.tsx:59 #: src/components/FeedbackModal.tsx:59
#: src/components/UserMenu.tsx:217 #: src/components/UserMenu.tsx:214
msgid "Feedback" msgid "Feedback"
msgstr "Feedback" msgstr "Feedback"
@@ -1078,12 +1069,14 @@ msgid "For long-term sustainability, we recognise all good open source projects
msgstr "Voor duurzaamheid op lange termijn erkennen we dat alle goede open source projecten een inkomstenbron nodig hebben. De onze komt van de betaalde cloudoplossing voor werkruimtes met meerdere gebruikers en voor aangepaste werkruimte-slugs. Er is geen verplichting om het te gebruiken, en je kunt de software gratis op je eigen infrastructuur hosten." msgstr "Voor duurzaamheid op lange termijn erkennen we dat alle goede open source projecten een inkomstenbron nodig hebben. De onze komt van de betaalde cloudoplossing voor werkruimtes met meerdere gebruikers en voor aangepaste werkruimte-slugs. Er is geen verplichting om het te gebruiken, en je kunt de software gratis op je eigen infrastructuur hosten."
#: src/views/pricing/components/Pricing.tsx:32 #: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/PricingTiers.tsx:30
#: src/views/pricing/components/PricingTiers.tsx:30 #: src/views/pricing/components/PricingTiers.tsx:30
msgid "Free" msgid "Free"
msgstr "Gratis" msgstr "Gratis"
#: src/views/members/components/InviteMemberForm.tsx:333 #: src/views/members/components/InviteMemberForm.tsx:333
#: src/views/members/index.tsx:217 #: src/views/members/index.tsx:208
msgid "Free Plan" msgid "Free Plan"
msgstr "Gratis plan" msgstr "Gratis plan"
@@ -1123,7 +1116,7 @@ msgstr "Aan de slag"
msgid "Get started by creating a new {0}" msgid "Get started by creating a new {0}"
msgstr "Begin door een nieuwe {0} te maken" msgstr "Begin door een nieuwe {0} te maken"
#: src/views/board/index.tsx:509 #: src/views/board/index.tsx:499
msgid "Get started by creating a new list" msgid "Get started by creating a new list"
msgstr "Begin door een nieuwe lijst te maken" msgstr "Begin door een nieuwe lijst te maken"
@@ -1157,19 +1150,19 @@ msgstr "Naar startpagina"
msgid "Go to app" msgid "Go to app"
msgstr "Naar de app" msgstr "Naar de app"
#: src/components/SideNavigation.tsx:106 #: src/components/SideNavigation.tsx:105
msgid "Go to boards" msgid "Go to boards"
msgstr "Ga naar borden" msgstr "Ga naar borden"
#: src/components/SideNavigation.tsx:130 #: src/components/SideNavigation.tsx:129
msgid "Go to members" msgid "Go to members"
msgstr "Ga naar leden" msgstr "Ga naar leden"
#: src/components/SideNavigation.tsx:142 #: src/components/SideNavigation.tsx:141
msgid "Go to settings" msgid "Go to settings"
msgstr "Ga naar instellingen" msgstr "Ga naar instellingen"
#: src/components/SideNavigation.tsx:118 #: src/components/SideNavigation.tsx:117
msgid "Go to templates" msgid "Go to templates"
msgstr "Ga naar sjablonen" msgstr "Ga naar sjablonen"
@@ -1294,7 +1287,7 @@ msgstr "Ongeldig e-mailadres"
msgid "Invalid invitation" msgid "Invalid invitation"
msgstr "Ongeldige uitnodiging" msgstr "Ongeldige uitnodiging"
#: src/views/members/index.tsx:230 #: src/views/members/index.tsx:221
msgid "Invite" msgid "Invite"
msgstr "Uitnodigen" msgstr "Uitnodigen"
@@ -1375,7 +1368,7 @@ msgstr "Labels & filters"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Labels & filters" msgstr "Labels & filters"
#: src/views/settings/AccountSettings.tsx:49 #: src/views/settings/AccountSettings.tsx:42
msgid "Language" msgid "Language"
msgstr "Taal" msgstr "Taal"
@@ -1384,7 +1377,7 @@ msgstr "Taal"
msgid "Launch offer" msgid "Launch offer"
msgstr "Introductieaanbieding" msgstr "Introductieaanbieding"
#: src/views/members/index.tsx:200 #: src/views/members/index.tsx:191
msgid "Launch offer: Get unlimited members with Pro" msgid "Launch offer: Get unlimited members with Pro"
msgstr "Lanceringsaanbieding: krijg onbeperkt aantal leden met Pro" msgstr "Lanceringsaanbieding: krijg onbeperkt aantal leden met Pro"
@@ -1409,11 +1402,11 @@ msgstr "Juridisch"
msgid "License" msgid "License"
msgstr "Licentie" msgstr "Licentie"
#: src/components/UserMenu.tsx:172 #: src/components/UserMenu.tsx:169
msgid "Light" msgid "Light"
msgstr "Licht" msgstr "Licht"
#: src/views/public/board/index.tsx:84 #: src/views/public/board/index.tsx:78
msgid "Link copied" msgid "Link copied"
msgstr "Link gekopieerd" msgstr "Link gekopieerd"
@@ -1429,11 +1422,11 @@ msgstr "Lijstnaam"
msgid "Lists" msgid "Lists"
msgstr "Lijsten" msgstr "Lijsten"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Load more activities" msgid "Load more activities"
msgstr "Meer activiteiten laden" msgstr "Meer activiteiten laden"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Loading..." msgid "Loading..."
msgstr "Laden..." msgstr "Laden..."
@@ -1441,7 +1434,7 @@ msgstr "Laden..."
msgid "Login | kan.bn" msgid "Login | kan.bn"
msgstr "Login | kan.bn" msgstr "Login | kan.bn"
#: src/components/UserMenu.tsx:227 #: src/components/UserMenu.tsx:224
msgid "Logout" msgid "Logout"
msgstr "Uitloggen" msgstr "Uitloggen"
@@ -1465,12 +1458,12 @@ msgstr "magische link"
msgid "Make template" msgid "Make template"
msgstr "Sjabloon maken" msgstr "Sjabloon maken"
#: src/views/card/components/ActivityList.tsx:114 #: src/views/card/components/ActivityList.tsx:113
msgid "marked a checklist item as incomplete" msgid "marked a checklist item as incomplete"
msgstr "heeft een checklistitem als onvoltooid gemarkeerd" msgstr "heeft een checklistitem als onvoltooid gemarkeerd"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:232 #: src/views/card/components/ActivityList.tsx:231
msgid "marked checklist item <0>{0}</0> as incomplete" msgid "marked checklist item <0>{0}</0> as incomplete"
msgstr "heeft checklistitem <0>{0}</0> als onvoltooid gemarkeerd" msgstr "heeft checklistitem <0>{0}</0> als onvoltooid gemarkeerd"
@@ -1478,16 +1471,16 @@ msgstr "heeft checklistitem <0>{0}</0> als onvoltooid gemarkeerd"
msgid "Medium Priority" msgid "Medium Priority"
msgstr "Gemiddelde prioriteit" msgstr "Gemiddelde prioriteit"
#: src/components/SideNavigation.tsx:122 #: src/components/SideNavigation.tsx:121
#: src/views/board/components/Filters.tsx:147 #: src/views/board/components/Filters.tsx:147
#: src/views/board/components/NewCardForm.tsx:377 #: src/views/board/components/NewCardForm.tsx:377
#: src/views/card/index.tsx:131 #: src/views/card/index.tsx:131
#: src/views/members/index.tsx:187 #: src/views/members/index.tsx:178
msgid "Members" msgid "Members"
msgstr "Leden" msgstr "Leden"
#. placeholder {0}: workspace.name ?? t`Workspace` #. placeholder {0}: workspace.name ?? t`Workspace`
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Leden | {0}" msgstr "Leden | {0}"
@@ -1502,11 +1495,11 @@ msgstr "maandelijkse facturering"
#. placeholder {0}: truncate(fromList) #. placeholder {0}: truncate(fromList)
#. placeholder {1}: truncate(toList) #. placeholder {1}: truncate(toList)
#: src/views/card/components/ActivityList.tsx:134 #: src/views/card/components/ActivityList.tsx:133
msgid "moved the card from <0>{0}</0> to<1>{1}</1>" 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>" msgstr "heeft de kaart verplaatst van <0>{0}</0> naar<1>{1}</1>"
#: src/views/card/components/ActivityList.tsx:103 #: src/views/card/components/ActivityList.tsx:102
msgid "moved the card to another list" msgid "moved the card to another list"
msgstr "heeft de kaart naar een andere lijst verplaatst" msgstr "heeft de kaart naar een andere lijst verplaatst"
@@ -1555,7 +1548,7 @@ msgid "New label"
msgstr "Nieuw label" msgstr "Nieuw label"
#: src/views/board/components/NewListForm.tsx:113 #: src/views/board/components/NewListForm.tsx:113
#: src/views/board/index.tsx:476 #: src/views/board/index.tsx:470
msgid "New list" msgid "New list"
msgstr "Nieuwe lijst" msgstr "Nieuwe lijst"
@@ -1616,7 +1609,7 @@ msgstr "Geen download-URL beschikbaar voor deze bijlage."
msgid "No keyboard shortcuts registered." msgid "No keyboard shortcuts registered."
msgstr "Geen sneltoetsen geregistreerd." msgstr "Geen sneltoetsen geregistreerd."
#: src/views/board/index.tsx:506 #: src/views/board/index.tsx:496
msgid "No lists" msgid "No lists"
msgstr "Geen lijsten" msgstr "Geen lijsten"
@@ -1632,11 +1625,11 @@ msgstr "Aanbod"
msgid "Onboarding" msgid "Onboarding"
msgstr "Inwerktraject" msgstr "Inwerktraject"
#: src/views/settings/AccountSettings.tsx:62 #: src/views/settings/AccountSettings.tsx:55
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Zodra je je account verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt." msgstr "Zodra je je account verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt."
#: src/views/settings/WorkspaceSettings.tsx:109 #: src/views/settings/WorkspaceSettings.tsx:100
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Zodra je je werkruimte verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt." msgstr "Zodra je je werkruimte verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt."
@@ -1706,7 +1699,7 @@ msgstr "Wachtwoord moet minimaal 8 tekens bevatten"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Wachtwoorden komen niet overeen" msgstr "Wachtwoorden komen niet overeen"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Paused" msgid "Paused"
msgstr "Gepauzeerd" msgstr "Gepauzeerd"
@@ -1715,7 +1708,7 @@ msgstr "Gepauzeerd"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Betalingsfrequentie" msgstr "Betalingsfrequentie"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Pending" msgid "Pending"
msgstr "In behandeling" msgstr "In behandeling"
@@ -1772,15 +1765,15 @@ msgstr "Selecteer een bestand om te uploaden."
#: src/views/board/components/NewTemplateForm.tsx:77 #: src/views/board/components/NewTemplateForm.tsx:77
#: src/views/board/components/UpdateBoardSlugForm.tsx:73 #: src/views/board/components/UpdateBoardSlugForm.tsx:73
#: src/views/board/components/VisibilityButton.tsx:54 #: src/views/board/components/VisibilityButton.tsx:54
#: src/views/board/index.tsx:177 #: src/views/board/index.tsx:171
#: src/views/board/index.tsx:233 #: src/views/board/index.tsx:227
#: src/views/boards/components/ImportBoardsForm.tsx:205 #: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/card/components/AttachmentThumbnails.tsx:74 #: src/views/card/components/AttachmentThumbnails.tsx:74
#: src/views/card/components/ChecklistItemRow.tsx:69 #: src/views/card/components/ChecklistItemRow.tsx:69
#: src/views/card/components/ChecklistItemRow.tsx:97 #: src/views/card/components/ChecklistItemRow.tsx:97
#: src/views/card/components/ChecklistNameInput.tsx:47 #: src/views/card/components/ChecklistNameInput.tsx:47
#: src/views/card/components/Checklists.tsx:81 #: src/views/card/components/Checklists.tsx:81
#: src/views/card/components/Comment.tsx:68 #: src/views/card/components/Comment.tsx:65
#: src/views/card/components/DeleteCardConfirmation.tsx:52 #: src/views/card/components/DeleteCardConfirmation.tsx:52
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38 #: src/views/card/components/DeleteChecklistConfirmation.tsx:38
#: src/views/card/components/DeleteCommentConfirmation.tsx:46 #: src/views/card/components/DeleteCommentConfirmation.tsx:46
@@ -1840,7 +1833,7 @@ msgstr "Privacybeleid"
msgid "Private" msgid "Private"
msgstr "Privé" msgstr "Privé"
#: src/views/members/index.tsx:214 #: src/views/members/index.tsx:205
msgid "Pro Plan" msgid "Pro Plan"
msgstr "Pro Plan" msgstr "Pro Plan"
@@ -1888,44 +1881,44 @@ msgstr "Op afstand"
msgid "Remove" msgid "Remove"
msgstr "Verwijderen" msgstr "Verwijderen"
#: src/views/members/index.tsx:157 #: src/views/members/index.tsx:148
msgid "Remove member" msgid "Remove member"
msgstr "Lid verwijderen" msgstr "Lid verwijderen"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:92 #: src/views/card/components/ActivityList.tsx:91
msgid "removed {0} labels: <0>{labelList}</0>" msgid "removed {0} labels: <0>{labelList}</0>"
msgstr "{0} labels verwijderd: <0>{labelList}</0>" msgstr "{0} labels verwijderd: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:105 #: src/views/card/components/ActivityList.tsx:104
msgid "removed a label from the card" msgid "removed a label from the card"
msgstr "heeft een label van de kaart verwijderd" msgstr "heeft een label van de kaart verwijderd"
#: src/views/card/components/ActivityList.tsx:107 #: src/views/card/components/ActivityList.tsx:106
msgid "removed a member from the card" msgid "removed a member from the card"
msgstr "heeft een lid van de kaart verwijderd" msgstr "heeft een lid van de kaart verwijderd"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:174 #: src/views/card/components/ActivityList.tsx:173
msgid "removed label <0>{0}</0>" msgid "removed label <0>{0}</0>"
msgstr "heeft label <0>{0}</0> verwijderd" msgstr "heeft label <0>{0}</0> verwijderd"
#: src/views/card/components/ActivityList.tsx:118 #: src/views/card/components/ActivityList.tsx:117
#: src/views/card/components/ActivityList.tsx:277 #: src/views/card/components/ActivityList.tsx:276
msgid "removed the due date" msgid "removed the due date"
msgstr "heeft de vervaldatum verwijderd" msgstr "heeft de vervaldatum verwijderd"
#: src/views/card/components/ActivityList.tsx:109 #: src/views/card/components/ActivityList.tsx:108
msgid "renamed a checklist" msgid "renamed a checklist"
msgstr "heeft een checklist hernoemd" msgstr "heeft een checklist hernoemd"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:190 #: src/views/card/components/ActivityList.tsx:189
msgid "renamed checklist <0>{0}</0>" msgid "renamed checklist <0>{0}</0>"
msgstr "heeft checklist <0>{0}</0> hernoemd" msgstr "heeft checklist <0>{0}</0> hernoemd"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:214 #: src/views/card/components/ActivityList.tsx:213
msgid "renamed checklist item to <0>{0}</0>" msgid "renamed checklist item to <0>{0}</0>"
msgstr "checklistitem hernoemd naar <0>{0}</0>" msgstr "checklistitem hernoemd naar <0>{0}</0>"
@@ -1955,7 +1948,7 @@ msgstr "Beoordeling"
msgid "Roadmap" msgid "Roadmap"
msgstr "Roadmap" msgstr "Roadmap"
#: src/views/members/index.tsx:252 #: src/views/members/index.tsx:243
msgid "Role" msgid "Role"
msgstr "Rol" msgstr "Rol"
@@ -1965,7 +1958,7 @@ msgid "Run on your own infrastructure"
msgstr "Draai op je eigen infrastructuur" msgstr "Draai op je eigen infrastructuur"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183
#: src/views/card/components/Comment.tsx:170 #: src/views/card/components/Comment.tsx:166
#: src/views/settings/components/Avatar.tsx:309 #: src/views/settings/components/Avatar.tsx:309
msgid "Save" msgid "Save"
msgstr "Opslaan" msgstr "Opslaan"
@@ -2003,7 +1996,7 @@ msgstr "Zelf hosten"
msgid "Self host with Github" msgid "Self host with Github"
msgstr "Zelf hosten met Github" msgstr "Zelf hosten met Github"
#: src/views/card/components/ActivityList.tsx:143 #: src/views/card/components/ActivityList.tsx:142
msgid "self-assigned the card" msgid "self-assigned the card"
msgstr "heeft de kaart aan zichzelf toegewezen" msgstr "heeft de kaart aan zichzelf toegewezen"
@@ -2023,12 +2016,12 @@ msgstr "Senior"
msgid "Set due date" msgid "Set due date"
msgstr "Vervaldatum instellen" msgstr "Vervaldatum instellen"
#: src/views/card/components/ActivityList.tsx:116 #: src/views/card/components/ActivityList.tsx:115
msgid "set the due date" msgid "set the due date"
msgstr "heeft de vervaldatum ingesteld" msgstr "heeft de vervaldatum ingesteld"
#: src/components/SettingsLayout.tsx:82 #: src/components/SettingsLayout.tsx:82
#: src/components/SideNavigation.tsx:134 #: src/components/SideNavigation.tsx:133
msgid "Settings" msgid "Settings"
msgstr "Instellingen" msgstr "Instellingen"
@@ -2048,11 +2041,11 @@ msgstr "Instellingen | Facturering"
msgid "Settings | Integrations" msgid "Settings | Integrations"
msgstr "Instellingen | Integraties" msgstr "Instellingen | Integraties"
#: src/views/settings/WorkspaceSettings.tsx:55 #: src/views/settings/WorkspaceSettings.tsx:54
msgid "Settings | Workspace" msgid "Settings | Workspace"
msgstr "Instellingen | Werkruimte" msgstr "Instellingen | Werkruimte"
#: src/components/UserMenu.tsx:187 #: src/components/UserMenu.tsx:184
msgid "Shortcuts" msgid "Shortcuts"
msgstr "Snelkoppelingen" msgstr "Snelkoppelingen"
@@ -2124,7 +2117,7 @@ msgstr "Geslaagd"
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:" msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Geef je werkruimte een boost voor slechts $29/maand. Dit krijg je:" msgstr "Geef je werkruimte een boost voor slechts $29/maand. Dit krijg je:"
#: src/components/UserMenu.tsx:198 #: src/components/UserMenu.tsx:195
msgid "Support" msgid "Support"
msgstr "Ondersteuning" msgstr "Ondersteuning"
@@ -2133,12 +2126,12 @@ msgstr "Ondersteuning"
msgid "Support the development of the project" msgid "Support the development of the project"
msgstr "Ondersteun de ontwikkeling van het project" msgstr "Ondersteun de ontwikkeling van het project"
#: src/components/UserMenu.tsx:144 #: src/components/UserMenu.tsx:141
msgid "System" msgid "System"
msgstr "Systeem" msgstr "Systeem"
#: src/views/members/components/InviteMemberForm.tsx:322 #: src/views/members/components/InviteMemberForm.tsx:322
#: src/views/members/index.tsx:216 #: src/views/members/index.tsx:207
msgid "Team Plan" msgid "Team Plan"
msgstr "Teamplan" msgstr "Teamplan"
@@ -2148,8 +2141,8 @@ msgstr "Teamplan"
msgid "Teams" msgid "Teams"
msgstr "Teams" msgstr "Teams"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/board/index.tsx:431 #: src/views/board/index.tsx:425
msgid "Template" msgid "Template"
msgstr "Sjabloon" msgstr "Sjabloon"
@@ -2169,7 +2162,7 @@ msgstr "Sjabloonnaam mag niet langer zijn dan 100 tekens"
msgid "Template name is required" msgid "Template name is required"
msgstr "Sjabloonnaam is verplicht" msgstr "Sjabloonnaam is verplicht"
#: src/components/SideNavigation.tsx:110 #: src/components/SideNavigation.tsx:109
#: src/views/home/components/Features.tsx:115 #: src/views/home/components/Features.tsx:115
msgid "Templates" msgid "Templates"
msgstr "Sjablonen" msgstr "Sjablonen"
@@ -2203,7 +2196,7 @@ msgstr "Het open source <0/> alternatief voor Trello"
msgid "The visibility of your board has been set to {0}." msgid "The visibility of your board has been set to {0}."
msgstr "De zichtbaarheid van je bord is ingesteld op {0}." msgstr "De zichtbaarheid van je bord is ingesteld op {0}."
#: src/components/UserMenu.tsx:131 #: src/components/UserMenu.tsx:128
msgid "Theme" msgid "Theme"
msgstr "Thema" msgstr "Thema"
@@ -2223,7 +2216,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." 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." msgstr "Deze API-sleutel wordt slechts één keer getoond. Bewaar deze op een veilige plaats."
#: src/views/public/board/index.tsx:179 #: src/views/public/board/index.tsx:169
msgid "This board is private or does not exist" msgid "This board is private or does not exist"
msgstr "Dit bord is privé of bestaat niet" msgstr "Dit bord is privé of bestaat niet"
@@ -2366,7 +2359,7 @@ msgstr "Kan board URL niet bijwerken"
msgid "Unable to update board visibility" msgid "Unable to update board visibility"
msgstr "Kan bordzichtbaarheid niet bijwerken" msgstr "Kan bordzichtbaarheid niet bijwerken"
#: src/views/board/index.tsx:232 #: src/views/board/index.tsx:226
#: src/views/card/index.tsx:187 #: src/views/card/index.tsx:187
msgid "Unable to update card" msgid "Unable to update card"
msgstr "Kan kaart niet bijwerken" msgstr "Kan kaart niet bijwerken"
@@ -2379,7 +2372,7 @@ msgstr "Kan checklist niet bijwerken"
msgid "Unable to update checklist item" msgid "Unable to update checklist item"
msgstr "Kan checklistitem niet bijwerken" msgstr "Kan checklistitem niet bijwerken"
#: src/views/card/components/Comment.tsx:67 #: src/views/card/components/Comment.tsx:64
msgid "Unable to update comment" msgid "Unable to update comment"
msgstr "Kan reactie niet bijwerken" msgstr "Kan reactie niet bijwerken"
@@ -2391,7 +2384,7 @@ msgstr "Kan vervaldatum niet bijwerken"
msgid "Unable to update labels" msgid "Unable to update labels"
msgstr "Kan labels niet bijwerken" msgstr "Kan labels niet bijwerken"
#: src/views/board/index.tsx:176 #: src/views/board/index.tsx:170
#: src/views/card/components/ListSelector.tsx:52 #: src/views/card/components/ListSelector.tsx:52
msgid "Unable to update list" msgid "Unable to update list"
msgstr "Kan lijst niet bijwerken" msgstr "Kan lijst niet bijwerken"
@@ -2401,11 +2394,11 @@ msgid "Unable to update members"
msgstr "Kan leden niet bijwerken" msgstr "Kan leden niet bijwerken"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:157 #: src/views/card/components/ActivityList.tsx:156
msgid "unassigned <0>{0}</0> from the card" msgid "unassigned <0>{0}</0> from the card"
msgstr "<0>{0}</0> van de kaart verwijderd" msgstr "<0>{0}</0> van de kaart verwijderd"
#: src/views/card/components/ActivityList.tsx:154 #: src/views/card/components/ActivityList.tsx:153
msgid "unassigned themselves from the card" msgid "unassigned themselves from the card"
msgstr "zichzelf van de kaart verwijderd" msgstr "zichzelf van de kaart verwijderd"
@@ -2464,30 +2457,30 @@ msgstr "Bijwerken"
msgid "Update label" msgid "Update label"
msgstr "Label bijwerken" msgstr "Label bijwerken"
#: src/views/card/components/ActivityList.tsx:112 #: src/views/card/components/ActivityList.tsx:111
msgid "updated a checklist item" msgid "updated a checklist item"
msgstr "een checklistitem bijgewerkt" msgstr "een checklistitem bijgewerkt"
#: src/views/card/components/ActivityList.tsx:102 #: src/views/card/components/ActivityList.tsx:101
msgid "updated the description" msgid "updated the description"
msgstr "beschrijving bijgewerkt" msgstr "beschrijving bijgewerkt"
#: src/views/card/components/ActivityList.tsx:117 #: src/views/card/components/ActivityList.tsx:116
msgid "updated the due date" msgid "updated the due date"
msgstr "heeft de vervaldatum bijgewerkt" msgstr "heeft de vervaldatum bijgewerkt"
#: src/views/card/components/ActivityList.tsx:101 #: src/views/card/components/ActivityList.tsx:100
msgid "updated the title" msgid "updated the title"
msgstr "titel bijgewerkt" msgstr "titel bijgewerkt"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:126 #: src/views/card/components/ActivityList.tsx:125
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "titel bijgewerkt naar <0>{0}</0>" msgstr "titel bijgewerkt naar <0>{0}</0>"
#: src/components/SideNavigation.tsx:239 #: src/components/SideNavigation.tsx:237
#: src/views/settings/components/UpgradeToProConfirmation.tsx:53 #: src/views/settings/components/UpgradeToProConfirmation.tsx:53
#: src/views/settings/WorkspaceSettings.tsx:99 #: src/views/settings/WorkspaceSettings.tsx:90
msgid "Upgrade to Pro" msgid "Upgrade to Pro"
msgstr "Upgraden naar Pro" msgstr "Upgraden naar Pro"
@@ -2524,7 +2517,7 @@ msgstr "URL moet minimaal 3 tekens lang zijn"
msgid "Use template" msgid "Use template"
msgstr "Sjabloon gebruiken" msgstr "Sjabloon gebruiken"
#: src/views/members/index.tsx:246 #: src/views/members/index.tsx:237
msgid "User" msgid "User"
msgstr "Gebruiker" msgstr "Gebruiker"
@@ -2549,7 +2542,7 @@ msgstr "Bekijk en beheer je facturering en abonnement."
msgid "View docs" msgid "View docs"
msgstr "Bekijk documentatie" msgstr "Bekijk documentatie"
#: src/views/public/board/index.tsx:148 #: src/views/public/board/index.tsx:142
msgid "View only" msgid "View only"
msgstr "Alleen bekijken" msgstr "Alleen bekijken"
@@ -2557,7 +2550,7 @@ msgstr "Alleen bekijken"
msgid "View our roadmap." msgid "View our roadmap."
msgstr "Bekijk onze roadmap." msgstr "Bekijk onze roadmap."
#: src/views/public/board/index.tsx:182 #: src/views/public/board/index.tsx:172
msgid "View workspace" msgid "View workspace"
msgstr "Werkruimte bekijken" msgstr "Werkruimte bekijken"
@@ -2602,10 +2595,10 @@ msgid "Why make an open source Trello?"
msgstr "Waarom een open source Trello maken?" msgstr "Waarom een open source Trello maken?"
#: src/components/SettingsLayout.tsx:39 #: src/components/SettingsLayout.tsx:39
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/boards/index.tsx:33 #: src/views/boards/index.tsx:33
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
#: src/views/public/boards/index.tsx:66 #: src/views/public/boards/index.tsx:66
msgid "Workspace" msgid "Workspace"
msgstr "Werkruimte" msgstr "Werkruimte"
@@ -2618,7 +2611,7 @@ msgstr "Werkruimte succesvol aangemaakt. Je kunt later upgraden in de instelling
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Werkruimte verwijderd" msgstr "Werkruimte verwijderd"
#: src/views/settings/WorkspaceSettings.tsx:76 #: src/views/settings/WorkspaceSettings.tsx:75
msgid "Workspace description" msgid "Workspace description"
msgstr "Werkruimte beschrijving" msgstr "Werkruimte beschrijving"
@@ -2641,7 +2634,7 @@ msgid "Workspace members"
msgstr "Werkruimteleden" msgstr "Werkruimteleden"
#: src/components/NewWorkspaceForm.tsx:262 #: src/components/NewWorkspaceForm.tsx:262
#: src/views/settings/WorkspaceSettings.tsx:59 #: src/views/settings/WorkspaceSettings.tsx:58
msgid "Workspace name" msgid "Workspace name"
msgstr "Naam werkruimte" msgstr "Naam werkruimte"
@@ -2666,7 +2659,7 @@ msgstr "Werkruimtenaam bijgewerkt"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Werkruimte-slug bijgewerkt" msgstr "Werkruimte-slug bijgewerkt"
#: src/views/settings/WorkspaceSettings.tsx:67 #: src/views/settings/WorkspaceSettings.tsx:66
msgid "Workspace URL" msgid "Workspace URL"
msgstr "Werkruimte URL" msgstr "Werkruimte URL"
@@ -2687,7 +2680,7 @@ msgstr "Jaarlijks"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Ja, we bieden een voor altijd gratis plan voor individueel gebruik. Geen beperkingen, geen betaalmuren, geen limieten." msgstr "Ja, we bieden een voor altijd gratis plan voor individueel gebruik. Geen beperkingen, geen betaalmuren, geen limieten."
#: src/views/settings/AccountSettings.tsx:80 #: src/views/settings/AccountSettings.tsx:73
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Je staat op het punt je wachtwoord te wijzigen." msgstr "Je staat op het punt je wachtwoord te wijzigen."

File diff suppressed because one or more lines are too long

View File

@@ -18,7 +18,7 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"Plural-Forms: \n" "Plural-Forms: \n"
#: src/views/card/components/Comment.tsx:128 #: src/views/card/components/Comment.tsx:124
msgid " (edited)" msgid " (edited)"
msgstr " (edytowano)" msgstr " (edytowano)"
@@ -46,7 +46,7 @@ msgid "{0} labels"
msgstr "{0} etykiety" msgstr "{0} etykiety"
#. placeholder {0}: isTemplate ? "Template" : "Board" #. placeholder {0}: isTemplate ? "Template" : "Board"
#: src/views/board/index.tsx:422 #: src/views/board/index.tsx:416
msgid "{0} not found" msgid "{0} not found"
msgstr "{0} nie znaleziono" msgstr "{0} nie znaleziono"
@@ -105,7 +105,7 @@ msgstr "Dzienniki aktywności"
msgid "Add a card" msgid "Add a card"
msgstr "Dodaj kartę" msgstr "Dodaj kartę"
#: src/views/card/components/Comment.tsx:151 #: src/views/card/components/Comment.tsx:147
#: src/views/card/components/NewCommentForm.tsx:55 #: src/views/card/components/NewCommentForm.tsx:55
msgid "Add a comment..." msgid "Add a comment..."
msgstr "Dodaj komentarz..." msgstr "Dodaj komentarz..."
@@ -137,38 +137,38 @@ msgid "Add member"
msgstr "Dodaj członka" msgstr "Dodaj członka"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:78 #: src/views/card/components/ActivityList.tsx:77
msgid "added {0} labels: <0>{labelList}</0>" msgid "added {0} labels: <0>{labelList}</0>"
msgstr "dodano {0} etykiety: <0>{labelList}</0>" msgstr "dodano {0} etykiety: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:108 #: src/views/card/components/ActivityList.tsx:107
msgid "added a checklist" msgid "added a checklist"
msgstr "dodał listę kontrolną" msgstr "dodał listę kontrolną"
#: src/views/card/components/ActivityList.tsx:111 #: src/views/card/components/ActivityList.tsx:110
msgid "added a checklist item" msgid "added a checklist item"
msgstr "dodał(a) element listy kontrolnej" msgstr "dodał(a) element listy kontrolnej"
#: src/views/card/components/ActivityList.tsx:104 #: src/views/card/components/ActivityList.tsx:103
msgid "added a label to the card" msgid "added a label to the card"
msgstr "dodał(a) etykietę do karty" msgstr "dodał(a) etykietę do karty"
#: src/views/card/components/ActivityList.tsx:106 #: src/views/card/components/ActivityList.tsx:105
msgid "added a member to the card" msgid "added a member to the card"
msgstr "dodał(a) członka do karty" msgstr "dodał(a) członka do karty"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:182 #: src/views/card/components/ActivityList.tsx:181
msgid "added checklist <0>{0}</0>" msgid "added checklist <0>{0}</0>"
msgstr "dodał(a) listę kontrolną <0>{0}</0>" msgstr "dodał(a) listę kontrolną <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:206 #: src/views/card/components/ActivityList.tsx:205
msgid "added checklist item <0>{0}</0>" msgid "added checklist item <0>{0}</0>"
msgstr "dodał(a) element listy kontrolnej <0>{0}</0>" msgstr "dodał(a) element listy kontrolnej <0>{0}</0>"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:166 #: src/views/card/components/ActivityList.tsx:165
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "dodał(a) etykietę <0>{0}</0>" msgstr "dodał(a) etykietę <0>{0}</0>"
@@ -189,10 +189,6 @@ msgstr "Role administratora"
msgid "All systems operational" msgid "All systems operational"
msgstr "Wszystkie systemy działają poprawnie" msgstr "Wszystkie systemy działają poprawnie"
#: src/views/settings/components/UpdateWorkspaceEmailVisibilityForm.tsx:42
msgid "Allow workspace members to see each other's email addresses"
msgstr "Zezwól członkom workspace'u na widoczność swoich adresów e-mail"
#: src/views/auth/signup/index.tsx:88 #: src/views/auth/signup/index.tsx:88
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Masz już konto? <0><1>Zaloguj się</1></0>" msgstr "Masz już konto? <0><1>Zaloguj się</1></0>"
@@ -280,7 +276,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "Czy na pewno chcesz usunąć swoje konto?" msgstr "Czy na pewno chcesz usunąć swoje konto?"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:146 #: src/views/card/components/ActivityList.tsx:145
msgid "assigned <0>{0}</0> to the card" msgid "assigned <0>{0}</0> to the card"
msgstr "przypisano <0>{0}</0> do karty" msgstr "przypisano <0>{0}</0> do karty"
@@ -326,9 +322,9 @@ msgstr "Portal rozliczeniowy"
msgid "Blog Post" msgid "Blog Post"
msgstr "Post na blogu" msgstr "Post na blogu"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/card/index.tsx:273 #: src/views/card/index.tsx:273
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
msgid "Board" msgid "Board"
msgstr "Tablica" msgstr "Tablica"
@@ -345,7 +341,7 @@ msgstr "Nazwa tablicy nie może przekraczać 100 znaków"
msgid "Board name is required" msgid "Board name is required"
msgstr "Nazwa tablicy jest wymagana" msgstr "Nazwa tablicy jest wymagana"
#: src/views/public/board/index.tsx:176 #: src/views/public/board/index.tsx:166
msgid "Board not found" msgid "Board not found"
msgstr "Tablica nie została znaleziona" msgstr "Tablica nie została znaleziona"
@@ -361,7 +357,7 @@ msgstr "Adres URL tablicy może zawierać tylko litery, cyfry i myślniki"
msgid "Board URL cannot exceed 60 characters" msgid "Board URL cannot exceed 60 characters"
msgstr "Adres URL tablicy nie może przekraczać 60 znaków" msgstr "Adres URL tablicy nie może przekraczać 60 znaków"
#: src/views/public/board/index.tsx:86 #: src/views/public/board/index.tsx:80
msgid "Board URL copied to clipboard" msgid "Board URL copied to clipboard"
msgstr "Adres URL tablicy został skopiowany do schowka" msgstr "Adres URL tablicy został skopiowany do schowka"
@@ -378,7 +374,7 @@ msgstr "Widoczność tablicy"
msgid "Board visibility updated" msgid "Board visibility updated"
msgstr "Widoczność tablicy została zaktualizowana" msgstr "Widoczność tablicy została zaktualizowana"
#: src/components/SideNavigation.tsx:98 #: src/components/SideNavigation.tsx:97
msgid "Boards" msgid "Boards"
msgstr "Tablice" msgstr "Tablice"
@@ -397,7 +393,7 @@ msgstr "Zgłoszenie błędu"
#: src/components/DeleteLabelConfirmation.tsx:49 #: src/components/DeleteLabelConfirmation.tsx:49
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176
#: src/views/board/components/DeleteBoardConfirmation.tsx:44 #: src/views/board/components/DeleteBoardConfirmation.tsx:44
#: src/views/card/components/Comment.tsx:163 #: src/views/card/components/Comment.tsx:159
#: src/views/card/components/DeleteCardConfirmation.tsx:86 #: src/views/card/components/DeleteCardConfirmation.tsx:86
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64 #: src/views/card/components/DeleteChecklistConfirmation.tsx:64
#: src/views/card/components/DeleteCommentConfirmation.tsx:77 #: src/views/card/components/DeleteCommentConfirmation.tsx:77
@@ -423,19 +419,19 @@ msgstr "Nie można było znaleźć karty"
msgid "Card title" msgid "Card title"
msgstr "Tytuł karty" msgstr "Tytuł karty"
#: src/views/settings/AccountSettings.tsx:77 #: src/views/settings/AccountSettings.tsx:70
#: src/views/settings/AccountSettings.tsx:87 #: src/views/settings/AccountSettings.tsx:80
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
msgid "Change Password" msgid "Change Password"
msgstr "Zmień hasło" msgstr "Zmień hasło"
#: src/views/settings/AccountSettings.tsx:52 #: src/views/settings/AccountSettings.tsx:45
msgid "Change your language preferences." msgid "Change your language preferences."
msgstr "Zmień swoje preferencje językowe." msgstr "Zmień swoje preferencje językowe."
#: src/views/card/components/ActivityList.tsx:256 #: src/views/card/components/ActivityList.tsx:255
#: src/views/card/components/ActivityList.tsx:270 #: src/views/card/components/ActivityList.tsx:269
msgid "changed the due date to <0>{formattedDate}</0>" msgid "changed the due date to <0>{formattedDate}</0>"
msgstr "zmieniono termin na <0>{formattedDate}</0>" msgstr "zmieniono termin na <0>{formattedDate}</0>"
@@ -509,12 +505,12 @@ msgstr "Zakończ"
msgid "Complete control and ownership:" msgid "Complete control and ownership:"
msgstr "Pełna kontrola i własność:" msgstr "Pełna kontrola i własność:"
#: src/views/card/components/ActivityList.tsx:113 #: src/views/card/components/ActivityList.tsx:112
msgid "completed a checklist item" msgid "completed a checklist item"
msgstr "ukończono element listy kontrolnej" msgstr "ukończono element listy kontrolnej"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:223 #: src/views/card/components/ActivityList.tsx:222
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "ukończono element listy kontrolnej <0>{0}</0>" msgstr "ukończono element listy kontrolnej <0>{0}</0>"
@@ -623,8 +619,8 @@ msgstr "Utwórz nowy klucz"
msgid "Create new label" msgid "Create new label"
msgstr "Utwórz nową etykietę" msgstr "Utwórz nową etykietę"
#: src/views/board/index.tsx:71 #: src/views/board/index.tsx:65
#: src/views/board/index.tsx:517 #: src/views/board/index.tsx:507
msgid "Create new list" msgid "Create new list"
msgstr "Utwórz nową listę" msgstr "Utwórz nową listę"
@@ -637,7 +633,7 @@ msgstr "Utwórz szablon"
msgid "Create workspace" msgid "Create workspace"
msgstr "Utwórz przestrzeń roboczą" msgstr "Utwórz przestrzeń roboczą"
#: src/views/card/components/ActivityList.tsx:100 #: src/views/card/components/ActivityList.tsx:99
msgid "created the card" msgid "created the card"
msgstr "utworzył(a) kartę" msgstr "utworzył(a) kartę"
@@ -683,7 +679,7 @@ msgstr "Niestandardowy adres URL przestrzeni roboczej"
msgid "Customer Support" msgid "Customer Support"
msgstr "Obsługa klienta" msgstr "Obsługa klienta"
#: src/components/UserMenu.tsx:158 #: src/components/UserMenu.tsx:155
msgid "Dark" msgid "Dark"
msgstr "Ciemny" msgstr "Ciemny"
@@ -701,8 +697,8 @@ msgstr "Dezaktywuj link zaproszenia"
msgid "Delete" msgid "Delete"
msgstr "Usuń" msgstr "Usuń"
#: src/views/settings/AccountSettings.tsx:59 #: src/views/settings/AccountSettings.tsx:52
#: src/views/settings/AccountSettings.tsx:69 #: src/views/settings/AccountSettings.tsx:62
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
msgid "Delete account" msgid "Delete account"
msgstr "Usuń konto" msgstr "Usuń konto"
@@ -715,7 +711,7 @@ msgstr "Usuń tablicę"
msgid "Delete card" msgid "Delete card"
msgstr "Usuń kartę" msgstr "Usuń kartę"
#: src/views/card/components/Comment.tsx:95 #: src/views/card/components/Comment.tsx:92
msgid "Delete comment" msgid "Delete comment"
msgstr "Usuń komentarz" msgstr "Usuń komentarz"
@@ -728,26 +724,26 @@ msgid "Delete template"
msgstr "Usuń szablon" msgstr "Usuń szablon"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/WorkspaceSettings.tsx:106 #: src/views/settings/WorkspaceSettings.tsx:97
#: src/views/settings/WorkspaceSettings.tsx:117 #: src/views/settings/WorkspaceSettings.tsx:108
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Usuń przestrzeń roboczą" msgstr "Usuń przestrzeń roboczą"
#: src/views/card/components/ActivityList.tsx:110 #: src/views/card/components/ActivityList.tsx:109
msgid "deleted a checklist" msgid "deleted a checklist"
msgstr "usunięto listę kontrolną" msgstr "usunięto listę kontrolną"
#: src/views/card/components/ActivityList.tsx:115 #: src/views/card/components/ActivityList.tsx:114
msgid "deleted a checklist item" msgid "deleted a checklist item"
msgstr "usunięto element listy kontrolnej" msgstr "usunięto element listy kontrolnej"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:198 #: src/views/card/components/ActivityList.tsx:197
msgid "deleted checklist <0>{0}</0>" msgid "deleted checklist <0>{0}</0>"
msgstr "usunięto listę kontrolną <0>{0}</0>" msgstr "usunięto listę kontrolną <0>{0}</0>"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:241 #: src/views/card/components/ActivityList.tsx:240
msgid "deleted checklist item <0>{0}</0>" msgid "deleted checklist item <0>{0}</0>"
msgstr "usunięto element listy kontrolnej <0>{0}</0>" msgstr "usunięto element listy kontrolnej <0>{0}</0>"
@@ -795,7 +791,7 @@ msgstr "dokumentacja"
msgid "Docs" msgid "Docs"
msgstr "Dokumentacja" msgstr "Dokumentacja"
#: src/components/UserMenu.tsx:209 #: src/components/UserMenu.tsx:206
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
#: src/views/home/components/Footer.tsx:78 #: src/views/home/components/Footer.tsx:78
#: src/views/home/components/Header.tsx:36 #: src/views/home/components/Header.tsx:36
@@ -848,7 +844,7 @@ msgstr "Edytuj"
msgid "Edit board URL" msgid "Edit board URL"
msgstr "Edytuj URL tablicy" msgstr "Edytuj URL tablicy"
#: src/views/card/components/Comment.tsx:86 #: src/views/card/components/Comment.tsx:83
msgid "Edit comment" msgid "Edit comment"
msgstr "Edytuj komentarz" msgstr "Edytuj komentarz"
@@ -873,14 +869,9 @@ msgid "email"
msgstr "email" msgstr "email"
#: src/views/members/components/InviteMemberForm.tsx:272 #: src/views/members/components/InviteMemberForm.tsx:272
#: src/views/settings/AccountSettings.tsx:42
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
#: src/views/settings/WorkspaceSettings.tsx:84
msgid "Email visibility"
msgstr "Widoczność adresu e-mail"
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
msgid "Enhancement" msgid "Enhancement"
msgstr "Ulepszenie" msgstr "Ulepszenie"
@@ -1062,7 +1053,7 @@ msgid "Features"
msgstr "Funkcje" msgstr "Funkcje"
#: src/components/FeedbackModal.tsx:59 #: src/components/FeedbackModal.tsx:59
#: src/components/UserMenu.tsx:217 #: src/components/UserMenu.tsx:214
msgid "Feedback" msgid "Feedback"
msgstr "Opinie" msgstr "Opinie"
@@ -1083,12 +1074,14 @@ msgid "For long-term sustainability, we recognise all good open source projects
msgstr "Dla długoterminowej trwałości uznajemy, że wszystkie dobre projekty open source potrzebują źródła dochodu. Nasze pochodzi z płatnej oferty w chmurze dla przestrzeni roboczych z wieloma użytkownikami oraz dla niestandardowych nazw przestrzeni roboczych. Nie ma obowiązku korzystania z niej, a oprogramowanie można hostować samodzielnie na własnej infrastrukturze bezpłatnie." msgstr "Dla długoterminowej trwałości uznajemy, że wszystkie dobre projekty open source potrzebują źródła dochodu. Nasze pochodzi z płatnej oferty w chmurze dla przestrzeni roboczych z wieloma użytkownikami oraz dla niestandardowych nazw przestrzeni roboczych. Nie ma obowiązku korzystania z niej, a oprogramowanie można hostować samodzielnie na własnej infrastrukturze bezpłatnie."
#: src/views/pricing/components/Pricing.tsx:32 #: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/PricingTiers.tsx:30
#: src/views/pricing/components/PricingTiers.tsx:30 #: src/views/pricing/components/PricingTiers.tsx:30
msgid "Free" msgid "Free"
msgstr "Darmowy" msgstr "Darmowy"
#: src/views/members/components/InviteMemberForm.tsx:333 #: src/views/members/components/InviteMemberForm.tsx:333
#: src/views/members/index.tsx:217 #: src/views/members/index.tsx:208
msgid "Free Plan" msgid "Free Plan"
msgstr "Darmowy plan" msgstr "Darmowy plan"
@@ -1128,7 +1121,7 @@ msgstr "Rozpocznij"
msgid "Get started by creating a new {0}" msgid "Get started by creating a new {0}"
msgstr "Rozpocznij, tworząc nowy {0}" msgstr "Rozpocznij, tworząc nowy {0}"
#: src/views/board/index.tsx:509 #: src/views/board/index.tsx:499
msgid "Get started by creating a new list" msgid "Get started by creating a new list"
msgstr "Rozpocznij, tworząc nową listę" msgstr "Rozpocznij, tworząc nową listę"
@@ -1162,19 +1155,19 @@ msgstr "Wróć do strony głównej"
msgid "Go to app" msgid "Go to app"
msgstr "Przejdź do aplikacji" msgstr "Przejdź do aplikacji"
#: src/components/SideNavigation.tsx:106 #: src/components/SideNavigation.tsx:105
msgid "Go to boards" msgid "Go to boards"
msgstr "Przejdź do tablic" msgstr "Przejdź do tablic"
#: src/components/SideNavigation.tsx:130 #: src/components/SideNavigation.tsx:129
msgid "Go to members" msgid "Go to members"
msgstr "Przejdź do członków" msgstr "Przejdź do członków"
#: src/components/SideNavigation.tsx:142 #: src/components/SideNavigation.tsx:141
msgid "Go to settings" msgid "Go to settings"
msgstr "Przejdź do ustawień" msgstr "Przejdź do ustawień"
#: src/components/SideNavigation.tsx:118 #: src/components/SideNavigation.tsx:117
msgid "Go to templates" msgid "Go to templates"
msgstr "Przejdź do szablonów" msgstr "Przejdź do szablonów"
@@ -1299,7 +1292,7 @@ msgstr "Nieprawidłowy adres e-mail"
msgid "Invalid invitation" msgid "Invalid invitation"
msgstr "Nieprawidłowe zaproszenie" msgstr "Nieprawidłowe zaproszenie"
#: src/views/members/index.tsx:230 #: src/views/members/index.tsx:221
msgid "Invite" msgid "Invite"
msgstr "Zaproś" msgstr "Zaproś"
@@ -1380,7 +1373,7 @@ msgstr "Etykiety i filtry"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Etykiety i Filtry" msgstr "Etykiety i Filtry"
#: src/views/settings/AccountSettings.tsx:49 #: src/views/settings/AccountSettings.tsx:42
msgid "Language" msgid "Language"
msgstr "Język" msgstr "Język"
@@ -1389,7 +1382,7 @@ msgstr "Język"
msgid "Launch offer" msgid "Launch offer"
msgstr "Oferta startowa" msgstr "Oferta startowa"
#: src/views/members/index.tsx:200 #: src/views/members/index.tsx:191
msgid "Launch offer: Get unlimited members with Pro" msgid "Launch offer: Get unlimited members with Pro"
msgstr "Oferta startowa: Nieograniczona liczba członków z Pro" msgstr "Oferta startowa: Nieograniczona liczba członków z Pro"
@@ -1414,11 +1407,11 @@ msgstr "Prawne"
msgid "License" msgid "License"
msgstr "Licencja" msgstr "Licencja"
#: src/components/UserMenu.tsx:172 #: src/components/UserMenu.tsx:169
msgid "Light" msgid "Light"
msgstr "Jasny" msgstr "Jasny"
#: src/views/public/board/index.tsx:84 #: src/views/public/board/index.tsx:78
msgid "Link copied" msgid "Link copied"
msgstr "Link skopiowany" msgstr "Link skopiowany"
@@ -1434,11 +1427,11 @@ msgstr "Nazwa listy"
msgid "Lists" msgid "Lists"
msgstr "Listy" msgstr "Listy"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Load more activities" msgid "Load more activities"
msgstr "Załaduj więcej aktywności" msgstr "Załaduj więcej aktywności"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Loading..." msgid "Loading..."
msgstr "Ładowanie..." msgstr "Ładowanie..."
@@ -1446,7 +1439,7 @@ msgstr "Ładowanie..."
msgid "Login | kan.bn" msgid "Login | kan.bn"
msgstr "Zaloguj się | kan.bn" msgstr "Zaloguj się | kan.bn"
#: src/components/UserMenu.tsx:227 #: src/components/UserMenu.tsx:224
msgid "Logout" msgid "Logout"
msgstr "Wyloguj się" msgstr "Wyloguj się"
@@ -1470,12 +1463,12 @@ msgstr "magiczny link"
msgid "Make template" msgid "Make template"
msgstr "Utwórz szablon" msgstr "Utwórz szablon"
#: src/views/card/components/ActivityList.tsx:114 #: src/views/card/components/ActivityList.tsx:113
msgid "marked a checklist item as incomplete" msgid "marked a checklist item as incomplete"
msgstr "oznaczył element listy kontrolnej jako nieukończony" msgstr "oznaczył element listy kontrolnej jako nieukończony"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:232 #: src/views/card/components/ActivityList.tsx:231
msgid "marked checklist item <0>{0}</0> as incomplete" msgid "marked checklist item <0>{0}</0> as incomplete"
msgstr "oznaczył element listy kontrolnej <0>{0}</0> jako nieukończony" msgstr "oznaczył element listy kontrolnej <0>{0}</0> jako nieukończony"
@@ -1483,16 +1476,16 @@ msgstr "oznaczył element listy kontrolnej <0>{0}</0> jako nieukończony"
msgid "Medium Priority" msgid "Medium Priority"
msgstr "Średni priorytet" msgstr "Średni priorytet"
#: src/components/SideNavigation.tsx:122 #: src/components/SideNavigation.tsx:121
#: src/views/board/components/Filters.tsx:147 #: src/views/board/components/Filters.tsx:147
#: src/views/board/components/NewCardForm.tsx:377 #: src/views/board/components/NewCardForm.tsx:377
#: src/views/card/index.tsx:131 #: src/views/card/index.tsx:131
#: src/views/members/index.tsx:187 #: src/views/members/index.tsx:178
msgid "Members" msgid "Members"
msgstr "Członkowie" msgstr "Członkowie"
#. placeholder {0}: workspace.name ?? t`Workspace` #. placeholder {0}: workspace.name ?? t`Workspace`
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Członkowie | {0}" msgstr "Członkowie | {0}"
@@ -1507,11 +1500,11 @@ msgstr "rozliczenie miesięczne"
#. placeholder {0}: truncate(fromList) #. placeholder {0}: truncate(fromList)
#. placeholder {1}: truncate(toList) #. placeholder {1}: truncate(toList)
#: src/views/card/components/ActivityList.tsx:134 #: src/views/card/components/ActivityList.tsx:133
msgid "moved the card from <0>{0}</0> to<1>{1}</1>" msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
msgstr "przeniesiono kartę z <0>{0}</0> do<1>{1}</1>" msgstr "przeniesiono kartę z <0>{0}</0> do<1>{1}</1>"
#: src/views/card/components/ActivityList.tsx:103 #: src/views/card/components/ActivityList.tsx:102
msgid "moved the card to another list" msgid "moved the card to another list"
msgstr "przeniesiono kartę do innej listy" msgstr "przeniesiono kartę do innej listy"
@@ -1560,7 +1553,7 @@ msgid "New label"
msgstr "Nowa etykieta" msgstr "Nowa etykieta"
#: src/views/board/components/NewListForm.tsx:113 #: src/views/board/components/NewListForm.tsx:113
#: src/views/board/index.tsx:476 #: src/views/board/index.tsx:470
msgid "New list" msgid "New list"
msgstr "Nowa lista" msgstr "Nowa lista"
@@ -1621,7 +1614,7 @@ msgstr "Brak dostępnego URL do pobrania tego załącznika."
msgid "No keyboard shortcuts registered." msgid "No keyboard shortcuts registered."
msgstr "Brak zarejestrowanych skrótów klawiaturowych." msgstr "Brak zarejestrowanych skrótów klawiaturowych."
#: src/views/board/index.tsx:506 #: src/views/board/index.tsx:496
msgid "No lists" msgid "No lists"
msgstr "Brak list" msgstr "Brak list"
@@ -1637,11 +1630,11 @@ msgstr "Oferta"
msgid "Onboarding" msgid "Onboarding"
msgstr "Wprowadzenie" msgstr "Wprowadzenie"
#: src/views/settings/AccountSettings.tsx:62 #: src/views/settings/AccountSettings.tsx:55
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "Po usunięciu konta nie będzie możliwości jego przywrócenia. Tej operacji nie można cofnąć." msgstr "Po usunięciu konta nie będzie możliwości jego przywrócenia. Tej operacji nie można cofnąć."
#: src/views/settings/WorkspaceSettings.tsx:109 #: src/views/settings/WorkspaceSettings.tsx:100
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "Po usunięciu przestrzeni roboczej nie będzie możliwości jej przywrócenia. Tej operacji nie można cofnąć." msgstr "Po usunięciu przestrzeni roboczej nie będzie możliwości jej przywrócenia. Tej operacji nie można cofnąć."
@@ -1711,7 +1704,7 @@ msgstr "Hasło musi mieć co najmniej 8 znaków"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Hasła nie pasują do siebie" msgstr "Hasła nie pasują do siebie"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Paused" msgid "Paused"
msgstr "Wstrzymane" msgstr "Wstrzymane"
@@ -1720,7 +1713,7 @@ msgstr "Wstrzymane"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Częstotliwość płatności" msgstr "Częstotliwość płatności"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Pending" msgid "Pending"
msgstr "Oczekujące" msgstr "Oczekujące"
@@ -1777,15 +1770,15 @@ msgstr "Proszę wybrać plik do przesłania."
#: src/views/board/components/NewTemplateForm.tsx:77 #: src/views/board/components/NewTemplateForm.tsx:77
#: src/views/board/components/UpdateBoardSlugForm.tsx:73 #: src/views/board/components/UpdateBoardSlugForm.tsx:73
#: src/views/board/components/VisibilityButton.tsx:54 #: src/views/board/components/VisibilityButton.tsx:54
#: src/views/board/index.tsx:177 #: src/views/board/index.tsx:171
#: src/views/board/index.tsx:233 #: src/views/board/index.tsx:227
#: src/views/boards/components/ImportBoardsForm.tsx:205 #: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/card/components/AttachmentThumbnails.tsx:74 #: src/views/card/components/AttachmentThumbnails.tsx:74
#: src/views/card/components/ChecklistItemRow.tsx:69 #: src/views/card/components/ChecklistItemRow.tsx:69
#: src/views/card/components/ChecklistItemRow.tsx:97 #: src/views/card/components/ChecklistItemRow.tsx:97
#: src/views/card/components/ChecklistNameInput.tsx:47 #: src/views/card/components/ChecklistNameInput.tsx:47
#: src/views/card/components/Checklists.tsx:81 #: src/views/card/components/Checklists.tsx:81
#: src/views/card/components/Comment.tsx:68 #: src/views/card/components/Comment.tsx:65
#: src/views/card/components/DeleteCardConfirmation.tsx:52 #: src/views/card/components/DeleteCardConfirmation.tsx:52
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38 #: src/views/card/components/DeleteChecklistConfirmation.tsx:38
#: src/views/card/components/DeleteCommentConfirmation.tsx:46 #: src/views/card/components/DeleteCommentConfirmation.tsx:46
@@ -1845,7 +1838,7 @@ msgstr "Polityka prywatności"
msgid "Private" msgid "Private"
msgstr "Prywatne" msgstr "Prywatne"
#: src/views/members/index.tsx:214 #: src/views/members/index.tsx:205
msgid "Pro Plan" msgid "Pro Plan"
msgstr "Plan Pro" msgstr "Plan Pro"
@@ -1893,44 +1886,44 @@ msgstr "Zdalne"
msgid "Remove" msgid "Remove"
msgstr "Usuń" msgstr "Usuń"
#: src/views/members/index.tsx:157 #: src/views/members/index.tsx:148
msgid "Remove member" msgid "Remove member"
msgstr "Usuń członka" msgstr "Usuń członka"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:92 #: src/views/card/components/ActivityList.tsx:91
msgid "removed {0} labels: <0>{labelList}</0>" msgid "removed {0} labels: <0>{labelList}</0>"
msgstr "usunięto {0} etykiety: <0>{labelList}</0>" msgstr "usunięto {0} etykiety: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:105 #: src/views/card/components/ActivityList.tsx:104
msgid "removed a label from the card" msgid "removed a label from the card"
msgstr "usunął etykietę z karty" msgstr "usunął etykietę z karty"
#: src/views/card/components/ActivityList.tsx:107 #: src/views/card/components/ActivityList.tsx:106
msgid "removed a member from the card" msgid "removed a member from the card"
msgstr "usunął członka z karty" msgstr "usunął członka z karty"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:174 #: src/views/card/components/ActivityList.tsx:173
msgid "removed label <0>{0}</0>" msgid "removed label <0>{0}</0>"
msgstr "usunięto etykietę <0>{0}</0>" msgstr "usunięto etykietę <0>{0}</0>"
#: src/views/card/components/ActivityList.tsx:118 #: src/views/card/components/ActivityList.tsx:117
#: src/views/card/components/ActivityList.tsx:277 #: src/views/card/components/ActivityList.tsx:276
msgid "removed the due date" msgid "removed the due date"
msgstr "usunięto termin" msgstr "usunięto termin"
#: src/views/card/components/ActivityList.tsx:109 #: src/views/card/components/ActivityList.tsx:108
msgid "renamed a checklist" msgid "renamed a checklist"
msgstr "zmieniono nazwę listy kontrolnej" msgstr "zmieniono nazwę listy kontrolnej"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:190 #: src/views/card/components/ActivityList.tsx:189
msgid "renamed checklist <0>{0}</0>" msgid "renamed checklist <0>{0}</0>"
msgstr "zmieniono nazwę listy kontrolnej <0>{0}</0>" msgstr "zmieniono nazwę listy kontrolnej <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:214 #: src/views/card/components/ActivityList.tsx:213
msgid "renamed checklist item to <0>{0}</0>" msgid "renamed checklist item to <0>{0}</0>"
msgstr "zmieniono nazwę elementu listy kontrolnej na <0>{0}</0>" msgstr "zmieniono nazwę elementu listy kontrolnej na <0>{0}</0>"
@@ -1960,7 +1953,7 @@ msgstr "Przegląd"
msgid "Roadmap" msgid "Roadmap"
msgstr "Plan ulepszeń" msgstr "Plan ulepszeń"
#: src/views/members/index.tsx:252 #: src/views/members/index.tsx:243
msgid "Role" msgid "Role"
msgstr "Rola" msgstr "Rola"
@@ -1970,7 +1963,7 @@ msgid "Run on your own infrastructure"
msgstr "Uruchom na własnej infrastrukturze" msgstr "Uruchom na własnej infrastrukturze"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183
#: src/views/card/components/Comment.tsx:170 #: src/views/card/components/Comment.tsx:166
#: src/views/settings/components/Avatar.tsx:309 #: src/views/settings/components/Avatar.tsx:309
msgid "Save" msgid "Save"
msgstr "Zapisz" msgstr "Zapisz"
@@ -2008,7 +2001,7 @@ msgstr "Hostuj samodzielnie"
msgid "Self host with Github" msgid "Self host with Github"
msgstr "Hostuj samodzielnie z Github" msgstr "Hostuj samodzielnie z Github"
#: src/views/card/components/ActivityList.tsx:143 #: src/views/card/components/ActivityList.tsx:142
msgid "self-assigned the card" msgid "self-assigned the card"
msgstr "przypisał(a) sobie kartę" msgstr "przypisał(a) sobie kartę"
@@ -2028,12 +2021,12 @@ msgstr "Starszy"
msgid "Set due date" msgid "Set due date"
msgstr "Ustaw termin" msgstr "Ustaw termin"
#: src/views/card/components/ActivityList.tsx:116 #: src/views/card/components/ActivityList.tsx:115
msgid "set the due date" msgid "set the due date"
msgstr "ustawiono termin" msgstr "ustawiono termin"
#: src/components/SettingsLayout.tsx:82 #: src/components/SettingsLayout.tsx:82
#: src/components/SideNavigation.tsx:134 #: src/components/SideNavigation.tsx:133
msgid "Settings" msgid "Settings"
msgstr "Ustawienia" msgstr "Ustawienia"
@@ -2053,11 +2046,11 @@ msgstr "Ustawienia | Rozliczenia"
msgid "Settings | Integrations" msgid "Settings | Integrations"
msgstr "Ustawienia | Integracje" msgstr "Ustawienia | Integracje"
#: src/views/settings/WorkspaceSettings.tsx:55 #: src/views/settings/WorkspaceSettings.tsx:54
msgid "Settings | Workspace" msgid "Settings | Workspace"
msgstr "Ustawienia | Obszar roboczy" msgstr "Ustawienia | Obszar roboczy"
#: src/components/UserMenu.tsx:187 #: src/components/UserMenu.tsx:184
msgid "Shortcuts" msgid "Shortcuts"
msgstr "Skróty" msgstr "Skróty"
@@ -2129,7 +2122,7 @@ msgstr "Sukces"
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:" msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Zwiększ możliwości swojego obszaru roboczego za jedyne 29 USD/miesiąc. Oto, co otrzymasz:" msgstr "Zwiększ możliwości swojego obszaru roboczego za jedyne 29 USD/miesiąc. Oto, co otrzymasz:"
#: src/components/UserMenu.tsx:198 #: src/components/UserMenu.tsx:195
msgid "Support" msgid "Support"
msgstr "Wsparcie" msgstr "Wsparcie"
@@ -2138,12 +2131,12 @@ msgstr "Wsparcie"
msgid "Support the development of the project" msgid "Support the development of the project"
msgstr "Wspieraj rozwój projektu" msgstr "Wspieraj rozwój projektu"
#: src/components/UserMenu.tsx:144 #: src/components/UserMenu.tsx:141
msgid "System" msgid "System"
msgstr "System" msgstr "System"
#: src/views/members/components/InviteMemberForm.tsx:322 #: src/views/members/components/InviteMemberForm.tsx:322
#: src/views/members/index.tsx:216 #: src/views/members/index.tsx:207
msgid "Team Plan" msgid "Team Plan"
msgstr "Plan zespołowy" msgstr "Plan zespołowy"
@@ -2153,8 +2146,8 @@ msgstr "Plan zespołowy"
msgid "Teams" msgid "Teams"
msgstr "Zespoły" msgstr "Zespoły"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/board/index.tsx:431 #: src/views/board/index.tsx:425
msgid "Template" msgid "Template"
msgstr "Szablon" msgstr "Szablon"
@@ -2174,7 +2167,7 @@ msgstr "Nazwa szablonu nie może przekraczać 100 znaków"
msgid "Template name is required" msgid "Template name is required"
msgstr "Nazwa szablonu jest wymagana" msgstr "Nazwa szablonu jest wymagana"
#: src/components/SideNavigation.tsx:110 #: src/components/SideNavigation.tsx:109
#: src/views/home/components/Features.tsx:115 #: src/views/home/components/Features.tsx:115
msgid "Templates" msgid "Templates"
msgstr "Szablony" msgstr "Szablony"
@@ -2208,7 +2201,7 @@ msgstr "Otwarta alternatywa <0/> dla Trello"
msgid "The visibility of your board has been set to {0}." msgid "The visibility of your board has been set to {0}."
msgstr "Widoczność Twojej tablicy została ustawiona na {0}." msgstr "Widoczność Twojej tablicy została ustawiona na {0}."
#: src/components/UserMenu.tsx:131 #: src/components/UserMenu.tsx:128
msgid "Theme" msgid "Theme"
msgstr "Motyw" msgstr "Motyw"
@@ -2228,7 +2221,7 @@ msgstr "Tej akcji nie można cofnąć."
msgid "This API key will only be shown once. Please save it in a secure location." 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." msgstr "Ten klucz API zostanie wyświetlony tylko raz. Proszę zapisać go w bezpiecznym miejscu."
#: src/views/public/board/index.tsx:179 #: src/views/public/board/index.tsx:169
msgid "This board is private or does not exist" msgid "This board is private or does not exist"
msgstr "Ta tablica jest prywatna lub nie istnieje" msgstr "Ta tablica jest prywatna lub nie istnieje"
@@ -2371,7 +2364,7 @@ msgstr "Nie można zaktualizować adresu URL tablicy"
msgid "Unable to update board visibility" msgid "Unable to update board visibility"
msgstr "Nie można zaktualizować widoczności tablicy" msgstr "Nie można zaktualizować widoczności tablicy"
#: src/views/board/index.tsx:232 #: src/views/board/index.tsx:226
#: src/views/card/index.tsx:187 #: src/views/card/index.tsx:187
msgid "Unable to update card" msgid "Unable to update card"
msgstr "Nie można zaktualizować karty" msgstr "Nie można zaktualizować karty"
@@ -2384,7 +2377,7 @@ msgstr "Nie można zaktualizować listy kontrolnej"
msgid "Unable to update checklist item" msgid "Unable to update checklist item"
msgstr "Nie można zaktualizować elementu listy kontrolnej" msgstr "Nie można zaktualizować elementu listy kontrolnej"
#: src/views/card/components/Comment.tsx:67 #: src/views/card/components/Comment.tsx:64
msgid "Unable to update comment" msgid "Unable to update comment"
msgstr "Nie można zaktualizować komentarza" msgstr "Nie można zaktualizować komentarza"
@@ -2396,7 +2389,7 @@ msgstr "Nie można zaktualizować terminu"
msgid "Unable to update labels" msgid "Unable to update labels"
msgstr "Nie można zaktualizować etykiet" msgstr "Nie można zaktualizować etykiet"
#: src/views/board/index.tsx:176 #: src/views/board/index.tsx:170
#: src/views/card/components/ListSelector.tsx:52 #: src/views/card/components/ListSelector.tsx:52
msgid "Unable to update list" msgid "Unable to update list"
msgstr "Nie można zaktualizować listy" msgstr "Nie można zaktualizować listy"
@@ -2406,11 +2399,11 @@ msgid "Unable to update members"
msgstr "Nie można zaktualizować członków" msgstr "Nie można zaktualizować członków"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:157 #: src/views/card/components/ActivityList.tsx:156
msgid "unassigned <0>{0}</0> from the card" msgid "unassigned <0>{0}</0> from the card"
msgstr "usunięto przypisanie <0>{0}</0> z karty" msgstr "usunięto przypisanie <0>{0}</0> z karty"
#: src/views/card/components/ActivityList.tsx:154 #: src/views/card/components/ActivityList.tsx:153
msgid "unassigned themselves from the card" msgid "unassigned themselves from the card"
msgstr "usunęli swoje przypisanie z karty" msgstr "usunęli swoje przypisanie z karty"
@@ -2469,30 +2462,30 @@ msgstr "Aktualizuj"
msgid "Update label" msgid "Update label"
msgstr "Zaktualizuj etykietę" msgstr "Zaktualizuj etykietę"
#: src/views/card/components/ActivityList.tsx:112 #: src/views/card/components/ActivityList.tsx:111
msgid "updated a checklist item" msgid "updated a checklist item"
msgstr "zaktualizowano element listy kontrolnej" msgstr "zaktualizowano element listy kontrolnej"
#: src/views/card/components/ActivityList.tsx:102 #: src/views/card/components/ActivityList.tsx:101
msgid "updated the description" msgid "updated the description"
msgstr "zaktualizowano opis" msgstr "zaktualizowano opis"
#: src/views/card/components/ActivityList.tsx:117 #: src/views/card/components/ActivityList.tsx:116
msgid "updated the due date" msgid "updated the due date"
msgstr "zaktualizowano termin" msgstr "zaktualizowano termin"
#: src/views/card/components/ActivityList.tsx:101 #: src/views/card/components/ActivityList.tsx:100
msgid "updated the title" msgid "updated the title"
msgstr "zaktualizowano tytuł" msgstr "zaktualizowano tytuł"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:126 #: src/views/card/components/ActivityList.tsx:125
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "zaktualizowano tytuł na <0>{0}</0>" msgstr "zaktualizowano tytuł na <0>{0}</0>"
#: src/components/SideNavigation.tsx:239 #: src/components/SideNavigation.tsx:237
#: src/views/settings/components/UpgradeToProConfirmation.tsx:53 #: src/views/settings/components/UpgradeToProConfirmation.tsx:53
#: src/views/settings/WorkspaceSettings.tsx:99 #: src/views/settings/WorkspaceSettings.tsx:90
msgid "Upgrade to Pro" msgid "Upgrade to Pro"
msgstr "Ulepsz do planu Pro" msgstr "Ulepsz do planu Pro"
@@ -2529,7 +2522,7 @@ msgstr "Adres URL musi mieć co najmniej 3 znaki"
msgid "Use template" msgid "Use template"
msgstr "Użyj szablonu" msgstr "Użyj szablonu"
#: src/views/members/index.tsx:246 #: src/views/members/index.tsx:237
msgid "User" msgid "User"
msgstr "Użytkownik" msgstr "Użytkownik"
@@ -2554,7 +2547,7 @@ msgstr "Zobacz i zarządzaj swoimi płatnościami i subskrypcją."
msgid "View docs" msgid "View docs"
msgstr "Zobacz dokumentację" msgstr "Zobacz dokumentację"
#: src/views/public/board/index.tsx:148 #: src/views/public/board/index.tsx:142
msgid "View only" msgid "View only"
msgstr "Tylko podgląd" msgstr "Tylko podgląd"
@@ -2562,7 +2555,7 @@ msgstr "Tylko podgląd"
msgid "View our roadmap." msgid "View our roadmap."
msgstr "Zobacz nasz plan ulepszeń." msgstr "Zobacz nasz plan ulepszeń."
#: src/views/public/board/index.tsx:182 #: src/views/public/board/index.tsx:172
msgid "View workspace" msgid "View workspace"
msgstr "Zobacz obszar roboczy" msgstr "Zobacz obszar roboczy"
@@ -2607,10 +2600,10 @@ msgid "Why make an open source Trello?"
msgstr "Dlaczego próbujecie stworzyć Trello w wersji otwartoźródłowej?" msgstr "Dlaczego próbujecie stworzyć Trello w wersji otwartoźródłowej?"
#: src/components/SettingsLayout.tsx:39 #: src/components/SettingsLayout.tsx:39
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/boards/index.tsx:33 #: src/views/boards/index.tsx:33
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
#: src/views/public/boards/index.tsx:66 #: src/views/public/boards/index.tsx:66
msgid "Workspace" msgid "Workspace"
msgstr "Obszar roboczy" msgstr "Obszar roboczy"
@@ -2623,7 +2616,7 @@ msgstr "Obszar roboczy został pomyślnie utworzony. Możesz go ulepszyć późn
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Obszar roboczy został usunięty" msgstr "Obszar roboczy został usunięty"
#: src/views/settings/WorkspaceSettings.tsx:76 #: src/views/settings/WorkspaceSettings.tsx:75
msgid "Workspace description" msgid "Workspace description"
msgstr "Opis obszaru roboczego" msgstr "Opis obszaru roboczego"
@@ -2646,7 +2639,7 @@ msgid "Workspace members"
msgstr "Członkowie przestrzeni roboczej" msgstr "Członkowie przestrzeni roboczej"
#: src/components/NewWorkspaceForm.tsx:262 #: src/components/NewWorkspaceForm.tsx:262
#: src/views/settings/WorkspaceSettings.tsx:59 #: src/views/settings/WorkspaceSettings.tsx:58
msgid "Workspace name" msgid "Workspace name"
msgstr "Nazwa przestrzeni roboczej" msgstr "Nazwa przestrzeni roboczej"
@@ -2671,7 +2664,7 @@ msgstr "Nazwa przestrzeni roboczej została zaktualizowana"
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Slug przestrzeni roboczej został zaktualizowany" msgstr "Slug przestrzeni roboczej został zaktualizowany"
#: src/views/settings/WorkspaceSettings.tsx:67 #: src/views/settings/WorkspaceSettings.tsx:66
msgid "Workspace URL" msgid "Workspace URL"
msgstr "URL przestrzeni roboczej" msgstr "URL przestrzeni roboczej"
@@ -2692,7 +2685,7 @@ msgstr "Rocznie"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Tak, oferujemy wiecznie darmowy plan dla użytkowników indywidualnych. Bez ograniczeń, bez płatnych ścian, bez limitów." msgstr "Tak, oferujemy wiecznie darmowy plan dla użytkowników indywidualnych. Bez ograniczeń, bez płatnych ścian, bez limitów."
#: src/views/settings/AccountSettings.tsx:80 #: src/views/settings/AccountSettings.tsx:73
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Zaraz zmienisz swoje hasło." msgstr "Zaraz zmienisz swoje hasło."

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -13,7 +13,7 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"Plural-Forms: \n" "Plural-Forms: \n"
#: src/views/card/components/Comment.tsx:128 #: src/views/card/components/Comment.tsx:124
msgid " (edited)" msgid " (edited)"
msgstr " (отредактировано)" msgstr " (отредактировано)"
@@ -41,7 +41,7 @@ msgid "{0} labels"
msgstr "{0} метки" msgstr "{0} метки"
#. placeholder {0}: isTemplate ? "Template" : "Board" #. placeholder {0}: isTemplate ? "Template" : "Board"
#: src/views/board/index.tsx:422 #: src/views/board/index.tsx:416
msgid "{0} not found" msgid "{0} not found"
msgstr "{0} не найден" msgstr "{0} не найден"
@@ -100,7 +100,7 @@ msgstr "Журналы активности"
msgid "Add a card" msgid "Add a card"
msgstr "Добавить карточку" msgstr "Добавить карточку"
#: src/views/card/components/Comment.tsx:151 #: src/views/card/components/Comment.tsx:147
#: src/views/card/components/NewCommentForm.tsx:55 #: src/views/card/components/NewCommentForm.tsx:55
msgid "Add a comment..." msgid "Add a comment..."
msgstr "Добавить комментарий..." msgstr "Добавить комментарий..."
@@ -132,38 +132,38 @@ msgid "Add member"
msgstr "Добавить участника" msgstr "Добавить участника"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:78 #: src/views/card/components/ActivityList.tsx:77
msgid "added {0} labels: <0>{labelList}</0>" msgid "added {0} labels: <0>{labelList}</0>"
msgstr "добавил {0} метки: <0>{labelList}</0>" msgstr "добавил {0} метки: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:108 #: src/views/card/components/ActivityList.tsx:107
msgid "added a checklist" msgid "added a checklist"
msgstr "добавил(а) чек-лист" msgstr "добавил(а) чек-лист"
#: src/views/card/components/ActivityList.tsx:111 #: src/views/card/components/ActivityList.tsx:110
msgid "added a checklist item" msgid "added a checklist item"
msgstr "добавил(а) элемент чек-листа" msgstr "добавил(а) элемент чек-листа"
#: src/views/card/components/ActivityList.tsx:104 #: src/views/card/components/ActivityList.tsx:103
msgid "added a label to the card" msgid "added a label to the card"
msgstr "добавил(а) метку к карточке" msgstr "добавил(а) метку к карточке"
#: src/views/card/components/ActivityList.tsx:106 #: src/views/card/components/ActivityList.tsx:105
msgid "added a member to the card" msgid "added a member to the card"
msgstr "добавил(а) участника к карточке" msgstr "добавил(а) участника к карточке"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:182 #: src/views/card/components/ActivityList.tsx:181
msgid "added checklist <0>{0}</0>" msgid "added checklist <0>{0}</0>"
msgstr "добавлен контрольный список <0>{0}</0>" msgstr "добавлен контрольный список <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:206 #: src/views/card/components/ActivityList.tsx:205
msgid "added checklist item <0>{0}</0>" msgid "added checklist item <0>{0}</0>"
msgstr "добавлен элемент контрольного списка <0>{0}</0>" msgstr "добавлен элемент контрольного списка <0>{0}</0>"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:166 #: src/views/card/components/ActivityList.tsx:165
msgid "added label <0>{0}</0>" msgid "added label <0>{0}</0>"
msgstr "добавлена метка <0>{0}</0>" msgstr "добавлена метка <0>{0}</0>"
@@ -184,10 +184,6 @@ msgstr "Роли администратора"
msgid "All systems operational" msgid "All systems operational"
msgstr "Все системы работают нормально" msgstr "Все системы работают нормально"
#: src/views/settings/components/UpdateWorkspaceEmailVisibilityForm.tsx:42
msgid "Allow workspace members to see each other's email addresses"
msgstr "Разрешить участникам рабочего пространства видеть электронные адреса друг друга"
#: src/views/auth/signup/index.tsx:88 #: src/views/auth/signup/index.tsx:88
msgid "Already have an account? <0><1>Sign in</1></0>" msgid "Already have an account? <0><1>Sign in</1></0>"
msgstr "Уже есть аккаунт? <0><1>Войти</1></0>" msgstr "Уже есть аккаунт? <0><1>Войти</1></0>"
@@ -275,7 +271,7 @@ msgid "Are you sure you want to delete your account?"
msgstr "Вы уверены, что хотите удалить свой аккаунт?" msgstr "Вы уверены, что хотите удалить свой аккаунт?"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:146 #: src/views/card/components/ActivityList.tsx:145
msgid "assigned <0>{0}</0> to the card" msgid "assigned <0>{0}</0> to the card"
msgstr "назначено <0>{0}</0> к карточке" msgstr "назначено <0>{0}</0> к карточке"
@@ -321,9 +317,9 @@ msgstr "Портал выставления счетов"
msgid "Blog Post" msgid "Blog Post"
msgstr "Пост в блоге" msgstr "Пост в блоге"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/card/index.tsx:273 #: src/views/card/index.tsx:273
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
msgid "Board" msgid "Board"
msgstr "Доска" msgstr "Доска"
@@ -340,7 +336,7 @@ msgstr "Название доски не может превышать 100 си
msgid "Board name is required" msgid "Board name is required"
msgstr "Название доски обязательно" msgstr "Название доски обязательно"
#: src/views/public/board/index.tsx:176 #: src/views/public/board/index.tsx:166
msgid "Board not found" msgid "Board not found"
msgstr "Доска не найдена" msgstr "Доска не найдена"
@@ -356,7 +352,7 @@ msgstr "URL доски может содержать только буквы, ц
msgid "Board URL cannot exceed 60 characters" msgid "Board URL cannot exceed 60 characters"
msgstr "URL доски не может превышать 60 символов" msgstr "URL доски не может превышать 60 символов"
#: src/views/public/board/index.tsx:86 #: src/views/public/board/index.tsx:80
msgid "Board URL copied to clipboard" msgid "Board URL copied to clipboard"
msgstr "URL доски скопирован в буфер обмена" msgstr "URL доски скопирован в буфер обмена"
@@ -373,7 +369,7 @@ msgstr "Видимость доски"
msgid "Board visibility updated" msgid "Board visibility updated"
msgstr "Видимость доски обновлена" msgstr "Видимость доски обновлена"
#: src/components/SideNavigation.tsx:98 #: src/components/SideNavigation.tsx:97
msgid "Boards" msgid "Boards"
msgstr "Доски" msgstr "Доски"
@@ -392,7 +388,7 @@ msgstr "Отчет об ошибке"
#: src/components/DeleteLabelConfirmation.tsx:49 #: src/components/DeleteLabelConfirmation.tsx:49
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176
#: src/views/board/components/DeleteBoardConfirmation.tsx:44 #: src/views/board/components/DeleteBoardConfirmation.tsx:44
#: src/views/card/components/Comment.tsx:163 #: src/views/card/components/Comment.tsx:159
#: src/views/card/components/DeleteCardConfirmation.tsx:86 #: src/views/card/components/DeleteCardConfirmation.tsx:86
#: src/views/card/components/DeleteChecklistConfirmation.tsx:64 #: src/views/card/components/DeleteChecklistConfirmation.tsx:64
#: src/views/card/components/DeleteCommentConfirmation.tsx:77 #: src/views/card/components/DeleteCommentConfirmation.tsx:77
@@ -418,19 +414,19 @@ msgstr "Карточка не найдена"
msgid "Card title" msgid "Card title"
msgstr "Название карточки" msgstr "Название карточки"
#: src/views/settings/AccountSettings.tsx:77 #: src/views/settings/AccountSettings.tsx:70
#: src/views/settings/AccountSettings.tsx:87 #: src/views/settings/AccountSettings.tsx:80
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109 #: src/views/settings/components/ChangePasswordConfirmation.tsx:109
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178 #: src/views/settings/components/ChangePasswordConfirmation.tsx:178
msgid "Change Password" msgid "Change Password"
msgstr "Изменить пароль" msgstr "Изменить пароль"
#: src/views/settings/AccountSettings.tsx:52 #: src/views/settings/AccountSettings.tsx:45
msgid "Change your language preferences." msgid "Change your language preferences."
msgstr "Измените настройки языка." msgstr "Измените настройки языка."
#: src/views/card/components/ActivityList.tsx:256 #: src/views/card/components/ActivityList.tsx:255
#: src/views/card/components/ActivityList.tsx:270 #: src/views/card/components/ActivityList.tsx:269
msgid "changed the due date to <0>{formattedDate}</0>" msgid "changed the due date to <0>{formattedDate}</0>"
msgstr "изменил(а) дату выполнения на <0>{formattedDate}</0>" msgstr "изменил(а) дату выполнения на <0>{formattedDate}</0>"
@@ -504,12 +500,12 @@ msgstr "Завершить"
msgid "Complete control and ownership:" msgid "Complete control and ownership:"
msgstr "Полный контроль и владение:" msgstr "Полный контроль и владение:"
#: src/views/card/components/ActivityList.tsx:113 #: src/views/card/components/ActivityList.tsx:112
msgid "completed a checklist item" msgid "completed a checklist item"
msgstr "завершил элемент контрольного списка" msgstr "завершил элемент контрольного списка"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:223 #: src/views/card/components/ActivityList.tsx:222
msgid "completed checklist item <0>{0}</0>" msgid "completed checklist item <0>{0}</0>"
msgstr "завершил элемент контрольного списка <0>{0}</0>" msgstr "завершил элемент контрольного списка <0>{0}</0>"
@@ -618,8 +614,8 @@ msgstr "Создать новый ключ"
msgid "Create new label" msgid "Create new label"
msgstr "Создать новую метку" msgstr "Создать новую метку"
#: src/views/board/index.tsx:71 #: src/views/board/index.tsx:65
#: src/views/board/index.tsx:517 #: src/views/board/index.tsx:507
msgid "Create new list" msgid "Create new list"
msgstr "Создать новый список" msgstr "Создать новый список"
@@ -632,7 +628,7 @@ msgstr "Создать шаблон"
msgid "Create workspace" msgid "Create workspace"
msgstr "Создать рабочее пространство" msgstr "Создать рабочее пространство"
#: src/views/card/components/ActivityList.tsx:100 #: src/views/card/components/ActivityList.tsx:99
msgid "created the card" msgid "created the card"
msgstr "создал(а) карточку" msgstr "создал(а) карточку"
@@ -678,7 +674,7 @@ msgstr "Пользовательский URL рабочего пространс
msgid "Customer Support" msgid "Customer Support"
msgstr "Служба поддержки" msgstr "Служба поддержки"
#: src/components/UserMenu.tsx:158 #: src/components/UserMenu.tsx:155
msgid "Dark" msgid "Dark"
msgstr "Тёмный" msgstr "Тёмный"
@@ -696,8 +692,8 @@ msgstr "Деактивировать ссылку-приглашение"
msgid "Delete" msgid "Delete"
msgstr "Удалить" msgstr "Удалить"
#: src/views/settings/AccountSettings.tsx:59 #: src/views/settings/AccountSettings.tsx:52
#: src/views/settings/AccountSettings.tsx:69 #: src/views/settings/AccountSettings.tsx:62
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96 #: src/views/settings/components/DeleteAccountConfirmation.tsx:96
msgid "Delete account" msgid "Delete account"
msgstr "Удалить аккаунт" msgstr "Удалить аккаунт"
@@ -710,7 +706,7 @@ msgstr "Удалить доску"
msgid "Delete card" msgid "Delete card"
msgstr "Удалить карточку" msgstr "Удалить карточку"
#: src/views/card/components/Comment.tsx:95 #: src/views/card/components/Comment.tsx:92
msgid "Delete comment" msgid "Delete comment"
msgstr "Удалить комментарий" msgstr "Удалить комментарий"
@@ -723,26 +719,26 @@ msgid "Delete template"
msgstr "Удалить шаблон" msgstr "Удалить шаблон"
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106 #: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
#: src/views/settings/WorkspaceSettings.tsx:106 #: src/views/settings/WorkspaceSettings.tsx:97
#: src/views/settings/WorkspaceSettings.tsx:117 #: src/views/settings/WorkspaceSettings.tsx:108
msgid "Delete workspace" msgid "Delete workspace"
msgstr "Удалить рабочее пространство" msgstr "Удалить рабочее пространство"
#: src/views/card/components/ActivityList.tsx:110 #: src/views/card/components/ActivityList.tsx:109
msgid "deleted a checklist" msgid "deleted a checklist"
msgstr "удалил контрольный список" msgstr "удалил контрольный список"
#: src/views/card/components/ActivityList.tsx:115 #: src/views/card/components/ActivityList.tsx:114
msgid "deleted a checklist item" msgid "deleted a checklist item"
msgstr "удалил элемент контрольного списка" msgstr "удалил элемент контрольного списка"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:198 #: src/views/card/components/ActivityList.tsx:197
msgid "deleted checklist <0>{0}</0>" msgid "deleted checklist <0>{0}</0>"
msgstr "удалил контрольный список <0>{0}</0>" msgstr "удалил контрольный список <0>{0}</0>"
#. placeholder {0}: truncate(fromTitle) #. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:241 #: src/views/card/components/ActivityList.tsx:240
msgid "deleted checklist item <0>{0}</0>" msgid "deleted checklist item <0>{0}</0>"
msgstr "удалил элемент контрольного списка <0>{0}</0>" msgstr "удалил элемент контрольного списка <0>{0}</0>"
@@ -790,7 +786,7 @@ msgstr "документы"
msgid "Docs" msgid "Docs"
msgstr "Документы" msgstr "Документы"
#: src/components/UserMenu.tsx:209 #: src/components/UserMenu.tsx:206
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
#: src/views/home/components/Footer.tsx:78 #: src/views/home/components/Footer.tsx:78
#: src/views/home/components/Header.tsx:36 #: src/views/home/components/Header.tsx:36
@@ -843,7 +839,7 @@ msgstr "Редактировать"
msgid "Edit board URL" msgid "Edit board URL"
msgstr "Изменить URL доски" msgstr "Изменить URL доски"
#: src/views/card/components/Comment.tsx:86 #: src/views/card/components/Comment.tsx:83
msgid "Edit comment" msgid "Edit comment"
msgstr "Редактировать комментарий" msgstr "Редактировать комментарий"
@@ -868,14 +864,9 @@ msgid "email"
msgstr "email" msgstr "email"
#: src/views/members/components/InviteMemberForm.tsx:272 #: src/views/members/components/InviteMemberForm.tsx:272
#: src/views/settings/AccountSettings.tsx:42
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
#: src/views/settings/WorkspaceSettings.tsx:84
msgid "Email visibility"
msgstr "Видимость электронной почты"
#: src/views/boards/components/TemplateBoards.tsx:24 #: src/views/boards/components/TemplateBoards.tsx:24
msgid "Enhancement" msgid "Enhancement"
msgstr "Улучшение" msgstr "Улучшение"
@@ -1057,7 +1048,7 @@ msgid "Features"
msgstr "Функции" msgstr "Функции"
#: src/components/FeedbackModal.tsx:59 #: src/components/FeedbackModal.tsx:59
#: src/components/UserMenu.tsx:217 #: src/components/UserMenu.tsx:214
msgid "Feedback" msgid "Feedback"
msgstr "Обратная связь" msgstr "Обратная связь"
@@ -1078,12 +1069,14 @@ msgid "For long-term sustainability, we recognise all good open source projects
msgstr "Для долгосрочной устойчивости мы признаем, что всем хорошим проектам с открытым исходным кодом необходим источник дохода. Наш доход поступает от платного облачного предложения для рабочих пространств с несколькими пользователями и для пользовательских идентификаторов рабочих пространств. Нет обязательства использовать его, и вы можете самостоятельно разместить программное обеспечение на своей инфраструктуре бесплатно." msgstr "Для долгосрочной устойчивости мы признаем, что всем хорошим проектам с открытым исходным кодом необходим источник дохода. Наш доход поступает от платного облачного предложения для рабочих пространств с несколькими пользователями и для пользовательских идентификаторов рабочих пространств. Нет обязательства использовать его, и вы можете самостоятельно разместить программное обеспечение на своей инфраструктуре бесплатно."
#: src/views/pricing/components/Pricing.tsx:32 #: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/PricingTiers.tsx:30
#: src/views/pricing/components/PricingTiers.tsx:30 #: src/views/pricing/components/PricingTiers.tsx:30
msgid "Free" msgid "Free"
msgstr "Бесплатно" msgstr "Бесплатно"
#: src/views/members/components/InviteMemberForm.tsx:333 #: src/views/members/components/InviteMemberForm.tsx:333
#: src/views/members/index.tsx:217 #: src/views/members/index.tsx:208
msgid "Free Plan" msgid "Free Plan"
msgstr "Бесплатный план" msgstr "Бесплатный план"
@@ -1123,7 +1116,7 @@ msgstr "Начать"
msgid "Get started by creating a new {0}" msgid "Get started by creating a new {0}"
msgstr "Начните с создания нового {0}" msgstr "Начните с создания нового {0}"
#: src/views/board/index.tsx:509 #: src/views/board/index.tsx:499
msgid "Get started by creating a new list" msgid "Get started by creating a new list"
msgstr "Начните с создания нового списка" msgstr "Начните с создания нового списка"
@@ -1157,19 +1150,19 @@ msgstr "На главную"
msgid "Go to app" msgid "Go to app"
msgstr "Перейти в приложение" msgstr "Перейти в приложение"
#: src/components/SideNavigation.tsx:106 #: src/components/SideNavigation.tsx:105
msgid "Go to boards" msgid "Go to boards"
msgstr "Перейти к доскам" msgstr "Перейти к доскам"
#: src/components/SideNavigation.tsx:130 #: src/components/SideNavigation.tsx:129
msgid "Go to members" msgid "Go to members"
msgstr "Перейти к участникам" msgstr "Перейти к участникам"
#: src/components/SideNavigation.tsx:142 #: src/components/SideNavigation.tsx:141
msgid "Go to settings" msgid "Go to settings"
msgstr "Перейти к настройкам" msgstr "Перейти к настройкам"
#: src/components/SideNavigation.tsx:118 #: src/components/SideNavigation.tsx:117
msgid "Go to templates" msgid "Go to templates"
msgstr "Перейти к шаблонам" msgstr "Перейти к шаблонам"
@@ -1294,7 +1287,7 @@ msgstr "Недействительный адрес электронной по
msgid "Invalid invitation" msgid "Invalid invitation"
msgstr "Недействительное приглашение" msgstr "Недействительное приглашение"
#: src/views/members/index.tsx:230 #: src/views/members/index.tsx:221
msgid "Invite" msgid "Invite"
msgstr "Пригласить" msgstr "Пригласить"
@@ -1375,7 +1368,7 @@ msgstr "Метки и фильтры"
msgid "Labels & Filters" msgid "Labels & Filters"
msgstr "Метки и фильтры" msgstr "Метки и фильтры"
#: src/views/settings/AccountSettings.tsx:49 #: src/views/settings/AccountSettings.tsx:42
msgid "Language" msgid "Language"
msgstr "Язык" msgstr "Язык"
@@ -1384,7 +1377,7 @@ msgstr "Язык"
msgid "Launch offer" msgid "Launch offer"
msgstr "Стартовое предложение" msgstr "Стартовое предложение"
#: src/views/members/index.tsx:200 #: src/views/members/index.tsx:191
msgid "Launch offer: Get unlimited members with Pro" msgid "Launch offer: Get unlimited members with Pro"
msgstr "Стартовое предложение: получите неограниченное количество участников с Pro" msgstr "Стартовое предложение: получите неограниченное количество участников с Pro"
@@ -1409,11 +1402,11 @@ msgstr "Юридическое"
msgid "License" msgid "License"
msgstr "Лицензия" msgstr "Лицензия"
#: src/components/UserMenu.tsx:172 #: src/components/UserMenu.tsx:169
msgid "Light" msgid "Light"
msgstr "Светлый" msgstr "Светлый"
#: src/views/public/board/index.tsx:84 #: src/views/public/board/index.tsx:78
msgid "Link copied" msgid "Link copied"
msgstr "Ссылка скопирована" msgstr "Ссылка скопирована"
@@ -1429,11 +1422,11 @@ msgstr "Название списка"
msgid "Lists" msgid "Lists"
msgstr "Списки" msgstr "Списки"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Load more activities" msgid "Load more activities"
msgstr "Загрузить больше действий" msgstr "Загрузить больше действий"
#: src/views/card/components/ActivityList.tsx:533 #: src/views/card/components/ActivityList.tsx:530
msgid "Loading..." msgid "Loading..."
msgstr "Загрузка..." msgstr "Загрузка..."
@@ -1441,7 +1434,7 @@ msgstr "Загрузка..."
msgid "Login | kan.bn" msgid "Login | kan.bn"
msgstr "Вход | kan.bn" msgstr "Вход | kan.bn"
#: src/components/UserMenu.tsx:227 #: src/components/UserMenu.tsx:224
msgid "Logout" msgid "Logout"
msgstr "Выход" msgstr "Выход"
@@ -1465,12 +1458,12 @@ msgstr "магическая ссылка"
msgid "Make template" msgid "Make template"
msgstr "Создать шаблон" msgstr "Создать шаблон"
#: src/views/card/components/ActivityList.tsx:114 #: src/views/card/components/ActivityList.tsx:113
msgid "marked a checklist item as incomplete" msgid "marked a checklist item as incomplete"
msgstr "отметил элемент контрольного списка как незавершённый" msgstr "отметил элемент контрольного списка как незавершённый"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:232 #: src/views/card/components/ActivityList.tsx:231
msgid "marked checklist item <0>{0}</0> as incomplete" msgid "marked checklist item <0>{0}</0> as incomplete"
msgstr "отметил элемент контрольного списка <0>{0}</0> как незавершённый" msgstr "отметил элемент контрольного списка <0>{0}</0> как незавершённый"
@@ -1478,16 +1471,16 @@ msgstr "отметил элемент контрольного списка <0>{
msgid "Medium Priority" msgid "Medium Priority"
msgstr "Средний приоритет" msgstr "Средний приоритет"
#: src/components/SideNavigation.tsx:122 #: src/components/SideNavigation.tsx:121
#: src/views/board/components/Filters.tsx:147 #: src/views/board/components/Filters.tsx:147
#: src/views/board/components/NewCardForm.tsx:377 #: src/views/board/components/NewCardForm.tsx:377
#: src/views/card/index.tsx:131 #: src/views/card/index.tsx:131
#: src/views/members/index.tsx:187 #: src/views/members/index.tsx:178
msgid "Members" msgid "Members"
msgstr "Участники" msgstr "Участники"
#. placeholder {0}: workspace.name ?? t`Workspace` #. placeholder {0}: workspace.name ?? t`Workspace`
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
msgid "Members | {0}" msgid "Members | {0}"
msgstr "Участники | {0}" msgstr "Участники | {0}"
@@ -1502,11 +1495,11 @@ msgstr "ежемесячная оплата"
#. placeholder {0}: truncate(fromList) #. placeholder {0}: truncate(fromList)
#. placeholder {1}: truncate(toList) #. placeholder {1}: truncate(toList)
#: src/views/card/components/ActivityList.tsx:134 #: src/views/card/components/ActivityList.tsx:133
msgid "moved the card from <0>{0}</0> to<1>{1}</1>" msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
msgstr "переместил карточку из <0>{0}</0> в <1>{1}</1>" msgstr "переместил карточку из <0>{0}</0> в <1>{1}</1>"
#: src/views/card/components/ActivityList.tsx:103 #: src/views/card/components/ActivityList.tsx:102
msgid "moved the card to another list" msgid "moved the card to another list"
msgstr "переместил карточку в другой список" msgstr "переместил карточку в другой список"
@@ -1555,7 +1548,7 @@ msgid "New label"
msgstr "Новая метка" msgstr "Новая метка"
#: src/views/board/components/NewListForm.tsx:113 #: src/views/board/components/NewListForm.tsx:113
#: src/views/board/index.tsx:476 #: src/views/board/index.tsx:470
msgid "New list" msgid "New list"
msgstr "Новый список" msgstr "Новый список"
@@ -1616,7 +1609,7 @@ msgstr "URL для загрузки этого вложения недоступ
msgid "No keyboard shortcuts registered." msgid "No keyboard shortcuts registered."
msgstr "Горячие клавиши не зарегистрированы." msgstr "Горячие клавиши не зарегистрированы."
#: src/views/board/index.tsx:506 #: src/views/board/index.tsx:496
msgid "No lists" msgid "No lists"
msgstr "Нет списков" msgstr "Нет списков"
@@ -1632,11 +1625,11 @@ msgstr "Предложение"
msgid "Onboarding" msgid "Onboarding"
msgstr "Введение" msgstr "Введение"
#: src/views/settings/AccountSettings.tsx:62 #: src/views/settings/AccountSettings.tsx:55
msgid "Once you delete your account, there is no going back. This action cannot be undone." msgid "Once you delete your account, there is no going back. This action cannot be undone."
msgstr "После удаления аккаунта возврат будет невозможен. Это действие необратимо." msgstr "После удаления аккаунта возврат будет невозможен. Это действие необратимо."
#: src/views/settings/WorkspaceSettings.tsx:109 #: src/views/settings/WorkspaceSettings.tsx:100
msgid "Once you delete your workspace, there is no going back. This action cannot be undone." msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
msgstr "После удаления рабочего пространства возврат будет невозможен. Это действие необратимо." msgstr "После удаления рабочего пространства возврат будет невозможен. Это действие необратимо."
@@ -1706,7 +1699,7 @@ msgstr "Пароль должен содержать не менее 8 симв
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Пароли не совпадают" msgstr "Пароли не совпадают"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Paused" msgid "Paused"
msgstr "Приостановлено" msgstr "Приостановлено"
@@ -1715,7 +1708,7 @@ msgstr "Приостановлено"
msgid "Payment frequency" msgid "Payment frequency"
msgstr "Частота платежей" msgstr "Частота платежей"
#: src/views/members/index.tsx:143 #: src/views/members/index.tsx:134
msgid "Pending" msgid "Pending"
msgstr "В ожидании" msgstr "В ожидании"
@@ -1772,15 +1765,15 @@ msgstr "Пожалуйста, выберите файл для загрузки.
#: src/views/board/components/NewTemplateForm.tsx:77 #: src/views/board/components/NewTemplateForm.tsx:77
#: src/views/board/components/UpdateBoardSlugForm.tsx:73 #: src/views/board/components/UpdateBoardSlugForm.tsx:73
#: src/views/board/components/VisibilityButton.tsx:54 #: src/views/board/components/VisibilityButton.tsx:54
#: src/views/board/index.tsx:177 #: src/views/board/index.tsx:171
#: src/views/board/index.tsx:233 #: src/views/board/index.tsx:227
#: src/views/boards/components/ImportBoardsForm.tsx:205 #: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/card/components/AttachmentThumbnails.tsx:74 #: src/views/card/components/AttachmentThumbnails.tsx:74
#: src/views/card/components/ChecklistItemRow.tsx:69 #: src/views/card/components/ChecklistItemRow.tsx:69
#: src/views/card/components/ChecklistItemRow.tsx:97 #: src/views/card/components/ChecklistItemRow.tsx:97
#: src/views/card/components/ChecklistNameInput.tsx:47 #: src/views/card/components/ChecklistNameInput.tsx:47
#: src/views/card/components/Checklists.tsx:81 #: src/views/card/components/Checklists.tsx:81
#: src/views/card/components/Comment.tsx:68 #: src/views/card/components/Comment.tsx:65
#: src/views/card/components/DeleteCardConfirmation.tsx:52 #: src/views/card/components/DeleteCardConfirmation.tsx:52
#: src/views/card/components/DeleteChecklistConfirmation.tsx:38 #: src/views/card/components/DeleteChecklistConfirmation.tsx:38
#: src/views/card/components/DeleteCommentConfirmation.tsx:46 #: src/views/card/components/DeleteCommentConfirmation.tsx:46
@@ -1840,7 +1833,7 @@ msgstr "Политика конфиденциальности"
msgid "Private" msgid "Private"
msgstr "Личное" msgstr "Личное"
#: src/views/members/index.tsx:214 #: src/views/members/index.tsx:205
msgid "Pro Plan" msgid "Pro Plan"
msgstr "Профессиональный план" msgstr "Профессиональный план"
@@ -1888,44 +1881,44 @@ msgstr "Удалённый"
msgid "Remove" msgid "Remove"
msgstr "Удалить" msgstr "Удалить"
#: src/views/members/index.tsx:157 #: src/views/members/index.tsx:148
msgid "Remove member" msgid "Remove member"
msgstr "Удалить участника" msgstr "Удалить участника"
#. placeholder {0}: mergedLabels.length #. placeholder {0}: mergedLabels.length
#: src/views/card/components/ActivityList.tsx:92 #: src/views/card/components/ActivityList.tsx:91
msgid "removed {0} labels: <0>{labelList}</0>" msgid "removed {0} labels: <0>{labelList}</0>"
msgstr "удалил {0} метки: <0>{labelList}</0>" msgstr "удалил {0} метки: <0>{labelList}</0>"
#: src/views/card/components/ActivityList.tsx:105 #: src/views/card/components/ActivityList.tsx:104
msgid "removed a label from the card" msgid "removed a label from the card"
msgstr "удалил метку с карточки" msgstr "удалил метку с карточки"
#: src/views/card/components/ActivityList.tsx:107 #: src/views/card/components/ActivityList.tsx:106
msgid "removed a member from the card" msgid "removed a member from the card"
msgstr "удалил участника из карточки" msgstr "удалил участника из карточки"
#. placeholder {0}: truncate(label) #. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:174 #: src/views/card/components/ActivityList.tsx:173
msgid "removed label <0>{0}</0>" msgid "removed label <0>{0}</0>"
msgstr "удалил метку <0>{0}</0>" msgstr "удалил метку <0>{0}</0>"
#: src/views/card/components/ActivityList.tsx:118 #: src/views/card/components/ActivityList.tsx:117
#: src/views/card/components/ActivityList.tsx:277 #: src/views/card/components/ActivityList.tsx:276
msgid "removed the due date" msgid "removed the due date"
msgstr "удалил(а) дату выполнения" msgstr "удалил(а) дату выполнения"
#: src/views/card/components/ActivityList.tsx:109 #: src/views/card/components/ActivityList.tsx:108
msgid "renamed a checklist" msgid "renamed a checklist"
msgstr "переименовал контрольный список" msgstr "переименовал контрольный список"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:190 #: src/views/card/components/ActivityList.tsx:189
msgid "renamed checklist <0>{0}</0>" msgid "renamed checklist <0>{0}</0>"
msgstr "переименовал контрольный список <0>{0}</0>" msgstr "переименовал контрольный список <0>{0}</0>"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:214 #: src/views/card/components/ActivityList.tsx:213
msgid "renamed checklist item to <0>{0}</0>" msgid "renamed checklist item to <0>{0}</0>"
msgstr "переименовал элемент контрольного списка в <0>{0}</0>" msgstr "переименовал элемент контрольного списка в <0>{0}</0>"
@@ -1955,7 +1948,7 @@ msgstr "Обзор"
msgid "Roadmap" msgid "Roadmap"
msgstr "Дорожная карта" msgstr "Дорожная карта"
#: src/views/members/index.tsx:252 #: src/views/members/index.tsx:243
msgid "Role" msgid "Role"
msgstr "Роль" msgstr "Роль"
@@ -1965,7 +1958,7 @@ msgid "Run on your own infrastructure"
msgstr "Запустите на своей инфраструктуре" msgstr "Запустите на своей инфраструктуре"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183 #: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183
#: src/views/card/components/Comment.tsx:170 #: src/views/card/components/Comment.tsx:166
#: src/views/settings/components/Avatar.tsx:309 #: src/views/settings/components/Avatar.tsx:309
msgid "Save" msgid "Save"
msgstr "Сохранить" msgstr "Сохранить"
@@ -2003,7 +1996,7 @@ msgstr "Самостоятельный хостинг"
msgid "Self host with Github" msgid "Self host with Github"
msgstr "Самостоятельный хостинг с Github" msgstr "Самостоятельный хостинг с Github"
#: src/views/card/components/ActivityList.tsx:143 #: src/views/card/components/ActivityList.tsx:142
msgid "self-assigned the card" msgid "self-assigned the card"
msgstr "самостоятельно назначил карточку" msgstr "самостоятельно назначил карточку"
@@ -2023,12 +2016,12 @@ msgstr "Старший"
msgid "Set due date" msgid "Set due date"
msgstr "Установить дату выполнения" msgstr "Установить дату выполнения"
#: src/views/card/components/ActivityList.tsx:116 #: src/views/card/components/ActivityList.tsx:115
msgid "set the due date" msgid "set the due date"
msgstr "установил(а) дату выполнения" msgstr "установил(а) дату выполнения"
#: src/components/SettingsLayout.tsx:82 #: src/components/SettingsLayout.tsx:82
#: src/components/SideNavigation.tsx:134 #: src/components/SideNavigation.tsx:133
msgid "Settings" msgid "Settings"
msgstr "Настройки" msgstr "Настройки"
@@ -2048,11 +2041,11 @@ msgstr "Настройки | Оплата"
msgid "Settings | Integrations" msgid "Settings | Integrations"
msgstr "Настройки | Интеграции" msgstr "Настройки | Интеграции"
#: src/views/settings/WorkspaceSettings.tsx:55 #: src/views/settings/WorkspaceSettings.tsx:54
msgid "Settings | Workspace" msgid "Settings | Workspace"
msgstr "Настройки | Рабочая область" msgstr "Настройки | Рабочая область"
#: src/components/UserMenu.tsx:187 #: src/components/UserMenu.tsx:184
msgid "Shortcuts" msgid "Shortcuts"
msgstr "Сочетания клавиш" msgstr "Сочетания клавиш"
@@ -2124,7 +2117,7 @@ msgstr "Успех"
msgid "Supercharge your workspace for just $29/month. Here's what you'll get:" msgid "Supercharge your workspace for just $29/month. Here's what you'll get:"
msgstr "Улучшите свою рабочую область всего за $29/месяц. Вот что вы получите:" msgstr "Улучшите свою рабочую область всего за $29/месяц. Вот что вы получите:"
#: src/components/UserMenu.tsx:198 #: src/components/UserMenu.tsx:195
msgid "Support" msgid "Support"
msgstr "Поддержка" msgstr "Поддержка"
@@ -2133,12 +2126,12 @@ msgstr "Поддержка"
msgid "Support the development of the project" msgid "Support the development of the project"
msgstr "Поддержите развитие проекта" msgstr "Поддержите развитие проекта"
#: src/components/UserMenu.tsx:144 #: src/components/UserMenu.tsx:141
msgid "System" msgid "System"
msgstr "Система" msgstr "Система"
#: src/views/members/components/InviteMemberForm.tsx:322 #: src/views/members/components/InviteMemberForm.tsx:322
#: src/views/members/index.tsx:216 #: src/views/members/index.tsx:207
msgid "Team Plan" msgid "Team Plan"
msgstr "Командный план" msgstr "Командный план"
@@ -2148,8 +2141,8 @@ msgstr "Командный план"
msgid "Teams" msgid "Teams"
msgstr "Команды" msgstr "Команды"
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/board/index.tsx:431 #: src/views/board/index.tsx:425
msgid "Template" msgid "Template"
msgstr "Шаблон" msgstr "Шаблон"
@@ -2169,7 +2162,7 @@ msgstr "Имя шаблона не может превышать 100 симво
msgid "Template name is required" msgid "Template name is required"
msgstr "Имя шаблона обязательно" msgstr "Имя шаблона обязательно"
#: src/components/SideNavigation.tsx:110 #: src/components/SideNavigation.tsx:109
#: src/views/home/components/Features.tsx:115 #: src/views/home/components/Features.tsx:115
msgid "Templates" msgid "Templates"
msgstr "Шаблоны" msgstr "Шаблоны"
@@ -2203,7 +2196,7 @@ msgstr "Альтернатива Trello с открытым исходным к
msgid "The visibility of your board has been set to {0}." msgid "The visibility of your board has been set to {0}."
msgstr "Видимость вашей доски установлена на {0}." msgstr "Видимость вашей доски установлена на {0}."
#: src/components/UserMenu.tsx:131 #: src/components/UserMenu.tsx:128
msgid "Theme" msgid "Theme"
msgstr "Тема" msgstr "Тема"
@@ -2223,7 +2216,7 @@ msgstr "Это действие нельзя будет отменить."
msgid "This API key will only be shown once. Please save it in a secure location." msgid "This API key will only be shown once. Please save it in a secure location."
msgstr "Этот API-ключ будет показан только один раз. Пожалуйста, сохраните его в безопасном месте." msgstr "Этот API-ключ будет показан только один раз. Пожалуйста, сохраните его в безопасном месте."
#: src/views/public/board/index.tsx:179 #: src/views/public/board/index.tsx:169
msgid "This board is private or does not exist" msgid "This board is private or does not exist"
msgstr "Эта доска является приватной или не существует." msgstr "Эта доска является приватной или не существует."
@@ -2366,7 +2359,7 @@ msgstr "Не удалось обновить URL доски"
msgid "Unable to update board visibility" msgid "Unable to update board visibility"
msgstr "Не удалось обновить видимость доски" msgstr "Не удалось обновить видимость доски"
#: src/views/board/index.tsx:232 #: src/views/board/index.tsx:226
#: src/views/card/index.tsx:187 #: src/views/card/index.tsx:187
msgid "Unable to update card" msgid "Unable to update card"
msgstr "Не удалось обновить карточку" msgstr "Не удалось обновить карточку"
@@ -2379,7 +2372,7 @@ msgstr "Не удалось обновить контрольный список
msgid "Unable to update checklist item" msgid "Unable to update checklist item"
msgstr "Не удалось обновить элемент контрольного списка" msgstr "Не удалось обновить элемент контрольного списка"
#: src/views/card/components/Comment.tsx:67 #: src/views/card/components/Comment.tsx:64
msgid "Unable to update comment" msgid "Unable to update comment"
msgstr "Не удалось обновить комментарий" msgstr "Не удалось обновить комментарий"
@@ -2391,7 +2384,7 @@ msgstr "Не удалось обновить дату выполнения"
msgid "Unable to update labels" msgid "Unable to update labels"
msgstr "Не удалось обновить метки" msgstr "Не удалось обновить метки"
#: src/views/board/index.tsx:176 #: src/views/board/index.tsx:170
#: src/views/card/components/ListSelector.tsx:52 #: src/views/card/components/ListSelector.tsx:52
msgid "Unable to update list" msgid "Unable to update list"
msgstr "Не удалось обновить список" msgstr "Не удалось обновить список"
@@ -2401,11 +2394,11 @@ msgid "Unable to update members"
msgstr "Не удалось обновить участников" msgstr "Не удалось обновить участников"
#. placeholder {0}: truncate(memberName) #. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:157 #: src/views/card/components/ActivityList.tsx:156
msgid "unassigned <0>{0}</0> from the card" msgid "unassigned <0>{0}</0> from the card"
msgstr "удалил(а) <0>{0}</0> из карточки" msgstr "удалил(а) <0>{0}</0> из карточки"
#: src/views/card/components/ActivityList.tsx:154 #: src/views/card/components/ActivityList.tsx:153
msgid "unassigned themselves from the card" msgid "unassigned themselves from the card"
msgstr "удалил(а) себя из карточки" msgstr "удалил(а) себя из карточки"
@@ -2464,30 +2457,30 @@ msgstr "Обновить"
msgid "Update label" msgid "Update label"
msgstr "Обновить метку" msgstr "Обновить метку"
#: src/views/card/components/ActivityList.tsx:112 #: src/views/card/components/ActivityList.tsx:111
msgid "updated a checklist item" msgid "updated a checklist item"
msgstr "обновлен элемент контрольного списка" msgstr "обновлен элемент контрольного списка"
#: src/views/card/components/ActivityList.tsx:102 #: src/views/card/components/ActivityList.tsx:101
msgid "updated the description" msgid "updated the description"
msgstr "обновлено описание" msgstr "обновлено описание"
#: src/views/card/components/ActivityList.tsx:117 #: src/views/card/components/ActivityList.tsx:116
msgid "updated the due date" msgid "updated the due date"
msgstr "обновил(а) дату выполнения" msgstr "обновил(а) дату выполнения"
#: src/views/card/components/ActivityList.tsx:101 #: src/views/card/components/ActivityList.tsx:100
msgid "updated the title" msgid "updated the title"
msgstr "обновлен заголовок" msgstr "обновлен заголовок"
#. placeholder {0}: truncate(toTitle) #. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:126 #: src/views/card/components/ActivityList.tsx:125
msgid "updated the title to <0>{0}</0>" msgid "updated the title to <0>{0}</0>"
msgstr "обновлен заголовок на <0>{0}</0>" msgstr "обновлен заголовок на <0>{0}</0>"
#: src/components/SideNavigation.tsx:239 #: src/components/SideNavigation.tsx:237
#: src/views/settings/components/UpgradeToProConfirmation.tsx:53 #: src/views/settings/components/UpgradeToProConfirmation.tsx:53
#: src/views/settings/WorkspaceSettings.tsx:99 #: src/views/settings/WorkspaceSettings.tsx:90
msgid "Upgrade to Pro" msgid "Upgrade to Pro"
msgstr "Обновить до Pro" msgstr "Обновить до Pro"
@@ -2524,7 +2517,7 @@ msgstr "URL должен содержать не менее 3 символов"
msgid "Use template" msgid "Use template"
msgstr "Использовать шаблон" msgstr "Использовать шаблон"
#: src/views/members/index.tsx:246 #: src/views/members/index.tsx:237
msgid "User" msgid "User"
msgstr "Пользователь" msgstr "Пользователь"
@@ -2549,7 +2542,7 @@ msgstr "Просмотр и управление вашими счетами и
msgid "View docs" msgid "View docs"
msgstr "Просмотреть документацию" msgstr "Просмотреть документацию"
#: src/views/public/board/index.tsx:148 #: src/views/public/board/index.tsx:142
msgid "View only" msgid "View only"
msgstr "Только просмотр" msgstr "Только просмотр"
@@ -2557,7 +2550,7 @@ msgstr "Только просмотр"
msgid "View our roadmap." msgid "View our roadmap."
msgstr "Просмотреть нашу дорожную карту." msgstr "Просмотреть нашу дорожную карту."
#: src/views/public/board/index.tsx:182 #: src/views/public/board/index.tsx:172
msgid "View workspace" msgid "View workspace"
msgstr "Просмотреть рабочее пространство" msgstr "Просмотреть рабочее пространство"
@@ -2602,10 +2595,10 @@ msgid "Why make an open source Trello?"
msgstr "Зачем создавать Trello с открытым исходным кодом?" msgstr "Зачем создавать Trello с открытым исходным кодом?"
#: src/components/SettingsLayout.tsx:39 #: src/components/SettingsLayout.tsx:39
#: src/views/board/index.tsx:396 #: src/views/board/index.tsx:390
#: src/views/boards/index.tsx:33 #: src/views/boards/index.tsx:33
#: src/views/members/index.tsx:182 #: src/views/members/index.tsx:173
#: src/views/public/board/index.tsx:120 #: src/views/public/board/index.tsx:114
#: src/views/public/boards/index.tsx:66 #: src/views/public/boards/index.tsx:66
msgid "Workspace" msgid "Workspace"
msgstr "Рабочее пространство" msgstr "Рабочее пространство"
@@ -2618,7 +2611,7 @@ msgstr "Рабочее пространство успешно создано.
msgid "Workspace deleted" msgid "Workspace deleted"
msgstr "Рабочее пространство удалено" msgstr "Рабочее пространство удалено"
#: src/views/settings/WorkspaceSettings.tsx:76 #: src/views/settings/WorkspaceSettings.tsx:75
msgid "Workspace description" msgid "Workspace description"
msgstr "Описание рабочего пространства" msgstr "Описание рабочего пространства"
@@ -2641,7 +2634,7 @@ msgid "Workspace members"
msgstr "Участники рабочего пространства" msgstr "Участники рабочего пространства"
#: src/components/NewWorkspaceForm.tsx:262 #: src/components/NewWorkspaceForm.tsx:262
#: src/views/settings/WorkspaceSettings.tsx:59 #: src/views/settings/WorkspaceSettings.tsx:58
msgid "Workspace name" msgid "Workspace name"
msgstr "Название рабочего пространства" msgstr "Название рабочего пространства"
@@ -2666,7 +2659,7 @@ msgstr "Название рабочего пространства обновл
msgid "Workspace slug updated" msgid "Workspace slug updated"
msgstr "Slug рабочего пространства обновлен" msgstr "Slug рабочего пространства обновлен"
#: src/views/settings/WorkspaceSettings.tsx:67 #: src/views/settings/WorkspaceSettings.tsx:66
msgid "Workspace URL" msgid "Workspace URL"
msgstr "URL рабочего пространства" msgstr "URL рабочего пространства"
@@ -2687,7 +2680,7 @@ msgstr "Ежегодно"
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits." msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
msgstr "Да, мы предлагаем навсегда бесплатный план для индивидуального использования. Никаких ограничений, платных стен или лимитов." msgstr "Да, мы предлагаем навсегда бесплатный план для индивидуального использования. Никаких ограничений, платных стен или лимитов."
#: src/views/settings/AccountSettings.tsx:80 #: src/views/settings/AccountSettings.tsx:73
msgid "You are about to change your password." msgid "You are about to change your password."
msgstr "Вы собираетесь изменить свой пароль." msgstr "Вы собираетесь изменить свой пароль."

File diff suppressed because one or more lines are too long

View File

@@ -2,17 +2,9 @@ import { toNodeHandler } from "better-auth/node";
import { initAuth } from "@kan/auth/server"; import { initAuth } from "@kan/auth/server";
import { createDrizzleClient } from "@kan/db/client"; import { createDrizzleClient } from "@kan/db/client";
import { withRateLimit } from "@kan/api/utils/rateLimit";
export const config = { api: { bodyParser: false } }; export const config = { api: { bodyParser: false } };
export const auth = initAuth(createDrizzleClient()); export const auth = initAuth(createDrizzleClient());
const authHandler = toNodeHandler(auth.handler); export default toNodeHandler(auth.handler);
export default withRateLimit(
{ points: 100, duration: 60 },
async (req, res) => {
return await authHandler(req, res);
},
);

View File

@@ -1,10 +1,9 @@
import type { NextApiRequest, NextApiResponse } from "next"; import type { NextApiRequest, NextApiResponse } from "next";
import { withRateLimit } from "@kan/api/utils/rateLimit"; export default async function handler(
req: NextApiRequest,
export default withRateLimit( res: NextApiResponse,
{ points: 100, duration: 60 }, ) {
async (req: NextApiRequest, res: NextApiResponse) => {
if (req.method !== "GET") { if (req.method !== "GET") {
return res.status(405).json({ message: "Method not allowed" }); return res.status(405).json({ message: "Method not allowed" });
} }
@@ -45,5 +44,4 @@ export default withRateLimit(
console.error("Error downloading attachment:", error); console.error("Error downloading attachment:", error);
return res.status(500).json({ message: "Failed to download attachment" }); return res.status(500).json({ message: "Failed to download attachment" });
} }
}, }
);

View File

@@ -1,10 +1,9 @@
import type { NextApiRequest, NextApiResponse } from "next"; import type { NextApiRequest, NextApiResponse } from "next";
import { withRateLimit } from "@kan/api/utils/rateLimit"; export default async function handler(
req: NextApiRequest,
export default withRateLimit( res: NextApiResponse,
{ points: 100, duration: 60 }, ) {
async (req: NextApiRequest, res: NextApiResponse) => {
if (req.method !== "GET") { if (req.method !== "GET") {
return res.status(405).json({ message: "Method not allowed" }); return res.status(405).json({ message: "Method not allowed" });
} }
@@ -21,5 +20,4 @@ export default withRateLimit(
console.error("Error fetching OSS friends:", error); console.error("Error fetching OSS friends:", error);
return res.status(500).json({ message: "Failed to fetch OSS friends" }); return res.status(500).json({ message: "Failed to fetch OSS friends" });
} }
}, }
);

View File

@@ -3,11 +3,11 @@ import { env } from "next-runtime-env";
import { createNextApiContext } from "@kan/api/trpc"; import { createNextApiContext } from "@kan/api/trpc";
import { createStripeClient } from "@kan/stripe"; import { createStripeClient } from "@kan/stripe";
import { withRateLimit } from "@kan/api/utils/rateLimit";
export default withRateLimit( export default async function handler(
{ points: 100, duration: 60 }, req: NextApiRequest,
async (req: NextApiRequest, res: NextApiResponse) => { res: NextApiResponse,
) {
const stripe = createStripeClient(); const stripe = createStripeClient();
if (req.method !== "POST") { if (req.method !== "POST") {
@@ -31,5 +31,4 @@ export default withRateLimit(
console.error("Error:", error); console.error("Error:", error);
return res.status(500).json({ error: "Error creating portal session" }); return res.status(500).json({ error: "Error creating portal session" });
} }
}, }
);

View File

@@ -6,7 +6,6 @@ import { createNextApiContext } from "@kan/api/trpc";
import * as subscriptionRepo from "@kan/db/repository/subscription.repo"; import * as subscriptionRepo from "@kan/db/repository/subscription.repo";
import * as workspaceRepo from "@kan/db/repository/workspace.repo"; import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import { createStripeClient } from "@kan/stripe"; import { createStripeClient } from "@kan/stripe";
import { withRateLimit } from "@kan/api/utils/rateLimit";
const workspaceSlugSchema = z const workspaceSlugSchema = z
.string() .string()
@@ -22,9 +21,10 @@ interface CheckoutSessionRequest {
stripeCustomerId: string; stripeCustomerId: string;
} }
export default withRateLimit( export default async function handler(
{ points: 100, duration: 60 }, req: NextApiRequest,
async (req: NextApiRequest, res: NextApiResponse) => { res: NextApiResponse,
) {
const stripe = createStripeClient(); const stripe = createStripeClient();
if (req.method !== "POST") { if (req.method !== "POST") {
@@ -115,5 +115,4 @@ export default withRateLimit(
console.error("Error:", error); console.error("Error:", error);
return res.status(500).json({ error: "Error creating checkout session" }); return res.status(500).json({ error: "Error creating checkout session" });
} }
}, }
);

View File

@@ -3,11 +3,11 @@ import type { NextApiRequest, NextApiResponse } from "next";
import { createNextApiContext } from "@kan/api/trpc"; import { createNextApiContext } from "@kan/api/trpc";
import { integrations } from "@kan/db/schema"; import { integrations } from "@kan/db/schema";
import { addYears } from "date-fns"; import { addYears } from "date-fns";
import { withRateLimit } from "@kan/api/utils/rateLimit";
export default withRateLimit( export default async function handler(
{ points: 100, duration: 60 }, req: NextApiRequest,
async (req: NextApiRequest, res: NextApiResponse) => { res: NextApiResponse,
) {
if (req.method !== "POST") { if (req.method !== "POST") {
return res.status(405).json({ message: "Method not allowed" }); return res.status(405).json({ message: "Method not allowed" });
} }
@@ -48,5 +48,4 @@ export default withRateLimit(
console.error("Trello authentication error:", err); console.error("Trello authentication error:", err);
return res.status(400).json({ message: "Trello authentication failed" }); return res.status(400).json({ message: "Trello authentication failed" });
} }
}, }
);

View File

@@ -3,14 +3,12 @@ import { createNextApiHandler } from "@trpc/server/adapters/next";
import { appRouter } from "@kan/api/root"; import { appRouter } from "@kan/api/root";
import { createTRPCContext } from "@kan/api/trpc"; import { createTRPCContext } from "@kan/api/trpc";
import { env } from "~/env";
import { withRateLimit } from "@kan/api/utils/rateLimit";
const nextApiHandler = createNextApiHandler({ const nextApiHandler = createNextApiHandler({
router: appRouter, router: appRouter,
createContext: createTRPCContext, createContext: createTRPCContext,
onError: onError:
env.NODE_ENV === "development" process.env.NODE_ENV === "development"
? ({ path, error }) => { ? ({ path, error }) => {
console.error( console.error(
`❌ tRPC failed on ${path ?? "<no-path>"}: ${error.message}`, `❌ tRPC failed on ${path ?? "<no-path>"}: ${error.message}`,
@@ -19,16 +17,11 @@ const nextApiHandler = createNextApiHandler({
: undefined, : undefined,
}); });
export default withRateLimit( export default function handler(req: NextApiRequest, res: NextApiResponse) {
{ points: 100, duration: 60 }, if (req.method === "OPTIONS") {
async (req: NextApiRequest, res: NextApiResponse) => { res.writeHead(200);
if (req.method === "OPTIONS") { return res.end();
res.writeHead(200); }
res.end();
return;
}
const result = await nextApiHandler(req, res); return nextApiHandler(req, res);
return result; }
},
);

View File

@@ -4,7 +4,6 @@ import { jwtVerify } from "jose";
import { z } from "zod"; import { z } from "zod";
import { env } from "~/env"; import { env } from "~/env";
import { withRateLimit } from "@kan/api/utils/rateLimit";
const requestSchema = z.object({ const requestSchema = z.object({
token: z.string().min(1), token: z.string().min(1),
@@ -20,9 +19,10 @@ type ResponseData =
const textEncoder = new TextEncoder(); const textEncoder = new TextEncoder();
export default withRateLimit( export default async function handler(
{ points: 100, duration: 60 }, req: NextApiRequest,
async (req: NextApiRequest, res: NextApiResponse<ResponseData>) => { res: NextApiResponse<ResponseData>,
) {
if (process.env.NEXT_PUBLIC_KAN_ENV !== "cloud") { if (process.env.NEXT_PUBLIC_KAN_ENV !== "cloud") {
return res.status(404).json({ return res.status(404).json({
success: false, success: false,
@@ -101,5 +101,4 @@ export default withRateLimit(
} }
return res.status(200).json({ success: true }); return res.status(200).json({ success: true });
}, }
);

View File

@@ -6,13 +6,13 @@ import { env as nextRuntimeEnv } from "next-runtime-env";
import { createNextApiContext } from "@kan/api/trpc"; import { createNextApiContext } from "@kan/api/trpc";
import { env } from "~/env"; import { env } from "~/env";
import { withRateLimit } from "@kan/api/utils/rateLimit";
const allowedContentTypes = ["image/jpeg", "image/png"]; const allowedContentTypes = ["image/jpeg", "image/png"];
export default withRateLimit( export default async function handler(
{ points: 100, duration: 60 }, req: NextApiRequest,
async (req: NextApiRequest, res: NextApiResponse) => { res: NextApiResponse,
) {
if (req.method !== "POST") { if (req.method !== "POST") {
return res.status(405).json({ error: "Method not allowed" }); return res.status(405).json({ error: "Method not allowed" });
} }
@@ -71,5 +71,4 @@ export default withRateLimit(
} catch (error) { } catch (error) {
return res.status(500).json({ error: (error as Error).message }); return res.status(500).json({ error: (error as Error).message });
} }
}, }
);

View File

@@ -6,26 +6,25 @@ import { appRouter } from "@kan/api";
import { createRESTContext } from "@kan/api/trpc"; import { createRESTContext } from "@kan/api/trpc";
import { env } from "~/env"; import { env } from "~/env";
import { withRateLimit } from "@kan/api/utils/rateLimit";
export default withRateLimit( export default async function handler(
{ points: 100, duration: 60 }, req: NextApiRequest,
async (req: NextApiRequest, res: NextApiResponse) => { res: NextApiResponse,
await cors(req, res); ) {
await cors(req, res);
const openApiHandler = createOpenApiNextHandler({ const openApiHandler = createOpenApiNextHandler({
router: appRouter, router: appRouter,
createContext: createRESTContext, createContext: createRESTContext,
onError: onError:
env.NODE_ENV === "development" env.NODE_ENV === "development"
? ({ path, error }) => { ? ({ path, error }) => {
console.error( console.error(
`❌ REST failed on ${path ?? "<no-path>"}: ${error.message}`, `❌ REST failed on ${path ?? "<no-path>"}: ${error.message}`,
); );
} }
: undefined, : undefined,
}); });
return await openApiHandler(req, res); return await openApiHandler(req, res);
}, }
);

View File

@@ -1,11 +1,9 @@
import type { NextApiRequest, NextApiResponse } from "next"; import type { NextApiRequest, NextApiResponse } from "next";
import { openApiDocument } from "@kan/api/openapi"; import { openApiDocument } from "@kan/api/openapi";
import { withRateLimit } from "@kan/api/utils/rateLimit";
export default withRateLimit( const handler = (req: NextApiRequest, res: NextApiResponse) => {
{ points: 100, duration: 60 }, res.status(200).send(openApiDocument);
(req: NextApiRequest, res: NextApiResponse) => { };
res.status(200).send(openApiDocument);
}, export default handler;
);

View File

@@ -1,69 +0,0 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
vi.mock("next-runtime-env", () => ({
env: vi.fn(),
}));
import { env } from "next-runtime-env";
import { getAvatarUrl } from "./helpers";
const mockEnv = env as ReturnType<typeof vi.fn>;
describe("getAvatarUrl", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("returns empty string for null input", () => {
expect(getAvatarUrl(null)).toBe("");
});
it("returns empty string for empty string input", () => {
expect(getAvatarUrl("")).toBe("");
});
it("returns URL unchanged if already absolute http", () => {
expect(getAvatarUrl("http://example.com/avatar.jpg")).toBe(
"http://example.com/avatar.jpg",
);
});
it("returns URL unchanged if already absolute https", () => {
expect(getAvatarUrl("https://example.com/avatar.jpg")).toBe(
"https://example.com/avatar.jpg",
);
});
describe("path-style URLs (MinIO/LocalStack)", () => {
it("constructs path-style URL when STORAGE_DOMAIN is not set", () => {
mockEnv.mockImplementation((key: string) => {
const vars: Record<string, string> = {
NEXT_PUBLIC_STORAGE_URL: "http://s3.localtest.me:9000",
NEXT_PUBLIC_AVATAR_BUCKET_NAME: "kan",
};
return vars[key];
});
expect(getAvatarUrl("user123/avatar.jpg")).toBe(
"http://s3.localtest.me:9000/kan/user123/avatar.jpg",
);
});
});
describe("virtual-hosted URLs (Tigris/AWS S3)", () => {
it("constructs virtual-hosted URL when STORAGE_DOMAIN is set", () => {
mockEnv.mockImplementation((key: string) => {
const vars: Record<string, string> = {
NEXT_PUBLIC_STORAGE_DOMAIN: "fly.storage.tigris.dev",
NEXT_PUBLIC_AVATAR_BUCKET_NAME: "kan-avatars",
NEXT_PUBLIC_STORAGE_URL: "https://fly.storage.tigris.dev",
};
return vars[key];
});
expect(getAvatarUrl("user123/avatar.jpg")).toBe(
"https://kan-avatars.fly.storage.tigris.dev/user123/avatar.jpg",
);
});
});
});

View File

@@ -52,13 +52,5 @@ export const getAvatarUrl = (imageOrKey: string | null) => {
return imageOrKey; return imageOrKey;
} }
const bucket = env("NEXT_PUBLIC_AVATAR_BUCKET_NAME"); return `${env("NEXT_PUBLIC_STORAGE_URL")}/${env("NEXT_PUBLIC_AVATAR_BUCKET_NAME")}/${imageOrKey}`;
const storageDomain = env("NEXT_PUBLIC_STORAGE_DOMAIN");
if (storageDomain) {
return `https://${bucket}.${storageDomain}/${imageOrKey}`;
}
const storageUrl = env("NEXT_PUBLIC_STORAGE_URL");
return `${storageUrl}/${bucket}/${imageOrKey}`;
}; };

View File

@@ -22,8 +22,8 @@ const loadMessages = async (locale: Locale) => {
return (await import("~/locales/ru/messages")).messages; return (await import("~/locales/ru/messages")).messages;
case "pl": case "pl":
return (await import("~/locales/pl/messages")).messages; return (await import("~/locales/pl/messages")).messages;
case "pt-BR": case "ptbr":
return (await import("~/locales/pt-BR/messages")).messages; return (await import("~/locales/ptbr/messages")).messages;
default: default:
return enMessages; return enMessages;
} }

View File

@@ -25,7 +25,6 @@ import PatternedBackground from "~/components/PatternedBackground";
import { StrictModeDroppable as Droppable } from "~/components/StrictModeDroppable"; import { StrictModeDroppable as Droppable } from "~/components/StrictModeDroppable";
import { Tooltip } from "~/components/Tooltip"; import { Tooltip } from "~/components/Tooltip";
import { EditYouTubeModal } from "~/components/YouTubeEmbed/EditYouTubeModal"; import { EditYouTubeModal } from "~/components/YouTubeEmbed/EditYouTubeModal";
import { useDragToScroll } from "~/hooks/useDragToScroll";
import { useKeyboardShortcut } from "~/providers/keyboard-shortcuts"; import { useKeyboardShortcut } from "~/providers/keyboard-shortcuts";
import { useModal } from "~/providers/modal"; import { useModal } from "~/providers/modal";
import { usePopup } from "~/providers/popup"; import { usePopup } from "~/providers/popup";
@@ -58,11 +57,6 @@ export default function BoardPage({ isTemplate }: { isTemplate?: boolean }) {
useState<PublicListId>(""); useState<PublicListId>("");
const [isInitialLoading, setIsInitialLoading] = useState(true); const [isInitialLoading, setIsInitialLoading] = useState(true);
const { ref: scrollRef, onMouseDown } = useDragToScroll({
enabled: true,
direction: "horizontal",
});
const { tooltipContent: createListShortcutTooltipContent } = const { tooltipContent: createListShortcutTooltipContent } =
useKeyboardShortcut({ useKeyboardShortcut({
type: "PRESS", type: "PRESS",
@@ -485,11 +479,7 @@ export default function BoardPage({ isTemplate }: { isTemplate?: boolean }) {
</div> </div>
</div> </div>
<div <div className="scrollbar-w-none scrollbar-track-rounded-[4px] scrollbar-thumb-rounded-[4px] scrollbar-h-[8px] z-0 flex-1 overflow-y-hidden overflow-x-scroll overscroll-contain scrollbar scrollbar-track-light-200 scrollbar-thumb-light-400 dark:scrollbar-track-dark-100 dark:scrollbar-thumb-dark-300">
ref={scrollRef}
onMouseDown={onMouseDown}
className={`scrollbar-w-none scrollbar-track-rounded-[4px] scrollbar-thumb-rounded-[4px] scrollbar-h-[8px] z-0 flex-1 overflow-y-hidden overflow-x-scroll overscroll-contain scrollbar scrollbar-track-light-200 scrollbar-thumb-light-400 dark:scrollbar-track-dark-100 dark:scrollbar-thumb-dark-300`}
>
{isLoading ? ( {isLoading ? (
<div className="ml-[2rem] flex"> <div className="ml-[2rem] flex">
<div className="0 mr-5 h-[500px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" /> <div className="0 mr-5 h-[500px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" />

View File

@@ -25,7 +25,6 @@ import { authClient } from "@kan/auth/client";
import Avatar from "~/components/Avatar"; import Avatar from "~/components/Avatar";
import { useLocalisation } from "~/hooks/useLocalisation"; import { useLocalisation } from "~/hooks/useLocalisation";
import { api } from "~/utils/api"; import { api } from "~/utils/api";
import { getAvatarUrl } from "~/utils/helpers";
import Comment from "./Comment"; import Comment from "./Comment";
type ActivityType = type ActivityType =
@@ -472,7 +471,6 @@ const ActivityList = ({
cardPublicId={cardPublicId} cardPublicId={cardPublicId}
name={activity.user?.name ?? ""} name={activity.user?.name ?? ""}
email={activity.user?.email ?? ""} email={activity.user?.email ?? ""}
image={activity.user?.image ?? null}
isLoading={isLoading} isLoading={isLoading}
createdAt={activity.createdAt.toISOString()} createdAt={activity.createdAt.toISOString()}
comment={activity.comment?.comment} comment={activity.comment?.comment}
@@ -495,7 +493,6 @@ const ActivityList = ({
size="sm" size="sm"
name={activity.user?.name ?? ""} name={activity.user?.name ?? ""}
email={activity.user?.email ?? ""} email={activity.user?.email ?? ""}
imageUrl={getAvatarUrl(activity.user?.image ?? null) || undefined}
icon={getActivityIcon( icon={getActivityIcon(
activity.type, activity.type,
activity.fromList?.index, activity.fromList?.index,

View File

@@ -12,7 +12,6 @@ import { useModal } from "~/providers/modal";
import { usePopup } from "~/providers/popup"; import { usePopup } from "~/providers/popup";
import { api } from "~/utils/api"; import { api } from "~/utils/api";
import { invalidateCard } from "~/utils/cardInvalidation"; import { invalidateCard } from "~/utils/cardInvalidation";
import { getAvatarUrl } from "~/utils/helpers";
interface FormValues { interface FormValues {
comment: string; comment: string;
@@ -23,7 +22,6 @@ const Comment = ({
cardPublicId, cardPublicId,
name, name,
email, email,
image,
isLoading, isLoading,
createdAt, createdAt,
comment, comment,
@@ -36,7 +34,6 @@ const Comment = ({
cardPublicId: string; cardPublicId: string;
name: string; name: string;
email: string; email: string;
image: string | null;
isLoading: boolean; isLoading: boolean;
createdAt: string; createdAt: string;
comment: string | undefined; comment: string | undefined;
@@ -111,7 +108,6 @@ const Comment = ({
size="sm" size="sm"
name={name ?? ""} name={name ?? ""}
email={email ?? ""} email={email ?? ""}
imageUrl={getAvatarUrl(image) || undefined}
isLoading={isLoading} isLoading={isLoading}
/> />

View File

@@ -54,7 +54,6 @@ export default function MembersPage() {
memberStatus, memberStatus,
isLastRow, isLastRow,
showSkeleton, showSkeleton,
showPendingIcon,
}: { }: {
memberPublicId?: string; memberPublicId?: string;
memberId?: string | null | undefined; memberId?: string | null | undefined;
@@ -65,7 +64,6 @@ export default function MembersPage() {
memberStatus?: string; memberStatus?: string;
isLastRow?: boolean; isLastRow?: boolean;
showSkeleton?: boolean; showSkeleton?: boolean;
showPendingIcon?: boolean;
}) => { }) => {
return ( return (
<tr className="rounded-b-lg"> <tr className="rounded-b-lg">
@@ -84,7 +82,6 @@ export default function MembersPage() {
name={memberName ?? ""} name={memberName ?? ""}
email={memberEmail ?? ""} email={memberEmail ?? ""}
imageUrl={memberImage ? getAvatarUrl(memberImage) : undefined} imageUrl={memberImage ? getAvatarUrl(memberImage) : undefined}
icon={showPendingIcon ? "?" : undefined}
/> />
)} )}
</div> </div>
@@ -96,26 +93,20 @@ export default function MembersPage() {
"mr-2 truncate text-xs font-medium text-neutral-900 dark:text-dark-1000 sm:text-sm", "mr-2 truncate text-xs font-medium text-neutral-900 dark:text-dark-1000 sm:text-sm",
showSkeleton && showSkeleton &&
"md mb-2 h-3 w-[125px] animate-pulse rounded-sm bg-light-200 dark:bg-dark-200", "md mb-2 h-3 w-[125px] animate-pulse rounded-sm bg-light-200 dark:bg-dark-200",
showPendingIcon &&
"italic text-neutral-500 dark:text-dark-900",
)} )}
> >
{memberName} {memberName}
</p> </p>
</div> </div>
{((workspace.role === "admin" || <p
data?.showEmailsToMembers === true) || className={twMerge(
showSkeleton) && ( "truncate text-xs text-dark-900 sm:text-sm",
<p showSkeleton &&
className={twMerge( "h-3 w-[175px] animate-pulse rounded-sm bg-light-200 dark:bg-dark-200",
"truncate text-xs text-dark-900 sm:text-sm", )}
showSkeleton && >
"h-3 w-[175px] animate-pulse rounded-sm bg-light-200 dark:bg-dark-200", {memberEmail}
)} </p>
>
{memberEmail}
</p>
)}
</div> </div>
</div> </div>
</div> </div>
@@ -255,24 +246,19 @@ export default function MembersPage() {
</thead> </thead>
<tbody className="divide-y divide-light-600 overflow-visible bg-light-50 dark:divide-dark-600 dark:bg-dark-100"> <tbody className="divide-y divide-light-600 overflow-visible bg-light-50 dark:divide-dark-600 dark:bg-dark-100">
{!isLoading && {!isLoading &&
data?.members.map((member, index) => { data?.members.map((member, index) => (
const isPendingInvite = member.status === "invited"; <TableRow
key={member.publicId}
return ( memberPublicId={member.publicId}
<TableRow memberId={member.user?.id}
key={member.publicId} memberName={member.user?.name}
memberPublicId={member.publicId} memberEmail={member.user?.email ?? member.email}
memberId={member.user?.id} memberImage={member.user?.image}
memberName={member.user?.name} memberRole={member.role}
memberEmail={member.user?.email ?? member.email} memberStatus={member.status}
memberImage={member.user?.image} isLastRow={index === data.members.length - 1}
memberRole={member.role} />
memberStatus={member.status} ))}
isLastRow={index === data.members.length - 1}
showPendingIcon={isPendingInvite}
/>
);
})}
{isLoading && ( {isLoading && (
<> <>

View File

@@ -12,7 +12,6 @@ import { PageHead } from "~/components/PageHead";
import PatternedBackground from "~/components/PatternedBackground"; import PatternedBackground from "~/components/PatternedBackground";
import Popup from "~/components/Popup"; import Popup from "~/components/Popup";
import ThemeToggle from "~/components/ThemeToggle"; import ThemeToggle from "~/components/ThemeToggle";
import { useDragToScroll } from "~/hooks/useDragToScroll";
import { useModal } from "~/providers/modal"; import { useModal } from "~/providers/modal";
import { usePopup } from "~/providers/popup"; import { usePopup } from "~/providers/popup";
import { api } from "~/utils/api"; import { api } from "~/utils/api";
@@ -31,11 +30,6 @@ export default function PublicBoardView() {
const [isRouteLoaded, setIsRouteLoaded] = useState(false); const [isRouteLoaded, setIsRouteLoaded] = useState(false);
const { openModal } = useModal(); const { openModal } = useModal();
const { ref: scrollRef, onMouseDown } = useDragToScroll({
enabled: true,
direction: "horizontal",
});
const boardSlug = Array.isArray(router.query.boardSlug) const boardSlug = Array.isArray(router.query.boardSlug)
? router.query.boardSlug[0] ? router.query.boardSlug[0]
: router.query.boardSlug; : router.query.boardSlug;
@@ -157,11 +151,7 @@ export default function PublicBoardView() {
)} )}
</div> </div>
<div <div className="scrollbar-w-none scrollbar-track-rounded-[4px] scrollbar-thumb-rounded-[4px] scrollbar-h-[8px] relative h-full flex-1 overflow-y-hidden overflow-x-scroll overscroll-contain scrollbar scrollbar-track-light-200 scrollbar-thumb-light-400 dark:scrollbar-track-dark-100 dark:scrollbar-thumb-dark-300">
ref={scrollRef}
onMouseDown={onMouseDown}
className="scrollbar-w-none scrollbar-track-rounded-[4px] scrollbar-thumb-rounded-[4px] scrollbar-h-[8px] relative h-full flex-1 overflow-y-hidden overflow-x-scroll overscroll-contain scrollbar scrollbar-track-light-200 scrollbar-thumb-light-400 dark:scrollbar-track-dark-100 dark:scrollbar-thumb-dark-300"
>
{isLoading || !router.isReady ? ( {isLoading || !router.isReady ? (
<div className="ml-[2rem] flex"> <div className="ml-[2rem] flex">
<div className="0 mr-5 h-[500px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" /> <div className="0 mr-5 h-[500px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" />

View File

@@ -37,13 +37,6 @@ export default function AccountSettings() {
<UpdateDisplayNameForm displayName={data?.name ?? ""} /> <UpdateDisplayNameForm displayName={data?.name ?? ""} />
</div> </div>
<div className="mb-4">
<h2 className="mb-4 mt-8 text-[14px] font-bold text-neutral-900 dark:text-dark-1000">
{t`Email`}
</h2>
<p className="text-sm text-neutral-700 dark:text-dark-900">{data?.email}</p>
</div>
<div className="mb-8 border-t border-light-300 dark:border-dark-300"> <div className="mb-8 border-t border-light-300 dark:border-dark-300">
<h2 className="mb-4 mt-8 text-[14px] font-bold text-neutral-900 dark:text-dark-1000"> <h2 className="mb-4 mt-8 text-[14px] font-bold text-neutral-900 dark:text-dark-1000">
{t`Language`} {t`Language`}

View File

@@ -17,7 +17,6 @@ import { useWorkspace } from "~/providers/workspace";
import { api } from "~/utils/api"; import { api } from "~/utils/api";
import { DeleteWorkspaceConfirmation } from "./components/DeleteWorkspaceConfirmation"; import { DeleteWorkspaceConfirmation } from "./components/DeleteWorkspaceConfirmation";
import UpdateWorkspaceDescriptionForm from "./components/UpdateWorkspaceDescriptionForm"; import UpdateWorkspaceDescriptionForm from "./components/UpdateWorkspaceDescriptionForm";
import UpdateWorkspaceEmailVisibilityForm from "./components/UpdateWorkspaceEmailVisibilityForm";
import UpdateWorkspaceNameForm from "./components/UpdateWorkspaceNameForm"; import UpdateWorkspaceNameForm from "./components/UpdateWorkspaceNameForm";
import UpdateWorkspaceUrlForm from "./components/UpdateWorkspaceUrlForm"; import UpdateWorkspaceUrlForm from "./components/UpdateWorkspaceUrlForm";
import { UpgradeToProConfirmation } from "./components/UpgradeToProConfirmation"; import { UpgradeToProConfirmation } from "./components/UpgradeToProConfirmation";
@@ -80,14 +79,6 @@ export default function WorkspaceSettings() {
workspaceDescription={workspace.description ?? ""} workspaceDescription={workspace.description ?? ""}
/> />
<h2 className="mb-4 mt-8 text-[14px] font-bold text-neutral-900 dark:text-dark-1000">
{t`Email visibility`}
</h2>
<UpdateWorkspaceEmailVisibilityForm
workspacePublicId={workspace.publicId}
showEmailsToMembers={workspaceData?.showEmailsToMembers ?? false}
/>
{env("NEXT_PUBLIC_KAN_ENV") === "cloud" && {env("NEXT_PUBLIC_KAN_ENV") === "cloud" &&
!hasActiveSubscription(subscriptions, "pro") && !hasActiveSubscription(subscriptions, "pro") &&
!hasActiveSubscription(subscriptions, "team") && ( !hasActiveSubscription(subscriptions, "team") && (

View File

@@ -1,53 +0,0 @@
import { t } from "@lingui/core/macro";
import { useEffect, useState } from "react";
import Toggle from "~/components/Toggle";
import { api } from "~/utils/api";
export default function UpdateWorkspaceEmailVisibilityForm({
workspacePublicId,
showEmailsToMembers,
}: {
workspacePublicId: string;
showEmailsToMembers: boolean;
}) {
const utils = api.useUtils();
const [isChecked, setIsChecked] = useState(showEmailsToMembers);
useEffect(() => {
setIsChecked(showEmailsToMembers);
}, [showEmailsToMembers]);
const updateWorkspace = api.workspace.update.useMutation({
onSuccess: () => {
void utils.workspace.byId.invalidate({
workspacePublicId,
});
},
});
const handleToggle = () => {
const newValue = !isChecked;
setIsChecked(newValue);
updateWorkspace.mutate({
workspacePublicId,
showEmailsToMembers: newValue,
});
};
return (
<div className="mb-8 flex items-center justify-between">
<div className="flex-1">
<p className="text-sm text-neutral-500 dark:text-dark-900">
{t`Allow workspace members to see each other's email addresses`}
</p>
</div>
<Toggle
isChecked={isChecked}
onChange={handleToggle}
label=""
disabled={updateWorkspace.isPending}
/>
</div>
);
}

View File

@@ -9,8 +9,6 @@ services:
build: build:
context: .. context: ..
dockerfile: apps/web/Dockerfile dockerfile: apps/web/Dockerfile
args:
APP_VERSION: ${APP_VERSION:-}
env_file: env_file:
- .env - .env
restart: unless-stopped restart: unless-stopped
@@ -21,7 +19,6 @@ services:
- BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET} - BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
- POSTGRES_URL=${POSTGRES_URL} - POSTGRES_URL=${POSTGRES_URL}
- NEXT_PUBLIC_USE_STANDALONE_OUTPUT=${NEXT_PUBLIC_USE_STANDALONE_OUTPUT} - NEXT_PUBLIC_USE_STANDALONE_OUTPUT=${NEXT_PUBLIC_USE_STANDALONE_OUTPUT}
- REDIS_URL=${REDIS_URL}
# Stripe # Stripe
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY} - STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
@@ -57,13 +54,10 @@ services:
- NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME=${NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME} - NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME=${NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME}
- NEXT_PUBLIC_STORAGE_DOMAIN=${NEXT_PUBLIC_STORAGE_DOMAIN} - NEXT_PUBLIC_STORAGE_DOMAIN=${NEXT_PUBLIC_STORAGE_DOMAIN}
# Auth config (optional) # Auth config
- NEXT_PUBLIC_ALLOW_CREDENTIALS=${NEXT_PUBLIC_ALLOW_CREDENTIALS} - NEXT_PUBLIC_ALLOW_CREDENTIALS=${NEXT_PUBLIC_ALLOW_CREDENTIALS}
- NEXT_PUBLIC_DISABLE_SIGN_UP=${NEXT_PUBLIC_DISABLE_SIGN_UP} - NEXT_PUBLIC_DISABLE_SIGN_UP=${NEXT_PUBLIC_DISABLE_SIGN_UP}
# API configuration (optional)
- NEXT_API_BODY_SIZE_LIMIT=${NEXT_API_BODY_SIZE_LIMIT}
# Integration providers # Integration providers
- TRELLO_APP_API_KEY=${TRELLO_APP_API_KEY} - TRELLO_APP_API_KEY=${TRELLO_APP_API_KEY}
- TRELLO_APP_SECRET=${TRELLO_APP_SECRET} - TRELLO_APP_SECRET=${TRELLO_APP_SECRET}

View File

@@ -18,9 +18,6 @@ services:
- BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET} - BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
- POSTGRES_URL=${POSTGRES_URL} - POSTGRES_URL=${POSTGRES_URL}
# Redis (optional - for rate limiting)
- REDIS_URL=${REDIS_URL}
# Admin API key (optional) # Admin API key (optional)
- KAN_ADMIN_API_KEY=${KAN_ADMIN_API_KEY} - KAN_ADMIN_API_KEY=${KAN_ADMIN_API_KEY}
@@ -53,9 +50,6 @@ services:
- NEXT_PUBLIC_ALLOW_CREDENTIALS=${NEXT_PUBLIC_ALLOW_CREDENTIALS} - NEXT_PUBLIC_ALLOW_CREDENTIALS=${NEXT_PUBLIC_ALLOW_CREDENTIALS}
- NEXT_PUBLIC_DISABLE_SIGN_UP=${NEXT_PUBLIC_DISABLE_SIGN_UP} - NEXT_PUBLIC_DISABLE_SIGN_UP=${NEXT_PUBLIC_DISABLE_SIGN_UP}
# API configuration (optional)
- NEXT_API_BODY_SIZE_LIMIT=${NEXT_API_BODY_SIZE_LIMIT}
# Integration providers (optional) # Integration providers (optional)
- TRELLO_APP_API_KEY=${TRELLO_APP_API_KEY} - TRELLO_APP_API_KEY=${TRELLO_APP_API_KEY}
- TRELLO_APP_SECRET=${TRELLO_APP_SECRET} - TRELLO_APP_SECRET=${TRELLO_APP_SECRET}

View File

@@ -23,10 +23,6 @@
"./openapi": { "./openapi": {
"types": "./dist/openapi.d.ts", "types": "./dist/openapi.d.ts",
"default": "./src/openapi.ts" "default": "./src/openapi.ts"
},
"./utils/rateLimit": {
"types": "./dist/utils/rateLimit.d.ts",
"default": "./src/utils/rateLimit.ts"
} }
}, },
"license": "GPL-3.0", "license": "GPL-3.0",
@@ -47,7 +43,6 @@
"@kan/shared": "workspace:^", "@kan/shared": "workspace:^",
"@kan/stripe": "workspace:^", "@kan/stripe": "workspace:^",
"@trpc/server": "catalog:", "@trpc/server": "catalog:",
"rate-limiter-flexible": "^9.0.1",
"superjson": "2.2.1", "superjson": "2.2.1",
"trpc-to-openapi": "^2.3.2", "trpc-to-openapi": "^2.3.2",
"zod": "catalog:" "zod": "catalog:"

View File

@@ -77,49 +77,6 @@ export const workspaceRouter = createTRPCRouter({
await assertUserInWorkspace(ctx.db, userId, result.id); await assertUserInWorkspace(ctx.db, userId, result.id);
// Check if user is an admin
const userMember = result.members.find(
(member) => member.user?.id === userId,
);
const isAdmin = userMember?.role === "admin";
// Show emails if user is admin OR workspace setting allows it
const shouldShowEmails = isAdmin || result.showEmailsToMembers === true;
// If emails should be hidden, filter them out
if (!shouldShowEmails) {
const sanitizedMembers = result.members.map((member) => {
// If user doesn't have a display name, use anonymous identifier
const displayName =
member.user?.name?.trim() ?? `anonymous_${member.publicId}`;
const { email: _memberEmail, ...memberWithoutEmail } = member;
const sanitizedUser = member.user
? (() => {
const { email: _userEmail, ...userWithoutEmail } = member.user;
return {
...userWithoutEmail,
name: displayName,
};
})()
: {
id: null,
name: displayName,
image: null,
};
return {
...memberWithoutEmail,
user: sanitizedUser,
};
});
return {
...result,
members: sanitizedMembers,
} as Awaited<ReturnType<typeof workspaceRepo.getByPublicIdWithMembers>>;
}
return result; return result;
}), }),
bySlug: publicProcedure bySlug: publicProcedure
@@ -273,7 +230,6 @@ export const workspaceRouter = createTRPCRouter({
.regex(/^(?![-]+$)[a-zA-Z0-9-]+$/) .regex(/^(?![-]+$)[a-zA-Z0-9-]+$/)
.optional(), .optional(),
description: z.string().min(3).max(280).optional(), description: z.string().min(3).max(280).optional(),
showEmailsToMembers: z.boolean().optional(),
}), }),
) )
.output(z.custom<Awaited<ReturnType<typeof workspaceRepo.update>>>()) .output(z.custom<Awaited<ReturnType<typeof workspaceRepo.update>>>())
@@ -335,16 +291,9 @@ export const workspaceRouter = createTRPCRouter({
name: input.name, name: input.name,
slug: input.slug, slug: input.slug,
description: input.description, description: input.description,
showEmailsToMembers: input.showEmailsToMembers,
}, },
); );
if (!result)
throw new TRPCError({
message: `Unable to delete workspace`,
code: "INTERNAL_SERVER_ERROR",
});
return result; return result;
}), }),
delete: protectedProcedure delete: protectedProcedure
@@ -387,6 +336,12 @@ export const workspaceRouter = createTRPCRouter({
input.workspacePublicId, input.workspacePublicId,
); );
if (!result)
throw new TRPCError({
message: `Unable to delete workspace`,
code: "INTERNAL_SERVER_ERROR",
});
return result; return result;
}), }),
checkSlugAvailability: publicProcedure checkSlugAvailability: publicProcedure

View File

@@ -1,99 +0,0 @@
import type { NextApiRequest, NextApiResponse } from "next";
import {
RateLimiterRedis,
RateLimiterMemory,
} from "rate-limiter-flexible";
import { getRedisClient } from "@kan/db/redis";
export interface RateLimitOptions {
points?: number;
duration?: number;
identifier?: (req: NextApiRequest) => string | Promise<string>;
errorMessage?: string;
}
const defaultIdentifier = (req: NextApiRequest): string => {
// Try to identify the IP address of the request
const forwardedFor = req.headers["x-forwarded-for"];
const realIp = req.headers["x-real-ip"];
const cfConnectingIp = req.headers["cf-connecting-ip"];
const ip =
(typeof forwardedFor === "string"
? forwardedFor.split(",")[0]?.trim()
: null) ??
(typeof realIp === "string" ? realIp : null) ??
(typeof cfConnectingIp === "string" ? cfConnectingIp : null) ??
req.socket.remoteAddress ??
"unknown";
return ip;
};
const DEFAULT_OPTIONS = {
points: 100,
duration: 60,
errorMessage: "Too many requests, please try again later.",
identifier: defaultIdentifier,
} as const;
function createRateLimiter(options: RateLimitOptions = {}) {
const redis = getRedisClient();
const points = options.points ?? DEFAULT_OPTIONS.points;
const duration = options.duration ?? DEFAULT_OPTIONS.duration;
// Use Redis if available, otherwise fall back to in-memory storage
if (redis) {
console.log("Using Redis for rate limiting");
return new RateLimiterRedis({
storeClient: redis,
points,
duration,
});
}
console.log("Using in-memory for rate limiting");
return new RateLimiterMemory({
points,
duration,
});
}
export function withRateLimit(
options: RateLimitOptions,
handler: (
req: NextApiRequest,
res: NextApiResponse,
) => Promise<unknown> | unknown,
) {
const rateLimiter = createRateLimiter(options);
const identifier = options.identifier ?? DEFAULT_OPTIONS.identifier;
const errorMessage = options.errorMessage ?? DEFAULT_OPTIONS.errorMessage;
return async (req: NextApiRequest, res: NextApiResponse) => {
try {
const id = await identifier(req);
const key = `ratelimit_${id}`;
await rateLimiter.consume(key);
return await handler(req, res);
} catch (error) {
// rate-limiter-flexible throws an error with msBeforeNext or remainingPoints
// when limit is exceeded. Check for these properties directly.
if (
error &&
typeof error === "object" &&
("msBeforeNext" in error || "remainingPoints" in error)
) {
return res.status(429).json({
message: errorMessage,
});
}
return await handler(req, res);
}
};
}

View File

@@ -1,23 +1,147 @@
import type { Subscription } from "@better-auth/stripe";
import type Stripe from "stripe";
import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
import { stripe } from "@better-auth/stripe";
import { ChatOrPushProviderEnum } from "@novu/api/models/components";
import { betterAuth } from "better-auth"; import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle"; import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { createAuthEndpoint, createAuthMiddleware } from "better-auth/api";
import { apiKey, genericOAuth } from "better-auth/plugins";
import { magicLink } from "better-auth/plugins/magic-link";
import { socialProviderList } from "better-auth/social-providers";
import { env } from "next-runtime-env"; import { env } from "next-runtime-env";
import type { dbClient } from "@kan/db/client"; import type { dbClient } from "@kan/db/client";
import * as memberRepo from "@kan/db/repository/member.repo";
import * as subscriptionRepo from "@kan/db/repository/subscription.repo";
import * as userRepo from "@kan/db/repository/user.repo";
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import * as schema from "@kan/db/schema"; import * as schema from "@kan/db/schema";
import { sendEmail } from "@kan/email"; import { notificationClient, sendEmail } from "@kan/email";
import { createEmailUnsubscribeLink } from "@kan/shared";
import { createStripeClient } from "@kan/stripe";
import { createDatabaseHooks, createMiddlewareHooks } from "./hooks"; export const configuredProviders = socialProviderList.reduce<
import { createPlugins } from "./plugins"; Record<
import { configuredProviders } from "./providers"; string,
{
clientId: string;
clientSecret: string;
appBundleIdentifier?: string;
tenantId?: string;
requireSelectAccount?: boolean;
clientKey?: string;
issuer?: string;
// Google-specific optional hints
hostedDomain?: string;
hd?: string;
}
>
>((acc, provider) => {
const id = process.env[`${provider.toUpperCase()}_CLIENT_ID`];
const secret = process.env[`${provider.toUpperCase()}_CLIENT_SECRET`];
if (id && id.length > 0 && secret && secret.length > 0) {
acc[provider] = { clientId: id, clientSecret: secret };
}
if (
provider === "apple" &&
Object.keys(acc).includes("apple") &&
acc[provider]
) {
const bundleId =
process.env[`${provider.toUpperCase()}_APP_BUNDLE_IDENTIFIER`];
if (bundleId && bundleId.length > 0) {
acc[provider].appBundleIdentifier = bundleId;
}
}
if (
provider === "gitlab" &&
Object.keys(acc).includes("gitlab") &&
acc[provider]
) {
const issuer = process.env[`${provider.toUpperCase()}_ISSUER`];
if (issuer && issuer.length > 0) {
acc[provider].issuer = issuer;
}
}
if (
provider === "microsoft" &&
Object.keys(acc).includes("microsoft") &&
acc[provider]
) {
acc[provider].tenantId = "common";
acc[provider].requireSelectAccount = true;
}
// Add Google domain hint if allowed domains is configured
if (
provider === "google" &&
Object.keys(acc).includes("google") &&
acc[provider]
) {
const allowed = process.env.BETTER_AUTH_ALLOWED_DOMAINS?.split(",")
.map((d) => d.trim().toLowerCase())
.filter(Boolean);
if (allowed && allowed.length > 0) {
// Use the first domain as an authorization hint
acc[provider].hostedDomain = allowed[0];
acc[provider].hd = allowed[0];
}
}
if (
provider === "tiktok" &&
Object.keys(acc).includes("tiktok") &&
acc[provider]
) {
const key = process.env[`${provider.toUpperCase()}_CLIENT_KEY`];
if (key && key.length > 0) {
acc[provider].clientKey = key;
}
}
return acc;
}, {});
export const socialProvidersPlugin = () => ({
id: "social-providers-plugin",
endpoints: {
getSocialProviders: createAuthEndpoint(
"/social-providers",
{
method: "GET",
},
async (ctx) => {
const providers = ctx.context.socialProviders.map((p) =>
p.id.toLowerCase(),
);
// Add OIDC provider if configured
if (
process.env.OIDC_CLIENT_ID &&
process.env.OIDC_CLIENT_SECRET &&
process.env.OIDC_DISCOVERY_URL
) {
providers.push("oidc");
}
return ctx.json(providers);
},
),
},
});
async function downloadImage(url: string): Promise<Buffer> {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Failed to download image: ${response.statusText}`);
}
return Buffer.from(await response.arrayBuffer());
}
export const initAuth = (db: dbClient) => { export const initAuth = (db: dbClient) => {
return betterAuth({ return betterAuth({
secret: env("BETTER_AUTH_SECRET"), secret: process.env.BETTER_AUTH_SECRET!,
baseURL: env("NEXT_PUBLIC_BASE_URL"), baseURL: env("NEXT_PUBLIC_BASE_URL"),
trustedOrigins: env("BETTER_AUTH_TRUSTED_ORIGINS") trustedOrigins: process.env.BETTER_AUTH_TRUSTED_ORIGINS
? [ ? [
env("NEXT_PUBLIC_BASE_URL") ?? "", env("NEXT_PUBLIC_BASE_URL") ?? "",
...(env("BETTER_AUTH_TRUSTED_ORIGINS")?.split(",") ?? []), ...process.env.BETTER_AUTH_TRUSTED_ORIGINS.split(","),
] ]
: [env("NEXT_PUBLIC_BASE_URL") ?? ""], : [env("NEXT_PUBLIC_BASE_URL") ?? ""],
database: drizzleAdapter(db, { database: drizzleAdapter(db, {
@@ -57,9 +181,360 @@ export const initAuth = (db: dbClient) => {
}, },
}, },
}, },
plugins: createPlugins(db), plugins: [
databaseHooks: createDatabaseHooks(db), socialProvidersPlugin(),
hooks: createMiddlewareHooks(db), ...(process.env.NEXT_PUBLIC_KAN_ENV === "cloud"
? [
stripe({
stripeClient: createStripeClient(),
stripeWebhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
createCustomerOnSignUp: true,
subscription: {
enabled: true,
plans: [
{
name: "team",
priceId: process.env.STRIPE_TEAM_PLAN_MONTHLY_PRICE_ID!,
annualDiscountPriceId:
process.env.STRIPE_TEAM_PLAN_YEARLY_PRICE_ID!,
freeTrial: {
days: 14,
onTrialStart: async (subscription) => {
await triggerWorkflow(db, "trial-start", subscription);
},
onTrialEnd: async ({ subscription }) => {
await triggerWorkflow(db, "trial-end", subscription);
},
onTrialExpired: async (subscription) => {
await triggerWorkflow(
db,
"trial-expired",
subscription,
);
},
},
},
{
name: "pro",
priceId: process.env.STRIPE_PRO_PLAN_MONTHLY_PRICE_ID!,
annualDiscountPriceId:
process.env.STRIPE_PRO_PLAN_YEARLY_PRICE_ID!,
freeTrial: {
days: 14,
onTrialStart: async (subscription) => {
await triggerWorkflow(db, "trial-start", subscription);
},
onTrialEnd: async ({ subscription }) => {
await triggerWorkflow(db, "trial-end", subscription);
},
onTrialExpired: async (subscription) => {
await triggerWorkflow(
db,
"trial-expired",
subscription,
);
},
},
},
],
authorizeReference: async (data) => {
const workspace = await workspaceRepo.getByPublicId(
db,
data.referenceId,
);
if (!workspace) {
return Promise.resolve(false);
}
const isUserInWorkspace =
await workspaceRepo.isUserInWorkspace(
db,
data.user.id,
workspace.id,
);
return isUserInWorkspace;
},
getCheckoutSessionParams: () => {
return {
params: {
allow_promotion_codes: true,
},
};
},
onSubscriptionComplete: async ({
subscription,
stripeSubscription,
}) => {
// Set unlimited seats to true for pro plans
if (subscription.plan === "pro") {
await subscriptionRepo.updateByStripeSubscriptionId(
db,
stripeSubscription.id,
{
unlimitedSeats: true,
},
);
console.log(
`Pro subscription ${stripeSubscription.id} activated with unlimited seats`,
);
const workspace = await workspaceRepo.getByPublicId(
db,
subscription.referenceId,
);
if (workspace?.id) {
await memberRepo.unpauseAllMembers(db, workspace.id);
console.log(
`Unpausing all members for workspace ${workspace.id}`,
);
}
}
},
},
}),
]
: []),
apiKey({
enableSessionForAPIKeys: true,
rateLimit: {
enabled: true,
timeWindow: 1000 * 60, // 1 minute
maxRequests: 100, // 100 requests per minute
},
}),
magicLink({
expiresIn: 60 * 60 * 24 * 7, // 7 days
sendMagicLink: async ({ email, url }) => {
if (url.includes("type=invite")) {
await sendEmail(
email,
"Invitation to join workspace",
"JOIN_WORKSPACE",
{
magicLoginUrl: url,
},
);
} else {
await sendEmail(email, "Sign in to kan.bn", "MAGIC_LINK", {
magicLoginUrl: url,
});
}
},
}),
// Generic OIDC provider
...(process.env.OIDC_CLIENT_ID &&
process.env.OIDC_CLIENT_SECRET &&
process.env.OIDC_DISCOVERY_URL
? [
genericOAuth({
config: [
{
providerId: "oidc",
clientId: process.env.OIDC_CLIENT_ID,
clientSecret: process.env.OIDC_CLIENT_SECRET,
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,
};
},
},
],
}),
]
: []),
],
databaseHooks: {
user: {
create: {
async before(user) {
if (env("NEXT_PUBLIC_DISABLE_SIGN_UP")?.toLowerCase() === "true") {
const pendingInvitation = await memberRepo.getByEmailAndStatus(
db,
user.email,
"invited",
);
if (!pendingInvitation) {
return Promise.resolve(false);
}
// Fall through to any additional checks below
}
// Enforce allowed domains (OIDC/social) if configured
const allowed = process.env.BETTER_AUTH_ALLOWED_DOMAINS?.split(",")
.map((d) => d.trim().toLowerCase())
.filter(Boolean);
if (allowed && allowed.length > 0) {
const domain = user.email.split("@")[1]?.toLowerCase();
if (!domain || !allowed.includes(domain)) {
return Promise.resolve(false);
}
}
return Promise.resolve(true);
},
async after(user) {
let avatarKey = user.image;
if (
user.image &&
!user.image.includes(process.env.NEXT_PUBLIC_STORAGE_DOMAIN!)
) {
try {
const credentials =
env("S3_ACCESS_KEY_ID") && env("S3_SECRET_ACCESS_KEY")
? {
accessKeyId: env("S3_ACCESS_KEY_ID")!,
secretAccessKey: env("S3_SECRET_ACCESS_KEY")!,
}
: undefined;
const client = new S3Client({
region: env("S3_REGION") ?? "",
endpoint: env("S3_ENDPOINT") ?? "",
forcePathStyle: env("S3_FORCE_PATH_STYLE") === "true",
credentials,
});
const allowedFileExtensions = ["jpg", "jpeg", "png", "webp"];
const fileExtension =
user.image.split(".").pop()?.split("?")[0] || "jpg";
const key = `${user.id}/avatar.${!allowedFileExtensions.includes(fileExtension) ? "jpg" : fileExtension}`;
const imageBuffer = await downloadImage(user.image);
await client.send(
new PutObjectCommand({
Bucket: env("NEXT_PUBLIC_AVATAR_BUCKET_NAME") ?? "",
Key: key,
Body: imageBuffer,
ContentType: `image/${!allowedFileExtensions.includes(fileExtension) ? "jpeg" : fileExtension}`,
ACL: "public-read",
}),
);
avatarKey = key;
await userRepo.update(db, user.id, {
image: key,
});
} catch (error) {
console.error(error);
}
}
if (notificationClient) {
try {
const [firstName, ...rest] = user.name
.split(" ")
.filter(Boolean);
const lastName = rest.length ? rest.join(" ") : undefined;
const avatarUrl = avatarKey
? `${env("NEXT_PUBLIC_STORAGE_URL")}/${env("NEXT_PUBLIC_AVATAR_BUCKET_NAME")}/${avatarKey}`
: undefined;
const unsubscribeUrl = await createEmailUnsubscribeLink(
user.id,
);
await notificationClient.trigger({
to: {
subscriberId: user.id,
firstName: firstName,
lastName: lastName,
email: user.email,
avatar: avatarUrl,
data: {
emailVerified: user.emailVerified,
stripeCustomerId: user.stripeCustomerId,
createdAt: user.createdAt,
updatedAt: user.updatedAt,
},
},
payload: {
emailUnsubscribeUrl: unsubscribeUrl,
},
workflowId: "user-signup",
});
await notificationClient.subscribers.credentials.update(
{
providerId: ChatOrPushProviderEnum.Discord,
credentials: {
webhookUrl: process.env.DISCORD_WEBHOOK_URL!,
},
integrationIdentifier: "discord",
},
user.id,
);
} catch (error) {
console.error(
"Error adding user to notification client",
error,
);
}
}
},
},
},
},
hooks: {
after: createAuthMiddleware(async (ctx) => {
if (
ctx.path === "/magic-link/verify" &&
(ctx.query?.callbackURL as string | undefined)?.includes(
"type=invite",
)
) {
const userId = ctx.context.newSession?.session.userId;
const callbackURL = ctx.query?.callbackURL as string | undefined;
const memberPublicId = callbackURL?.split("memberPublicId=")[1];
if (userId && memberPublicId) {
const member = await memberRepo.getByPublicId(db, memberPublicId);
if (member?.id) {
await memberRepo.acceptInvite(db, {
memberId: member.id,
userId,
});
}
}
}
}),
},
advanced: { advanced: {
cookiePrefix: "kan", cookiePrefix: "kan",
database: { database: {
@@ -68,3 +543,37 @@ export const initAuth = (db: dbClient) => {
}, },
}); });
}; };
async function triggerWorkflow(
db: dbClient,
workflowId: string,
subscription: Subscription,
cancellationDetails?: Stripe.Subscription.CancellationDetails | null,
) {
try {
if (!subscription.stripeCustomerId || !notificationClient) return;
const user = await userRepo.getByStripeCustomerId(
db,
subscription.stripeCustomerId,
);
if (!user || !notificationClient) return;
const unsubscribeUrl = await createEmailUnsubscribeLink(user.id);
await notificationClient.trigger({
to: {
subscriberId: user.id,
},
payload: {
...subscription,
cancellationDetails,
emailUnsubscribeUrl: unsubscribeUrl,
},
workflowId,
});
} catch (error) {
console.error("Error triggering workflow", error);
}
}

View File

@@ -8,7 +8,7 @@ import {
} from "better-auth/client/plugins"; } from "better-auth/client/plugins";
import { createAuthClient } from "better-auth/react"; import { createAuthClient } from "better-auth/react";
import type { socialProvidersPlugin } from "./providers"; import type { socialProvidersPlugin } from "./auth";
const socialProvidersPluginClient = { const socialProvidersPluginClient = {
id: "social-providers-plugin", id: "social-providers-plugin",

View File

@@ -1,183 +0,0 @@
import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
import { ChatOrPushProviderEnum } from "@novu/api/models/components";
import { createAuthMiddleware } from "better-auth/api";
import { env } from "next-runtime-env";
import type { dbClient } from "@kan/db/client";
import * as memberRepo from "@kan/db/repository/member.repo";
import * as userRepo from "@kan/db/repository/user.repo";
import { notificationClient } from "@kan/email";
import { createEmailUnsubscribeLink } from "@kan/shared";
import { downloadImage } from "./utils";
type BetterAuthUser = {
id: string;
createdAt: Date;
updatedAt: Date;
email: string;
emailVerified: boolean;
name: string;
image?: string | null | undefined;
stripeCustomerId?: string | null | undefined;
} & Record<string, unknown>;
export function createDatabaseHooks(db: dbClient) {
return {
user: {
create: {
async before(user: BetterAuthUser, _context: unknown) {
if (env("NEXT_PUBLIC_DISABLE_SIGN_UP")?.toLowerCase() === "true") {
const pendingInvitation = await memberRepo.getByEmailAndStatus(
db,
user.email,
"invited",
);
if (!pendingInvitation) {
return Promise.resolve(false);
}
// Fall through to any additional checks below
}
// Enforce allowed domains (OIDC/social) if configured
const allowed = process.env.BETTER_AUTH_ALLOWED_DOMAINS?.split(",")
.map((d) => d.trim().toLowerCase())
.filter(Boolean);
if (allowed && allowed.length > 0) {
const domain = user.email.split("@")[1]?.toLowerCase();
if (!domain || !allowed.includes(domain)) {
return Promise.resolve(false);
}
}
return Promise.resolve(true);
},
async after(user: BetterAuthUser, _context: unknown) {
let avatarKey = user.image;
const storageDomain = process.env.NEXT_PUBLIC_STORAGE_DOMAIN;
if (
user.image &&
storageDomain &&
!user.image.includes(storageDomain)
) {
try {
const credentials =
env("S3_ACCESS_KEY_ID") && env("S3_SECRET_ACCESS_KEY")
? {
accessKeyId: env("S3_ACCESS_KEY_ID")!,
secretAccessKey: env("S3_SECRET_ACCESS_KEY")!,
}
: undefined;
const client = new S3Client({
region: env("S3_REGION") ?? "",
endpoint: env("S3_ENDPOINT") ?? "",
forcePathStyle: env("S3_FORCE_PATH_STYLE") === "true",
credentials,
});
const allowedFileExtensions = ["jpg", "jpeg", "png", "webp"];
const fileExtension =
user.image.split(".").pop()?.split("?")[0] ?? "jpg";
const key = `${user.id}/avatar.${!allowedFileExtensions.includes(fileExtension) ? "jpg" : fileExtension}`;
const imageBuffer = await downloadImage(user.image);
await client.send(
new PutObjectCommand({
Bucket: env("NEXT_PUBLIC_AVATAR_BUCKET_NAME") ?? "",
Key: key,
Body: imageBuffer,
ContentType: `image/${!allowedFileExtensions.includes(fileExtension) ? "jpeg" : fileExtension}`,
ACL: "public-read",
}),
);
avatarKey = key;
await userRepo.update(db, user.id, {
image: key,
});
} catch (error) {
console.error(error);
}
}
if (notificationClient) {
try {
const [firstName, ...rest] = (user.name || "")
.split(" ")
.filter(Boolean);
const lastName = rest.length ? rest.join(" ") : undefined;
const avatarUrl = avatarKey
? `${env("NEXT_PUBLIC_STORAGE_URL")}/${env("NEXT_PUBLIC_AVATAR_BUCKET_NAME")}/${avatarKey}`
: undefined;
const unsubscribeUrl = await createEmailUnsubscribeLink(user.id);
await notificationClient.trigger({
to: {
subscriberId: user.id,
firstName: firstName,
lastName: lastName,
email: user.email,
avatar: avatarUrl,
data: {
emailVerified: user.emailVerified,
stripeCustomerId: user.stripeCustomerId,
createdAt: user.createdAt,
updatedAt: user.updatedAt,
},
},
payload: {
emailUnsubscribeUrl: unsubscribeUrl,
},
workflowId: "user-signup",
});
await notificationClient.subscribers.credentials.update(
{
providerId: ChatOrPushProviderEnum.Discord,
credentials: {
webhookUrl: env("DISCORD_WEBHOOK_URL"),
},
integrationIdentifier: "discord",
},
user.id,
);
} catch (error) {
console.error("Error adding user to notification client", error);
}
}
},
},
},
};
}
export function createMiddlewareHooks(db: dbClient) {
return {
after: createAuthMiddleware(async (ctx) => {
if (
ctx.path === "/magic-link/verify" &&
(ctx.query?.callbackURL as string | undefined)?.includes("type=invite")
) {
const userId = ctx.context.newSession?.session.userId;
const callbackURL = ctx.query?.callbackURL as string | undefined;
const memberPublicId = callbackURL?.split("memberPublicId=")[1];
if (userId && memberPublicId) {
const member = await memberRepo.getByPublicId(db, memberPublicId);
if (member?.id) {
await memberRepo.acceptInvite(db, {
memberId: member.id,
userId,
});
}
}
}
}),
};
}

View File

@@ -1,225 +0,0 @@
import { stripe } from "@better-auth/stripe";
import { apiKey, genericOAuth } from "better-auth/plugins";
import { magicLink } from "better-auth/plugins/magic-link";
import type { dbClient } from "@kan/db/client";
import * as memberRepo from "@kan/db/repository/member.repo";
import * as subscriptionRepo from "@kan/db/repository/subscription.repo";
import * as workspaceRepo from "@kan/db/repository/workspace.repo";
import { sendEmail } from "@kan/email";
import { createStripeClient } from "@kan/stripe";
import { socialProvidersPlugin } from "./providers";
import { triggerWorkflow } from "./utils";
export function createPlugins(db: dbClient) {
return [
socialProvidersPlugin(),
...(process.env.NEXT_PUBLIC_KAN_ENV === "cloud"
? [
stripe({
stripeClient: createStripeClient(),
stripeWebhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
createCustomerOnSignUp: true,
subscription: {
enabled: true,
plans: [
{
name: "team",
priceId: process.env.STRIPE_TEAM_PLAN_MONTHLY_PRICE_ID!,
annualDiscountPriceId:
process.env.STRIPE_TEAM_PLAN_YEARLY_PRICE_ID!,
freeTrial: {
days: 14,
onTrialStart: async (subscription) => {
await triggerWorkflow(db, "trial-start", subscription);
},
onTrialEnd: async ({ subscription }) => {
await triggerWorkflow(db, "trial-end", subscription);
},
onTrialExpired: async (subscription) => {
await triggerWorkflow(db, "trial-expired", subscription);
},
},
},
{
name: "pro",
priceId: process.env.STRIPE_PRO_PLAN_MONTHLY_PRICE_ID!,
annualDiscountPriceId:
process.env.STRIPE_PRO_PLAN_YEARLY_PRICE_ID!,
freeTrial: {
days: 14,
onTrialStart: async (subscription) => {
await triggerWorkflow(db, "trial-start", subscription);
},
onTrialEnd: async ({ subscription }) => {
await triggerWorkflow(db, "trial-end", subscription);
},
onTrialExpired: async (subscription) => {
await triggerWorkflow(db, "trial-expired", subscription);
},
},
},
],
authorizeReference: async (data) => {
const workspace = await workspaceRepo.getByPublicId(
db,
data.referenceId,
);
if (!workspace) {
return Promise.resolve(false);
}
const isUserInWorkspace = await workspaceRepo.isUserInWorkspace(
db,
data.user.id,
workspace.id,
);
return isUserInWorkspace;
},
getCheckoutSessionParams: () => {
return {
params: {
allow_promotion_codes: true,
},
};
},
onSubscriptionComplete: async ({
subscription,
stripeSubscription,
}) => {
// Set unlimited seats to true for pro plans
if (subscription.plan === "pro") {
await subscriptionRepo.updateByStripeSubscriptionId(
db,
stripeSubscription.id,
{
unlimitedSeats: true,
},
);
console.log(
`Pro subscription ${stripeSubscription.id} activated with unlimited seats`,
);
const workspace = await workspaceRepo.getByPublicId(
db,
subscription.referenceId,
);
if (workspace?.id) {
await memberRepo.unpauseAllMembers(db, workspace.id);
}
}
},
onSubscriptionCancel: async ({
subscription,
cancellationDetails,
}) => {
await triggerWorkflow(
db,
"subscription-canceled",
subscription,
cancellationDetails,
);
// for cancelled subscriptions, we need to pause all members and set their workspace plan to free
const workspace = await workspaceRepo.getByPublicId(
db,
subscription.referenceId,
);
if (workspace?.id) {
await memberRepo.pauseAllMembers(db, workspace.id);
await workspaceRepo.update(db, subscription.referenceId, {
plan: "free",
});
}
},
onSubscriptionUpdate: async ({ subscription }) => {
await triggerWorkflow(db, "subscription-updated", subscription);
},
},
}),
]
: []),
apiKey({
enableSessionForAPIKeys: true,
rateLimit: {
enabled: true,
timeWindow: 1000 * 60, // 1 minute
maxRequests: 100, // 100 requests per minute
},
}),
magicLink({
expiresIn: 60 * 60 * 24 * 7, // 7 days
sendMagicLink: async ({ email, url }) => {
if (url.includes("type=invite")) {
await sendEmail(
email,
"Invitation to join workspace",
"JOIN_WORKSPACE",
{
magicLoginUrl: url,
},
);
} else {
await sendEmail(email, "Sign in to kan.bn", "MAGIC_LINK", {
magicLoginUrl: url,
});
}
},
}),
// Generic OIDC provider
...(process.env.OIDC_CLIENT_ID &&
process.env.OIDC_CLIENT_SECRET &&
process.env.OIDC_DISCOVERY_URL
? [
genericOAuth({
config: [
{
providerId: "oidc",
clientId: process.env.OIDC_CLIENT_ID,
clientSecret: process.env.OIDC_CLIENT_SECRET,
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,
};
},
},
],
}),
]
: []),
];
}

View File

@@ -1,107 +0,0 @@
import { createAuthEndpoint } from "better-auth/api";
import { socialProviderList } from "better-auth/social-providers";
export const configuredProviders = socialProviderList.reduce<
Record<
string,
{
clientId: string;
clientSecret: string;
appBundleIdentifier?: string;
tenantId?: string;
requireSelectAccount?: boolean;
clientKey?: string;
issuer?: string;
// Google-specific optional hints
hostedDomain?: string;
hd?: string;
}
>
>((acc, provider) => {
const id = process.env[`${provider.toUpperCase()}_CLIENT_ID`];
const secret = process.env[`${provider.toUpperCase()}_CLIENT_SECRET`];
if (id && id.length > 0 && secret && secret.length > 0) {
acc[provider] = { clientId: id, clientSecret: secret };
}
if (
provider === "apple" &&
Object.keys(acc).includes("apple") &&
acc[provider]
) {
const bundleId =
process.env[`${provider.toUpperCase()}_APP_BUNDLE_IDENTIFIER`];
if (bundleId && bundleId.length > 0) {
acc[provider].appBundleIdentifier = bundleId;
}
}
if (
provider === "gitlab" &&
Object.keys(acc).includes("gitlab") &&
acc[provider]
) {
const issuer = process.env[`${provider.toUpperCase()}_ISSUER`];
if (issuer && issuer.length > 0) {
acc[provider].issuer = issuer;
}
}
if (
provider === "microsoft" &&
Object.keys(acc).includes("microsoft") &&
acc[provider]
) {
acc[provider].tenantId = "common";
acc[provider].requireSelectAccount = true;
}
// Add Google domain hint if allowed domains is configured
if (
provider === "google" &&
Object.keys(acc).includes("google") &&
acc[provider]
) {
const allowed = process.env.BETTER_AUTH_ALLOWED_DOMAINS?.split(",")
.map((d) => d.trim().toLowerCase())
.filter(Boolean);
if (allowed && allowed.length > 0) {
// Use the first domain as an authorization hint
acc[provider].hostedDomain = allowed[0];
acc[provider].hd = allowed[0];
}
}
if (
provider === "tiktok" &&
Object.keys(acc).includes("tiktok") &&
acc[provider]
) {
const key = process.env[`${provider.toUpperCase()}_CLIENT_KEY`];
if (key && key.length > 0) {
acc[provider].clientKey = key;
}
}
return acc;
}, {});
export const socialProvidersPlugin = () => ({
id: "social-providers-plugin",
endpoints: {
getSocialProviders: createAuthEndpoint(
"/social-providers",
{
method: "GET",
},
async (ctx) => {
const providers = ctx.context.socialProviders.map((p) =>
p.id.toLowerCase(),
);
// Add OIDC provider if configured
if (
process.env.OIDC_CLIENT_ID &&
process.env.OIDC_CLIENT_SECRET &&
process.env.OIDC_DISCOVERY_URL
) {
providers.push("oidc");
}
return ctx.json(providers);
},
),
},
});

View File

@@ -1,49 +0,0 @@
import type { Subscription } from "@better-auth/stripe";
import type Stripe from "stripe";
import type { dbClient } from "@kan/db/client";
import * as userRepo from "@kan/db/repository/user.repo";
import { notificationClient } from "@kan/email";
import { createEmailUnsubscribeLink } from "@kan/shared";
export async function downloadImage(url: string): Promise<Buffer> {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Failed to download image: ${response.statusText}`);
}
return Buffer.from(await response.arrayBuffer());
}
export async function triggerWorkflow(
db: dbClient,
workflowId: string,
subscription: Subscription,
cancellationDetails?: Stripe.Subscription.CancellationDetails | null,
) {
try {
if (!subscription.stripeCustomerId || !notificationClient) return;
const user = await userRepo.getByStripeCustomerId(
db,
subscription.stripeCustomerId,
);
if (!user || !notificationClient) return;
const unsubscribeUrl = await createEmailUnsubscribeLink(user.id);
await notificationClient.trigger({
to: {
subscriberId: user.id,
},
payload: {
...subscription,
cancellationDetails,
emailUnsubscribeUrl: unsubscribeUrl,
},
workflowId,
});
} catch (error) {
console.error("Error triggering workflow", error);
}
}

View File

@@ -1 +0,0 @@
ALTER TABLE "workspace" ADD COLUMN "showEmailsToMembers" boolean NOT NULL DEFAULT true;

View File

@@ -155,13 +155,6 @@
"when": 1767045713686, "when": 1767045713686,
"tag": "20251229220153_UpdateCardTitleFromVarcharToText", "tag": "20251229220153_UpdateCardTitleFromVarcharToText",
"breakpoints": true "breakpoints": true
},
{
"idx": 22,
"version": "7",
"when": 1768858977000,
"tag": "20260119164257_AddShowEmailsToMembersToWorkspace",
"breakpoints": true
} }
] ]
} }

View File

@@ -23,10 +23,6 @@
"./repository/*": { "./repository/*": {
"types": "./dist/repository/*.d.ts", "types": "./dist/repository/*.d.ts",
"default": "./src/repository/*.ts" "default": "./src/repository/*.ts"
},
"./redis": {
"types": "./dist/redis.d.ts",
"default": "./src/redis.ts"
} }
}, },
"license": "GPL-3.0", "license": "GPL-3.0",
@@ -47,7 +43,6 @@
"@kan/shared": "workspace:^", "@kan/shared": "workspace:^",
"drizzle-orm": "^0.42.0", "drizzle-orm": "^0.42.0",
"drizzle-zod": "^0.5.1", "drizzle-zod": "^0.5.1",
"ioredis": "^5.9.2",
"pg": "^8.11.3", "pg": "^8.11.3",
"uuid": "^11.1.0", "uuid": "^11.1.0",
"zod": "catalog:" "zod": "catalog:"

View File

@@ -1,31 +0,0 @@
import Redis from "ioredis";
let redisClient: Redis | null = null;
export function getRedisClient(): Redis | null {
if (redisClient) {
return redisClient;
}
const redisUrl = process.env.REDIS_URL;
if (!redisUrl) {
return null;
}
redisClient = new Redis(redisUrl, {
maxRetriesPerRequest: 3,
enableReadyCheck: true,
lazyConnect: true,
});
return redisClient;
}
export async function closeRedisClient(): Promise<void> {
if (redisClient) {
await redisClient.quit();
redisClient = null;
}
}

View File

@@ -169,7 +169,6 @@ export const getPaginatedActivities = async (
id: true, id: true,
name: true, name: true,
email: true, email: true,
image: true,
}, },
}, },
}, },
@@ -179,7 +178,6 @@ export const getPaginatedActivities = async (
id: true, id: true,
name: true, name: true,
email: true, email: true,
image: true,
}, },
}, },
comment: { comment: {

View File

@@ -121,15 +121,3 @@ export const unpauseAllMembers = async (db: dbClient, workspaceId: number) => {
), ),
); );
}; };
export const pauseAllMembers = async (db: dbClient, workspaceId: number) => {
await db
.update(workspaceMembers)
.set({ status: "paused" })
.where(
and(
eq(workspaceMembers.workspaceId, workspaceId),
eq(workspaceMembers.status, "active"),
),
);
};

View File

@@ -82,7 +82,6 @@ export const update = async (
slug?: string; slug?: string;
plan?: "free" | "pro" | "enterprise"; plan?: "free" | "pro" | "enterprise";
description?: string; description?: string;
showEmailsToMembers?: boolean;
}, },
) => { ) => {
const [result] = await db const [result] = await db
@@ -92,7 +91,6 @@ export const update = async (
slug: workspaceInput.slug, slug: workspaceInput.slug,
plan: workspaceInput.plan, plan: workspaceInput.plan,
description: workspaceInput.description, description: workspaceInput.description,
showEmailsToMembers: workspaceInput.showEmailsToMembers,
}) })
.where(eq(workspaces.publicId, workspacePublicId)) .where(eq(workspaces.publicId, workspacePublicId))
.returning({ .returning({
@@ -102,7 +100,6 @@ export const update = async (
slug: workspaces.slug, slug: workspaces.slug,
description: workspaces.description, description: workspaces.description,
plan: workspaces.plan, plan: workspaces.plan,
showEmailsToMembers: workspaces.showEmailsToMembers,
}); });
return result; return result;
@@ -142,7 +139,6 @@ export const getByPublicIdWithMembers = (
columns: { columns: {
id: true, id: true,
publicId: true, publicId: true,
showEmailsToMembers: true,
}, },
with: { with: {
members: { members: {

View File

@@ -43,7 +43,6 @@ export const workspaces = pgTable("workspace", {
description: text("description"), description: text("description"),
slug: varchar("slug", { length: 255 }).notNull().unique(), slug: varchar("slug", { length: 255 }).notNull().unique(),
plan: workspacePlanEnum("plan").notNull().default("free"), plan: workspacePlanEnum("plan").notNull().default("free"),
showEmailsToMembers: boolean("showEmailsToMembers").notNull().default(true),
createdBy: uuid("createdBy").references(() => users.id, { createdBy: uuid("createdBy").references(() => users.id, {
onDelete: "set null", onDelete: "set null",
}), }),

1002
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -114,7 +114,6 @@
"NEXT_PUBLIC_AVATAR_BUCKET_NAME", "NEXT_PUBLIC_AVATAR_BUCKET_NAME",
"NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME", "NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME",
"NEXT_PUBLIC_ALLOW_CREDENTIALS", "NEXT_PUBLIC_ALLOW_CREDENTIALS",
"NEXT_API_BODY_SIZE_LIMIT",
"NEXT_PUBLIC_DISABLE_SIGN_UP", "NEXT_PUBLIC_DISABLE_SIGN_UP",
"NEXT_PUBLIC_USE_STANDALONE_OUTPUT", "NEXT_PUBLIC_USE_STANDALONE_OUTPUT",
"S3_REGION", "S3_REGION",
@@ -126,8 +125,7 @@
"BETTER_AUTH_SECRET", "BETTER_AUTH_SECRET",
"BETTER_AUTH_TRUSTED_ORIGINS", "BETTER_AUTH_TRUSTED_ORIGINS",
"NOVU_API_KEY", "NOVU_API_KEY",
"EMAIL_UNSUBSCRIBE_SECRET", "EMAIL_UNSUBSCRIBE_SECRET"
"REDIS_URL"
], ],
"globalPassThroughEnv": [ "globalPassThroughEnv": [
"NODE_ENV", "NODE_ENV",