Compare commits
7 Commits
fix/125
...
feat/invit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e43ed96945 | ||
|
|
638b8b6b79 | ||
|
|
ca1dd92ab4 | ||
|
|
f8827da73a | ||
|
|
babaa9f1b1 | ||
|
|
0cefd17484 | ||
|
|
974a5ff0f3 |
@@ -32,6 +32,7 @@ checksums:
|
|||||||
Are%20you%20sure%20you%20want%20to%20delete%20the%20workspace%20%7B0%7D%3F/singular: 27ba2854202dd77c51e78c64e5c93946
|
Are%20you%20sure%20you%20want%20to%20delete%20the%20workspace%20%7B0%7D%3F/singular: 27ba2854202dd77c51e78c64e5c93946
|
||||||
Are%20you%20sure%20you%20want%20to%20delete%20this%20card%3F/singular: 131a5a7cccca7be8b32c987d9fa0b0c0
|
Are%20you%20sure%20you%20want%20to%20delete%20this%20card%3F/singular: 131a5a7cccca7be8b32c987d9fa0b0c0
|
||||||
Are%20you%20sure%20you%20want%20to%20delete%20this%20comment%3F/singular: 55fe6f1b52b71b91b2a079cfda3cc7fe
|
Are%20you%20sure%20you%20want%20to%20delete%20this%20comment%3F/singular: 55fe6f1b52b71b91b2a079cfda3cc7fe
|
||||||
|
Are%20you%20sure%20you%20want%20to%20delete%20this%20label%3F/singular: 037fbaf1d04356937e6afb574714f51f
|
||||||
Are%20you%20sure%20you%20want%20to%20delete%20your%20account%3F/singular: 428b74d781063224c3e63980e1094ec3
|
Are%20you%20sure%20you%20want%20to%20delete%20your%20account%3F/singular: 428b74d781063224c3e63980e1094ec3
|
||||||
assigned%20%3C0%3E%7BmemberName%7D%3C%2F0%3E%20to%20the%20card/singular: 4fb1c419a78a0f010a3e5790801551fc
|
assigned%20%3C0%3E%7BmemberName%7D%3C%2F0%3E%20to%20the%20card/singular: 4fb1c419a78a0f010a3e5790801551fc
|
||||||
Awaiting%20Customer/singular: 122c108794f321c10e05a08f09b11457
|
Awaiting%20Customer/singular: 122c108794f321c10e05a08f09b11457
|
||||||
@@ -127,8 +128,10 @@ checksums:
|
|||||||
Enter%20your%20name/singular: cd95fbdd0533f2c2e8edf9d9bd9aa8df
|
Enter%20your%20name/singular: cd95fbdd0533f2c2e8edf9d9bd9aa8df
|
||||||
Enter%20your%20password/singular: ea4fdd034522dead21bae0c0abb52eae
|
Enter%20your%20password/singular: ea4fdd034522dead21bae0c0abb52eae
|
||||||
Error%20deleting%20account/singular: d42965a9bc9e5ec4ed57890268924643
|
Error%20deleting%20account/singular: d42965a9bc9e5ec4ed57890268924643
|
||||||
|
Error%20deleting%20label/singular: 94387e3a45ec768ae7715701ae00136e
|
||||||
Error%20deleting%20workspace/singular: 0aec9bd8170bc84f5ea5c9a47c52ed26
|
Error%20deleting%20workspace/singular: 0aec9bd8170bc84f5ea5c9a47c52ed26
|
||||||
Error%20disconnecting%20Trello/singular: a8766853864eddc480113778a708871b
|
Error%20disconnecting%20Trello/singular: a8766853864eddc480113778a708871b
|
||||||
|
Error%20inviting%20member/singular: 91553b606a6ebed3534cd2e5635ce004
|
||||||
Error%20updating%20display%20name/singular: 0d7979a25d290123ed8b8906bf468f1a
|
Error%20updating%20display%20name/singular: 0d7979a25d290123ed8b8906bf468f1a
|
||||||
Error%20updating%20profile%20image/singular: 462a56a6e574abc9e13cb48f1266adad
|
Error%20updating%20profile%20image/singular: 462a56a6e574abc9e13cb48f1266adad
|
||||||
Error%20updating%20workspace%20description/singular: 7a9fd7c69b90ab848ee1f1d4a4995381
|
Error%20updating%20workspace%20description/singular: 7a9fd7c69b90ab848ee1f1d4a4995381
|
||||||
@@ -185,7 +188,9 @@ checksums:
|
|||||||
Individuals/singular: 83bfc81f20e60556c44ec80c7d0603ec
|
Individuals/singular: 83bfc81f20e60556c44ec80c7d0603ec
|
||||||
Integrations/singular: 0ccce343287704cd90150c32e2fcad36
|
Integrations/singular: 0ccce343287704cd90150c32e2fcad36
|
||||||
Interviewing/singular: 4ccdcdc784547e925077c3297bddee95
|
Interviewing/singular: 4ccdcdc784547e925077c3297bddee95
|
||||||
|
Invalid%20email%20address/singular: b2d9f25626f2d15c7c63e0281bccc247
|
||||||
Invite/singular: 181884cea804cbde665f160811ee7ad0
|
Invite/singular: 181884cea804cbde665f160811ee7ad0
|
||||||
|
Invite%20another/singular: acb543563dab7edbcf46060a53ade3a3
|
||||||
Invite%20member/singular: ade922db1be6b26bc979565ce5de2bc7
|
Invite%20member/singular: ade922db1be6b26bc979565ce5de2bc7
|
||||||
Junior/singular: ed1bd2c59a824fdcdd56fc8a0660fe9f
|
Junior/singular: ed1bd2c59a824fdcdd56fc8a0660fe9f
|
||||||
Kanban%20is%20better%20with%20a%20team.%20Perfect%20for%20small%20and%20growing%20teams%20looking%20to%20collaborate./singular: a77bee43046b260797c8936ad23e9223
|
Kanban%20is%20better%20with%20a%20team.%20Perfect%20for%20small%20and%20growing%20teams%20looking%20to%20collaborate./singular: a77bee43046b260797c8936ad23e9223
|
||||||
@@ -308,6 +313,7 @@ checksums:
|
|||||||
Theme/singular: 21fe00b7a518089576fb83c08631107a
|
Theme/singular: 21fe00b7a518089576fb83c08631107a
|
||||||
They%20won't%20be%20able%20to%20access%20this%20workspace./singular: 93b740350fe3430319fbca85349e41d9
|
They%20won't%20be%20able%20to%20access%20this%20workspace./singular: 93b740350fe3430319fbca85349e41d9
|
||||||
This%20action%20can't%20be%20undone./singular: cb222ff89715d8c971e8c25d121e1dbd
|
This%20action%20can't%20be%20undone./singular: cb222ff89715d8c971e8c25d121e1dbd
|
||||||
|
This%20board%20is%20private%20or%20does%20not%20exist/singular: a217ff3f04463b4df8c86adb6f83c6bc
|
||||||
This%20board%20URL%20has%20already%20been%20taken/singular: 1d8b40332a031b5b77a3658e48dd51ca
|
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%20this%20workspace./singular: a31141558af793635c1ddd2fa0a33499
|
||||||
This%20will%20result%20in%20the%20permanent%20deletion%20of%20all%20data%20associated%20with%20your%20account./singular: b49224632bd6c3b7f5e462912aeb1081
|
This%20will%20result%20in%20the%20permanent%20deletion%20of%20all%20data%20associated%20with%20your%20account./singular: b49224632bd6c3b7f5e462912aeb1081
|
||||||
@@ -353,11 +359,13 @@ checksums:
|
|||||||
URL%20must%20be%20at%20least%203%20characters%20long/singular: 1b74ac9ec61fd34b16530ed599009ed1
|
URL%20must%20be%20at%20least%203%20characters%20long/singular: 1b74ac9ec61fd34b16530ed599009ed1
|
||||||
Use%20template/singular: 33f0ca0aa8f4b0de99aad267a61a094d
|
Use%20template/singular: 33f0ca0aa8f4b0de99aad267a61a094d
|
||||||
User/singular: 61073457a5c3901084b557d065f876be
|
User/singular: 61073457a5c3901084b557d065f876be
|
||||||
|
User%20is%20already%20a%20member%20of%20this%20workspace/singular: bc246386f0975f750f2133222bb4735e
|
||||||
Video/singular: 8050c90e4289b105a0780f0fdda6ff66
|
Video/singular: 8050c90e4289b105a0780f0fdda6ff66
|
||||||
View%20and%20manage%20your%20API%20keys./singular: 88e23ee79056846dd9ce63ceee690549
|
View%20and%20manage%20your%20API%20keys./singular: 88e23ee79056846dd9ce63ceee690549
|
||||||
View%20and%20manage%20your%20billing%20and%20subscription./singular: 7469502543aac6f02149813546d1cb38
|
View%20and%20manage%20your%20billing%20and%20subscription./singular: 7469502543aac6f02149813546d1cb38
|
||||||
View%20docs/singular: 43ce54f27bb1e3f1880b56e03ab38871
|
View%20docs/singular: 43ce54f27bb1e3f1880b56e03ab38871
|
||||||
View%20our%20roadmap./singular: 1dd7ec80e1635951b1c90d592d1d07dc
|
View%20our%20roadmap./singular: 1dd7ec80e1635951b1c90d592d1d07dc
|
||||||
|
View%20workspace/singular: c9e4b789330b08c18ca8db7044409e5f
|
||||||
Visibility/singular: 1ff412f8fcde0f460acbf11153649646
|
Visibility/singular: 1ff412f8fcde0f460acbf11153649646
|
||||||
We%20are%20using%20the%20%3C0%3EAGPL-3.0%20license%3C%2F0%3E./singular: 08c5ddd938a2a70f61d684e41e18697a
|
We%20are%20using%20the%20%3C0%3EAGPL-3.0%20license%3C%2F0%3E./singular: 08c5ddd938a2a70f61d684e41e18697a
|
||||||
We're%20just%20getting%20started.%20/singular: 2dfa121e0ff1914e08068308a81973c0
|
We're%20just%20getting%20started.%20/singular: 2dfa121e0ff1914e08068308a81973c0
|
||||||
|
|||||||
@@ -86,8 +86,10 @@ export default function CheckboxDropdown({
|
|||||||
</label>
|
</label>
|
||||||
{handleEdit && (
|
{handleEdit && (
|
||||||
<button
|
<button
|
||||||
|
type="button"
|
||||||
className="invisible ml-auto group-hover:visible"
|
className="invisible ml-auto group-hover:visible"
|
||||||
onClick={(event) => {
|
onClick={(event) => {
|
||||||
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
handleEdit(item.key);
|
handleEdit(item.key);
|
||||||
}}
|
}}
|
||||||
@@ -100,8 +102,12 @@ export default function CheckboxDropdown({
|
|||||||
))}
|
))}
|
||||||
{handleCreate && (
|
{handleCreate && (
|
||||||
<button
|
<button
|
||||||
|
type="button"
|
||||||
className="flex w-full items-center rounded-[5px] p-2 px-2 text-[12px] text-dark-900 hover:bg-light-200 dark:hover:bg-dark-300"
|
className="flex w-full items-center rounded-[5px] p-2 px-2 text-[12px] text-dark-900 hover:bg-light-200 dark:hover:bg-dark-300"
|
||||||
onClick={() => handleCreate()}
|
onClick={(e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
handleCreate();
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<HiMiniPlus size={20} className="pr-1.5" />
|
<HiMiniPlus size={20} className="pr-1.5" />
|
||||||
{createNewItemLabel}
|
{createNewItemLabel}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { t } from "@lingui/core/macro";
|
||||||
|
|
||||||
import Button from "~/components/Button";
|
import Button from "~/components/Button";
|
||||||
import { useModal } from "~/providers/modal";
|
import { useModal } from "~/providers/modal";
|
||||||
import { usePopup } from "~/providers/popup";
|
import { usePopup } from "~/providers/popup";
|
||||||
@@ -17,8 +19,8 @@ export function DeleteLabelConfirmation({
|
|||||||
onSuccess: () => refetch(),
|
onSuccess: () => refetch(),
|
||||||
onError: () =>
|
onError: () =>
|
||||||
showPopup({
|
showPopup({
|
||||||
header: "Error deleting label",
|
header: t`Error deleting label`,
|
||||||
message: "Please try again later, or contact customer support.",
|
message: t`Please try again later, or contact customer support.`,
|
||||||
icon: "error",
|
icon: "error",
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@@ -34,17 +36,17 @@ export function DeleteLabelConfirmation({
|
|||||||
<div className="p-5">
|
<div className="p-5">
|
||||||
<div className="flex w-full flex-col justify-between pb-4">
|
<div className="flex w-full flex-col justify-between pb-4">
|
||||||
<h2 className="text-md pb-4 font-medium text-neutral-900 dark:text-dark-1000">
|
<h2 className="text-md pb-4 font-medium text-neutral-900 dark:text-dark-1000">
|
||||||
Are you sure you want to delete this label?
|
{t`Are you sure you want to delete this label?`}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-sm font-medium text-light-900 dark:text-dark-900">
|
<p className="text-sm font-medium text-light-900 dark:text-dark-900">
|
||||||
{"This action can't be undone."}
|
{t`This action can't be undone.`}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-5 flex justify-end space-x-2 sm:mt-6">
|
<div className="mt-5 flex justify-end space-x-2 sm:mt-6">
|
||||||
<Button variant="secondary" onClick={() => closeModal()}>
|
<Button variant="secondary" onClick={() => closeModal()}>
|
||||||
Cancel
|
{t`Cancel`}
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={handleDeleteLabel}>Delete</Button>
|
<Button onClick={handleDeleteLabel}>{t`Delete`}</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import {
|
|||||||
ReactRenderer,
|
ReactRenderer,
|
||||||
useEditor,
|
useEditor,
|
||||||
} from "@tiptap/react";
|
} from "@tiptap/react";
|
||||||
|
import { useEffect } from "react";
|
||||||
import StarterKit from "@tiptap/starter-kit";
|
import StarterKit from "@tiptap/starter-kit";
|
||||||
import Suggestion from "@tiptap/suggestion";
|
import Suggestion from "@tiptap/suggestion";
|
||||||
import { forwardRef, useImperativeHandle, useRef, useState } from "react";
|
import { forwardRef, useImperativeHandle, useRef, useState } from "react";
|
||||||
@@ -343,9 +344,19 @@ export default function Editor({
|
|||||||
editable: !readOnly,
|
editable: !readOnly,
|
||||||
injectCSS: false,
|
injectCSS: false,
|
||||||
},
|
},
|
||||||
[content],
|
[], // creating the editor only once
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// this will sync external content changes without re-creating the editor instance
|
||||||
|
useEffect(() => {
|
||||||
|
if (!editor) return;
|
||||||
|
const currentHTML = editor.getHTML();
|
||||||
|
const safeContent = content ?? "";
|
||||||
|
if (safeContent !== currentHTML) {
|
||||||
|
editor.commands.setContent(safeContent, false);
|
||||||
|
}
|
||||||
|
}, [content, editor]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div ref={containerRef}>
|
<div ref={containerRef}>
|
||||||
<style jsx global>{`
|
<style jsx global>{`
|
||||||
|
|||||||
@@ -63,12 +63,16 @@ export function LabelForm({
|
|||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
refetch();
|
refetch();
|
||||||
if (!isCreateAnotherEnabled) closeModal();
|
if (!isCreateAnotherEnabled) {
|
||||||
reset({
|
closeModal();
|
||||||
name: "",
|
} else {
|
||||||
colour: colours[(currentColourIndex + 1) % colours.length],
|
const newFormState = {
|
||||||
isCreateAnotherEnabled,
|
name: "",
|
||||||
});
|
colour: colours[(currentColourIndex + 1) % colours.length],
|
||||||
|
isCreateAnotherEnabled,
|
||||||
|
};
|
||||||
|
reset(newFormState);
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
}
|
}
|
||||||
@@ -79,10 +83,6 @@ export function LabelForm({
|
|||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
refetch();
|
refetch();
|
||||||
closeModal();
|
closeModal();
|
||||||
reset({
|
|
||||||
name: "",
|
|
||||||
colour: colours[0],
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -229,6 +229,9 @@ export function LabelForm({
|
|||||||
<Button
|
<Button
|
||||||
type="submit"
|
type="submit"
|
||||||
isLoading={updateLabel.isPending || createLabel.isPending}
|
isLoading={updateLabel.isPending || createLabel.isPending}
|
||||||
|
disabled={
|
||||||
|
!watch("name")
|
||||||
|
}
|
||||||
>
|
>
|
||||||
{isEdit ? t`Update label` : t`Create label`}
|
{isEdit ? t`Update label` : t`Create label`}
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -7,15 +7,19 @@ interface Props {
|
|||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
modalSize?: "sm" | "md" | "lg";
|
modalSize?: "sm" | "md" | "lg";
|
||||||
positionFromTop?: "sm" | "md" | "lg";
|
positionFromTop?: "sm" | "md" | "lg";
|
||||||
|
isVisible?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Modal: React.FC<Props> = ({
|
const Modal: React.FC<Props> = ({
|
||||||
children,
|
children,
|
||||||
modalSize = "sm",
|
modalSize = "sm",
|
||||||
positionFromTop = "md",
|
positionFromTop = "md",
|
||||||
|
isVisible,
|
||||||
}) => {
|
}) => {
|
||||||
const { isOpen, closeModal } = useModal();
|
const { isOpen, closeModal } = useModal();
|
||||||
|
|
||||||
|
const shouldShow = isVisible !== undefined ? isVisible : isOpen;
|
||||||
|
|
||||||
const modalSizeMap = {
|
const modalSizeMap = {
|
||||||
sm: "max-w-[400px]",
|
sm: "max-w-[400px]",
|
||||||
md: "max-w-[550px]",
|
md: "max-w-[550px]",
|
||||||
@@ -29,7 +33,7 @@ const Modal: React.FC<Props> = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Transition.Root show={isOpen} as={Fragment}>
|
<Transition.Root show={shouldShow} as={Fragment}>
|
||||||
<Dialog as="div" className="relative z-10" onClose={closeModal}>
|
<Dialog as="div" className="relative z-10" onClose={closeModal}>
|
||||||
<Transition.Child
|
<Transition.Child
|
||||||
as={Fragment}
|
as={Fragment}
|
||||||
|
|||||||
48
apps/web/src/hooks/useModalFormState.ts
Normal file
48
apps/web/src/hooks/useModalFormState.ts
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import { useEffect } from "react";
|
||||||
|
import { useModal } from "~/providers/modal";
|
||||||
|
|
||||||
|
interface UseModalFormStateOptions<T> {
|
||||||
|
modalType: string;
|
||||||
|
initialValues: T;
|
||||||
|
resetOnClose?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useModalFormState<T extends Record<string, any>>({
|
||||||
|
modalType,
|
||||||
|
initialValues,
|
||||||
|
resetOnClose = false,
|
||||||
|
}: UseModalFormStateOptions<T>) {
|
||||||
|
const { modalContentType, isOpen, getModalState, setModalState, clearModalState } = useModal();
|
||||||
|
|
||||||
|
const isCurrentModal = modalContentType === modalType;
|
||||||
|
const savedState = getModalState(modalType) as T | undefined;
|
||||||
|
|
||||||
|
// get current form state (using the saved values if available, otherwise the initial values)
|
||||||
|
const formState = savedState || initialValues;
|
||||||
|
|
||||||
|
const saveFormState = (state: Partial<T>) => {
|
||||||
|
if (!isCurrentModal) return;
|
||||||
|
|
||||||
|
const currentState = getModalState(modalType) || initialValues;
|
||||||
|
const newState = { ...currentState, ...state };
|
||||||
|
setModalState(modalType, newState);
|
||||||
|
};
|
||||||
|
|
||||||
|
const clearFormState = () => {
|
||||||
|
clearModalState(modalType);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (resetOnClose && !isOpen && savedState) {
|
||||||
|
clearModalState(modalType);
|
||||||
|
}
|
||||||
|
}, [isOpen, resetOnClose, savedState, modalType, clearModalState]);
|
||||||
|
|
||||||
|
return {
|
||||||
|
formState,
|
||||||
|
saveFormState,
|
||||||
|
clearFormState,
|
||||||
|
isCurrentModal,
|
||||||
|
hasSavedState: !!savedState,
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -28,7 +28,7 @@ msgid "{0} | {1}"
|
|||||||
msgstr "{0} | {1}"
|
msgstr "{0} | {1}"
|
||||||
|
|
||||||
#. placeholder {0}: labelPublicIds.length
|
#. placeholder {0}: labelPublicIds.length
|
||||||
#: src/views/board/components/NewCardForm.tsx:365
|
#: src/views/board/components/NewCardForm.tsx:392
|
||||||
msgid "{0} labels"
|
msgid "{0} labels"
|
||||||
msgstr "{0} Labels"
|
msgstr "{0} Labels"
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ msgstr "Karte hinzufügen"
|
|||||||
msgid "Add a comment..."
|
msgid "Add a comment..."
|
||||||
msgstr "Kommentar hinzufügen..."
|
msgstr "Kommentar hinzufügen..."
|
||||||
|
|
||||||
#: src/components/Editor.tsx:302
|
#: src/components/Editor.tsx:303
|
||||||
msgid "Add description... (type '/' to open commands)"
|
msgid "Add description... (type '/' to open commands)"
|
||||||
msgstr "Beschreibung hinzufügen... (tippe '/' um Befehle zu öffnen)"
|
msgstr "Beschreibung hinzufügen... (tippe '/' um Befehle zu öffnen)"
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ msgstr "Beschreibung hinzufügen... (tippe '/' um Befehle zu öffnen)"
|
|||||||
msgid "Add label"
|
msgid "Add label"
|
||||||
msgstr "Label hinzufügen"
|
msgstr "Label hinzufügen"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:50
|
#: src/views/members/components/InviteMemberForm.tsx:85
|
||||||
#: src/views/card/components/MemberSelector.tsx:130
|
#: src/views/card/components/MemberSelector.tsx:130
|
||||||
msgid "Add member"
|
msgid "Add member"
|
||||||
msgstr "Mitglied hinzufügen"
|
msgstr "Mitglied hinzufügen"
|
||||||
@@ -145,6 +145,10 @@ msgstr "Bist du sicher, dass du diese Karte löschen möchtest?"
|
|||||||
msgid "Are you sure you want to delete this comment?"
|
msgid "Are you sure you want to delete this comment?"
|
||||||
msgstr "Bist du sicher, dass du diesen Kommentar löschen möchtest?"
|
msgstr "Bist du sicher, dass du diesen Kommentar löschen möchtest?"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:39
|
||||||
|
msgid "Are you sure you want to delete this label?"
|
||||||
|
msgstr "Sind Sie sicher, dass Sie dieses Label löschen möchten?"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr "Bist du sicher, dass du dein Konto löschen möchtest?"
|
msgstr "Bist du sicher, dass du dein Konto löschen möchtest?"
|
||||||
@@ -178,7 +182,7 @@ msgstr "Abrechnungsportal"
|
|||||||
msgid "Blog Post"
|
msgid "Blog Post"
|
||||||
msgstr "Blogbeitrag"
|
msgstr "Blogbeitrag"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Board"
|
msgid "Board"
|
||||||
msgstr "Board"
|
msgstr "Board"
|
||||||
|
|
||||||
@@ -190,7 +194,8 @@ msgstr "Der Name des Boards darf 100 Zeichen nicht überschreiten"
|
|||||||
msgid "Board name is required"
|
msgid "Board name is required"
|
||||||
msgstr "Boardname ist erforderlich"
|
msgstr "Boardname ist erforderlich"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:267
|
#: src/views/public/board/index.tsx:137
|
||||||
|
#: src/views/board/index.tsx:358
|
||||||
msgid "Board not found"
|
msgid "Board not found"
|
||||||
msgstr "Board nicht gefunden"
|
msgstr "Board nicht gefunden"
|
||||||
|
|
||||||
@@ -202,7 +207,7 @@ msgstr "Board-URL darf nur Buchstaben, Zahlen und Bindestriche enthalten"
|
|||||||
msgid "Board URL cannot exceed 60 characters"
|
msgid "Board URL cannot exceed 60 characters"
|
||||||
msgstr "Board-URL darf 60 Zeichen nicht überschreiten"
|
msgstr "Board-URL darf 60 Zeichen nicht überschreiten"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:53
|
#: src/views/public/board/index.tsx:59
|
||||||
msgid "Board URL copied to clipboard"
|
msgid "Board URL copied to clipboard"
|
||||||
msgstr "Board-URL in die Zwischenablage kopiert"
|
msgstr "Board-URL in die Zwischenablage kopiert"
|
||||||
|
|
||||||
@@ -247,6 +252,7 @@ msgstr "Fehlerbericht"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||||
#: src/views/card/components/Comment.tsx:156
|
#: src/views/card/components/Comment.tsx:156
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:47
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Abbrechen"
|
msgstr "Abbrechen"
|
||||||
|
|
||||||
@@ -254,7 +260,7 @@ msgstr "Abbrechen"
|
|||||||
msgid "Card not found"
|
msgid "Card not found"
|
||||||
msgstr "Karte nicht gefunden"
|
msgstr "Karte nicht gefunden"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:254
|
#: src/views/board/components/NewCardForm.tsx:278
|
||||||
msgid "Card title"
|
msgid "Card title"
|
||||||
msgstr "Kartentitel"
|
msgstr "Kartentitel"
|
||||||
|
|
||||||
@@ -347,7 +353,7 @@ msgid "Control who can view and edit your boards."
|
|||||||
msgstr "Kontrolliere, wer deine Boards ansehen und bearbeiten kann."
|
msgstr "Kontrolliere, wer deine Boards ansehen und bearbeiten kann."
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:140
|
#: src/views/board/components/NewListForm.tsx:140
|
||||||
#: src/views/board/components/NewCardForm.tsx:391
|
#: src/views/board/components/NewCardForm.tsx:418
|
||||||
#: src/components/LabelForm.tsx:212
|
#: src/components/LabelForm.tsx:212
|
||||||
msgid "Create another"
|
msgid "Create another"
|
||||||
msgstr "Weitere erstellen"
|
msgstr "Weitere erstellen"
|
||||||
@@ -356,15 +362,15 @@ msgstr "Weitere erstellen"
|
|||||||
msgid "Create board"
|
msgid "Create board"
|
||||||
msgstr "Board erstellen"
|
msgstr "Board erstellen"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:401
|
#: src/views/board/components/NewCardForm.tsx:428
|
||||||
msgid "Create card"
|
msgid "Create card"
|
||||||
msgstr "Karte erstellen"
|
msgstr "Karte erstellen"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Create label"
|
msgid "Create label"
|
||||||
msgstr "Label erstellen"
|
msgstr "Label erstellen"
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:148
|
#: src/views/board/components/NewListForm.tsx:152
|
||||||
msgid "Create list"
|
msgid "Create list"
|
||||||
msgstr "Liste erstellen"
|
msgstr "Liste erstellen"
|
||||||
|
|
||||||
@@ -377,11 +383,11 @@ msgid "Create new key"
|
|||||||
msgstr "Neuen Schlüssel erstellen"
|
msgstr "Neuen Schlüssel erstellen"
|
||||||
|
|
||||||
#: src/views/card/components/LabelSelector.tsx:98
|
#: src/views/card/components/LabelSelector.tsx:98
|
||||||
#: src/views/board/components/NewCardForm.tsx:327
|
#: src/views/board/components/NewCardForm.tsx:354
|
||||||
msgid "Create new label"
|
msgid "Create new label"
|
||||||
msgstr "Neues Label erstellen"
|
msgstr "Neues Label erstellen"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:335
|
#: src/views/board/index.tsx:426
|
||||||
msgid "Create new list"
|
msgid "Create new list"
|
||||||
msgstr "Neue Liste erstellen"
|
msgstr "Neue Liste erstellen"
|
||||||
|
|
||||||
@@ -417,6 +423,7 @@ msgstr "Dunkel"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||||
#: src/components/LabelForm.tsx:226
|
#: src/components/LabelForm.tsx:226
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Löschen"
|
msgstr "Löschen"
|
||||||
|
|
||||||
@@ -530,7 +537,7 @@ msgstr "Bearbeitung"
|
|||||||
msgid "email"
|
msgid "email"
|
||||||
msgstr "E-Mail"
|
msgstr "E-Mail"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:64
|
#: src/views/members/components/InviteMemberForm.tsx:99
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr "E-Mail"
|
msgstr "E-Mail"
|
||||||
|
|
||||||
@@ -554,6 +561,10 @@ msgstr "Gib dein Passwort ein"
|
|||||||
msgid "Error deleting account"
|
msgid "Error deleting account"
|
||||||
msgstr "Fehler beim Löschen des Kontos"
|
msgstr "Fehler beim Löschen des Kontos"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:22
|
||||||
|
msgid "Error deleting label"
|
||||||
|
msgstr "Fehler beim Löschen des Labels"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
||||||
msgid "Error deleting workspace"
|
msgid "Error deleting workspace"
|
||||||
msgstr "Fehler beim Löschen des Arbeitsbereichs"
|
msgstr "Fehler beim Löschen des Arbeitsbereichs"
|
||||||
@@ -562,6 +573,11 @@ msgstr "Fehler beim Löschen des Arbeitsbereichs"
|
|||||||
msgid "Error disconnecting Trello"
|
msgid "Error disconnecting Trello"
|
||||||
msgstr "Fehler beim Trennen von Trello"
|
msgstr "Fehler beim Trennen von Trello"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:57
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:63
|
||||||
|
msgid "Error inviting member"
|
||||||
|
msgstr "Fehler beim Einladen des Mitglieds"
|
||||||
|
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
||||||
msgid "Error updating display name"
|
msgid "Error updating display name"
|
||||||
msgstr "Fehler beim Aktualisieren des Anzeigenamens"
|
msgstr "Fehler beim Aktualisieren des Anzeigenamens"
|
||||||
@@ -644,6 +660,7 @@ msgstr "Finden Sie Antworten auf häufige Fragen zum Projekt. Nicht gefunden, wo
|
|||||||
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
||||||
msgstr "Für langfristige Nachhaltigkeit erkennen wir an, dass alle guten Open-Source-Projekte eine Einnahmequelle benötigen. Unsere stammt aus dem kostenpflichtigen Cloud-Angebot für Workspaces mit mehreren Benutzern (kostenlos während der Beta-Phase) und für benutzerdefinierte Workspace-Slugs. Es besteht keine Verpflichtung, dieses Angebot zu nutzen, und Sie können die Software kostenlos auf Ihrer eigenen Infrastruktur selbst hosten."
|
msgstr "Für langfristige Nachhaltigkeit erkennen wir an, dass alle guten Open-Source-Projekte eine Einnahmequelle benötigen. Unsere stammt aus dem kostenpflichtigen Cloud-Angebot für Workspaces mit mehreren Benutzern (kostenlos während der Beta-Phase) und für benutzerdefinierte Workspace-Slugs. Es besteht keine Verpflichtung, dieses Angebot zu nutzen, und Sie können die Software kostenlos auf Ihrer eigenen Infrastruktur selbst hosten."
|
||||||
|
|
||||||
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
#: src/views/home/components/Pricing.tsx:32
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
msgid "Free"
|
msgid "Free"
|
||||||
msgstr "Kostenlos"
|
msgstr "Kostenlos"
|
||||||
@@ -676,7 +693,7 @@ msgstr "Loslegen"
|
|||||||
msgid "Get started by creating a new board"
|
msgid "Get started by creating a new board"
|
||||||
msgstr "Beginne, indem du ein neues Board erstellst"
|
msgstr "Beginne, indem du ein neues Board erstellst"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:327
|
#: src/views/board/index.tsx:418
|
||||||
msgid "Get started by creating a new list"
|
msgid "Get started by creating a new list"
|
||||||
msgstr "Beginne mit dem Erstellen einer neuen Liste"
|
msgstr "Beginne mit dem Erstellen einer neuen Liste"
|
||||||
|
|
||||||
@@ -799,11 +816,19 @@ msgstr "Integrationen"
|
|||||||
msgid "Interviewing"
|
msgid "Interviewing"
|
||||||
msgstr "Vorstellungsgespräch"
|
msgstr "Vorstellungsgespräch"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:26
|
||||||
|
msgid "Invalid email address"
|
||||||
|
msgstr "Ungültige E-Mail-Adresse"
|
||||||
|
|
||||||
#: src/views/members/index.tsx:169
|
#: src/views/members/index.tsx:169
|
||||||
msgid "Invite"
|
msgid "Invite"
|
||||||
msgstr "Einladen"
|
msgstr "Einladen"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
#: src/views/members/components/InviteMemberForm.tsx:113
|
||||||
|
msgid "Invite another"
|
||||||
|
msgstr "Weitere Person einladen"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||||
#: src/views/card/components/MemberSelector.tsx:112
|
#: src/views/card/components/MemberSelector.tsx:112
|
||||||
msgid "Invite member"
|
msgid "Invite member"
|
||||||
msgstr "Mitglied einladen"
|
msgstr "Mitglied einladen"
|
||||||
@@ -826,7 +851,7 @@ msgid "Keep in mind that this action is irreversible."
|
|||||||
msgstr "Beachten Sie, dass diese Aktion nicht rückgängig gemacht werden kann."
|
msgstr "Beachten Sie, dass diese Aktion nicht rückgängig gemacht werden kann."
|
||||||
|
|
||||||
#: src/views/card/index.tsx:113
|
#: src/views/card/index.tsx:113
|
||||||
#: src/views/board/components/NewCardForm.tsx:331
|
#: src/views/board/components/NewCardForm.tsx:358
|
||||||
#: src/views/board/components/Filters.tsx:101
|
#: src/views/board/components/Filters.tsx:101
|
||||||
msgid "Labels"
|
msgid "Labels"
|
||||||
msgstr "Labels"
|
msgstr "Labels"
|
||||||
@@ -855,7 +880,7 @@ msgstr "Lizenz"
|
|||||||
msgid "Light"
|
msgid "Light"
|
||||||
msgstr "Hell"
|
msgstr "Hell"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:51
|
#: src/views/public/board/index.tsx:57
|
||||||
msgid "Link copied"
|
msgid "Link copied"
|
||||||
msgstr "Link kopiert"
|
msgstr "Link kopiert"
|
||||||
|
|
||||||
@@ -893,7 +918,7 @@ msgstr "Mittlere Priorität"
|
|||||||
|
|
||||||
#: src/views/members/index.tsx:161
|
#: src/views/members/index.tsx:161
|
||||||
#: src/views/card/index.tsx:121
|
#: src/views/card/index.tsx:121
|
||||||
#: src/views/board/components/NewCardForm.tsx:290
|
#: src/views/board/components/NewCardForm.tsx:317
|
||||||
#: src/views/board/components/Filters.tsx:93
|
#: src/views/board/components/Filters.tsx:93
|
||||||
#: src/components/SideNavigation.tsx:73
|
#: src/components/SideNavigation.tsx:73
|
||||||
msgid "Members"
|
msgid "Members"
|
||||||
@@ -933,7 +958,7 @@ msgstr "Neu"
|
|||||||
msgid "New board"
|
msgid "New board"
|
||||||
msgstr "Neues Board"
|
msgstr "Neues Board"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:237
|
#: src/views/board/components/NewCardForm.tsx:261
|
||||||
msgid "New card"
|
msgid "New card"
|
||||||
msgstr "Neue Karte"
|
msgstr "Neue Karte"
|
||||||
|
|
||||||
@@ -945,7 +970,7 @@ msgstr "Neuer Import"
|
|||||||
msgid "New label"
|
msgid "New label"
|
||||||
msgstr "Neues Label"
|
msgstr "Neues Label"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:304
|
#: src/views/board/index.tsx:395
|
||||||
#: src/views/board/components/NewListForm.tsx:112
|
#: src/views/board/components/NewListForm.tsx:112
|
||||||
msgid "New list"
|
msgid "New list"
|
||||||
msgstr "Neue Liste"
|
msgstr "Neue Liste"
|
||||||
@@ -978,7 +1003,7 @@ msgstr "Keine Boards gefunden"
|
|||||||
msgid "No credit card required"
|
msgid "No credit card required"
|
||||||
msgstr "Keine Kreditkarte erforderlich"
|
msgstr "Keine Kreditkarte erforderlich"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:324
|
#: src/views/board/index.tsx:415
|
||||||
msgid "No lists"
|
msgid "No lists"
|
||||||
msgstr "Keine Listen"
|
msgstr "Keine Listen"
|
||||||
|
|
||||||
@@ -1059,6 +1084,7 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
|
|||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:40
|
#: src/views/settings/components/Avatar.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:98
|
#: src/views/settings/components/Avatar.tsx:98
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:64
|
||||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||||
#: src/views/card/index.tsx:159
|
#: src/views/card/index.tsx:159
|
||||||
#: src/views/card/components/NewCommentForm.tsx:31
|
#: src/views/card/components/NewCommentForm.tsx:31
|
||||||
@@ -1074,9 +1100,10 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
|
|||||||
#: src/views/board/components/VisibilityButton.tsx:53
|
#: src/views/board/components/VisibilityButton.tsx:53
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||||
#: src/views/board/components/NewListForm.tsx:78
|
#: src/views/board/components/NewListForm.tsx:78
|
||||||
#: src/views/board/components/NewCardForm.tsx:128
|
#: src/views/board/components/NewCardForm.tsx:145
|
||||||
#: src/components/NewWorkspaceForm.tsx:41
|
#: src/components/NewWorkspaceForm.tsx:41
|
||||||
#: src/components/FeedbackModal.tsx:41
|
#: src/components/FeedbackModal.tsx:41
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:23
|
||||||
msgid "Please try again later, or contact customer support."
|
msgid "Please try again later, or contact customer support."
|
||||||
msgstr "Bitte versuche es später noch einmal oder kontaktiere den Kundensupport."
|
msgstr "Bitte versuche es später noch einmal oder kontaktiere den Kundensupport."
|
||||||
|
|
||||||
@@ -1335,9 +1362,14 @@ msgstr "Sie werden keinen Zugriff mehr auf diesen Workspace haben."
|
|||||||
|
|
||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:42
|
||||||
msgid "This action can't be undone."
|
msgid "This action can't be undone."
|
||||||
msgstr "Diese Aktion kann nicht rückgängig gemacht werden."
|
msgstr "Diese Aktion kann nicht rückgängig gemacht werden."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:140
|
||||||
|
msgid "This board is private or does not exist"
|
||||||
|
msgstr "Dieses Board ist privat oder existiert nicht"
|
||||||
|
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
||||||
msgid "This board URL has already been taken"
|
msgid "This board URL has already been taken"
|
||||||
msgstr "Diese Board-URL ist bereits vergeben"
|
msgstr "Diese Board-URL ist bereits vergeben"
|
||||||
@@ -1383,7 +1415,7 @@ msgstr "Priorisierung"
|
|||||||
msgid "Unable to add comment"
|
msgid "Unable to add comment"
|
||||||
msgstr "Kommentar konnte nicht hinzugefügt werden"
|
msgstr "Kommentar konnte nicht hinzugefügt werden"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:125
|
#: src/views/board/components/NewCardForm.tsx:142
|
||||||
msgid "Unable to create card"
|
msgid "Unable to create card"
|
||||||
msgstr "Karte konnte nicht erstellt werden"
|
msgstr "Karte konnte nicht erstellt werden"
|
||||||
|
|
||||||
@@ -1477,11 +1509,11 @@ msgstr "Unbegrenzte listen"
|
|||||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
||||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:173
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:174
|
||||||
msgid "Update"
|
msgid "Update"
|
||||||
msgstr "Aktualisieren"
|
msgstr "Aktualisieren"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Update label"
|
msgid "Update label"
|
||||||
msgstr "Label aktualisieren"
|
msgstr "Label aktualisieren"
|
||||||
|
|
||||||
@@ -1526,6 +1558,10 @@ msgstr "Vorlage verwenden"
|
|||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr "Benutzer"
|
msgstr "Benutzer"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:58
|
||||||
|
msgid "User is already a member of this workspace"
|
||||||
|
msgstr "Benutzer ist bereits Mitglied dieses Arbeitsbereichs"
|
||||||
|
|
||||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||||
msgid "Video"
|
msgid "Video"
|
||||||
msgstr "Video"
|
msgstr "Video"
|
||||||
@@ -1546,6 +1582,10 @@ msgstr "Dokumentation ansehen"
|
|||||||
msgid "View our roadmap."
|
msgid "View our roadmap."
|
||||||
msgstr "Sieh dir unsere roadmap an."
|
msgstr "Sieh dir unsere roadmap an."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:143
|
||||||
|
msgid "View workspace"
|
||||||
|
msgstr "Workspace anzeigen"
|
||||||
|
|
||||||
#: src/views/board/components/VisibilityButton.tsx:91
|
#: src/views/board/components/VisibilityButton.tsx:91
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr "Sichtbarkeit"
|
msgstr "Sichtbarkeit"
|
||||||
@@ -1578,7 +1618,7 @@ msgstr "Als Trello 2011 auf den markt kam, beeindruckte es alle mit seiner sorgf
|
|||||||
msgid "Why make an open source Trello?"
|
msgid "Why make an open source Trello?"
|
||||||
msgstr "Warum ein open source Trello entwickeln?"
|
msgstr "Warum ein open source Trello entwickeln?"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Workspace"
|
msgid "Workspace"
|
||||||
msgstr "Arbeitsbereich"
|
msgstr "Arbeitsbereich"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -28,7 +28,7 @@ msgid "{0} | {1}"
|
|||||||
msgstr "{0} | {1}"
|
msgstr "{0} | {1}"
|
||||||
|
|
||||||
#. placeholder {0}: labelPublicIds.length
|
#. placeholder {0}: labelPublicIds.length
|
||||||
#: src/views/board/components/NewCardForm.tsx:365
|
#: src/views/board/components/NewCardForm.tsx:392
|
||||||
msgid "{0} labels"
|
msgid "{0} labels"
|
||||||
msgstr "{0} labels"
|
msgstr "{0} labels"
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ msgstr "Add a card"
|
|||||||
msgid "Add a comment..."
|
msgid "Add a comment..."
|
||||||
msgstr "Add a comment..."
|
msgstr "Add a comment..."
|
||||||
|
|
||||||
#: src/components/Editor.tsx:302
|
#: src/components/Editor.tsx:303
|
||||||
msgid "Add description... (type '/' to open commands)"
|
msgid "Add description... (type '/' to open commands)"
|
||||||
msgstr "Add description... (type '/' to open commands)"
|
msgstr "Add description... (type '/' to open commands)"
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ msgstr "Add description... (type '/' to open commands)"
|
|||||||
msgid "Add label"
|
msgid "Add label"
|
||||||
msgstr "Add label"
|
msgstr "Add label"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:50
|
#: src/views/members/components/InviteMemberForm.tsx:85
|
||||||
#: src/views/card/components/MemberSelector.tsx:130
|
#: src/views/card/components/MemberSelector.tsx:130
|
||||||
msgid "Add member"
|
msgid "Add member"
|
||||||
msgstr "Add member"
|
msgstr "Add member"
|
||||||
@@ -161,6 +161,10 @@ msgstr "Are you sure you want to delete this card?"
|
|||||||
msgid "Are you sure you want to delete this comment?"
|
msgid "Are you sure you want to delete this comment?"
|
||||||
msgstr "Are you sure you want to delete this comment?"
|
msgstr "Are you sure you want to delete this comment?"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:39
|
||||||
|
msgid "Are you sure you want to delete this label?"
|
||||||
|
msgstr "Are you sure you want to delete this label?"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr "Are you sure you want to delete your account?"
|
msgstr "Are you sure you want to delete your account?"
|
||||||
@@ -198,7 +202,7 @@ msgstr "Billing portal"
|
|||||||
msgid "Blog Post"
|
msgid "Blog Post"
|
||||||
msgstr "Blog Post"
|
msgstr "Blog Post"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Board"
|
msgid "Board"
|
||||||
msgstr "Board"
|
msgstr "Board"
|
||||||
|
|
||||||
@@ -214,7 +218,8 @@ msgstr "Board name cannot exceed 100 characters"
|
|||||||
msgid "Board name is required"
|
msgid "Board name is required"
|
||||||
msgstr "Board name is required"
|
msgstr "Board name is required"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:267
|
#: src/views/public/board/index.tsx:137
|
||||||
|
#: src/views/board/index.tsx:358
|
||||||
msgid "Board not found"
|
msgid "Board not found"
|
||||||
msgstr "Board not found"
|
msgstr "Board not found"
|
||||||
|
|
||||||
@@ -226,7 +231,7 @@ msgstr "Board URL can only contain letters, numbers, and hyphens"
|
|||||||
msgid "Board URL cannot exceed 60 characters"
|
msgid "Board URL cannot exceed 60 characters"
|
||||||
msgstr "Board URL cannot exceed 60 characters"
|
msgstr "Board URL cannot exceed 60 characters"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:53
|
#: src/views/public/board/index.tsx:59
|
||||||
msgid "Board URL copied to clipboard"
|
msgid "Board URL copied to clipboard"
|
||||||
msgstr "Board URL copied to clipboard"
|
msgstr "Board URL copied to clipboard"
|
||||||
|
|
||||||
@@ -275,6 +280,7 @@ msgstr "Bug Report"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||||
#: src/views/card/components/Comment.tsx:156
|
#: src/views/card/components/Comment.tsx:156
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:47
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancel"
|
msgstr "Cancel"
|
||||||
|
|
||||||
@@ -282,7 +288,7 @@ msgstr "Cancel"
|
|||||||
msgid "Card not found"
|
msgid "Card not found"
|
||||||
msgstr "Card not found"
|
msgstr "Card not found"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:254
|
#: src/views/board/components/NewCardForm.tsx:278
|
||||||
msgid "Card title"
|
msgid "Card title"
|
||||||
msgstr "Card title"
|
msgstr "Card title"
|
||||||
|
|
||||||
@@ -375,7 +381,7 @@ msgid "Control who can view and edit your boards."
|
|||||||
msgstr "Control who can view and edit your boards."
|
msgstr "Control who can view and edit your boards."
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:140
|
#: src/views/board/components/NewListForm.tsx:140
|
||||||
#: src/views/board/components/NewCardForm.tsx:391
|
#: src/views/board/components/NewCardForm.tsx:418
|
||||||
#: src/components/LabelForm.tsx:212
|
#: src/components/LabelForm.tsx:212
|
||||||
msgid "Create another"
|
msgid "Create another"
|
||||||
msgstr "Create another"
|
msgstr "Create another"
|
||||||
@@ -392,15 +398,15 @@ msgstr "Create another"
|
|||||||
msgid "Create board"
|
msgid "Create board"
|
||||||
msgstr "Create board"
|
msgstr "Create board"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:401
|
#: src/views/board/components/NewCardForm.tsx:428
|
||||||
msgid "Create card"
|
msgid "Create card"
|
||||||
msgstr "Create card"
|
msgstr "Create card"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Create label"
|
msgid "Create label"
|
||||||
msgstr "Create label"
|
msgstr "Create label"
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:148
|
#: src/views/board/components/NewListForm.tsx:152
|
||||||
msgid "Create list"
|
msgid "Create list"
|
||||||
msgstr "Create list"
|
msgstr "Create list"
|
||||||
|
|
||||||
@@ -413,11 +419,11 @@ msgid "Create new key"
|
|||||||
msgstr "Create new key"
|
msgstr "Create new key"
|
||||||
|
|
||||||
#: src/views/card/components/LabelSelector.tsx:98
|
#: src/views/card/components/LabelSelector.tsx:98
|
||||||
#: src/views/board/components/NewCardForm.tsx:327
|
#: src/views/board/components/NewCardForm.tsx:354
|
||||||
msgid "Create new label"
|
msgid "Create new label"
|
||||||
msgstr "Create new label"
|
msgstr "Create new label"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:335
|
#: src/views/board/index.tsx:426
|
||||||
msgid "Create new list"
|
msgid "Create new list"
|
||||||
msgstr "Create new list"
|
msgstr "Create new list"
|
||||||
|
|
||||||
@@ -453,6 +459,7 @@ msgstr "Dark"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||||
#: src/components/LabelForm.tsx:226
|
#: src/components/LabelForm.tsx:226
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Delete"
|
msgstr "Delete"
|
||||||
|
|
||||||
@@ -566,7 +573,7 @@ msgstr "Editing"
|
|||||||
msgid "email"
|
msgid "email"
|
||||||
msgstr "email"
|
msgstr "email"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:64
|
#: src/views/members/components/InviteMemberForm.tsx:99
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr "Email"
|
msgstr "Email"
|
||||||
|
|
||||||
@@ -590,6 +597,10 @@ msgstr "Enter your password"
|
|||||||
msgid "Error deleting account"
|
msgid "Error deleting account"
|
||||||
msgstr "Error deleting account"
|
msgstr "Error deleting account"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:22
|
||||||
|
msgid "Error deleting label"
|
||||||
|
msgstr "Error deleting label"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
||||||
msgid "Error deleting workspace"
|
msgid "Error deleting workspace"
|
||||||
msgstr "Error deleting workspace"
|
msgstr "Error deleting workspace"
|
||||||
@@ -598,6 +609,11 @@ msgstr "Error deleting workspace"
|
|||||||
msgid "Error disconnecting Trello"
|
msgid "Error disconnecting Trello"
|
||||||
msgstr "Error disconnecting Trello"
|
msgstr "Error disconnecting Trello"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:57
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:63
|
||||||
|
msgid "Error inviting member"
|
||||||
|
msgstr "Error inviting member"
|
||||||
|
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
||||||
msgid "Error updating display name"
|
msgid "Error updating display name"
|
||||||
msgstr "Error updating display name"
|
msgstr "Error updating display name"
|
||||||
@@ -713,7 +729,7 @@ msgstr "Get Started"
|
|||||||
msgid "Get started by creating a new board"
|
msgid "Get started by creating a new board"
|
||||||
msgstr "Get started by creating a new board"
|
msgstr "Get started by creating a new board"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:327
|
#: src/views/board/index.tsx:418
|
||||||
msgid "Get started by creating a new list"
|
msgid "Get started by creating a new list"
|
||||||
msgstr "Get started by creating a new list"
|
msgstr "Get started by creating a new list"
|
||||||
|
|
||||||
@@ -840,11 +856,19 @@ msgstr "Integrations"
|
|||||||
msgid "Interviewing"
|
msgid "Interviewing"
|
||||||
msgstr "Interviewing"
|
msgstr "Interviewing"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:26
|
||||||
|
msgid "Invalid email address"
|
||||||
|
msgstr "Invalid email address"
|
||||||
|
|
||||||
#: src/views/members/index.tsx:169
|
#: src/views/members/index.tsx:169
|
||||||
msgid "Invite"
|
msgid "Invite"
|
||||||
msgstr "Invite"
|
msgstr "Invite"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
#: src/views/members/components/InviteMemberForm.tsx:113
|
||||||
|
msgid "Invite another"
|
||||||
|
msgstr "Invite another"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||||
#: src/views/card/components/MemberSelector.tsx:112
|
#: src/views/card/components/MemberSelector.tsx:112
|
||||||
msgid "Invite member"
|
msgid "Invite member"
|
||||||
msgstr "Invite member"
|
msgstr "Invite member"
|
||||||
@@ -867,7 +891,7 @@ msgid "Keep in mind that this action is irreversible."
|
|||||||
msgstr "Keep in mind that this action is irreversible."
|
msgstr "Keep in mind that this action is irreversible."
|
||||||
|
|
||||||
#: src/views/card/index.tsx:113
|
#: src/views/card/index.tsx:113
|
||||||
#: src/views/board/components/NewCardForm.tsx:331
|
#: src/views/board/components/NewCardForm.tsx:358
|
||||||
#: src/views/board/components/Filters.tsx:101
|
#: src/views/board/components/Filters.tsx:101
|
||||||
msgid "Labels"
|
msgid "Labels"
|
||||||
msgstr "Labels"
|
msgstr "Labels"
|
||||||
@@ -896,7 +920,7 @@ msgstr "License"
|
|||||||
msgid "Light"
|
msgid "Light"
|
||||||
msgstr "Light"
|
msgstr "Light"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:51
|
#: src/views/public/board/index.tsx:57
|
||||||
msgid "Link copied"
|
msgid "Link copied"
|
||||||
msgstr "Link copied"
|
msgstr "Link copied"
|
||||||
|
|
||||||
@@ -934,7 +958,7 @@ msgstr "Medium Priority"
|
|||||||
|
|
||||||
#: src/views/members/index.tsx:161
|
#: src/views/members/index.tsx:161
|
||||||
#: src/views/card/index.tsx:121
|
#: src/views/card/index.tsx:121
|
||||||
#: src/views/board/components/NewCardForm.tsx:290
|
#: src/views/board/components/NewCardForm.tsx:317
|
||||||
#: src/views/board/components/Filters.tsx:93
|
#: src/views/board/components/Filters.tsx:93
|
||||||
#: src/components/SideNavigation.tsx:73
|
#: src/components/SideNavigation.tsx:73
|
||||||
msgid "Members"
|
msgid "Members"
|
||||||
@@ -974,7 +998,7 @@ msgstr "New"
|
|||||||
msgid "New board"
|
msgid "New board"
|
||||||
msgstr "New board"
|
msgstr "New board"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:237
|
#: src/views/board/components/NewCardForm.tsx:261
|
||||||
msgid "New card"
|
msgid "New card"
|
||||||
msgstr "New card"
|
msgstr "New card"
|
||||||
|
|
||||||
@@ -986,7 +1010,7 @@ msgstr "New import"
|
|||||||
msgid "New label"
|
msgid "New label"
|
||||||
msgstr "New label"
|
msgstr "New label"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:304
|
#: src/views/board/index.tsx:395
|
||||||
#: src/views/board/components/NewListForm.tsx:112
|
#: src/views/board/components/NewListForm.tsx:112
|
||||||
msgid "New list"
|
msgid "New list"
|
||||||
msgstr "New list"
|
msgstr "New list"
|
||||||
@@ -1023,7 +1047,7 @@ msgstr "No boards found"
|
|||||||
msgid "No credit card required"
|
msgid "No credit card required"
|
||||||
msgstr "No credit card required"
|
msgstr "No credit card required"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:324
|
#: src/views/board/index.tsx:415
|
||||||
msgid "No lists"
|
msgid "No lists"
|
||||||
msgstr "No lists"
|
msgstr "No lists"
|
||||||
|
|
||||||
@@ -1104,6 +1128,7 @@ msgstr "Please select a file to upload."
|
|||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:40
|
#: src/views/settings/components/Avatar.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:98
|
#: src/views/settings/components/Avatar.tsx:98
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:64
|
||||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||||
#: src/views/card/index.tsx:159
|
#: src/views/card/index.tsx:159
|
||||||
#: src/views/card/components/NewCommentForm.tsx:31
|
#: src/views/card/components/NewCommentForm.tsx:31
|
||||||
@@ -1119,9 +1144,10 @@ msgstr "Please select a file to upload."
|
|||||||
#: src/views/board/components/VisibilityButton.tsx:53
|
#: src/views/board/components/VisibilityButton.tsx:53
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||||
#: src/views/board/components/NewListForm.tsx:78
|
#: src/views/board/components/NewListForm.tsx:78
|
||||||
#: src/views/board/components/NewCardForm.tsx:128
|
#: src/views/board/components/NewCardForm.tsx:145
|
||||||
#: src/components/NewWorkspaceForm.tsx:41
|
#: src/components/NewWorkspaceForm.tsx:41
|
||||||
#: src/components/FeedbackModal.tsx:41
|
#: src/components/FeedbackModal.tsx:41
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:23
|
||||||
msgid "Please try again later, or contact customer support."
|
msgid "Please try again later, or contact customer support."
|
||||||
msgstr "Please try again later, or contact customer support."
|
msgstr "Please try again later, or contact customer support."
|
||||||
|
|
||||||
@@ -1384,9 +1410,14 @@ msgstr "They won't be able to access this workspace."
|
|||||||
|
|
||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:42
|
||||||
msgid "This action can't be undone."
|
msgid "This action can't be undone."
|
||||||
msgstr "This action can't be undone."
|
msgstr "This action can't be undone."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:140
|
||||||
|
msgid "This board is private or does not exist"
|
||||||
|
msgstr "This board is private or does not exist"
|
||||||
|
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
||||||
msgid "This board URL has already been taken"
|
msgid "This board URL has already been taken"
|
||||||
msgstr "This board URL has already been taken"
|
msgstr "This board URL has already been taken"
|
||||||
@@ -1436,7 +1467,7 @@ msgstr "Triaging"
|
|||||||
msgid "Unable to add comment"
|
msgid "Unable to add comment"
|
||||||
msgstr "Unable to add comment"
|
msgstr "Unable to add comment"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:125
|
#: src/views/board/components/NewCardForm.tsx:142
|
||||||
msgid "Unable to create card"
|
msgid "Unable to create card"
|
||||||
msgstr "Unable to create card"
|
msgstr "Unable to create card"
|
||||||
|
|
||||||
@@ -1530,11 +1561,11 @@ msgstr "Unlimited lists"
|
|||||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
||||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:173
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:174
|
||||||
msgid "Update"
|
msgid "Update"
|
||||||
msgstr "Update"
|
msgstr "Update"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Update label"
|
msgid "Update label"
|
||||||
msgstr "Update label"
|
msgstr "Update label"
|
||||||
|
|
||||||
@@ -1579,6 +1610,10 @@ msgstr "Use template"
|
|||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr "User"
|
msgstr "User"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:58
|
||||||
|
msgid "User is already a member of this workspace"
|
||||||
|
msgstr "User is already a member of this workspace"
|
||||||
|
|
||||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||||
msgid "Video"
|
msgid "Video"
|
||||||
msgstr "Video"
|
msgstr "Video"
|
||||||
@@ -1599,6 +1634,10 @@ msgstr "View docs"
|
|||||||
msgid "View our roadmap."
|
msgid "View our roadmap."
|
||||||
msgstr "View our roadmap."
|
msgstr "View our roadmap."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:143
|
||||||
|
msgid "View workspace"
|
||||||
|
msgstr "View workspace"
|
||||||
|
|
||||||
#: src/views/board/components/VisibilityButton.tsx:91
|
#: src/views/board/components/VisibilityButton.tsx:91
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr "Visibility"
|
msgstr "Visibility"
|
||||||
@@ -1635,7 +1674,7 @@ msgstr "When Trello launched in 2011, it blew everyone away with its carefully d
|
|||||||
msgid "Why make an open source Trello?"
|
msgid "Why make an open source Trello?"
|
||||||
msgstr "Why make an open source Trello?"
|
msgstr "Why make an open source Trello?"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Workspace"
|
msgid "Workspace"
|
||||||
msgstr "Workspace"
|
msgstr "Workspace"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -28,7 +28,7 @@ msgid "{0} | {1}"
|
|||||||
msgstr "{0} | {1}"
|
msgstr "{0} | {1}"
|
||||||
|
|
||||||
#. placeholder {0}: labelPublicIds.length
|
#. placeholder {0}: labelPublicIds.length
|
||||||
#: src/views/board/components/NewCardForm.tsx:365
|
#: src/views/board/components/NewCardForm.tsx:392
|
||||||
msgid "{0} labels"
|
msgid "{0} labels"
|
||||||
msgstr "{0} etiquetas"
|
msgstr "{0} etiquetas"
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ msgstr "Añadir una tarjeta"
|
|||||||
msgid "Add a comment..."
|
msgid "Add a comment..."
|
||||||
msgstr "Añadir un comentario..."
|
msgstr "Añadir un comentario..."
|
||||||
|
|
||||||
#: src/components/Editor.tsx:302
|
#: src/components/Editor.tsx:303
|
||||||
msgid "Add description... (type '/' to open commands)"
|
msgid "Add description... (type '/' to open commands)"
|
||||||
msgstr "Añadir descripción... (escribe '/' para abrir comandos)"
|
msgstr "Añadir descripción... (escribe '/' para abrir comandos)"
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ msgstr "Añadir descripción... (escribe '/' para abrir comandos)"
|
|||||||
msgid "Add label"
|
msgid "Add label"
|
||||||
msgstr "Añadir etiqueta"
|
msgstr "Añadir etiqueta"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:50
|
#: src/views/members/components/InviteMemberForm.tsx:85
|
||||||
#: src/views/card/components/MemberSelector.tsx:130
|
#: src/views/card/components/MemberSelector.tsx:130
|
||||||
msgid "Add member"
|
msgid "Add member"
|
||||||
msgstr "Añadir miembro"
|
msgstr "Añadir miembro"
|
||||||
@@ -145,6 +145,10 @@ msgstr "¿Estás seguro de que quieres eliminar esta tarjeta?"
|
|||||||
msgid "Are you sure you want to delete this comment?"
|
msgid "Are you sure you want to delete this comment?"
|
||||||
msgstr "¿Estás seguro de que quieres eliminar este comentario?"
|
msgstr "¿Estás seguro de que quieres eliminar este comentario?"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:39
|
||||||
|
msgid "Are you sure you want to delete this label?"
|
||||||
|
msgstr "¿Estás seguro de que quieres eliminar esta etiqueta?"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr "¿Estás seguro de que quieres eliminar tu cuenta?"
|
msgstr "¿Estás seguro de que quieres eliminar tu cuenta?"
|
||||||
@@ -178,7 +182,7 @@ msgstr "Portal de facturación"
|
|||||||
msgid "Blog Post"
|
msgid "Blog Post"
|
||||||
msgstr "Entrada de blog"
|
msgstr "Entrada de blog"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Board"
|
msgid "Board"
|
||||||
msgstr "Tablero"
|
msgstr "Tablero"
|
||||||
|
|
||||||
@@ -190,7 +194,8 @@ msgstr "El nombre del tablero no puede exceder los 100 caracteres"
|
|||||||
msgid "Board name is required"
|
msgid "Board name is required"
|
||||||
msgstr "El nombre del tablero es obligatorio"
|
msgstr "El nombre del tablero es obligatorio"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:267
|
#: src/views/public/board/index.tsx:137
|
||||||
|
#: src/views/board/index.tsx:358
|
||||||
msgid "Board not found"
|
msgid "Board not found"
|
||||||
msgstr "Tablero no encontrado"
|
msgstr "Tablero no encontrado"
|
||||||
|
|
||||||
@@ -202,7 +207,7 @@ msgstr "La URL del tablero solo puede contener letras, números y guiones"
|
|||||||
msgid "Board URL cannot exceed 60 characters"
|
msgid "Board URL cannot exceed 60 characters"
|
||||||
msgstr "La URL del tablero no puede exceder los 60 caracteres"
|
msgstr "La URL del tablero no puede exceder los 60 caracteres"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:53
|
#: src/views/public/board/index.tsx:59
|
||||||
msgid "Board URL copied to clipboard"
|
msgid "Board URL copied to clipboard"
|
||||||
msgstr "URL del tablero copiada al portapapeles"
|
msgstr "URL del tablero copiada al portapapeles"
|
||||||
|
|
||||||
@@ -247,6 +252,7 @@ msgstr "Informe de error"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||||
#: src/views/card/components/Comment.tsx:156
|
#: src/views/card/components/Comment.tsx:156
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:47
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
@@ -254,7 +260,7 @@ msgstr "Cancelar"
|
|||||||
msgid "Card not found"
|
msgid "Card not found"
|
||||||
msgstr "Tarjeta no encontrada"
|
msgstr "Tarjeta no encontrada"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:254
|
#: src/views/board/components/NewCardForm.tsx:278
|
||||||
msgid "Card title"
|
msgid "Card title"
|
||||||
msgstr "Título de la tarjeta"
|
msgstr "Título de la tarjeta"
|
||||||
|
|
||||||
@@ -347,7 +353,7 @@ msgid "Control who can view and edit your boards."
|
|||||||
msgstr "Controla quién puede ver y editar tus tableros."
|
msgstr "Controla quién puede ver y editar tus tableros."
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:140
|
#: src/views/board/components/NewListForm.tsx:140
|
||||||
#: src/views/board/components/NewCardForm.tsx:391
|
#: src/views/board/components/NewCardForm.tsx:418
|
||||||
#: src/components/LabelForm.tsx:212
|
#: src/components/LabelForm.tsx:212
|
||||||
msgid "Create another"
|
msgid "Create another"
|
||||||
msgstr "Crear otro"
|
msgstr "Crear otro"
|
||||||
@@ -356,15 +362,15 @@ msgstr "Crear otro"
|
|||||||
msgid "Create board"
|
msgid "Create board"
|
||||||
msgstr "Crear tablero"
|
msgstr "Crear tablero"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:401
|
#: src/views/board/components/NewCardForm.tsx:428
|
||||||
msgid "Create card"
|
msgid "Create card"
|
||||||
msgstr "Crear tarjeta"
|
msgstr "Crear tarjeta"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Create label"
|
msgid "Create label"
|
||||||
msgstr "Crear etiqueta"
|
msgstr "Crear etiqueta"
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:148
|
#: src/views/board/components/NewListForm.tsx:152
|
||||||
msgid "Create list"
|
msgid "Create list"
|
||||||
msgstr "Crear lista"
|
msgstr "Crear lista"
|
||||||
|
|
||||||
@@ -377,11 +383,11 @@ msgid "Create new key"
|
|||||||
msgstr "Crear nueva clave"
|
msgstr "Crear nueva clave"
|
||||||
|
|
||||||
#: src/views/card/components/LabelSelector.tsx:98
|
#: src/views/card/components/LabelSelector.tsx:98
|
||||||
#: src/views/board/components/NewCardForm.tsx:327
|
#: src/views/board/components/NewCardForm.tsx:354
|
||||||
msgid "Create new label"
|
msgid "Create new label"
|
||||||
msgstr "Crear nueva etiqueta"
|
msgstr "Crear nueva etiqueta"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:335
|
#: src/views/board/index.tsx:426
|
||||||
msgid "Create new list"
|
msgid "Create new list"
|
||||||
msgstr "Crear nueva lista"
|
msgstr "Crear nueva lista"
|
||||||
|
|
||||||
@@ -417,6 +423,7 @@ msgstr "Oscuro"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||||
#: src/components/LabelForm.tsx:226
|
#: src/components/LabelForm.tsx:226
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Eliminar"
|
msgstr "Eliminar"
|
||||||
|
|
||||||
@@ -530,7 +537,7 @@ msgstr "Editando"
|
|||||||
msgid "email"
|
msgid "email"
|
||||||
msgstr "correo electrónico"
|
msgstr "correo electrónico"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:64
|
#: src/views/members/components/InviteMemberForm.tsx:99
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr "Correo electrónico"
|
msgstr "Correo electrónico"
|
||||||
|
|
||||||
@@ -554,6 +561,10 @@ msgstr "Introduce tu contraseña"
|
|||||||
msgid "Error deleting account"
|
msgid "Error deleting account"
|
||||||
msgstr "Error al eliminar la cuenta"
|
msgstr "Error al eliminar la cuenta"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:22
|
||||||
|
msgid "Error deleting label"
|
||||||
|
msgstr "Error al eliminar la etiqueta"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
||||||
msgid "Error deleting workspace"
|
msgid "Error deleting workspace"
|
||||||
msgstr "Error al eliminar el espacio de trabajo"
|
msgstr "Error al eliminar el espacio de trabajo"
|
||||||
@@ -562,6 +573,11 @@ msgstr "Error al eliminar el espacio de trabajo"
|
|||||||
msgid "Error disconnecting Trello"
|
msgid "Error disconnecting Trello"
|
||||||
msgstr "Error al desconectar Trello"
|
msgstr "Error al desconectar Trello"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:57
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:63
|
||||||
|
msgid "Error inviting member"
|
||||||
|
msgstr "Error al invitar al miembro"
|
||||||
|
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
||||||
msgid "Error updating display name"
|
msgid "Error updating display name"
|
||||||
msgstr "Error al actualizar el nombre visible"
|
msgstr "Error al actualizar el nombre visible"
|
||||||
@@ -644,6 +660,7 @@ msgstr "Encuentra respuestas a preguntas frecuentes sobre el proyecto. ¿No encu
|
|||||||
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
||||||
msgstr "Para la sostenibilidad a largo plazo, reconocemos que todos los buenos proyectos de código abierto necesitan una fuente de ingresos. La nuestra proviene de la oferta de pago en la nube para espacios de trabajo con múltiples usuarios (gratuita durante la beta) y para slugs personalizados de espacios de trabajo. No hay obligación de usarla, y puedes autoalojar el software en tu propia infraestructura sin costo alguno."
|
msgstr "Para la sostenibilidad a largo plazo, reconocemos que todos los buenos proyectos de código abierto necesitan una fuente de ingresos. La nuestra proviene de la oferta de pago en la nube para espacios de trabajo con múltiples usuarios (gratuita durante la beta) y para slugs personalizados de espacios de trabajo. No hay obligación de usarla, y puedes autoalojar el software en tu propia infraestructura sin costo alguno."
|
||||||
|
|
||||||
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
#: src/views/home/components/Pricing.tsx:32
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
msgid "Free"
|
msgid "Free"
|
||||||
msgstr "Gratis"
|
msgstr "Gratis"
|
||||||
@@ -676,7 +693,7 @@ msgstr "Comenzar"
|
|||||||
msgid "Get started by creating a new board"
|
msgid "Get started by creating a new board"
|
||||||
msgstr "Comienza creando un nuevo tablero"
|
msgstr "Comienza creando un nuevo tablero"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:327
|
#: src/views/board/index.tsx:418
|
||||||
msgid "Get started by creating a new list"
|
msgid "Get started by creating a new list"
|
||||||
msgstr "Comienza creando una nueva lista"
|
msgstr "Comienza creando una nueva lista"
|
||||||
|
|
||||||
@@ -799,11 +816,19 @@ msgstr "Integraciones"
|
|||||||
msgid "Interviewing"
|
msgid "Interviewing"
|
||||||
msgstr "Entrevistando"
|
msgstr "Entrevistando"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:26
|
||||||
|
msgid "Invalid email address"
|
||||||
|
msgstr "Dirección de correo electrónico no válida"
|
||||||
|
|
||||||
#: src/views/members/index.tsx:169
|
#: src/views/members/index.tsx:169
|
||||||
msgid "Invite"
|
msgid "Invite"
|
||||||
msgstr "Invitar"
|
msgstr "Invitar"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
#: src/views/members/components/InviteMemberForm.tsx:113
|
||||||
|
msgid "Invite another"
|
||||||
|
msgstr "Invitar a otro"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||||
#: src/views/card/components/MemberSelector.tsx:112
|
#: src/views/card/components/MemberSelector.tsx:112
|
||||||
msgid "Invite member"
|
msgid "Invite member"
|
||||||
msgstr "Invitar miembro"
|
msgstr "Invitar miembro"
|
||||||
@@ -826,7 +851,7 @@ msgid "Keep in mind that this action is irreversible."
|
|||||||
msgstr "Ten en cuenta que esta acción es irreversible."
|
msgstr "Ten en cuenta que esta acción es irreversible."
|
||||||
|
|
||||||
#: src/views/card/index.tsx:113
|
#: src/views/card/index.tsx:113
|
||||||
#: src/views/board/components/NewCardForm.tsx:331
|
#: src/views/board/components/NewCardForm.tsx:358
|
||||||
#: src/views/board/components/Filters.tsx:101
|
#: src/views/board/components/Filters.tsx:101
|
||||||
msgid "Labels"
|
msgid "Labels"
|
||||||
msgstr "Etiquetas"
|
msgstr "Etiquetas"
|
||||||
@@ -855,7 +880,7 @@ msgstr "Licencia"
|
|||||||
msgid "Light"
|
msgid "Light"
|
||||||
msgstr "Claro"
|
msgstr "Claro"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:51
|
#: src/views/public/board/index.tsx:57
|
||||||
msgid "Link copied"
|
msgid "Link copied"
|
||||||
msgstr "Enlace copiado"
|
msgstr "Enlace copiado"
|
||||||
|
|
||||||
@@ -893,7 +918,7 @@ msgstr "Prioridad media"
|
|||||||
|
|
||||||
#: src/views/members/index.tsx:161
|
#: src/views/members/index.tsx:161
|
||||||
#: src/views/card/index.tsx:121
|
#: src/views/card/index.tsx:121
|
||||||
#: src/views/board/components/NewCardForm.tsx:290
|
#: src/views/board/components/NewCardForm.tsx:317
|
||||||
#: src/views/board/components/Filters.tsx:93
|
#: src/views/board/components/Filters.tsx:93
|
||||||
#: src/components/SideNavigation.tsx:73
|
#: src/components/SideNavigation.tsx:73
|
||||||
msgid "Members"
|
msgid "Members"
|
||||||
@@ -933,7 +958,7 @@ msgstr "Nuevo"
|
|||||||
msgid "New board"
|
msgid "New board"
|
||||||
msgstr "Nuevo tablero"
|
msgstr "Nuevo tablero"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:237
|
#: src/views/board/components/NewCardForm.tsx:261
|
||||||
msgid "New card"
|
msgid "New card"
|
||||||
msgstr "Nueva tarjeta"
|
msgstr "Nueva tarjeta"
|
||||||
|
|
||||||
@@ -945,7 +970,7 @@ msgstr "Nueva importación"
|
|||||||
msgid "New label"
|
msgid "New label"
|
||||||
msgstr "Nueva etiqueta"
|
msgstr "Nueva etiqueta"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:304
|
#: src/views/board/index.tsx:395
|
||||||
#: src/views/board/components/NewListForm.tsx:112
|
#: src/views/board/components/NewListForm.tsx:112
|
||||||
msgid "New list"
|
msgid "New list"
|
||||||
msgstr "Nueva lista"
|
msgstr "Nueva lista"
|
||||||
@@ -978,7 +1003,7 @@ msgstr "No se encontraron tableros"
|
|||||||
msgid "No credit card required"
|
msgid "No credit card required"
|
||||||
msgstr "No se requiere tarjeta de crédito"
|
msgstr "No se requiere tarjeta de crédito"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:324
|
#: src/views/board/index.tsx:415
|
||||||
msgid "No lists"
|
msgid "No lists"
|
||||||
msgstr "Sin listas"
|
msgstr "Sin listas"
|
||||||
|
|
||||||
@@ -1059,6 +1084,7 @@ msgstr "Por favor selecciona un archivo para subir."
|
|||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:40
|
#: src/views/settings/components/Avatar.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:98
|
#: src/views/settings/components/Avatar.tsx:98
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:64
|
||||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||||
#: src/views/card/index.tsx:159
|
#: src/views/card/index.tsx:159
|
||||||
#: src/views/card/components/NewCommentForm.tsx:31
|
#: src/views/card/components/NewCommentForm.tsx:31
|
||||||
@@ -1074,9 +1100,10 @@ msgstr "Por favor selecciona un archivo para subir."
|
|||||||
#: src/views/board/components/VisibilityButton.tsx:53
|
#: src/views/board/components/VisibilityButton.tsx:53
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||||
#: src/views/board/components/NewListForm.tsx:78
|
#: src/views/board/components/NewListForm.tsx:78
|
||||||
#: src/views/board/components/NewCardForm.tsx:128
|
#: src/views/board/components/NewCardForm.tsx:145
|
||||||
#: src/components/NewWorkspaceForm.tsx:41
|
#: src/components/NewWorkspaceForm.tsx:41
|
||||||
#: src/components/FeedbackModal.tsx:41
|
#: src/components/FeedbackModal.tsx:41
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:23
|
||||||
msgid "Please try again later, or contact customer support."
|
msgid "Please try again later, or contact customer support."
|
||||||
msgstr "Por favor, inténtalo de nuevo más tarde o contacta con atención al cliente."
|
msgstr "Por favor, inténtalo de nuevo más tarde o contacta con atención al cliente."
|
||||||
|
|
||||||
@@ -1335,9 +1362,14 @@ msgstr "No podrán acceder a este espacio de trabajo."
|
|||||||
|
|
||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:42
|
||||||
msgid "This action can't be undone."
|
msgid "This action can't be undone."
|
||||||
msgstr "Esta acción no se puede deshacer."
|
msgstr "Esta acción no se puede deshacer."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:140
|
||||||
|
msgid "This board is private or does not exist"
|
||||||
|
msgstr "Este tablero es privado o no existe"
|
||||||
|
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
||||||
msgid "This board URL has already been taken"
|
msgid "This board URL has already been taken"
|
||||||
msgstr "Esta URL de tablero ya ha sido utilizada"
|
msgstr "Esta URL de tablero ya ha sido utilizada"
|
||||||
@@ -1383,7 +1415,7 @@ msgstr "Clasificación"
|
|||||||
msgid "Unable to add comment"
|
msgid "Unable to add comment"
|
||||||
msgstr "No se puede añadir el comentario"
|
msgstr "No se puede añadir el comentario"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:125
|
#: src/views/board/components/NewCardForm.tsx:142
|
||||||
msgid "Unable to create card"
|
msgid "Unable to create card"
|
||||||
msgstr "No se puede crear la tarjeta"
|
msgstr "No se puede crear la tarjeta"
|
||||||
|
|
||||||
@@ -1477,11 +1509,11 @@ msgstr "Listas ilimitadas"
|
|||||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
||||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:173
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:174
|
||||||
msgid "Update"
|
msgid "Update"
|
||||||
msgstr "Actualizar"
|
msgstr "Actualizar"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Update label"
|
msgid "Update label"
|
||||||
msgstr "Actualizar etiqueta"
|
msgstr "Actualizar etiqueta"
|
||||||
|
|
||||||
@@ -1526,6 +1558,10 @@ msgstr "Usar plantilla"
|
|||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr "Usuario"
|
msgstr "Usuario"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:58
|
||||||
|
msgid "User is already a member of this workspace"
|
||||||
|
msgstr "El usuario ya es miembro de este espacio de trabajo"
|
||||||
|
|
||||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||||
msgid "Video"
|
msgid "Video"
|
||||||
msgstr "Video"
|
msgstr "Video"
|
||||||
@@ -1546,6 +1582,10 @@ msgstr "Ver documentación"
|
|||||||
msgid "View our roadmap."
|
msgid "View our roadmap."
|
||||||
msgstr "Ver nuestra hoja de ruta."
|
msgstr "Ver nuestra hoja de ruta."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:143
|
||||||
|
msgid "View workspace"
|
||||||
|
msgstr "Ver espacio de trabajo"
|
||||||
|
|
||||||
#: src/views/board/components/VisibilityButton.tsx:91
|
#: src/views/board/components/VisibilityButton.tsx:91
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr "Visibilidad"
|
msgstr "Visibilidad"
|
||||||
@@ -1578,7 +1618,7 @@ msgstr "Cuando Trello se lanzó en 2011, impresionó a todos con su simplicidad
|
|||||||
msgid "Why make an open source Trello?"
|
msgid "Why make an open source Trello?"
|
||||||
msgstr "¿Por qué crear un Trello de código abierto?"
|
msgstr "¿Por qué crear un Trello de código abierto?"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Workspace"
|
msgid "Workspace"
|
||||||
msgstr "Espacio de trabajo"
|
msgstr "Espacio de trabajo"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -28,7 +28,7 @@ msgid "{0} | {1}"
|
|||||||
msgstr "{0} | {1}"
|
msgstr "{0} | {1}"
|
||||||
|
|
||||||
#. placeholder {0}: labelPublicIds.length
|
#. placeholder {0}: labelPublicIds.length
|
||||||
#: src/views/board/components/NewCardForm.tsx:365
|
#: src/views/board/components/NewCardForm.tsx:392
|
||||||
msgid "{0} labels"
|
msgid "{0} labels"
|
||||||
msgstr "{0} étiquettes"
|
msgstr "{0} étiquettes"
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ msgstr "Ajouter une carte"
|
|||||||
msgid "Add a comment..."
|
msgid "Add a comment..."
|
||||||
msgstr "Ajouter un commentaire..."
|
msgstr "Ajouter un commentaire..."
|
||||||
|
|
||||||
#: src/components/Editor.tsx:302
|
#: src/components/Editor.tsx:303
|
||||||
msgid "Add description... (type '/' to open commands)"
|
msgid "Add description... (type '/' to open commands)"
|
||||||
msgstr "Ajouter une description... (tapez '/' pour ouvrir les commandes)"
|
msgstr "Ajouter une description... (tapez '/' pour ouvrir les commandes)"
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ msgstr "Ajouter une description... (tapez '/' pour ouvrir les commandes)"
|
|||||||
msgid "Add label"
|
msgid "Add label"
|
||||||
msgstr "Ajouter une étiquette"
|
msgstr "Ajouter une étiquette"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:50
|
#: src/views/members/components/InviteMemberForm.tsx:85
|
||||||
#: src/views/card/components/MemberSelector.tsx:130
|
#: src/views/card/components/MemberSelector.tsx:130
|
||||||
msgid "Add member"
|
msgid "Add member"
|
||||||
msgstr "Ajouter un membre"
|
msgstr "Ajouter un membre"
|
||||||
@@ -145,6 +145,10 @@ msgstr "Êtes-vous sûr de vouloir supprimer cette carte ?"
|
|||||||
msgid "Are you sure you want to delete this comment?"
|
msgid "Are you sure you want to delete this comment?"
|
||||||
msgstr "Êtes-vous sûr de vouloir supprimer ce commentaire ?"
|
msgstr "Êtes-vous sûr de vouloir supprimer ce commentaire ?"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:39
|
||||||
|
msgid "Are you sure you want to delete this label?"
|
||||||
|
msgstr "Êtes-vous sûr de vouloir supprimer cette étiquette ?"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr "Êtes-vous sûr de vouloir supprimer votre compte ?"
|
msgstr "Êtes-vous sûr de vouloir supprimer votre compte ?"
|
||||||
@@ -178,7 +182,7 @@ msgstr "Portail de facturation"
|
|||||||
msgid "Blog Post"
|
msgid "Blog Post"
|
||||||
msgstr "Article de blog"
|
msgstr "Article de blog"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Board"
|
msgid "Board"
|
||||||
msgstr "Tableau"
|
msgstr "Tableau"
|
||||||
|
|
||||||
@@ -190,7 +194,8 @@ msgstr "Le nom du tableau ne peut pas dépasser 100 caractères"
|
|||||||
msgid "Board name is required"
|
msgid "Board name is required"
|
||||||
msgstr "Le nom du tableau est requis"
|
msgstr "Le nom du tableau est requis"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:267
|
#: src/views/public/board/index.tsx:137
|
||||||
|
#: src/views/board/index.tsx:358
|
||||||
msgid "Board not found"
|
msgid "Board not found"
|
||||||
msgstr "Tableau introuvable"
|
msgstr "Tableau introuvable"
|
||||||
|
|
||||||
@@ -202,7 +207,7 @@ msgstr "L'URL du tableau ne peut contenir que des lettres, des chiffres et des t
|
|||||||
msgid "Board URL cannot exceed 60 characters"
|
msgid "Board URL cannot exceed 60 characters"
|
||||||
msgstr "L'URL du tableau ne peut pas dépasser 60 caractères"
|
msgstr "L'URL du tableau ne peut pas dépasser 60 caractères"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:53
|
#: src/views/public/board/index.tsx:59
|
||||||
msgid "Board URL copied to clipboard"
|
msgid "Board URL copied to clipboard"
|
||||||
msgstr "URL du tableau copiée dans le presse-papiers"
|
msgstr "URL du tableau copiée dans le presse-papiers"
|
||||||
|
|
||||||
@@ -247,6 +252,7 @@ msgstr "Rapport de bug"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||||
#: src/views/card/components/Comment.tsx:156
|
#: src/views/card/components/Comment.tsx:156
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:47
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annuler"
|
msgstr "Annuler"
|
||||||
|
|
||||||
@@ -254,7 +260,7 @@ msgstr "Annuler"
|
|||||||
msgid "Card not found"
|
msgid "Card not found"
|
||||||
msgstr "Carte introuvable"
|
msgstr "Carte introuvable"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:254
|
#: src/views/board/components/NewCardForm.tsx:278
|
||||||
msgid "Card title"
|
msgid "Card title"
|
||||||
msgstr "Titre de la carte"
|
msgstr "Titre de la carte"
|
||||||
|
|
||||||
@@ -347,7 +353,7 @@ msgid "Control who can view and edit your boards."
|
|||||||
msgstr "Contrôlez qui peut voir et modifier vos tableaux."
|
msgstr "Contrôlez qui peut voir et modifier vos tableaux."
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:140
|
#: src/views/board/components/NewListForm.tsx:140
|
||||||
#: src/views/board/components/NewCardForm.tsx:391
|
#: src/views/board/components/NewCardForm.tsx:418
|
||||||
#: src/components/LabelForm.tsx:212
|
#: src/components/LabelForm.tsx:212
|
||||||
msgid "Create another"
|
msgid "Create another"
|
||||||
msgstr "Créer un autre"
|
msgstr "Créer un autre"
|
||||||
@@ -356,15 +362,15 @@ msgstr "Créer un autre"
|
|||||||
msgid "Create board"
|
msgid "Create board"
|
||||||
msgstr "Créer un tableau"
|
msgstr "Créer un tableau"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:401
|
#: src/views/board/components/NewCardForm.tsx:428
|
||||||
msgid "Create card"
|
msgid "Create card"
|
||||||
msgstr "Créer une carte"
|
msgstr "Créer une carte"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Create label"
|
msgid "Create label"
|
||||||
msgstr "Créer une étiquette"
|
msgstr "Créer une étiquette"
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:148
|
#: src/views/board/components/NewListForm.tsx:152
|
||||||
msgid "Create list"
|
msgid "Create list"
|
||||||
msgstr "Créer une liste"
|
msgstr "Créer une liste"
|
||||||
|
|
||||||
@@ -377,11 +383,11 @@ msgid "Create new key"
|
|||||||
msgstr "Créer une nouvelle clé"
|
msgstr "Créer une nouvelle clé"
|
||||||
|
|
||||||
#: src/views/card/components/LabelSelector.tsx:98
|
#: src/views/card/components/LabelSelector.tsx:98
|
||||||
#: src/views/board/components/NewCardForm.tsx:327
|
#: src/views/board/components/NewCardForm.tsx:354
|
||||||
msgid "Create new label"
|
msgid "Create new label"
|
||||||
msgstr "Créer une nouvelle étiquette"
|
msgstr "Créer une nouvelle étiquette"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:335
|
#: src/views/board/index.tsx:426
|
||||||
msgid "Create new list"
|
msgid "Create new list"
|
||||||
msgstr "Créer une nouvelle liste"
|
msgstr "Créer une nouvelle liste"
|
||||||
|
|
||||||
@@ -417,6 +423,7 @@ msgstr "Sombre"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||||
#: src/components/LabelForm.tsx:226
|
#: src/components/LabelForm.tsx:226
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Supprimer"
|
msgstr "Supprimer"
|
||||||
|
|
||||||
@@ -530,7 +537,7 @@ msgstr "Édition"
|
|||||||
msgid "email"
|
msgid "email"
|
||||||
msgstr "e-mail"
|
msgstr "e-mail"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:64
|
#: src/views/members/components/InviteMemberForm.tsx:99
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr "E-mail"
|
msgstr "E-mail"
|
||||||
|
|
||||||
@@ -554,6 +561,10 @@ msgstr "Saisissez votre mot de passe"
|
|||||||
msgid "Error deleting account"
|
msgid "Error deleting account"
|
||||||
msgstr "Erreur lors de la suppression du compte"
|
msgstr "Erreur lors de la suppression du compte"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:22
|
||||||
|
msgid "Error deleting label"
|
||||||
|
msgstr "Erreur lors de la suppression de l'étiquette"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
||||||
msgid "Error deleting workspace"
|
msgid "Error deleting workspace"
|
||||||
msgstr "Erreur lors de la suppression de l'espace de travail"
|
msgstr "Erreur lors de la suppression de l'espace de travail"
|
||||||
@@ -562,6 +573,11 @@ msgstr "Erreur lors de la suppression de l'espace de travail"
|
|||||||
msgid "Error disconnecting Trello"
|
msgid "Error disconnecting Trello"
|
||||||
msgstr "Erreur lors de la déconnexion de Trello"
|
msgstr "Erreur lors de la déconnexion de Trello"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:57
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:63
|
||||||
|
msgid "Error inviting member"
|
||||||
|
msgstr "Erreur lors de l'invitation du membre"
|
||||||
|
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
||||||
msgid "Error updating display name"
|
msgid "Error updating display name"
|
||||||
msgstr "Erreur lors de la mise à jour du nom d'affichage"
|
msgstr "Erreur lors de la mise à jour du nom d'affichage"
|
||||||
@@ -644,6 +660,7 @@ msgstr "Trouvez des réponses aux questions fréquentes sur le projet. Vous ne t
|
|||||||
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
||||||
msgstr "Pour une durabilité à long terme, nous reconnaissons que tous les bons projets open source ont besoin d'une source de revenus. La nôtre provient de l'offre cloud payante pour les espaces de travail avec plusieurs utilisateurs (gratuite pendant la bêta) et pour les slugs d'espace de travail personnalisés. Il n'y a aucune obligation de l'utiliser, et vous pouvez auto-héberger le logiciel sur votre propre infrastructure gratuitement."
|
msgstr "Pour une durabilité à long terme, nous reconnaissons que tous les bons projets open source ont besoin d'une source de revenus. La nôtre provient de l'offre cloud payante pour les espaces de travail avec plusieurs utilisateurs (gratuite pendant la bêta) et pour les slugs d'espace de travail personnalisés. Il n'y a aucune obligation de l'utiliser, et vous pouvez auto-héberger le logiciel sur votre propre infrastructure gratuitement."
|
||||||
|
|
||||||
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
#: src/views/home/components/Pricing.tsx:32
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
msgid "Free"
|
msgid "Free"
|
||||||
msgstr "Gratuit"
|
msgstr "Gratuit"
|
||||||
@@ -676,7 +693,7 @@ msgstr "Commencer"
|
|||||||
msgid "Get started by creating a new board"
|
msgid "Get started by creating a new board"
|
||||||
msgstr "Commencez par créer un nouveau tableau"
|
msgstr "Commencez par créer un nouveau tableau"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:327
|
#: src/views/board/index.tsx:418
|
||||||
msgid "Get started by creating a new list"
|
msgid "Get started by creating a new list"
|
||||||
msgstr "Commencez par créer une nouvelle liste"
|
msgstr "Commencez par créer une nouvelle liste"
|
||||||
|
|
||||||
@@ -799,11 +816,19 @@ msgstr "Intégrations"
|
|||||||
msgid "Interviewing"
|
msgid "Interviewing"
|
||||||
msgstr "Entretien"
|
msgstr "Entretien"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:26
|
||||||
|
msgid "Invalid email address"
|
||||||
|
msgstr "Adresse e-mail invalide"
|
||||||
|
|
||||||
#: src/views/members/index.tsx:169
|
#: src/views/members/index.tsx:169
|
||||||
msgid "Invite"
|
msgid "Invite"
|
||||||
msgstr "Inviter"
|
msgstr "Inviter"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
#: src/views/members/components/InviteMemberForm.tsx:113
|
||||||
|
msgid "Invite another"
|
||||||
|
msgstr "Inviter un autre"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||||
#: src/views/card/components/MemberSelector.tsx:112
|
#: src/views/card/components/MemberSelector.tsx:112
|
||||||
msgid "Invite member"
|
msgid "Invite member"
|
||||||
msgstr "Inviter un membre"
|
msgstr "Inviter un membre"
|
||||||
@@ -826,7 +851,7 @@ msgid "Keep in mind that this action is irreversible."
|
|||||||
msgstr "Gardez à l'esprit que cette action est irréversible."
|
msgstr "Gardez à l'esprit que cette action est irréversible."
|
||||||
|
|
||||||
#: src/views/card/index.tsx:113
|
#: src/views/card/index.tsx:113
|
||||||
#: src/views/board/components/NewCardForm.tsx:331
|
#: src/views/board/components/NewCardForm.tsx:358
|
||||||
#: src/views/board/components/Filters.tsx:101
|
#: src/views/board/components/Filters.tsx:101
|
||||||
msgid "Labels"
|
msgid "Labels"
|
||||||
msgstr "Étiquettes"
|
msgstr "Étiquettes"
|
||||||
@@ -855,7 +880,7 @@ msgstr "Licence"
|
|||||||
msgid "Light"
|
msgid "Light"
|
||||||
msgstr "Clair"
|
msgstr "Clair"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:51
|
#: src/views/public/board/index.tsx:57
|
||||||
msgid "Link copied"
|
msgid "Link copied"
|
||||||
msgstr "Lien copié"
|
msgstr "Lien copié"
|
||||||
|
|
||||||
@@ -893,7 +918,7 @@ msgstr "Priorité moyenne"
|
|||||||
|
|
||||||
#: src/views/members/index.tsx:161
|
#: src/views/members/index.tsx:161
|
||||||
#: src/views/card/index.tsx:121
|
#: src/views/card/index.tsx:121
|
||||||
#: src/views/board/components/NewCardForm.tsx:290
|
#: src/views/board/components/NewCardForm.tsx:317
|
||||||
#: src/views/board/components/Filters.tsx:93
|
#: src/views/board/components/Filters.tsx:93
|
||||||
#: src/components/SideNavigation.tsx:73
|
#: src/components/SideNavigation.tsx:73
|
||||||
msgid "Members"
|
msgid "Members"
|
||||||
@@ -933,7 +958,7 @@ msgstr "Nouveau"
|
|||||||
msgid "New board"
|
msgid "New board"
|
||||||
msgstr "Nouveau tableau"
|
msgstr "Nouveau tableau"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:237
|
#: src/views/board/components/NewCardForm.tsx:261
|
||||||
msgid "New card"
|
msgid "New card"
|
||||||
msgstr "Nouvelle carte"
|
msgstr "Nouvelle carte"
|
||||||
|
|
||||||
@@ -945,7 +970,7 @@ msgstr "Nouvel import"
|
|||||||
msgid "New label"
|
msgid "New label"
|
||||||
msgstr "Nouvelle étiquette"
|
msgstr "Nouvelle étiquette"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:304
|
#: src/views/board/index.tsx:395
|
||||||
#: src/views/board/components/NewListForm.tsx:112
|
#: src/views/board/components/NewListForm.tsx:112
|
||||||
msgid "New list"
|
msgid "New list"
|
||||||
msgstr "Nouvelle liste"
|
msgstr "Nouvelle liste"
|
||||||
@@ -978,7 +1003,7 @@ msgstr "Aucun tableau trouvé"
|
|||||||
msgid "No credit card required"
|
msgid "No credit card required"
|
||||||
msgstr "Aucune carte de crédit requise"
|
msgstr "Aucune carte de crédit requise"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:324
|
#: src/views/board/index.tsx:415
|
||||||
msgid "No lists"
|
msgid "No lists"
|
||||||
msgstr "Aucune liste"
|
msgstr "Aucune liste"
|
||||||
|
|
||||||
@@ -1059,6 +1084,7 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
|
|||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:40
|
#: src/views/settings/components/Avatar.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:98
|
#: src/views/settings/components/Avatar.tsx:98
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:64
|
||||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||||
#: src/views/card/index.tsx:159
|
#: src/views/card/index.tsx:159
|
||||||
#: src/views/card/components/NewCommentForm.tsx:31
|
#: src/views/card/components/NewCommentForm.tsx:31
|
||||||
@@ -1074,9 +1100,10 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
|
|||||||
#: src/views/board/components/VisibilityButton.tsx:53
|
#: src/views/board/components/VisibilityButton.tsx:53
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||||
#: src/views/board/components/NewListForm.tsx:78
|
#: src/views/board/components/NewListForm.tsx:78
|
||||||
#: src/views/board/components/NewCardForm.tsx:128
|
#: src/views/board/components/NewCardForm.tsx:145
|
||||||
#: src/components/NewWorkspaceForm.tsx:41
|
#: src/components/NewWorkspaceForm.tsx:41
|
||||||
#: src/components/FeedbackModal.tsx:41
|
#: src/components/FeedbackModal.tsx:41
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:23
|
||||||
msgid "Please try again later, or contact customer support."
|
msgid "Please try again later, or contact customer support."
|
||||||
msgstr "Veuillez réessayer plus tard ou contacter le service client."
|
msgstr "Veuillez réessayer plus tard ou contacter le service client."
|
||||||
|
|
||||||
@@ -1335,9 +1362,14 @@ msgstr "Ils ne pourront plus accéder à cet espace de travail."
|
|||||||
|
|
||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:42
|
||||||
msgid "This action can't be undone."
|
msgid "This action can't be undone."
|
||||||
msgstr "Cette action ne peut pas être annulée."
|
msgstr "Cette action ne peut pas être annulée."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:140
|
||||||
|
msgid "This board is private or does not exist"
|
||||||
|
msgstr "Ce tableau est privé ou n'existe pas"
|
||||||
|
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
||||||
msgid "This board URL has already been taken"
|
msgid "This board URL has already been taken"
|
||||||
msgstr "Cette URL de tableau est déjà utilisée"
|
msgstr "Cette URL de tableau est déjà utilisée"
|
||||||
@@ -1383,7 +1415,7 @@ msgstr "Triage"
|
|||||||
msgid "Unable to add comment"
|
msgid "Unable to add comment"
|
||||||
msgstr "Impossible d'ajouter un commentaire"
|
msgstr "Impossible d'ajouter un commentaire"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:125
|
#: src/views/board/components/NewCardForm.tsx:142
|
||||||
msgid "Unable to create card"
|
msgid "Unable to create card"
|
||||||
msgstr "Impossible de créer la carte"
|
msgstr "Impossible de créer la carte"
|
||||||
|
|
||||||
@@ -1477,11 +1509,11 @@ msgstr "Listes illimitées"
|
|||||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
||||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:173
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:174
|
||||||
msgid "Update"
|
msgid "Update"
|
||||||
msgstr "Mettre à jour"
|
msgstr "Mettre à jour"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Update label"
|
msgid "Update label"
|
||||||
msgstr "Mettre à jour l'étiquette"
|
msgstr "Mettre à jour l'étiquette"
|
||||||
|
|
||||||
@@ -1526,6 +1558,10 @@ msgstr "Utiliser le modèle"
|
|||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr "Utilisateur"
|
msgstr "Utilisateur"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:58
|
||||||
|
msgid "User is already a member of this workspace"
|
||||||
|
msgstr "L'utilisateur est déjà membre de cet espace de travail"
|
||||||
|
|
||||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||||
msgid "Video"
|
msgid "Video"
|
||||||
msgstr "Vidéo"
|
msgstr "Vidéo"
|
||||||
@@ -1546,6 +1582,10 @@ msgstr "Voir la documentation"
|
|||||||
msgid "View our roadmap."
|
msgid "View our roadmap."
|
||||||
msgstr "Consultez notre feuille de route."
|
msgstr "Consultez notre feuille de route."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:143
|
||||||
|
msgid "View workspace"
|
||||||
|
msgstr "Voir l'espace de travail"
|
||||||
|
|
||||||
#: src/views/board/components/VisibilityButton.tsx:91
|
#: src/views/board/components/VisibilityButton.tsx:91
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr "Visibilité"
|
msgstr "Visibilité"
|
||||||
@@ -1578,7 +1618,7 @@ msgstr "Quand Trello a été lancé en 2011, il a impressionné tout le monde pa
|
|||||||
msgid "Why make an open source Trello?"
|
msgid "Why make an open source Trello?"
|
||||||
msgstr "Pourquoi créer un Trello open source ?"
|
msgstr "Pourquoi créer un Trello open source ?"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Workspace"
|
msgid "Workspace"
|
||||||
msgstr "Espace de travail"
|
msgstr "Espace de travail"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -28,7 +28,7 @@ msgid "{0} | {1}"
|
|||||||
msgstr "{0} | {1}"
|
msgstr "{0} | {1}"
|
||||||
|
|
||||||
#. placeholder {0}: labelPublicIds.length
|
#. placeholder {0}: labelPublicIds.length
|
||||||
#: src/views/board/components/NewCardForm.tsx:365
|
#: src/views/board/components/NewCardForm.tsx:392
|
||||||
msgid "{0} labels"
|
msgid "{0} labels"
|
||||||
msgstr "{0} etichette"
|
msgstr "{0} etichette"
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ msgstr "Aggiungi una carta"
|
|||||||
msgid "Add a comment..."
|
msgid "Add a comment..."
|
||||||
msgstr "Aggiungi un commento..."
|
msgstr "Aggiungi un commento..."
|
||||||
|
|
||||||
#: src/components/Editor.tsx:302
|
#: src/components/Editor.tsx:303
|
||||||
msgid "Add description... (type '/' to open commands)"
|
msgid "Add description... (type '/' to open commands)"
|
||||||
msgstr "Aggiungi descrizione... (digita '/' per aprire i comandi)"
|
msgstr "Aggiungi descrizione... (digita '/' per aprire i comandi)"
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ msgstr "Aggiungi descrizione... (digita '/' per aprire i comandi)"
|
|||||||
msgid "Add label"
|
msgid "Add label"
|
||||||
msgstr "Aggiungi etichetta"
|
msgstr "Aggiungi etichetta"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:50
|
#: src/views/members/components/InviteMemberForm.tsx:85
|
||||||
#: src/views/card/components/MemberSelector.tsx:130
|
#: src/views/card/components/MemberSelector.tsx:130
|
||||||
msgid "Add member"
|
msgid "Add member"
|
||||||
msgstr "Aggiungi membro"
|
msgstr "Aggiungi membro"
|
||||||
@@ -145,6 +145,10 @@ msgstr "Sei sicuro di voler eliminare questa carta?"
|
|||||||
msgid "Are you sure you want to delete this comment?"
|
msgid "Are you sure you want to delete this comment?"
|
||||||
msgstr "Sei sicuro di voler eliminare questo commento?"
|
msgstr "Sei sicuro di voler eliminare questo commento?"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:39
|
||||||
|
msgid "Are you sure you want to delete this label?"
|
||||||
|
msgstr "Sei sicuro di voler eliminare questa etichetta?"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr "Sei sicuro di voler eliminare il tuo account?"
|
msgstr "Sei sicuro di voler eliminare il tuo account?"
|
||||||
@@ -178,7 +182,7 @@ msgstr "Portale di fatturazione"
|
|||||||
msgid "Blog Post"
|
msgid "Blog Post"
|
||||||
msgstr "Post del blog"
|
msgstr "Post del blog"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Board"
|
msgid "Board"
|
||||||
msgstr "Bacheca"
|
msgstr "Bacheca"
|
||||||
|
|
||||||
@@ -190,7 +194,8 @@ msgstr "Il nome della bacheca non può superare i 100 caratteri"
|
|||||||
msgid "Board name is required"
|
msgid "Board name is required"
|
||||||
msgstr "Il nome della bacheca è obbligatorio"
|
msgstr "Il nome della bacheca è obbligatorio"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:267
|
#: src/views/public/board/index.tsx:137
|
||||||
|
#: src/views/board/index.tsx:358
|
||||||
msgid "Board not found"
|
msgid "Board not found"
|
||||||
msgstr "Bacheca non trovata"
|
msgstr "Bacheca non trovata"
|
||||||
|
|
||||||
@@ -202,7 +207,7 @@ msgstr "L'URL della bacheca può contenere solo lettere, numeri e trattini"
|
|||||||
msgid "Board URL cannot exceed 60 characters"
|
msgid "Board URL cannot exceed 60 characters"
|
||||||
msgstr "L'URL della bacheca non può superare i 60 caratteri"
|
msgstr "L'URL della bacheca non può superare i 60 caratteri"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:53
|
#: src/views/public/board/index.tsx:59
|
||||||
msgid "Board URL copied to clipboard"
|
msgid "Board URL copied to clipboard"
|
||||||
msgstr "URL della bacheca copiato negli appunti"
|
msgstr "URL della bacheca copiato negli appunti"
|
||||||
|
|
||||||
@@ -247,6 +252,7 @@ msgstr "Segnalazione bug"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||||
#: src/views/card/components/Comment.tsx:156
|
#: src/views/card/components/Comment.tsx:156
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:47
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annulla"
|
msgstr "Annulla"
|
||||||
|
|
||||||
@@ -254,7 +260,7 @@ msgstr "Annulla"
|
|||||||
msgid "Card not found"
|
msgid "Card not found"
|
||||||
msgstr "Carta non trovata"
|
msgstr "Carta non trovata"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:254
|
#: src/views/board/components/NewCardForm.tsx:278
|
||||||
msgid "Card title"
|
msgid "Card title"
|
||||||
msgstr "Titolo della carta"
|
msgstr "Titolo della carta"
|
||||||
|
|
||||||
@@ -347,7 +353,7 @@ msgid "Control who can view and edit your boards."
|
|||||||
msgstr "Controlla chi può visualizzare e modificare le tue bacheche."
|
msgstr "Controlla chi può visualizzare e modificare le tue bacheche."
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:140
|
#: src/views/board/components/NewListForm.tsx:140
|
||||||
#: src/views/board/components/NewCardForm.tsx:391
|
#: src/views/board/components/NewCardForm.tsx:418
|
||||||
#: src/components/LabelForm.tsx:212
|
#: src/components/LabelForm.tsx:212
|
||||||
msgid "Create another"
|
msgid "Create another"
|
||||||
msgstr "Crea un altro"
|
msgstr "Crea un altro"
|
||||||
@@ -356,15 +362,15 @@ msgstr "Crea un altro"
|
|||||||
msgid "Create board"
|
msgid "Create board"
|
||||||
msgstr "Crea bacheca"
|
msgstr "Crea bacheca"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:401
|
#: src/views/board/components/NewCardForm.tsx:428
|
||||||
msgid "Create card"
|
msgid "Create card"
|
||||||
msgstr "Crea carta"
|
msgstr "Crea carta"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Create label"
|
msgid "Create label"
|
||||||
msgstr "Crea etichetta"
|
msgstr "Crea etichetta"
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:148
|
#: src/views/board/components/NewListForm.tsx:152
|
||||||
msgid "Create list"
|
msgid "Create list"
|
||||||
msgstr "Crea lista"
|
msgstr "Crea lista"
|
||||||
|
|
||||||
@@ -377,11 +383,11 @@ msgid "Create new key"
|
|||||||
msgstr "Crea nuova chiave"
|
msgstr "Crea nuova chiave"
|
||||||
|
|
||||||
#: src/views/card/components/LabelSelector.tsx:98
|
#: src/views/card/components/LabelSelector.tsx:98
|
||||||
#: src/views/board/components/NewCardForm.tsx:327
|
#: src/views/board/components/NewCardForm.tsx:354
|
||||||
msgid "Create new label"
|
msgid "Create new label"
|
||||||
msgstr "Crea nuova etichetta"
|
msgstr "Crea nuova etichetta"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:335
|
#: src/views/board/index.tsx:426
|
||||||
msgid "Create new list"
|
msgid "Create new list"
|
||||||
msgstr "Crea nuova lista"
|
msgstr "Crea nuova lista"
|
||||||
|
|
||||||
@@ -417,6 +423,7 @@ msgstr "Scuro"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||||
#: src/components/LabelForm.tsx:226
|
#: src/components/LabelForm.tsx:226
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Elimina"
|
msgstr "Elimina"
|
||||||
|
|
||||||
@@ -530,7 +537,7 @@ msgstr "Modifica"
|
|||||||
msgid "email"
|
msgid "email"
|
||||||
msgstr "email"
|
msgstr "email"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:64
|
#: src/views/members/components/InviteMemberForm.tsx:99
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr "Email"
|
msgstr "Email"
|
||||||
|
|
||||||
@@ -554,6 +561,10 @@ msgstr "Inserisci la tua password"
|
|||||||
msgid "Error deleting account"
|
msgid "Error deleting account"
|
||||||
msgstr "Errore durante l'eliminazione dell'account"
|
msgstr "Errore durante l'eliminazione dell'account"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:22
|
||||||
|
msgid "Error deleting label"
|
||||||
|
msgstr "Errore durante l'eliminazione dell'etichetta"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
||||||
msgid "Error deleting workspace"
|
msgid "Error deleting workspace"
|
||||||
msgstr "Errore durante l'eliminazione dell'area di lavoro"
|
msgstr "Errore durante l'eliminazione dell'area di lavoro"
|
||||||
@@ -562,6 +573,11 @@ msgstr "Errore durante l'eliminazione dell'area di lavoro"
|
|||||||
msgid "Error disconnecting Trello"
|
msgid "Error disconnecting Trello"
|
||||||
msgstr "Errore durante la disconnessione da Trello"
|
msgstr "Errore durante la disconnessione da Trello"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:57
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:63
|
||||||
|
msgid "Error inviting member"
|
||||||
|
msgstr "Errore durante l'invito del membro"
|
||||||
|
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
||||||
msgid "Error updating display name"
|
msgid "Error updating display name"
|
||||||
msgstr "Errore durante l'aggiornamento del nome visualizzato"
|
msgstr "Errore durante l'aggiornamento del nome visualizzato"
|
||||||
@@ -644,6 +660,7 @@ msgstr "Trova risposte alle domande comuni sul progetto. Non trovi quello che st
|
|||||||
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
||||||
msgstr "Per la sostenibilità a lungo termine, riconosciamo che tutti i buoni progetti open source necessitano di una fonte di entrate. La nostra proviene dall'offerta cloud a pagamento per workspace con più utenti (gratuita durante la beta) e per slug di workspace personalizzati. Non c'è alcun obbligo di utilizzarla, e puoi ospitare autonomamente il software sulla tua infrastruttura gratuitamente."
|
msgstr "Per la sostenibilità a lungo termine, riconosciamo che tutti i buoni progetti open source necessitano di una fonte di entrate. La nostra proviene dall'offerta cloud a pagamento per workspace con più utenti (gratuita durante la beta) e per slug di workspace personalizzati. Non c'è alcun obbligo di utilizzarla, e puoi ospitare autonomamente il software sulla tua infrastruttura gratuitamente."
|
||||||
|
|
||||||
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
#: src/views/home/components/Pricing.tsx:32
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
msgid "Free"
|
msgid "Free"
|
||||||
msgstr "Gratuito"
|
msgstr "Gratuito"
|
||||||
@@ -676,7 +693,7 @@ msgstr "Inizia ora"
|
|||||||
msgid "Get started by creating a new board"
|
msgid "Get started by creating a new board"
|
||||||
msgstr "Inizia creando una nuova bacheca"
|
msgstr "Inizia creando una nuova bacheca"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:327
|
#: src/views/board/index.tsx:418
|
||||||
msgid "Get started by creating a new list"
|
msgid "Get started by creating a new list"
|
||||||
msgstr "Inizia creando una nuova lista"
|
msgstr "Inizia creando una nuova lista"
|
||||||
|
|
||||||
@@ -799,11 +816,19 @@ msgstr "Integrazioni"
|
|||||||
msgid "Interviewing"
|
msgid "Interviewing"
|
||||||
msgstr "Colloquio"
|
msgstr "Colloquio"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:26
|
||||||
|
msgid "Invalid email address"
|
||||||
|
msgstr "Indirizzo email non valido"
|
||||||
|
|
||||||
#: src/views/members/index.tsx:169
|
#: src/views/members/index.tsx:169
|
||||||
msgid "Invite"
|
msgid "Invite"
|
||||||
msgstr "Invita"
|
msgstr "Invita"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
#: src/views/members/components/InviteMemberForm.tsx:113
|
||||||
|
msgid "Invite another"
|
||||||
|
msgstr "Invita un altro"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||||
#: src/views/card/components/MemberSelector.tsx:112
|
#: src/views/card/components/MemberSelector.tsx:112
|
||||||
msgid "Invite member"
|
msgid "Invite member"
|
||||||
msgstr "Invita membro"
|
msgstr "Invita membro"
|
||||||
@@ -826,7 +851,7 @@ msgid "Keep in mind that this action is irreversible."
|
|||||||
msgstr "Tieni presente che questa azione è irreversibile."
|
msgstr "Tieni presente che questa azione è irreversibile."
|
||||||
|
|
||||||
#: src/views/card/index.tsx:113
|
#: src/views/card/index.tsx:113
|
||||||
#: src/views/board/components/NewCardForm.tsx:331
|
#: src/views/board/components/NewCardForm.tsx:358
|
||||||
#: src/views/board/components/Filters.tsx:101
|
#: src/views/board/components/Filters.tsx:101
|
||||||
msgid "Labels"
|
msgid "Labels"
|
||||||
msgstr "Etichette"
|
msgstr "Etichette"
|
||||||
@@ -855,7 +880,7 @@ msgstr "Licenza"
|
|||||||
msgid "Light"
|
msgid "Light"
|
||||||
msgstr "Chiaro"
|
msgstr "Chiaro"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:51
|
#: src/views/public/board/index.tsx:57
|
||||||
msgid "Link copied"
|
msgid "Link copied"
|
||||||
msgstr "Link copiato"
|
msgstr "Link copiato"
|
||||||
|
|
||||||
@@ -893,7 +918,7 @@ msgstr "Media priorità"
|
|||||||
|
|
||||||
#: src/views/members/index.tsx:161
|
#: src/views/members/index.tsx:161
|
||||||
#: src/views/card/index.tsx:121
|
#: src/views/card/index.tsx:121
|
||||||
#: src/views/board/components/NewCardForm.tsx:290
|
#: src/views/board/components/NewCardForm.tsx:317
|
||||||
#: src/views/board/components/Filters.tsx:93
|
#: src/views/board/components/Filters.tsx:93
|
||||||
#: src/components/SideNavigation.tsx:73
|
#: src/components/SideNavigation.tsx:73
|
||||||
msgid "Members"
|
msgid "Members"
|
||||||
@@ -933,7 +958,7 @@ msgstr "Nuovo"
|
|||||||
msgid "New board"
|
msgid "New board"
|
||||||
msgstr "Nuova bacheca"
|
msgstr "Nuova bacheca"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:237
|
#: src/views/board/components/NewCardForm.tsx:261
|
||||||
msgid "New card"
|
msgid "New card"
|
||||||
msgstr "Nuova carta"
|
msgstr "Nuova carta"
|
||||||
|
|
||||||
@@ -945,7 +970,7 @@ msgstr "Nuova importazione"
|
|||||||
msgid "New label"
|
msgid "New label"
|
||||||
msgstr "Nuova etichetta"
|
msgstr "Nuova etichetta"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:304
|
#: src/views/board/index.tsx:395
|
||||||
#: src/views/board/components/NewListForm.tsx:112
|
#: src/views/board/components/NewListForm.tsx:112
|
||||||
msgid "New list"
|
msgid "New list"
|
||||||
msgstr "Nuova lista"
|
msgstr "Nuova lista"
|
||||||
@@ -978,7 +1003,7 @@ msgstr "Nessuna bacheca trovata"
|
|||||||
msgid "No credit card required"
|
msgid "No credit card required"
|
||||||
msgstr "Nessuna carta di credito richiesta"
|
msgstr "Nessuna carta di credito richiesta"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:324
|
#: src/views/board/index.tsx:415
|
||||||
msgid "No lists"
|
msgid "No lists"
|
||||||
msgstr "Nessuna lista"
|
msgstr "Nessuna lista"
|
||||||
|
|
||||||
@@ -1059,6 +1084,7 @@ msgstr "Seleziona un file da caricare."
|
|||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:40
|
#: src/views/settings/components/Avatar.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:98
|
#: src/views/settings/components/Avatar.tsx:98
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:64
|
||||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||||
#: src/views/card/index.tsx:159
|
#: src/views/card/index.tsx:159
|
||||||
#: src/views/card/components/NewCommentForm.tsx:31
|
#: src/views/card/components/NewCommentForm.tsx:31
|
||||||
@@ -1074,9 +1100,10 @@ msgstr "Seleziona un file da caricare."
|
|||||||
#: src/views/board/components/VisibilityButton.tsx:53
|
#: src/views/board/components/VisibilityButton.tsx:53
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||||
#: src/views/board/components/NewListForm.tsx:78
|
#: src/views/board/components/NewListForm.tsx:78
|
||||||
#: src/views/board/components/NewCardForm.tsx:128
|
#: src/views/board/components/NewCardForm.tsx:145
|
||||||
#: src/components/NewWorkspaceForm.tsx:41
|
#: src/components/NewWorkspaceForm.tsx:41
|
||||||
#: src/components/FeedbackModal.tsx:41
|
#: src/components/FeedbackModal.tsx:41
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:23
|
||||||
msgid "Please try again later, or contact customer support."
|
msgid "Please try again later, or contact customer support."
|
||||||
msgstr "Riprova più tardi o contatta l'assistenza clienti."
|
msgstr "Riprova più tardi o contatta l'assistenza clienti."
|
||||||
|
|
||||||
@@ -1335,9 +1362,14 @@ msgstr "Non potranno accedere a questo spazio di lavoro."
|
|||||||
|
|
||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:42
|
||||||
msgid "This action can't be undone."
|
msgid "This action can't be undone."
|
||||||
msgstr "Questa azione non può essere annullata."
|
msgstr "Questa azione non può essere annullata."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:140
|
||||||
|
msgid "This board is private or does not exist"
|
||||||
|
msgstr "Questa bacheca è privata o non esiste"
|
||||||
|
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
||||||
msgid "This board URL has already been taken"
|
msgid "This board URL has already been taken"
|
||||||
msgstr "Questo URL della bacheca è già stato utilizzato"
|
msgstr "Questo URL della bacheca è già stato utilizzato"
|
||||||
@@ -1383,7 +1415,7 @@ msgstr "Smistamento"
|
|||||||
msgid "Unable to add comment"
|
msgid "Unable to add comment"
|
||||||
msgstr "Impossibile aggiungere il commento"
|
msgstr "Impossibile aggiungere il commento"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:125
|
#: src/views/board/components/NewCardForm.tsx:142
|
||||||
msgid "Unable to create card"
|
msgid "Unable to create card"
|
||||||
msgstr "Impossibile creare la scheda"
|
msgstr "Impossibile creare la scheda"
|
||||||
|
|
||||||
@@ -1477,11 +1509,11 @@ msgstr "Liste illimitate"
|
|||||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
||||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:173
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:174
|
||||||
msgid "Update"
|
msgid "Update"
|
||||||
msgstr "Aggiorna"
|
msgstr "Aggiorna"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Update label"
|
msgid "Update label"
|
||||||
msgstr "Aggiorna etichetta"
|
msgstr "Aggiorna etichetta"
|
||||||
|
|
||||||
@@ -1526,6 +1558,10 @@ msgstr "Usa template"
|
|||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr "Utente"
|
msgstr "Utente"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:58
|
||||||
|
msgid "User is already a member of this workspace"
|
||||||
|
msgstr "L'utente è già membro di questo spazio di lavoro"
|
||||||
|
|
||||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||||
msgid "Video"
|
msgid "Video"
|
||||||
msgstr "Video"
|
msgstr "Video"
|
||||||
@@ -1546,6 +1582,10 @@ msgstr "Visualizza documenti"
|
|||||||
msgid "View our roadmap."
|
msgid "View our roadmap."
|
||||||
msgstr "Visualizza la nostra roadmap."
|
msgstr "Visualizza la nostra roadmap."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:143
|
||||||
|
msgid "View workspace"
|
||||||
|
msgstr "Visualizza spazio di lavoro"
|
||||||
|
|
||||||
#: src/views/board/components/VisibilityButton.tsx:91
|
#: src/views/board/components/VisibilityButton.tsx:91
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr "Visibilità"
|
msgstr "Visibilità"
|
||||||
@@ -1578,7 +1618,7 @@ msgstr "Quando Trello fu lanciato nel 2011, stupì tutti con la sua semplicità
|
|||||||
msgid "Why make an open source Trello?"
|
msgid "Why make an open source Trello?"
|
||||||
msgstr "Perché creare un Trello open source?"
|
msgstr "Perché creare un Trello open source?"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Workspace"
|
msgid "Workspace"
|
||||||
msgstr "Spazio di lavoro"
|
msgstr "Spazio di lavoro"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -28,7 +28,7 @@ msgid "{0} | {1}"
|
|||||||
msgstr "{0} | {1}"
|
msgstr "{0} | {1}"
|
||||||
|
|
||||||
#. placeholder {0}: labelPublicIds.length
|
#. placeholder {0}: labelPublicIds.length
|
||||||
#: src/views/board/components/NewCardForm.tsx:365
|
#: src/views/board/components/NewCardForm.tsx:392
|
||||||
msgid "{0} labels"
|
msgid "{0} labels"
|
||||||
msgstr "{0} labels"
|
msgstr "{0} labels"
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ msgstr "Voeg een kaart toe"
|
|||||||
msgid "Add a comment..."
|
msgid "Add a comment..."
|
||||||
msgstr "Voeg een reactie toe..."
|
msgstr "Voeg een reactie toe..."
|
||||||
|
|
||||||
#: src/components/Editor.tsx:302
|
#: src/components/Editor.tsx:303
|
||||||
msgid "Add description... (type '/' to open commands)"
|
msgid "Add description... (type '/' to open commands)"
|
||||||
msgstr "Voeg beschrijving toe... (typ '/' om commando's te openen)"
|
msgstr "Voeg beschrijving toe... (typ '/' om commando's te openen)"
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ msgstr "Voeg beschrijving toe... (typ '/' om commando's te openen)"
|
|||||||
msgid "Add label"
|
msgid "Add label"
|
||||||
msgstr "Label toevoegen"
|
msgstr "Label toevoegen"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:50
|
#: src/views/members/components/InviteMemberForm.tsx:85
|
||||||
#: src/views/card/components/MemberSelector.tsx:130
|
#: src/views/card/components/MemberSelector.tsx:130
|
||||||
msgid "Add member"
|
msgid "Add member"
|
||||||
msgstr "Lid toevoegen"
|
msgstr "Lid toevoegen"
|
||||||
@@ -145,6 +145,10 @@ msgstr "Weet je zeker dat je deze kaart wilt verwijderen?"
|
|||||||
msgid "Are you sure you want to delete this comment?"
|
msgid "Are you sure you want to delete this comment?"
|
||||||
msgstr "Weet je zeker dat je deze opmerking wilt verwijderen?"
|
msgstr "Weet je zeker dat je deze opmerking wilt verwijderen?"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:39
|
||||||
|
msgid "Are you sure you want to delete this label?"
|
||||||
|
msgstr "Weet je zeker dat je dit label wilt verwijderen?"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:54
|
||||||
msgid "Are you sure you want to delete your account?"
|
msgid "Are you sure you want to delete your account?"
|
||||||
msgstr "Weet je zeker dat je je account wilt verwijderen?"
|
msgstr "Weet je zeker dat je je account wilt verwijderen?"
|
||||||
@@ -178,7 +182,7 @@ msgstr "Factureringsportaal"
|
|||||||
msgid "Blog Post"
|
msgid "Blog Post"
|
||||||
msgstr "Blogbericht"
|
msgstr "Blogbericht"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Board"
|
msgid "Board"
|
||||||
msgstr "Bord"
|
msgstr "Bord"
|
||||||
|
|
||||||
@@ -190,7 +194,8 @@ msgstr "Bordnaam mag niet langer zijn dan 100 tekens"
|
|||||||
msgid "Board name is required"
|
msgid "Board name is required"
|
||||||
msgstr "Bordnaam is verplicht"
|
msgstr "Bordnaam is verplicht"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:267
|
#: src/views/public/board/index.tsx:137
|
||||||
|
#: src/views/board/index.tsx:358
|
||||||
msgid "Board not found"
|
msgid "Board not found"
|
||||||
msgstr "Bord niet gevonden"
|
msgstr "Bord niet gevonden"
|
||||||
|
|
||||||
@@ -202,7 +207,7 @@ msgstr "Board URL kan alleen letters, cijfers en koppeltekens bevatten"
|
|||||||
msgid "Board URL cannot exceed 60 characters"
|
msgid "Board URL cannot exceed 60 characters"
|
||||||
msgstr "Board URL mag niet langer zijn dan 60 tekens"
|
msgstr "Board URL mag niet langer zijn dan 60 tekens"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:53
|
#: src/views/public/board/index.tsx:59
|
||||||
msgid "Board URL copied to clipboard"
|
msgid "Board URL copied to clipboard"
|
||||||
msgstr "Board URL gekopieerd naar klembord"
|
msgstr "Board URL gekopieerd naar klembord"
|
||||||
|
|
||||||
@@ -247,6 +252,7 @@ msgstr "Bugrapport"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
#: src/views/card/components/DeleteCardConfirmation.tsx:86
|
||||||
#: src/views/card/components/Comment.tsx:156
|
#: src/views/card/components/Comment.tsx:156
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:47
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annuleren"
|
msgstr "Annuleren"
|
||||||
|
|
||||||
@@ -254,7 +260,7 @@ msgstr "Annuleren"
|
|||||||
msgid "Card not found"
|
msgid "Card not found"
|
||||||
msgstr "Kaart niet gevonden"
|
msgstr "Kaart niet gevonden"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:254
|
#: src/views/board/components/NewCardForm.tsx:278
|
||||||
msgid "Card title"
|
msgid "Card title"
|
||||||
msgstr "Kaarttitel"
|
msgstr "Kaarttitel"
|
||||||
|
|
||||||
@@ -347,7 +353,7 @@ msgid "Control who can view and edit your boards."
|
|||||||
msgstr "Bepaal wie je borden kan bekijken en bewerken."
|
msgstr "Bepaal wie je borden kan bekijken en bewerken."
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:140
|
#: src/views/board/components/NewListForm.tsx:140
|
||||||
#: src/views/board/components/NewCardForm.tsx:391
|
#: src/views/board/components/NewCardForm.tsx:418
|
||||||
#: src/components/LabelForm.tsx:212
|
#: src/components/LabelForm.tsx:212
|
||||||
msgid "Create another"
|
msgid "Create another"
|
||||||
msgstr "Maak nog een"
|
msgstr "Maak nog een"
|
||||||
@@ -356,15 +362,15 @@ msgstr "Maak nog een"
|
|||||||
msgid "Create board"
|
msgid "Create board"
|
||||||
msgstr "Maak bord"
|
msgstr "Maak bord"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:401
|
#: src/views/board/components/NewCardForm.tsx:428
|
||||||
msgid "Create card"
|
msgid "Create card"
|
||||||
msgstr "Maak kaart"
|
msgstr "Maak kaart"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Create label"
|
msgid "Create label"
|
||||||
msgstr "Maak label"
|
msgstr "Maak label"
|
||||||
|
|
||||||
#: src/views/board/components/NewListForm.tsx:148
|
#: src/views/board/components/NewListForm.tsx:152
|
||||||
msgid "Create list"
|
msgid "Create list"
|
||||||
msgstr "Lijst maken"
|
msgstr "Lijst maken"
|
||||||
|
|
||||||
@@ -377,11 +383,11 @@ msgid "Create new key"
|
|||||||
msgstr "Nieuwe sleutel aanmaken"
|
msgstr "Nieuwe sleutel aanmaken"
|
||||||
|
|
||||||
#: src/views/card/components/LabelSelector.tsx:98
|
#: src/views/card/components/LabelSelector.tsx:98
|
||||||
#: src/views/board/components/NewCardForm.tsx:327
|
#: src/views/board/components/NewCardForm.tsx:354
|
||||||
msgid "Create new label"
|
msgid "Create new label"
|
||||||
msgstr "Maak nieuw label"
|
msgstr "Maak nieuw label"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:335
|
#: src/views/board/index.tsx:426
|
||||||
msgid "Create new list"
|
msgid "Create new list"
|
||||||
msgstr "Maak nieuwe lijst"
|
msgstr "Maak nieuwe lijst"
|
||||||
|
|
||||||
@@ -417,6 +423,7 @@ msgstr "Donker"
|
|||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
#: src/views/card/components/DeleteCardConfirmation.tsx:92
|
||||||
#: src/components/LabelForm.tsx:226
|
#: src/components/LabelForm.tsx:226
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:49
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Verwijderen"
|
msgstr "Verwijderen"
|
||||||
|
|
||||||
@@ -530,7 +537,7 @@ msgstr "Bewerken"
|
|||||||
msgid "email"
|
msgid "email"
|
||||||
msgstr "e-mail"
|
msgstr "e-mail"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:64
|
#: src/views/members/components/InviteMemberForm.tsx:99
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr "E-mail"
|
msgstr "E-mail"
|
||||||
|
|
||||||
@@ -554,6 +561,10 @@ msgstr "Voer je wachtwoord in"
|
|||||||
msgid "Error deleting account"
|
msgid "Error deleting account"
|
||||||
msgstr "Fout bij verwijderen account"
|
msgstr "Fout bij verwijderen account"
|
||||||
|
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:22
|
||||||
|
msgid "Error deleting label"
|
||||||
|
msgstr "Fout bij het verwijderen van label"
|
||||||
|
|
||||||
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
#: src/views/settings/components/DeleteWorkspaceConfirmation.tsx:45
|
||||||
msgid "Error deleting workspace"
|
msgid "Error deleting workspace"
|
||||||
msgstr "Fout bij verwijderen werkruimte"
|
msgstr "Fout bij verwijderen werkruimte"
|
||||||
@@ -562,6 +573,11 @@ msgstr "Fout bij verwijderen werkruimte"
|
|||||||
msgid "Error disconnecting Trello"
|
msgid "Error disconnecting Trello"
|
||||||
msgstr "Fout bij ontkoppelen van Trello"
|
msgstr "Fout bij ontkoppelen van Trello"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:57
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:63
|
||||||
|
msgid "Error inviting member"
|
||||||
|
msgstr "Fout bij het uitnodigen van lid"
|
||||||
|
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:54
|
||||||
msgid "Error updating display name"
|
msgid "Error updating display name"
|
||||||
msgstr "Fout bij bijwerken weergavenaam"
|
msgstr "Fout bij bijwerken weergavenaam"
|
||||||
@@ -644,6 +660,7 @@ msgstr "Vind antwoorden op veelgestelde vragen over het project. Kun je niet vin
|
|||||||
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
msgid "For long-term sustainability, we recognise all good open source projects need a source of revenue. Ours comes from the paid cloud offering for workspaces with multiple users (free during the beta) and for custom workspace slugs. There's no obligation to use it, and you can self-host the software on your own infrastructure free of charge."
|
||||||
msgstr "Voor duurzaamheid op lange termijn erkennen we dat alle goede open source projecten een inkomstenbron nodig hebben. De onze komt van de betaalde cloudoplossing voor werkruimtes met meerdere gebruikers (gratis tijdens de bèta) en voor aangepaste werkruimte-slugs. Je bent niet verplicht om hiervan gebruik te maken en je kunt de software gratis op je eigen infrastructuur hosten."
|
msgstr "Voor duurzaamheid op lange termijn erkennen we dat alle goede open source projecten een inkomstenbron nodig hebben. De onze komt van de betaalde cloudoplossing voor werkruimtes met meerdere gebruikers (gratis tijdens de bèta) en voor aangepaste werkruimte-slugs. Je bent niet verplicht om hiervan gebruik te maken en je kunt de software gratis op je eigen infrastructuur hosten."
|
||||||
|
|
||||||
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
#: src/views/home/components/Pricing.tsx:32
|
#: src/views/home/components/Pricing.tsx:32
|
||||||
msgid "Free"
|
msgid "Free"
|
||||||
msgstr "Gratis"
|
msgstr "Gratis"
|
||||||
@@ -676,7 +693,7 @@ msgstr "Aan de slag"
|
|||||||
msgid "Get started by creating a new board"
|
msgid "Get started by creating a new board"
|
||||||
msgstr "Begin door een nieuw bord te maken"
|
msgstr "Begin door een nieuw bord te maken"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:327
|
#: src/views/board/index.tsx:418
|
||||||
msgid "Get started by creating a new list"
|
msgid "Get started by creating a new list"
|
||||||
msgstr "Begin door een nieuwe lijst te maken"
|
msgstr "Begin door een nieuwe lijst te maken"
|
||||||
|
|
||||||
@@ -799,11 +816,19 @@ msgstr "Integraties"
|
|||||||
msgid "Interviewing"
|
msgid "Interviewing"
|
||||||
msgstr "Interviewen"
|
msgstr "Interviewen"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:26
|
||||||
|
msgid "Invalid email address"
|
||||||
|
msgstr "Ongeldig e-mailadres"
|
||||||
|
|
||||||
#: src/views/members/index.tsx:169
|
#: src/views/members/index.tsx:169
|
||||||
msgid "Invite"
|
msgid "Invite"
|
||||||
msgstr "Uitnodigen"
|
msgstr "Uitnodigen"
|
||||||
|
|
||||||
#: src/views/members/components/InviteMemberForm.tsx:82
|
#: src/views/members/components/InviteMemberForm.tsx:113
|
||||||
|
msgid "Invite another"
|
||||||
|
msgstr "Nog iemand uitnodigen"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:123
|
||||||
#: src/views/card/components/MemberSelector.tsx:112
|
#: src/views/card/components/MemberSelector.tsx:112
|
||||||
msgid "Invite member"
|
msgid "Invite member"
|
||||||
msgstr "Lid uitnodigen"
|
msgstr "Lid uitnodigen"
|
||||||
@@ -826,7 +851,7 @@ msgid "Keep in mind that this action is irreversible."
|
|||||||
msgstr "Houd er rekening mee dat deze actie onomkeerbaar is."
|
msgstr "Houd er rekening mee dat deze actie onomkeerbaar is."
|
||||||
|
|
||||||
#: src/views/card/index.tsx:113
|
#: src/views/card/index.tsx:113
|
||||||
#: src/views/board/components/NewCardForm.tsx:331
|
#: src/views/board/components/NewCardForm.tsx:358
|
||||||
#: src/views/board/components/Filters.tsx:101
|
#: src/views/board/components/Filters.tsx:101
|
||||||
msgid "Labels"
|
msgid "Labels"
|
||||||
msgstr "Labels"
|
msgstr "Labels"
|
||||||
@@ -855,7 +880,7 @@ msgstr "Licentie"
|
|||||||
msgid "Light"
|
msgid "Light"
|
||||||
msgstr "Licht"
|
msgstr "Licht"
|
||||||
|
|
||||||
#: src/views/public/board/index.tsx:51
|
#: src/views/public/board/index.tsx:57
|
||||||
msgid "Link copied"
|
msgid "Link copied"
|
||||||
msgstr "Link gekopieerd"
|
msgstr "Link gekopieerd"
|
||||||
|
|
||||||
@@ -893,7 +918,7 @@ msgstr "Gemiddelde prioriteit"
|
|||||||
|
|
||||||
#: src/views/members/index.tsx:161
|
#: src/views/members/index.tsx:161
|
||||||
#: src/views/card/index.tsx:121
|
#: src/views/card/index.tsx:121
|
||||||
#: src/views/board/components/NewCardForm.tsx:290
|
#: src/views/board/components/NewCardForm.tsx:317
|
||||||
#: src/views/board/components/Filters.tsx:93
|
#: src/views/board/components/Filters.tsx:93
|
||||||
#: src/components/SideNavigation.tsx:73
|
#: src/components/SideNavigation.tsx:73
|
||||||
msgid "Members"
|
msgid "Members"
|
||||||
@@ -933,7 +958,7 @@ msgstr "Nieuw"
|
|||||||
msgid "New board"
|
msgid "New board"
|
||||||
msgstr "Nieuw bord"
|
msgstr "Nieuw bord"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:237
|
#: src/views/board/components/NewCardForm.tsx:261
|
||||||
msgid "New card"
|
msgid "New card"
|
||||||
msgstr "Nieuwe kaart"
|
msgstr "Nieuwe kaart"
|
||||||
|
|
||||||
@@ -945,7 +970,7 @@ msgstr "Nieuwe import"
|
|||||||
msgid "New label"
|
msgid "New label"
|
||||||
msgstr "Nieuw label"
|
msgstr "Nieuw label"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:304
|
#: src/views/board/index.tsx:395
|
||||||
#: src/views/board/components/NewListForm.tsx:112
|
#: src/views/board/components/NewListForm.tsx:112
|
||||||
msgid "New list"
|
msgid "New list"
|
||||||
msgstr "Nieuwe lijst"
|
msgstr "Nieuwe lijst"
|
||||||
@@ -978,7 +1003,7 @@ msgstr "Geen borden gevonden"
|
|||||||
msgid "No credit card required"
|
msgid "No credit card required"
|
||||||
msgstr "Geen creditcard vereist"
|
msgstr "Geen creditcard vereist"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:324
|
#: src/views/board/index.tsx:415
|
||||||
msgid "No lists"
|
msgid "No lists"
|
||||||
msgstr "Geen lijsten"
|
msgstr "Geen lijsten"
|
||||||
|
|
||||||
@@ -1059,6 +1084,7 @@ msgstr "Selecteer een bestand om te uploaden."
|
|||||||
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
#: src/views/settings/components/DeleteAccountConfirmation.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:40
|
#: src/views/settings/components/Avatar.tsx:40
|
||||||
#: src/views/settings/components/Avatar.tsx:98
|
#: src/views/settings/components/Avatar.tsx:98
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:64
|
||||||
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
|
||||||
#: src/views/card/index.tsx:159
|
#: src/views/card/index.tsx:159
|
||||||
#: src/views/card/components/NewCommentForm.tsx:31
|
#: src/views/card/components/NewCommentForm.tsx:31
|
||||||
@@ -1074,9 +1100,10 @@ msgstr "Selecteer een bestand om te uploaden."
|
|||||||
#: src/views/board/components/VisibilityButton.tsx:53
|
#: src/views/board/components/VisibilityButton.tsx:53
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
|
||||||
#: src/views/board/components/NewListForm.tsx:78
|
#: src/views/board/components/NewListForm.tsx:78
|
||||||
#: src/views/board/components/NewCardForm.tsx:128
|
#: src/views/board/components/NewCardForm.tsx:145
|
||||||
#: src/components/NewWorkspaceForm.tsx:41
|
#: src/components/NewWorkspaceForm.tsx:41
|
||||||
#: src/components/FeedbackModal.tsx:41
|
#: src/components/FeedbackModal.tsx:41
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:23
|
||||||
msgid "Please try again later, or contact customer support."
|
msgid "Please try again later, or contact customer support."
|
||||||
msgstr "Probeer het later opnieuw of neem contact op met de klantenservice."
|
msgstr "Probeer het later opnieuw of neem contact op met de klantenservice."
|
||||||
|
|
||||||
@@ -1335,9 +1362,14 @@ msgstr "Ze zullen geen toegang meer hebben tot deze werkruimte."
|
|||||||
|
|
||||||
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
|
||||||
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
#: src/views/card/components/DeleteCardConfirmation.tsx:78
|
||||||
|
#: src/components/DeleteLabelConfirmation.tsx:42
|
||||||
msgid "This action can't be undone."
|
msgid "This action can't be undone."
|
||||||
msgstr "Deze actie kan niet ongedaan worden gemaakt."
|
msgstr "Deze actie kan niet ongedaan worden gemaakt."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:140
|
||||||
|
msgid "This board is private or does not exist"
|
||||||
|
msgstr "Dit bord is privé of bestaat niet"
|
||||||
|
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:135
|
||||||
msgid "This board URL has already been taken"
|
msgid "This board URL has already been taken"
|
||||||
msgstr "Deze board URL is al in gebruik"
|
msgstr "Deze board URL is al in gebruik"
|
||||||
@@ -1383,7 +1415,7 @@ msgstr "Triage"
|
|||||||
msgid "Unable to add comment"
|
msgid "Unable to add comment"
|
||||||
msgstr "Kan geen reactie toevoegen"
|
msgstr "Kan geen reactie toevoegen"
|
||||||
|
|
||||||
#: src/views/board/components/NewCardForm.tsx:125
|
#: src/views/board/components/NewCardForm.tsx:142
|
||||||
msgid "Unable to create card"
|
msgid "Unable to create card"
|
||||||
msgstr "Kan kaart niet aanmaken"
|
msgstr "Kan kaart niet aanmaken"
|
||||||
|
|
||||||
@@ -1477,11 +1509,11 @@ msgstr "Onbeperkt aantal lijsten"
|
|||||||
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
#: src/views/settings/components/UpdateWorkspaceNameForm.tsx:82
|
||||||
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
#: src/views/settings/components/UpdateWorkspaceDescriptionForm.tsx:90
|
||||||
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
#: src/views/settings/components/UpdateDisplayNameForm.tsx:79
|
||||||
#: src/views/board/components/UpdateBoardSlugForm.tsx:173
|
#: src/views/board/components/UpdateBoardSlugForm.tsx:174
|
||||||
msgid "Update"
|
msgid "Update"
|
||||||
msgstr "Bijwerken"
|
msgstr "Bijwerken"
|
||||||
|
|
||||||
#: src/components/LabelForm.tsx:233
|
#: src/components/LabelForm.tsx:236
|
||||||
msgid "Update label"
|
msgid "Update label"
|
||||||
msgstr "Label bijwerken"
|
msgstr "Label bijwerken"
|
||||||
|
|
||||||
@@ -1526,6 +1558,10 @@ msgstr "Sjabloon gebruiken"
|
|||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr "Gebruiker"
|
msgstr "Gebruiker"
|
||||||
|
|
||||||
|
#: src/views/members/components/InviteMemberForm.tsx:58
|
||||||
|
msgid "User is already a member of this workspace"
|
||||||
|
msgstr "Gebruiker is al lid van deze werkruimte"
|
||||||
|
|
||||||
#: src/views/boards/components/TemplateBoards.tsx:37
|
#: src/views/boards/components/TemplateBoards.tsx:37
|
||||||
msgid "Video"
|
msgid "Video"
|
||||||
msgstr "Video"
|
msgstr "Video"
|
||||||
@@ -1546,6 +1582,10 @@ msgstr "Bekijk documentatie"
|
|||||||
msgid "View our roadmap."
|
msgid "View our roadmap."
|
||||||
msgstr "Bekijk onze roadmap."
|
msgstr "Bekijk onze roadmap."
|
||||||
|
|
||||||
|
#: src/views/public/board/index.tsx:143
|
||||||
|
msgid "View workspace"
|
||||||
|
msgstr "Werkruimte bekijken"
|
||||||
|
|
||||||
#: src/views/board/components/VisibilityButton.tsx:91
|
#: src/views/board/components/VisibilityButton.tsx:91
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr "Zichtbaarheid"
|
msgstr "Zichtbaarheid"
|
||||||
@@ -1578,7 +1618,7 @@ msgstr "Toen Trello in 2011 werd gelanceerd, blies het iedereen omver met zijn z
|
|||||||
msgid "Why make an open source Trello?"
|
msgid "Why make an open source Trello?"
|
||||||
msgstr "Waarom een open source Trello maken?"
|
msgstr "Waarom een open source Trello maken?"
|
||||||
|
|
||||||
#: src/views/board/index.tsx:241
|
#: src/views/board/index.tsx:332
|
||||||
msgid "Workspace"
|
msgid "Workspace"
|
||||||
msgstr "Werkruimte"
|
msgstr "Werkruimte"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,15 @@
|
|||||||
import { createContext, useContext, useState } from "react";
|
import { createContext, useContext, useState } from "react";
|
||||||
|
|
||||||
|
interface ModalState {
|
||||||
|
contentType: string;
|
||||||
|
entityId?: string;
|
||||||
|
entityLabel?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
type ModalContextType = {
|
type ModalContextType = {
|
||||||
isOpen: boolean;
|
isOpen: boolean;
|
||||||
openModal: (
|
openModal: (
|
||||||
@@ -11,33 +21,64 @@ type ModalContextType = {
|
|||||||
modalContentType: string;
|
modalContentType: string;
|
||||||
entityId: string;
|
entityId: string;
|
||||||
entityLabel: string;
|
entityLabel: string;
|
||||||
|
modalStates: Record<string, any>;
|
||||||
|
setModalState: (modalType: string, state: any) => void;
|
||||||
|
getModalState: (modalType: string) => any;
|
||||||
|
clearModalState: (modalType: string) => void;
|
||||||
|
clearAllModalStates: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
interface Props {
|
|
||||||
children: React.ReactNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ModalContext = createContext<ModalContextType | undefined>(undefined);
|
const ModalContext = createContext<ModalContextType | undefined>(undefined);
|
||||||
|
|
||||||
export const ModalProvider: React.FC<Props> = ({ children }) => {
|
export const ModalProvider: React.FC<Props> = ({ children }) => {
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [modalStack, setModalStack] = useState<ModalState[]>([]);
|
||||||
const [entityId, setEntityId] = useState("");
|
const [modalStates, setModalStates] = useState<Record<string, any>>({});
|
||||||
const [entityLabel, setEntityLabel] = useState("");
|
|
||||||
const [modalContentType, setModalContentType] = useState("");
|
const isOpen = modalStack.length > 0;
|
||||||
|
const currentModal = modalStack[modalStack.length - 1];
|
||||||
|
const modalContentType = currentModal?.contentType || "";
|
||||||
|
const entityId = currentModal?.entityId || "";
|
||||||
|
const entityLabel = currentModal?.entityLabel || "";
|
||||||
|
|
||||||
const openModal = (
|
const openModal = (
|
||||||
contentType: string,
|
contentType: string,
|
||||||
entityId?: string,
|
entityId?: string,
|
||||||
entityLabel?: string,
|
entityLabel?: string,
|
||||||
) => {
|
) => {
|
||||||
setIsOpen(true);
|
const newModal: ModalState = { contentType, entityId, entityLabel };
|
||||||
setModalContentType(contentType);
|
setModalStack(prev => [...prev, newModal]);
|
||||||
if (entityId) setEntityId(entityId);
|
|
||||||
if (entityLabel) setEntityLabel(entityLabel);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const closeModal = () => {
|
const closeModal = () => {
|
||||||
setIsOpen(false);
|
setModalStack(prev => {
|
||||||
|
if (prev.length <= 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return prev.slice(0, -1);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const setModalState = (modalType: string, state: any) => {
|
||||||
|
setModalStates(prev => ({
|
||||||
|
...prev,
|
||||||
|
[modalType]: state
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
const getModalState = (modalType: string) => {
|
||||||
|
return modalStates[modalType];
|
||||||
|
};
|
||||||
|
|
||||||
|
const clearModalState = (modalType: string) => {
|
||||||
|
setModalStates(prev => {
|
||||||
|
const newStates = { ...prev };
|
||||||
|
delete newStates[modalType];
|
||||||
|
return newStates;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const clearAllModalStates = () => {
|
||||||
|
setModalStates({});
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -49,6 +90,11 @@ export const ModalProvider: React.FC<Props> = ({ children }) => {
|
|||||||
modalContentType,
|
modalContentType,
|
||||||
entityId,
|
entityId,
|
||||||
entityLabel,
|
entityLabel,
|
||||||
|
modalStates,
|
||||||
|
setModalState,
|
||||||
|
getModalState,
|
||||||
|
clearModalState,
|
||||||
|
clearAllModalStates,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import Editor from "~/components/Editor";
|
|||||||
import Input from "~/components/Input";
|
import Input from "~/components/Input";
|
||||||
import LabelIcon from "~/components/LabelIcon";
|
import LabelIcon from "~/components/LabelIcon";
|
||||||
import Toggle from "~/components/Toggle";
|
import Toggle from "~/components/Toggle";
|
||||||
|
import { useModalFormState } from "~/hooks/useModalFormState";
|
||||||
import { useModal } from "~/providers/modal";
|
import { useModal } from "~/providers/modal";
|
||||||
import { usePopup } from "~/providers/popup";
|
import { usePopup } from "~/providers/popup";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
@@ -49,17 +50,24 @@ export function NewCardForm({
|
|||||||
|
|
||||||
const utils = api.useUtils();
|
const utils = api.useUtils();
|
||||||
|
|
||||||
|
// persists the form values
|
||||||
|
const { formState, saveFormState } = useModalFormState<NewCardFormInput>({
|
||||||
|
modalType: "NEW_CARD",
|
||||||
|
initialValues: {
|
||||||
|
title: "",
|
||||||
|
description: "",
|
||||||
|
listPublicId,
|
||||||
|
labelPublicIds: [],
|
||||||
|
memberPublicIds: [],
|
||||||
|
isCreateAnotherEnabled: false,
|
||||||
|
position: "start",
|
||||||
|
},
|
||||||
|
resetOnClose: true,
|
||||||
|
});
|
||||||
|
|
||||||
const { register, handleSubmit, reset, setValue, watch } =
|
const { register, handleSubmit, reset, setValue, watch } =
|
||||||
useForm<NewCardFormInput>({
|
useForm<NewCardFormInput>({
|
||||||
defaultValues: {
|
values: formState,
|
||||||
title: "",
|
|
||||||
description: "",
|
|
||||||
listPublicId,
|
|
||||||
labelPublicIds: [],
|
|
||||||
memberPublicIds: [],
|
|
||||||
isCreateAnotherEnabled: false,
|
|
||||||
position: "start",
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const labelPublicIds = watch("labelPublicIds") || [];
|
const labelPublicIds = watch("labelPublicIds") || [];
|
||||||
@@ -67,6 +75,15 @@ export function NewCardForm({
|
|||||||
const isCreateAnotherEnabled = watch("isCreateAnotherEnabled");
|
const isCreateAnotherEnabled = watch("isCreateAnotherEnabled");
|
||||||
const position = watch("position");
|
const position = watch("position");
|
||||||
const title = watch("title");
|
const title = watch("title");
|
||||||
|
const description = watch("description");
|
||||||
|
|
||||||
|
// saving form state whenever form values change
|
||||||
|
useEffect(() => {
|
||||||
|
const subscription = watch((data) => {
|
||||||
|
saveFormState(data as NewCardFormInput);
|
||||||
|
});
|
||||||
|
return () => subscription.unsubscribe();
|
||||||
|
}, [watch, saveFormState]);
|
||||||
|
|
||||||
const { data: boardData } = api.board.byId.useQuery(queryParams, {
|
const { data: boardData } = api.board.byId.useQuery(queryParams, {
|
||||||
enabled: !!boardPublicId,
|
enabled: !!boardPublicId,
|
||||||
@@ -131,17 +148,24 @@ export function NewCardForm({
|
|||||||
},
|
},
|
||||||
onSuccess: async () => {
|
onSuccess: async () => {
|
||||||
const isCreateAnotherEnabled = watch("isCreateAnotherEnabled");
|
const isCreateAnotherEnabled = watch("isCreateAnotherEnabled");
|
||||||
if (!isCreateAnotherEnabled) closeModal();
|
if (!isCreateAnotherEnabled) {
|
||||||
|
// close modal (state will auto-clear due to resetOnClose: true)
|
||||||
|
closeModal();
|
||||||
|
} else {
|
||||||
|
// reset form for creating another card
|
||||||
|
const newFormState = {
|
||||||
|
title: "",
|
||||||
|
description: "",
|
||||||
|
listPublicId: watch("listPublicId"),
|
||||||
|
labelPublicIds: [],
|
||||||
|
memberPublicIds: [],
|
||||||
|
isCreateAnotherEnabled,
|
||||||
|
position,
|
||||||
|
};
|
||||||
|
reset(newFormState);
|
||||||
|
saveFormState(newFormState);
|
||||||
|
}
|
||||||
await utils.board.byId.invalidate(queryParams);
|
await utils.board.byId.invalidate(queryParams);
|
||||||
reset({
|
|
||||||
title: "",
|
|
||||||
description: "",
|
|
||||||
listPublicId: watch("listPublicId"),
|
|
||||||
labelPublicIds: [],
|
|
||||||
memberPublicIds: [],
|
|
||||||
isCreateAnotherEnabled,
|
|
||||||
position,
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -264,8 +288,11 @@ export function NewCardForm({
|
|||||||
<div className="mt-2">
|
<div className="mt-2">
|
||||||
<div className="block max-h-48 min-h-24 w-full overflow-y-auto rounded-md border-0 bg-dark-300 bg-white/5 px-3 py-2 text-sm shadow-sm ring-1 ring-inset ring-light-600 focus-within:ring-2 focus-within:ring-inset focus-within:ring-light-700 dark:ring-dark-700 dark:focus-within:ring-dark-700 sm:leading-6">
|
<div className="block max-h-48 min-h-24 w-full overflow-y-auto rounded-md border-0 bg-dark-300 bg-white/5 px-3 py-2 text-sm shadow-sm ring-1 ring-inset ring-light-600 focus-within:ring-2 focus-within:ring-inset focus-within:ring-light-700 dark:ring-dark-700 dark:focus-within:ring-dark-700 sm:leading-6">
|
||||||
<Editor
|
<Editor
|
||||||
content=""
|
content={description}
|
||||||
onChange={(value) => setValue("description", value)}
|
onChange={(value) => {
|
||||||
|
setValue("description", value);
|
||||||
|
saveFormState({ ...formState, description: value });
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -145,7 +145,12 @@ export function NewListForm({
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<Button type="submit">{t`Create list`}</Button>
|
<Button
|
||||||
|
type="submit"
|
||||||
|
disabled={createList.isPending || !watch("name")}
|
||||||
|
>
|
||||||
|
{t`Create list`}
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export default function BoardPage() {
|
|||||||
const utils = api.useUtils();
|
const utils = api.useUtils();
|
||||||
const { showPopup } = usePopup();
|
const { showPopup } = usePopup();
|
||||||
const { workspace } = useWorkspace();
|
const { workspace } = useWorkspace();
|
||||||
const { openModal, modalContentType, entityId } = useModal();
|
const { openModal, modalContentType, entityId, isOpen } = useModal();
|
||||||
const [selectedPublicListId, setSelectedPublicListId] =
|
const [selectedPublicListId, setSelectedPublicListId] =
|
||||||
useState<PublicListId>("");
|
useState<PublicListId>("");
|
||||||
const [isInitialLoading, setIsInitialLoading] = useState(true);
|
const [isInitialLoading, setIsInitialLoading] = useState(true);
|
||||||
@@ -235,6 +235,97 @@ export default function BoardPage() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const renderModalContent = () => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Modal
|
||||||
|
modalSize="sm"
|
||||||
|
isVisible={isOpen && modalContentType === "DELETE_BOARD"}
|
||||||
|
>
|
||||||
|
<DeleteBoardConfirmation boardPublicId={boardId ?? ""} />
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<Modal
|
||||||
|
modalSize="sm"
|
||||||
|
isVisible={isOpen && modalContentType === "DELETE_LIST"}
|
||||||
|
>
|
||||||
|
<DeleteListConfirmation
|
||||||
|
listPublicId={selectedPublicListId}
|
||||||
|
queryParams={queryParams}
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<Modal
|
||||||
|
modalSize="md"
|
||||||
|
isVisible={isOpen && modalContentType === "NEW_CARD"}
|
||||||
|
>
|
||||||
|
<NewCardForm
|
||||||
|
boardPublicId={boardId ?? ""}
|
||||||
|
listPublicId={selectedPublicListId}
|
||||||
|
queryParams={queryParams}
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<Modal
|
||||||
|
modalSize="sm"
|
||||||
|
isVisible={isOpen && modalContentType === "NEW_LIST"}
|
||||||
|
>
|
||||||
|
<NewListForm
|
||||||
|
boardPublicId={boardId ?? ""}
|
||||||
|
queryParams={queryParams}
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<Modal
|
||||||
|
modalSize="sm"
|
||||||
|
isVisible={isOpen && modalContentType === "NEW_WORKSPACE"}
|
||||||
|
>
|
||||||
|
<NewWorkspaceForm />
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<Modal
|
||||||
|
modalSize="sm"
|
||||||
|
isVisible={isOpen && modalContentType === "NEW_LABEL"}
|
||||||
|
>
|
||||||
|
<LabelForm boardPublicId={boardId ?? ""} refetch={refetchBoard} />
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<Modal
|
||||||
|
modalSize="sm"
|
||||||
|
isVisible={isOpen && modalContentType === "EDIT_LABEL"}
|
||||||
|
>
|
||||||
|
<LabelForm
|
||||||
|
boardPublicId={boardId ?? ""}
|
||||||
|
refetch={refetchBoard}
|
||||||
|
isEdit
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<Modal
|
||||||
|
modalSize="sm"
|
||||||
|
isVisible={isOpen && modalContentType === "DELETE_LABEL"}
|
||||||
|
>
|
||||||
|
<DeleteLabelConfirmation
|
||||||
|
refetch={refetchBoard}
|
||||||
|
labelPublicId={entityId}
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<Modal
|
||||||
|
modalSize="sm"
|
||||||
|
isVisible={isOpen && modalContentType === "UPDATE_BOARD_SLUG"}
|
||||||
|
>
|
||||||
|
<UpdateBoardSlugForm
|
||||||
|
boardPublicId={boardId ?? ""}
|
||||||
|
workspaceSlug={workspace.slug ?? ""}
|
||||||
|
boardSlug={boardData?.slug ?? ""}
|
||||||
|
queryParams={queryParams}
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<PageHead
|
<PageHead
|
||||||
@@ -422,63 +513,7 @@ export default function BoardPage() {
|
|||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
<Modal
|
{renderModalContent()}
|
||||||
modalSize={
|
|
||||||
modalContentType === "NEW_CARD" ||
|
|
||||||
modalContentType === "NEW_FEEDBACK"
|
|
||||||
? "md"
|
|
||||||
: "sm"
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{modalContentType === "NEW_FEEDBACK" && <FeedbackModal />}
|
|
||||||
{modalContentType === "DELETE_BOARD" && (
|
|
||||||
<DeleteBoardConfirmation boardPublicId={boardId ?? ""} />
|
|
||||||
)}
|
|
||||||
{modalContentType === "DELETE_LIST" && (
|
|
||||||
<DeleteListConfirmation
|
|
||||||
listPublicId={selectedPublicListId}
|
|
||||||
queryParams={queryParams}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{modalContentType === "NEW_CARD" && (
|
|
||||||
<NewCardForm
|
|
||||||
boardPublicId={boardId ?? ""}
|
|
||||||
listPublicId={selectedPublicListId}
|
|
||||||
queryParams={queryParams}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{modalContentType === "NEW_LIST" && (
|
|
||||||
<NewListForm
|
|
||||||
boardPublicId={boardId ?? ""}
|
|
||||||
queryParams={queryParams}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{modalContentType === "NEW_WORKSPACE" && <NewWorkspaceForm />}
|
|
||||||
{modalContentType === "NEW_LABEL" && (
|
|
||||||
<LabelForm boardPublicId={boardId ?? ""} refetch={refetchBoard} />
|
|
||||||
)}
|
|
||||||
{modalContentType === "EDIT_LABEL" && (
|
|
||||||
<LabelForm
|
|
||||||
boardPublicId={boardId ?? ""}
|
|
||||||
refetch={refetchBoard}
|
|
||||||
isEdit
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{modalContentType === "DELETE_LABEL" && (
|
|
||||||
<DeleteLabelConfirmation
|
|
||||||
refetch={refetchBoard}
|
|
||||||
labelPublicId={entityId}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{modalContentType === "UPDATE_BOARD_SLUG" && (
|
|
||||||
<UpdateBoardSlugForm
|
|
||||||
boardPublicId={boardId ?? ""}
|
|
||||||
workspaceSlug={workspace.slug ?? ""}
|
|
||||||
boardSlug={boardData?.slug ?? ""}
|
|
||||||
queryParams={queryParams}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Modal>
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,26 +1,43 @@
|
|||||||
|
import { zodResolver } from "@hookform/resolvers/zod";
|
||||||
import { t } from "@lingui/core/macro";
|
import { t } from "@lingui/core/macro";
|
||||||
import { useEffect } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { useForm } from "react-hook-form";
|
import { useForm } from "react-hook-form";
|
||||||
import { HiXMark } from "react-icons/hi2";
|
import { HiXMark } from "react-icons/hi2";
|
||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
import type { InviteMemberInput } from "@kan/api/types";
|
import type { InviteMemberInput } from "@kan/api/types";
|
||||||
|
|
||||||
import Button from "~/components/Button";
|
import Button from "~/components/Button";
|
||||||
import Input from "~/components/Input";
|
import Input from "~/components/Input";
|
||||||
|
import Toggle from "~/components/Toggle";
|
||||||
import { useModal } from "~/providers/modal";
|
import { useModal } from "~/providers/modal";
|
||||||
|
import { usePopup } from "~/providers/popup";
|
||||||
import { useWorkspace } from "~/providers/workspace";
|
import { useWorkspace } from "~/providers/workspace";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
export function InviteMemberForm() {
|
export function InviteMemberForm() {
|
||||||
const utils = api.useUtils();
|
const utils = api.useUtils();
|
||||||
|
const [isCreateAnotherEnabled, setIsCreateAnotherEnabled] = useState(false);
|
||||||
const { closeModal } = useModal();
|
const { closeModal } = useModal();
|
||||||
const { workspace } = useWorkspace();
|
const { workspace } = useWorkspace();
|
||||||
|
const { showPopup } = usePopup();
|
||||||
|
|
||||||
const { register, handleSubmit } = useForm<InviteMemberInput>({
|
const InviteMemberSchema = z.object({
|
||||||
|
email: z.string().email({ message: t`Invalid email address` }),
|
||||||
|
workspacePublicId: z.string(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const {
|
||||||
|
register,
|
||||||
|
handleSubmit,
|
||||||
|
reset,
|
||||||
|
formState: { errors },
|
||||||
|
} = useForm<InviteMemberInput>({
|
||||||
defaultValues: {
|
defaultValues: {
|
||||||
email: "",
|
email: "",
|
||||||
workspacePublicId: workspace.publicId || "",
|
workspacePublicId: workspace.publicId || "",
|
||||||
},
|
},
|
||||||
|
resolver: zodResolver(InviteMemberSchema),
|
||||||
});
|
});
|
||||||
|
|
||||||
const refetchBoards = () => utils.board.all.refetch();
|
const refetchBoards = () => utils.board.all.refetch();
|
||||||
@@ -31,6 +48,24 @@ export function InviteMemberForm() {
|
|||||||
await utils.workspace.byId.refetch();
|
await utils.workspace.byId.refetch();
|
||||||
await refetchBoards();
|
await refetchBoards();
|
||||||
},
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
reset();
|
||||||
|
if (!isCreateAnotherEnabled) closeModal();
|
||||||
|
|
||||||
|
if (error.data?.code === "CONFLICT") {
|
||||||
|
showPopup({
|
||||||
|
header: t`Error inviting member`,
|
||||||
|
message: t`User is already a member of this workspace`,
|
||||||
|
icon: "error",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
showPopup({
|
||||||
|
header: t`Error inviting member`,
|
||||||
|
message: t`Please try again later, or contact customer support.`,
|
||||||
|
icon: "error",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const onSubmit = (data: InviteMemberInput) => {
|
const onSubmit = (data: InviteMemberInput) => {
|
||||||
@@ -69,10 +104,16 @@ export function InviteMemberForm() {
|
|||||||
await handleSubmit(onSubmit)();
|
await handleSubmit(onSubmit)();
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
errorMessage={errors.email?.message}
|
||||||
/>
|
/>
|
||||||
</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="mt-12 flex items-center justify-end border-t border-light-600 px-5 pb-5 pt-5 dark:border-dark-600">
|
||||||
|
<Toggle
|
||||||
|
label={t`Invite another`}
|
||||||
|
isChecked={isCreateAnotherEnabled}
|
||||||
|
onChange={() => setIsCreateAnotherEnabled(!isCreateAnotherEnabled)}
|
||||||
|
/>
|
||||||
<div>
|
<div>
|
||||||
<Button
|
<Button
|
||||||
type="submit"
|
type="submit"
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ export default function MembersPage() {
|
|||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
className={twMerge(
|
className={twMerge(
|
||||||
"w-auto min-w-[120px] sm:w-[35%] sm:min-w-[150px]",
|
"w-auto min-w-[120px] overflow-visible sm:w-[35%] sm:min-w-[150px]",
|
||||||
isLastRow && "rounded-br-lg",
|
isLastRow && "rounded-br-lg",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
@@ -121,7 +121,7 @@ export default function MembersPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className={twMerge(
|
className={twMerge(
|
||||||
"relative",
|
"relative z-50",
|
||||||
(workspace.role !== "admin" || showSkeleton) && "hidden",
|
(workspace.role !== "admin" || showSkeleton) && "hidden",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
@@ -172,10 +172,10 @@ export default function MembersPage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="mt-8 flow-root">
|
<div className="mt-8 flow-root">
|
||||||
<div className="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
|
<div className="-mx-4 -my-2 sm:-mx-6 lg:-mx-8">
|
||||||
<div className="inline-block min-w-full px-4 py-2 align-middle sm:px-6 lg:px-8">
|
<div className="inline-block min-w-full overflow-x-auto px-4 py-2 pb-16 align-middle sm:px-6 lg:px-8">
|
||||||
<div className="h-full shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg">
|
<div className="h-full shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg">
|
||||||
<table className="min-w-full divide-y divide-light-600 dark:divide-dark-600">
|
<table className="min-w-full divide-y divide-light-600 overflow-visible dark:divide-dark-600">
|
||||||
<thead className="rounded-t-lg bg-light-300 dark:bg-dark-200">
|
<thead className="rounded-t-lg bg-light-300 dark:bg-dark-200">
|
||||||
<tr>
|
<tr>
|
||||||
<th
|
<th
|
||||||
@@ -192,7 +192,7 @@ export default function MembersPage() {
|
|||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody className="divide-y divide-light-600 bg-light-50 dark:divide-dark-600 dark:bg-dark-100">
|
<tbody className="divide-y divide-light-600 overflow-visible bg-light-50 dark:divide-dark-600 dark:bg-dark-100">
|
||||||
{!isLoading &&
|
{!isLoading &&
|
||||||
data?.members.map((member, index) => (
|
data?.members.map((member, index) => (
|
||||||
<TableRow
|
<TableRow
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ import { useRouter } from "next/router";
|
|||||||
import { t } from "@lingui/core/macro";
|
import { t } from "@lingui/core/macro";
|
||||||
import { keepPreviousData } from "@tanstack/react-query";
|
import { keepPreviousData } from "@tanstack/react-query";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { HiLink } from "react-icons/hi2";
|
import { HiLink, HiOutlineLockClosed } from "react-icons/hi2";
|
||||||
|
|
||||||
|
import Button from "~/components/Button";
|
||||||
import Modal from "~/components/modal";
|
import Modal from "~/components/modal";
|
||||||
import { PageHead } from "~/components/PageHead";
|
import { PageHead } from "~/components/PageHead";
|
||||||
import PatternedBackground from "~/components/PatternedBackground";
|
import PatternedBackground from "~/components/PatternedBackground";
|
||||||
@@ -28,9 +29,14 @@ export default function PublicBoardView() {
|
|||||||
? router.query.boardSlug[0]
|
? router.query.boardSlug[0]
|
||||||
: router.query.boardSlug;
|
: router.query.boardSlug;
|
||||||
|
|
||||||
|
const workspaceSlug = Array.isArray(router.query.workspaceSlug)
|
||||||
|
? router.query.workspaceSlug[0]
|
||||||
|
: router.query.workspaceSlug;
|
||||||
|
|
||||||
const { data, isLoading } = api.board.bySlug.useQuery(
|
const { data, isLoading } = api.board.bySlug.useQuery(
|
||||||
{
|
{
|
||||||
boardSlug: boardSlug ?? "",
|
boardSlug: boardSlug ?? "",
|
||||||
|
workspaceSlug: workspaceSlug ?? "",
|
||||||
members: formatToArray(router.query.members),
|
members: formatToArray(router.query.members),
|
||||||
labels: formatToArray(router.query.labels),
|
labels: formatToArray(router.query.labels),
|
||||||
},
|
},
|
||||||
@@ -116,17 +122,30 @@ export default function PublicBoardView() {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="scrollbar-w-none scrollbar-track-rounded-[4px] scrollbar-thumb-rounded-[4px] scrollbar-h-[8px] relative flex-1 overflow-y-hidden overflow-x-scroll overscroll-contain scrollbar scrollbar-track-light-200 scrollbar-thumb-light-400 dark:scrollbar-track-dark-100 dark:scrollbar-thumb-dark-300">
|
<div className="scrollbar-w-none scrollbar-track-rounded-[4px] scrollbar-thumb-rounded-[4px] scrollbar-h-[8px] relative h-full flex-1 overflow-y-hidden overflow-x-scroll overscroll-contain scrollbar scrollbar-track-light-200 scrollbar-thumb-light-400 dark:scrollbar-track-dark-100 dark:scrollbar-thumb-dark-300">
|
||||||
{isLoading ? (
|
{isLoading ? (
|
||||||
<div className="ml-[2rem] flex">
|
<div className="ml-[2rem] flex">
|
||||||
<div className="0 mr-5 h-[500px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" />
|
<div className="0 mr-5 h-[500px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" />
|
||||||
<div className="0 mr-5 h-[275px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" />
|
<div className="0 mr-5 h-[275px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" />
|
||||||
<div className="0 mr-5 h-[375px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" />
|
<div className="0 mr-5 h-[375px] w-[18rem] animate-pulse rounded-md bg-light-200 dark:bg-dark-100" />
|
||||||
</div>
|
</div>
|
||||||
|
) : !data ? (
|
||||||
|
<div className="z-10 flex h-full w-full flex-col items-center justify-center space-y-8 pb-[150px]">
|
||||||
|
<div className="flex flex-col items-center">
|
||||||
|
<HiOutlineLockClosed className="h-10 w-10 text-light-800 dark:text-dark-800" />
|
||||||
|
<p className="mb-2 mt-4 text-[14px] font-bold text-light-1000 dark:text-dark-950">
|
||||||
|
{t`Board not found`}
|
||||||
|
</p>
|
||||||
|
<p className="text-[14px] text-light-900 dark:text-dark-900">
|
||||||
|
{t`This board is private or does not exist`}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<Button href={`/${workspaceSlug}`}>{t`View workspace`}</Button>
|
||||||
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div className="flex">
|
<div className="flex">
|
||||||
<div className="min-w-[2rem]" />
|
<div className="min-w-[2rem]" />
|
||||||
{data?.lists.map((list) => (
|
{data.lists.map((list) => (
|
||||||
<div
|
<div
|
||||||
key={list.publicId}
|
key={list.publicId}
|
||||||
className="dark-text-dark-1000 mr-5 h-fit min-w-[18rem] max-w-[18rem] rounded-md border border-light-400 bg-light-300 py-2 pl-2 pr-1 text-neutral-900 dark:border-dark-300 dark:bg-dark-100"
|
className="dark-text-dark-1000 mr-5 h-fit min-w-[18rem] max-w-[18rem] rounded-md border border-light-400 bg-light-300 py-2 pl-2 pr-1 text-neutral-900 dark:border-dark-300 dark:bg-dark-100"
|
||||||
|
|||||||
@@ -23,13 +23,15 @@ services:
|
|||||||
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
|
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
|
||||||
- STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}
|
- STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}
|
||||||
|
|
||||||
# SMTP
|
# Email
|
||||||
- SMTP_HOST=${SMTP_HOST}
|
- SMTP_HOST=${SMTP_HOST}
|
||||||
- SMTP_PORT=${SMTP_PORT}
|
- SMTP_PORT=${SMTP_PORT}
|
||||||
- SMTP_USER=${SMTP_USER}
|
- SMTP_USER=${SMTP_USER}
|
||||||
- SMTP_PASSWORD=${SMTP_PASSWORD}
|
- SMTP_PASSWORD=${SMTP_PASSWORD}
|
||||||
- SMTP_SECURE=${SMTP_SECURE}
|
- SMTP_SECURE=${SMTP_SECURE}
|
||||||
- EMAIL_FROM=${EMAIL_FROM}
|
- EMAIL_FROM=${EMAIL_FROM}
|
||||||
|
- PLUNK_API_KEY=${PLUNK_API_KEY}
|
||||||
|
- PLUNK_API_URL=${PLUNK_API_URL}
|
||||||
|
|
||||||
# S3 storage
|
# S3 storage
|
||||||
- S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID}
|
- S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID}
|
||||||
|
|||||||
@@ -111,15 +111,21 @@ export const boardRouter = createTRPCRouter({
|
|||||||
.meta({
|
.meta({
|
||||||
openapi: {
|
openapi: {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
path: "/board/{boardSlug}",
|
path: "/workspaces/{workspaceSlug}/boards/{boardSlug}",
|
||||||
summary: "Get board by slug",
|
summary: "Get board by slug",
|
||||||
description: "Retrieves a board by its slug",
|
description:
|
||||||
|
"Retrieves a board by its slug within a specific workspace",
|
||||||
tags: ["Boards"],
|
tags: ["Boards"],
|
||||||
protect: false,
|
protect: false,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
|
workspaceSlug: z
|
||||||
|
.string()
|
||||||
|
.min(3)
|
||||||
|
.max(24)
|
||||||
|
.regex(/^(?![-]+$)[a-zA-Z0-9-]+$/),
|
||||||
boardSlug: z
|
boardSlug: z
|
||||||
.string()
|
.string()
|
||||||
.min(3)
|
.min(3)
|
||||||
@@ -131,10 +137,26 @@ export const boardRouter = createTRPCRouter({
|
|||||||
)
|
)
|
||||||
.output(z.custom<Awaited<ReturnType<typeof boardRepo.getBySlug>>>())
|
.output(z.custom<Awaited<ReturnType<typeof boardRepo.getBySlug>>>())
|
||||||
.query(async ({ ctx, input }) => {
|
.query(async ({ ctx, input }) => {
|
||||||
const result = await boardRepo.getBySlug(ctx.db, input.boardSlug, {
|
const workspace = await workspaceRepo.getBySlugWithBoards(
|
||||||
members: input.members ?? [],
|
ctx.db,
|
||||||
labels: input.labels ?? [],
|
input.workspaceSlug,
|
||||||
});
|
);
|
||||||
|
|
||||||
|
if (!workspace)
|
||||||
|
throw new TRPCError({
|
||||||
|
message: `Workspace with slug ${input.workspaceSlug} not found`,
|
||||||
|
code: "NOT_FOUND",
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await boardRepo.getBySlug(
|
||||||
|
ctx.db,
|
||||||
|
input.boardSlug,
|
||||||
|
workspace.id,
|
||||||
|
{
|
||||||
|
members: input.members ?? [],
|
||||||
|
labels: input.labels ?? [],
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export const memberRouter = createTRPCRouter({
|
|||||||
if (isInvitedEmailAlreadyMember) {
|
if (isInvitedEmailAlreadyMember) {
|
||||||
throw new TRPCError({
|
throw new TRPCError({
|
||||||
message: `User with email ${input.email} is already a member of this workspace`,
|
message: `User with email ${input.email} is already a member of this workspace`,
|
||||||
code: "BAD_REQUEST",
|
code: "CONFLICT",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,6 +88,12 @@ export const memberRouter = createTRPCRouter({
|
|||||||
callbackURL: `/boards?type=invite&memberPublicId=${invite.publicId}`,
|
callbackURL: `/boards?type=invite&memberPublicId=${invite.publicId}`,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await memberRepo.softDelete(ctx.db, {
|
||||||
|
memberId: invite.id,
|
||||||
|
deletedAt: new Date(),
|
||||||
|
deletedBy: userId,
|
||||||
|
});
|
||||||
|
|
||||||
throw new TRPCError({
|
throw new TRPCError({
|
||||||
message: `Failed to send magic link invitation to user with email ${input.email}.`,
|
message: `Failed to send magic link invitation to user with email ${input.email}.`,
|
||||||
code: "INTERNAL_SERVER_ERROR",
|
code: "INTERNAL_SERVER_ERROR",
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import type { dbClient } from "@kan/db/client";
|
|||||||
import * as memberRepo from "@kan/db/repository/member.repo";
|
import * as memberRepo from "@kan/db/repository/member.repo";
|
||||||
import * as userRepo from "@kan/db/repository/user.repo";
|
import * as userRepo from "@kan/db/repository/user.repo";
|
||||||
import * as schema from "@kan/db/schema";
|
import * as schema from "@kan/db/schema";
|
||||||
import { sendEmail } from "@kan/email";
|
import { cloudMailerClient, sendEmail } from "@kan/email";
|
||||||
import { createStripeClient } from "@kan/stripe";
|
import { createStripeClient } from "@kan/stripe";
|
||||||
|
|
||||||
export const configuredProviders = socialProviderList.reduce<
|
export const configuredProviders = socialProviderList.reduce<
|
||||||
@@ -183,6 +183,17 @@ export const initAuth = (db: dbClient) => {
|
|||||||
return Promise.resolve(true);
|
return Promise.resolve(true);
|
||||||
},
|
},
|
||||||
async after(user) {
|
async after(user) {
|
||||||
|
if (cloudMailerClient) {
|
||||||
|
await cloudMailerClient.events.track({
|
||||||
|
event: "user-signup",
|
||||||
|
email: user.email,
|
||||||
|
data: {
|
||||||
|
name: user.name,
|
||||||
|
userId: user.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
user.image &&
|
user.image &&
|
||||||
!user.image.includes(process.env.NEXT_PUBLIC_STORAGE_DOMAIN!)
|
!user.image.includes(process.env.NEXT_PUBLIC_STORAGE_DOMAIN!)
|
||||||
|
|||||||
@@ -201,6 +201,7 @@ export const getByPublicId = async (
|
|||||||
export const getBySlug = async (
|
export const getBySlug = async (
|
||||||
db: dbClient,
|
db: dbClient,
|
||||||
boardSlug: string,
|
boardSlug: string,
|
||||||
|
workspaceId: number,
|
||||||
filters: {
|
filters: {
|
||||||
members: string[];
|
members: string[];
|
||||||
labels: string[];
|
labels: string[];
|
||||||
@@ -293,6 +294,7 @@ export const getBySlug = async (
|
|||||||
},
|
},
|
||||||
where: and(
|
where: and(
|
||||||
eq(boards.slug, boardSlug),
|
eq(boards.slug, boardSlug),
|
||||||
|
eq(boards.workspaceId, workspaceId),
|
||||||
isNull(boards.deletedAt),
|
isNull(boards.deletedAt),
|
||||||
eq(boards.visibility, "public"),
|
eq(boards.visibility, "public"),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
"typecheck": "tsc --noEmit --emitDeclarationOnly false"
|
"typecheck": "tsc --noEmit --emitDeclarationOnly false"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@plunk/node": "^3.0.3",
|
||||||
"@react-email/components": "^0.0.25",
|
"@react-email/components": "^0.0.25",
|
||||||
"nodemailer": "^7.0.3",
|
"nodemailer": "^7.0.3",
|
||||||
"react-email": "^3.0.1"
|
"react-email": "^3.0.1"
|
||||||
|
|||||||
8
packages/email/src/cloudMailerClient.tsx
Normal file
8
packages/email/src/cloudMailerClient.tsx
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import Plunk from "@plunk/node";
|
||||||
|
|
||||||
|
export const cloudMailerClient =
|
||||||
|
process.env.NEXT_PUBLIC_KAN_ENV === "cloud"
|
||||||
|
? new Plunk(process.env.PLUNK_API_KEY ?? "", {
|
||||||
|
baseUrl: process.env.PLUNK_API_URL,
|
||||||
|
})
|
||||||
|
: null;
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
export const name = "email";
|
export const name = "email";
|
||||||
|
|
||||||
export { sendEmail } from "./sendEmail";
|
export { sendEmail } from "./sendEmail";
|
||||||
|
export { cloudMailerClient } from "./cloudMailerClient";
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { render } from "@react-email/render";
|
import { render } from "@react-email/render";
|
||||||
import nodemailer from "nodemailer";
|
import nodemailer from "nodemailer";
|
||||||
|
|
||||||
|
import { cloudMailerClient } from "./cloudMailerClient";
|
||||||
import JoinWorkspaceTemplate from "./templates/join-workspace";
|
import JoinWorkspaceTemplate from "./templates/join-workspace";
|
||||||
import MagicLinkTemplate from "./templates/magic-link";
|
import MagicLinkTemplate from "./templates/magic-link";
|
||||||
import ResetPasswordTemplate from "./templates/reset-password";
|
import ResetPasswordTemplate from "./templates/reset-password";
|
||||||
@@ -44,6 +45,15 @@ export const sendEmail = async (
|
|||||||
html,
|
html,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (cloudMailerClient) {
|
||||||
|
const response = await cloudMailerClient.emails.send({
|
||||||
|
...options,
|
||||||
|
body: html,
|
||||||
|
});
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
const response = await transporter.sendMail(options);
|
const response = await transporter.sendMail(options);
|
||||||
|
|
||||||
if (!response.accepted.length) {
|
if (!response.accepted.length) {
|
||||||
|
|||||||
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@@ -409,6 +409,9 @@ importers:
|
|||||||
|
|
||||||
packages/email:
|
packages/email:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@plunk/node':
|
||||||
|
specifier: ^3.0.3
|
||||||
|
version: 3.0.3
|
||||||
'@react-email/components':
|
'@react-email/components':
|
||||||
specifier: ^0.0.25
|
specifier: ^0.0.25
|
||||||
version: 0.0.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
version: 0.0.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
@@ -2194,6 +2197,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
|
|
||||||
|
'@plunk/node@3.0.3':
|
||||||
|
resolution: {integrity: sha512-f3NT418/EdLjebQ4arAwR64cnz7d5H7i1CeKh8+B0cVBrwzHvF+Q+QkhutF+FAp49yuI/BYc71qQH+RFc2fxxQ==}
|
||||||
|
|
||||||
'@popperjs/core@2.11.8':
|
'@popperjs/core@2.11.8':
|
||||||
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
|
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
|
||||||
|
|
||||||
@@ -8910,6 +8916,10 @@ snapshots:
|
|||||||
'@pkgjs/parseargs@0.11.0':
|
'@pkgjs/parseargs@0.11.0':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@plunk/node@3.0.3':
|
||||||
|
dependencies:
|
||||||
|
tslib: 2.8.1
|
||||||
|
|
||||||
'@popperjs/core@2.11.8': {}
|
'@popperjs/core@2.11.8': {}
|
||||||
|
|
||||||
'@react-aria/focus@3.19.0(react@18.3.1)':
|
'@react-aria/focus@3.19.0(react@18.3.1)':
|
||||||
|
|||||||
@@ -109,7 +109,9 @@
|
|||||||
"S3_FORCE_PATH_STYLE",
|
"S3_FORCE_PATH_STYLE",
|
||||||
"PORT",
|
"PORT",
|
||||||
"BETTER_AUTH_SECRET",
|
"BETTER_AUTH_SECRET",
|
||||||
"BETTER_AUTH_TRUSTED_ORIGINS"
|
"BETTER_AUTH_TRUSTED_ORIGINS",
|
||||||
|
"PLUNK_API_KEY",
|
||||||
|
"PLUNK_API_URL"
|
||||||
],
|
],
|
||||||
"globalPassThroughEnv": [
|
"globalPassThroughEnv": [
|
||||||
"NODE_ENV",
|
"NODE_ENV",
|
||||||
|
|||||||
Reference in New Issue
Block a user