Compare commits
7 Commits
feat/pro-f
...
fix/worksp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f3bd3684b6 | ||
|
|
c2ccb6b13b | ||
|
|
4ee1d6f2d5 | ||
|
|
2f88366418 | ||
|
|
4f7fa1a228 | ||
|
|
308cb22729 | ||
|
|
6c04a10b1f |
@@ -55,7 +55,7 @@ checksums:
|
||||
Billing%20portal/singular: dc3afa14ffe19f5920992a0c9d49d525
|
||||
Blog%20Post/singular: 38e027f212be445dc530e427fc642a20
|
||||
Board/singular: 101ff39aab674c033c15ab978d0d8bac
|
||||
Board%20analytics%20(coming%20soon)/singular: 3f648e6fe3849ee2ac5cdf410ac9ea06
|
||||
Board%20analytics/singular: 336a8c70a91adc49c15266167ee84cc0
|
||||
Board%20name%20cannot%20exceed%20100%20characters/singular: 985c0177744ec56d8dac84f66ec284ca
|
||||
Board%20name%20is%20required/singular: dbd0c6cc945ab19e702fc27f970a023b
|
||||
Board%20not%20found/singular: 5af9844595fa8aed5985066620435515
|
||||
@@ -113,6 +113,7 @@ checksums:
|
||||
Critical/singular: eb327cd411b50aee954f8d1d215d003a
|
||||
Current%20password%20is%20required/singular: 72536bca9598680027f2be8ce80ac280
|
||||
Custom%20domain/singular: b09e7a9c187b7163b4a6cfc78042fe42
|
||||
Custom%20URLs%20require%20upgrading%20to%20a%20Pro%20plan/singular: f7275e3b473b8f7b39dab6b37eb26fea
|
||||
Custom%20workspace%20URL/singular: 7ba841d0946eb04fa3d17d74365be37b
|
||||
Customer%20Support/singular: 50e3c77e22e41061ca85ea2f02625a2e
|
||||
Dark/singular: 73e6e208ba628b26e90fcf6dce15e1b2
|
||||
@@ -166,6 +167,7 @@ checksums:
|
||||
Error%20updating%20workspace%20name/singular: 46025f42a7d5eff689e9cb8bed14a1e4
|
||||
Error%20updating%20workspace%20URL/singular: 9da6c012e1b512d8c7fbd812626c4675
|
||||
Error%20upgrading%20subscription/singular: 57cc47581c7faaffb3b1721b6352b576
|
||||
Error%20upgrading%20to%20Pro/singular: 934c6867d9bdbe6099b2c0f5a3107f78
|
||||
Error%20uploading%20profile%20image/singular: 0ba02753a797a74c6ea7b622c9f69c71
|
||||
Everything%20in%20the%20free%20plan%2C%20plus%3A/singular: 62b44c4973b92b806c69a4b15e0256dc
|
||||
Everything%20you%20need%2C%20free%20forever.%20Unlimited%20boards%2C%20unlimited%20lists%2C%20unlimited%20cards.%20Upgrade%20any%20time./singular: fa21632ab1468edf10acda2fe7b71323
|
||||
@@ -231,6 +233,8 @@ checksums:
|
||||
Labels%20%26%20Filters/singular: 8f0bdd6084516f8241cb613178114390
|
||||
Language/singular: 277fd1a41cc237a437cd1d5e4a80463b
|
||||
Launch%20offer/singular: 624592ba2ecf647a3fe60d493c1ee71a
|
||||
Launch%20offer%3A%20Get%20unlimited%20members%20with%20Pro/singular: 8c1be80f5b2fcc112922282afbe30287
|
||||
Launch%20offer%3A%20unlimited%20seats%20for%20just%20%2429%2Fmonth%20with%20Pro/singular: 235d1cda21811c296afdc0dcc438cc24
|
||||
Learning/singular: 90e91da3f870f065f2da9aa9adf53514
|
||||
Legal/singular: 00d3f08da61a21887009819cf93fb414
|
||||
License/singular: ac2bcac75151e2fcd9eb768cea275a77
|
||||
@@ -367,6 +371,8 @@ checksums:
|
||||
This%20board%20URL%20has%20already%20been%20taken/singular: 1d8b40332a031b5b77a3658e48dd51ca
|
||||
This%20will%20result%20in%20the%20permanent%20deletion%20of%20all%20data%20associated%20with%20this%20workspace./singular: a31141558af793635c1ddd2fa0a33499
|
||||
This%20will%20result%20in%20the%20permanent%20deletion%20of%20all%20data%20associated%20with%20your%20account./singular: b49224632bd6c3b7f5e462912aeb1081
|
||||
This%20workspace%20URL%20has%20already%20been%20taken/singular: b455329e2a71da677acab91d3a00bad6
|
||||
This%20workspace%20URL%20is%20reserved/singular: 7e47c892b93d4334c1606010c06e875e
|
||||
This%20workspace%20username%20has%20already%20been%20taken/singular: b7eadb89c615874f416d9658d0428c4c
|
||||
To%20Do/singular: d60813ea824f373462471e092d136eed
|
||||
Toggle%20menu/singular: 29dea3e0b6238874f8c7a27619df8e36
|
||||
@@ -412,6 +418,7 @@ checksums:
|
||||
updated%20the%20title%20to%20%3C0%3E%7B0%7D%3C%2F0%3E/singular: aca196d729401d8adc5c8ca9d558840e
|
||||
Upgrade/singular: 63c3b52882e0d779859307d672c178c2
|
||||
Upgrade%20to%20Pro/singular: 972773025e763ddf53273df6d37a729a
|
||||
Upgrade%20to%20Pro%20(%2429%2Fmonth)/singular: 9a91ea70f5eb55aac96640bf0fd7feff
|
||||
Upgrade%20to%20Team%20Plan/singular: 40e2ef151266937f8bbe63b3d361f645
|
||||
Urgent/singular: e79afcd4398e52e10e7e8243a7eecabe
|
||||
URL%20can%20only%20contain%20letters%2C%20numbers%2C%20and%20hyphens/singular: 875d37d2d920f98ef60a314eda8a5d9a
|
||||
@@ -436,6 +443,7 @@ checksums:
|
||||
When%20Trello%20launched%20in%202011%2C%20it%20blew%20everyone%20away%20with%20its%20carefully%20designed%20simplicity%2C%20but%20over%20time%20(and%20atlassification)%20it%20lost%20its%20magic%20and%20grew%20into%20something%20closer%20to%20%22Jira%20Lite%22.%20This%20project%20is%20our%20attempt%20to%20recapture%20the%20original%20magic%20of%20Trello's%20simplicity%2C%20in%20open%20source./singular: 60a55e9bd16c3d1beff1a6c7633c5911
|
||||
Why%20make%20an%20open%20source%20Trello%3F/singular: 090833338ba8c64ef7a75e0f2615b34b
|
||||
Workspace/singular: b63ef0e99ee6f7fef6cbe4971ca6cf0f
|
||||
Workspace%20created%20successfully.%20You%20can%20upgrade%20later%20in%20settings./singular: 8bbaba9f82ff076a08185ada1ee7eb94
|
||||
Workspace%20deleted/singular: bc5c267ce3f04de94ff1379cf2ca48a3
|
||||
Workspace%20description/singular: 7159d620b7ef5c5afef734989a5be08b
|
||||
Workspace%20description%20cannot%20exceed%20280%20characters/singular: d0e83b9a0304d7c36cf8c85d98783ce2
|
||||
@@ -444,10 +452,12 @@ checksums:
|
||||
Workspace%20members/singular: 1857292f9567c556c781a23bd7e10544
|
||||
Workspace%20name/singular: 855614bbf862fd6a9f6a3e76943f92d4
|
||||
Workspace%20name%20cannot%20exceed%2024%20characters/singular: c8b8f79fb83abf8329cc34c1f51fcfc9
|
||||
Workspace%20name%20is%20required/singular: b8c5162dd08c4d941bc57f9d0cbee451
|
||||
Workspace%20name%20must%20be%20at%20least%203%20characters%20long/singular: e448ea97418d44b18b4c21c22b8ba779
|
||||
Workspace%20name%20updated/singular: 3206ea410ee1ea4182b27ac0d89f92a1
|
||||
Workspace%20slug%20updated/singular: 527b92711d38cb35b40741df43aef047
|
||||
Workspace%20URL/singular: f4397a838da0f3a44cbd3ebe408ed6c3
|
||||
workspace-url/singular: 2d034732ec536f3a2667f956fa50d394
|
||||
Writing/singular: 4f5f3ee3320c252921f80c42653c5d49
|
||||
Yearly/singular: 87f43e016c19cb25860f456549a2f431
|
||||
Yes%2C%20we%20offer%20an%20forever%20free%20plan%20for%20individual%20use.%20No%20restrictions%2C%20no%20paywalls%2C%20no%20limits./singular: 963cee303d0ff13c1719f4575e774fe3
|
||||
|
||||
@@ -1,30 +1,106 @@
|
||||
import { zodResolver } from "@hookform/resolvers/zod";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { useEffect } from "react";
|
||||
import { env } from "next-runtime-env";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useForm } from "react-hook-form";
|
||||
import { HiXMark } from "react-icons/hi2";
|
||||
import {
|
||||
HiBolt,
|
||||
HiCheck,
|
||||
HiCheckBadge,
|
||||
HiInformationCircle,
|
||||
HiXMark,
|
||||
} from "react-icons/hi2";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
import { z } from "zod";
|
||||
|
||||
import Button from "~/components/Button";
|
||||
import Input from "~/components/Input";
|
||||
import Toggle from "~/components/Toggle";
|
||||
import { useDebounce } from "~/hooks/useDebounce";
|
||||
import { useModal } from "~/providers/modal";
|
||||
import { usePopup } from "~/providers/popup";
|
||||
import { useWorkspace } from "~/providers/workspace";
|
||||
import { api } from "~/utils/api";
|
||||
import LoadingSpinner from "./LoadingSpinner";
|
||||
|
||||
interface FormValues {
|
||||
name: string;
|
||||
}
|
||||
const schema = z.object({
|
||||
name: z.string().min(1, { message: t`Workspace name is required` }),
|
||||
slug: z
|
||||
.string()
|
||||
.min(3, {
|
||||
message: t`URL must be at least 3 characters long`,
|
||||
})
|
||||
.max(24, { message: t`URL cannot exceed 24 characters` })
|
||||
.regex(/^(?![-]+$)[a-zA-Z0-9-]+$/, {
|
||||
message: t`URL can only contain letters, numbers, and hyphens`,
|
||||
})
|
||||
.optional()
|
||||
.or(z.literal("")),
|
||||
});
|
||||
|
||||
type FormValues = z.infer<typeof schema>;
|
||||
|
||||
export function NewWorkspaceForm() {
|
||||
const { closeModal } = useModal();
|
||||
const { showPopup } = usePopup();
|
||||
const { switchWorkspace } = useWorkspace();
|
||||
const { register, handleSubmit } = useForm<FormValues>();
|
||||
const { switchWorkspace, availableWorkspaces } = useWorkspace();
|
||||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
formState: { errors },
|
||||
watch,
|
||||
trigger,
|
||||
clearErrors,
|
||||
setValue,
|
||||
} = useForm<FormValues>({
|
||||
resolver: zodResolver(schema),
|
||||
defaultValues: {
|
||||
name: "",
|
||||
slug: "",
|
||||
},
|
||||
mode: "onSubmit",
|
||||
});
|
||||
const utils = api.useUtils();
|
||||
|
||||
const hasAvailableWorkspaces = availableWorkspaces.length > 0;
|
||||
|
||||
const isCloudEnv = env("NEXT_PUBLIC_KAN_ENV") === "cloud";
|
||||
|
||||
const slug = watch("slug");
|
||||
const [debouncedSlug] = useDebounce(slug, 500);
|
||||
const isTyping = slug !== debouncedSlug;
|
||||
|
||||
// Pro toggle state management
|
||||
const [isProToggleEnabled, setIsProToggleEnabled] = useState(false);
|
||||
const [lastAvailableSlug, setLastAvailableSlug] = useState<string>("");
|
||||
|
||||
// Validate slug only after debounce
|
||||
useEffect(() => {
|
||||
if (isTyping) {
|
||||
// Clear errors while typing
|
||||
clearErrors("slug");
|
||||
} else if (debouncedSlug) {
|
||||
// Validate after debounce
|
||||
void trigger("slug");
|
||||
}
|
||||
}, [isTyping, debouncedSlug, trigger, clearErrors]);
|
||||
|
||||
const checkWorkspaceSlugAvailability =
|
||||
api.workspace.checkSlugAvailability.useQuery(
|
||||
{
|
||||
workspaceSlug: debouncedSlug ?? "",
|
||||
},
|
||||
{
|
||||
enabled: !!debouncedSlug && debouncedSlug.length >= 3 && !errors.slug,
|
||||
},
|
||||
);
|
||||
|
||||
const isWorkspaceSlugAvailable = checkWorkspaceSlugAvailability.data;
|
||||
|
||||
const createWorkspace = api.workspace.create.useMutation({
|
||||
onSuccess: (values) => {
|
||||
onSuccess: async (values, variables) => {
|
||||
if (values.publicId && values.name) {
|
||||
utils.workspace.all.invalidate();
|
||||
void utils.workspace.all.invalidate();
|
||||
switchWorkspace({
|
||||
publicId: values.publicId,
|
||||
name: values.name,
|
||||
@@ -33,6 +109,43 @@ export function NewWorkspaceForm() {
|
||||
plan: values.plan,
|
||||
role: "admin",
|
||||
});
|
||||
|
||||
// If in cloud and Pro toggle is enabled, create checkout session for pro
|
||||
if (env("NEXT_PUBLIC_KAN_ENV") === "cloud" && isProToggleEnabled) {
|
||||
try {
|
||||
const response = await fetch(
|
||||
"/api/stripe/create_checkout_session",
|
||||
{
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
slug: slug || undefined,
|
||||
workspacePublicId: values.publicId,
|
||||
cancelUrl: "/settings?upgrade=pro",
|
||||
successUrl: "/boards",
|
||||
}),
|
||||
},
|
||||
);
|
||||
|
||||
const data = await response.json();
|
||||
const url = (data as { url: string }).url;
|
||||
|
||||
if (url) {
|
||||
window.location.href = url;
|
||||
return; // Don't close modal if redirecting to checkout
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error creating checkout session:", error);
|
||||
showPopup({
|
||||
header: t`Error upgrading to Pro`,
|
||||
message: t`Workspace created successfully. You can upgrade later in settings.`,
|
||||
icon: "warning",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
closeModal();
|
||||
}
|
||||
},
|
||||
@@ -51,12 +164,74 @@ export function NewWorkspaceForm() {
|
||||
if (nameElement) nameElement.focus();
|
||||
}, []);
|
||||
|
||||
const [shouldShowBenefits, setShouldShowBenefits] = useState(false);
|
||||
|
||||
const isValidSlug = slug && slug.length >= 3 && !errors.slug;
|
||||
|
||||
useEffect(() => {
|
||||
if (
|
||||
isCloudEnv &&
|
||||
!checkWorkspaceSlugAvailability.isPending &&
|
||||
isValidSlug
|
||||
) {
|
||||
const isAvailable = isWorkspaceSlugAvailable?.isAvailable === true;
|
||||
setShouldShowBenefits(isAvailable);
|
||||
|
||||
// Automatically enable Pro toggle when slug is available
|
||||
if (isAvailable) {
|
||||
setIsProToggleEnabled(true);
|
||||
setLastAvailableSlug(slug);
|
||||
}
|
||||
}
|
||||
}, [
|
||||
isValidSlug,
|
||||
isWorkspaceSlugAvailable?.isAvailable,
|
||||
checkWorkspaceSlugAvailability.isPending,
|
||||
slug,
|
||||
isCloudEnv,
|
||||
]);
|
||||
|
||||
// Reset benefits when slug becomes invalid
|
||||
useEffect(() => {
|
||||
if (!isValidSlug) {
|
||||
setShouldShowBenefits(false);
|
||||
}
|
||||
}, [isValidSlug]);
|
||||
|
||||
// Handle Pro toggle changes
|
||||
const handleProToggleChange = () => {
|
||||
if (isProToggleEnabled) {
|
||||
// Turning off: clear the slug and disable Pro
|
||||
setValue("slug", "");
|
||||
setIsProToggleEnabled(false);
|
||||
} else {
|
||||
// Turning on: restore the last available slug if we have one
|
||||
if (lastAvailableSlug) {
|
||||
setValue("slug", lastAvailableSlug);
|
||||
}
|
||||
setIsProToggleEnabled(true);
|
||||
}
|
||||
};
|
||||
|
||||
const showProBenefits = isProToggleEnabled;
|
||||
|
||||
const onSubmit = (values: FormValues) => {
|
||||
// Don't submit if slug is provided but not available
|
||||
if (values.slug && isWorkspaceSlugAvailable?.isAvailable === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
createWorkspace.mutate({
|
||||
name: values.name,
|
||||
slug: !isCloudEnv && values.slug ? values.slug : undefined,
|
||||
});
|
||||
};
|
||||
|
||||
const isSlugAvailable =
|
||||
isValidSlug &&
|
||||
isWorkspaceSlugAvailable?.isAvailable &&
|
||||
!isWorkspaceSlugAvailable?.isReserved;
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit(onSubmit)}>
|
||||
<div className="px-5 pt-5">
|
||||
@@ -66,7 +241,10 @@ export function NewWorkspaceForm() {
|
||||
</h2>
|
||||
<button
|
||||
type="button"
|
||||
className="rounded p-1 hover:bg-light-200 focus:outline-none dark:hover:bg-dark-300"
|
||||
className={twMerge(
|
||||
"rounded p-1 hover:bg-light-200 focus:outline-none dark:hover:bg-dark-300",
|
||||
!hasAvailableWorkspaces && "invisible",
|
||||
)}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
closeModal();
|
||||
@@ -80,6 +258,7 @@ export function NewWorkspaceForm() {
|
||||
id="workspace-name"
|
||||
placeholder={t`Workspace name`}
|
||||
{...register("name")}
|
||||
errorMessage={errors.name?.message}
|
||||
onKeyDown={async (e) => {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
@@ -87,10 +266,121 @@ export function NewWorkspaceForm() {
|
||||
}
|
||||
}}
|
||||
/>
|
||||
|
||||
<div className="mt-4">
|
||||
<Input
|
||||
id="workspace-slug"
|
||||
placeholder={t`workspace-url`}
|
||||
{...register("slug")}
|
||||
className={`${
|
||||
isSlugAvailable
|
||||
? "focus:ring-green-500 dark:focus:ring-green-500"
|
||||
: ""
|
||||
}`}
|
||||
errorMessage={
|
||||
errors.slug?.message ??
|
||||
(isWorkspaceSlugAvailable?.isAvailable === false &&
|
||||
isWorkspaceSlugAvailable?.isReserved === false
|
||||
? t`This workspace URL has already been taken`
|
||||
: isWorkspaceSlugAvailable?.isReserved
|
||||
? t`This workspace URL is reserved`
|
||||
: undefined)
|
||||
}
|
||||
prefix={
|
||||
env("NEXT_PUBLIC_KAN_ENV") === "cloud"
|
||||
? "kan.bn/"
|
||||
: `${env("NEXT_PUBLIC_BASE_URL")}/`
|
||||
}
|
||||
iconRight={
|
||||
slug && slug.length >= 3 && !errors.slug ? (
|
||||
isWorkspaceSlugAvailable?.isAvailable ? (
|
||||
<HiCheck className="h-4 w-4 text-green-500" />
|
||||
) : checkWorkspaceSlugAvailability.isPending || isTyping ? (
|
||||
<LoadingSpinner />
|
||||
) : null
|
||||
) : null
|
||||
}
|
||||
onKeyDown={async (e) => {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
await handleSubmit(onSubmit)();
|
||||
}
|
||||
}}
|
||||
/>
|
||||
|
||||
{slug && slug.length >= 3 && shouldShowBenefits && (
|
||||
<div className="mt-2 flex items-center gap-1">
|
||||
<HiInformationCircle className="h-4 w-4 text-dark-900" />
|
||||
<p className="text-xs text-gray-500 dark:text-dark-900">
|
||||
{t`Custom URLs require upgrading to a Pro plan`}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{showProBenefits && (
|
||||
<div className="mt-6">
|
||||
<div className="rounded-md bg-light-100 p-3 text-xs text-light-900 dark:bg-dark-200 dark:text-dark-900">
|
||||
<div className="space-y-3">
|
||||
<div className="flex items-center space-x-3">
|
||||
<HiCheckBadge className="h-[18px] w-[18px] flex-shrink-0 text-light-1000 dark:text-dark-950" />
|
||||
<div className="flex items-center space-x-2">
|
||||
<span className="text-xs text-neutral-900 dark:text-dark-1000">
|
||||
{t`Unlimited members`}
|
||||
</span>
|
||||
<span className="inline-flex items-center rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-600 ring-1 ring-inset ring-emerald-500/20 dark:text-emerald-400 sm:text-[10px]">
|
||||
{t`Launch offer`}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center space-x-3">
|
||||
<HiCheckBadge className="h-[18px] w-[18px] flex-shrink-0 text-light-1000 dark:text-dark-950" />
|
||||
<span className="text-xs text-neutral-900 dark:text-dark-1000">
|
||||
{t`Custom workspace URL`}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center space-x-3">
|
||||
<HiCheckBadge className="h-[18px] w-[18px] flex-shrink-0 text-light-1000 dark:text-dark-950" />
|
||||
<div className="flex items-center space-x-2">
|
||||
<span className="text-xs text-neutral-900 dark:text-dark-1000">
|
||||
{t`Board analytics`}
|
||||
</span>
|
||||
<span className="inline-flex items-center rounded-full bg-gray-500/10 px-2 py-0.5 text-[10px] font-medium text-gray-600 ring-1 ring-inset ring-gray-500/20 dark:text-gray-400 sm:text-[10px]">
|
||||
{t`Coming soon`}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="mt-12 flex items-center justify-end border-t border-light-600 px-5 pb-5 pt-5 dark:border-dark-600">
|
||||
<div
|
||||
className={twMerge(
|
||||
"mt-6 flex items-center justify-end border-t border-light-600 px-5 pb-5 pt-5 dark:border-dark-600",
|
||||
!showProBenefits && "mt-12",
|
||||
)}
|
||||
>
|
||||
{/* Pro Toggle - only show in cloud environment */}
|
||||
{isCloudEnv && (
|
||||
<Toggle
|
||||
isChecked={isProToggleEnabled}
|
||||
onChange={handleProToggleChange}
|
||||
label={t`Upgrade to Pro ($29/month)`}
|
||||
/>
|
||||
)}
|
||||
<div>
|
||||
<Button type="submit" isLoading={createWorkspace.isPending}>
|
||||
<Button
|
||||
type="submit"
|
||||
isLoading={createWorkspace.isPending}
|
||||
disabled={
|
||||
createWorkspace.isPending ||
|
||||
(!!slug &&
|
||||
(checkWorkspaceSlugAvailability.isPending ||
|
||||
isWorkspaceSlugAvailable?.isAvailable === false ||
|
||||
isTyping))
|
||||
}
|
||||
>
|
||||
{t`Create workspace`}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
@@ -20,12 +20,12 @@ export default function WorkspaceMenu({
|
||||
<Menu as="div" className="relative inline-block w-full pb-3 text-left">
|
||||
<div>
|
||||
{isLoading ? (
|
||||
<div className={twMerge("mb-1", isCollapsed && "md:flex md:p-1.5")}>
|
||||
<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 && "hidden md:block",
|
||||
isCollapsed && "md:hidden",
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
@@ -44,7 +44,7 @@ export default function WorkspaceMenu({
|
||||
</span>
|
||||
<span
|
||||
className={twMerge(
|
||||
"ml-2 text-sm font-bold text-neutral-900 dark:text-dark-1000",
|
||||
"ml-2 truncate text-sm font-bold text-neutral-900 dark:text-dark-1000",
|
||||
isCollapsed && "md:hidden",
|
||||
)}
|
||||
>
|
||||
@@ -87,17 +87,17 @@ export default function WorkspaceMenu({
|
||||
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>
|
||||
<span className="inline-flex h-5 w-5 items-center justify-center rounded-[5px] bg-indigo-700">
|
||||
<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 text-xs font-medium">
|
||||
<span className="ml-2 truncate text-xs font-medium">
|
||||
{availableWorkspace.name}
|
||||
</span>
|
||||
</div>
|
||||
{workspace.name === availableWorkspace.name && (
|
||||
{workspace.publicId === availableWorkspace.publicId && (
|
||||
<span>
|
||||
<HiCheck className="h-4 w-4" aria-hidden="true" />
|
||||
</span>
|
||||
|
||||
@@ -148,7 +148,7 @@ msgstr "Alle Systeme funktionieren"
|
||||
msgid "Already have an account? <0><1>Sign in</1></0>"
|
||||
msgstr "Du hast bereits ein Konto? <0><1>Anmelden</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:113
|
||||
#: src/views/settings/index.tsx:127
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
msgstr "Beim Trennen deines Trello-Kontos ist ein Fehler aufgetreten."
|
||||
|
||||
@@ -156,7 +156,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/settings/index.tsx:282
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "API keys"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
@@ -227,11 +227,11 @@ msgid "billed monthly"
|
||||
msgstr "monatlich abgerechnet"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:221
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "Billing"
|
||||
msgstr "Abrechnung"
|
||||
|
||||
#: src/views/settings/index.tsx:231
|
||||
#: src/views/settings/index.tsx:245
|
||||
msgid "Billing portal"
|
||||
msgstr "Abrechnungsportal"
|
||||
|
||||
@@ -243,9 +243,10 @@ msgstr "Blogbeitrag"
|
||||
msgid "Board"
|
||||
msgstr "Board"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
|
||||
msgid "Board analytics (coming soon)"
|
||||
msgstr "Board-Analytik (demnächst verfügbar)"
|
||||
#: src/components/NewWorkspaceForm.tsx:346
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:81
|
||||
msgid "Board analytics"
|
||||
msgstr "Board-Analytik"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
@@ -315,7 +316,7 @@ msgstr "Fehlerbericht"
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:104
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
@@ -329,12 +330,12 @@ msgstr "Kartentitel"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:314
|
||||
#: src/views/settings/index.tsx:324
|
||||
#: src/views/settings/index.tsx:328
|
||||
#: src/views/settings/index.tsx:338
|
||||
msgid "Change Password"
|
||||
msgstr "Passwort ändern"
|
||||
|
||||
#: src/views/settings/index.tsx:213
|
||||
#: src/views/settings/index.tsx:227
|
||||
msgid "Change the language of the app."
|
||||
msgstr "Ändere die Sprache der App."
|
||||
|
||||
@@ -364,7 +365,9 @@ msgstr "Code-Review"
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Arbeite nahtlos mit deinem Team zusammen."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:349
|
||||
#: src/views/home/components/Features.tsx:66
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:84
|
||||
msgid "Coming soon"
|
||||
msgstr "Demnächst verfügbar"
|
||||
|
||||
@@ -398,7 +401,7 @@ msgid "Confirm your new password"
|
||||
msgstr "Bestätigen Sie Ihr neues Passwort"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:258
|
||||
#: src/views/settings/index.tsx:272
|
||||
msgid "Connect Trello"
|
||||
msgstr "Trello verbinden"
|
||||
|
||||
@@ -406,7 +409,7 @@ msgstr "Trello verbinden"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Verbinde deine Lieblingstools, um deinen Arbeitsablauf zu optimieren."
|
||||
|
||||
#: src/views/settings/index.tsx:245
|
||||
#: src/views/settings/index.tsx:259
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Verbinde dein Trello-Konto, um Boards zu importieren."
|
||||
|
||||
@@ -478,7 +481,7 @@ msgstr "Neues Label erstellen"
|
||||
msgid "Create new list"
|
||||
msgstr "Neue Liste erstellen"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:94
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
msgid "Create workspace"
|
||||
msgstr "Arbeitsbereich erstellen"
|
||||
@@ -499,6 +502,11 @@ msgstr "Aktuelles Passwort ist erforderlich"
|
||||
msgid "Custom domain"
|
||||
msgstr "Benutzerdefinierte Domain"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:315
|
||||
msgid "Custom URLs require upgrading to a Pro plan"
|
||||
msgstr "Benutzerdefinierte URLs erfordern ein Upgrade auf einen Pro-Plan"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:339
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "Benutzerdefinierte Workspace-URL"
|
||||
@@ -520,8 +528,8 @@ msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:332
|
||||
#: src/views/settings/index.tsx:342
|
||||
#: src/views/settings/index.tsx:346
|
||||
#: src/views/settings/index.tsx:356
|
||||
msgid "Delete account"
|
||||
msgstr "Konto löschen"
|
||||
|
||||
@@ -542,8 +550,8 @@ msgid "Delete list"
|
||||
msgstr "Liste löschen"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:295
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:320
|
||||
msgid "Delete workspace"
|
||||
msgstr "Workspace löschen"
|
||||
|
||||
@@ -569,7 +577,7 @@ msgstr "hat Checklistenelement <0>{0}</0> gelöscht"
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:273
|
||||
#: src/views/settings/index.tsx:287
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Trello trennen"
|
||||
|
||||
@@ -577,7 +585,7 @@ msgstr "Trello trennen"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Diskutiere und arbeite gemeinsam an Karten."
|
||||
|
||||
#: src/views/settings/index.tsx:162
|
||||
#: src/views/settings/index.tsx:176
|
||||
msgid "Display name"
|
||||
msgstr "Anzeigename"
|
||||
|
||||
@@ -695,7 +703,7 @@ msgstr "Fehler beim Löschen des Labels"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Fehler beim Löschen des Arbeitsbereichs"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/views/settings/index.tsx:126
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Fehler beim Trennen von Trello"
|
||||
|
||||
@@ -729,6 +737,10 @@ msgstr "Fehler beim Aktualisieren der Workspace-URL"
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Fehler beim Upgrade des Abonnements"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:142
|
||||
msgid "Error upgrading to Pro"
|
||||
msgstr "Fehler beim Upgrade auf Pro"
|
||||
|
||||
#: src/views/settings/components/Avatar.tsx:56
|
||||
#: src/views/settings/components/Avatar.tsx:97
|
||||
msgid "Error uploading profile image"
|
||||
@@ -796,7 +808,7 @@ msgid "Free"
|
||||
msgstr "Kostenlos"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Free Plan"
|
||||
msgstr "Kostenloser Plan"
|
||||
|
||||
@@ -955,7 +967,7 @@ msgstr "Vorstellungsgespräch"
|
||||
msgid "Invalid email address"
|
||||
msgstr "Ungültige E-Mail-Adresse"
|
||||
|
||||
#: src/views/members/index.tsx:201
|
||||
#: src/views/members/index.tsx:221
|
||||
msgid "Invite"
|
||||
msgstr "Einladen"
|
||||
|
||||
@@ -999,14 +1011,23 @@ msgstr "Labels"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Labels & Filter"
|
||||
|
||||
#: src/views/settings/index.tsx:210
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:332
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Einführungsangebot"
|
||||
|
||||
#: src/views/members/index.tsx:191
|
||||
msgid "Launch offer: Get unlimited members with Pro"
|
||||
msgstr "Einführungsangebot: Erhalten Sie unbegrenzte Mitglieder mit Pro"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:99
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Einführungsangebot: unbegrenzte Plätze für nur $29/Monat mit Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Lernen"
|
||||
@@ -1072,12 +1093,12 @@ msgstr "Mittlere Priorität"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:172
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Mitglieder"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:168
|
||||
#: src/views/members/index.tsx:173
|
||||
msgid "Members | {0}"
|
||||
msgstr "Mitglieder | {0}"
|
||||
|
||||
@@ -1149,7 +1170,7 @@ msgstr "Neues Passwort muss sich vom aktuellen Passwort unterscheiden"
|
||||
msgid "New Ticket"
|
||||
msgstr "Neues Ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:65
|
||||
#: src/components/NewWorkspaceForm.tsx:240
|
||||
msgid "New workspace"
|
||||
msgstr "Neuer Workspace"
|
||||
|
||||
@@ -1185,11 +1206,11 @@ msgstr "Angebot"
|
||||
msgid "Onboarding"
|
||||
msgstr "Einarbeitung"
|
||||
|
||||
#: src/views/settings/index.tsx:335
|
||||
#: src/views/settings/index.tsx:349
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Sobald Sie Ihr Konto löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden."
|
||||
|
||||
#: src/views/settings/index.tsx:298
|
||||
#: src/views/settings/index.tsx:312
|
||||
msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
|
||||
msgstr "Sobald Sie Ihren Arbeitsbereich löschen, gibt es kein Zurück mehr. Diese Aktion kann nicht rückgängig gemacht werden."
|
||||
|
||||
@@ -1221,11 +1242,11 @@ msgstr "Passwort muss mindestens 8 Zeichen lang sein"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Passwörter stimmen nicht überein"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:102
|
||||
msgid "Payment frequency"
|
||||
msgstr "Zahlungshäufigkeit"
|
||||
|
||||
#: src/views/members/index.tsx:129
|
||||
#: src/views/members/index.tsx:134
|
||||
msgid "Pending"
|
||||
msgstr "Ausstehend"
|
||||
|
||||
@@ -1264,7 +1285,7 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:26
|
||||
#: src/components/FeedbackModal.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:42
|
||||
#: src/components/NewWorkspaceForm.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:174
|
||||
#: src/views/board/components/NewListForm.tsx:78
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||
@@ -1308,7 +1329,7 @@ msgid "Pricing"
|
||||
msgstr "Preise"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:91
|
||||
msgid "Priority email support"
|
||||
msgstr "Prioritäts-E-Mail-Support"
|
||||
|
||||
@@ -1320,7 +1341,7 @@ msgstr "Datenschutzrichtlinie"
|
||||
msgid "Private"
|
||||
msgstr "Privat"
|
||||
|
||||
#: src/views/members/index.tsx:186
|
||||
#: src/views/members/index.tsx:205
|
||||
msgid "Pro Plan"
|
||||
msgstr "Pro-Plan"
|
||||
|
||||
@@ -1332,7 +1353,7 @@ msgstr "Pro-Plan ∞"
|
||||
msgid "Profile image updated"
|
||||
msgstr "Profilbild aktualisiert"
|
||||
|
||||
#: src/views/settings/index.tsx:157
|
||||
#: src/views/settings/index.tsx:171
|
||||
msgid "Profile picture"
|
||||
msgstr "Profilbild"
|
||||
|
||||
@@ -1368,7 +1389,7 @@ msgstr "Remote"
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
|
||||
#: src/views/members/index.tsx:143
|
||||
#: src/views/members/index.tsx:148
|
||||
msgid "Remove member"
|
||||
msgstr "Mitglied entfernen"
|
||||
|
||||
@@ -1424,7 +1445,7 @@ msgstr "Widerrufen"
|
||||
msgid "Roadmap"
|
||||
msgstr "Roadmap"
|
||||
|
||||
#: src/views/members/index.tsx:223
|
||||
#: src/views/members/index.tsx:243
|
||||
msgid "Role"
|
||||
msgstr "Rolle"
|
||||
|
||||
@@ -1473,12 +1494,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:165
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:147
|
||||
#: src/views/settings/index.tsx:161
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Einstellungen | {0}"
|
||||
|
||||
@@ -1546,7 +1567,7 @@ msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
#: src/views/members/index.tsx:207
|
||||
msgid "Team Plan"
|
||||
msgstr "Team-Plan"
|
||||
|
||||
@@ -1614,6 +1635,14 @@ msgstr "Dies führt zur permanenten Löschung aller mit diesem Workspace verbund
|
||||
msgid "This will result in the permanent deletion of all data associated with your account."
|
||||
msgstr "Dies führt zur permanenten Löschung aller mit deinem Konto verbundenen Daten."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:284
|
||||
msgid "This workspace URL has already been taken"
|
||||
msgstr "Diese Workspace-URL ist bereits vergeben"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:286
|
||||
msgid "This workspace URL is reserved"
|
||||
msgstr "Diese Workspace-URL ist reserviert"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:123
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Dieser Workspace-Benutzername ist bereits vergeben"
|
||||
@@ -1631,7 +1660,7 @@ msgstr "Menü umschalten"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
msgstr "Verfolge alle kartenänderungen mit detaillierter aktivitätshistorie."
|
||||
|
||||
#: src/views/settings/index.tsx:105
|
||||
#: src/views/settings/index.tsx:119
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello getrennt"
|
||||
|
||||
@@ -1663,7 +1692,7 @@ msgstr "Checkliste kann nicht erstellt werden"
|
||||
msgid "Unable to create list"
|
||||
msgstr "Liste konnte nicht erstellt werden"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:154
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Workspace konnte nicht erstellt werden"
|
||||
|
||||
@@ -1762,6 +1791,7 @@ msgstr "Unbegrenzte kommentare"
|
||||
msgid "Unlimited lists"
|
||||
msgstr "Unbegrenzte listen"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:329
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
|
||||
msgid "Unlimited members"
|
||||
msgstr "Unbegrenzte Mitglieder"
|
||||
@@ -1795,15 +1825,19 @@ msgstr "hat den Titel aktualisiert"
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "hat den Titel in <0>{0}</0> geändert"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:99
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:109
|
||||
msgid "Upgrade"
|
||||
msgstr "Upgrade"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:202
|
||||
#: src/views/settings/index.tsx:216
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Upgrade auf Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:369
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Upgrade auf Pro ($29/Monat)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Upgrade auf Team-Plan"
|
||||
@@ -1813,14 +1847,17 @@ msgstr "Upgrade auf Team-Plan"
|
||||
msgid "Urgent"
|
||||
msgstr "Dringend"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:35
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "URL darf nur Buchstaben, Zahlen und Bindestriche enthalten"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:33
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:34
|
||||
msgid "URL cannot exceed 24 characters"
|
||||
msgstr "URL darf nicht länger als 24 Zeichen sein"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:31
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:32
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "URL muss mindestens 3 Zeichen lang sein"
|
||||
@@ -1829,7 +1866,7 @@ msgstr "URL muss mindestens 3 Zeichen lang sein"
|
||||
msgid "Use template"
|
||||
msgstr "Vorlage verwenden"
|
||||
|
||||
#: src/views/members/index.tsx:217
|
||||
#: src/views/members/index.tsx:237
|
||||
msgid "User"
|
||||
msgstr "Benutzer"
|
||||
|
||||
@@ -1841,11 +1878,11 @@ msgstr "Benutzer ist bereits Mitglied dieses Arbeitsbereichs"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:285
|
||||
#: src/views/settings/index.tsx:299
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "API-Schlüssel anzeigen und verwalten."
|
||||
|
||||
#: src/views/settings/index.tsx:224
|
||||
#: src/views/settings/index.tsx:238
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Verwalte deine Abrechnung und dein Abonnement."
|
||||
|
||||
@@ -1901,11 +1938,15 @@ msgstr "Warum ein open source Trello entwickeln?"
|
||||
msgid "Workspace"
|
||||
msgstr "Arbeitsbereich"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:143
|
||||
msgid "Workspace created successfully. You can upgrade later in settings."
|
||||
msgstr "Workspace erfolgreich erstellt. Du kannst später in den Einstellungen upgraden."
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:26
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Workspace gelöscht"
|
||||
|
||||
#: src/views/settings/index.tsx:188
|
||||
#: src/views/settings/index.tsx:202
|
||||
msgid "Workspace description"
|
||||
msgstr "Workspace-Beschreibung"
|
||||
|
||||
@@ -1926,8 +1967,8 @@ msgstr "Workspace-Beschreibung aktualisiert"
|
||||
msgid "Workspace members"
|
||||
msgstr "Workspace-mitglieder"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:169
|
||||
#: src/components/NewWorkspaceForm.tsx:259
|
||||
#: src/views/settings/index.tsx:183
|
||||
msgid "Workspace name"
|
||||
msgstr "Name des Workspaces"
|
||||
|
||||
@@ -1935,6 +1976,10 @@ msgstr "Name des Workspaces"
|
||||
msgid "Workspace name cannot exceed 24 characters"
|
||||
msgstr "Der Workspace-Name darf nicht länger als 24 Zeichen sein"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:27
|
||||
msgid "Workspace name is required"
|
||||
msgstr "Workspace-Name ist erforderlich"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:14
|
||||
msgid "Workspace name must be at least 3 characters long"
|
||||
msgstr "Der Workspace-Name muss mindestens 3 Zeichen lang sein"
|
||||
@@ -1947,10 +1992,14 @@ msgstr "Workspace-Name aktualisiert"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Workspace-Slug aktualisiert"
|
||||
|
||||
#: src/views/settings/index.tsx:178
|
||||
#: src/views/settings/index.tsx:192
|
||||
msgid "Workspace URL"
|
||||
msgstr "Workspace-URL"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:273
|
||||
msgid "workspace-url"
|
||||
msgstr "workspace-url"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Schreiben"
|
||||
@@ -1963,7 +2012,7 @@ msgstr "Jährlich"
|
||||
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
|
||||
msgstr "Ja, wir bieten einen dauerhaft kostenlosen plan für die individuelle nutzung an. Keine einschränkungen, keine paywalls, keine limits."
|
||||
|
||||
#: src/views/settings/index.tsx:317
|
||||
#: src/views/settings/index.tsx:331
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Sie sind dabei, Ihr Passwort zu ändern."
|
||||
|
||||
@@ -2011,11 +2060,11 @@ msgstr "Ihr Passwort wurde geändert."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Dein Profilbild wurde aktualisiert."
|
||||
|
||||
#: src/views/settings/index.tsx:106
|
||||
#: src/views/settings/index.tsx:120
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Dein Trello-Konto wurde getrennt."
|
||||
|
||||
#: src/views/settings/index.tsx:267
|
||||
#: src/views/settings/index.tsx:281
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Dein Trello-Konto ist verbunden."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -172,7 +172,7 @@ msgstr "All systems operational"
|
||||
msgid "Already have an account? <0><1>Sign in</1></0>"
|
||||
msgstr "Already have an account? <0><1>Sign in</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:113
|
||||
#: src/views/settings/index.tsx:127
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
msgstr "An error occurred while disconnecting your Trello account."
|
||||
|
||||
@@ -180,7 +180,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/settings/index.tsx:282
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "API keys"
|
||||
msgstr "API keys"
|
||||
|
||||
@@ -263,11 +263,11 @@ msgid "billed monthly"
|
||||
msgstr "billed monthly"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:221
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "Billing"
|
||||
msgstr "Billing"
|
||||
|
||||
#: src/views/settings/index.tsx:231
|
||||
#: src/views/settings/index.tsx:245
|
||||
msgid "Billing portal"
|
||||
msgstr "Billing portal"
|
||||
|
||||
@@ -279,9 +279,15 @@ msgstr "Blog Post"
|
||||
msgid "Board"
|
||||
msgstr "Board"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:346
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:81
|
||||
msgid "Board analytics"
|
||||
msgstr "Board analytics"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:310
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
|
||||
msgid "Board analytics (coming soon)"
|
||||
msgstr "Board analytics (coming soon)"
|
||||
#~ msgid "Board analytics (coming soon)"
|
||||
#~ msgstr "Board analytics (coming soon)"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
@@ -359,7 +365,7 @@ msgstr "Bug Report"
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:104
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
@@ -373,12 +379,12 @@ msgstr "Card title"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:314
|
||||
#: src/views/settings/index.tsx:324
|
||||
#: src/views/settings/index.tsx:328
|
||||
#: src/views/settings/index.tsx:338
|
||||
msgid "Change Password"
|
||||
msgstr "Change Password"
|
||||
|
||||
#: src/views/settings/index.tsx:213
|
||||
#: src/views/settings/index.tsx:227
|
||||
msgid "Change the language of the app."
|
||||
msgstr "Change the language of the app."
|
||||
|
||||
@@ -408,7 +414,9 @@ msgstr "Code Review"
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Collaborate seamlessly with your team."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:349
|
||||
#: src/views/home/components/Features.tsx:66
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:84
|
||||
msgid "Coming soon"
|
||||
msgstr "Coming soon"
|
||||
|
||||
@@ -446,7 +454,7 @@ msgid "Confirm your new password"
|
||||
msgstr "Confirm your new password"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:258
|
||||
#: src/views/settings/index.tsx:272
|
||||
msgid "Connect Trello"
|
||||
msgstr "Connect Trello"
|
||||
|
||||
@@ -454,7 +462,7 @@ msgstr "Connect Trello"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Connect your favorite tools to streamline your workflow."
|
||||
|
||||
#: src/views/settings/index.tsx:245
|
||||
#: src/views/settings/index.tsx:259
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Connect your Trello account to import boards."
|
||||
|
||||
@@ -534,7 +542,11 @@ msgstr "Create new label"
|
||||
msgid "Create new list"
|
||||
msgstr "Create new list"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:94
|
||||
#: src/components/NewWorkspaceForm.tsx:337
|
||||
#~ msgid "Create Pro workspace"
|
||||
#~ msgstr "Create Pro workspace"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
msgid "Create workspace"
|
||||
msgstr "Create workspace"
|
||||
@@ -559,6 +571,15 @@ msgstr "Custom domain"
|
||||
#~ msgid "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
#~ msgstr "Custom URLs are a premium feature. You'll be directed to upgrade your account."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:280
|
||||
#~ msgid "Custom URLs require Pro plan ($29/month)"
|
||||
#~ msgstr "Custom URLs require Pro plan ($29/month)"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:315
|
||||
msgid "Custom URLs require upgrading to a Pro plan"
|
||||
msgstr "Custom URLs require upgrading to a Pro plan"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:339
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "Custom workspace URL"
|
||||
@@ -580,8 +601,8 @@ msgid "Delete"
|
||||
msgstr "Delete"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:332
|
||||
#: src/views/settings/index.tsx:342
|
||||
#: src/views/settings/index.tsx:346
|
||||
#: src/views/settings/index.tsx:356
|
||||
msgid "Delete account"
|
||||
msgstr "Delete account"
|
||||
|
||||
@@ -602,8 +623,8 @@ msgid "Delete list"
|
||||
msgstr "Delete list"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:295
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:320
|
||||
msgid "Delete workspace"
|
||||
msgstr "Delete workspace"
|
||||
|
||||
@@ -629,7 +650,7 @@ msgstr "deleted checklist item <0>{0}</0>"
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:273
|
||||
#: src/views/settings/index.tsx:287
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Disconnect Trello"
|
||||
|
||||
@@ -637,7 +658,7 @@ msgstr "Disconnect Trello"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Discuss and collaborate on cards."
|
||||
|
||||
#: src/views/settings/index.tsx:162
|
||||
#: src/views/settings/index.tsx:176
|
||||
msgid "Display name"
|
||||
msgstr "Display name"
|
||||
|
||||
@@ -755,7 +776,7 @@ msgstr "Error deleting label"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Error deleting workspace"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/views/settings/index.tsx:126
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Error disconnecting Trello"
|
||||
|
||||
@@ -789,6 +810,10 @@ msgstr "Error updating workspace URL"
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Error upgrading subscription"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:142
|
||||
msgid "Error upgrading to Pro"
|
||||
msgstr "Error upgrading to Pro"
|
||||
|
||||
#: src/views/settings/components/Avatar.tsx:56
|
||||
#: src/views/settings/components/Avatar.tsx:97
|
||||
msgid "Error uploading profile image"
|
||||
@@ -857,7 +882,7 @@ msgid "Free"
|
||||
msgstr "Free"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Free Plan"
|
||||
msgstr "Free Plan"
|
||||
|
||||
@@ -1020,7 +1045,7 @@ msgstr "Interviewing"
|
||||
msgid "Invalid email address"
|
||||
msgstr "Invalid email address"
|
||||
|
||||
#: src/views/members/index.tsx:201
|
||||
#: src/views/members/index.tsx:221
|
||||
msgid "Invite"
|
||||
msgstr "Invite"
|
||||
|
||||
@@ -1064,14 +1089,23 @@ msgstr "Labels"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Labels & Filters"
|
||||
|
||||
#: src/views/settings/index.tsx:210
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Language"
|
||||
msgstr "Language"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:332
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Launch offer"
|
||||
|
||||
#: src/views/members/index.tsx:191
|
||||
msgid "Launch offer: Get unlimited members with Pro"
|
||||
msgstr "Launch offer: Get unlimited members with Pro"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:99
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Learning"
|
||||
@@ -1137,12 +1171,12 @@ msgstr "Medium Priority"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:172
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Members"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:168
|
||||
#: src/views/members/index.tsx:173
|
||||
msgid "Members | {0}"
|
||||
msgstr "Members | {0}"
|
||||
|
||||
@@ -1168,6 +1202,10 @@ msgstr "moved the card from <0>{0}</0> to<1>{1}</1>"
|
||||
msgid "moved the card to another list"
|
||||
msgstr "moved the card to another list"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:273
|
||||
#~ msgid "my-workspace-name"
|
||||
#~ msgstr "my-workspace-name"
|
||||
|
||||
#: src/components/LabelForm.tsx:135
|
||||
#: src/views/boards/components/NewBoardForm.tsx:99
|
||||
msgid "Name"
|
||||
@@ -1222,7 +1260,7 @@ msgstr "New Ticket"
|
||||
#~ msgid "New Ticket, Triaging, In Progress, Awaiting Customer, Resolution, Done"
|
||||
#~ msgstr "New Ticket, Triaging, In Progress, Awaiting Customer, Resolution, Done"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:65
|
||||
#: src/components/NewWorkspaceForm.tsx:240
|
||||
msgid "New workspace"
|
||||
msgstr "New workspace"
|
||||
|
||||
@@ -1258,11 +1296,11 @@ msgstr "Offer"
|
||||
msgid "Onboarding"
|
||||
msgstr "Onboarding"
|
||||
|
||||
#: src/views/settings/index.tsx:335
|
||||
#: src/views/settings/index.tsx:349
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
|
||||
#: src/views/settings/index.tsx:298
|
||||
#: src/views/settings/index.tsx:312
|
||||
msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
|
||||
msgstr "Once you delete your workspace, there is no going back. This action cannot be undone."
|
||||
|
||||
@@ -1294,11 +1332,11 @@ msgstr "Password must be at least 8 characters"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Passwords do not match"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:102
|
||||
msgid "Payment frequency"
|
||||
msgstr "Payment frequency"
|
||||
|
||||
#: src/views/members/index.tsx:129
|
||||
#: src/views/members/index.tsx:134
|
||||
msgid "Pending"
|
||||
msgstr "Pending"
|
||||
|
||||
@@ -1337,7 +1375,7 @@ msgstr "Please select a file to upload."
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:26
|
||||
#: src/components/FeedbackModal.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:42
|
||||
#: src/components/NewWorkspaceForm.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:174
|
||||
#: src/views/board/components/NewListForm.tsx:78
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||
@@ -1381,7 +1419,7 @@ msgid "Pricing"
|
||||
msgstr "Pricing"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:91
|
||||
msgid "Priority email support"
|
||||
msgstr "Priority email support"
|
||||
|
||||
@@ -1393,7 +1431,7 @@ msgstr "Privacy policy"
|
||||
msgid "Private"
|
||||
msgstr "Private"
|
||||
|
||||
#: src/views/members/index.tsx:186
|
||||
#: src/views/members/index.tsx:205
|
||||
msgid "Pro Plan"
|
||||
msgstr "Pro Plan"
|
||||
|
||||
@@ -1405,7 +1443,7 @@ msgstr "Pro Plan ∞"
|
||||
msgid "Profile image updated"
|
||||
msgstr "Profile image updated"
|
||||
|
||||
#: src/views/settings/index.tsx:157
|
||||
#: src/views/settings/index.tsx:171
|
||||
msgid "Profile picture"
|
||||
msgstr "Profile picture"
|
||||
|
||||
@@ -1441,7 +1479,7 @@ msgstr "Remote"
|
||||
msgid "Remove"
|
||||
msgstr "Remove"
|
||||
|
||||
#: src/views/members/index.tsx:143
|
||||
#: src/views/members/index.tsx:148
|
||||
msgid "Remove member"
|
||||
msgstr "Remove member"
|
||||
|
||||
@@ -1501,7 +1539,7 @@ msgstr "Revoke"
|
||||
msgid "Roadmap"
|
||||
msgstr "Roadmap"
|
||||
|
||||
#: src/views/members/index.tsx:223
|
||||
#: src/views/members/index.tsx:243
|
||||
msgid "Role"
|
||||
msgstr "Role"
|
||||
|
||||
@@ -1554,12 +1592,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:165
|
||||
msgid "Settings"
|
||||
msgstr "Settings"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:147
|
||||
#: src/views/settings/index.tsx:161
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Settings | {0}"
|
||||
|
||||
@@ -1627,7 +1665,7 @@ msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
#: src/views/members/index.tsx:207
|
||||
msgid "Team Plan"
|
||||
msgstr "Team Plan"
|
||||
|
||||
@@ -1695,6 +1733,14 @@ msgstr "This will result in the permanent deletion of all data associated with t
|
||||
msgid "This will result in the permanent deletion of all data associated with your account."
|
||||
msgstr "This will result in the permanent deletion of all data associated with your account."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:284
|
||||
msgid "This workspace URL has already been taken"
|
||||
msgstr "This workspace URL has already been taken"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:286
|
||||
msgid "This workspace URL is reserved"
|
||||
msgstr "This workspace URL is reserved"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:123
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "This workspace username has already been taken"
|
||||
@@ -1716,7 +1762,7 @@ msgstr "Toggle menu"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
msgstr "Track all card changes with detailed activity history."
|
||||
|
||||
#: src/views/settings/index.tsx:105
|
||||
#: src/views/settings/index.tsx:119
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello disconnected"
|
||||
|
||||
@@ -1748,7 +1794,7 @@ msgstr "Unable to create checklist"
|
||||
msgid "Unable to create list"
|
||||
msgstr "Unable to create list"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:154
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Unable to create workspace"
|
||||
|
||||
@@ -1851,6 +1897,7 @@ msgstr "Unlimited comments"
|
||||
msgid "Unlimited lists"
|
||||
msgstr "Unlimited lists"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:329
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
|
||||
msgid "Unlimited members"
|
||||
msgstr "Unlimited members"
|
||||
@@ -1888,15 +1935,19 @@ msgstr "updated the title to <0>{0}</0>"
|
||||
#~ msgid "updated the title to <0>{toTitle}</0>"
|
||||
#~ msgstr "updated the title to <0>{toTitle}</0>"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:99
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:109
|
||||
msgid "Upgrade"
|
||||
msgstr "Upgrade"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:202
|
||||
#: src/views/settings/index.tsx:216
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Upgrade to Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:369
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Upgrade to Pro ($29/month)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Upgrade to Team Plan"
|
||||
@@ -1906,14 +1957,17 @@ msgstr "Upgrade to Team Plan"
|
||||
msgid "Urgent"
|
||||
msgstr "Urgent"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:35
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "URL can only contain letters, numbers, and hyphens"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:33
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:34
|
||||
msgid "URL cannot exceed 24 characters"
|
||||
msgstr "URL cannot exceed 24 characters"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:31
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:32
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "URL must be at least 3 characters long"
|
||||
@@ -1922,7 +1976,7 @@ msgstr "URL must be at least 3 characters long"
|
||||
msgid "Use template"
|
||||
msgstr "Use template"
|
||||
|
||||
#: src/views/members/index.tsx:217
|
||||
#: src/views/members/index.tsx:237
|
||||
msgid "User"
|
||||
msgstr "User"
|
||||
|
||||
@@ -1934,11 +1988,11 @@ msgstr "User is already a member of this workspace"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:285
|
||||
#: src/views/settings/index.tsx:299
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "View and manage your API keys."
|
||||
|
||||
#: src/views/settings/index.tsx:224
|
||||
#: src/views/settings/index.tsx:238
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "View and manage your billing and subscription."
|
||||
|
||||
@@ -1998,11 +2052,15 @@ msgstr "Why make an open source Trello?"
|
||||
msgid "Workspace"
|
||||
msgstr "Workspace"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:143
|
||||
msgid "Workspace created successfully. You can upgrade later in settings."
|
||||
msgstr "Workspace created successfully. You can upgrade later in settings."
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:26
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Workspace deleted"
|
||||
|
||||
#: src/views/settings/index.tsx:188
|
||||
#: src/views/settings/index.tsx:202
|
||||
msgid "Workspace description"
|
||||
msgstr "Workspace description"
|
||||
|
||||
@@ -2023,8 +2081,8 @@ msgstr "Workspace description updated"
|
||||
msgid "Workspace members"
|
||||
msgstr "Workspace members"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:169
|
||||
#: src/components/NewWorkspaceForm.tsx:259
|
||||
#: src/views/settings/index.tsx:183
|
||||
msgid "Workspace name"
|
||||
msgstr "Workspace name"
|
||||
|
||||
@@ -2032,6 +2090,10 @@ msgstr "Workspace name"
|
||||
msgid "Workspace name cannot exceed 24 characters"
|
||||
msgstr "Workspace name cannot exceed 24 characters"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:27
|
||||
msgid "Workspace name is required"
|
||||
msgstr "Workspace name is required"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:14
|
||||
msgid "Workspace name must be at least 3 characters long"
|
||||
msgstr "Workspace name must be at least 3 characters long"
|
||||
@@ -2044,10 +2106,14 @@ msgstr "Workspace name updated"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Workspace slug updated"
|
||||
|
||||
#: src/views/settings/index.tsx:178
|
||||
#: src/views/settings/index.tsx:192
|
||||
msgid "Workspace URL"
|
||||
msgstr "Workspace URL"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:273
|
||||
msgid "workspace-url"
|
||||
msgstr "workspace-url"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Writing"
|
||||
@@ -2060,7 +2126,7 @@ msgstr "Yearly"
|
||||
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
|
||||
msgstr "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
|
||||
|
||||
#: src/views/settings/index.tsx:317
|
||||
#: src/views/settings/index.tsx:331
|
||||
msgid "You are about to change your password."
|
||||
msgstr "You are about to change your password."
|
||||
|
||||
@@ -2108,11 +2174,11 @@ msgstr "Your password has been changed."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Your profile image has been updated."
|
||||
|
||||
#: src/views/settings/index.tsx:106
|
||||
#: src/views/settings/index.tsx:120
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Your Trello account has been disconnected."
|
||||
|
||||
#: src/views/settings/index.tsx:267
|
||||
#: src/views/settings/index.tsx:281
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Your Trello account is connected."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -148,7 +148,7 @@ msgstr "Todos los sistemas operativos"
|
||||
msgid "Already have an account? <0><1>Sign in</1></0>"
|
||||
msgstr "¿Ya tienes una cuenta? <0><1>Iniciar sesión</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:113
|
||||
#: src/views/settings/index.tsx:127
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
msgstr "Ocurrió un error al desconectar tu cuenta de Trello."
|
||||
|
||||
@@ -156,7 +156,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/settings/index.tsx:282
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "API keys"
|
||||
msgstr "Claves API"
|
||||
|
||||
@@ -227,11 +227,11 @@ msgid "billed monthly"
|
||||
msgstr "facturado mensualmente"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:221
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "Billing"
|
||||
msgstr "Facturación"
|
||||
|
||||
#: src/views/settings/index.tsx:231
|
||||
#: src/views/settings/index.tsx:245
|
||||
msgid "Billing portal"
|
||||
msgstr "Portal de facturación"
|
||||
|
||||
@@ -243,9 +243,10 @@ msgstr "Entrada de blog"
|
||||
msgid "Board"
|
||||
msgstr "Tablero"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
|
||||
msgid "Board analytics (coming soon)"
|
||||
msgstr "Análisis de tableros (próximamente)"
|
||||
#: src/components/NewWorkspaceForm.tsx:346
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:81
|
||||
msgid "Board analytics"
|
||||
msgstr "Análisis del tablero"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
@@ -315,7 +316,7 @@ msgstr "Informe de error"
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:104
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@@ -329,12 +330,12 @@ msgstr "Título de la tarjeta"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:314
|
||||
#: src/views/settings/index.tsx:324
|
||||
#: src/views/settings/index.tsx:328
|
||||
#: src/views/settings/index.tsx:338
|
||||
msgid "Change Password"
|
||||
msgstr "Cambiar contraseña"
|
||||
|
||||
#: src/views/settings/index.tsx:213
|
||||
#: src/views/settings/index.tsx:227
|
||||
msgid "Change the language of the app."
|
||||
msgstr "Cambiar el idioma de la aplicación."
|
||||
|
||||
@@ -364,7 +365,9 @@ msgstr "Revisión de código"
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Colabora sin problemas con tu equipo."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:349
|
||||
#: src/views/home/components/Features.tsx:66
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:84
|
||||
msgid "Coming soon"
|
||||
msgstr "Próximamente"
|
||||
|
||||
@@ -398,7 +401,7 @@ msgid "Confirm your new password"
|
||||
msgstr "Confirma tu nueva contraseña"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:258
|
||||
#: src/views/settings/index.tsx:272
|
||||
msgid "Connect Trello"
|
||||
msgstr "Conectar Trello"
|
||||
|
||||
@@ -406,7 +409,7 @@ msgstr "Conectar Trello"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Conecta tus herramientas favoritas para agilizar tu flujo de trabajo."
|
||||
|
||||
#: src/views/settings/index.tsx:245
|
||||
#: src/views/settings/index.tsx:259
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Conecta tu cuenta de Trello para importar tableros."
|
||||
|
||||
@@ -478,7 +481,7 @@ msgstr "Crear nueva etiqueta"
|
||||
msgid "Create new list"
|
||||
msgstr "Crear nueva lista"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:94
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
msgid "Create workspace"
|
||||
msgstr "Crear espacio de trabajo"
|
||||
@@ -499,6 +502,11 @@ msgstr "Se requiere la contraseña actual"
|
||||
msgid "Custom domain"
|
||||
msgstr "Dominio personalizado"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:315
|
||||
msgid "Custom URLs require upgrading to a Pro plan"
|
||||
msgstr "Las URLs personalizadas requieren actualizar a un plan Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:339
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "URL personalizada del espacio de trabajo"
|
||||
@@ -520,8 +528,8 @@ msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:332
|
||||
#: src/views/settings/index.tsx:342
|
||||
#: src/views/settings/index.tsx:346
|
||||
#: src/views/settings/index.tsx:356
|
||||
msgid "Delete account"
|
||||
msgstr "Eliminar cuenta"
|
||||
|
||||
@@ -542,8 +550,8 @@ msgid "Delete list"
|
||||
msgstr "Eliminar lista"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:295
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:320
|
||||
msgid "Delete workspace"
|
||||
msgstr "Eliminar espacio de trabajo"
|
||||
|
||||
@@ -569,7 +577,7 @@ msgstr "eliminó el elemento <0>{0}</0> de la lista de verificación"
|
||||
msgid "Design"
|
||||
msgstr "Diseño"
|
||||
|
||||
#: src/views/settings/index.tsx:273
|
||||
#: src/views/settings/index.tsx:287
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Desconectar Trello"
|
||||
|
||||
@@ -577,7 +585,7 @@ msgstr "Desconectar Trello"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Discute y colabora en las tarjetas."
|
||||
|
||||
#: src/views/settings/index.tsx:162
|
||||
#: src/views/settings/index.tsx:176
|
||||
msgid "Display name"
|
||||
msgstr "Nombre visible"
|
||||
|
||||
@@ -695,7 +703,7 @@ msgstr "Error al eliminar la etiqueta"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Error al eliminar el espacio de trabajo"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/views/settings/index.tsx:126
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Error al desconectar Trello"
|
||||
|
||||
@@ -729,6 +737,10 @@ msgstr "Error al actualizar la URL del espacio de trabajo"
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Error al actualizar la suscripción"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:142
|
||||
msgid "Error upgrading to Pro"
|
||||
msgstr "Error al actualizar a Pro"
|
||||
|
||||
#: src/views/settings/components/Avatar.tsx:56
|
||||
#: src/views/settings/components/Avatar.tsx:97
|
||||
msgid "Error uploading profile image"
|
||||
@@ -796,7 +808,7 @@ msgid "Free"
|
||||
msgstr "Gratis"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Free Plan"
|
||||
msgstr "Plan gratuito"
|
||||
|
||||
@@ -955,7 +967,7 @@ msgstr "Entrevistando"
|
||||
msgid "Invalid email address"
|
||||
msgstr "Dirección de correo electrónico no válida"
|
||||
|
||||
#: src/views/members/index.tsx:201
|
||||
#: src/views/members/index.tsx:221
|
||||
msgid "Invite"
|
||||
msgstr "Invitar"
|
||||
|
||||
@@ -999,14 +1011,23 @@ msgstr "Etiquetas"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Etiquetas y filtros"
|
||||
|
||||
#: src/views/settings/index.tsx:210
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:332
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Oferta de lanzamiento"
|
||||
|
||||
#: src/views/members/index.tsx:191
|
||||
msgid "Launch offer: Get unlimited members with Pro"
|
||||
msgstr "Oferta de lanzamiento: Obtén miembros ilimitados con Pro"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:99
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Oferta de lanzamiento: asientos ilimitados por solo $29/mes con Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Aprendizaje"
|
||||
@@ -1072,12 +1093,12 @@ msgstr "Prioridad media"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:172
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Miembros"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:168
|
||||
#: src/views/members/index.tsx:173
|
||||
msgid "Members | {0}"
|
||||
msgstr "Miembros | {0}"
|
||||
|
||||
@@ -1149,7 +1170,7 @@ msgstr "La nueva contraseña debe ser diferente de la contraseña actual"
|
||||
msgid "New Ticket"
|
||||
msgstr "Nuevo ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:65
|
||||
#: src/components/NewWorkspaceForm.tsx:240
|
||||
msgid "New workspace"
|
||||
msgstr "Nuevo espacio de trabajo"
|
||||
|
||||
@@ -1185,11 +1206,11 @@ msgstr "Oferta"
|
||||
msgid "Onboarding"
|
||||
msgstr "Incorporación"
|
||||
|
||||
#: src/views/settings/index.tsx:335
|
||||
#: src/views/settings/index.tsx:349
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Una vez que elimines tu cuenta, no hay vuelta atrás. Esta acción no se puede deshacer."
|
||||
|
||||
#: src/views/settings/index.tsx:298
|
||||
#: src/views/settings/index.tsx:312
|
||||
msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
|
||||
msgstr "Una vez que elimines tu espacio de trabajo, no hay vuelta atrás. Esta acción no se puede deshacer."
|
||||
|
||||
@@ -1221,11 +1242,11 @@ msgstr "La contraseña debe tener al menos 8 caracteres"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Las contraseñas no coinciden"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:102
|
||||
msgid "Payment frequency"
|
||||
msgstr "Frecuencia de pago"
|
||||
|
||||
#: src/views/members/index.tsx:129
|
||||
#: src/views/members/index.tsx:134
|
||||
msgid "Pending"
|
||||
msgstr "Pendiente"
|
||||
|
||||
@@ -1264,7 +1285,7 @@ msgstr "Por favor selecciona un archivo para subir."
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:26
|
||||
#: src/components/FeedbackModal.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:42
|
||||
#: src/components/NewWorkspaceForm.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:174
|
||||
#: src/views/board/components/NewListForm.tsx:78
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||
@@ -1308,7 +1329,7 @@ msgid "Pricing"
|
||||
msgstr "Precios"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:91
|
||||
msgid "Priority email support"
|
||||
msgstr "Soporte prioritario por email"
|
||||
|
||||
@@ -1320,7 +1341,7 @@ msgstr "Política de privacidad"
|
||||
msgid "Private"
|
||||
msgstr "Privado"
|
||||
|
||||
#: src/views/members/index.tsx:186
|
||||
#: src/views/members/index.tsx:205
|
||||
msgid "Pro Plan"
|
||||
msgstr "Plan Pro"
|
||||
|
||||
@@ -1332,7 +1353,7 @@ msgstr "Plan Pro ∞"
|
||||
msgid "Profile image updated"
|
||||
msgstr "Imagen de perfil actualizada"
|
||||
|
||||
#: src/views/settings/index.tsx:157
|
||||
#: src/views/settings/index.tsx:171
|
||||
msgid "Profile picture"
|
||||
msgstr "Foto de perfil"
|
||||
|
||||
@@ -1368,7 +1389,7 @@ msgstr "Remoto"
|
||||
msgid "Remove"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: src/views/members/index.tsx:143
|
||||
#: src/views/members/index.tsx:148
|
||||
msgid "Remove member"
|
||||
msgstr "Eliminar miembro"
|
||||
|
||||
@@ -1424,7 +1445,7 @@ msgstr "Revocar"
|
||||
msgid "Roadmap"
|
||||
msgstr "Hoja de ruta"
|
||||
|
||||
#: src/views/members/index.tsx:223
|
||||
#: src/views/members/index.tsx:243
|
||||
msgid "Role"
|
||||
msgstr "Rol"
|
||||
|
||||
@@ -1473,12 +1494,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:165
|
||||
msgid "Settings"
|
||||
msgstr "Configuración"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:147
|
||||
#: src/views/settings/index.tsx:161
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Configuración | {0}"
|
||||
|
||||
@@ -1546,7 +1567,7 @@ msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
#: src/views/members/index.tsx:207
|
||||
msgid "Team Plan"
|
||||
msgstr "Plan de Equipo"
|
||||
|
||||
@@ -1614,6 +1635,14 @@ msgstr "Esto resultará en la eliminación permanente de todos los datos asociad
|
||||
msgid "This will result in the permanent deletion of all data associated with your account."
|
||||
msgstr "Esto resultará en la eliminación permanente de todos los datos asociados con tu cuenta."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:284
|
||||
msgid "This workspace URL has already been taken"
|
||||
msgstr "Esta URL de espacio de trabajo ya ha sido tomada"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:286
|
||||
msgid "This workspace URL is reserved"
|
||||
msgstr "Esta URL de espacio de trabajo está reservada"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:123
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Este nombre de usuario del espacio de trabajo ya ha sido tomado"
|
||||
@@ -1631,7 +1660,7 @@ msgstr "Alternar menú"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
msgstr "Rastrea todos los cambios en las tarjetas con un historial de actividad detallado."
|
||||
|
||||
#: src/views/settings/index.tsx:105
|
||||
#: src/views/settings/index.tsx:119
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello desconectado"
|
||||
|
||||
@@ -1663,7 +1692,7 @@ msgstr "No se puede crear la lista de verificación"
|
||||
msgid "Unable to create list"
|
||||
msgstr "No se puede crear la lista"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:154
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "No se puede crear el espacio de trabajo"
|
||||
|
||||
@@ -1762,6 +1791,7 @@ msgstr "Comentarios ilimitados"
|
||||
msgid "Unlimited lists"
|
||||
msgstr "Listas ilimitadas"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:329
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
|
||||
msgid "Unlimited members"
|
||||
msgstr "Miembros ilimitados"
|
||||
@@ -1795,15 +1825,19 @@ msgstr "actualizó el título"
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "actualizó el título a <0>{0}</0>"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:99
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:109
|
||||
msgid "Upgrade"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:202
|
||||
#: src/views/settings/index.tsx:216
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Actualizar a Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:369
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Actualizar a Pro ($29/mes)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Actualizar al Plan de Equipo"
|
||||
@@ -1813,14 +1847,17 @@ msgstr "Actualizar al Plan de Equipo"
|
||||
msgid "Urgent"
|
||||
msgstr "Urgente"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:35
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "La URL solo puede contener letras, números y guiones"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:33
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:34
|
||||
msgid "URL cannot exceed 24 characters"
|
||||
msgstr "La URL no puede exceder los 24 caracteres"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:31
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:32
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "La URL debe tener al menos 3 caracteres"
|
||||
@@ -1829,7 +1866,7 @@ msgstr "La URL debe tener al menos 3 caracteres"
|
||||
msgid "Use template"
|
||||
msgstr "Usar plantilla"
|
||||
|
||||
#: src/views/members/index.tsx:217
|
||||
#: src/views/members/index.tsx:237
|
||||
msgid "User"
|
||||
msgstr "Usuario"
|
||||
|
||||
@@ -1841,11 +1878,11 @@ msgstr "El usuario ya es miembro de este espacio de trabajo"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:285
|
||||
#: src/views/settings/index.tsx:299
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Ver y gestionar tus claves API."
|
||||
|
||||
#: src/views/settings/index.tsx:224
|
||||
#: src/views/settings/index.tsx:238
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Ver y gestionar tu facturación y suscripción."
|
||||
|
||||
@@ -1901,11 +1938,15 @@ msgstr "¿Por qué crear un Trello de código abierto?"
|
||||
msgid "Workspace"
|
||||
msgstr "Espacio de trabajo"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:143
|
||||
msgid "Workspace created successfully. You can upgrade later in settings."
|
||||
msgstr "Espacio de trabajo creado con éxito. Puedes actualizar más tarde en configuración."
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:26
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Espacio de trabajo eliminado"
|
||||
|
||||
#: src/views/settings/index.tsx:188
|
||||
#: src/views/settings/index.tsx:202
|
||||
msgid "Workspace description"
|
||||
msgstr "Descripción del espacio de trabajo"
|
||||
|
||||
@@ -1926,8 +1967,8 @@ msgstr "Descripción del espacio de trabajo actualizada"
|
||||
msgid "Workspace members"
|
||||
msgstr "Miembros del espacio de trabajo"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:169
|
||||
#: src/components/NewWorkspaceForm.tsx:259
|
||||
#: src/views/settings/index.tsx:183
|
||||
msgid "Workspace name"
|
||||
msgstr "Nombre del espacio de trabajo"
|
||||
|
||||
@@ -1935,6 +1976,10 @@ msgstr "Nombre del espacio de trabajo"
|
||||
msgid "Workspace name cannot exceed 24 characters"
|
||||
msgstr "El nombre del espacio de trabajo no puede exceder los 24 caracteres"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:27
|
||||
msgid "Workspace name is required"
|
||||
msgstr "El nombre del espacio de trabajo es obligatorio"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:14
|
||||
msgid "Workspace name must be at least 3 characters long"
|
||||
msgstr "El nombre del espacio de trabajo debe tener al menos 3 caracteres"
|
||||
@@ -1947,10 +1992,14 @@ msgstr "Nombre del espacio de trabajo actualizado"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Slug del espacio de trabajo actualizado"
|
||||
|
||||
#: src/views/settings/index.tsx:178
|
||||
#: src/views/settings/index.tsx:192
|
||||
msgid "Workspace URL"
|
||||
msgstr "URL del espacio de trabajo"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:273
|
||||
msgid "workspace-url"
|
||||
msgstr "workspace-url"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Escritura"
|
||||
@@ -1963,7 +2012,7 @@ msgstr "Anual"
|
||||
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
|
||||
msgstr "Sí, ofrecemos un plan gratuito para siempre para uso individual. Sin restricciones, sin muros de pago, sin límites."
|
||||
|
||||
#: src/views/settings/index.tsx:317
|
||||
#: src/views/settings/index.tsx:331
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Estás a punto de cambiar tu contraseña."
|
||||
|
||||
@@ -2011,11 +2060,11 @@ msgstr "Tu contraseña ha sido cambiada."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Tu imagen de perfil ha sido actualizada."
|
||||
|
||||
#: src/views/settings/index.tsx:106
|
||||
#: src/views/settings/index.tsx:120
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Tu cuenta de Trello ha sido desconectada."
|
||||
|
||||
#: src/views/settings/index.tsx:267
|
||||
#: src/views/settings/index.tsx:281
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Tu cuenta de Trello está conectada."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -148,7 +148,7 @@ msgstr "Tous les systèmes opérationnels"
|
||||
msgid "Already have an account? <0><1>Sign in</1></0>"
|
||||
msgstr "Vous avez déjà un compte ? <0><1>Connectez-vous</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:113
|
||||
#: src/views/settings/index.tsx:127
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
msgstr "Une erreur s'est produite lors de la déconnexion de votre compte Trello."
|
||||
|
||||
@@ -156,7 +156,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/settings/index.tsx:282
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "API keys"
|
||||
msgstr "Clés API"
|
||||
|
||||
@@ -227,11 +227,11 @@ msgid "billed monthly"
|
||||
msgstr "facturation mensuelle"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:221
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "Billing"
|
||||
msgstr "Facturation"
|
||||
|
||||
#: src/views/settings/index.tsx:231
|
||||
#: src/views/settings/index.tsx:245
|
||||
msgid "Billing portal"
|
||||
msgstr "Portail de facturation"
|
||||
|
||||
@@ -243,9 +243,10 @@ msgstr "Article de blog"
|
||||
msgid "Board"
|
||||
msgstr "Tableau"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
|
||||
msgid "Board analytics (coming soon)"
|
||||
msgstr "Analyses de tableau (bientôt disponible)"
|
||||
#: src/components/NewWorkspaceForm.tsx:346
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:81
|
||||
msgid "Board analytics"
|
||||
msgstr "Analyses du tableau"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
@@ -315,7 +316,7 @@ msgstr "Rapport de bug"
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:104
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
@@ -329,12 +330,12 @@ msgstr "Titre de la carte"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:314
|
||||
#: src/views/settings/index.tsx:324
|
||||
#: src/views/settings/index.tsx:328
|
||||
#: src/views/settings/index.tsx:338
|
||||
msgid "Change Password"
|
||||
msgstr "Modifier le mot de passe"
|
||||
|
||||
#: src/views/settings/index.tsx:213
|
||||
#: src/views/settings/index.tsx:227
|
||||
msgid "Change the language of the app."
|
||||
msgstr "Changer la langue de l'application."
|
||||
|
||||
@@ -364,7 +365,9 @@ msgstr "Revue de code"
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Collaborez en toute fluidité avec votre équipe."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:349
|
||||
#: src/views/home/components/Features.tsx:66
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:84
|
||||
msgid "Coming soon"
|
||||
msgstr "Bientôt disponible"
|
||||
|
||||
@@ -398,7 +401,7 @@ msgid "Confirm your new password"
|
||||
msgstr "Confirmez votre nouveau mot de passe"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:258
|
||||
#: src/views/settings/index.tsx:272
|
||||
msgid "Connect Trello"
|
||||
msgstr "Connecter Trello"
|
||||
|
||||
@@ -406,7 +409,7 @@ msgstr "Connecter Trello"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Connectez vos outils favoris pour simplifier votre flux de travail."
|
||||
|
||||
#: src/views/settings/index.tsx:245
|
||||
#: src/views/settings/index.tsx:259
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Connectez votre compte Trello pour importer des tableaux."
|
||||
|
||||
@@ -478,7 +481,7 @@ msgstr "Créer une nouvelle étiquette"
|
||||
msgid "Create new list"
|
||||
msgstr "Créer une nouvelle liste"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:94
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
msgid "Create workspace"
|
||||
msgstr "Créer un espace de travail"
|
||||
@@ -499,6 +502,11 @@ msgstr "Le mot de passe actuel est requis"
|
||||
msgid "Custom domain"
|
||||
msgstr "Domaine personnalisé"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:315
|
||||
msgid "Custom URLs require upgrading to a Pro plan"
|
||||
msgstr "Les URL personnalisées nécessitent une mise à niveau vers un forfait Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:339
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "URL d'espace de travail personnalisée"
|
||||
@@ -520,8 +528,8 @@ msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:332
|
||||
#: src/views/settings/index.tsx:342
|
||||
#: src/views/settings/index.tsx:346
|
||||
#: src/views/settings/index.tsx:356
|
||||
msgid "Delete account"
|
||||
msgstr "Supprimer le compte"
|
||||
|
||||
@@ -542,8 +550,8 @@ msgid "Delete list"
|
||||
msgstr "Supprimer la liste"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:295
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:320
|
||||
msgid "Delete workspace"
|
||||
msgstr "Supprimer l'espace de travail"
|
||||
|
||||
@@ -569,7 +577,7 @@ msgstr "a supprimé l'élément <0>{0}</0> de la checklist"
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:273
|
||||
#: src/views/settings/index.tsx:287
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Déconnecter Trello"
|
||||
|
||||
@@ -577,7 +585,7 @@ msgstr "Déconnecter Trello"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Discutez et collaborez sur les cartes."
|
||||
|
||||
#: src/views/settings/index.tsx:162
|
||||
#: src/views/settings/index.tsx:176
|
||||
msgid "Display name"
|
||||
msgstr "Nom d'affichage"
|
||||
|
||||
@@ -695,7 +703,7 @@ msgstr "Erreur lors de la suppression de l'étiquette"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Erreur lors de la suppression de l'espace de travail"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/views/settings/index.tsx:126
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Erreur lors de la déconnexion de Trello"
|
||||
|
||||
@@ -729,6 +737,10 @@ msgstr "Erreur lors de la mise à jour de l'URL de l'espace de travail"
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Erreur lors de la mise à niveau de l'abonnement"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:142
|
||||
msgid "Error upgrading to Pro"
|
||||
msgstr "Erreur lors de la mise à niveau vers Pro"
|
||||
|
||||
#: src/views/settings/components/Avatar.tsx:56
|
||||
#: src/views/settings/components/Avatar.tsx:97
|
||||
msgid "Error uploading profile image"
|
||||
@@ -796,7 +808,7 @@ msgid "Free"
|
||||
msgstr "Gratuit"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Free Plan"
|
||||
msgstr "Forfait gratuit"
|
||||
|
||||
@@ -955,7 +967,7 @@ msgstr "Entretien"
|
||||
msgid "Invalid email address"
|
||||
msgstr "Adresse e-mail invalide"
|
||||
|
||||
#: src/views/members/index.tsx:201
|
||||
#: src/views/members/index.tsx:221
|
||||
msgid "Invite"
|
||||
msgstr "Inviter"
|
||||
|
||||
@@ -999,14 +1011,23 @@ msgstr "Étiquettes"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Étiquettes & filtres"
|
||||
|
||||
#: src/views/settings/index.tsx:210
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:332
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Offre de lancement"
|
||||
|
||||
#: src/views/members/index.tsx:191
|
||||
msgid "Launch offer: Get unlimited members with Pro"
|
||||
msgstr "Offre de lancement : obtenez des membres illimités avec Pro"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:99
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Offre de lancement : sièges illimités pour seulement 29 $/mois avec Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Apprentissage"
|
||||
@@ -1072,12 +1093,12 @@ msgstr "Priorité moyenne"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:172
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Membres"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:168
|
||||
#: src/views/members/index.tsx:173
|
||||
msgid "Members | {0}"
|
||||
msgstr "Membres | {0}"
|
||||
|
||||
@@ -1149,7 +1170,7 @@ msgstr "Le nouveau mot de passe doit être différent du mot de passe actuel"
|
||||
msgid "New Ticket"
|
||||
msgstr "Nouveau ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:65
|
||||
#: src/components/NewWorkspaceForm.tsx:240
|
||||
msgid "New workspace"
|
||||
msgstr "Nouvel espace de travail"
|
||||
|
||||
@@ -1185,11 +1206,11 @@ msgstr "Offre"
|
||||
msgid "Onboarding"
|
||||
msgstr "Intégration"
|
||||
|
||||
#: src/views/settings/index.tsx:335
|
||||
#: src/views/settings/index.tsx:349
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Une fois que vous supprimez votre compte, il n'y a pas de retour possible. Cette action ne peut pas être annulée."
|
||||
|
||||
#: src/views/settings/index.tsx:298
|
||||
#: src/views/settings/index.tsx:312
|
||||
msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
|
||||
msgstr "Une fois que vous supprimez votre espace de travail, il n'y a pas de retour possible. Cette action ne peut pas être annulée."
|
||||
|
||||
@@ -1221,11 +1242,11 @@ msgstr "Le mot de passe doit comporter au moins 8 caractères"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Les mots de passe ne correspondent pas"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:102
|
||||
msgid "Payment frequency"
|
||||
msgstr "Fréquence de paiement"
|
||||
|
||||
#: src/views/members/index.tsx:129
|
||||
#: src/views/members/index.tsx:134
|
||||
msgid "Pending"
|
||||
msgstr "En attente"
|
||||
|
||||
@@ -1264,7 +1285,7 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:26
|
||||
#: src/components/FeedbackModal.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:42
|
||||
#: src/components/NewWorkspaceForm.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:174
|
||||
#: src/views/board/components/NewListForm.tsx:78
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||
@@ -1308,7 +1329,7 @@ msgid "Pricing"
|
||||
msgstr "Tarifs"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:91
|
||||
msgid "Priority email support"
|
||||
msgstr "Support par e-mail prioritaire"
|
||||
|
||||
@@ -1320,7 +1341,7 @@ msgstr "Politique de confidentialité"
|
||||
msgid "Private"
|
||||
msgstr "Privé"
|
||||
|
||||
#: src/views/members/index.tsx:186
|
||||
#: src/views/members/index.tsx:205
|
||||
msgid "Pro Plan"
|
||||
msgstr "Plan Pro"
|
||||
|
||||
@@ -1332,7 +1353,7 @@ msgstr "Plan Pro ∞"
|
||||
msgid "Profile image updated"
|
||||
msgstr "Image de profil mise à jour"
|
||||
|
||||
#: src/views/settings/index.tsx:157
|
||||
#: src/views/settings/index.tsx:171
|
||||
msgid "Profile picture"
|
||||
msgstr "Photo de profil"
|
||||
|
||||
@@ -1368,7 +1389,7 @@ msgstr "À distance"
|
||||
msgid "Remove"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: src/views/members/index.tsx:143
|
||||
#: src/views/members/index.tsx:148
|
||||
msgid "Remove member"
|
||||
msgstr "Supprimer le membre"
|
||||
|
||||
@@ -1424,7 +1445,7 @@ msgstr "Révoquer"
|
||||
msgid "Roadmap"
|
||||
msgstr "Feuille de route"
|
||||
|
||||
#: src/views/members/index.tsx:223
|
||||
#: src/views/members/index.tsx:243
|
||||
msgid "Role"
|
||||
msgstr "Rôle"
|
||||
|
||||
@@ -1473,12 +1494,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:165
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:147
|
||||
#: src/views/settings/index.tsx:161
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Paramètres | {0}"
|
||||
|
||||
@@ -1546,7 +1567,7 @@ msgid "System"
|
||||
msgstr "Système"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
#: src/views/members/index.tsx:207
|
||||
msgid "Team Plan"
|
||||
msgstr "Forfait d'équipe"
|
||||
|
||||
@@ -1614,6 +1635,14 @@ msgstr "Cela entraînera la suppression définitive de toutes les données assoc
|
||||
msgid "This will result in the permanent deletion of all data associated with your account."
|
||||
msgstr "Cela entraînera la suppression définitive de toutes les données associées à votre compte."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:284
|
||||
msgid "This workspace URL has already been taken"
|
||||
msgstr "Cette URL d'espace de travail est déjà prise"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:286
|
||||
msgid "This workspace URL is reserved"
|
||||
msgstr "Cette URL d'espace de travail est réservée"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:123
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Ce nom d'utilisateur d'espace de travail est déjà pris"
|
||||
@@ -1631,7 +1660,7 @@ msgstr "Basculer le menu"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
msgstr "Suivez tous les changements de cartes avec un historique d'activité détaillé."
|
||||
|
||||
#: src/views/settings/index.tsx:105
|
||||
#: src/views/settings/index.tsx:119
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello déconnecté"
|
||||
|
||||
@@ -1663,7 +1692,7 @@ msgstr "Impossible de créer la liste de contrôle"
|
||||
msgid "Unable to create list"
|
||||
msgstr "Impossible de créer une liste"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:154
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Impossible de créer l'espace de travail"
|
||||
|
||||
@@ -1762,6 +1791,7 @@ msgstr "Commentaires illimités"
|
||||
msgid "Unlimited lists"
|
||||
msgstr "Listes illimitées"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:329
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
|
||||
msgid "Unlimited members"
|
||||
msgstr "Membres illimités"
|
||||
@@ -1795,15 +1825,19 @@ msgstr "a mis à jour le titre"
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "a mis à jour le titre en <0>{0}</0>"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:99
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:109
|
||||
msgid "Upgrade"
|
||||
msgstr "Mettre à niveau"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:202
|
||||
#: src/views/settings/index.tsx:216
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Passer à Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:369
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Passer à Pro (29 $/mois)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Passer au forfait d'équipe"
|
||||
@@ -1813,14 +1847,17 @@ msgstr "Passer au forfait d'équipe"
|
||||
msgid "Urgent"
|
||||
msgstr "Urgent"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:35
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "L'URL ne peut contenir que des lettres, des chiffres et des traits d'union"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:33
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:34
|
||||
msgid "URL cannot exceed 24 characters"
|
||||
msgstr "L'URL ne peut pas dépasser 24 caractères"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:31
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:32
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "L'URL doit comporter au moins 3 caractères"
|
||||
@@ -1829,7 +1866,7 @@ msgstr "L'URL doit comporter au moins 3 caractères"
|
||||
msgid "Use template"
|
||||
msgstr "Utiliser le modèle"
|
||||
|
||||
#: src/views/members/index.tsx:217
|
||||
#: src/views/members/index.tsx:237
|
||||
msgid "User"
|
||||
msgstr "Utilisateur"
|
||||
|
||||
@@ -1841,11 +1878,11 @@ msgstr "L'utilisateur est déjà membre de cet espace de travail"
|
||||
msgid "Video"
|
||||
msgstr "Vidéo"
|
||||
|
||||
#: src/views/settings/index.tsx:285
|
||||
#: src/views/settings/index.tsx:299
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Consultez et gérez vos clés API."
|
||||
|
||||
#: src/views/settings/index.tsx:224
|
||||
#: src/views/settings/index.tsx:238
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Consultez et gérez votre facturation et votre abonnement."
|
||||
|
||||
@@ -1901,11 +1938,15 @@ msgstr "Pourquoi créer un Trello open source ?"
|
||||
msgid "Workspace"
|
||||
msgstr "Espace de travail"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:143
|
||||
msgid "Workspace created successfully. You can upgrade later in settings."
|
||||
msgstr "Espace de travail créé avec succès. Vous pourrez effectuer la mise à niveau ultérieurement dans les paramètres."
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:26
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Espace de travail supprimé"
|
||||
|
||||
#: src/views/settings/index.tsx:188
|
||||
#: src/views/settings/index.tsx:202
|
||||
msgid "Workspace description"
|
||||
msgstr "Description de l'espace de travail"
|
||||
|
||||
@@ -1926,8 +1967,8 @@ msgstr "Description de l'espace de travail mise à jour"
|
||||
msgid "Workspace members"
|
||||
msgstr "Membres de l'espace de travail"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:169
|
||||
#: src/components/NewWorkspaceForm.tsx:259
|
||||
#: src/views/settings/index.tsx:183
|
||||
msgid "Workspace name"
|
||||
msgstr "Nom de l'espace de travail"
|
||||
|
||||
@@ -1935,6 +1976,10 @@ msgstr "Nom de l'espace de travail"
|
||||
msgid "Workspace name cannot exceed 24 characters"
|
||||
msgstr "Le nom de l'espace de travail ne peut pas dépasser 24 caractères"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:27
|
||||
msgid "Workspace name is required"
|
||||
msgstr "Le nom de l'espace de travail est requis"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:14
|
||||
msgid "Workspace name must be at least 3 characters long"
|
||||
msgstr "Le nom de l'espace de travail doit comporter au moins 3 caractères"
|
||||
@@ -1947,10 +1992,14 @@ msgstr "Nom de l'espace de travail mis à jour"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Slug de l'espace de travail mis à jour"
|
||||
|
||||
#: src/views/settings/index.tsx:178
|
||||
#: src/views/settings/index.tsx:192
|
||||
msgid "Workspace URL"
|
||||
msgstr "URL de l'espace de travail"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:273
|
||||
msgid "workspace-url"
|
||||
msgstr "workspace-url"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Écriture"
|
||||
@@ -1963,7 +2012,7 @@ msgstr "Annuel"
|
||||
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
|
||||
msgstr "Oui, nous proposons un plan gratuit à vie pour un usage individuel. Aucune restriction, aucun paywall, aucune limite."
|
||||
|
||||
#: src/views/settings/index.tsx:317
|
||||
#: src/views/settings/index.tsx:331
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Vous êtes sur le point de modifier votre mot de passe."
|
||||
|
||||
@@ -2011,11 +2060,11 @@ msgstr "Votre mot de passe a été modifié."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Votre image de profil a été mise à jour."
|
||||
|
||||
#: src/views/settings/index.tsx:106
|
||||
#: src/views/settings/index.tsx:120
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Votre compte Trello a été déconnecté."
|
||||
|
||||
#: src/views/settings/index.tsx:267
|
||||
#: src/views/settings/index.tsx:281
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Votre compte Trello est connecté."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -148,7 +148,7 @@ msgstr "Tutti i sistemi operativi"
|
||||
msgid "Already have an account? <0><1>Sign in</1></0>"
|
||||
msgstr "Hai già un account? <0><1>Accedi</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:113
|
||||
#: src/views/settings/index.tsx:127
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
msgstr "Si è verificato un errore durante la disconnessione del tuo account Trello."
|
||||
|
||||
@@ -156,7 +156,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/settings/index.tsx:282
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "API keys"
|
||||
msgstr "Chiavi API"
|
||||
|
||||
@@ -227,11 +227,11 @@ msgid "billed monthly"
|
||||
msgstr "fatturato mensilmente"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:221
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "Billing"
|
||||
msgstr "Fatturazione"
|
||||
|
||||
#: src/views/settings/index.tsx:231
|
||||
#: src/views/settings/index.tsx:245
|
||||
msgid "Billing portal"
|
||||
msgstr "Portale di fatturazione"
|
||||
|
||||
@@ -243,9 +243,10 @@ msgstr "Post del blog"
|
||||
msgid "Board"
|
||||
msgstr "Bacheca"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
|
||||
msgid "Board analytics (coming soon)"
|
||||
msgstr "Analisi della bacheca (prossimamente)"
|
||||
#: src/components/NewWorkspaceForm.tsx:346
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:81
|
||||
msgid "Board analytics"
|
||||
msgstr "Analisi della bacheca"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
@@ -315,7 +316,7 @@ msgstr "Segnalazione bug"
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:104
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
@@ -329,12 +330,12 @@ msgstr "Titolo della carta"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:314
|
||||
#: src/views/settings/index.tsx:324
|
||||
#: src/views/settings/index.tsx:328
|
||||
#: src/views/settings/index.tsx:338
|
||||
msgid "Change Password"
|
||||
msgstr "Cambia password"
|
||||
|
||||
#: src/views/settings/index.tsx:213
|
||||
#: src/views/settings/index.tsx:227
|
||||
msgid "Change the language of the app."
|
||||
msgstr "Cambia la lingua dell'app."
|
||||
|
||||
@@ -364,7 +365,9 @@ msgstr "Revisione del codice"
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Collabora senza problemi con il tuo team."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:349
|
||||
#: src/views/home/components/Features.tsx:66
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:84
|
||||
msgid "Coming soon"
|
||||
msgstr "Prossimamente"
|
||||
|
||||
@@ -398,7 +401,7 @@ msgid "Confirm your new password"
|
||||
msgstr "Conferma la tua nuova password"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:258
|
||||
#: src/views/settings/index.tsx:272
|
||||
msgid "Connect Trello"
|
||||
msgstr "Connetti Trello"
|
||||
|
||||
@@ -406,7 +409,7 @@ msgstr "Connetti Trello"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Connetti i tuoi strumenti preferiti per semplificare il tuo flusso di lavoro."
|
||||
|
||||
#: src/views/settings/index.tsx:245
|
||||
#: src/views/settings/index.tsx:259
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Connetti il tuo account Trello per importare le bacheche."
|
||||
|
||||
@@ -478,7 +481,7 @@ msgstr "Crea nuova etichetta"
|
||||
msgid "Create new list"
|
||||
msgstr "Crea nuova lista"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:94
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
msgid "Create workspace"
|
||||
msgstr "Crea spazio di lavoro"
|
||||
@@ -499,6 +502,11 @@ msgstr "La password attuale è obbligatoria"
|
||||
msgid "Custom domain"
|
||||
msgstr "Dominio personalizzato"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:315
|
||||
msgid "Custom URLs require upgrading to a Pro plan"
|
||||
msgstr "Gli URL personalizzati richiedono l'aggiornamento a un piano Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:339
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "URL personalizzato dell'area di lavoro"
|
||||
@@ -520,8 +528,8 @@ msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:332
|
||||
#: src/views/settings/index.tsx:342
|
||||
#: src/views/settings/index.tsx:346
|
||||
#: src/views/settings/index.tsx:356
|
||||
msgid "Delete account"
|
||||
msgstr "Elimina account"
|
||||
|
||||
@@ -542,8 +550,8 @@ msgid "Delete list"
|
||||
msgstr "Elimina lista"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:295
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:320
|
||||
msgid "Delete workspace"
|
||||
msgstr "Elimina spazio di lavoro"
|
||||
|
||||
@@ -569,7 +577,7 @@ msgstr "ha eliminato l'elemento <0>{0}</0> della checklist"
|
||||
msgid "Design"
|
||||
msgstr "Design"
|
||||
|
||||
#: src/views/settings/index.tsx:273
|
||||
#: src/views/settings/index.tsx:287
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Disconnetti Trello"
|
||||
|
||||
@@ -577,7 +585,7 @@ msgstr "Disconnetti Trello"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Discuti e collabora sulle schede."
|
||||
|
||||
#: src/views/settings/index.tsx:162
|
||||
#: src/views/settings/index.tsx:176
|
||||
msgid "Display name"
|
||||
msgstr "Nome visualizzato"
|
||||
|
||||
@@ -695,7 +703,7 @@ msgstr "Errore durante l'eliminazione dell'etichetta"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Errore durante l'eliminazione dell'area di lavoro"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/views/settings/index.tsx:126
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Errore durante la disconnessione da Trello"
|
||||
|
||||
@@ -729,6 +737,10 @@ msgstr "Errore durante l'aggiornamento dell'URL dell'area di lavoro"
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Errore nell'aggiornamento dell'abbonamento"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:142
|
||||
msgid "Error upgrading to Pro"
|
||||
msgstr "Errore durante l'aggiornamento a Pro"
|
||||
|
||||
#: src/views/settings/components/Avatar.tsx:56
|
||||
#: src/views/settings/components/Avatar.tsx:97
|
||||
msgid "Error uploading profile image"
|
||||
@@ -796,7 +808,7 @@ msgid "Free"
|
||||
msgstr "Gratuito"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Free Plan"
|
||||
msgstr "Piano gratuito"
|
||||
|
||||
@@ -955,7 +967,7 @@ msgstr "Colloquio"
|
||||
msgid "Invalid email address"
|
||||
msgstr "Indirizzo email non valido"
|
||||
|
||||
#: src/views/members/index.tsx:201
|
||||
#: src/views/members/index.tsx:221
|
||||
msgid "Invite"
|
||||
msgstr "Invita"
|
||||
|
||||
@@ -999,14 +1011,23 @@ msgstr "Etichette"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Etichette & Filtri"
|
||||
|
||||
#: src/views/settings/index.tsx:210
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Language"
|
||||
msgstr "Lingua"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:332
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Offerta di lancio"
|
||||
|
||||
#: src/views/members/index.tsx:191
|
||||
msgid "Launch offer: Get unlimited members with Pro"
|
||||
msgstr "Offerta di lancio: ottieni membri illimitati con Pro"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:99
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Offerta di lancio: posti illimitati a soli $29/mese con Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Apprendimento"
|
||||
@@ -1072,12 +1093,12 @@ msgstr "Media priorità"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:172
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Membri"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:168
|
||||
#: src/views/members/index.tsx:173
|
||||
msgid "Members | {0}"
|
||||
msgstr "Membri | {0}"
|
||||
|
||||
@@ -1149,7 +1170,7 @@ msgstr "La nuova password deve essere diversa dalla password attuale"
|
||||
msgid "New Ticket"
|
||||
msgstr "Nuovo ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:65
|
||||
#: src/components/NewWorkspaceForm.tsx:240
|
||||
msgid "New workspace"
|
||||
msgstr "Nuovo spazio di lavoro"
|
||||
|
||||
@@ -1185,11 +1206,11 @@ msgstr "Offerta"
|
||||
msgid "Onboarding"
|
||||
msgstr "Inserimento"
|
||||
|
||||
#: src/views/settings/index.tsx:335
|
||||
#: src/views/settings/index.tsx:349
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Una volta eliminato il tuo account, non si può tornare indietro. Questa azione non può essere annullata."
|
||||
|
||||
#: src/views/settings/index.tsx:298
|
||||
#: src/views/settings/index.tsx:312
|
||||
msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
|
||||
msgstr "Una volta eliminata l'area di lavoro, non si può tornare indietro. Questa azione non può essere annullata."
|
||||
|
||||
@@ -1221,11 +1242,11 @@ msgstr "La password deve contenere almeno 8 caratteri"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Le password non corrispondono"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:102
|
||||
msgid "Payment frequency"
|
||||
msgstr "Frequenza di pagamento"
|
||||
|
||||
#: src/views/members/index.tsx:129
|
||||
#: src/views/members/index.tsx:134
|
||||
msgid "Pending"
|
||||
msgstr "In attesa"
|
||||
|
||||
@@ -1264,7 +1285,7 @@ msgstr "Seleziona un file da caricare."
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:26
|
||||
#: src/components/FeedbackModal.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:42
|
||||
#: src/components/NewWorkspaceForm.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:174
|
||||
#: src/views/board/components/NewListForm.tsx:78
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||
@@ -1308,7 +1329,7 @@ msgid "Pricing"
|
||||
msgstr "Prezzi"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:91
|
||||
msgid "Priority email support"
|
||||
msgstr "Supporto email prioritario"
|
||||
|
||||
@@ -1320,7 +1341,7 @@ msgstr "Informativa sulla privacy"
|
||||
msgid "Private"
|
||||
msgstr "Privato"
|
||||
|
||||
#: src/views/members/index.tsx:186
|
||||
#: src/views/members/index.tsx:205
|
||||
msgid "Pro Plan"
|
||||
msgstr "Piano Pro"
|
||||
|
||||
@@ -1332,7 +1353,7 @@ msgstr "Piano Pro ∞"
|
||||
msgid "Profile image updated"
|
||||
msgstr "Immagine del profilo aggiornata"
|
||||
|
||||
#: src/views/settings/index.tsx:157
|
||||
#: src/views/settings/index.tsx:171
|
||||
msgid "Profile picture"
|
||||
msgstr "Immagine del profilo"
|
||||
|
||||
@@ -1368,7 +1389,7 @@ msgstr "Remoto"
|
||||
msgid "Remove"
|
||||
msgstr "Rimuovi"
|
||||
|
||||
#: src/views/members/index.tsx:143
|
||||
#: src/views/members/index.tsx:148
|
||||
msgid "Remove member"
|
||||
msgstr "Rimuovi membro"
|
||||
|
||||
@@ -1424,7 +1445,7 @@ msgstr "Revoca"
|
||||
msgid "Roadmap"
|
||||
msgstr "Roadmap"
|
||||
|
||||
#: src/views/members/index.tsx:223
|
||||
#: src/views/members/index.tsx:243
|
||||
msgid "Role"
|
||||
msgstr "Ruolo"
|
||||
|
||||
@@ -1473,12 +1494,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:165
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:147
|
||||
#: src/views/settings/index.tsx:161
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Impostazioni | {0}"
|
||||
|
||||
@@ -1546,7 +1567,7 @@ msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
#: src/views/members/index.tsx:207
|
||||
msgid "Team Plan"
|
||||
msgstr "Piano Team"
|
||||
|
||||
@@ -1614,6 +1635,14 @@ msgstr "Questo comporterà l'eliminazione permanente di tutti i dati associati a
|
||||
msgid "This will result in the permanent deletion of all data associated with your account."
|
||||
msgstr "Questo comporterà l'eliminazione permanente di tutti i dati associati al tuo account."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:284
|
||||
msgid "This workspace URL has already been taken"
|
||||
msgstr "Questo URL dello spazio di lavoro è già stato utilizzato"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:286
|
||||
msgid "This workspace URL is reserved"
|
||||
msgstr "Questo URL dello spazio di lavoro è riservato"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:123
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Questo nome utente dell'area di lavoro è già stato utilizzato"
|
||||
@@ -1631,7 +1660,7 @@ msgstr "Attiva/disattiva menu"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
msgstr "Tieni traccia di tutte le modifiche alle schede con una cronologia dettagliata delle attività."
|
||||
|
||||
#: src/views/settings/index.tsx:105
|
||||
#: src/views/settings/index.tsx:119
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello disconnesso"
|
||||
|
||||
@@ -1663,7 +1692,7 @@ msgstr "Impossibile creare la checklist"
|
||||
msgid "Unable to create list"
|
||||
msgstr "Impossibile creare la lista"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:154
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Impossibile creare lo spazio di lavoro"
|
||||
|
||||
@@ -1762,6 +1791,7 @@ msgstr "Commenti illimitati"
|
||||
msgid "Unlimited lists"
|
||||
msgstr "Liste illimitate"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:329
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
|
||||
msgid "Unlimited members"
|
||||
msgstr "Membri illimitati"
|
||||
@@ -1795,15 +1825,19 @@ msgstr "ha aggiornato il titolo"
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "ha aggiornato il titolo in <0>{0}</0>"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:99
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:109
|
||||
msgid "Upgrade"
|
||||
msgstr "Aggiorna"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:202
|
||||
#: src/views/settings/index.tsx:216
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Passa a Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:369
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Passa a Pro ($29/mese)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Passa al Piano Team"
|
||||
@@ -1813,14 +1847,17 @@ msgstr "Passa al Piano Team"
|
||||
msgid "Urgent"
|
||||
msgstr "Urgente"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:35
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "L'URL può contenere solo lettere, numeri e trattini"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:33
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:34
|
||||
msgid "URL cannot exceed 24 characters"
|
||||
msgstr "L'URL non può superare i 24 caratteri"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:31
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:32
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "L'URL deve contenere almeno 3 caratteri"
|
||||
@@ -1829,7 +1866,7 @@ msgstr "L'URL deve contenere almeno 3 caratteri"
|
||||
msgid "Use template"
|
||||
msgstr "Usa template"
|
||||
|
||||
#: src/views/members/index.tsx:217
|
||||
#: src/views/members/index.tsx:237
|
||||
msgid "User"
|
||||
msgstr "Utente"
|
||||
|
||||
@@ -1841,11 +1878,11 @@ msgstr "L'utente è già membro di questo spazio di lavoro"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:285
|
||||
#: src/views/settings/index.tsx:299
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Visualizza e gestisci le tue chiavi API."
|
||||
|
||||
#: src/views/settings/index.tsx:224
|
||||
#: src/views/settings/index.tsx:238
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Visualizza e gestisci la tua fatturazione e abbonamento."
|
||||
|
||||
@@ -1901,11 +1938,15 @@ msgstr "Perché creare un Trello open source?"
|
||||
msgid "Workspace"
|
||||
msgstr "Spazio di lavoro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:143
|
||||
msgid "Workspace created successfully. You can upgrade later in settings."
|
||||
msgstr "Spazio di lavoro creato con successo. Puoi effettuare l'aggiornamento più tardi nelle impostazioni."
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:26
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Spazio di lavoro eliminato"
|
||||
|
||||
#: src/views/settings/index.tsx:188
|
||||
#: src/views/settings/index.tsx:202
|
||||
msgid "Workspace description"
|
||||
msgstr "Descrizione dello spazio di lavoro"
|
||||
|
||||
@@ -1926,8 +1967,8 @@ msgstr "Descrizione dell'area di lavoro aggiornata"
|
||||
msgid "Workspace members"
|
||||
msgstr "Membri del workspace"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:169
|
||||
#: src/components/NewWorkspaceForm.tsx:259
|
||||
#: src/views/settings/index.tsx:183
|
||||
msgid "Workspace name"
|
||||
msgstr "Nome dello spazio di lavoro"
|
||||
|
||||
@@ -1935,6 +1976,10 @@ msgstr "Nome dello spazio di lavoro"
|
||||
msgid "Workspace name cannot exceed 24 characters"
|
||||
msgstr "Il nome dello spazio di lavoro non può superare i 24 caratteri"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:27
|
||||
msgid "Workspace name is required"
|
||||
msgstr "Il nome dello spazio di lavoro è obbligatorio"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:14
|
||||
msgid "Workspace name must be at least 3 characters long"
|
||||
msgstr "Il nome dello spazio di lavoro deve contenere almeno 3 caratteri"
|
||||
@@ -1947,10 +1992,14 @@ msgstr "Nome dello spazio di lavoro aggiornato"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Slug dell'area di lavoro aggiornato"
|
||||
|
||||
#: src/views/settings/index.tsx:178
|
||||
#: src/views/settings/index.tsx:192
|
||||
msgid "Workspace URL"
|
||||
msgstr "URL dello spazio di lavoro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:273
|
||||
msgid "workspace-url"
|
||||
msgstr "workspace-url"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Scrittura"
|
||||
@@ -1963,7 +2012,7 @@ msgstr "Annuale"
|
||||
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
|
||||
msgstr "Sì, offriamo un piano gratuito per sempre per uso individuale. Nessuna restrizione, nessun paywall, nessun limite."
|
||||
|
||||
#: src/views/settings/index.tsx:317
|
||||
#: src/views/settings/index.tsx:331
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Stai per cambiare la tua password."
|
||||
|
||||
@@ -2011,11 +2060,11 @@ msgstr "La tua password è stata modificata."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "La tua immagine del profilo è stata aggiornata."
|
||||
|
||||
#: src/views/settings/index.tsx:106
|
||||
#: src/views/settings/index.tsx:120
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Il tuo account Trello è stato disconnesso."
|
||||
|
||||
#: src/views/settings/index.tsx:267
|
||||
#: src/views/settings/index.tsx:281
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Il tuo account Trello è connesso."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -148,7 +148,7 @@ msgstr "Alle systemen operationeel"
|
||||
msgid "Already have an account? <0><1>Sign in</1></0>"
|
||||
msgstr "Heb je al een account? <0><1>Log in</1></0>"
|
||||
|
||||
#: src/views/settings/index.tsx:113
|
||||
#: src/views/settings/index.tsx:127
|
||||
msgid "An error occurred while disconnecting your Trello account."
|
||||
msgstr "Er is een fout opgetreden bij het verbreken van de verbinding met je Trello-account."
|
||||
|
||||
@@ -156,7 +156,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/settings/index.tsx:282
|
||||
#: src/views/settings/index.tsx:296
|
||||
msgid "API keys"
|
||||
msgstr "API-sleutels"
|
||||
|
||||
@@ -227,11 +227,11 @@ msgid "billed monthly"
|
||||
msgstr "maandelijks gefactureerd"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:55
|
||||
#: src/views/settings/index.tsx:221
|
||||
#: src/views/settings/index.tsx:235
|
||||
msgid "Billing"
|
||||
msgstr "Facturering"
|
||||
|
||||
#: src/views/settings/index.tsx:231
|
||||
#: src/views/settings/index.tsx:245
|
||||
msgid "Billing portal"
|
||||
msgstr "Factureringsportaal"
|
||||
|
||||
@@ -243,9 +243,10 @@ msgstr "Blogbericht"
|
||||
msgid "Board"
|
||||
msgstr "Bord"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:80
|
||||
msgid "Board analytics (coming soon)"
|
||||
msgstr "Bordanalyses (binnenkort beschikbaar)"
|
||||
#: src/components/NewWorkspaceForm.tsx:346
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:81
|
||||
msgid "Board analytics"
|
||||
msgstr "Bordanalyses"
|
||||
|
||||
#: src/views/boards/components/NewBoardForm.tsx:21
|
||||
msgid "Board name cannot exceed 100 characters"
|
||||
@@ -315,7 +316,7 @@ msgstr "Bugrapport"
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:168
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:88
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:98
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:94
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:104
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
@@ -329,12 +330,12 @@ msgstr "Kaarttitel"
|
||||
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:109
|
||||
#: src/views/settings/components/ChangePasswordConfirmation.tsx:178
|
||||
#: src/views/settings/index.tsx:314
|
||||
#: src/views/settings/index.tsx:324
|
||||
#: src/views/settings/index.tsx:328
|
||||
#: src/views/settings/index.tsx:338
|
||||
msgid "Change Password"
|
||||
msgstr "Wachtwoord wijzigen"
|
||||
|
||||
#: src/views/settings/index.tsx:213
|
||||
#: src/views/settings/index.tsx:227
|
||||
msgid "Change the language of the app."
|
||||
msgstr "Wijzig de taal van de app."
|
||||
|
||||
@@ -364,7 +365,9 @@ msgstr "Code review"
|
||||
msgid "Collaborate seamlessly with your team."
|
||||
msgstr "Werk naadloos samen met je team."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:349
|
||||
#: src/views/home/components/Features.tsx:66
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:84
|
||||
msgid "Coming soon"
|
||||
msgstr "Binnenkort beschikbaar"
|
||||
|
||||
@@ -398,7 +401,7 @@ msgid "Confirm your new password"
|
||||
msgstr "Bevestig je nieuwe wachtwoord"
|
||||
|
||||
#: src/views/boards/components/ImportBoardsForm.tsx:157
|
||||
#: src/views/settings/index.tsx:258
|
||||
#: src/views/settings/index.tsx:272
|
||||
msgid "Connect Trello"
|
||||
msgstr "Verbind Trello"
|
||||
|
||||
@@ -406,7 +409,7 @@ msgstr "Verbind Trello"
|
||||
msgid "Connect your favorite tools to streamline your workflow."
|
||||
msgstr "Verbind je favoriete tools om je werkstroom te stroomlijnen."
|
||||
|
||||
#: src/views/settings/index.tsx:245
|
||||
#: src/views/settings/index.tsx:259
|
||||
msgid "Connect your Trello account to import boards."
|
||||
msgstr "Verbind je Trello-account om borden te importeren."
|
||||
|
||||
@@ -478,7 +481,7 @@ msgstr "Maak nieuw label"
|
||||
msgid "Create new list"
|
||||
msgstr "Maak nieuwe lijst"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:94
|
||||
#: src/components/NewWorkspaceForm.tsx:384
|
||||
#: src/components/WorkspaceMenu.tsx:116
|
||||
msgid "Create workspace"
|
||||
msgstr "Werkruimte maken"
|
||||
@@ -499,6 +502,11 @@ msgstr "Huidig wachtwoord is vereist"
|
||||
msgid "Custom domain"
|
||||
msgstr "Aangepast domein"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:315
|
||||
msgid "Custom URLs require upgrading to a Pro plan"
|
||||
msgstr "Aangepaste URL's vereisen een upgrade naar een Pro-abonnement"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:339
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:74
|
||||
msgid "Custom workspace URL"
|
||||
msgstr "Aangepaste werkruimte-URL"
|
||||
@@ -520,8 +528,8 @@ msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:96
|
||||
#: src/views/settings/index.tsx:332
|
||||
#: src/views/settings/index.tsx:342
|
||||
#: src/views/settings/index.tsx:346
|
||||
#: src/views/settings/index.tsx:356
|
||||
msgid "Delete account"
|
||||
msgstr "Account verwijderen"
|
||||
|
||||
@@ -542,8 +550,8 @@ msgid "Delete list"
|
||||
msgstr "Lijst verwijderen"
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:106
|
||||
#: src/views/settings/index.tsx:295
|
||||
#: src/views/settings/index.tsx:306
|
||||
#: src/views/settings/index.tsx:309
|
||||
#: src/views/settings/index.tsx:320
|
||||
msgid "Delete workspace"
|
||||
msgstr "Werkruimte verwijderen"
|
||||
|
||||
@@ -569,7 +577,7 @@ msgstr "heeft checklistitem <0>{0}</0> verwijderd"
|
||||
msgid "Design"
|
||||
msgstr "Ontwerp"
|
||||
|
||||
#: src/views/settings/index.tsx:273
|
||||
#: src/views/settings/index.tsx:287
|
||||
msgid "Disconnect Trello"
|
||||
msgstr "Trello ontkoppelen"
|
||||
|
||||
@@ -577,7 +585,7 @@ msgstr "Trello ontkoppelen"
|
||||
msgid "Discuss and collaborate on cards."
|
||||
msgstr "Bespreek en werk samen aan kaarten."
|
||||
|
||||
#: src/views/settings/index.tsx:162
|
||||
#: src/views/settings/index.tsx:176
|
||||
msgid "Display name"
|
||||
msgstr "Weergavenaam"
|
||||
|
||||
@@ -695,7 +703,7 @@ msgstr "Fout bij het verwijderen van label"
|
||||
msgid "Error deleting workspace"
|
||||
msgstr "Fout bij verwijderen werkruimte"
|
||||
|
||||
#: src/views/settings/index.tsx:112
|
||||
#: src/views/settings/index.tsx:126
|
||||
msgid "Error disconnecting Trello"
|
||||
msgstr "Fout bij ontkoppelen van Trello"
|
||||
|
||||
@@ -729,6 +737,10 @@ msgstr "Fout bij het bijwerken van werkruimte-URL"
|
||||
msgid "Error upgrading subscription"
|
||||
msgstr "Fout bij het upgraden van abonnement"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:142
|
||||
msgid "Error upgrading to Pro"
|
||||
msgstr "Fout bij upgraden naar Pro"
|
||||
|
||||
#: src/views/settings/components/Avatar.tsx:56
|
||||
#: src/views/settings/components/Avatar.tsx:97
|
||||
msgid "Error uploading profile image"
|
||||
@@ -796,7 +808,7 @@ msgid "Free"
|
||||
msgstr "Gratis"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:193
|
||||
#: src/views/members/index.tsx:189
|
||||
#: src/views/members/index.tsx:208
|
||||
msgid "Free Plan"
|
||||
msgstr "Gratis plan"
|
||||
|
||||
@@ -955,7 +967,7 @@ msgstr "Interviewen"
|
||||
msgid "Invalid email address"
|
||||
msgstr "Ongeldig e-mailadres"
|
||||
|
||||
#: src/views/members/index.tsx:201
|
||||
#: src/views/members/index.tsx:221
|
||||
msgid "Invite"
|
||||
msgstr "Uitnodigen"
|
||||
|
||||
@@ -999,14 +1011,23 @@ msgstr "Labels"
|
||||
msgid "Labels & Filters"
|
||||
msgstr "Labels & filters"
|
||||
|
||||
#: src/views/settings/index.tsx:210
|
||||
#: src/views/settings/index.tsx:224
|
||||
msgid "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:332
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:67
|
||||
msgid "Launch offer"
|
||||
msgstr "Introductieaanbieding"
|
||||
|
||||
#: src/views/members/index.tsx:191
|
||||
msgid "Launch offer: Get unlimited members with Pro"
|
||||
msgstr "Lanceringsaanbieding: krijg onbeperkt aantal leden met Pro"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:99
|
||||
msgid "Launch offer: unlimited seats for just $29/month with Pro"
|
||||
msgstr "Introductieaanbieding: onbeperkt aantal gebruikers voor slechts $29/maand met Pro"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:83
|
||||
msgid "Learning"
|
||||
msgstr "Leren"
|
||||
@@ -1072,12 +1093,12 @@ msgstr "Gemiddelde prioriteit"
|
||||
#: src/views/board/components/Filters.tsx:93
|
||||
#: src/views/board/components/NewCardForm.tsx:357
|
||||
#: src/views/card/index.tsx:125
|
||||
#: src/views/members/index.tsx:172
|
||||
#: src/views/members/index.tsx:178
|
||||
msgid "Members"
|
||||
msgstr "Leden"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/members/index.tsx:168
|
||||
#: src/views/members/index.tsx:173
|
||||
msgid "Members | {0}"
|
||||
msgstr "Leden | {0}"
|
||||
|
||||
@@ -1149,7 +1170,7 @@ msgstr "Nieuw wachtwoord moet verschillen van het huidige wachtwoord"
|
||||
msgid "New Ticket"
|
||||
msgstr "Nieuw ticket"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:65
|
||||
#: src/components/NewWorkspaceForm.tsx:240
|
||||
msgid "New workspace"
|
||||
msgstr "Nieuwe werkruimte"
|
||||
|
||||
@@ -1185,11 +1206,11 @@ msgstr "Aanbod"
|
||||
msgid "Onboarding"
|
||||
msgstr "Inwerktraject"
|
||||
|
||||
#: src/views/settings/index.tsx:335
|
||||
#: src/views/settings/index.tsx:349
|
||||
msgid "Once you delete your account, there is no going back. This action cannot be undone."
|
||||
msgstr "Zodra je je account verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt."
|
||||
|
||||
#: src/views/settings/index.tsx:298
|
||||
#: src/views/settings/index.tsx:312
|
||||
msgid "Once you delete your workspace, there is no going back. This action cannot be undone."
|
||||
msgstr "Zodra je je werkruimte verwijdert, is er geen weg terug. Deze actie kan niet ongedaan worden gemaakt."
|
||||
|
||||
@@ -1221,11 +1242,11 @@ msgstr "Wachtwoord moet minimaal 8 tekens bevatten"
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Wachtwoorden komen niet overeen"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:96
|
||||
#: src/views/home/components/Pricing.tsx:102
|
||||
msgid "Payment frequency"
|
||||
msgstr "Betalingsfrequentie"
|
||||
|
||||
#: src/views/members/index.tsx:129
|
||||
#: src/views/members/index.tsx:134
|
||||
msgid "Pending"
|
||||
msgstr "In behandeling"
|
||||
|
||||
@@ -1264,7 +1285,7 @@ msgstr "Selecteer een bestand om te uploaden."
|
||||
|
||||
#: src/components/DeleteLabelConfirmation.tsx:26
|
||||
#: src/components/FeedbackModal.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:42
|
||||
#: src/components/NewWorkspaceForm.tsx:155
|
||||
#: src/views/board/components/NewCardForm.tsx:174
|
||||
#: src/views/board/components/NewListForm.tsx:78
|
||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||
@@ -1308,7 +1329,7 @@ msgid "Pricing"
|
||||
msgstr "Prijzen"
|
||||
|
||||
#: src/views/home/components/Pricing.tsx:56
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:86
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:91
|
||||
msgid "Priority email support"
|
||||
msgstr "Prioriteit e-mailondersteuning"
|
||||
|
||||
@@ -1320,7 +1341,7 @@ msgstr "Privacybeleid"
|
||||
msgid "Private"
|
||||
msgstr "Privé"
|
||||
|
||||
#: src/views/members/index.tsx:186
|
||||
#: src/views/members/index.tsx:205
|
||||
msgid "Pro Plan"
|
||||
msgstr "Pro Plan"
|
||||
|
||||
@@ -1332,7 +1353,7 @@ msgstr "Pro Plan ∞"
|
||||
msgid "Profile image updated"
|
||||
msgstr "Profielafbeelding bijgewerkt"
|
||||
|
||||
#: src/views/settings/index.tsx:157
|
||||
#: src/views/settings/index.tsx:171
|
||||
msgid "Profile picture"
|
||||
msgstr "Profielfoto"
|
||||
|
||||
@@ -1368,7 +1389,7 @@ msgstr "Op afstand"
|
||||
msgid "Remove"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: src/views/members/index.tsx:143
|
||||
#: src/views/members/index.tsx:148
|
||||
msgid "Remove member"
|
||||
msgstr "Lid verwijderen"
|
||||
|
||||
@@ -1424,7 +1445,7 @@ msgstr "Intrekken"
|
||||
msgid "Roadmap"
|
||||
msgstr "Roadmap"
|
||||
|
||||
#: src/views/members/index.tsx:223
|
||||
#: src/views/members/index.tsx:243
|
||||
msgid "Role"
|
||||
msgstr "Rol"
|
||||
|
||||
@@ -1473,12 +1494,12 @@ msgid "Senior"
|
||||
msgstr "Senior"
|
||||
|
||||
#: src/components/SideNavigation.tsx:78
|
||||
#: src/views/settings/index.tsx:151
|
||||
#: src/views/settings/index.tsx:165
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
|
||||
#. placeholder {0}: workspace.name ?? "Workspace"
|
||||
#: src/views/settings/index.tsx:147
|
||||
#: src/views/settings/index.tsx:161
|
||||
msgid "Settings | {0}"
|
||||
msgstr "Instellingen | {0}"
|
||||
|
||||
@@ -1546,7 +1567,7 @@ msgid "System"
|
||||
msgstr "Systeem"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:182
|
||||
#: src/views/members/index.tsx:188
|
||||
#: src/views/members/index.tsx:207
|
||||
msgid "Team Plan"
|
||||
msgstr "Teamplan"
|
||||
|
||||
@@ -1614,6 +1635,14 @@ msgstr "Dit zal resulteren in het permanent verwijderen van alle gegevens die aa
|
||||
msgid "This will result in the permanent deletion of all data associated with your account."
|
||||
msgstr "Dit zal resulteren in het permanent verwijderen van alle gegevens die aan je account zijn gekoppeld."
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:284
|
||||
msgid "This workspace URL has already been taken"
|
||||
msgstr "Deze werkruimte-URL is al in gebruik"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:286
|
||||
msgid "This workspace URL is reserved"
|
||||
msgstr "Deze werkruimte-URL is gereserveerd"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:123
|
||||
msgid "This workspace username has already been taken"
|
||||
msgstr "Deze werkruimtegebruikersnaam is al in gebruik"
|
||||
@@ -1631,7 +1660,7 @@ msgstr "Menu in-/uitschakelen"
|
||||
msgid "Track all card changes with detailed activity history."
|
||||
msgstr "Volg alle kaartwijzigingen met gedetailleerde activiteitengeschiedenis."
|
||||
|
||||
#: src/views/settings/index.tsx:105
|
||||
#: src/views/settings/index.tsx:119
|
||||
msgid "Trello disconnected"
|
||||
msgstr "Trello ontkoppeld"
|
||||
|
||||
@@ -1663,7 +1692,7 @@ msgstr "Kan checklist niet maken"
|
||||
msgid "Unable to create list"
|
||||
msgstr "Kan geen lijst maken"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:41
|
||||
#: src/components/NewWorkspaceForm.tsx:154
|
||||
msgid "Unable to create workspace"
|
||||
msgstr "Kan werkruimte niet aanmaken"
|
||||
|
||||
@@ -1762,6 +1791,7 @@ msgstr "Onbeperkt aantal opmerkingen"
|
||||
msgid "Unlimited lists"
|
||||
msgstr "Onbeperkt aantal lijsten"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:329
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:64
|
||||
msgid "Unlimited members"
|
||||
msgstr "Onbeperkt aantal leden"
|
||||
@@ -1795,15 +1825,19 @@ msgstr "titel bijgewerkt"
|
||||
msgid "updated the title to <0>{0}</0>"
|
||||
msgstr "titel bijgewerkt naar <0>{0}</0>"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:99
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:109
|
||||
msgid "Upgrade"
|
||||
msgstr "Upgraden"
|
||||
|
||||
#: src/views/settings/components/UpgradeToProConfirmation.tsx:52
|
||||
#: src/views/settings/index.tsx:202
|
||||
#: src/views/settings/index.tsx:216
|
||||
msgid "Upgrade to Pro"
|
||||
msgstr "Upgraden naar Pro"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:369
|
||||
msgid "Upgrade to Pro ($29/month)"
|
||||
msgstr "Upgrade naar Pro ($29/maand)"
|
||||
|
||||
#: src/views/members/components/InviteMemberForm.tsx:224
|
||||
msgid "Upgrade to Team Plan"
|
||||
msgstr "Upgraden naar teamplan"
|
||||
@@ -1813,14 +1847,17 @@ msgstr "Upgraden naar teamplan"
|
||||
msgid "Urgent"
|
||||
msgstr "Urgent"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:35
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:36
|
||||
msgid "URL can only contain letters, numbers, and hyphens"
|
||||
msgstr "URL kan alleen letters, cijfers en koppeltekens bevatten"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:33
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:34
|
||||
msgid "URL cannot exceed 24 characters"
|
||||
msgstr "URL mag niet langer zijn dan 24 tekens"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:31
|
||||
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:32
|
||||
msgid "URL must be at least 3 characters long"
|
||||
msgstr "URL moet minimaal 3 tekens lang zijn"
|
||||
@@ -1829,7 +1866,7 @@ msgstr "URL moet minimaal 3 tekens lang zijn"
|
||||
msgid "Use template"
|
||||
msgstr "Sjabloon gebruiken"
|
||||
|
||||
#: src/views/members/index.tsx:217
|
||||
#: src/views/members/index.tsx:237
|
||||
msgid "User"
|
||||
msgstr "Gebruiker"
|
||||
|
||||
@@ -1841,11 +1878,11 @@ msgstr "Gebruiker is al lid van deze werkruimte"
|
||||
msgid "Video"
|
||||
msgstr "Video"
|
||||
|
||||
#: src/views/settings/index.tsx:285
|
||||
#: src/views/settings/index.tsx:299
|
||||
msgid "View and manage your API keys."
|
||||
msgstr "Bekijk en beheer je API-sleutels."
|
||||
|
||||
#: src/views/settings/index.tsx:224
|
||||
#: src/views/settings/index.tsx:238
|
||||
msgid "View and manage your billing and subscription."
|
||||
msgstr "Bekijk en beheer je facturering en abonnement."
|
||||
|
||||
@@ -1901,11 +1938,15 @@ msgstr "Waarom een open source Trello maken?"
|
||||
msgid "Workspace"
|
||||
msgstr "Werkruimte"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:143
|
||||
msgid "Workspace created successfully. You can upgrade later in settings."
|
||||
msgstr "Werkruimte succesvol aangemaakt. Je kunt later upgraden in de instellingen."
|
||||
|
||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:26
|
||||
msgid "Workspace deleted"
|
||||
msgstr "Werkruimte verwijderd"
|
||||
|
||||
#: src/views/settings/index.tsx:188
|
||||
#: src/views/settings/index.tsx:202
|
||||
msgid "Workspace description"
|
||||
msgstr "Werkruimte beschrijving"
|
||||
|
||||
@@ -1926,8 +1967,8 @@ msgstr "Werkruimtebeschrijving bijgewerkt"
|
||||
msgid "Workspace members"
|
||||
msgstr "Werkruimteleden"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:81
|
||||
#: src/views/settings/index.tsx:169
|
||||
#: src/components/NewWorkspaceForm.tsx:259
|
||||
#: src/views/settings/index.tsx:183
|
||||
msgid "Workspace name"
|
||||
msgstr "Naam werkruimte"
|
||||
|
||||
@@ -1935,6 +1976,10 @@ msgstr "Naam werkruimte"
|
||||
msgid "Workspace name cannot exceed 24 characters"
|
||||
msgstr "Werkruimtenaam mag niet langer zijn dan 24 tekens"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:27
|
||||
msgid "Workspace name is required"
|
||||
msgstr "Naam van werkruimte is verplicht"
|
||||
|
||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:14
|
||||
msgid "Workspace name must be at least 3 characters long"
|
||||
msgstr "Werkruimtenaam moet minimaal 3 tekens lang zijn"
|
||||
@@ -1947,10 +1992,14 @@ msgstr "Werkruimtenaam bijgewerkt"
|
||||
msgid "Workspace slug updated"
|
||||
msgstr "Werkruimte-slug bijgewerkt"
|
||||
|
||||
#: src/views/settings/index.tsx:178
|
||||
#: src/views/settings/index.tsx:192
|
||||
msgid "Workspace URL"
|
||||
msgstr "Werkruimte URL"
|
||||
|
||||
#: src/components/NewWorkspaceForm.tsx:273
|
||||
msgid "workspace-url"
|
||||
msgstr "werkruimte-url"
|
||||
|
||||
#: src/views/boards/components/TemplateBoards.tsx:30
|
||||
msgid "Writing"
|
||||
msgstr "Schrijven"
|
||||
@@ -1963,7 +2012,7 @@ msgstr "Jaarlijks"
|
||||
msgid "Yes, we offer an forever free plan for individual use. No restrictions, no paywalls, no limits."
|
||||
msgstr "Ja, we bieden een voor altijd gratis plan voor individueel gebruik. Geen beperkingen, geen betaalmuren, geen limieten."
|
||||
|
||||
#: src/views/settings/index.tsx:317
|
||||
#: src/views/settings/index.tsx:331
|
||||
msgid "You are about to change your password."
|
||||
msgstr "Je staat op het punt je wachtwoord te wijzigen."
|
||||
|
||||
@@ -2011,11 +2060,11 @@ msgstr "Je wachtwoord is gewijzigd."
|
||||
msgid "Your profile image has been updated."
|
||||
msgstr "Je profielafbeelding is bijgewerkt."
|
||||
|
||||
#: src/views/settings/index.tsx:106
|
||||
#: src/views/settings/index.tsx:120
|
||||
msgid "Your Trello account has been disconnected."
|
||||
msgstr "Je Trello-account is ontkoppeld."
|
||||
|
||||
#: src/views/settings/index.tsx:267
|
||||
#: src/views/settings/index.tsx:281
|
||||
msgid "Your Trello account is connected."
|
||||
msgstr "Je Trello-account is verbonden."
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -47,9 +47,9 @@ export default async function handler(
|
||||
|
||||
const metaData = checkoutSession.metadata;
|
||||
|
||||
if (metaData?.workspacePublicId && metaData.workspaceSlug) {
|
||||
if (metaData?.workspacePublicId) {
|
||||
await workspaceRepo.update(db, metaData.workspacePublicId, {
|
||||
slug: metaData.workspaceSlug,
|
||||
...(metaData.workspaceSlug && { slug: metaData.workspaceSlug }),
|
||||
plan: "pro",
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { createContext, useContext, useState } from "react";
|
||||
import { createContext, useCallback, useContext, useState } from "react";
|
||||
|
||||
interface ModalState {
|
||||
contentType: string;
|
||||
@@ -42,57 +42,59 @@ export const ModalProvider: React.FC<Props> = ({ children }) => {
|
||||
const entityId = currentModal?.entityId || "";
|
||||
const entityLabel = currentModal?.entityLabel || "";
|
||||
|
||||
const openModal = (
|
||||
contentType: string,
|
||||
entityId?: string,
|
||||
entityLabel?: string,
|
||||
) => {
|
||||
const newModal: ModalState = { contentType, entityId, entityLabel };
|
||||
setModalStack((prev) => [...prev, newModal]);
|
||||
};
|
||||
const openModal = useCallback(
|
||||
(contentType: string, entityId?: string, entityLabel?: string) => {
|
||||
const newModal: ModalState = { contentType, entityId, entityLabel };
|
||||
setModalStack((prev) => [...prev, newModal]);
|
||||
},
|
||||
[],
|
||||
);
|
||||
|
||||
const closeModal = () => {
|
||||
const closeModal = useCallback(() => {
|
||||
setModalStack((prev) => {
|
||||
if (prev.length <= 1) {
|
||||
return [];
|
||||
}
|
||||
return prev.slice(0, -1);
|
||||
});
|
||||
};
|
||||
}, []);
|
||||
|
||||
const closeModals = (count: number) => {
|
||||
setModalStack(prev => {
|
||||
const closeModals = useCallback((count: number) => {
|
||||
setModalStack((prev) => {
|
||||
const newLength = Math.max(0, prev.length - count);
|
||||
return prev.slice(0, newLength);
|
||||
});
|
||||
};
|
||||
}, []);
|
||||
|
||||
const clearAllModals = () => {
|
||||
const clearAllModals = useCallback(() => {
|
||||
setModalStack([]);
|
||||
};
|
||||
}, []);
|
||||
|
||||
const setModalState = (modalType: string, state: any) => {
|
||||
const setModalState = useCallback((modalType: string, state: any) => {
|
||||
setModalStates((prev) => ({
|
||||
...prev,
|
||||
[modalType]: state,
|
||||
}));
|
||||
};
|
||||
}, []);
|
||||
|
||||
const getModalState = (modalType: string) => {
|
||||
return modalStates[modalType];
|
||||
};
|
||||
const getModalState = useCallback(
|
||||
(modalType: string) => {
|
||||
return modalStates[modalType];
|
||||
},
|
||||
[modalStates],
|
||||
);
|
||||
|
||||
const clearModalState = (modalType: string) => {
|
||||
const clearModalState = useCallback((modalType: string) => {
|
||||
setModalStates((prev) => {
|
||||
const newStates = { ...prev };
|
||||
delete newStates[modalType];
|
||||
return newStates;
|
||||
});
|
||||
};
|
||||
}, []);
|
||||
|
||||
const clearAllModalStates = () => {
|
||||
const clearAllModalStates = useCallback(() => {
|
||||
setModalStates({});
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<ModalContext.Provider
|
||||
|
||||
@@ -47,12 +47,16 @@ export const WorkspaceProvider: React.FC<{ children: ReactNode }> = ({
|
||||
const [hasLoaded, setHasLoaded] = useState(false);
|
||||
|
||||
const { data, isLoading } = api.workspace.all.useQuery();
|
||||
const utils = api.useUtils();
|
||||
|
||||
const switchWorkspace = (_workspace: Workspace) => {
|
||||
localStorage.setItem("workspacePublicId", _workspace.publicId);
|
||||
|
||||
setWorkspace(_workspace);
|
||||
|
||||
// Refetch workspace data to ensure availableWorkspaces is up to date
|
||||
void utils.workspace.all.refetch();
|
||||
|
||||
router.push(`/boards`);
|
||||
};
|
||||
|
||||
@@ -66,21 +70,15 @@ export const WorkspaceProvider: React.FC<{ children: ReactNode }> = ({
|
||||
localStorage.getItem("workspacePublicId");
|
||||
|
||||
if (data.length) {
|
||||
const workspaces = data
|
||||
.map(({ workspace, role }) => {
|
||||
if (!workspace) return;
|
||||
|
||||
return {
|
||||
role,
|
||||
publicId: workspace.publicId,
|
||||
name: workspace.name,
|
||||
slug: workspace.slug,
|
||||
description: workspace.description,
|
||||
plan: workspace.plan,
|
||||
hasLoaded: true,
|
||||
};
|
||||
})
|
||||
.filter((workspace) => workspace !== null) as Workspace[];
|
||||
const workspaces = data.map(({ workspace, role }) => ({
|
||||
role,
|
||||
publicId: workspace.publicId,
|
||||
name: workspace.name,
|
||||
slug: workspace.slug,
|
||||
description: workspace.description,
|
||||
plan: workspace.plan,
|
||||
hasLoaded: true,
|
||||
})) as Workspace[];
|
||||
|
||||
if (workspaces.length) setAvailableWorkspaces(workspaces);
|
||||
}
|
||||
@@ -116,7 +114,7 @@ export const WorkspaceProvider: React.FC<{ children: ReactNode }> = ({
|
||||
role: primaryWorkspaceRole,
|
||||
});
|
||||
}
|
||||
}, [data]);
|
||||
}, [data, isLoading]);
|
||||
|
||||
return (
|
||||
<WorkspaceContext.Provider
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { useEffect } from "react";
|
||||
import { HiArrowDownTray, HiOutlinePlusSmall } from "react-icons/hi2";
|
||||
|
||||
import Button from "~/components/Button";
|
||||
@@ -14,9 +15,13 @@ import { NewBoardForm } from "./components/NewBoardForm";
|
||||
|
||||
export default function BoardsPage() {
|
||||
const { openModal, modalContentType, isOpen } = useModal();
|
||||
const { workspace, hasLoaded } = useWorkspace();
|
||||
const { availableWorkspaces, workspace, hasLoaded } = useWorkspace();
|
||||
|
||||
if (hasLoaded && !workspace.publicId) openModal("NEW_WORKSPACE");
|
||||
useEffect(() => {
|
||||
if (hasLoaded && availableWorkspaces.length === 0) {
|
||||
openModal("NEW_WORKSPACE");
|
||||
}
|
||||
}, [hasLoaded, availableWorkspaces.length, openModal]);
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { Menu } from "@headlessui/react";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { HiMiniPlus } from "react-icons/hi2";
|
||||
|
||||
@@ -101,22 +100,19 @@ export default function LabelSelector({
|
||||
{selectedLabels.length ? (
|
||||
<div className="flex flex-wrap gap-x-0.5">
|
||||
{selectedLabels.map((label) => (
|
||||
<Menu.Button key={label.key}>
|
||||
<Badge value={label.value} iconLeft={label.leftIcon} />
|
||||
</Menu.Button>
|
||||
))}
|
||||
<Menu.Button>
|
||||
<Badge
|
||||
value={t`Add label`}
|
||||
iconLeft={<HiMiniPlus size={14} />}
|
||||
key={label.key}
|
||||
value={label.value}
|
||||
iconLeft={label.leftIcon}
|
||||
/>
|
||||
</Menu.Button>
|
||||
))}
|
||||
<Badge value={t`Add label`} iconLeft={<HiMiniPlus size={14} />} />
|
||||
</div>
|
||||
) : (
|
||||
<Menu.Button className="flex h-full w-full items-center rounded-[5px] border-[1px] border-light-50 pl-2 text-left text-sm text-neutral-900 hover:border-light-300 hover:bg-light-200 dark:border-dark-50 dark:text-dark-1000 dark:hover:border-dark-200 dark:hover:bg-dark-100">
|
||||
<div className="flex h-full w-full items-center rounded-[5px] border-[1px] border-light-50 pl-2 text-left text-sm text-neutral-900 hover:border-light-300 hover:bg-light-200 dark:border-dark-50 dark:text-dark-1000 dark:hover:border-dark-200 dark:hover:bg-dark-100">
|
||||
<HiMiniPlus size={22} className="pr-2" />
|
||||
{t`Add label`}
|
||||
</Menu.Button>
|
||||
</div>
|
||||
)}
|
||||
</CheckboxDropdown>
|
||||
)}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { Menu } from "@headlessui/react";
|
||||
import { t } from "@lingui/core/macro";
|
||||
|
||||
import CheckboxDropdown from "~/components/CheckboxDropdown";
|
||||
@@ -79,9 +78,9 @@ export default function ListSelector({
|
||||
}}
|
||||
asChild
|
||||
>
|
||||
<Menu.Button className="flex h-full w-full items-center rounded-[5px] border-[1px] border-light-50 py-1 pl-2 text-left text-sm text-neutral-900 hover:border-light-300 hover:bg-light-200 dark:border-dark-50 dark:text-dark-1000 dark:hover:border-dark-200 dark:hover:bg-dark-100">
|
||||
<div className="flex h-full w-full items-center rounded-[5px] border-[1px] border-light-50 py-1 pl-2 text-left text-sm text-neutral-900 hover:border-light-300 hover:bg-light-200 dark:border-dark-50 dark:text-dark-1000 dark:hover:border-dark-200 dark:hover:bg-dark-100">
|
||||
{selectedList?.value}
|
||||
</Menu.Button>
|
||||
</div>
|
||||
</CheckboxDropdown>
|
||||
)}
|
||||
</>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { useRouter } from "next/router";
|
||||
import { Menu } from "@headlessui/react";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { HiMiniPlus } from "react-icons/hi2";
|
||||
|
||||
@@ -112,11 +111,12 @@ export default function MemberSelector({
|
||||
createNewItemLabel={t`Invite member`}
|
||||
asChild
|
||||
>
|
||||
<Menu.Button className="flex h-full w-full items-center rounded-[5px] border-[1px] border-light-50 py-1 pl-2 text-left text-sm text-neutral-900 hover:border-light-300 hover:bg-light-200 dark:border-dark-50 dark:text-dark-1000 dark:hover:border-dark-200 dark:hover:bg-dark-100">
|
||||
<div className="flex h-full w-full items-center rounded-[5px] border-[1px] border-light-50 py-1 pl-2 text-left text-sm text-neutral-900 hover:border-light-300 hover:bg-light-200 dark:border-dark-50 dark:text-dark-1000 dark:hover:border-dark-200 dark:hover:bg-dark-100">
|
||||
{selectedMembers.length ? (
|
||||
<div className="isolate flex justify-end -space-x-1 overflow-hidden">
|
||||
{selectedMembers.map(({ value, imageUrl }) => (
|
||||
<Avatar
|
||||
key={value}
|
||||
size="sm"
|
||||
name={value}
|
||||
imageUrl={imageUrl}
|
||||
@@ -130,7 +130,7 @@ export default function MemberSelector({
|
||||
{t`Add member`}
|
||||
</>
|
||||
)}
|
||||
</Menu.Button>
|
||||
</div>
|
||||
</CheckboxDropdown>
|
||||
)}
|
||||
</>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import PatternedBackground from "~/components/PatternedBackground";
|
||||
import { useTheme } from "next-themes";
|
||||
|
||||
import { authClient } from "@kan/auth/client";
|
||||
|
||||
import PatternedBackground from "~/components/PatternedBackground";
|
||||
import Footer from "./Footer";
|
||||
import Header from "./Header";
|
||||
import { authClient } from "@kan/auth/client";
|
||||
|
||||
export default function Layout({ children }: { children: React.ReactNode }) {
|
||||
const { theme } = useTheme();
|
||||
@@ -18,6 +20,7 @@ export default function Layout({ children }: { children: React.ReactNode }) {
|
||||
<style jsx global>{`
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
overflow: auto;
|
||||
background-color: ${!isDarkMode ? "hsl(0deg 0% 97.3%)" : "#161616"};
|
||||
}
|
||||
`}</style>
|
||||
|
||||
@@ -2,7 +2,7 @@ import Link from "next/link";
|
||||
import { Radio, RadioGroup } from "@headlessui/react";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { useState } from "react";
|
||||
import { HiCheckCircle } from "react-icons/hi2";
|
||||
import { HiBolt, HiCheckCircle } from "react-icons/hi2";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
type Frequency = "monthly" | "annually";
|
||||
@@ -92,7 +92,13 @@ const Pricing = () => {
|
||||
{t`Get started for free, with no usage limits. For collaboration, upgrade to a plan that fits the size of your team.`}
|
||||
</p>
|
||||
|
||||
<div className="mt-16 flex justify-center">
|
||||
<div className="mt-12 flex flex-col items-center justify-center">
|
||||
<div className="mb-4 flex items-center gap-2 rounded-full border bg-white px-4 py-1.5 text-center text-xs font-bold text-gray-800 dark:border-dark-300 dark:bg-white dark:text-gray-800 lg:text-sm">
|
||||
<HiBolt />
|
||||
<p>
|
||||
{t`Launch offer: unlimited seats for just $29/month with Pro`}
|
||||
</p>
|
||||
</div>
|
||||
<fieldset aria-label={t`Payment frequency`}>
|
||||
<RadioGroup
|
||||
value={frequency}
|
||||
@@ -165,7 +171,7 @@ const Pricing = () => {
|
||||
!tier.showPrice && "opacity-0",
|
||||
)}
|
||||
>
|
||||
{tier.price[frequency?.value || "monthly"]}
|
||||
{tier.price[frequency?.value ?? "monthly"]}
|
||||
</span>
|
||||
{tier.showPriceSuffix && (
|
||||
<span className="text-sm/6 font-semibold text-light-50 dark:text-dark-900">
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import Link from "next/link";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { env } from "next-runtime-env";
|
||||
import { HiEllipsisHorizontal, HiOutlinePlusSmall } from "react-icons/hi2";
|
||||
import {
|
||||
HiBolt,
|
||||
HiEllipsisHorizontal,
|
||||
HiOutlinePlusSmall,
|
||||
} from "react-icons/hi2";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
import type { Subscription } from "@kan/shared/utils";
|
||||
@@ -168,30 +173,45 @@ export default function MembersPage() {
|
||||
<PageHead title={t`Members | ${workspace.name ?? "Workspace"}`} />
|
||||
<div className="m-auto h-full max-w-[1100px] p-6 px-5 md:px-28 md:py-12">
|
||||
<div className="mb-8 flex w-full justify-between">
|
||||
<h1 className="font-bold tracking-tight text-neutral-900 dark:text-dark-1000 sm:text-[1.2rem]">
|
||||
{t`Members`}
|
||||
</h1>
|
||||
<div className="flex items-center gap-3">
|
||||
<h1 className="font-bold tracking-tight text-neutral-900 dark:text-dark-1000 sm:text-[1.2rem]">
|
||||
{t`Members`}
|
||||
</h1>
|
||||
</div>
|
||||
<div className="flex items-center gap-3">
|
||||
{env("NEXT_PUBLIC_KAN_ENV") === "cloud" && (
|
||||
<div
|
||||
className={twMerge(
|
||||
"flex items-center rounded-full border px-3 py-1 text-center text-xs",
|
||||
teamSubscription || proSubscription
|
||||
? "border-emerald-300 bg-emerald-50 text-emerald-400 dark:border-emerald-700 dark:bg-emerald-950 dark:text-emerald-400"
|
||||
: "border-light-300 bg-light-50 text-light-1000 dark:border-dark-300 dark:bg-dark-50 dark:text-dark-900",
|
||||
<>
|
||||
{!proSubscription && (
|
||||
<Link
|
||||
href="/settings?upgrade=pro"
|
||||
className="hidden items-center rounded-full border border-emerald-300 bg-emerald-50 px-3 py-1 text-center text-xs text-emerald-400 dark:border-emerald-700 dark:bg-emerald-950 dark:text-emerald-400 lg:flex"
|
||||
>
|
||||
<HiBolt />
|
||||
<span className="ml-1 font-medium">
|
||||
{t`Launch offer: Get unlimited members with Pro`}
|
||||
</span>
|
||||
</Link>
|
||||
)}
|
||||
>
|
||||
<span className="font-medium">
|
||||
{proSubscription
|
||||
? t`Pro Plan`
|
||||
: teamSubscription
|
||||
? t`Team Plan`
|
||||
: t`Free Plan`}
|
||||
{proSubscription && unlimitedSeats && (
|
||||
<span className="ml-1 text-xs">∞</span>
|
||||
<div
|
||||
className={twMerge(
|
||||
"flex items-center rounded-full border px-3 py-1 text-center text-xs",
|
||||
teamSubscription || proSubscription
|
||||
? "border-emerald-300 bg-emerald-50 text-emerald-400 dark:border-emerald-700 dark:bg-emerald-950 dark:text-emerald-400"
|
||||
: "border-light-300 bg-light-50 text-light-1000 dark:border-dark-300 dark:bg-dark-50 dark:text-dark-900",
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
>
|
||||
<span className="font-medium">
|
||||
{proSubscription
|
||||
? t`Pro Plan`
|
||||
: teamSubscription
|
||||
? t`Team Plan`
|
||||
: t`Free Plan`}
|
||||
{proSubscription && unlimitedSeats && (
|
||||
<span className="ml-1 text-xs">∞</span>
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
<Button
|
||||
onClick={() => openModal("INVITE_MEMBER")}
|
||||
|
||||
@@ -22,7 +22,7 @@ export function UpgradeToProConfirmation({
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
...(entityId && { workspaceSlug: entityId }),
|
||||
...(entityId && { slug: entityId }),
|
||||
workspacePublicId: workspacePublicId,
|
||||
cancelUrl: "/settings",
|
||||
successUrl: "/settings",
|
||||
@@ -76,9 +76,14 @@ export function UpgradeToProConfirmation({
|
||||
</div>
|
||||
<div className="flex items-center space-x-3">
|
||||
<HiCheckBadge className="h-5 w-5 flex-shrink-0 text-light-1000 dark:text-dark-950" />
|
||||
<span className="text-sm text-neutral-900 dark:text-dark-1000">
|
||||
{t`Board analytics (coming soon)`}
|
||||
</span>
|
||||
<div className="flex items-center space-x-2">
|
||||
<span className="text-xs text-neutral-900 dark:text-dark-1000">
|
||||
{t`Board analytics`}
|
||||
</span>
|
||||
<span className="inline-flex items-center rounded-full bg-gray-500/10 px-2 py-0.5 text-[10px] font-medium text-gray-600 ring-1 ring-inset ring-gray-500/20 dark:text-gray-400 sm:text-[10px]">
|
||||
{t`Coming soon`}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center space-x-3">
|
||||
<HiCheckBadge className="h-5 w-5 flex-shrink-0 text-light-1000 dark:text-dark-950" />
|
||||
@@ -90,7 +95,12 @@ export function UpgradeToProConfirmation({
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-5 flex justify-end space-x-2 sm:mt-6">
|
||||
<Button onClick={() => closeModal()} variant="secondary">
|
||||
<Button
|
||||
onClick={() => {
|
||||
closeModal();
|
||||
}}
|
||||
variant="secondary"
|
||||
>
|
||||
{t`Cancel`}
|
||||
</Button>
|
||||
<Button
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { useRouter } from "next/router";
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { env } from "next-runtime-env";
|
||||
import { useEffect, useRef } from "react";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { HiBolt, HiMiniArrowTopRightOnSquare } from "react-icons/hi2";
|
||||
|
||||
import type { Subscription } from "@kan/shared/utils";
|
||||
@@ -36,6 +36,7 @@ export default function SettingsPage() {
|
||||
const router = useRouter();
|
||||
const workspaceUrlSectionRef = useRef<HTMLDivElement>(null);
|
||||
const scrollContainerRef = useRef<HTMLDivElement>(null);
|
||||
const [hasOpenedUpgradeModal, setHasOpenedUpgradeModal] = useState(false);
|
||||
const isCredentialsEnabled =
|
||||
env("NEXT_PUBLIC_ALLOW_CREDENTIALS")?.toLowerCase() === "true";
|
||||
const { data } = api.user.getUser.useQuery();
|
||||
@@ -95,6 +96,19 @@ export default function SettingsPage() {
|
||||
}
|
||||
}, [router.query.edit]);
|
||||
|
||||
// Open upgrade modal if upgrade=pro is in URL params
|
||||
useEffect(() => {
|
||||
if (
|
||||
router.query.upgrade === "pro" &&
|
||||
env("NEXT_PUBLIC_KAN_ENV") === "cloud" &&
|
||||
!hasActiveSubscription(subscriptions, "pro") &&
|
||||
!hasOpenedUpgradeModal
|
||||
) {
|
||||
openModal("UPGRADE_TO_PRO");
|
||||
setHasOpenedUpgradeModal(true);
|
||||
}
|
||||
}, [router.query.upgrade, subscriptions, openModal, hasOpenedUpgradeModal]);
|
||||
|
||||
const { mutateAsync: disconnectTrello } =
|
||||
api.integration.disconnect.useMutation({
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -140,6 +140,12 @@ export const workspaceRouter = createTRPCRouter({
|
||||
.input(
|
||||
z.object({
|
||||
name: z.string().min(1),
|
||||
slug: z
|
||||
.string()
|
||||
.min(3)
|
||||
.max(24)
|
||||
.regex(/^(?![-]+$)[a-zA-Z0-9-]+$/)
|
||||
.optional(),
|
||||
}),
|
||||
)
|
||||
.output(z.custom<Awaited<ReturnType<typeof workspaceRepo.create>>>())
|
||||
@@ -153,12 +159,43 @@ export const workspaceRouter = createTRPCRouter({
|
||||
code: "UNAUTHORIZED",
|
||||
});
|
||||
|
||||
// Check if slug is provided in cloud environment
|
||||
if (input.slug && env("NEXT_PUBLIC_KAN_ENV") === "cloud") {
|
||||
throw new TRPCError({
|
||||
message: "Custom URLs are only available for Pro workspaces",
|
||||
code: "BAD_REQUEST",
|
||||
});
|
||||
}
|
||||
|
||||
const workspacePublicId = generateUID();
|
||||
const workspaceSlug = input.slug ?? workspacePublicId;
|
||||
|
||||
if (input.slug) {
|
||||
const reservedOrPremiumWorkspaceSlug =
|
||||
await workspaceSlugRepo.getWorkspaceSlug(ctx.db, input.slug);
|
||||
|
||||
const isWorkspaceSlugAvailable =
|
||||
await workspaceRepo.isWorkspaceSlugAvailable(ctx.db, input.slug);
|
||||
|
||||
if (reservedOrPremiumWorkspaceSlug) {
|
||||
throw new TRPCError({
|
||||
message: `Workspace slug '${input.slug}' is reserved or premium`,
|
||||
code: "BAD_REQUEST",
|
||||
});
|
||||
}
|
||||
|
||||
if (!isWorkspaceSlugAvailable) {
|
||||
throw new TRPCError({
|
||||
message: `Workspace slug '${input.slug}' is already taken`,
|
||||
code: "BAD_REQUEST",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const result = await workspaceRepo.create(ctx.db, {
|
||||
publicId: workspacePublicId,
|
||||
name: input.name,
|
||||
slug: workspacePublicId,
|
||||
slug: workspaceSlug,
|
||||
createdBy: userId,
|
||||
createdByEmail: userEmail,
|
||||
});
|
||||
@@ -334,6 +371,14 @@ export const workspaceRouter = createTRPCRouter({
|
||||
}),
|
||||
)
|
||||
.query(async ({ ctx, input }) => {
|
||||
const userId = ctx.user?.id;
|
||||
|
||||
if (!userId)
|
||||
throw new TRPCError({
|
||||
message: `User not authenticated`,
|
||||
code: "UNAUTHORIZED",
|
||||
});
|
||||
|
||||
const slug = input.workspaceSlug.toLowerCase();
|
||||
// check slug is not reserved
|
||||
const workspaceSlug = await workspaceSlugRepo.getWorkspaceSlug(
|
||||
@@ -345,6 +390,19 @@ export const workspaceRouter = createTRPCRouter({
|
||||
const isWorkspaceSlugAvailable =
|
||||
await workspaceRepo.isWorkspaceSlugAvailable(ctx.db, slug);
|
||||
|
||||
const isAvailable =
|
||||
isWorkspaceSlugAvailable && workspaceSlug?.type !== "reserved";
|
||||
const isReserved = workspaceSlug?.type === "reserved";
|
||||
|
||||
if (env("NEXT_PUBLIC_KAN_ENV") === "cloud") {
|
||||
await workspaceSlugRepo.createWorkspaceSlugCheck(ctx.db, {
|
||||
slug,
|
||||
userId,
|
||||
available: isAvailable,
|
||||
reserved: isReserved,
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
isAvailable:
|
||||
isWorkspaceSlugAvailable && workspaceSlug?.type !== "reserved",
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE "subscription" ALTER COLUMN "referenceId" DROP NOT NULL;
|
||||
@@ -0,0 +1,22 @@
|
||||
CREATE TABLE IF NOT EXISTS "workspace_slug_checks" (
|
||||
"id" bigserial PRIMARY KEY NOT NULL,
|
||||
"slug" varchar(255) NOT NULL,
|
||||
"available" boolean NOT NULL,
|
||||
"reserved" boolean NOT NULL,
|
||||
"workspaceId" bigint,
|
||||
"createdBy" uuid,
|
||||
"createdAt" timestamp DEFAULT now() NOT NULL
|
||||
);
|
||||
--> statement-breakpoint
|
||||
ALTER TABLE "workspace_slug_checks" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "workspace_slug_checks" ADD CONSTRAINT "workspace_slug_checks_workspaceId_workspace_id_fk" FOREIGN KEY ("workspaceId") REFERENCES "public"."workspace"("id") ON DELETE no action ON UPDATE no action;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
--> statement-breakpoint
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "workspace_slug_checks" ADD CONSTRAINT "workspace_slug_checks_createdBy_user_id_fk" FOREIGN KEY ("createdBy") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
@@ -0,0 +1,7 @@
|
||||
ALTER TABLE "subscription" DROP CONSTRAINT "subscription_referenceId_workspace_publicId_fk";
|
||||
--> statement-breakpoint
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "subscription" ADD CONSTRAINT "subscription_referenceId_workspace_publicId_fk" FOREIGN KEY ("referenceId") REFERENCES "public"."workspace"("publicId") ON DELETE set null ON UPDATE no action;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
2543
packages/db/migrations/meta/20250910195058_snapshot.json
Normal file
2543
packages/db/migrations/meta/20250910195058_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
2626
packages/db/migrations/meta/20250910200416_snapshot.json
Normal file
2626
packages/db/migrations/meta/20250910200416_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
2626
packages/db/migrations/meta/20250910202358_snapshot.json
Normal file
2626
packages/db/migrations/meta/20250910202358_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -78,6 +78,27 @@
|
||||
"when": 1757271312974,
|
||||
"tag": "20250907185512_AddUnlimitedSeatsToSubscription",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"version": "7",
|
||||
"when": 1757533858687,
|
||||
"tag": "20250910195058_RemoveNotNullConstraintFromReferenceIdOnSubsriptions",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"version": "7",
|
||||
"when": 1757534656098,
|
||||
"tag": "20250910200416_AddWorkspaceSlugChecks",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"version": "7",
|
||||
"when": 1757535838766,
|
||||
"tag": "20250910202358_AddCascadeSetNullToReferenceIdOnSubsriptions",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import { eq } from "drizzle-orm";
|
||||
|
||||
import type { dbClient } from "@kan/db/client";
|
||||
import { slugs } from "@kan/db/schema";
|
||||
import { slugChecks, slugs } from "@kan/db/schema";
|
||||
|
||||
export const getWorkspaceSlug = (db: dbClient, slug: string) => {
|
||||
return db.query.slugs.findFirst({
|
||||
@@ -12,3 +12,20 @@ export const getWorkspaceSlug = (db: dbClient, slug: string) => {
|
||||
where: eq(slugs.slug, slug),
|
||||
});
|
||||
};
|
||||
|
||||
export const createWorkspaceSlugCheck = (
|
||||
db: dbClient,
|
||||
input: {
|
||||
slug: string;
|
||||
userId: string;
|
||||
available: boolean;
|
||||
reserved: boolean;
|
||||
},
|
||||
) => {
|
||||
return db.insert(slugChecks).values({
|
||||
slug: input.slug,
|
||||
available: input.available,
|
||||
reserved: input.reserved,
|
||||
createdBy: input.userId,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -13,9 +13,10 @@ import { workspaces } from "./workspaces";
|
||||
export const subscription = pgTable("subscription", {
|
||||
id: bigserial("id", { mode: "number" }).primaryKey(),
|
||||
plan: varchar("plan", { length: 255 }).notNull(),
|
||||
referenceId: varchar("referenceId", { length: 12 })
|
||||
.notNull()
|
||||
.references(() => workspaces.publicId),
|
||||
referenceId: varchar("referenceId", { length: 12 }).references(
|
||||
() => workspaces.publicId,
|
||||
{ onDelete: "set null" },
|
||||
),
|
||||
stripeCustomerId: varchar("stripeCustomerId", { length: 255 }),
|
||||
stripeSubscriptionId: varchar("stripeSubscriptionId", { length: 255 }),
|
||||
status: varchar("status", { length: 255 }).notNull(),
|
||||
|
||||
@@ -2,6 +2,7 @@ import { relations } from "drizzle-orm";
|
||||
import {
|
||||
bigint,
|
||||
bigserial,
|
||||
boolean,
|
||||
pgEnum,
|
||||
pgTable,
|
||||
text,
|
||||
@@ -103,3 +104,17 @@ export const slugs = pgTable("workspace_slugs", {
|
||||
slug: varchar("slug", { length: 255 }).notNull().unique(),
|
||||
type: slugTypeEnum("type").notNull(),
|
||||
});
|
||||
|
||||
export const slugChecks = pgTable("workspace_slug_checks", {
|
||||
id: bigserial("id", { mode: "number" }).primaryKey(),
|
||||
slug: varchar("slug", { length: 255 }).notNull(),
|
||||
available: boolean("available").notNull(),
|
||||
reserved: boolean("reserved").notNull(),
|
||||
workspaceId: bigint("workspaceId", { mode: "number" }).references(
|
||||
() => workspaces.id,
|
||||
),
|
||||
createdBy: uuid("createdBy").references(() => users.id, {
|
||||
onDelete: "set null",
|
||||
}),
|
||||
createdAt: timestamp("createdAt").defaultNow().notNull(),
|
||||
}).enableRLS();
|
||||
|
||||
@@ -14,7 +14,7 @@ export interface Subscription {
|
||||
unlimitedSeats: boolean;
|
||||
periodStart: Date | null;
|
||||
periodEnd: Date | null;
|
||||
referenceId: string;
|
||||
referenceId: string | null;
|
||||
stripeSubscriptionId: string | null;
|
||||
stripeCustomerId: string | null;
|
||||
createdAt: Date;
|
||||
|
||||
Reference in New Issue
Block a user