Compare commits
10 Commits
cloud/novu
...
feat/searc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3636676913 | ||
|
|
9d9b5ed7d1 | ||
|
|
e526ad3bda | ||
|
|
962aba8ccf | ||
|
|
c75dcb2f20 | ||
|
|
f8475b77f1 | ||
|
|
bd691017ad | ||
|
|
468bd8afec | ||
|
|
6904bce96b | ||
|
|
e07a462184 |
@@ -235,6 +235,7 @@ checksums:
|
||||
Important/singular: 4cf0e8fc8e4e7c5c9b9458059a172a2b
|
||||
Importing%20from%20Trello/singular: 1e3a46fb9bd8ce8c7d632f9555b5bd7c
|
||||
Importing%20your%20Trello%20boards%20into%20Kan%20is%20easy.%20You%20can%20follow%20our%20step-by-step%20guide%20%3C0%3Ehere%3C%2F0%3E./singular: ca88dc22801fef08fee1ecfb1bf6914e
|
||||
in/singular: 1f06ad6763244d5e9927853e65cc6274
|
||||
In%20Progress/singular: 3de9afebcb9d4ce8ac42e14995f79ffd
|
||||
Individuals/singular: 83bfc81f20e60556c44ec80c7d0603ec
|
||||
Integrations/singular: 0ccce343287704cd90150c32e2fcad36
|
||||
@@ -244,6 +245,7 @@ checksums:
|
||||
Invite/singular: 181884cea804cbde665f160811ee7ad0
|
||||
Invite%20link%20copied/singular: 4046f23a78e1cd5166671c3fb8a7ea6e
|
||||
Invite%20link%20copied%20to%20clipboard/singular: 6fc055a0ea0ed1aa58c5e0c502efe17f
|
||||
Invite%20links%20require%20a%20Team%20or%20Pro%20subscription.%20Please%20upgrade%20your%20workspace./singular: 18db646fc55f99789572c8df0539ee69
|
||||
Invite%20member/singular: ade922db1be6b26bc979565ce5de2bc7
|
||||
Inviting%20members%20requires%20a%20Team%20Plan.%20You'll%20be%20redirected%20to%20upgrade%20your%20workspace./singular: 03eeed2d715e770259f722ba48a61ab3
|
||||
Join%20workspace/singular: f5d035df672b05abd760bd022309c719
|
||||
@@ -299,6 +301,7 @@ checksums:
|
||||
No%20boards%20found/singular: e044088d2c51b6bdf660fafa86ee1e17
|
||||
No%20credit%20card%20required/singular: 2090aa4171dc0b60735069f89b592883
|
||||
No%20lists/singular: cedf633d99c77ff4356e089f2d98c0a6
|
||||
No%20results%20found%20for%20%22%7BdebouncedQuery%7D%22./singular: 5db6294712528cd897b15ae36f4fd834
|
||||
Offer/singular: 82b4e0c9a3f5b4bd93590847de7c32a1
|
||||
Onboarding/singular: 52b23f9c62ff199d4c09920e7641829e
|
||||
Once%20you%20delete%20your%20account%2C%20there%20is%20no%20going%20back.%20This%20action%20cannot%20be%20undone./singular: 9cf7aa6ef30890e5124e266c081bae1c
|
||||
@@ -358,6 +361,7 @@ checksums:
|
||||
Save/singular: f7a2929f33bc420195e59ac5a8bcd454
|
||||
Save%20time%20with%20reusable%20board%20templates./singular: d0f2d7d0fd682ceaf4ca12c6353fd75a
|
||||
Screening/singular: 0327bfb25db87bdacf00d4dc297f8b26
|
||||
Search%20boards%20and%20cards.../singular: 137017b2b3e885c4894ca8c899af5bc2
|
||||
Select%20all/singular: eedc7cdb02de467c15dc418a066a77f2
|
||||
Select%20source/singular: c7b0ec447415ff62856803a4d7838bd6
|
||||
Self%20Host/singular: 43fbce2027548b712002e489a20a621a
|
||||
@@ -383,6 +387,7 @@ checksums:
|
||||
Social%20Media/singular: 2227508afb0d38a027e323207e47d4a2
|
||||
Software%20Development/singular: 67659097ef6bcb194839858b2c4f3a3c
|
||||
Star%20on%20Github/singular: e5cb0428f1ac6485688f120d78742875
|
||||
Subscription%20Required/singular: 05f2b4abfc36def17756a6969983cf86
|
||||
Success/singular: c43827becada6750f7a25890905f38b9
|
||||
Supercharge%20your%20workspace%20for%20just%20%2429%2Fmonth.%20Here's%20what%20you'll%20get%3A/singular: 21af8119141afcce5f12da489f34db6a
|
||||
Support/singular: 55aab5fd0f31a9cb055a2edeeedfaf63
|
||||
|
||||
193
apps/web/src/components/CommandPallette.tsx
Normal file
193
apps/web/src/components/CommandPallette.tsx
Normal file
@@ -0,0 +1,193 @@
|
||||
import { useRouter } from "next/router";
|
||||
import {
|
||||
Combobox,
|
||||
ComboboxInput,
|
||||
ComboboxOption,
|
||||
ComboboxOptions,
|
||||
Dialog,
|
||||
DialogBackdrop,
|
||||
DialogPanel,
|
||||
} from "@headlessui/react";
|
||||
import { t } from "@lingui/macro";
|
||||
import { useState } from "react";
|
||||
import { HiDocumentText, HiFolder, HiMagnifyingGlass } from "react-icons/hi2";
|
||||
|
||||
import { useDebounce } from "~/hooks/useDebounce";
|
||||
import { useWorkspace } from "~/providers/workspace";
|
||||
import { api } from "~/utils/api";
|
||||
|
||||
type SearchResult =
|
||||
| {
|
||||
publicId: string;
|
||||
title: string;
|
||||
description: string | null;
|
||||
slug: string;
|
||||
updatedAt: Date | null;
|
||||
createdAt: Date;
|
||||
type: "board";
|
||||
}
|
||||
| {
|
||||
publicId: string;
|
||||
title: string;
|
||||
description: string | null;
|
||||
boardPublicId: string;
|
||||
boardName: string;
|
||||
listName: string;
|
||||
updatedAt: Date | null;
|
||||
createdAt: Date;
|
||||
type: "card";
|
||||
};
|
||||
|
||||
export default function CommandPallette({
|
||||
isOpen,
|
||||
onClose,
|
||||
}: {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
}) {
|
||||
const [query, setQuery] = useState("");
|
||||
const { workspace } = useWorkspace();
|
||||
const router = useRouter();
|
||||
|
||||
// Debounce to avoid too many reqs
|
||||
const [debouncedQuery] = useDebounce(query, 300);
|
||||
|
||||
const {
|
||||
data: searchResults,
|
||||
isLoading,
|
||||
isFetched,
|
||||
isPlaceholderData,
|
||||
} = api.workspace.search.useQuery(
|
||||
{
|
||||
workspacePublicId: workspace.publicId,
|
||||
query: debouncedQuery,
|
||||
},
|
||||
{
|
||||
enabled: Boolean(workspace.publicId && debouncedQuery.trim().length > 0),
|
||||
placeholderData: (previousData) => previousData,
|
||||
},
|
||||
);
|
||||
|
||||
// Clear results when query is empty, otherwise show search results
|
||||
const results =
|
||||
debouncedQuery.trim().length === 0
|
||||
? []
|
||||
: ((searchResults ?? []) as SearchResult[]);
|
||||
|
||||
const hasSearched = Boolean(debouncedQuery.trim().length > 0);
|
||||
|
||||
return (
|
||||
<Dialog
|
||||
className="relative z-50"
|
||||
open={isOpen}
|
||||
onClose={() => {
|
||||
onClose();
|
||||
setQuery("");
|
||||
}}
|
||||
>
|
||||
<DialogBackdrop
|
||||
transition
|
||||
className="data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in fixed inset-0 bg-light-50 bg-opacity-40 transition-opacity dark:bg-dark-50 dark:bg-opacity-40"
|
||||
/>
|
||||
|
||||
<div className="fixed inset-0 z-50 w-screen overflow-y-auto">
|
||||
<div className="flex min-h-full items-start justify-center p-4 text-center sm:items-start sm:p-0">
|
||||
<DialogPanel
|
||||
transition
|
||||
className="data-closed:opacity-0 data-closed:translate-y-4 data-closed:sm:translate-y-0 data-closed:sm:scale-95 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in relative mt-[25vh] w-full max-w-[550px] transform divide-y divide-gray-100 overflow-hidden rounded-lg border border-light-600 bg-white/90 shadow-3xl-light backdrop-blur-[6px] transition-all dark:divide-white/10 dark:border-dark-600 dark:bg-dark-100/90 dark:shadow-3xl-dark"
|
||||
>
|
||||
<Combobox>
|
||||
<div className="grid grid-cols-1">
|
||||
<ComboboxInput
|
||||
autoFocus
|
||||
className="col-start-1 row-start-1 h-12 w-full border-0 bg-transparent pl-11 pr-4 text-sm text-light-900 placeholder:text-light-700 focus:outline-none focus:ring-0 dark:text-dark-900 dark:placeholder:text-dark-700"
|
||||
placeholder={t`Search boards and cards...`}
|
||||
value={query}
|
||||
onChange={(event) => setQuery(event.target.value)}
|
||||
onKeyDown={(event) => {
|
||||
if (event.key === "Enter" && results.length > 0) {
|
||||
event.preventDefault();
|
||||
|
||||
// Find the active option or fallback to first option
|
||||
const targetOption =
|
||||
document.querySelector(
|
||||
'[data-headlessui-state*="active"][role="option"]',
|
||||
) ?? document.querySelector('[role="option"]');
|
||||
|
||||
if (targetOption) {
|
||||
(targetOption as HTMLElement).click();
|
||||
}
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<HiMagnifyingGlass
|
||||
className="pointer-events-none col-start-1 row-start-1 ml-4 size-5 self-center text-light-700 dark:text-dark-700"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</div>
|
||||
|
||||
{results.length > 0 && (
|
||||
<ComboboxOptions
|
||||
static
|
||||
className={`max-h-72 scroll-py-2 overflow-y-auto py-2 ${
|
||||
isPlaceholderData ? "opacity-75" : ""
|
||||
}`}
|
||||
>
|
||||
{results.map((result) => {
|
||||
const url =
|
||||
result.type === "board"
|
||||
? `/boards/${result.publicId}`
|
||||
: `/cards/${result.publicId}`;
|
||||
|
||||
return (
|
||||
<ComboboxOption
|
||||
key={`${result.type}-${result.publicId}`}
|
||||
value={result}
|
||||
className="cursor-pointer select-none px-4 py-3 data-[focus]:bg-light-200 hover:bg-light-200 focus:outline-none dark:data-[focus]:bg-dark-200 dark:hover:bg-dark-200"
|
||||
onClick={() => {
|
||||
console.log("clicked", url);
|
||||
void router.push(url);
|
||||
onClose();
|
||||
setQuery("");
|
||||
}}
|
||||
>
|
||||
<div className="flex items-start gap-3">
|
||||
<div className="mt-0.5 flex-shrink-0">
|
||||
{result.type === "board" ? (
|
||||
<HiFolder className="h-4 w-4 text-light-600 dark:text-dark-600" />
|
||||
) : (
|
||||
<HiDocumentText className="h-4 w-4 text-light-600 dark:text-dark-600" />
|
||||
)}
|
||||
</div>
|
||||
<div className="min-w-0 flex-1 text-left">
|
||||
<div className="truncate text-sm font-bold text-light-900 dark:text-dark-900">
|
||||
{result.title}
|
||||
</div>
|
||||
{result.type === "card" && (
|
||||
<div className="truncate text-xs text-light-700 dark:text-dark-700">
|
||||
{`${t`in`} ${result.boardName} → ${result.listName}`}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</ComboboxOption>
|
||||
);
|
||||
})}
|
||||
</ComboboxOptions>
|
||||
)}
|
||||
|
||||
{hasSearched &&
|
||||
!isLoading &&
|
||||
searchResults !== undefined &&
|
||||
results.length === 0 && (
|
||||
<div className="p-4 text-sm text-light-950 dark:text-dark-950">
|
||||
{t`No results found for "${debouncedQuery}".`}
|
||||
</div>
|
||||
)}
|
||||
</Combobox>
|
||||
</DialogPanel>
|
||||
</div>
|
||||
</div>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
import { Menu, Transition } from "@headlessui/react";
|
||||
import { Button, Menu, Transition } from "@headlessui/react";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { Fragment } from "react";
|
||||
import { HiCheck } from "react-icons/hi2";
|
||||
import { Fragment, useEffect, useState } from "react";
|
||||
import { HiCheck, HiMagnifyingGlass } from "react-icons/hi2";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { useWorkspace } from "~/providers/workspace";
|
||||
import CommandPallette from "./CommandPallette";
|
||||
|
||||
export default function WorkspaceMenu({
|
||||
isCollapsed = false,
|
||||
@@ -15,110 +16,143 @@ export default function WorkspaceMenu({
|
||||
const { workspace, isLoading, availableWorkspaces, switchWorkspace } =
|
||||
useWorkspace();
|
||||
const { openModal } = useModal();
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const handleKeyDown = (event: KeyboardEvent) => {
|
||||
if ((event.metaKey || event.ctrlKey) && event.key === "k") {
|
||||
event.preventDefault();
|
||||
setIsOpen(true);
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener("keydown", handleKeyDown);
|
||||
return () => document.removeEventListener("keydown", handleKeyDown);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<Menu as="div" className="relative inline-block w-full pb-3 text-left">
|
||||
<div>
|
||||
{isLoading ? (
|
||||
<div className={twMerge("mb-1 flex", isCollapsed && "md:p-1.5")}>
|
||||
<div className="h-6 w-6 animate-pulse rounded-md bg-light-200 dark:bg-dark-200" />
|
||||
<div
|
||||
className={twMerge(
|
||||
"ml-2 h-6 w-[150px] animate-pulse rounded-md bg-light-200 dark:bg-dark-200",
|
||||
isCollapsed && "md:hidden",
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<Menu.Button
|
||||
className={twMerge(
|
||||
"mb-1 flex h-[34px] w-full items-center rounded-md p-1.5 hover:bg-light-200 dark:hover:bg-dark-200",
|
||||
isCollapsed && "md:mb-1.5 md:h-9 md:p-1",
|
||||
)}
|
||||
title={isCollapsed ? workspace.name : undefined}
|
||||
>
|
||||
<span className="inline-flex h-6 w-6 items-center justify-center rounded-md bg-indigo-700">
|
||||
<span className="text-xs font-bold leading-none text-white">
|
||||
{workspace.name.charAt(0).toUpperCase()}
|
||||
</span>
|
||||
</span>
|
||||
<span
|
||||
className={twMerge(
|
||||
"ml-2 truncate text-sm font-bold text-neutral-900 dark:text-dark-1000",
|
||||
isCollapsed && "md:hidden",
|
||||
)}
|
||||
>
|
||||
{workspace.name}
|
||||
</span>
|
||||
{workspace.plan === "pro" && (
|
||||
<span
|
||||
<>
|
||||
<CommandPallette isOpen={isOpen} onClose={() => setIsOpen(false)} />
|
||||
<Menu as="div" className="relative inline-block w-full pb-3 text-left">
|
||||
<div>
|
||||
{isLoading ? (
|
||||
<div className={twMerge("mb-1 flex", isCollapsed && "md:p-1.5")}>
|
||||
<div className="h-6 w-6 animate-pulse rounded-md bg-light-200 dark:bg-dark-200" />
|
||||
<div
|
||||
className={twMerge(
|
||||
"ml-2 inline-flex items-center rounded-md bg-indigo-100 px-2 py-1 text-[10px] font-medium text-indigo-700",
|
||||
"ml-2 h-6 w-[150px] animate-pulse rounded-md bg-light-200 dark:bg-dark-200",
|
||||
isCollapsed && "md:hidden",
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<div
|
||||
className={twMerge(
|
||||
"flex items-center gap-1",
|
||||
isCollapsed && "md:flex-col-reverse md:items-stretch",
|
||||
)}
|
||||
>
|
||||
<Menu.Button
|
||||
className={twMerge(
|
||||
"mb-1 flex h-[34px] flex-1 items-center rounded-md p-1.5 hover:bg-light-200 dark:hover:bg-dark-200",
|
||||
isCollapsed &&
|
||||
"md:mb-1.5 md:h-9 md:w-9 md:flex-none md:justify-center md:p-0",
|
||||
)}
|
||||
title={isCollapsed ? workspace.name : undefined}
|
||||
>
|
||||
Pro
|
||||
</span>
|
||||
)}
|
||||
</Menu.Button>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<Transition
|
||||
as={Fragment}
|
||||
enter="transition ease-out duration-100"
|
||||
enterFrom="transform opacity-0 scale-95"
|
||||
enterTo="transform opacity-100 scale-100"
|
||||
leave="transition ease-in duration-75"
|
||||
leaveFrom="transform opacity-100 scale-100"
|
||||
leaveTo="transform opacity-0 scale-95"
|
||||
>
|
||||
<Menu.Items
|
||||
className={twMerge(
|
||||
"absolute left-0 z-10 origin-top-left rounded-md border border-light-600 bg-light-50 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none dark:border-dark-600 dark:bg-dark-300",
|
||||
isCollapsed ? "w-48" : "w-full",
|
||||
)}
|
||||
>
|
||||
<div className="p-1">
|
||||
{availableWorkspaces.map((availableWorkspace) => (
|
||||
<div key={availableWorkspace.publicId} className="flex">
|
||||
<Menu.Item>
|
||||
<button
|
||||
onClick={() => switchWorkspace(availableWorkspace)}
|
||||
className="flex w-full items-center justify-between rounded-[5px] px-3 py-2 text-left text-sm text-neutral-900 hover:bg-light-200 dark:text-dark-1000 dark:hover:bg-dark-400"
|
||||
>
|
||||
<div className="flex min-w-0 flex-1 items-center">
|
||||
<span className="inline-flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-[5px] bg-indigo-700">
|
||||
<span className="text-xs font-medium leading-none text-white">
|
||||
{availableWorkspace.name.charAt(0).toUpperCase()}
|
||||
</span>
|
||||
</span>
|
||||
<span className="ml-2 truncate text-xs font-medium">
|
||||
{availableWorkspace.name}
|
||||
</span>
|
||||
</div>
|
||||
{workspace.publicId === availableWorkspace.publicId && (
|
||||
<span>
|
||||
<HiCheck className="h-4 w-4" aria-hidden="true" />
|
||||
</span>
|
||||
<span className="inline-flex h-6 w-6 items-center justify-center rounded-md bg-indigo-700">
|
||||
<span className="text-xs font-bold leading-none text-white">
|
||||
{workspace.name.charAt(0).toUpperCase()}
|
||||
</span>
|
||||
</span>
|
||||
<span
|
||||
className={twMerge(
|
||||
"ml-2 truncate text-sm font-bold text-neutral-900 dark:text-dark-1000",
|
||||
isCollapsed && "md:hidden",
|
||||
)}
|
||||
>
|
||||
{workspace.name}
|
||||
</span>
|
||||
{workspace.plan === "pro" && (
|
||||
<span
|
||||
className={twMerge(
|
||||
"ml-2 inline-flex items-center rounded-md bg-indigo-100 px-2 py-1 text-[10px] font-medium text-indigo-700",
|
||||
isCollapsed && "md:hidden",
|
||||
)}
|
||||
</button>
|
||||
</Menu.Item>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<div className="border-t-[1px] border-light-600 p-1 dark:border-dark-500">
|
||||
<Menu.Item>
|
||||
<button
|
||||
onClick={() => openModal("NEW_WORKSPACE")}
|
||||
className="flex w-full items-center justify-between rounded-[5px] px-3 py-2 text-left text-xs text-neutral-900 hover:bg-light-200 dark:text-dark-1000 dark:hover:bg-dark-400"
|
||||
>
|
||||
Pro
|
||||
</span>
|
||||
)}
|
||||
</Menu.Button>
|
||||
<Button
|
||||
className={twMerge(
|
||||
"mb-1 h-[34px] w-[34px] flex-shrink-0 rounded-lg bg-light-200 p-2 hover:bg-light-300 focus:outline-none dark:bg-dark-200 dark:hover:bg-dark-300",
|
||||
isCollapsed && "md:mb-2 md:h-9 md:w-9 md:self-center",
|
||||
)}
|
||||
onClick={() => setIsOpen(true)}
|
||||
>
|
||||
{t`Create workspace`}
|
||||
</button>
|
||||
</Menu.Item>
|
||||
</div>
|
||||
</Menu.Items>
|
||||
</Transition>
|
||||
</Menu>
|
||||
<HiMagnifyingGlass className="h-4 w-4" aria-hidden="true" />
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<Transition
|
||||
as={Fragment}
|
||||
enter="transition ease-out duration-100"
|
||||
enterFrom="transform opacity-0 scale-95"
|
||||
enterTo="transform opacity-100 scale-100"
|
||||
leave="transition ease-in duration-75"
|
||||
leaveFrom="transform opacity-100 scale-100"
|
||||
leaveTo="transform opacity-0 scale-95"
|
||||
>
|
||||
<Menu.Items
|
||||
className={twMerge(
|
||||
"absolute left-0 z-10 origin-top-left rounded-md border border-light-600 bg-light-50 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none dark:border-dark-600 dark:bg-dark-300",
|
||||
isCollapsed ? "w-48" : "w-full",
|
||||
)}
|
||||
>
|
||||
<div className="p-1">
|
||||
{availableWorkspaces.map((availableWorkspace) => (
|
||||
<div key={availableWorkspace.publicId} className="flex">
|
||||
<Menu.Item>
|
||||
<button
|
||||
onClick={() => switchWorkspace(availableWorkspace)}
|
||||
className="flex w-full items-center justify-between rounded-[5px] px-3 py-2 text-left text-sm text-neutral-900 hover:bg-light-200 dark:text-dark-1000 dark:hover:bg-dark-400"
|
||||
>
|
||||
<div className="flex min-w-0 flex-1 items-center">
|
||||
<span className="inline-flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-[5px] bg-indigo-700">
|
||||
<span className="text-xs font-medium leading-none text-white">
|
||||
{availableWorkspace.name.charAt(0).toUpperCase()}
|
||||
</span>
|
||||
</span>
|
||||
<span className="ml-2 truncate text-xs font-medium">
|
||||
{availableWorkspace.name}
|
||||
</span>
|
||||
</div>
|
||||
{workspace.publicId === availableWorkspace.publicId && (
|
||||
<span>
|
||||
<HiCheck className="h-4 w-4" aria-hidden="true" />
|
||||
</span>
|
||||
)}
|
||||
</button>
|
||||
</Menu.Item>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<div className="border-t-[1px] border-light-600 p-1 dark:border-dark-500">
|
||||
<Menu.Item>
|
||||
<button
|
||||
onClick={() => openModal("NEW_WORKSPACE")}
|
||||
className="flex w-full items-center justify-between rounded-[5px] px-3 py-2 text-left text-xs text-neutral-900 hover:bg-light-200 dark:text-dark-1000 dark:hover:bg-dark-400"
|
||||
>
|
||||
{t`Create workspace`}
|
||||
</button>
|
||||
</Menu.Item>
|
||||
</div>
|
||||
</Menu.Items>
|
||||
</Transition>
|
||||
</Menu>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -36,12 +36,12 @@ msgstr "{0} Labels"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
|
||||
msgstr "{boardCount, plural, one {Board importieren (1)} other {Boards importieren ({boardCount})}}"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:148
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:158
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$10/month"
|
||||
msgstr "$10/Monat"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$8/month"
|
||||
msgstr "$8/Monat"
|
||||
|
||||
@@ -101,7 +101,7 @@ msgid "Add label"
|
||||
msgstr "Label hinzufügen"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:240
|
||||
#: src/views/members/components/InviteMemberForm.tsx:250
|
||||
msgid "Add member"
|
||||
msgstr "Mitglied hinzufügen"
|
||||
|
||||
@@ -136,7 +136,7 @@ msgstr "hat Checklistenelement <0>{0}</0> hinzugefügt"
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "hat Label <0>{0}</0> hinzugefügt"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:310
|
||||
#: src/views/members/components/InviteMemberForm.tsx:320
|
||||
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
|
||||
msgstr "Das Hinzufügen eines neuen Mitglieds kostet zusätzlich {price} ({billingType}) pro Platz."
|
||||
|
||||
@@ -164,7 +164,7 @@ msgstr "Beim Trennen deines Trello-Kontos ist ein Fehler aufgetreten."
|
||||
msgid "An unexpected error occurred. Please try again later."
|
||||
msgstr "Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es später erneut."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:294
|
||||
#: src/views/members/components/InviteMemberForm.tsx:304
|
||||
msgid "Anyone with this link can join your workspace"
|
||||
msgstr "Jeder mit diesem Link kann deinem Arbeitsbereich beitreten"
|
||||
|
||||
@@ -250,11 +250,11 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Einfaches Kanban"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed annually"
|
||||
msgstr "jährlich abgerechnet"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed monthly"
|
||||
msgstr "monatlich abgerechnet"
|
||||
|
||||
@@ -498,7 +498,7 @@ msgstr "Karte erstellen"
|
||||
msgid "Create checklist"
|
||||
msgstr "Checkliste erstellen"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:334
|
||||
#: src/views/members/components/InviteMemberForm.tsx:342
|
||||
msgid "Create invite link"
|
||||
msgstr "Einladungslink erstellen"
|
||||
|
||||
@@ -528,7 +528,7 @@ msgid "Create new list"
|
||||
msgstr "Neue Liste erstellen"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
#: src/components/WorkspaceMenu.tsx:149
|
||||
msgid "Create workspace"
|
||||
msgstr "Arbeitsbereich erstellen"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "Kundensupport"
|
||||
msgid "Dark"
|
||||
msgstr "Dunkel"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:333
|
||||
#: src/views/members/components/InviteMemberForm.tsx:341
|
||||
msgid "Deactivate invite link"
|
||||
msgstr "Einladungslink deaktivieren"
|
||||
|
||||
@@ -709,7 +709,7 @@ msgstr "Bearbeitung"
|
||||
msgid "email"
|
||||
msgstr "E-Mail"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:255
|
||||
#: src/views/members/components/InviteMemberForm.tsx:265
|
||||
msgid "Email"
|
||||
msgstr "E-Mail"
|
||||
|
||||
@@ -741,7 +741,7 @@ msgstr "Geben Sie Ihr neues Passwort ein"
|
||||
msgid "Enter your password"
|
||||
msgstr "Gib dein Passwort ein"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:198
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
@@ -749,11 +749,11 @@ msgstr "Fehler"
|
||||
msgid "Error Changing Password"
|
||||
msgstr "Fehler beim Ändern des Passworts"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:119
|
||||
#: src/views/members/components/InviteMemberForm.tsx:128
|
||||
msgid "Error creating invite link"
|
||||
msgstr "Fehler beim Erstellen des Einladungslinks"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:134
|
||||
#: src/views/members/components/InviteMemberForm.tsx:144
|
||||
msgid "Error deactivating invite link"
|
||||
msgstr "Fehler beim Deaktivieren des Einladungslinks"
|
||||
|
||||
@@ -798,7 +798,7 @@ msgstr "Fehler beim Aktualisieren des Arbeitsbereichsnamens"
|
||||
msgid "Error updating workspace URL"
|
||||
msgstr "Fehler beim Aktualisieren der Workspace-URL"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:223
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Fehler beim Upgrade des Abonnements"
|
||||
@@ -828,7 +828,7 @@ msgstr "Ausführung"
|
||||
msgid "Failed to accept invitation. Please try again later, or contact customer support."
|
||||
msgstr "Einladung konnte nicht angenommen werden. Bitte versuche es später erneut oder kontaktiere den Kundensupport."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:199
|
||||
#: src/views/members/components/InviteMemberForm.tsx:209
|
||||
msgid "Failed to copy invite link"
|
||||
msgstr "Einladungslink konnte nicht kopiert werden"
|
||||
|
||||
@@ -881,7 +881,7 @@ msgstr "Für langfristige Nachhaltigkeit erkennen wir an, dass alle guten Open-S
|
||||
msgid "Free"
|
||||
msgstr "Kostenlos"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:316
|
||||
#: src/views/members/components/InviteMemberForm.tsx:326
|
||||
#: src/views/members/index.tsx:209
|
||||
msgid "Free Plan"
|
||||
msgstr "Kostenloser Plan"
|
||||
@@ -1024,6 +1024,10 @@ msgstr "Import von Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Der Import Ihrer Trello-Boards in Kan ist einfach. Sie können unserer Schritt-für-Schritt-Anleitung <0>hier</0> folgen."
|
||||
|
||||
#: src/components/CommandPallette.tsx:168
|
||||
msgid "in"
|
||||
msgstr "in"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
@@ -1055,20 +1059,24 @@ msgstr "Ungültige Einladung"
|
||||
msgid "Invite"
|
||||
msgstr "Einladen"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/components/InviteMemberForm.tsx:202
|
||||
msgid "Invite link copied"
|
||||
msgstr "Einladungslink kopiert"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/components/InviteMemberForm.tsx:203
|
||||
msgid "Invite link copied to clipboard"
|
||||
msgstr "Einladungslink in die Zwischenablage kopiert"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Einladungslinks erfordern ein Team- oder Pro-Abonnement. Bitte upgraden Sie Ihren Workspace."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:353
|
||||
#: src/views/members/components/InviteMemberForm.tsx:365
|
||||
msgid "Invite member"
|
||||
msgstr "Mitglied einladen"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
#: src/views/members/components/InviteMemberForm.tsx:329
|
||||
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
msgstr "Das Einladen von Mitgliedern erfordert einen Team-Plan. Sie werden weitergeleitet, um Ihren Workspace zu upgraden."
|
||||
|
||||
@@ -1203,7 +1211,7 @@ msgstr "Mitglieder | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Monatlich"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:159
|
||||
msgid "monthly billing"
|
||||
msgstr "monatliche Abrechnung"
|
||||
|
||||
@@ -1299,6 +1307,10 @@ msgstr "Keine Kreditkarte erforderlich"
|
||||
msgid "No lists"
|
||||
msgstr "Keine Listen"
|
||||
|
||||
#: src/components/CommandPallette.tsx:184
|
||||
msgid "No results found for \"{debouncedQuery}\"."
|
||||
msgstr "Keine Ergebnisse gefunden für \"{debouncedQuery}\"."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Angebot"
|
||||
@@ -1422,7 +1434,7 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
#: src/views/members/components/InviteMemberForm.tsx:234
|
||||
#: src/views/settings/components/Avatar.tsx:78
|
||||
#: src/views/settings/components/Avatar.tsx:219
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1435,8 +1447,8 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Bitte versuche es später noch einmal oder kontaktiere den Kundensupport."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:120
|
||||
#: src/views/members/components/InviteMemberForm.tsx:135
|
||||
#: src/views/members/components/InviteMemberForm.tsx:129
|
||||
#: src/views/members/components/InviteMemberForm.tsx:145
|
||||
msgid "Please try again later."
|
||||
msgstr "Bitte versuche es später erneut."
|
||||
|
||||
@@ -1463,7 +1475,7 @@ msgstr "Privat"
|
||||
msgid "Pro Plan"
|
||||
msgstr "Pro-Plan"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
msgid "Pro Plan ∞"
|
||||
msgstr "Pro-Plan ∞"
|
||||
|
||||
@@ -1580,6 +1592,10 @@ msgstr "Spare Zeit mit wiederverwendbaren Board-Vorlagen."
|
||||
msgid "Screening"
|
||||
msgstr "Vorauswahl"
|
||||
|
||||
#: src/components/CommandPallette.tsx:104
|
||||
msgid "Search boards and cards..."
|
||||
msgstr "Boards und Karten durchsuchen..."
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Alle auswählen"
|
||||
@@ -1683,6 +1699,10 @@ msgstr "Softwareentwicklung"
|
||||
msgid "Star on Github"
|
||||
msgstr "Stern auf Github"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:122
|
||||
msgid "Subscription Required"
|
||||
msgstr "Abonnement erforderlich"
|
||||
|
||||
#: src/components/AuthForm.tsx:212
|
||||
#: src/components/AuthForm.tsx:229
|
||||
msgid "Success"
|
||||
@@ -1704,7 +1724,7 @@ msgstr "Unterstütze die Entwicklung des Projekts"
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Team Plan"
|
||||
msgstr "Team-Plan"
|
||||
@@ -1988,7 +2008,7 @@ msgstr "Upgrade auf Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Upgrade auf Pro ($29/Monat)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:345
|
||||
#: src/views/members/components/InviteMemberForm.tsx:357
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Upgrade auf Team-Plan"
|
||||
|
||||
@@ -2187,7 +2207,7 @@ msgstr "Sie haben sich erfolgreich angemeldet."
|
||||
msgid "You have been signed up successfully."
|
||||
msgstr "Sie haben sich erfolgreich registriert."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:309
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
|
||||
msgstr "Sie haben unbegrenzte Plätze mit Ihrem Pro-Plan. Für neue Mitglieder fallen keine zusätzlichen Kosten an!"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -40,12 +40,12 @@ msgstr "{boardCount, plural, one {Import board (1)} other {Import boards ({board
|
||||
#~ msgid "#1 Hacker News"
|
||||
#~ msgstr "#1 Hacker News"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:148
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:158
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$10/month"
|
||||
msgstr "$10/month"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$8/month"
|
||||
msgstr "$8/month"
|
||||
|
||||
@@ -117,7 +117,7 @@ msgid "Add label"
|
||||
msgstr "Add label"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:240
|
||||
#: src/views/members/components/InviteMemberForm.tsx:250
|
||||
msgid "Add member"
|
||||
msgstr "Add member"
|
||||
|
||||
@@ -156,7 +156,7 @@ msgstr "added label <0>{0}</0>"
|
||||
#~ msgid "added label <0>{label}</0>"
|
||||
#~ msgstr "added label <0>{label}</0>"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:310
|
||||
#: src/views/members/components/InviteMemberForm.tsx:320
|
||||
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
|
||||
msgstr "Adding a new member will cost an additional {price} ({billingType}) per seat."
|
||||
|
||||
@@ -188,7 +188,7 @@ msgstr "An error occurred while disconnecting your Trello account."
|
||||
msgid "An unexpected error occurred. Please try again later."
|
||||
msgstr "An unexpected error occurred. Please try again later."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:294
|
||||
#: src/views/members/components/InviteMemberForm.tsx:304
|
||||
msgid "Anyone with this link can join your workspace"
|
||||
msgstr "Anyone with this link can join your workspace"
|
||||
|
||||
@@ -286,11 +286,11 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Basic Kanban"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed annually"
|
||||
msgstr "billed annually"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed monthly"
|
||||
msgstr "billed monthly"
|
||||
|
||||
@@ -559,7 +559,7 @@ msgstr "Create card"
|
||||
msgid "Create checklist"
|
||||
msgstr "Create checklist"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:334
|
||||
#: src/views/members/components/InviteMemberForm.tsx:342
|
||||
msgid "Create invite link"
|
||||
msgstr "Create invite link"
|
||||
|
||||
@@ -593,7 +593,7 @@ msgstr "Create new list"
|
||||
#~ msgstr "Create Pro workspace"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
#: src/components/WorkspaceMenu.tsx:149
|
||||
msgid "Create workspace"
|
||||
msgstr "Create workspace"
|
||||
|
||||
@@ -642,7 +642,7 @@ msgstr "Customer Support"
|
||||
msgid "Dark"
|
||||
msgstr "Dark"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:333
|
||||
#: src/views/members/components/InviteMemberForm.tsx:341
|
||||
msgid "Deactivate invite link"
|
||||
msgstr "Deactivate invite link"
|
||||
|
||||
@@ -782,7 +782,7 @@ msgstr "Editing"
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:255
|
||||
#: src/views/members/components/InviteMemberForm.tsx:265
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
@@ -814,7 +814,7 @@ msgstr "Enter your new password"
|
||||
msgid "Enter your password"
|
||||
msgstr "Enter your password"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:198
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
@@ -822,11 +822,11 @@ msgstr "Error"
|
||||
msgid "Error Changing Password"
|
||||
msgstr "Error Changing Password"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:119
|
||||
#: src/views/members/components/InviteMemberForm.tsx:128
|
||||
msgid "Error creating invite link"
|
||||
msgstr "Error creating invite link"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:134
|
||||
#: src/views/members/components/InviteMemberForm.tsx:144
|
||||
msgid "Error deactivating invite link"
|
||||
msgstr "Error deactivating invite link"
|
||||
|
||||
@@ -871,7 +871,7 @@ msgstr "Error updating workspace name"
|
||||
msgid "Error updating workspace URL"
|
||||
msgstr "Error updating workspace URL"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:223
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Error upgrading subscription"
|
||||
@@ -901,7 +901,7 @@ msgstr "Execution"
|
||||
msgid "Failed to accept invitation. Please try again later, or contact customer support."
|
||||
msgstr "Failed to accept invitation. Please try again later, or contact customer support."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:199
|
||||
#: src/views/members/components/InviteMemberForm.tsx:209
|
||||
msgid "Failed to copy invite link"
|
||||
msgstr "Failed to copy invite link"
|
||||
|
||||
@@ -955,7 +955,7 @@ msgstr "For long-term sustainability, we recognise all good open source projects
|
||||
msgid "Free"
|
||||
msgstr "Free"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:316
|
||||
#: src/views/members/components/InviteMemberForm.tsx:326
|
||||
#: src/views/members/index.tsx:209
|
||||
msgid "Free Plan"
|
||||
msgstr "Free Plan"
|
||||
@@ -1102,6 +1102,10 @@ msgstr "Importing from Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
|
||||
#: src/components/CommandPallette.tsx:168
|
||||
msgid "in"
|
||||
msgstr "in"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
@@ -1137,20 +1141,24 @@ msgstr "Invite"
|
||||
#~ msgid "Invite another"
|
||||
#~ msgstr "Invite another"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/components/InviteMemberForm.tsx:202
|
||||
msgid "Invite link copied"
|
||||
msgstr "Invite link copied"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/components/InviteMemberForm.tsx:203
|
||||
msgid "Invite link copied to clipboard"
|
||||
msgstr "Invite link copied to clipboard"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:353
|
||||
#: src/views/members/components/InviteMemberForm.tsx:365
|
||||
msgid "Invite member"
|
||||
msgstr "Invite member"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
#: src/views/members/components/InviteMemberForm.tsx:329
|
||||
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
msgstr "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
|
||||
@@ -1285,7 +1293,7 @@ msgstr "Members | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Monthly"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:159
|
||||
msgid "monthly billing"
|
||||
msgstr "monthly billing"
|
||||
|
||||
@@ -1393,6 +1401,10 @@ msgstr "No credit card required"
|
||||
msgid "No lists"
|
||||
msgstr "No lists"
|
||||
|
||||
#: src/components/CommandPallette.tsx:184
|
||||
msgid "No results found for \"{debouncedQuery}\"."
|
||||
msgstr "No results found for \"{debouncedQuery}\"."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Offer"
|
||||
@@ -1516,7 +1528,7 @@ msgstr "Please select a file to upload."
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
#: src/views/members/components/InviteMemberForm.tsx:234
|
||||
#: src/views/settings/components/Avatar.tsx:78
|
||||
#: src/views/settings/components/Avatar.tsx:219
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1529,8 +1541,8 @@ msgstr "Please select a file to upload."
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Please try again later, or contact customer support."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:120
|
||||
#: src/views/members/components/InviteMemberForm.tsx:135
|
||||
#: src/views/members/components/InviteMemberForm.tsx:129
|
||||
#: src/views/members/components/InviteMemberForm.tsx:145
|
||||
msgid "Please try again later."
|
||||
msgstr "Please try again later."
|
||||
|
||||
@@ -1557,7 +1569,7 @@ msgstr "Private"
|
||||
msgid "Pro Plan"
|
||||
msgstr "Pro Plan"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
msgid "Pro Plan ∞"
|
||||
msgstr "Pro Plan ∞"
|
||||
|
||||
@@ -1682,6 +1694,10 @@ msgstr "Save time with reusable board templates."
|
||||
msgid "Screening"
|
||||
msgstr "Screening"
|
||||
|
||||
#: src/components/CommandPallette.tsx:104
|
||||
msgid "Search boards and cards..."
|
||||
msgstr "Search boards and cards..."
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Select all"
|
||||
@@ -1797,6 +1813,10 @@ msgstr "Software Development"
|
||||
msgid "Star on Github"
|
||||
msgstr "Star on Github"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:122
|
||||
msgid "Subscription Required"
|
||||
msgstr "Subscription Required"
|
||||
|
||||
#: src/components/AuthForm.tsx:212
|
||||
#: src/components/AuthForm.tsx:229
|
||||
msgid "Success"
|
||||
@@ -1818,7 +1838,7 @@ msgstr "Support the development of the project"
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Team Plan"
|
||||
msgstr "Team Plan"
|
||||
@@ -2114,7 +2134,7 @@ msgstr "Upgrade to Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Upgrade to Pro ($29/month)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:345
|
||||
#: src/views/members/components/InviteMemberForm.tsx:357
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Upgrade to Team Plan"
|
||||
|
||||
@@ -2317,7 +2337,7 @@ msgstr "You have been logged in successfully."
|
||||
msgid "You have been signed up successfully."
|
||||
msgstr "You have been signed up successfully."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:309
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
|
||||
msgstr "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -36,12 +36,12 @@ msgstr "{0} etiquetas"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
|
||||
msgstr "{boardCount, plural, one {Importar tablero (1)} other {Importar tableros ({boardCount})}}"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:148
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:158
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$10/month"
|
||||
msgstr "$10/mes"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$8/month"
|
||||
msgstr "$8/mes"
|
||||
|
||||
@@ -101,7 +101,7 @@ msgid "Add label"
|
||||
msgstr "Añadir etiqueta"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:240
|
||||
#: src/views/members/components/InviteMemberForm.tsx:250
|
||||
msgid "Add member"
|
||||
msgstr "Añadir miembro"
|
||||
|
||||
@@ -136,7 +136,7 @@ msgstr "añadió el elemento <0>{0}</0> a la lista de verificación"
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "añadió la etiqueta <0>{0}</0>"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:310
|
||||
#: src/views/members/components/InviteMemberForm.tsx:320
|
||||
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
|
||||
msgstr "Añadir un nuevo miembro costará {price} adicionales ({billingType}) por asiento."
|
||||
|
||||
@@ -164,7 +164,7 @@ msgstr "Ocurrió un error al desconectar tu cuenta de Trello."
|
||||
msgid "An unexpected error occurred. Please try again later."
|
||||
msgstr "Ha ocurrido un error inesperado. Por favor, inténtalo de nuevo más tarde."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:294
|
||||
#: src/views/members/components/InviteMemberForm.tsx:304
|
||||
msgid "Anyone with this link can join your workspace"
|
||||
msgstr "Cualquier persona con este enlace puede unirse a tu espacio de trabajo"
|
||||
|
||||
@@ -250,11 +250,11 @@ msgstr "Pendientes"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Kanban básico"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed annually"
|
||||
msgstr "facturado anualmente"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed monthly"
|
||||
msgstr "facturado mensualmente"
|
||||
|
||||
@@ -498,7 +498,7 @@ msgstr "Crear tarjeta"
|
||||
msgid "Create checklist"
|
||||
msgstr "Crear lista de verificación"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:334
|
||||
#: src/views/members/components/InviteMemberForm.tsx:342
|
||||
msgid "Create invite link"
|
||||
msgstr "Crear enlace de invitación"
|
||||
|
||||
@@ -528,7 +528,7 @@ msgid "Create new list"
|
||||
msgstr "Crear nueva lista"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
#: src/components/WorkspaceMenu.tsx:149
|
||||
msgid "Create workspace"
|
||||
msgstr "Crear espacio de trabajo"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "Atención al cliente"
|
||||
msgid "Dark"
|
||||
msgstr "Oscuro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:333
|
||||
#: src/views/members/components/InviteMemberForm.tsx:341
|
||||
msgid "Deactivate invite link"
|
||||
msgstr "Desactivar enlace de invitación"
|
||||
|
||||
@@ -709,7 +709,7 @@ msgstr "Editando"
|
||||
msgid "email"
|
||||
msgstr "correo electrónico"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:255
|
||||
#: src/views/members/components/InviteMemberForm.tsx:265
|
||||
msgid "Email"
|
||||
msgstr "Correo electrónico"
|
||||
|
||||
@@ -741,7 +741,7 @@ msgstr "Introduce tu nueva contraseña"
|
||||
msgid "Enter your password"
|
||||
msgstr "Introduce tu contraseña"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:198
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
@@ -749,11 +749,11 @@ msgstr "Error"
|
||||
msgid "Error Changing Password"
|
||||
msgstr "Error al cambiar la contraseña"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:119
|
||||
#: src/views/members/components/InviteMemberForm.tsx:128
|
||||
msgid "Error creating invite link"
|
||||
msgstr "Error al crear el enlace de invitación"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:134
|
||||
#: src/views/members/components/InviteMemberForm.tsx:144
|
||||
msgid "Error deactivating invite link"
|
||||
msgstr "Error al desactivar el enlace de invitación"
|
||||
|
||||
@@ -798,7 +798,7 @@ msgstr "Error al actualizar el nombre del espacio de trabajo"
|
||||
msgid "Error updating workspace URL"
|
||||
msgstr "Error al actualizar la URL del espacio de trabajo"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:223
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Error al actualizar la suscripción"
|
||||
@@ -828,7 +828,7 @@ msgstr "Ejecución"
|
||||
msgid "Failed to accept invitation. Please try again later, or contact customer support."
|
||||
msgstr "No se pudo aceptar la invitación. Por favor, inténtalo de nuevo más tarde o contacta con atención al cliente."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:199
|
||||
#: src/views/members/components/InviteMemberForm.tsx:209
|
||||
msgid "Failed to copy invite link"
|
||||
msgstr "No se pudo copiar el enlace de invitación"
|
||||
|
||||
@@ -881,7 +881,7 @@ msgstr "Para la sostenibilidad a largo plazo, reconocemos que todos los buenos p
|
||||
msgid "Free"
|
||||
msgstr "Gratis"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:316
|
||||
#: src/views/members/components/InviteMemberForm.tsx:326
|
||||
#: src/views/members/index.tsx:209
|
||||
msgid "Free Plan"
|
||||
msgstr "Plan gratuito"
|
||||
@@ -1024,6 +1024,10 @@ msgstr "Importando desde Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Importar tus tableros de Trello a Kan es fácil. Puedes seguir nuestra guía paso a paso <0>aquí</0>."
|
||||
|
||||
#: src/components/CommandPallette.tsx:168
|
||||
msgid "in"
|
||||
msgstr "en"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
@@ -1055,20 +1059,24 @@ msgstr "Invitación inválida"
|
||||
msgid "Invite"
|
||||
msgstr "Invitar"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/components/InviteMemberForm.tsx:202
|
||||
msgid "Invite link copied"
|
||||
msgstr "Enlace de invitación copiado"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/components/InviteMemberForm.tsx:203
|
||||
msgid "Invite link copied to clipboard"
|
||||
msgstr "Enlace de invitación copiado al portapapeles"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Los enlaces de invitación requieren una suscripción de Equipo o Pro. Por favor, actualiza tu espacio de trabajo."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:353
|
||||
#: src/views/members/components/InviteMemberForm.tsx:365
|
||||
msgid "Invite member"
|
||||
msgstr "Invitar miembro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
#: src/views/members/components/InviteMemberForm.tsx:329
|
||||
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
msgstr "Invitar miembros requiere un Plan de Equipo. Serás redirigido para actualizar tu espacio de trabajo."
|
||||
|
||||
@@ -1203,7 +1211,7 @@ msgstr "Miembros | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Mensual"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:159
|
||||
msgid "monthly billing"
|
||||
msgstr "facturación mensual"
|
||||
|
||||
@@ -1299,6 +1307,10 @@ msgstr "No se requiere tarjeta de crédito"
|
||||
msgid "No lists"
|
||||
msgstr "Sin listas"
|
||||
|
||||
#: src/components/CommandPallette.tsx:184
|
||||
msgid "No results found for \"{debouncedQuery}\"."
|
||||
msgstr "No se encontraron resultados para \"{debouncedQuery}\"."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Oferta"
|
||||
@@ -1422,7 +1434,7 @@ msgstr "Por favor selecciona un archivo para subir."
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
#: src/views/members/components/InviteMemberForm.tsx:234
|
||||
#: src/views/settings/components/Avatar.tsx:78
|
||||
#: src/views/settings/components/Avatar.tsx:219
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1435,8 +1447,8 @@ msgstr "Por favor selecciona un archivo para subir."
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Por favor, inténtalo de nuevo más tarde o contacta con atención al cliente."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:120
|
||||
#: src/views/members/components/InviteMemberForm.tsx:135
|
||||
#: src/views/members/components/InviteMemberForm.tsx:129
|
||||
#: src/views/members/components/InviteMemberForm.tsx:145
|
||||
msgid "Please try again later."
|
||||
msgstr "Por favor, inténtalo de nuevo más tarde."
|
||||
|
||||
@@ -1463,7 +1475,7 @@ msgstr "Privado"
|
||||
msgid "Pro Plan"
|
||||
msgstr "Plan Pro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
msgid "Pro Plan ∞"
|
||||
msgstr "Plan Pro ∞"
|
||||
|
||||
@@ -1580,6 +1592,10 @@ msgstr "Ahorra tiempo con plantillas de tableros reutilizables."
|
||||
msgid "Screening"
|
||||
msgstr "Preselección"
|
||||
|
||||
#: src/components/CommandPallette.tsx:104
|
||||
msgid "Search boards and cards..."
|
||||
msgstr "Buscar tableros y tarjetas..."
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Seleccionar todo"
|
||||
@@ -1683,6 +1699,10 @@ msgstr "Desarrollo de software"
|
||||
msgid "Star on Github"
|
||||
msgstr "Estrella en Github"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:122
|
||||
msgid "Subscription Required"
|
||||
msgstr "Suscripción requerida"
|
||||
|
||||
#: src/components/AuthForm.tsx:212
|
||||
#: src/components/AuthForm.tsx:229
|
||||
msgid "Success"
|
||||
@@ -1704,7 +1724,7 @@ msgstr "Apoya el desarrollo del proyecto"
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Team Plan"
|
||||
msgstr "Plan de Equipo"
|
||||
@@ -1988,7 +2008,7 @@ msgstr "Actualizar a Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Actualizar a Pro ($29/mes)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:345
|
||||
#: src/views/members/components/InviteMemberForm.tsx:357
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Actualizar al Plan de Equipo"
|
||||
|
||||
@@ -2187,7 +2207,7 @@ msgstr "Has iniciado sesión correctamente."
|
||||
msgid "You have been signed up successfully."
|
||||
msgstr "Te has registrado correctamente."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:309
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
|
||||
msgstr "Tienes plazas ilimitadas con tu Plan Pro. ¡No hay cargos adicionales por nuevos miembros!"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -36,12 +36,12 @@ msgstr "{0} étiquettes"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
|
||||
msgstr "{boardCount, plural, one {Importer le tableau (1)} other {Importer les tableaux ({boardCount})}}"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:148
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:158
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$10/month"
|
||||
msgstr "10 $/mois"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$8/month"
|
||||
msgstr "8 $/mois"
|
||||
|
||||
@@ -101,7 +101,7 @@ msgid "Add label"
|
||||
msgstr "Ajouter une étiquette"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:240
|
||||
#: src/views/members/components/InviteMemberForm.tsx:250
|
||||
msgid "Add member"
|
||||
msgstr "Ajouter un membre"
|
||||
|
||||
@@ -136,7 +136,7 @@ msgstr "a ajouté l'élément <0>{0}</0> à la checklist"
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "a ajouté l'étiquette <0>{0}</0>"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:310
|
||||
#: src/views/members/components/InviteMemberForm.tsx:320
|
||||
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
|
||||
msgstr "L'ajout d'un nouveau membre coûtera {price} supplémentaires ({billingType}) par siège."
|
||||
|
||||
@@ -164,7 +164,7 @@ msgstr "Une erreur s'est produite lors de la déconnexion de votre compte Trello
|
||||
msgid "An unexpected error occurred. Please try again later."
|
||||
msgstr "Une erreur inattendue s'est produite. Veuillez réessayer plus tard."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:294
|
||||
#: src/views/members/components/InviteMemberForm.tsx:304
|
||||
msgid "Anyone with this link can join your workspace"
|
||||
msgstr "Toute personne disposant de ce lien peut rejoindre votre espace de travail"
|
||||
|
||||
@@ -250,11 +250,11 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Kanban basique"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed annually"
|
||||
msgstr "facturation annuelle"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed monthly"
|
||||
msgstr "facturation mensuelle"
|
||||
|
||||
@@ -498,7 +498,7 @@ msgstr "Créer une carte"
|
||||
msgid "Create checklist"
|
||||
msgstr "Créer une checklist"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:334
|
||||
#: src/views/members/components/InviteMemberForm.tsx:342
|
||||
msgid "Create invite link"
|
||||
msgstr "Créer un lien d'invitation"
|
||||
|
||||
@@ -528,7 +528,7 @@ msgid "Create new list"
|
||||
msgstr "Créer une nouvelle liste"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
#: src/components/WorkspaceMenu.tsx:149
|
||||
msgid "Create workspace"
|
||||
msgstr "Créer un espace de travail"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "Support client"
|
||||
msgid "Dark"
|
||||
msgstr "Sombre"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:333
|
||||
#: src/views/members/components/InviteMemberForm.tsx:341
|
||||
msgid "Deactivate invite link"
|
||||
msgstr "Désactiver le lien d'invitation"
|
||||
|
||||
@@ -709,7 +709,7 @@ msgstr "Édition"
|
||||
msgid "email"
|
||||
msgstr "e-mail"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:255
|
||||
#: src/views/members/components/InviteMemberForm.tsx:265
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
@@ -741,7 +741,7 @@ msgstr "Saisissez votre nouveau mot de passe"
|
||||
msgid "Enter your password"
|
||||
msgstr "Saisissez votre mot de passe"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:198
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
@@ -749,11 +749,11 @@ msgstr "Erreur"
|
||||
msgid "Error Changing Password"
|
||||
msgstr "Erreur lors du changement de mot de passe"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:119
|
||||
#: src/views/members/components/InviteMemberForm.tsx:128
|
||||
msgid "Error creating invite link"
|
||||
msgstr "Erreur lors de la création du lien d'invitation"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:134
|
||||
#: src/views/members/components/InviteMemberForm.tsx:144
|
||||
msgid "Error deactivating invite link"
|
||||
msgstr "Erreur lors de la désactivation du lien d'invitation"
|
||||
|
||||
@@ -798,7 +798,7 @@ msgstr "Erreur lors de la mise à jour du nom de l'espace de travail"
|
||||
msgid "Error updating workspace URL"
|
||||
msgstr "Erreur lors de la mise à jour de l'URL de l'espace de travail"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:223
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Erreur lors de la mise à niveau de l'abonnement"
|
||||
@@ -828,7 +828,7 @@ msgstr "Exécution"
|
||||
msgid "Failed to accept invitation. Please try again later, or contact customer support."
|
||||
msgstr "Échec de l'acceptation de l'invitation. Veuillez réessayer plus tard ou contacter le service client."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:199
|
||||
#: src/views/members/components/InviteMemberForm.tsx:209
|
||||
msgid "Failed to copy invite link"
|
||||
msgstr "Échec de la copie du lien d'invitation"
|
||||
|
||||
@@ -881,7 +881,7 @@ msgstr "Pour une durabilité à long terme, nous reconnaissons que tous les bons
|
||||
msgid "Free"
|
||||
msgstr "Gratuit"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:316
|
||||
#: src/views/members/components/InviteMemberForm.tsx:326
|
||||
#: src/views/members/index.tsx:209
|
||||
msgid "Free Plan"
|
||||
msgstr "Forfait gratuit"
|
||||
@@ -1024,6 +1024,10 @@ msgstr "Importation depuis Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "L'importation de vos tableaux Trello dans Kan est simple. Vous pouvez suivre notre guide étape par étape <0>ici</0>."
|
||||
|
||||
#: src/components/CommandPallette.tsx:168
|
||||
msgid "in"
|
||||
msgstr "dans"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
@@ -1055,20 +1059,24 @@ msgstr "Invitation invalide"
|
||||
msgid "Invite"
|
||||
msgstr "Inviter"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/components/InviteMemberForm.tsx:202
|
||||
msgid "Invite link copied"
|
||||
msgstr "Lien d'invitation copié"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/components/InviteMemberForm.tsx:203
|
||||
msgid "Invite link copied to clipboard"
|
||||
msgstr "Lien d'invitation copié dans le presse-papiers"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Les liens d'invitation nécessitent un abonnement Team ou Pro. Veuillez mettre à niveau votre espace de travail."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:353
|
||||
#: src/views/members/components/InviteMemberForm.tsx:365
|
||||
msgid "Invite member"
|
||||
msgstr "Inviter un membre"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
#: src/views/members/components/InviteMemberForm.tsx:329
|
||||
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
msgstr "L'invitation de membres nécessite un forfait d'équipe. Vous serez redirigé pour mettre à niveau votre espace de travail."
|
||||
|
||||
@@ -1203,7 +1211,7 @@ msgstr "Membres | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Mensuel"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:159
|
||||
msgid "monthly billing"
|
||||
msgstr "facturation mensuelle"
|
||||
|
||||
@@ -1299,6 +1307,10 @@ msgstr "Aucune carte de crédit requise"
|
||||
msgid "No lists"
|
||||
msgstr "Aucune liste"
|
||||
|
||||
#: src/components/CommandPallette.tsx:184
|
||||
msgid "No results found for \"{debouncedQuery}\"."
|
||||
msgstr "Aucun résultat trouvé pour \"{debouncedQuery}\"."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Offre"
|
||||
@@ -1422,7 +1434,7 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
#: src/views/members/components/InviteMemberForm.tsx:234
|
||||
#: src/views/settings/components/Avatar.tsx:78
|
||||
#: src/views/settings/components/Avatar.tsx:219
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1435,8 +1447,8 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Veuillez réessayer plus tard ou contacter le service client."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:120
|
||||
#: src/views/members/components/InviteMemberForm.tsx:135
|
||||
#: src/views/members/components/InviteMemberForm.tsx:129
|
||||
#: src/views/members/components/InviteMemberForm.tsx:145
|
||||
msgid "Please try again later."
|
||||
msgstr "Veuillez réessayer plus tard."
|
||||
|
||||
@@ -1463,7 +1475,7 @@ msgstr "Privé"
|
||||
msgid "Pro Plan"
|
||||
msgstr "Plan Pro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
msgid "Pro Plan ∞"
|
||||
msgstr "Plan Pro ∞"
|
||||
|
||||
@@ -1580,6 +1592,10 @@ msgstr "Gagnez du temps avec des modèles de tableaux réutilisables."
|
||||
msgid "Screening"
|
||||
msgstr "Présélection"
|
||||
|
||||
#: src/components/CommandPallette.tsx:104
|
||||
msgid "Search boards and cards..."
|
||||
msgstr "Rechercher des tableaux et des cartes..."
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Sélectionner tout"
|
||||
@@ -1683,6 +1699,10 @@ msgstr "Développement logiciel"
|
||||
msgid "Star on Github"
|
||||
msgstr "Étoile sur Github"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:122
|
||||
msgid "Subscription Required"
|
||||
msgstr "Abonnement requis"
|
||||
|
||||
#: src/components/AuthForm.tsx:212
|
||||
#: src/components/AuthForm.tsx:229
|
||||
msgid "Success"
|
||||
@@ -1704,7 +1724,7 @@ msgstr "Soutenir le développement du projet"
|
||||
msgid "System"
|
||||
msgstr "Système"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Team Plan"
|
||||
msgstr "Forfait d'équipe"
|
||||
@@ -1988,7 +2008,7 @@ msgstr "Passer à Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Passer à Pro (29 $/mois)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:345
|
||||
#: src/views/members/components/InviteMemberForm.tsx:357
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Passer au forfait d'équipe"
|
||||
|
||||
@@ -2187,7 +2207,7 @@ msgstr "Vous vous êtes connecté avec succès."
|
||||
msgid "You have been signed up successfully."
|
||||
msgstr "Vous vous êtes inscrit avec succès."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:309
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
|
||||
msgstr "Vous disposez de places illimitées avec votre Plan Pro. Il n'y a pas de frais supplémentaires pour les nouveaux membres !"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -36,12 +36,12 @@ msgstr "{0} etichette"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
|
||||
msgstr "{boardCount, plural, one {Importa bacheca (1)} other {Importa bacheche ({boardCount})}}"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:148
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:158
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$10/month"
|
||||
msgstr "$10/mese"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$8/month"
|
||||
msgstr "$8/mese"
|
||||
|
||||
@@ -101,7 +101,7 @@ msgid "Add label"
|
||||
msgstr "Aggiungi etichetta"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:240
|
||||
#: src/views/members/components/InviteMemberForm.tsx:250
|
||||
msgid "Add member"
|
||||
msgstr "Aggiungi membro"
|
||||
|
||||
@@ -136,7 +136,7 @@ msgstr "ha aggiunto l'elemento <0>{0}</0> alla checklist"
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "ha aggiunto l'etichetta <0>{0}</0>"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:310
|
||||
#: src/views/members/components/InviteMemberForm.tsx:320
|
||||
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
|
||||
msgstr "L'aggiunta di un nuovo membro costerà un supplemento di {price} ({billingType}) per posto."
|
||||
|
||||
@@ -164,7 +164,7 @@ msgstr "Si è verificato un errore durante la disconnessione del tuo account Tre
|
||||
msgid "An unexpected error occurred. Please try again later."
|
||||
msgstr "Si è verificato un errore imprevisto. Riprova più tardi."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:294
|
||||
#: src/views/members/components/InviteMemberForm.tsx:304
|
||||
msgid "Anyone with this link can join your workspace"
|
||||
msgstr "Chiunque abbia questo link può unirsi al tuo spazio di lavoro"
|
||||
|
||||
@@ -250,11 +250,11 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Kanban base"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed annually"
|
||||
msgstr "fatturato annualmente"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed monthly"
|
||||
msgstr "fatturato mensilmente"
|
||||
|
||||
@@ -498,7 +498,7 @@ msgstr "Crea carta"
|
||||
msgid "Create checklist"
|
||||
msgstr "Crea checklist"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:334
|
||||
#: src/views/members/components/InviteMemberForm.tsx:342
|
||||
msgid "Create invite link"
|
||||
msgstr "Crea link di invito"
|
||||
|
||||
@@ -528,7 +528,7 @@ msgid "Create new list"
|
||||
msgstr "Crea nuova lista"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
#: src/components/WorkspaceMenu.tsx:149
|
||||
msgid "Create workspace"
|
||||
msgstr "Crea spazio di lavoro"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "Assistenza clienti"
|
||||
msgid "Dark"
|
||||
msgstr "Scuro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:333
|
||||
#: src/views/members/components/InviteMemberForm.tsx:341
|
||||
msgid "Deactivate invite link"
|
||||
msgstr "Disattiva link di invito"
|
||||
|
||||
@@ -709,7 +709,7 @@ msgstr "Modifica"
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:255
|
||||
#: src/views/members/components/InviteMemberForm.tsx:265
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
@@ -741,7 +741,7 @@ msgstr "Inserisci la tua nuova password"
|
||||
msgid "Enter your password"
|
||||
msgstr "Inserisci la tua password"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:198
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Error"
|
||||
msgstr "Errore"
|
||||
|
||||
@@ -749,11 +749,11 @@ msgstr "Errore"
|
||||
msgid "Error Changing Password"
|
||||
msgstr "Errore durante il cambio della password"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:119
|
||||
#: src/views/members/components/InviteMemberForm.tsx:128
|
||||
msgid "Error creating invite link"
|
||||
msgstr "Errore durante la creazione del link di invito"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:134
|
||||
#: src/views/members/components/InviteMemberForm.tsx:144
|
||||
msgid "Error deactivating invite link"
|
||||
msgstr "Errore durante la disattivazione del link di invito"
|
||||
|
||||
@@ -798,7 +798,7 @@ msgstr "Errore durante l'aggiornamento del nome dell'area di lavoro"
|
||||
msgid "Error updating workspace URL"
|
||||
msgstr "Errore durante l'aggiornamento dell'URL dell'area di lavoro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:223
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Errore nell'aggiornamento dell'abbonamento"
|
||||
@@ -828,7 +828,7 @@ msgstr "Esecuzione"
|
||||
msgid "Failed to accept invitation. Please try again later, or contact customer support."
|
||||
msgstr "Impossibile accettare l'invito. Riprova più tardi o contatta l'assistenza clienti."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:199
|
||||
#: src/views/members/components/InviteMemberForm.tsx:209
|
||||
msgid "Failed to copy invite link"
|
||||
msgstr "Impossibile copiare il link di invito"
|
||||
|
||||
@@ -881,7 +881,7 @@ msgstr "Per la sostenibilità a lungo termine, riconosciamo che tutti i buoni pr
|
||||
msgid "Free"
|
||||
msgstr "Gratuito"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:316
|
||||
#: src/views/members/components/InviteMemberForm.tsx:326
|
||||
#: src/views/members/index.tsx:209
|
||||
msgid "Free Plan"
|
||||
msgstr "Piano gratuito"
|
||||
@@ -1024,6 +1024,10 @@ msgstr "Importazione da Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Importare le tue bacheche Trello in Kan è facile. Puoi seguire la nostra guida passo-passo <0>qui</0>."
|
||||
|
||||
#: src/components/CommandPallette.tsx:168
|
||||
msgid "in"
|
||||
msgstr "in"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
@@ -1055,20 +1059,24 @@ msgstr "Invito non valido"
|
||||
msgid "Invite"
|
||||
msgstr "Invita"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/components/InviteMemberForm.tsx:202
|
||||
msgid "Invite link copied"
|
||||
msgstr "Link di invito copiato"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/components/InviteMemberForm.tsx:203
|
||||
msgid "Invite link copied to clipboard"
|
||||
msgstr "Link di invito copiato negli appunti"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "I link di invito richiedono un abbonamento Team o Pro. Per favore aggiorna il tuo spazio di lavoro."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:353
|
||||
#: src/views/members/components/InviteMemberForm.tsx:365
|
||||
msgid "Invite member"
|
||||
msgstr "Invita membro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
#: src/views/members/components/InviteMemberForm.tsx:329
|
||||
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
msgstr "L'invito di membri richiede un Piano Team. Sarai reindirizzato per aggiornare il tuo spazio di lavoro."
|
||||
|
||||
@@ -1203,7 +1211,7 @@ msgstr "Membri | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Mensile"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:159
|
||||
msgid "monthly billing"
|
||||
msgstr "fatturazione mensile"
|
||||
|
||||
@@ -1299,6 +1307,10 @@ msgstr "Nessuna carta di credito richiesta"
|
||||
msgid "No lists"
|
||||
msgstr "Nessuna lista"
|
||||
|
||||
#: src/components/CommandPallette.tsx:184
|
||||
msgid "No results found for \"{debouncedQuery}\"."
|
||||
msgstr "Nessun risultato trovato per \"{debouncedQuery}\"."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Offerta"
|
||||
@@ -1422,7 +1434,7 @@ msgstr "Seleziona un file da caricare."
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
#: src/views/members/components/InviteMemberForm.tsx:234
|
||||
#: src/views/settings/components/Avatar.tsx:78
|
||||
#: src/views/settings/components/Avatar.tsx:219
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1435,8 +1447,8 @@ msgstr "Seleziona un file da caricare."
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Riprova più tardi o contatta l'assistenza clienti."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:120
|
||||
#: src/views/members/components/InviteMemberForm.tsx:135
|
||||
#: src/views/members/components/InviteMemberForm.tsx:129
|
||||
#: src/views/members/components/InviteMemberForm.tsx:145
|
||||
msgid "Please try again later."
|
||||
msgstr "Riprova più tardi."
|
||||
|
||||
@@ -1463,7 +1475,7 @@ msgstr "Privato"
|
||||
msgid "Pro Plan"
|
||||
msgstr "Piano Pro"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
msgid "Pro Plan ∞"
|
||||
msgstr "Piano Pro ∞"
|
||||
|
||||
@@ -1580,6 +1592,10 @@ msgstr "Risparmia tempo con modelli di bacheca riutilizzabili."
|
||||
msgid "Screening"
|
||||
msgstr "Selezione"
|
||||
|
||||
#: src/components/CommandPallette.tsx:104
|
||||
msgid "Search boards and cards..."
|
||||
msgstr "Cerca bacheche e schede..."
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Seleziona tutto"
|
||||
@@ -1683,6 +1699,10 @@ msgstr "Sviluppo software"
|
||||
msgid "Star on Github"
|
||||
msgstr "Metti una stella su Github"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:122
|
||||
msgid "Subscription Required"
|
||||
msgstr "Abbonamento richiesto"
|
||||
|
||||
#: src/components/AuthForm.tsx:212
|
||||
#: src/components/AuthForm.tsx:229
|
||||
msgid "Success"
|
||||
@@ -1704,7 +1724,7 @@ msgstr "Sostieni lo sviluppo del progetto"
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Team Plan"
|
||||
msgstr "Piano Team"
|
||||
@@ -1988,7 +2008,7 @@ msgstr "Passa a Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Passa a Pro ($29/mese)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:345
|
||||
#: src/views/members/components/InviteMemberForm.tsx:357
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Passa al Piano Team"
|
||||
|
||||
@@ -2187,7 +2207,7 @@ msgstr "Hai effettuato l'accesso con successo."
|
||||
msgid "You have been signed up successfully."
|
||||
msgstr "Ti sei registrato con successo."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:309
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
|
||||
msgstr "Hai posti illimitati con il tuo Piano Pro. Non ci sono costi aggiuntivi per i nuovi membri!"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -36,12 +36,12 @@ msgstr "{0} labels"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
|
||||
msgstr "{boardCount, plural, one {Bord importeren (1)} other {Borden importeren ({boardCount})}}"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:148
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:158
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$10/month"
|
||||
msgstr "$10/maand"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$8/month"
|
||||
msgstr "$8/maand"
|
||||
|
||||
@@ -101,7 +101,7 @@ msgid "Add label"
|
||||
msgstr "Label toevoegen"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:240
|
||||
#: src/views/members/components/InviteMemberForm.tsx:250
|
||||
msgid "Add member"
|
||||
msgstr "Lid toevoegen"
|
||||
|
||||
@@ -136,7 +136,7 @@ msgstr "heeft checklistitem <0>{0}</0> toegevoegd"
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "heeft label <0>{0}</0> toegevoegd"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:310
|
||||
#: src/views/members/components/InviteMemberForm.tsx:320
|
||||
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
|
||||
msgstr "Het toevoegen van een nieuw lid kost een extra {price} ({billingType}) per plaats."
|
||||
|
||||
@@ -164,7 +164,7 @@ msgstr "Er is een fout opgetreden bij het verbreken van de verbinding met je Tre
|
||||
msgid "An unexpected error occurred. Please try again later."
|
||||
msgstr "Er is een onverwachte fout opgetreden. Probeer het later opnieuw."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:294
|
||||
#: src/views/members/components/InviteMemberForm.tsx:304
|
||||
msgid "Anyone with this link can join your workspace"
|
||||
msgstr "Iedereen met deze link kan deelnemen aan je werkruimte"
|
||||
|
||||
@@ -250,11 +250,11 @@ msgstr "Backlog"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Basis kanban"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed annually"
|
||||
msgstr "jaarlijks gefactureerd"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed monthly"
|
||||
msgstr "maandelijks gefactureerd"
|
||||
|
||||
@@ -498,7 +498,7 @@ msgstr "Maak kaart"
|
||||
msgid "Create checklist"
|
||||
msgstr "Checklist maken"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:334
|
||||
#: src/views/members/components/InviteMemberForm.tsx:342
|
||||
msgid "Create invite link"
|
||||
msgstr "Uitnodigingslink maken"
|
||||
|
||||
@@ -528,7 +528,7 @@ msgid "Create new list"
|
||||
msgstr "Maak nieuwe lijst"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
#: src/components/WorkspaceMenu.tsx:149
|
||||
msgid "Create workspace"
|
||||
msgstr "Werkruimte maken"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "Klantenservice"
|
||||
msgid "Dark"
|
||||
msgstr "Donker"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:333
|
||||
#: src/views/members/components/InviteMemberForm.tsx:341
|
||||
msgid "Deactivate invite link"
|
||||
msgstr "Uitnodigingslink deactiveren"
|
||||
|
||||
@@ -709,7 +709,7 @@ msgstr "Bewerken"
|
||||
msgid "email"
|
||||
msgstr "e-mail"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:255
|
||||
#: src/views/members/components/InviteMemberForm.tsx:265
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
@@ -741,7 +741,7 @@ msgstr "Voer je nieuwe wachtwoord in"
|
||||
msgid "Enter your password"
|
||||
msgstr "Voer je wachtwoord in"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:198
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Error"
|
||||
msgstr "Fout"
|
||||
|
||||
@@ -749,11 +749,11 @@ msgstr "Fout"
|
||||
msgid "Error Changing Password"
|
||||
msgstr "Fout bij wijzigen wachtwoord"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:119
|
||||
#: src/views/members/components/InviteMemberForm.tsx:128
|
||||
msgid "Error creating invite link"
|
||||
msgstr "Fout bij het maken van uitnodigingslink"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:134
|
||||
#: src/views/members/components/InviteMemberForm.tsx:144
|
||||
msgid "Error deactivating invite link"
|
||||
msgstr "Fout bij het deactiveren van uitnodigingslink"
|
||||
|
||||
@@ -798,7 +798,7 @@ msgstr "Fout bij bijwerken naam werkruimte"
|
||||
msgid "Error updating workspace URL"
|
||||
msgstr "Fout bij het bijwerken van werkruimte-URL"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:223
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Fout bij het upgraden van abonnement"
|
||||
@@ -828,7 +828,7 @@ msgstr "Uitvoering"
|
||||
msgid "Failed to accept invitation. Please try again later, or contact customer support."
|
||||
msgstr "Uitnodiging accepteren mislukt. Probeer het later opnieuw of neem contact op met de klantenservice."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:199
|
||||
#: src/views/members/components/InviteMemberForm.tsx:209
|
||||
msgid "Failed to copy invite link"
|
||||
msgstr "Kopiëren van uitnodigingslink mislukt"
|
||||
|
||||
@@ -881,7 +881,7 @@ msgstr "Voor duurzaamheid op lange termijn erkennen we dat alle goede open sourc
|
||||
msgid "Free"
|
||||
msgstr "Gratis"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:316
|
||||
#: src/views/members/components/InviteMemberForm.tsx:326
|
||||
#: src/views/members/index.tsx:209
|
||||
msgid "Free Plan"
|
||||
msgstr "Gratis plan"
|
||||
@@ -1024,6 +1024,10 @@ msgstr "Importeren vanuit Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Het importeren van je Trello-borden naar Kan is eenvoudig. Je kunt onze stap-voor-stap handleiding <0>hier</0> volgen."
|
||||
|
||||
#: src/components/CommandPallette.tsx:168
|
||||
msgid "in"
|
||||
msgstr "in"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
@@ -1055,20 +1059,24 @@ msgstr "Ongeldige uitnodiging"
|
||||
msgid "Invite"
|
||||
msgstr "Uitnodigen"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/components/InviteMemberForm.tsx:202
|
||||
msgid "Invite link copied"
|
||||
msgstr "Uitnodigingslink gekopieerd"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/components/InviteMemberForm.tsx:203
|
||||
msgid "Invite link copied to clipboard"
|
||||
msgstr "Uitnodigingslink gekopieerd naar klembord"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Uitnodigingslinks vereisen een Team- of Pro-abonnement. Upgrade je werkruimte."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:353
|
||||
#: src/views/members/components/InviteMemberForm.tsx:365
|
||||
msgid "Invite member"
|
||||
msgstr "Lid uitnodigen"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
#: src/views/members/components/InviteMemberForm.tsx:329
|
||||
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
msgstr "Voor het uitnodigen van leden is een teamplan vereist. Je wordt doorgestuurd om je werkruimte te upgraden."
|
||||
|
||||
@@ -1203,7 +1211,7 @@ msgstr "Leden | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Maandelijks"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:159
|
||||
msgid "monthly billing"
|
||||
msgstr "maandelijkse facturering"
|
||||
|
||||
@@ -1299,6 +1307,10 @@ msgstr "Geen creditcard vereist"
|
||||
msgid "No lists"
|
||||
msgstr "Geen lijsten"
|
||||
|
||||
#: src/components/CommandPallette.tsx:184
|
||||
msgid "No results found for \"{debouncedQuery}\"."
|
||||
msgstr "Geen resultaten gevonden voor \"{debouncedQuery}\"."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Aanbod"
|
||||
@@ -1422,7 +1434,7 @@ msgstr "Selecteer een bestand om te uploaden."
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
#: src/views/members/components/InviteMemberForm.tsx:234
|
||||
#: src/views/settings/components/Avatar.tsx:78
|
||||
#: src/views/settings/components/Avatar.tsx:219
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1435,8 +1447,8 @@ msgstr "Selecteer een bestand om te uploaden."
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Probeer het later opnieuw of neem contact op met de klantenservice."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:120
|
||||
#: src/views/members/components/InviteMemberForm.tsx:135
|
||||
#: src/views/members/components/InviteMemberForm.tsx:129
|
||||
#: src/views/members/components/InviteMemberForm.tsx:145
|
||||
msgid "Please try again later."
|
||||
msgstr "Probeer het later opnieuw."
|
||||
|
||||
@@ -1463,7 +1475,7 @@ msgstr "Privé"
|
||||
msgid "Pro Plan"
|
||||
msgstr "Pro Plan"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
msgid "Pro Plan ∞"
|
||||
msgstr "Pro Plan ∞"
|
||||
|
||||
@@ -1580,6 +1592,10 @@ msgstr "Bespaar tijd met herbruikbare bordsjablonen."
|
||||
msgid "Screening"
|
||||
msgstr "Screening"
|
||||
|
||||
#: src/components/CommandPallette.tsx:104
|
||||
msgid "Search boards and cards..."
|
||||
msgstr "Zoek in borden en kaarten..."
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Alles selecteren"
|
||||
@@ -1683,6 +1699,10 @@ msgstr "Softwareontwikkeling"
|
||||
msgid "Star on Github"
|
||||
msgstr "Star op Github"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:122
|
||||
msgid "Subscription Required"
|
||||
msgstr "Abonnement vereist"
|
||||
|
||||
#: src/components/AuthForm.tsx:212
|
||||
#: src/components/AuthForm.tsx:229
|
||||
msgid "Success"
|
||||
@@ -1704,7 +1724,7 @@ msgstr "Ondersteun de ontwikkeling van het project"
|
||||
msgid "System"
|
||||
msgstr "Systeem"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Team Plan"
|
||||
msgstr "Teamplan"
|
||||
@@ -1988,7 +2008,7 @@ msgstr "Upgraden naar Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Upgrade naar Pro ($29/maand)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:345
|
||||
#: src/views/members/components/InviteMemberForm.tsx:357
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Upgraden naar teamplan"
|
||||
|
||||
@@ -2187,7 +2207,7 @@ msgstr "Je bent succesvol ingelogd."
|
||||
msgid "You have been signed up successfully."
|
||||
msgstr "Je bent succesvol geregistreerd."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:309
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
|
||||
msgstr "Je hebt onbeperkte plaatsen met je Pro Plan. Er zijn geen extra kosten voor nieuwe leden!"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -36,12 +36,12 @@ msgstr "{0} метки"
|
||||
msgid "{boardCount, plural, one {Import board (1)} other {Import boards ({boardCount})}}"
|
||||
msgstr "{boardCount, plural, one {Импортировать доску (1)} other {Импортировать доски ({boardCount})}}"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:148
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:158
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$10/month"
|
||||
msgstr "$10/месяц"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:160
|
||||
#: src/views/members/components/InviteMemberForm.tsx:170
|
||||
msgid "$8/month"
|
||||
msgstr "$8/месяц"
|
||||
|
||||
@@ -101,7 +101,7 @@ msgid "Add label"
|
||||
msgstr "Добавить метку"
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:130
|
||||
#: src/views/members/components/InviteMemberForm.tsx:240
|
||||
#: src/views/members/components/InviteMemberForm.tsx:250
|
||||
msgid "Add member"
|
||||
msgstr "Добавить участника"
|
||||
|
||||
@@ -136,7 +136,7 @@ msgstr "добавлен элемент контрольного списка <0
|
||||
msgid "added label <0>{0}</0>"
|
||||
msgstr "добавлена метка <0>{0}</0>"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:310
|
||||
#: src/views/members/components/InviteMemberForm.tsx:320
|
||||
msgid "Adding a new member will cost an additional {price} ({billingType}) per seat."
|
||||
msgstr "Добавление нового участника будет стоить дополнительно {price} ({billingType}) за место."
|
||||
|
||||
@@ -164,7 +164,7 @@ msgstr "Произошла ошибка при отключении вашего
|
||||
msgid "An unexpected error occurred. Please try again later."
|
||||
msgstr "Произошла непредвиденная ошибка. Пожалуйста, попробуйте позже."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:294
|
||||
#: src/views/members/components/InviteMemberForm.tsx:304
|
||||
msgid "Anyone with this link can join your workspace"
|
||||
msgstr "Любой, у кого есть эта ссылка, может присоединиться к вашему рабочему пространству"
|
||||
|
||||
@@ -250,11 +250,11 @@ msgstr "Бэклог"
|
||||
msgid "Basic Kanban"
|
||||
msgstr "Базовый Канбан"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed annually"
|
||||
msgstr "выставляется счет ежегодно"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:161
|
||||
#: src/views/members/components/InviteMemberForm.tsx:171
|
||||
msgid "billed monthly"
|
||||
msgstr "выставляется счет ежемесячно"
|
||||
|
||||
@@ -498,7 +498,7 @@ msgstr "Создать карточку"
|
||||
msgid "Create checklist"
|
||||
msgstr "Создать чек-лист"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:334
|
||||
#: src/views/members/components/InviteMemberForm.tsx:342
|
||||
msgid "Create invite link"
|
||||
msgstr "Создать ссылку-приглашение"
|
||||
|
||||
@@ -528,7 +528,7 @@ msgid "Create new list"
|
||||
msgstr "Создать новый список"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
#: src/components/WorkspaceMenu.tsx:149
|
||||
msgid "Create workspace"
|
||||
msgstr "Создать рабочее пространство"
|
||||
|
||||
@@ -569,7 +569,7 @@ msgstr "Служба поддержки"
|
||||
msgid "Dark"
|
||||
msgstr "Тёмный"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:333
|
||||
#: src/views/members/components/InviteMemberForm.tsx:341
|
||||
msgid "Deactivate invite link"
|
||||
msgstr "Деактивировать ссылку-приглашение"
|
||||
|
||||
@@ -709,7 +709,7 @@ msgstr "Редактирование"
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:255
|
||||
#: src/views/members/components/InviteMemberForm.tsx:265
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
@@ -741,7 +741,7 @@ msgstr "Введите ваш новый пароль"
|
||||
msgid "Enter your password"
|
||||
msgstr "Введите ваш пароль"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:198
|
||||
#: src/views/members/components/InviteMemberForm.tsx:208
|
||||
msgid "Error"
|
||||
msgstr "Ошибка"
|
||||
|
||||
@@ -749,11 +749,11 @@ msgstr "Ошибка"
|
||||
msgid "Error Changing Password"
|
||||
msgstr "Ошибка при изменении пароля"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:119
|
||||
#: src/views/members/components/InviteMemberForm.tsx:128
|
||||
msgid "Error creating invite link"
|
||||
msgstr "Ошибка при создании ссылки приглашения"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:134
|
||||
#: src/views/members/components/InviteMemberForm.tsx:144
|
||||
msgid "Error deactivating invite link"
|
||||
msgstr "Ошибка при деактивации ссылки приглашения"
|
||||
|
||||
@@ -798,7 +798,7 @@ msgstr "Ошибка при обновлении имени рабочей об
|
||||
msgid "Error updating workspace URL"
|
||||
msgstr "Ошибка при обновлении URL рабочей области"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:223
|
||||
#: src/views/members/components/InviteMemberForm.tsx:233
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:41
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Ошибка при обновлении подписки"
|
||||
@@ -828,7 +828,7 @@ msgstr "Выполнение"
|
||||
msgid "Failed to accept invitation. Please try again later, or contact customer support."
|
||||
msgstr "Не удалось принять приглашение. Пожалуйста, попробуйте позже или свяжитесь со службой поддержки."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:199
|
||||
#: src/views/members/components/InviteMemberForm.tsx:209
|
||||
msgid "Failed to copy invite link"
|
||||
msgstr "Не удалось скопировать ссылку приглашения"
|
||||
|
||||
@@ -881,7 +881,7 @@ msgstr "Для долгосрочной устойчивости мы призн
|
||||
msgid "Free"
|
||||
msgstr "Бесплатно"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:316
|
||||
#: src/views/members/components/InviteMemberForm.tsx:326
|
||||
#: src/views/members/index.tsx:209
|
||||
msgid "Free Plan"
|
||||
msgstr "Бесплатный план"
|
||||
@@ -1024,6 +1024,10 @@ msgstr "Импорт из Trello"
|
||||
msgid "Importing your Trello boards into Kan is easy. You can follow our step-by-step guide <0>here</0>."
|
||||
msgstr "Импортировать ваши доски Trello в Kan легко. Вы можете следовать нашему пошаговому руководству <0>здесь</0>."
|
||||
|
||||
#: src/components/CommandPallette.tsx:168
|
||||
msgid "in"
|
||||
msgstr "в"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:16
|
||||
#: src/views/boards/components/TemplateBoards.tsx:22
|
||||
#: src/views/boards/components/TemplateBoards.tsx:45
|
||||
@@ -1055,20 +1059,24 @@ msgstr "Недействительное приглашение"
|
||||
msgid "Invite"
|
||||
msgstr "Пригласить"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:192
|
||||
#: src/views/members/components/InviteMemberForm.tsx:202
|
||||
msgid "Invite link copied"
|
||||
msgstr "Ссылка приглашения скопирована"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/components/InviteMemberForm.tsx:203
|
||||
msgid "Invite link copied to clipboard"
|
||||
msgstr "Ссылка приглашения скопирована в буфер обмена"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||
msgid "Invite links require a Team or Pro subscription. Please upgrade your workspace."
|
||||
msgstr "Ссылки для приглашений требуют подписки Team или Pro. Пожалуйста, обновите ваше рабочее пространство."
|
||||
|
||||
#: src/views/card/components/MemberSelector.tsx:111
|
||||
#: src/views/members/components/InviteMemberForm.tsx:353
|
||||
#: src/views/members/components/InviteMemberForm.tsx:365
|
||||
msgid "Invite member"
|
||||
msgstr "Пригласить участника"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
#: src/views/members/components/InviteMemberForm.tsx:329
|
||||
msgid "Inviting members requires a Team Plan. You'll be redirected to upgrade your workspace."
|
||||
msgstr "Для приглашения участников необходим командный план. Вы будете перенаправлены для обновления вашего рабочего пространства."
|
||||
|
||||
@@ -1203,7 +1211,7 @@ msgstr "Участники | {0}"
|
||||
msgid "Monthly"
|
||||
msgstr "Ежемесячно"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:149
|
||||
#: src/views/members/components/InviteMemberForm.tsx:159
|
||||
msgid "monthly billing"
|
||||
msgstr "ежемесячная оплата"
|
||||
|
||||
@@ -1299,6 +1307,10 @@ msgstr "Кредитная карта не требуется"
|
||||
msgid "No lists"
|
||||
msgstr "Нет списков"
|
||||
|
||||
#: src/components/CommandPallette.tsx:184
|
||||
msgid "No results found for \"{debouncedQuery}\"."
|
||||
msgstr "Результаты для запроса \"{debouncedQuery}\" не найдены."
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:65
|
||||
msgid "Offer"
|
||||
msgstr "Предложение"
|
||||
@@ -1422,7 +1434,7 @@ msgstr "Пожалуйста, выберите файл для загрузки.
|
||||
#: src/views/card/index.tsx:173
|
||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||
#: src/views/members/components/InviteMemberForm.tsx:104
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
#: src/views/members/components/InviteMemberForm.tsx:234
|
||||
#: src/views/settings/components/Avatar.tsx:78
|
||||
#: src/views/settings/components/Avatar.tsx:219
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||
@@ -1435,8 +1447,8 @@ msgstr "Пожалуйста, выберите файл для загрузки.
|
||||
msgid "Please try again later, or contact customer support."
|
||||
msgstr "Пожалуйста, попробуйте позже или свяжитесь со службой поддержки."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:120
|
||||
#: src/views/members/components/InviteMemberForm.tsx:135
|
||||
#: src/views/members/components/InviteMemberForm.tsx:129
|
||||
#: src/views/members/components/InviteMemberForm.tsx:145
|
||||
msgid "Please try again later."
|
||||
msgstr "Пожалуйста, попробуйте позже."
|
||||
|
||||
@@ -1463,7 +1475,7 @@ msgstr "Личное"
|
||||
msgid "Pro Plan"
|
||||
msgstr "Профессиональный план"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
msgid "Pro Plan ∞"
|
||||
msgstr "Профессиональный план ∞"
|
||||
|
||||
@@ -1580,6 +1592,10 @@ msgstr "Экономьте время с помощью шаблонов дос
|
||||
msgid "Screening"
|
||||
msgstr "Отбор"
|
||||
|
||||
#: src/components/CommandPallette.tsx:104
|
||||
msgid "Search boards and cards..."
|
||||
msgstr "Поиск досок и карточек..."
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:274
|
||||
msgid "Select all"
|
||||
msgstr "Выбрать все"
|
||||
@@ -1683,6 +1699,10 @@ msgstr "Разработка программного обеспечения"
|
||||
msgid "Star on Github"
|
||||
msgstr "Поставить звезду на Github"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:122
|
||||
msgid "Subscription Required"
|
||||
msgstr "Требуется подписка"
|
||||
|
||||
#: src/components/AuthForm.tsx:212
|
||||
#: src/components/AuthForm.tsx:229
|
||||
msgid "Success"
|
||||
@@ -1704,7 +1724,7 @@ msgstr "Поддержите развитие проекта"
|
||||
msgid "System"
|
||||
msgstr "Система"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:305
|
||||
#: src/views/members/components/InviteMemberForm.tsx:315
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Team Plan"
|
||||
msgstr "Командный план"
|
||||
@@ -1988,7 +2008,7 @@ msgstr "Обновить до Pro"
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Обновить до Pro ($29/месяц)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:345
|
||||
#: src/views/members/components/InviteMemberForm.tsx:357
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Обновить до командного плана"
|
||||
|
||||
@@ -2187,7 +2207,7 @@ msgstr "Вы успешно вошли в систему."
|
||||
msgid "You have been signed up successfully."
|
||||
msgstr "Вы успешно зарегистрировались."
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:309
|
||||
#: src/views/members/components/InviteMemberForm.tsx:319
|
||||
msgid "You have unlimited seats with your Pro Plan. There is no additional charge for new members!"
|
||||
msgstr "В вашем профессиональном плане неограниченное количество мест. За новых участников дополнительная плата не взимается!"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -409,4 +409,80 @@ export const workspaceRouter = createTRPCRouter({
|
||||
isReserved: workspaceSlug?.type === "reserved",
|
||||
};
|
||||
}),
|
||||
search: protectedProcedure
|
||||
.meta({
|
||||
openapi: {
|
||||
summary: "Search boards and cards in a workspace",
|
||||
method: "GET",
|
||||
path: "/workspaces/{workspacePublicId}/search",
|
||||
description:
|
||||
"Searches for boards and cards by title within a workspace",
|
||||
tags: ["Workspaces"],
|
||||
protect: true,
|
||||
},
|
||||
})
|
||||
.input(
|
||||
z.object({
|
||||
workspacePublicId: z.string().min(12),
|
||||
query: z.string().min(1).max(100),
|
||||
limit: z.number().min(1).max(50).optional().default(20),
|
||||
}),
|
||||
)
|
||||
.output(
|
||||
z.array(
|
||||
z.discriminatedUnion("type", [
|
||||
z.object({
|
||||
publicId: z.string(),
|
||||
title: z.string(),
|
||||
description: z.string().nullable(),
|
||||
slug: z.string(),
|
||||
updatedAt: z.date().nullable(),
|
||||
createdAt: z.date(),
|
||||
type: z.literal("board"),
|
||||
}),
|
||||
z.object({
|
||||
publicId: z.string(),
|
||||
title: z.string(),
|
||||
description: z.string().nullable(),
|
||||
boardPublicId: z.string(),
|
||||
boardName: z.string(),
|
||||
listName: z.string(),
|
||||
updatedAt: z.date().nullable(),
|
||||
createdAt: z.date(),
|
||||
type: z.literal("card"),
|
||||
}),
|
||||
]),
|
||||
),
|
||||
)
|
||||
.query(async ({ ctx, input }) => {
|
||||
const userId = ctx.user?.id;
|
||||
|
||||
if (!userId)
|
||||
throw new TRPCError({
|
||||
message: `User not authenticated`,
|
||||
code: "UNAUTHORIZED",
|
||||
});
|
||||
|
||||
const workspace = await workspaceRepo.getByPublicId(
|
||||
ctx.db,
|
||||
input.workspacePublicId,
|
||||
);
|
||||
|
||||
if (!workspace)
|
||||
throw new TRPCError({
|
||||
message: `Workspace not found`,
|
||||
code: "NOT_FOUND",
|
||||
});
|
||||
|
||||
await assertUserInWorkspace(ctx.db, userId, workspace.id);
|
||||
|
||||
const result = await workspaceRepo.searchBoardsAndCards(
|
||||
ctx.db,
|
||||
workspace.id,
|
||||
input.query,
|
||||
input.limit,
|
||||
);
|
||||
|
||||
return result;
|
||||
}),
|
||||
});
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
CREATE EXTENSION IF NOT EXISTS pg_trgm; --> statement-breakpoint
|
||||
CREATE INDEX IF NOT EXISTS boards_name_trgm_idx ON board USING gin (name gin_trgm_ops);
|
||||
--> statement-breakpoint
|
||||
CREATE INDEX IF NOT EXISTS cards_title_trgm_idx ON card USING gin (title gin_trgm_ops);
|
||||
2766
packages/db/migrations/meta/20251001220136_snapshot.json
Normal file
2766
packages/db/migrations/meta/20251001220136_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -113,6 +113,13 @@
|
||||
"when": 1758662398166,
|
||||
"tag": "20250923211958_AddWorkspaceInviteLinks",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"version": "7",
|
||||
"when": 1759356096392,
|
||||
"tag": "20251001220136_AddFuzzySearchSupport",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,13 @@
|
||||
import { and, eq, inArray, isNull } from "drizzle-orm";
|
||||
import { and, desc, eq, ilike, inArray, isNull, or, sql } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { boards, workspaceMembers, workspaces } from "@kan/db/schema";
|
||||
import {
|
||||
boards,
|
||||
cards,
|
||||
lists,
|
||||
workspaceMembers,
|
||||
workspaces,
|
||||
} from "@kan/db/schema";
|
||||
import { generateUID } from "@kan/shared/utils";
|
||||
|
||||
export const create = async (
|
||||
@@ -274,3 +280,84 @@ export const isUserInWorkspace = async (
|
||||
|
||||
return result?.id !== undefined;
|
||||
};
|
||||
|
||||
export const searchBoardsAndCards = async (
|
||||
db: dbClient,
|
||||
workspaceId: number,
|
||||
query: string,
|
||||
limit = 20,
|
||||
) => {
|
||||
const searchQuery = `%${query}%`;
|
||||
|
||||
// Search for boards
|
||||
const boardResults = await db
|
||||
.select({
|
||||
publicId: boards.publicId,
|
||||
title: boards.name,
|
||||
description: boards.description,
|
||||
slug: boards.slug,
|
||||
updatedAt: boards.updatedAt,
|
||||
createdAt: boards.createdAt,
|
||||
})
|
||||
.from(boards)
|
||||
.where(
|
||||
and(
|
||||
eq(boards.workspaceId, workspaceId),
|
||||
// Combine exact and fuzzy matching
|
||||
or(
|
||||
ilike(boards.name, `%${query}%`), // Exact substring match
|
||||
sql`similarity(${boards.name}, ${query}) > 0.2`, // Fuzzy match
|
||||
),
|
||||
isNull(boards.deletedAt),
|
||||
),
|
||||
)
|
||||
.orderBy(
|
||||
sql`CASE WHEN ${boards.name} ILIKE ${`%${query}%`} THEN 1 ELSE 0 END DESC`,
|
||||
sql`similarity(${boards.name}, ${query}) DESC`,
|
||||
desc(boards.updatedAt),
|
||||
)
|
||||
.limit(Math.ceil(limit * 0.4));
|
||||
|
||||
// Search for cards
|
||||
const cardResults = await db
|
||||
.select({
|
||||
publicId: cards.publicId,
|
||||
title: cards.title,
|
||||
description: cards.description,
|
||||
boardPublicId: boards.publicId,
|
||||
boardName: boards.name,
|
||||
listName: lists.name,
|
||||
updatedAt: cards.updatedAt,
|
||||
createdAt: cards.createdAt,
|
||||
})
|
||||
.from(cards)
|
||||
.innerJoin(lists, eq(cards.listId, lists.id))
|
||||
.innerJoin(boards, eq(lists.boardId, boards.id))
|
||||
.where(
|
||||
and(
|
||||
eq(boards.workspaceId, workspaceId),
|
||||
or(
|
||||
ilike(cards.title, searchQuery),
|
||||
sql`similarity(${cards.title}, ${query}) > 0.2`,
|
||||
),
|
||||
isNull(cards.deletedAt),
|
||||
isNull(lists.deletedAt),
|
||||
isNull(boards.deletedAt),
|
||||
),
|
||||
)
|
||||
.orderBy(
|
||||
sql`CASE WHEN ${cards.title} ILIKE ${searchQuery} THEN 1 ELSE 0 END DESC`,
|
||||
sql`similarity(${cards.title}, ${query}) DESC`,
|
||||
desc(cards.updatedAt),
|
||||
)
|
||||
.limit(Math.floor(limit * 0.6));
|
||||
|
||||
// Combine results
|
||||
const allResults = [
|
||||
...boardResults.map((board) => ({ ...board, type: "board" as const })),
|
||||
...cardResults.map((card) => ({ ...card, type: "card" as const })),
|
||||
];
|
||||
|
||||
// Ensure we don't exceed the total limit
|
||||
return allResults.slice(0, limit);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user