mirror of
https://github.com/outline/outline.git
synced 2026-06-13 11:25:03 +03:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7dd3c96b14 | |||
| f98d1203ea | |||
| 5d09be4add | |||
| 48cae96a56 | |||
| e8ab7a4885 | |||
| 183d02d5c6 | |||
| 4b833b3e2e | |||
| d1b75d44f6 |
@@ -8,18 +8,16 @@ import BreadcrumbMenu from "~/menus/BreadcrumbMenu";
|
||||
import { undraggableOnDesktop } from "~/styles";
|
||||
import { MenuInternalLink } from "~/types";
|
||||
|
||||
type Props = {
|
||||
type Props = React.PropsWithChildren<{
|
||||
items: MenuInternalLink[];
|
||||
max?: number;
|
||||
highlightFirstItem?: boolean;
|
||||
};
|
||||
}>;
|
||||
|
||||
function Breadcrumb({
|
||||
items,
|
||||
highlightFirstItem,
|
||||
children,
|
||||
max = 2,
|
||||
}: React.PropsWithChildren<Props>) {
|
||||
function Breadcrumb(
|
||||
{ items, highlightFirstItem, children, max = 2 }: Props,
|
||||
ref: React.RefObject<HTMLDivElement> | null
|
||||
) {
|
||||
const totalItems = items.length;
|
||||
const topLevelItems: MenuInternalLink[] = [...items];
|
||||
let overflowItems;
|
||||
@@ -37,7 +35,7 @@ function Breadcrumb({
|
||||
}
|
||||
|
||||
return (
|
||||
<Flex justify="flex-start" align="center">
|
||||
<Flex justify="flex-start" align="center" ref={ref}>
|
||||
{topLevelItems.map((item, index) => (
|
||||
<React.Fragment key={String(item.to) || index}>
|
||||
{item.icon}
|
||||
@@ -67,6 +65,8 @@ const Slash = styled(GoToIcon)`
|
||||
|
||||
const Item = styled(Link)<{ $highlight: boolean; $withIcon: boolean }>`
|
||||
${ellipsis()}
|
||||
${undraggableOnDesktop()}
|
||||
|
||||
display: flex;
|
||||
flex-shrink: 1;
|
||||
min-width: 0;
|
||||
@@ -76,7 +76,6 @@ const Item = styled(Link)<{ $highlight: boolean; $withIcon: boolean }>`
|
||||
height: 24px;
|
||||
font-weight: ${(props) => (props.$highlight ? "500" : "inherit")};
|
||||
margin-left: ${(props) => (props.$withIcon ? "4px" : "0")};
|
||||
${undraggableOnDesktop()}
|
||||
|
||||
svg {
|
||||
flex-shrink: 0;
|
||||
@@ -87,4 +86,4 @@ const Item = styled(Link)<{ $highlight: boolean; $withIcon: boolean }>`
|
||||
}
|
||||
`;
|
||||
|
||||
export default Breadcrumb;
|
||||
export default React.forwardRef<HTMLDivElement, Props>(Breadcrumb);
|
||||
|
||||
@@ -18,6 +18,8 @@ import useStores from "~/hooks/useStores";
|
||||
type Props = {
|
||||
/** The document to display live collaborators for */
|
||||
document: Document;
|
||||
/** The maximum number of collaborators to display, defaults to 6 */
|
||||
limit?: number;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -25,6 +27,7 @@ type Props = {
|
||||
* and presence status.
|
||||
*/
|
||||
function Collaborators(props: Props) {
|
||||
const { limit = 6 } = props;
|
||||
const { t } = useTranslation();
|
||||
const user = useCurrentUser();
|
||||
const currentUserId = user?.id;
|
||||
@@ -75,8 +78,6 @@ function Collaborators(props: Props) {
|
||||
placement: "bottom-end",
|
||||
});
|
||||
|
||||
const limit = 8;
|
||||
|
||||
return (
|
||||
<>
|
||||
<PopoverDisclosure {...popover}>
|
||||
@@ -88,6 +89,7 @@ function Collaborators(props: Props) {
|
||||
>
|
||||
<Facepile
|
||||
limit={limit}
|
||||
overflow={collaborators.length - limit}
|
||||
users={collaborators}
|
||||
renderAvatar={(collaborator) => {
|
||||
const isPresent = presentIds.includes(collaborator.id);
|
||||
|
||||
@@ -57,11 +57,10 @@ function useCategory(document: Document): MenuInternalLink | null {
|
||||
return null;
|
||||
}
|
||||
|
||||
const DocumentBreadcrumb: React.FC<Props> = ({
|
||||
document,
|
||||
children,
|
||||
onlyText,
|
||||
}: Props) => {
|
||||
function DocumentBreadcrumb(
|
||||
{ document, children, onlyText }: Props,
|
||||
ref: React.RefObject<HTMLDivElement> | null
|
||||
) {
|
||||
const { collections } = useStores();
|
||||
const { t } = useTranslation();
|
||||
const category = useCategory(document);
|
||||
@@ -140,11 +139,11 @@ const DocumentBreadcrumb: React.FC<Props> = ({
|
||||
}
|
||||
|
||||
return (
|
||||
<Breadcrumb items={items} highlightFirstItem>
|
||||
<Breadcrumb items={items} ref={ref} highlightFirstItem>
|
||||
{children}
|
||||
</Breadcrumb>
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
const StyledIcon = styled(Icon)`
|
||||
margin-right: 2px;
|
||||
@@ -160,4 +159,4 @@ const SmallSlash = styled(GoToIcon)`
|
||||
opacity: 0.5;
|
||||
`;
|
||||
|
||||
export default observer(DocumentBreadcrumb);
|
||||
export default observer(React.forwardRef(DocumentBreadcrumb));
|
||||
|
||||
@@ -3,6 +3,7 @@ import { observer } from "mobx-react";
|
||||
import { MenuIcon } from "outline-icons";
|
||||
import { transparentize } from "polished";
|
||||
import * as React from "react";
|
||||
import { mergeRefs } from "react-merge-refs";
|
||||
import styled from "styled-components";
|
||||
import breakpoint from "styled-components-breakpoint";
|
||||
import { depths, s } from "@shared/styles";
|
||||
@@ -10,6 +11,7 @@ import { supportsPassiveListener } from "@shared/utils/browser";
|
||||
import Button from "~/components/Button";
|
||||
import Fade from "~/components/Fade";
|
||||
import Flex from "~/components/Flex";
|
||||
import useComponentSize from "~/hooks/useComponentSize";
|
||||
import useEventListener from "~/hooks/useEventListener";
|
||||
import useMobile from "~/hooks/useMobile";
|
||||
import useStores from "~/hooks/useStores";
|
||||
@@ -21,16 +23,22 @@ export const HEADER_HEIGHT = 64;
|
||||
type Props = {
|
||||
left?: React.ReactNode;
|
||||
title: React.ReactNode;
|
||||
actions?: React.ReactNode;
|
||||
actions?:
|
||||
| ((props: { isCompact: boolean }) => React.ReactNode)
|
||||
| React.ReactNode;
|
||||
hasSidebar?: boolean;
|
||||
className?: string;
|
||||
};
|
||||
|
||||
function Header({ left, title, actions, hasSidebar, className }: Props) {
|
||||
function Header(
|
||||
{ left, title, actions, hasSidebar, className }: Props,
|
||||
ref: React.RefObject<HTMLDivElement> | null
|
||||
) {
|
||||
const { ui } = useStores();
|
||||
const isMobile = useMobile();
|
||||
const hasMobileSidebar = hasSidebar && isMobile;
|
||||
|
||||
const internalRef = React.useRef<HTMLDivElement | null>(null);
|
||||
const breadcrumbsRef = React.useRef<HTMLDivElement | null>(null);
|
||||
const passThrough = !actions && !left && !title;
|
||||
|
||||
const [isScrolled, setScrolled] = React.useState(false);
|
||||
@@ -53,8 +61,18 @@ function Header({ left, title, actions, hasSidebar, className }: Props) {
|
||||
});
|
||||
}, []);
|
||||
|
||||
const setBreadcrumbRef = React.useCallback((node: HTMLDivElement) => {
|
||||
breadcrumbsRef.current = node.firstElementChild as HTMLDivElement;
|
||||
}, []);
|
||||
|
||||
const size = useComponentSize(internalRef);
|
||||
const breadcrumbsSize = useComponentSize(breadcrumbsRef);
|
||||
const breadcrumbMakesCompact = breadcrumbsSize.width > size.width / 3;
|
||||
const isCompact = size.width < 1000 || breadcrumbMakesCompact;
|
||||
|
||||
return (
|
||||
<Wrapper
|
||||
ref={mergeRefs([ref, internalRef])}
|
||||
align="center"
|
||||
shrink={false}
|
||||
className={className}
|
||||
@@ -62,7 +80,7 @@ function Header({ left, title, actions, hasSidebar, className }: Props) {
|
||||
$insetTitleAdjust={ui.sidebarIsClosed && Desktop.hasInsetTitlebar()}
|
||||
>
|
||||
{left || hasMobileSidebar ? (
|
||||
<Breadcrumbs>
|
||||
<Breadcrumbs ref={setBreadcrumbRef}>
|
||||
{hasMobileSidebar && (
|
||||
<MobileMenuButton
|
||||
onClick={ui.toggleMobileSidebar}
|
||||
@@ -74,7 +92,7 @@ function Header({ left, title, actions, hasSidebar, className }: Props) {
|
||||
</Breadcrumbs>
|
||||
) : null}
|
||||
|
||||
{isScrolled ? (
|
||||
{isScrolled && !isCompact ? (
|
||||
<Title onClick={handleClickTitle}>
|
||||
<Fade>{title}</Fade>
|
||||
</Title>
|
||||
@@ -82,7 +100,7 @@ function Header({ left, title, actions, hasSidebar, className }: Props) {
|
||||
<div />
|
||||
)}
|
||||
<Actions align="center" justify="flex-end">
|
||||
{actions}
|
||||
{typeof actions === "function" ? actions({ isCompact }) : actions}
|
||||
</Actions>
|
||||
</Wrapper>
|
||||
);
|
||||
@@ -151,7 +169,6 @@ const Wrapper = styled(Flex)<WrapperProps>`
|
||||
|
||||
${breakpoint("tablet")`
|
||||
padding: 16px;
|
||||
justify-content: center;
|
||||
${(props: WrapperProps) => props.$insetTitleAdjust && `padding-left: 64px;`}
|
||||
`};
|
||||
`;
|
||||
@@ -190,4 +207,4 @@ const MobileMenuButton = styled(Button)`
|
||||
}
|
||||
`;
|
||||
|
||||
export default observer(Header);
|
||||
export default observer(React.forwardRef(Header));
|
||||
|
||||
@@ -128,7 +128,7 @@ const Sidebar = styled(m.div)<{
|
||||
max-width: 80%;
|
||||
border-left: 1px solid ${s("divider")};
|
||||
transition: border-left 100ms ease-in-out;
|
||||
z-index: 1;
|
||||
z-index: ${depths.sidebar};
|
||||
|
||||
${breakpoint("mobile", "tablet")`
|
||||
display: flex;
|
||||
|
||||
@@ -29,6 +29,7 @@ import useCurrentUser from "./useCurrentUser";
|
||||
import usePolicy from "./usePolicy";
|
||||
|
||||
const ApiKeys = lazy(() => import("~/scenes/Settings/ApiKeys"));
|
||||
const PersonalApiKeys = lazy(() => import("~/scenes/Settings/PersonalApiKeys"));
|
||||
const Details = lazy(() => import("~/scenes/Settings/Details"));
|
||||
const Export = lazy(() => import("~/scenes/Settings/Export"));
|
||||
const Features = lazy(() => import("~/scenes/Settings/Features"));
|
||||
@@ -87,10 +88,10 @@ const useSettingsConfig = () => {
|
||||
icon: EmailIcon,
|
||||
},
|
||||
{
|
||||
name: t("API"),
|
||||
path: settingsPath("tokens"),
|
||||
component: ApiKeys,
|
||||
enabled: can.createApiKey,
|
||||
name: t("API Keys"),
|
||||
path: settingsPath("personal-api-keys"),
|
||||
component: PersonalApiKeys,
|
||||
enabled: can.createApiKey && !can.listApiKeys,
|
||||
group: t("Account"),
|
||||
icon: CodeIcon,
|
||||
},
|
||||
@@ -143,6 +144,14 @@ const useSettingsConfig = () => {
|
||||
group: t("Workspace"),
|
||||
icon: ShapesIcon,
|
||||
},
|
||||
{
|
||||
name: t("API Keys"),
|
||||
path: settingsPath("api-keys"),
|
||||
component: ApiKeys,
|
||||
enabled: can.listApiKeys,
|
||||
group: t("Workspace"),
|
||||
icon: CodeIcon,
|
||||
},
|
||||
{
|
||||
name: t("Shared Links"),
|
||||
path: settingsPath("shares"),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { observer } from "mobx-react";
|
||||
import { DocumentIcon } from "outline-icons";
|
||||
import { DocumentIcon, ShapesIcon } from "outline-icons";
|
||||
import * as React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { MenuButton, useMenuState } from "reakit/Menu";
|
||||
@@ -14,11 +14,15 @@ import useStores from "~/hooks/useStores";
|
||||
import { MenuItem } from "~/types";
|
||||
|
||||
type Props = {
|
||||
/** The document to which the templates will be applied */
|
||||
document: Document;
|
||||
/** Whether to render the button as a compact icon */
|
||||
isCompact?: boolean;
|
||||
/** Callback to handle when a template is selected */
|
||||
onSelectTemplate: (template: Document) => void;
|
||||
};
|
||||
|
||||
function TemplatesMenu({ onSelectTemplate, document }: Props) {
|
||||
function TemplatesMenu({ isCompact, onSelectTemplate, document }: Props) {
|
||||
const menu = useMenuState({
|
||||
modal: true,
|
||||
});
|
||||
@@ -79,8 +83,13 @@ function TemplatesMenu({ onSelectTemplate, document }: Props) {
|
||||
<>
|
||||
<MenuButton {...menu}>
|
||||
{(props) => (
|
||||
<Button {...props} disclosure neutral>
|
||||
{t("Templates")}
|
||||
<Button
|
||||
{...props}
|
||||
icon={isCompact ? <ShapesIcon /> : undefined}
|
||||
disclosure={!isCompact}
|
||||
neutral
|
||||
>
|
||||
{isCompact ? undefined : t("Templates")}
|
||||
</Button>
|
||||
)}
|
||||
</MenuButton>
|
||||
|
||||
@@ -30,6 +30,7 @@ import { publishDocument } from "~/actions/definitions/documents";
|
||||
import { navigateToTemplateSettings } from "~/actions/definitions/navigation";
|
||||
import { restoreRevision } from "~/actions/definitions/revisions";
|
||||
import useActionContext from "~/hooks/useActionContext";
|
||||
import useComponentSize from "~/hooks/useComponentSize";
|
||||
import useCurrentTeam from "~/hooks/useCurrentTeam";
|
||||
import useCurrentUser from "~/hooks/useCurrentUser";
|
||||
import useEditingFocus from "~/hooks/useEditingFocus";
|
||||
@@ -86,11 +87,13 @@ function DocumentHeader({
|
||||
const team = useCurrentTeam({ rejectOnEmpty: false });
|
||||
const user = useCurrentUser({ rejectOnEmpty: false });
|
||||
const { resolvedTheme } = ui;
|
||||
const isMobile = useMobile();
|
||||
const isMobileMedia = useMobile();
|
||||
const isRevision = !!revision;
|
||||
const isEditingFocus = useEditingFocus();
|
||||
const { editor } = useDocumentContext();
|
||||
const { hasHeadings } = useDocumentContext();
|
||||
const { hasHeadings, editor } = useDocumentContext();
|
||||
const ref = React.useRef<HTMLDivElement | null>(null);
|
||||
const size = useComponentSize(ref);
|
||||
const isMobile = isMobileMedia || size.width < 700;
|
||||
|
||||
// We cache this value for as long as the component is mounted so that if you
|
||||
// apply a template there is still the option to replace it until the user
|
||||
@@ -230,6 +233,7 @@ function DocumentHeader({
|
||||
return (
|
||||
<>
|
||||
<StyledHeader
|
||||
ref={ref}
|
||||
$hidden={isEditingFocus}
|
||||
hasSidebar
|
||||
left={
|
||||
@@ -254,7 +258,7 @@ function DocumentHeader({
|
||||
{document.isArchived && <Badge>{t("Archived")}</Badge>}
|
||||
</Flex>
|
||||
}
|
||||
actions={
|
||||
actions={({ isCompact }) => (
|
||||
<>
|
||||
<ObservingBanner />
|
||||
|
||||
@@ -262,11 +266,15 @@ function DocumentHeader({
|
||||
<Status>{t("Saving")}…</Status>
|
||||
)}
|
||||
{!isDeleted && !isRevision && can.listViews && (
|
||||
<Collaborators document={document} />
|
||||
<Collaborators
|
||||
document={document}
|
||||
limit={isCompact ? 3 : undefined}
|
||||
/>
|
||||
)}
|
||||
{(isEditing || !user?.separateEditMode) && !isTemplate && isNew && (
|
||||
<Action>
|
||||
<TemplatesMenu
|
||||
isCompact={isCompact}
|
||||
document={document}
|
||||
onSelectTemplate={onSelectTemplate}
|
||||
/>
|
||||
@@ -306,6 +314,7 @@ function DocumentHeader({
|
||||
{can.update &&
|
||||
can.createChildDocument &&
|
||||
!isRevision &&
|
||||
!isCompact &&
|
||||
!isMobile && (
|
||||
<Action>
|
||||
<NewChildDocumentMenu
|
||||
@@ -377,7 +386,7 @@ function DocumentHeader({
|
||||
/>
|
||||
</Action>
|
||||
</>
|
||||
}
|
||||
)}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -2,7 +2,6 @@ import { observer } from "mobx-react";
|
||||
import { CodeIcon } from "outline-icons";
|
||||
import * as React from "react";
|
||||
import { useTranslation, Trans } from "react-i18next";
|
||||
import { toast } from "sonner";
|
||||
import ApiKey from "~/models/ApiKey";
|
||||
import { Action } from "~/components/Actions";
|
||||
import Button from "~/components/Button";
|
||||
@@ -13,36 +12,17 @@ import Text from "~/components/Text";
|
||||
import { createApiKey } from "~/actions/definitions/apiKeys";
|
||||
import useActionContext from "~/hooks/useActionContext";
|
||||
import useCurrentTeam from "~/hooks/useCurrentTeam";
|
||||
import useCurrentUser from "~/hooks/useCurrentUser";
|
||||
import usePolicy from "~/hooks/usePolicy";
|
||||
import useStores from "~/hooks/useStores";
|
||||
import ApiKeyListItem from "./components/ApiKeyListItem";
|
||||
|
||||
function ApiKeys() {
|
||||
const team = useCurrentTeam();
|
||||
const user = useCurrentUser();
|
||||
const { t } = useTranslation();
|
||||
const { apiKeys } = useStores();
|
||||
const can = usePolicy(team);
|
||||
const context = useActionContext();
|
||||
|
||||
const [copiedKeyId, setCopiedKeyId] = React.useState<string | null>();
|
||||
const copyTimeoutIdRef = React.useRef<ReturnType<typeof setTimeout>>();
|
||||
|
||||
const handleCopy = React.useCallback(
|
||||
(keyId: string) => {
|
||||
if (copyTimeoutIdRef.current) {
|
||||
clearTimeout(copyTimeoutIdRef.current);
|
||||
}
|
||||
setCopiedKeyId(keyId);
|
||||
copyTimeoutIdRef.current = setTimeout(() => {
|
||||
setCopiedKeyId(null);
|
||||
}, 3000);
|
||||
toast.message(t("API key copied to clipboard"));
|
||||
},
|
||||
[t]
|
||||
);
|
||||
|
||||
return (
|
||||
<Scene
|
||||
title={t("API")}
|
||||
@@ -62,12 +42,11 @@ function ApiKeys() {
|
||||
</>
|
||||
}
|
||||
>
|
||||
<Heading>{t("API")}</Heading>
|
||||
<Heading>{t("API Keys")}</Heading>
|
||||
<Text as="p" type="secondary">
|
||||
<Trans
|
||||
defaults="Create personal API keys to authenticate with the API and programatically control
|
||||
your workspace's data. API keys have the same permissions as your user account.
|
||||
For more details see the <em>developer documentation</em>."
|
||||
defaults="API keys can be used to authenticate with the API and programatically control
|
||||
your workspace's data. For more details see the <em>developer documentation</em>."
|
||||
components={{
|
||||
em: (
|
||||
<a
|
||||
@@ -81,16 +60,10 @@ function ApiKeys() {
|
||||
</Text>
|
||||
<PaginatedList
|
||||
fetch={apiKeys.fetchPage}
|
||||
items={apiKeys.personalApiKeys}
|
||||
options={{ userId: user.id }}
|
||||
heading={<h2>{t("Personal keys")}</h2>}
|
||||
items={apiKeys.orderedData}
|
||||
heading={<h2>{t("All")}</h2>}
|
||||
renderItem={(apiKey: ApiKey) => (
|
||||
<ApiKeyListItem
|
||||
key={apiKey.id}
|
||||
apiKey={apiKey}
|
||||
isCopied={apiKey.id === copiedKeyId}
|
||||
onCopy={handleCopy}
|
||||
/>
|
||||
<ApiKeyListItem key={apiKey.id} apiKey={apiKey} />
|
||||
)}
|
||||
/>
|
||||
</Scene>
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
import { observer } from "mobx-react";
|
||||
import { CodeIcon } from "outline-icons";
|
||||
import * as React from "react";
|
||||
import { useTranslation, Trans } from "react-i18next";
|
||||
import ApiKey from "~/models/ApiKey";
|
||||
import { Action } from "~/components/Actions";
|
||||
import Button from "~/components/Button";
|
||||
import Heading from "~/components/Heading";
|
||||
import PaginatedList from "~/components/PaginatedList";
|
||||
import Scene from "~/components/Scene";
|
||||
import Text from "~/components/Text";
|
||||
import { createApiKey } from "~/actions/definitions/apiKeys";
|
||||
import useActionContext from "~/hooks/useActionContext";
|
||||
import useCurrentTeam from "~/hooks/useCurrentTeam";
|
||||
import useCurrentUser from "~/hooks/useCurrentUser";
|
||||
import usePolicy from "~/hooks/usePolicy";
|
||||
import useStores from "~/hooks/useStores";
|
||||
import ApiKeyListItem from "./components/ApiKeyListItem";
|
||||
|
||||
function PersonalApiKeys() {
|
||||
const team = useCurrentTeam();
|
||||
const user = useCurrentUser();
|
||||
const { t } = useTranslation();
|
||||
const { apiKeys } = useStores();
|
||||
const can = usePolicy(team);
|
||||
const context = useActionContext();
|
||||
|
||||
return (
|
||||
<Scene
|
||||
title={t("API")}
|
||||
icon={<CodeIcon />}
|
||||
actions={
|
||||
<>
|
||||
{can.createApiKey && (
|
||||
<Action>
|
||||
<Button
|
||||
type="submit"
|
||||
value={`${t("New API key")}…`}
|
||||
action={createApiKey}
|
||||
context={context}
|
||||
/>
|
||||
</Action>
|
||||
)}
|
||||
</>
|
||||
}
|
||||
>
|
||||
<Heading>{t("API")}</Heading>
|
||||
<Text as="p" type="secondary">
|
||||
<Trans
|
||||
defaults="Create personal API keys to authenticate with the API and programatically control
|
||||
your workspace's data. API keys have the same permissions as your user account.
|
||||
For more details see the <em>developer documentation</em>."
|
||||
components={{
|
||||
em: (
|
||||
<a
|
||||
href="https://www.getoutline.com/developers"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
/>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</Text>
|
||||
<PaginatedList
|
||||
fetch={apiKeys.fetchPage}
|
||||
items={apiKeys.personalApiKeys}
|
||||
options={{ userId: user.id }}
|
||||
heading={<h2>{t("Personal keys")}</h2>}
|
||||
renderItem={(apiKey: ApiKey) => (
|
||||
<ApiKeyListItem key={apiKey.id} apiKey={apiKey} />
|
||||
)}
|
||||
/>
|
||||
</Scene>
|
||||
);
|
||||
}
|
||||
|
||||
export default observer(PersonalApiKeys);
|
||||
@@ -1,6 +1,8 @@
|
||||
import { observer } from "mobx-react";
|
||||
import { CopyIcon } from "outline-icons";
|
||||
import * as React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { toast } from "sonner";
|
||||
import ApiKey from "~/models/ApiKey";
|
||||
import Button from "~/components/Button";
|
||||
import CopyToClipboard from "~/components/CopyToClipboard";
|
||||
@@ -8,24 +10,29 @@ import Flex from "~/components/Flex";
|
||||
import ListItem from "~/components/List/Item";
|
||||
import Text from "~/components/Text";
|
||||
import Time from "~/components/Time";
|
||||
import useCurrentUser from "~/hooks/useCurrentUser";
|
||||
import useUserLocale from "~/hooks/useUserLocale";
|
||||
import ApiKeyMenu from "~/menus/ApiKeyMenu";
|
||||
import { dateToExpiry } from "~/utils/date";
|
||||
|
||||
type Props = {
|
||||
/** The API key to display */
|
||||
apiKey: ApiKey;
|
||||
isCopied: boolean;
|
||||
onCopy: (keyId: string) => void;
|
||||
};
|
||||
|
||||
const ApiKeyListItem = ({ apiKey, isCopied, onCopy }: Props) => {
|
||||
const ApiKeyListItem = ({ apiKey }: Props) => {
|
||||
const { t } = useTranslation();
|
||||
const userLocale = useUserLocale();
|
||||
const user = useCurrentUser();
|
||||
|
||||
const subtitle = (
|
||||
<>
|
||||
<Text type="tertiary">
|
||||
{t(`Created`)} <Time dateTime={apiKey.createdAt} addSuffix /> ·{" "}
|
||||
{t(`Created`)} <Time dateTime={apiKey.createdAt} addSuffix />{" "}
|
||||
{apiKey.userId === user.id
|
||||
? ""
|
||||
: t(`by {{ name }}`, { name: user.name })}{" "}
|
||||
·{" "}
|
||||
</Text>
|
||||
{apiKey.lastActiveAt && (
|
||||
<Text type={"tertiary"}>
|
||||
@@ -41,9 +48,19 @@ const ApiKeyListItem = ({ apiKey, isCopied, onCopy }: Props) => {
|
||||
</>
|
||||
);
|
||||
|
||||
const [copied, setCopied] = React.useState<boolean>(false);
|
||||
const copyTimeoutIdRef = React.useRef<ReturnType<typeof setTimeout>>();
|
||||
|
||||
const handleCopy = React.useCallback(() => {
|
||||
onCopy(apiKey.id);
|
||||
}, [apiKey.id, onCopy]);
|
||||
if (copyTimeoutIdRef.current) {
|
||||
clearTimeout(copyTimeoutIdRef.current);
|
||||
}
|
||||
setCopied(true);
|
||||
copyTimeoutIdRef.current = setTimeout(() => {
|
||||
setCopied(false);
|
||||
}, 3000);
|
||||
toast.message(t("API key copied to clipboard"));
|
||||
}, [t]);
|
||||
|
||||
return (
|
||||
<ListItem
|
||||
@@ -52,10 +69,10 @@ const ApiKeyListItem = ({ apiKey, isCopied, onCopy }: Props) => {
|
||||
subtitle={subtitle}
|
||||
actions={
|
||||
<Flex align="center" gap={8}>
|
||||
{apiKey.value && (
|
||||
{apiKey.value && handleCopy && (
|
||||
<CopyToClipboard text={apiKey.value} onCopy={handleCopy}>
|
||||
<Button type="button" icon={<CopyIcon />} neutral borderOnHover>
|
||||
{isCopied ? t("Copied") : t("Copy")}
|
||||
{copied ? t("Copied") : t("Copy")}
|
||||
</Button>
|
||||
</CopyToClipboard>
|
||||
)}
|
||||
@@ -74,4 +91,4 @@ const ApiKeyListItem = ({ apiKey, isCopied, onCopy }: Props) => {
|
||||
);
|
||||
};
|
||||
|
||||
export default ApiKeyListItem;
|
||||
export default observer(ApiKeyListItem);
|
||||
|
||||
+1
-1
@@ -351,7 +351,7 @@
|
||||
"nodemon": "^3.1.7",
|
||||
"postinstall-postinstall": "^2.1.0",
|
||||
"prettier": "^2.8.8",
|
||||
"react-refresh": "^0.14.0",
|
||||
"react-refresh": "^0.14.2",
|
||||
"rimraf": "^2.5.4",
|
||||
"rollup-plugin-webpack-stats": "^0.4.1",
|
||||
"terser": "^5.36.0",
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
import { TeamPreference } from "@shared/types";
|
||||
import { ApiKey, User, Team } from "@server/models";
|
||||
import { allow } from "./cancan";
|
||||
import { and, isOwner, isTeamModel, isTeamMutable } from "./utils";
|
||||
import {
|
||||
and,
|
||||
isCloudHosted,
|
||||
isOwner,
|
||||
isTeamModel,
|
||||
isTeamMutable,
|
||||
} from "./utils";
|
||||
|
||||
allow(User, "createApiKey", Team, (actor, team) =>
|
||||
and(
|
||||
@@ -18,6 +24,7 @@ allow(User, "createApiKey", Team, (actor, team) =>
|
||||
allow(User, "listApiKeys", Team, (actor, team) =>
|
||||
and(
|
||||
//
|
||||
isCloudHosted(),
|
||||
isTeamModel(actor, team),
|
||||
actor.isAdmin
|
||||
)
|
||||
|
||||
@@ -36,7 +36,12 @@ this is code
|
||||
});
|
||||
|
||||
test("returns true for latex fence", () => {
|
||||
expect(isMarkdown(`\$\$i\$\$`)).toBe(true);
|
||||
expect(isMarkdown(`\$i\$`)).toBe(true);
|
||||
expect(
|
||||
isMarkdown(`\$0.00
|
||||
random content
|
||||
\$1.00`)
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
test("returns false for non-closed fence", () => {
|
||||
|
||||
@@ -10,8 +10,8 @@ export default function isMarkdown(text: string): boolean {
|
||||
}
|
||||
|
||||
// latex-ish
|
||||
const latex = text.match(/\$\$/gm);
|
||||
if (latex && latex.length > 1) {
|
||||
const latex = text.match(/\$(.+)\$/g);
|
||||
if (latex && latex.length > 0) {
|
||||
signals += latex.length;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,9 +21,11 @@ export default class Comment extends Mark {
|
||||
userId: {},
|
||||
resolved: {
|
||||
default: false,
|
||||
validate: "boolean",
|
||||
},
|
||||
draft: {
|
||||
default: false,
|
||||
validate: "boolean",
|
||||
},
|
||||
},
|
||||
inclusive: false,
|
||||
|
||||
@@ -24,6 +24,7 @@ export default class Highlight extends Mark {
|
||||
attrs: {
|
||||
color: {
|
||||
default: null,
|
||||
validate: "string|null",
|
||||
},
|
||||
},
|
||||
parseDOM: [
|
||||
|
||||
@@ -56,9 +56,11 @@ export default class Link extends Mark {
|
||||
attrs: {
|
||||
href: {
|
||||
default: "",
|
||||
validate: "string",
|
||||
},
|
||||
title: {
|
||||
default: null,
|
||||
validate: "string|null",
|
||||
},
|
||||
},
|
||||
inclusive: false,
|
||||
|
||||
@@ -40,23 +40,27 @@ export default class Emoji extends Extension {
|
||||
{
|
||||
tag: "strong.emoji",
|
||||
preserveWhitespace: "full",
|
||||
getAttrs: (dom: HTMLElement) => ({
|
||||
"data-name": dom.dataset.name,
|
||||
}),
|
||||
getAttrs: (dom: HTMLElement) =>
|
||||
dom.dataset.name
|
||||
? {
|
||||
"data-name": dom.dataset.name,
|
||||
}
|
||||
: false,
|
||||
},
|
||||
],
|
||||
toDOM: (node) => {
|
||||
if (getEmojiFromName(node.attrs["data-name"])) {
|
||||
const name = node.attrs["data-name"];
|
||||
if (name && getEmojiFromName(name)) {
|
||||
return [
|
||||
"strong",
|
||||
{
|
||||
class: `emoji ${node.attrs["data-name"]}`,
|
||||
"data-name": node.attrs["data-name"],
|
||||
class: `emoji ${name}`,
|
||||
"data-name": name,
|
||||
},
|
||||
getEmojiFromName(node.attrs["data-name"]),
|
||||
getEmojiFromName(name),
|
||||
];
|
||||
}
|
||||
return ["strong", { class: "emoji" }, `:${node.attrs["data-name"]}:`];
|
||||
return ["strong", { class: "emoji" }, `:${name}:`];
|
||||
},
|
||||
toPlainText: (node) => getEmojiFromName(node.attrs["data-name"]),
|
||||
};
|
||||
|
||||
@@ -36,7 +36,10 @@ export default class Video extends Node {
|
||||
height: {
|
||||
default: null,
|
||||
},
|
||||
title: {},
|
||||
title: {
|
||||
default: null,
|
||||
validate: "string|null",
|
||||
},
|
||||
},
|
||||
group: "block",
|
||||
selectable: true,
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Nainstalovat",
|
||||
"Deleted Collection": "Odstraněná sbírka",
|
||||
"Unpin": "Zrušit připnutí",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Zahrnout vnořené dokumenty",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Prohledat sbírky a dokumenty",
|
||||
"No results found": "Nebyly nalezeny žádné výsledky",
|
||||
"Untitled": "Bez názvu",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Právě upravuje",
|
||||
"Currently viewing": "Právě prohlíží",
|
||||
"Viewed {{ timeAgo }}": "Zobrazeno před {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Kopie {{ documentName }}",
|
||||
"Title": "Název",
|
||||
"Include nested documents": "Zahrnout vnořené dokumenty",
|
||||
"Module failed to load": "Modul se nepodařilo načíst",
|
||||
"Loading Failed": "Načítání selhalo",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Litujeme, část aplikace se nepodařilo načíst. Může to být způsobeno tím, že byla aktualizována od chvíle, kdy jste kartu otevřeli, nebo kvůli neúspěšnému síťovému požadavku. Zkuste znovu načíst.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Install now",
|
||||
"Deleted Collection": "Deleted Collection",
|
||||
"Unpin": "Unpin",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Search collections & documents",
|
||||
"No results found": "Ingen resultater fundet",
|
||||
"Untitled": "Unavngivet",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Redigerer nu",
|
||||
"Currently viewing": "Ser nu",
|
||||
"Viewed {{ timeAgo }}": "Viewed {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Copy of {{ documentName }}",
|
||||
"Title": "Title",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Module failed to load": "Modulet kunne ikke indlæses",
|
||||
"Loading Failed": "Loading Failed",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Jetzt installieren",
|
||||
"Deleted Collection": "Gelöschte Sammlung",
|
||||
"Unpin": "Lospinnen",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Verschachtelte Dokumente einbeziehen",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Sammlungen und Dokumente durchsuchen",
|
||||
"No results found": "Keine Ergebnisse gefunden",
|
||||
"Untitled": "Ohne Titel",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Derzeit in Bearbeitung",
|
||||
"Currently viewing": "Gerade angezeigt",
|
||||
"Viewed {{ timeAgo }}": "Angesehen {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Kopie von {{ documentName }}",
|
||||
"Title": "Überschrift",
|
||||
"Include nested documents": "Verschachtelte Dokumente einbeziehen",
|
||||
"Module failed to load": "Modul konnte nicht geladen werden",
|
||||
"Loading Failed": "Laden fehlgeschlagen",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Leider konnte ein Teil der Software nicht geladen werden weil der Inhalt sich inzwischen geändert hat oder eine Abfrage nicht erfolgreich abgeschlossen werden konnte. Bitte neu laden.",
|
||||
|
||||
@@ -497,7 +497,7 @@
|
||||
"Could not import file": "Could not import file",
|
||||
"Unsubscribed from document": "Unsubscribed from document",
|
||||
"Account": "Account",
|
||||
"API": "API",
|
||||
"API Keys": "API Keys",
|
||||
"Details": "Details",
|
||||
"Security": "Security",
|
||||
"Features": "Features",
|
||||
@@ -829,11 +829,12 @@
|
||||
"Something went wrong": "Something went wrong",
|
||||
"Please try again or contact support if the problem persists": "Please try again or contact support if the problem persists",
|
||||
"No documents found for your search filters.": "No documents found for your search filters.",
|
||||
"API key copied to clipboard": "API key copied to clipboard",
|
||||
"Create personal API keys to authenticate with the API and programatically control\n your workspace's data. API keys have the same permissions as your user account.\n For more details see the <em>developer documentation</em>.": "Create personal API keys to authenticate with the API and programatically control\n your workspace's data. API keys have the same permissions as your user account.\n For more details see the <em>developer documentation</em>.",
|
||||
"Personal keys": "Personal keys",
|
||||
"API": "API",
|
||||
"API keys can be used to authenticate with the API and programatically control\n your workspace's data. For more details see the <em>developer documentation</em>.": "API keys can be used to authenticate with the API and programatically control\n your workspace's data. For more details see the <em>developer documentation</em>.",
|
||||
"by {{ name }}": "by {{ name }}",
|
||||
"Last used": "Last used",
|
||||
"No expiry": "No expiry",
|
||||
"API key copied to clipboard": "API key copied to clipboard",
|
||||
"Copied": "Copied",
|
||||
"Revoking": "Revoking",
|
||||
"Are you sure you want to revoke the {{ tokenName }} token?": "Are you sure you want to revoke the {{ tokenName }} token?",
|
||||
@@ -958,6 +959,8 @@
|
||||
"Email address": "Email address",
|
||||
"Your email address should be updated in your SSO provider.": "Your email address should be updated in your SSO provider.",
|
||||
"The email integration is currently disabled. Please set the associated environment variables and restart the server to enable notifications.": "The email integration is currently disabled. Please set the associated environment variables and restart the server to enable notifications.",
|
||||
"Create personal API keys to authenticate with the API and programatically control\n your workspace's data. API keys have the same permissions as your user account.\n For more details see the <em>developer documentation</em>.": "Create personal API keys to authenticate with the API and programatically control\n your workspace's data. API keys have the same permissions as your user account.\n For more details see the <em>developer documentation</em>.",
|
||||
"Personal keys": "Personal keys",
|
||||
"Preferences saved": "Preferences saved",
|
||||
"Delete account": "Delete account",
|
||||
"Manage settings that affect your personal experience.": "Manage settings that affect your personal experience.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Instalar ahora",
|
||||
"Deleted Collection": "Colección Eliminada",
|
||||
"Unpin": "Desfijar",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Incluir documentos anidados",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Buscar en colecciones y documentos",
|
||||
"No results found": "No se encontraron resultados",
|
||||
"Untitled": "Sin título",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Editando actualmente",
|
||||
"Currently viewing": "Visualizando actualmente",
|
||||
"Viewed {{ timeAgo }}": "Visto {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Copia de {{ documentName }}",
|
||||
"Title": "Título",
|
||||
"Include nested documents": "Incluir documentos anidados",
|
||||
"Module failed to load": "El módulo no ha podido ser cargado",
|
||||
"Loading Failed": "Carga fallida",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Lo sentimos, parte de la aplicación no pudo ser cargada. Esto puede deberse a que se actualizó desde que abriste la pestaña o debido a una solicitud de red fallida. Por favor intenta recargar la página.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Install now",
|
||||
"Deleted Collection": "مجموعههای حذف شده",
|
||||
"Unpin": "برداشتن سنجاق",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "جستجوی مجموعه ها و اسناد",
|
||||
"No results found": "No results found",
|
||||
"Untitled": "بدون عنوان",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "در حال ویرایش",
|
||||
"Currently viewing": "در حال مشاهده",
|
||||
"Viewed {{ timeAgo }}": "Viewed {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Copy of {{ documentName }}",
|
||||
"Title": "Title",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Module failed to load": "بارگیری ماژول با خطا مواجه شد",
|
||||
"Loading Failed": "بارگیری ناموفق",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "متأسفانه امکان بارگیری بخشی از برنامه وجود نداشت. این خطا ممکن است به خاطر بهروزرسانی ماژول یا اختلال شبکه ایجاد شده باشد. لطفاً دوباره صفحه را بارگیری کنید.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Installer maintenant",
|
||||
"Deleted Collection": "Collection supprimée",
|
||||
"Unpin": "Désépingler",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Inclure les documents imbriqués",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Rechercher dans les collections et documents",
|
||||
"No results found": "Aucun résultat",
|
||||
"Untitled": "Sans titre",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "En cours de modification",
|
||||
"Currently viewing": "En train de consulter",
|
||||
"Viewed {{ timeAgo }}": "Vu il y a {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Copie de {{ documentName }}",
|
||||
"Title": "Titre",
|
||||
"Include nested documents": "Inclure les documents imbriqués",
|
||||
"Module failed to load": "Le module n'a pas pu être chargé",
|
||||
"Loading Failed": "Échec du chargement",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Désolé, le chargement d'une partie de l'application a échoué. C'est probablement dû au fait qu'elle a été mise à jour depuis que vous avez ouvert l'onglet, ou en raison d'une requête réseau échouée. Essayez d'actualiser la page.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Install now",
|
||||
"Deleted Collection": "Deleted Collection",
|
||||
"Unpin": "Unpin",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Search collections & documents",
|
||||
"No results found": "No results found",
|
||||
"Untitled": "Untitled",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Currently editing",
|
||||
"Currently viewing": "Currently viewing",
|
||||
"Viewed {{ timeAgo }}": "Viewed {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Copy of {{ documentName }}",
|
||||
"Title": "Title",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Module failed to load": "Module failed to load",
|
||||
"Loading Failed": "Loading Failed",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Telepítés most",
|
||||
"Deleted Collection": "Törölt gyűjtemény",
|
||||
"Unpin": "Feloldás",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Beágyazott dokumentumokkal együtt",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Keresés a gyűteményekben és dokumentumokban",
|
||||
"No results found": "Nincs találat",
|
||||
"Untitled": "Névtelen",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Jelenleg szerkeszti",
|
||||
"Currently viewing": "Jelenleg megtekinti",
|
||||
"Viewed {{ timeAgo }}": "Megtekintve: {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "{{ documentName }} másolata",
|
||||
"Title": "Cím",
|
||||
"Include nested documents": "Beágyazott dokumentumokkal együtt",
|
||||
"Module failed to load": "A modult nem sikerült betölteni",
|
||||
"Loading Failed": "Betöltés sikertelen",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Elnézést, az alkalmazás egy részének betöltése sikertelen. Lehet, hogy frissült, mióta megnyitotta a fület, vagy hálózati kapcsolati hiba történt. Kérem próbálja újratölteni.",
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"Thread resolved": "Thread resolved",
|
||||
"Mark as unresolved": "Mark as unresolved",
|
||||
"View reactions": "View reactions",
|
||||
"Reactions": "Reactions",
|
||||
"Reactions": "Reaksi",
|
||||
"Copy ID": "Salin ID",
|
||||
"Clear IndexedDB cache": "Clear IndexedDB cache",
|
||||
"IndexedDB cache cleared": "IndexedDB cache cleared",
|
||||
@@ -54,9 +54,9 @@
|
||||
"Markdown": "Markdown",
|
||||
"Download": "Unduh",
|
||||
"Download document": "Unduh dokumen",
|
||||
"Copy as Markdown": "Copy as Markdown",
|
||||
"Copy as Markdown": "Salin sebagai Markdown",
|
||||
"Markdown copied to clipboard": "Markdown copied to clipboard",
|
||||
"Copy public link": "Copy public link",
|
||||
"Copy public link": "Salin tautan publik",
|
||||
"Link copied to clipboard": "Tautan disalin ke papan klip",
|
||||
"Copy link": "Salin tautan",
|
||||
"Copy": "Salin",
|
||||
@@ -159,7 +159,7 @@
|
||||
"Save": "Simpan",
|
||||
"Creating": "Membuat",
|
||||
"Create": "Buat",
|
||||
"Collection deleted": "Collection deleted",
|
||||
"Collection deleted": "Koleksi berhasil dihapus",
|
||||
"I’m sure – Delete": "Saya yakin – Hapus",
|
||||
"Deleting": "Menghapus",
|
||||
"Are you sure about that? Deleting the <em>{{collectionName}}</em> collection is permanent and cannot be restored, however all published documents within will be moved to the trash.": "Anda yakin? Menghapus koleksi <em>{{collectionName}}</em> bersifat permanen dan tidak dapat dipulihkan, namun dokumen di dalamnya akan dipindahkan ke tempat sampah.",
|
||||
@@ -169,11 +169,11 @@
|
||||
"Collapse": "Persingkat",
|
||||
"Expand": "Perlengkap",
|
||||
"Type a command or search": "Ketik perintah atau penelusuran",
|
||||
"Choose a template": "Choose a template",
|
||||
"Choose a template": "Pilih templat",
|
||||
"Are you sure you want to permanently delete this entire comment thread?": "Apakah Anda yakin ingin menghapus semua komentar ini secara permanen?",
|
||||
"Are you sure you want to permanently delete this comment?": "Apa Anda yakin ingin menghapus komentar ini secara permanen?",
|
||||
"Confirm": "Konfirmasi",
|
||||
"manage access": "manage access",
|
||||
"manage access": "Kelola akses",
|
||||
"view and edit access": "melihat dan mengedit akses",
|
||||
"view only access": "akses hanya melihat",
|
||||
"no access": "tidak ada akses",
|
||||
@@ -182,9 +182,9 @@
|
||||
"Moving the document <em>{{ title }}</em> to the {{ newCollectionName }} collection will change permission for all workspace members from <em>{{ prevPermission }}</em> to <em>{{ newPermission }}</em>.": "Moving the document <em>{{ title }}</em> to the {{ newCollectionName }} collection will change permission for all workspace members from <em>{{ prevPermission }}</em> to <em>{{ newPermission }}</em>.",
|
||||
"Document is too large": "Document is too large",
|
||||
"This document has reached the maximum size and can no longer be edited": "This document has reached the maximum size and can no longer be edited",
|
||||
"Authentication failed": "Authentication failed",
|
||||
"Authentication failed": "Autentikasi gagal",
|
||||
"Please try logging out and back in again": "Please try logging out and back in again",
|
||||
"Authorization failed": "Authorization failed",
|
||||
"Authorization failed": "Otorisasi gagal",
|
||||
"You may have lost access to this document, try reloading": "You may have lost access to this document, try reloading",
|
||||
"Too many users connected to document": "Too many users connected to document",
|
||||
"Your edits will sync once other users leave the document": "Your edits will sync once other users leave the document",
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Pasang sekarang",
|
||||
"Deleted Collection": "Koleksi Dihapus",
|
||||
"Unpin": "Unpin",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Telusuri koleksi & dokumen",
|
||||
"No results found": "Tak ditemukan hasil",
|
||||
"Untitled": "Tak Berjudul",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Sedang menyunting",
|
||||
"Currently viewing": "Sedang melihat",
|
||||
"Viewed {{ timeAgo }}": "Dilihat {{ timeAgo }} lalu",
|
||||
"Copy of {{ documentName }}": "Salinan {{ documentName }}",
|
||||
"Title": "Title",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Module failed to load": "Modul gagal dimuat",
|
||||
"Loading Failed": "Gagal Memuat",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Maaf, sebagian dari aplikasi gagal dimuat. Hal ini mungkin terjadi karena aplikasi telah diperbarui sejak Anda membuka tab atau karena permintaan yang gagal. Silakan coba memuat ulang.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Install now",
|
||||
"Deleted Collection": "Raccolte Eliminate",
|
||||
"Unpin": "Rimuovi contrassegno",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Cerca raccolte e documenti",
|
||||
"No results found": "Nessun risultato trovato",
|
||||
"Untitled": "Senza titolo",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Attualemente in modifica",
|
||||
"Currently viewing": "Attualmente visualizzato",
|
||||
"Viewed {{ timeAgo }}": "Viewed {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Copy of {{ documentName }}",
|
||||
"Title": "Title",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Module failed to load": "Caricamento del modulo fallito",
|
||||
"Loading Failed": "Caricamento fallito",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Spiacenti, parte dell'applicazione non si è caricata correttamente. È possibile che sia stata aggiornata da quando hai aperto la scheda oppure è fallita una richiesta di rete. Si prega di ricaricare la pagina.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "インストールしています",
|
||||
"Deleted Collection": "削除したコレクション",
|
||||
"Unpin": "ピン留めを外す",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "子ドキュメントを含める",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "ドキュメントやコレクションを検索する",
|
||||
"No results found": "なにも見つかりませんでした",
|
||||
"Untitled": "無題のドキュメント",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "編集中",
|
||||
"Currently viewing": "閲覧中",
|
||||
"Viewed {{ timeAgo }}": "{{ timeAgo }} 前に閲覧済み",
|
||||
"Copy of {{ documentName }}": "{{ documentName }} のコピー",
|
||||
"Title": "タイトル",
|
||||
"Include nested documents": "子ドキュメントを含める",
|
||||
"Module failed to load": "モジュールの読み込みに失敗しました",
|
||||
"Loading Failed": "読み込みに失敗しました",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "一部のアプリケーションを読み込めませんでした。 再読み込みしてください。",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "지금 설치",
|
||||
"Deleted Collection": "삭제 된 콜렉션",
|
||||
"Unpin": "고정 해제",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "중첩된 문서 포함",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "컬렉션 및 문서 검색",
|
||||
"No results found": "결과가 없습니다.",
|
||||
"Untitled": "제목없음",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "현재 수정 중",
|
||||
"Currently viewing": "현재 보는 중",
|
||||
"Viewed {{ timeAgo }}": "전에 봄 {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "{{ documentName }} 사본",
|
||||
"Title": "제목",
|
||||
"Include nested documents": "중첩된 문서 포함",
|
||||
"Module failed to load": "모듈 불러오기 실패",
|
||||
"Loading Failed": "불러오기 실패",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "죄송합니다, 일부 애플리케이션을 불러올 수 없습니다. 탭을 연 이후 업데이트 되었거나 네트워크 요청이 실패했기 때문일 수 있습니다. 새로고침을 시도해보세요",
|
||||
@@ -354,8 +356,8 @@
|
||||
"Anyone with the link can access because the parent document, <2>{{documentTitle}}</2>, is shared": "상위 문서인 <2>{{documentTitle}}</2> 이(가) 공유되어 있으므로 링크를 가진 사람은 누구나 접근 가능",
|
||||
"Allow anyone with the link to access": "링크가 있는 모든 사람에 대해 접근 허용",
|
||||
"Publish to internet": "인터넷에 게시",
|
||||
"Search engine indexing": "Search engine indexing",
|
||||
"Disable this setting to discourage search engines from indexing the page": "Disable this setting to discourage search engines from indexing the page",
|
||||
"Search engine indexing": "검색 엔진 인덱싱 허용",
|
||||
"Disable this setting to discourage search engines from indexing the page": "검색 엔진이 페이지를 인덱싱하지 못하도록 하려면 이 옵션을 비활성화 합니다",
|
||||
"Nested documents are not shared on the web. Toggle sharing to enable access, this will be the default behavior in the future": "중첩된 문서들은 웹에 공유되지 않습니다. 공유 버튼을 토글해 액세스를 활성화하면, 미래에도 기본 동작으로 유지됩니다.",
|
||||
"{{ userName }} was added to the document": "{{ userName }} was added to the document",
|
||||
"{{ count }} people added to the document": "{{ count }} people added to the document",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Installer nå",
|
||||
"Deleted Collection": "Slettet samling",
|
||||
"Unpin": "Løsne",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Inkluder underdokumenter",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Søk i samlinger og dokumenter",
|
||||
"No results found": "Ingen resultater funnet",
|
||||
"Untitled": "Uten tittel",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Redigerer nå",
|
||||
"Currently viewing": "Ser nå",
|
||||
"Viewed {{ timeAgo }}": "Sett {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Kopi av {{ documentName }}",
|
||||
"Title": "Tittel",
|
||||
"Include nested documents": "Inkluder underdokumenter",
|
||||
"Module failed to load": "Feil ved innlasting av modul",
|
||||
"Loading Failed": "Innlasting Feilet",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Beklager, en del av applikasjonen mislyktes i å laste. Dette kan være fordi den ble oppdatert etter du åpnet fanen eller på grunn av en nettverksfeil. Vennligst prøv å laste inn på nytt.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Nu installeren",
|
||||
"Deleted Collection": "Verwijderde Collectie",
|
||||
"Unpin": "Losmaken",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Inclusief geneste documenten",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Zoeken in collecties en documenten",
|
||||
"No results found": "Geen resultaten gevonden",
|
||||
"Untitled": "Naamloos",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Momenteel aan het bewerken",
|
||||
"Currently viewing": "Momenteel aan het bekijken",
|
||||
"Viewed {{ timeAgo }}": "{{ timeAgo }} bekeken",
|
||||
"Copy of {{ documentName }}": "Kopie van {{ documentName }}",
|
||||
"Title": "Titel",
|
||||
"Include nested documents": "Inclusief geneste documenten",
|
||||
"Module failed to load": "Module kon niet geladen worden",
|
||||
"Loading Failed": "Laden mislukt",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Sorry, een deel van de toepassing kon niet geladen worden. Dit kan komen doordat het is bijgewerkt sinds het tabblad is geopend of door een mislukt netwerkverzoek. Probeer het opnieuw te laden.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Zainstaluj teraz",
|
||||
"Deleted Collection": "Usunięta kolekcja",
|
||||
"Unpin": "Odepnij",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Dołącz zagnieżdżone dokumenty",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Przeszukaj kolekcje i dokumenty",
|
||||
"No results found": "Nie znaleziono wyników",
|
||||
"Untitled": "Bez tytułu",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Aktualnie edytujesz",
|
||||
"Currently viewing": "Aktualnie wyświetlasz",
|
||||
"Viewed {{ timeAgo }}": "Przeglądnięty {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Kopiuj jako {{ documentName }}",
|
||||
"Title": "Tytuł",
|
||||
"Include nested documents": "Dołącz zagnieżdżone dokumenty",
|
||||
"Module failed to load": "Nie udało się załadować modułu",
|
||||
"Loading Failed": "Ładowanie nie powiodło się",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Przepraszamy, nie udało się załadować części aplikacji. Może to być spowodowane tym, że został zaktualizowany od momentu otwarcia karty lub z powodu nieudanego żądania sieciowego. Spróbuj ponownie załadować.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Instalar agora",
|
||||
"Deleted Collection": "Excluir Coleção",
|
||||
"Unpin": "Desafixar",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Incluir documentos aninhados",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Pesquisar coleções e documentos",
|
||||
"No results found": "Nenhum resultado encontrado",
|
||||
"Untitled": "Sem título",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Atualmente editando",
|
||||
"Currently viewing": "Atualmente visualizando",
|
||||
"Viewed {{ timeAgo }}": "Visualizou {{ timeAgo }} atrás",
|
||||
"Copy of {{ documentName }}": "Cópia de {{ documentName }}",
|
||||
"Title": "Título",
|
||||
"Include nested documents": "Incluir documentos aninhados",
|
||||
"Module failed to load": "Falha ao carregar módulo",
|
||||
"Loading Failed": "Falha ao carregar",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Desculpe, parte da aplicação falhou ao carregar. Isto pode ser porque foi atualizado desde que você abriu a guia ou devido a uma requisição de redecom falha. Tente recarregar.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Instalar agora",
|
||||
"Deleted Collection": "Coleção eliminada",
|
||||
"Unpin": "Tirar pino",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Incluir sub-documentos",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Procurar coleções e documentos",
|
||||
"No results found": "Nenhum resultado encontrado",
|
||||
"Untitled": "Sem título",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Em edição",
|
||||
"Currently viewing": "Em visualização",
|
||||
"Viewed {{ timeAgo }}": "Visto {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Cópia do {{ documentName }}",
|
||||
"Title": "Título",
|
||||
"Include nested documents": "Incluir sub-documentos",
|
||||
"Module failed to load": "Módulo falhou ao carregar",
|
||||
"Loading Failed": "Carregamento falhou",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Parte da aplicação não foi carregada. Isto pode ser porque foi atualizado desde que abriu o separador ou devido a um erro de rede. Tente recarregar.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Installera nu",
|
||||
"Deleted Collection": "Raderad samling",
|
||||
"Unpin": "Lossa",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Inkludera nästlade dokument",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Sök i samlingar och dokument",
|
||||
"No results found": "Inga resultat hittades",
|
||||
"Untitled": "Utan titel",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Redigerar just nu",
|
||||
"Currently viewing": "Visar för närvarande",
|
||||
"Viewed {{ timeAgo }}": "Visades för {{ timeAgo }} sedan",
|
||||
"Copy of {{ documentName }}": "Kopia av {{ documentName }}",
|
||||
"Title": "Titel",
|
||||
"Include nested documents": "Inkludera nästlade dokument",
|
||||
"Module failed to load": "Modulen kunde inte laddas",
|
||||
"Loading Failed": "Laddning misslyckades",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Tyvärr, en del av programmet kunde inte laddas. Det kan bero på att den uppdaterades sedan du öppnade fliken eller på grund av en misslyckad nätverksbegäran. Försök att ladda om.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Install now",
|
||||
"Deleted Collection": "คอลเลคชั่นที่ถูกลบ",
|
||||
"Unpin": "เลิกปักหมุด",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Search collections & documents",
|
||||
"No results found": "No results found",
|
||||
"Untitled": "ไม่มีชื่อ",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "กำลังแก้ไข",
|
||||
"Currently viewing": "กำลังดู",
|
||||
"Viewed {{ timeAgo }}": "Viewed {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Copy of {{ documentName }}",
|
||||
"Title": "Title",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Module failed to load": "โหลดโมดูลไม่สำเร็จ",
|
||||
"Loading Failed": "การโหลดล้มเหลว",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "ขออภัย บางส่วนของแอปไม่สามารถโหลดได้ อาจเป็นเพราะว่ามีการปรับปรุงหลังจากคุณเปิดแท็บหรือเนื่องจากเครือข่ายล้มเหลว โปรดลองใหม่อีกครั้ง",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Install now",
|
||||
"Deleted Collection": "Silinmiş Koleksiyon",
|
||||
"Unpin": "Sabitlemeyi kaldır",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Koleksiyonlarda ve belgelerde arama yapın",
|
||||
"No results found": "Sonuç bulunamadı",
|
||||
"Untitled": "Başlıksız",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Şu anda düzenliyor",
|
||||
"Currently viewing": "Şu anda görüntülüyor",
|
||||
"Viewed {{ timeAgo }}": "Viewed {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Copy of {{ documentName }}",
|
||||
"Title": "Title",
|
||||
"Include nested documents": "Include nested documents",
|
||||
"Module failed to load": "Modül yüklenemedi",
|
||||
"Loading Failed": "Yükleme başarısız oldu",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Maalesef uygulamanın bir kısmı yüklenemedi. Bunun nedeni, sekmeyi açtığınızdan beri güncellenmiş olması veya başarısız bir ağ isteği olabilir. Lütfen yeniden yüklemeyi deneyin.",
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
"Star": "Додати в обране",
|
||||
"Unstar": "Прибрати з обраного",
|
||||
"Archive": "Архівувати",
|
||||
"Archive collection": "Archive collection",
|
||||
"Collection archived": "Collection archived",
|
||||
"Archive collection": "Архівувати колекцію",
|
||||
"Collection archived": "Колекцію архівовано",
|
||||
"Archiving": "Архівація",
|
||||
"Archiving this collection will also archive all documents within it. Documents from the collection will no longer be visible in search results.": "Archiving this collection will also archive all documents within it. Documents from the collection will no longer be visible in search results.",
|
||||
"Archiving this collection will also archive all documents within it. Documents from the collection will no longer be visible in search results.": "Архівування цієї колекції також архівує всі документи в ній. Документи з колекції більше не будуть видимі в результатах пошуку.",
|
||||
"Restore": "Відновити",
|
||||
"Collection restored": "Collection restored",
|
||||
"Collection restored": "Колекцію відновлено",
|
||||
"Delete": "Видалити",
|
||||
"Delete collection": "Видалити колекцію",
|
||||
"New template": "Новий шаблон",
|
||||
@@ -25,8 +25,8 @@
|
||||
"Mark as resolved": "Позначити як вирішене",
|
||||
"Thread resolved": "Обговорення закрито",
|
||||
"Mark as unresolved": "Позначити як невирішене",
|
||||
"View reactions": "View reactions",
|
||||
"Reactions": "Reactions",
|
||||
"View reactions": "Переглянути реакції",
|
||||
"Reactions": "Реакції",
|
||||
"Copy ID": "Скопіювати ID",
|
||||
"Clear IndexedDB cache": "Очистити кеш IndexedDB",
|
||||
"IndexedDB cache cleared": "Кеш IndexedDB очищено",
|
||||
@@ -56,7 +56,7 @@
|
||||
"Download document": "Завантажити документ",
|
||||
"Copy as Markdown": "Скопіювати як Markdown",
|
||||
"Markdown copied to clipboard": "Markdown скопійовано в буфер обміну",
|
||||
"Copy public link": "Copy public link",
|
||||
"Copy public link": "Копіювати публічне посилання",
|
||||
"Link copied to clipboard": "Посилання скопійовано в буфер обміну",
|
||||
"Copy link": "Скопіювати лінк",
|
||||
"Copy": "Копіювати",
|
||||
@@ -77,13 +77,13 @@
|
||||
"Create template": "Створити шаблон",
|
||||
"Open random document": "Відкрити випадковий документ",
|
||||
"Search documents for \"{{searchQuery}}\"": "Шукати в документах \"{{searchQuery}}\"",
|
||||
"Move to workspace": "Move to workspace",
|
||||
"Move to workspace": "Перемістити в робоче середовище",
|
||||
"Move": "Перемістити",
|
||||
"Move to collection": "Move to collection",
|
||||
"Move to collection": "Перемістити до колекції",
|
||||
"Move {{ documentType }}": "Перемістити {{ documentType }}",
|
||||
"Are you sure you want to archive this document?": "Are you sure you want to archive this document?",
|
||||
"Are you sure you want to archive this document?": "Ви впевнені, що хочете архівувати цей документ?",
|
||||
"Document archived": "Документ архівовано",
|
||||
"Archiving this document will remove it from the collection and search results.": "Archiving this document will remove it from the collection and search results.",
|
||||
"Archiving this document will remove it from the collection and search results.": "Архівування цього документу прибере його з колекції та результатів пошуку.",
|
||||
"Delete {{ documentName }}": "Видалити {{ documentName }}",
|
||||
"Permanently delete": "Видалити остаточно",
|
||||
"Permanently delete {{ documentName }}": "Остаточно видалити {{ documentName }}",
|
||||
@@ -94,9 +94,9 @@
|
||||
"Insights": "Статистика",
|
||||
"Disable viewer insights": "Вимкнути статистику перегляду",
|
||||
"Enable viewer insights": "Увімкнути статистику перегляду",
|
||||
"Leave document": "Leave document",
|
||||
"You have left the shared document": "You have left the shared document",
|
||||
"Could not leave document": "Could not leave document",
|
||||
"Leave document": "Вийти з документа",
|
||||
"You have left the shared document": "Ви залишили спільний документ",
|
||||
"Could not leave document": "Не вдалося покинути документ",
|
||||
"Home": "Головна",
|
||||
"Drafts": "Чернетки",
|
||||
"Trash": "Кошик",
|
||||
@@ -169,17 +169,17 @@
|
||||
"Collapse": "Згорнути",
|
||||
"Expand": "Розгорнути",
|
||||
"Type a command or search": "Введіть команду або текст для пошуку",
|
||||
"Choose a template": "Choose a template",
|
||||
"Choose a template": "Виберіть шаблон",
|
||||
"Are you sure you want to permanently delete this entire comment thread?": "Ви впевнені, що бажаєте остаточно видалити весь цей ланцюжок коментарів?",
|
||||
"Are you sure you want to permanently delete this comment?": "Ви впевнені, що хочете остаточно видалити цей коментар?",
|
||||
"Confirm": "Підтвердити",
|
||||
"manage access": "manage access",
|
||||
"manage access": "керування доступом",
|
||||
"view and edit access": "право перегляду та редагування",
|
||||
"view only access": "доступ лише на перегляд",
|
||||
"no access": "немає доступу",
|
||||
"Move document": "Перемістити документ",
|
||||
"Moving": "Переміщення",
|
||||
"Moving the document <em>{{ title }}</em> to the {{ newCollectionName }} collection will change permission for all workspace members from <em>{{ prevPermission }}</em> to <em>{{ newPermission }}</em>.": "Moving the document <em>{{ title }}</em> to the {{ newCollectionName }} collection will change permission for all workspace members from <em>{{ prevPermission }}</em> to <em>{{ newPermission }}</em>.",
|
||||
"Moving the document <em>{{ title }}</em> to the {{ newCollectionName }} collection will change permission for all workspace members from <em>{{ prevPermission }}</em> to <em>{{ newPermission }}</em>.": "Переміщення документа <em>{{ title }}</em> до колекції {{ newCollectionName }} призведе до зміни дозволу для всіх учасників робочої області з <em>{{ prevPermission }}</em> на <em>{{ newPermission }}</em>.",
|
||||
"Document is too large": "Документ занадто великий",
|
||||
"This document has reached the maximum size and can no longer be edited": "Цей документ досяг максимального розміру і більше не може бути відредагований",
|
||||
"Authentication failed": "Помилка автентифікації",
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Встановити зараз",
|
||||
"Deleted Collection": "Видалена колекція",
|
||||
"Unpin": "Відкріпити",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Включаючи вкладені документи",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Пошук колекцій і документів",
|
||||
"No results found": "Результатів не знайдено",
|
||||
"Untitled": "Без назви",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Зараз редагується",
|
||||
"Currently viewing": "Зараз переглядають",
|
||||
"Viewed {{ timeAgo }}": "Переглянуто {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Копія {{ documentName }}",
|
||||
"Title": "Заголовок",
|
||||
"Include nested documents": "Включаючи вкладені документи",
|
||||
"Module failed to load": "Не вдалося завантажити модуль",
|
||||
"Loading Failed": "Не вдалося завантажити",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "На жаль, не вдалося завантажити частину програми. Це може бути тому, що вона була оновлена після того, як ви відкрили вкладку або через невдалий мережевий запит. Будь ласка, спробуйте перезавантажити.",
|
||||
@@ -267,25 +269,25 @@
|
||||
"Group members": "Учасники групи",
|
||||
"{{authorName}} created <3></3>": "{{authorName}} створив <3></3>",
|
||||
"{{authorName}} opened <3></3>": "{{authorName}} відкрив <3></3>",
|
||||
"Search emoji": "Search emoji",
|
||||
"Search icons": "Search icons",
|
||||
"Search emoji": "Пошук емодзі",
|
||||
"Search icons": "Пошук значків",
|
||||
"Choose default skin tone": "Оберіть колір",
|
||||
"Show menu": "Показати меню",
|
||||
"Icon Picker": "Icon Picker",
|
||||
"Icons": "Icons",
|
||||
"Emojis": "Emojis",
|
||||
"Icon Picker": "Вибір значків",
|
||||
"Icons": "Значки",
|
||||
"Emojis": "Емодзі",
|
||||
"Remove": "Видалити",
|
||||
"All": "Всі",
|
||||
"Frequently Used": "Frequently Used",
|
||||
"Frequently Used": "Часто використовувані",
|
||||
"Search Results": "Результати пошуку",
|
||||
"Smileys & People": "Smileys & People",
|
||||
"Smileys & People": "Смайли та люди",
|
||||
"Animals & Nature": "Тварини та природа",
|
||||
"Food & Drink": "Food & Drink",
|
||||
"Activity": "Activity",
|
||||
"Travel & Places": "Travel & Places",
|
||||
"Objects": "Objects",
|
||||
"Symbols": "Symbols",
|
||||
"Flags": "Flags",
|
||||
"Food & Drink": "Їжа та напої",
|
||||
"Activity": "Активність",
|
||||
"Travel & Places": "Подорожі та місця",
|
||||
"Objects": "Об'єкти",
|
||||
"Symbols": "Символи",
|
||||
"Flags": "Прапори",
|
||||
"Select a color": "Виберіть колір",
|
||||
"Loading": "Завантаження",
|
||||
"Search": "Пошук",
|
||||
@@ -304,40 +306,40 @@
|
||||
"Mark all as read": "Позначити все як прочитане",
|
||||
"You're all caught up": "У вас все налаштовано",
|
||||
"Documents": "Документи",
|
||||
"{{ username }} reacted with {{ emoji }}": "{{ username }} reacted with {{ emoji }}",
|
||||
"{{ firstUsername }} and {{ secondUsername }} reacted with {{ emoji }}": "{{ firstUsername }} and {{ secondUsername }} reacted with {{ emoji }}",
|
||||
"{{ firstUsername }} and {{ count }} others reacted with {{ emoji }}": "{{ firstUsername }} and {{ count }} other reacted with {{ emoji }}",
|
||||
"{{ firstUsername }} and {{ count }} others reacted with {{ emoji }}_plural": "{{ firstUsername }} and {{ count }} others reacted with {{ emoji }}",
|
||||
"Add reaction": "Add reaction",
|
||||
"Reaction picker": "Reaction picker",
|
||||
"Could not load reactions": "Could not load reactions",
|
||||
"Reaction": "Reaction",
|
||||
"{{ username }} reacted with {{ emoji }}": "{{ username }} відреагував з {{ emoji }}",
|
||||
"{{ firstUsername }} and {{ secondUsername }} reacted with {{ emoji }}": "{{ firstUsername }} та {{ secondUsername }} відреагували з {{ emoji }}",
|
||||
"{{ firstUsername }} and {{ count }} others reacted with {{ emoji }}": "{{ firstUsername }} та {{ count }} інші відреагували з {{ emoji }}",
|
||||
"{{ firstUsername }} and {{ count }} others reacted with {{ emoji }}_plural": "{{ firstUsername }} та {{ count }} інші відреагували з {{ emoji }}",
|
||||
"Add reaction": "Додати реакцію",
|
||||
"Reaction picker": "Вибір реакцій",
|
||||
"Could not load reactions": "Не вдалося завантажити реакції",
|
||||
"Reaction": "Реакції",
|
||||
"Results": "Результати",
|
||||
"No results for {{query}}": "За запитом \"{{query}}\" нічого не знайдено :(",
|
||||
"Manage": "Manage",
|
||||
"Manage": "Керування",
|
||||
"All members": "Усі учасники",
|
||||
"Everyone in the workspace": "Усі у робочому середовищі",
|
||||
"Invite": "Invite",
|
||||
"Invite": "Запросити",
|
||||
"{{ userName }} was added to the collection": "{{ userName }} додано до колекції",
|
||||
"{{ count }} people added to the collection": "{{ count }} people added to the collection",
|
||||
"{{ count }} people added to the collection_plural": "{{ count }} people added to the collection",
|
||||
"{{ count }} people and {{ count2 }} groups added to the collection": "{{ count }} people and {{ count2 }} groups added to the collection",
|
||||
"{{ count }} people and {{ count2 }} groups added to the collection_plural": "{{ count }} people and {{ count2 }} groups added to the collection",
|
||||
"Add": "Додати",
|
||||
"Add or invite": "Add or invite",
|
||||
"Add or invite": "Додати або запросити",
|
||||
"Viewer": "Переглядач",
|
||||
"Editor": "Редактор",
|
||||
"Suggestions for invitation": "Suggestions for invitation",
|
||||
"No matches": "No matches",
|
||||
"Suggestions for invitation": "Пропозиції щодо запрошення",
|
||||
"No matches": "Немає збігів",
|
||||
"Can view": "Може переглядати",
|
||||
"Everyone in the collection": "Усі у колекції",
|
||||
"You have full access": "You have full access",
|
||||
"Created the document": "Created the document",
|
||||
"Other people": "Other people",
|
||||
"Other workspace members may have access": "Other workspace members may have access",
|
||||
"You have full access": "У вас є повний доступ",
|
||||
"Created the document": "Створено документ",
|
||||
"Other people": "Інші люди",
|
||||
"Other workspace members may have access": "Інші члени робочої області можуть мати доступ",
|
||||
"This document may be shared with more workspace members through a parent document or collection you do not have access to": "This document may be shared with more workspace members through a parent document or collection you do not have access to",
|
||||
"Access inherited from collection": "Access inherited from collection",
|
||||
"{{ userName }} was removed from the document": "{{ userName }} was removed from the document",
|
||||
"Access inherited from collection": "Доступ успадковано від колекції",
|
||||
"{{ userName }} was removed from the document": "{{ userName }} було видалено з документа",
|
||||
"Could not remove user": "Не вдалось вилучити користувача",
|
||||
"Permissions for {{ userName }} updated": "Права для {{ userName }} оновлено",
|
||||
"Could not update user": "Неможливо оновити користувача",
|
||||
@@ -349,22 +351,22 @@
|
||||
"Leave": "Вихід",
|
||||
"Only lowercase letters, digits and dashes allowed": "Допускаються тільки маленькі літери, цифри і дефіси",
|
||||
"Sorry, this link has already been used": "Вибачте, це посилання вже використано",
|
||||
"Public link copied to clipboard": "Public link copied to clipboard",
|
||||
"Web": "Web",
|
||||
"Anyone with the link can access because the parent document, <2>{{documentTitle}}</2>, is shared": "Anyone with the link can access because the parent document, <2>{{documentTitle}}</2>, is shared",
|
||||
"Allow anyone with the link to access": "Allow anyone with the link to access",
|
||||
"Public link copied to clipboard": "Публічне посилання скопійовано в буфер обміну",
|
||||
"Web": "Веб",
|
||||
"Anyone with the link can access because the parent document, <2>{{documentTitle}}</2>, is shared": "Будь-хто з посиланням може отримати доступ, оскільки батьківський документ <2>{{documentTitle}}</2>, поширює",
|
||||
"Allow anyone with the link to access": "Дозволити будь-кому з посиланням для доступу",
|
||||
"Publish to internet": "Опублікувати в інтернеті",
|
||||
"Search engine indexing": "Search engine indexing",
|
||||
"Disable this setting to discourage search engines from indexing the page": "Disable this setting to discourage search engines from indexing the page",
|
||||
"Nested documents are not shared on the web. Toggle sharing to enable access, this will be the default behavior in the future": "Nested documents are not shared on the web. Toggle sharing to enable access, this will be the default behavior in the future",
|
||||
"{{ userName }} was added to the document": "{{ userName }} was added to the document",
|
||||
"Search engine indexing": "Індексація пошуковою системою",
|
||||
"Disable this setting to discourage search engines from indexing the page": "Вимкніть цей параметр, щоб заборонити пошуковій системі індексувати сторінку",
|
||||
"Nested documents are not shared on the web. Toggle sharing to enable access, this will be the default behavior in the future": "Вкладені документи не поширюються в інтернеті. Ввімкніть спільний доступ для доступу, це буде типовою поведінкою в майбутньому",
|
||||
"{{ userName }} was added to the document": "{{ userName }} було додано до документа",
|
||||
"{{ count }} people added to the document": "{{ count }} people added to the document",
|
||||
"{{ count }} people added to the document_plural": "{{ count }} people added to the document",
|
||||
"{{ count }} groups added to the document": "{{ count }} groups added to the document",
|
||||
"{{ count }} groups added to the document_plural": "{{ count }} groups added to the document",
|
||||
"Logo": "Лого",
|
||||
"Archived collections": "Archived collections",
|
||||
"Change permissions?": "Change permissions?",
|
||||
"Archived collections": "Заархівовані колекції",
|
||||
"Change permissions?": "Змінити права доступу?",
|
||||
"New doc": "Новий документ",
|
||||
"You can't reorder documents in an alphabetically sorted collection": "Ви не можете змінити порядок документів у колекції, яка відсортована за алфавітом",
|
||||
"Empty": "Порожньо",
|
||||
@@ -372,35 +374,35 @@
|
||||
"Document not supported – try Markdown, Plain text, HTML, or Word": "Документ не підтримується – спробуйте Markdown, TXT-файл, HTML або Word",
|
||||
"Go back": "Назад",
|
||||
"Go forward": "Вперед",
|
||||
"Could not load shared documents": "Could not load shared documents",
|
||||
"Shared with me": "Shared with me",
|
||||
"Could not load shared documents": "Не вдалося завантажити спільні документи",
|
||||
"Shared with me": "Відкриті для мене",
|
||||
"Show more": "Показати більше",
|
||||
"Could not load starred documents": "Could not load starred documents",
|
||||
"Could not load starred documents": "Не вдалося завантажити обрані документи",
|
||||
"Starred": "Обране",
|
||||
"Up to date": "Остання версія",
|
||||
"{{ releasesBehind }} versions behind": "{{ releasesBehind }} версія позаду",
|
||||
"{{ releasesBehind }} versions behind_plural": "{{ releasesBehind }} версій позаду",
|
||||
"Return to App": "Назад до програми",
|
||||
"Installation": "Встановлення",
|
||||
"Unstar document": "Unstar document",
|
||||
"Star document": "Star document",
|
||||
"Unstar document": "Видалити з обраного",
|
||||
"Star document": "Додати до обраного",
|
||||
"Previous page": "Попередня сторінка",
|
||||
"Next page": "Наступна сторінка",
|
||||
"Template created, go ahead and customize it": "Шаблон створено, тепер налаштуйте його під ваші потреби",
|
||||
"Creating a template from <em>{{titleWithDefault}}</em> is a non-destructive action – we'll make a copy of the document and turn it into a template that can be used as a starting point for new documents.": "Створення шаблону з <em>{{titleWithDefault}}</em> не є руйнівною дією – ми зробимо копію документа та перетворимо її на шаблон, який можна використовувати як основу для нових документів.",
|
||||
"Published": "Опубліковано",
|
||||
"Enable other members to use the template immediately": "Enable other members to use the template immediately",
|
||||
"Location": "Location",
|
||||
"Admins can manage the workspace and access billing.": "Admins can manage the workspace and access billing.",
|
||||
"Editors can create, edit, and comment on documents.": "Editors can create, edit, and comment on documents.",
|
||||
"Viewers can only view and comment on documents.": "Viewers can only view and comment on documents.",
|
||||
"Are you sure you want to make {{ userName }} a {{ role }}?": "Are you sure you want to make {{ userName }} a {{ role }}?",
|
||||
"Enable other members to use the template immediately": "Дозволити іншим учасникам відразу використовувати шаблон",
|
||||
"Location": "Місцезнаходження",
|
||||
"Admins can manage the workspace and access billing.": "Адміністратори можуть керувати робочою областю та оплатою доступу.",
|
||||
"Editors can create, edit, and comment on documents.": "Редактори можуть створювати, редагувати і коментувати документи.",
|
||||
"Viewers can only view and comment on documents.": "Переглядачі можуть переглядати й коментувати документи.",
|
||||
"Are you sure you want to make {{ userName }} a {{ role }}?": "Ви впевнені, що хочете зробити з {{ userName }} в ролі {{ role }}?",
|
||||
"I understand, delete": "Я розумію, видалити",
|
||||
"Are you sure you want to permanently delete {{ userName }}? This operation is unrecoverable, consider suspending the user instead.": "Ви впевнені, що бажаєте остаточно видалити {{ userName }}? Цю операцію неможливо скасувати, подумайте натомість про деактивацію користувача.",
|
||||
"Are you sure you want to suspend {{ userName }}? Suspended users will be prevented from logging in.": "Ви впевнені, що хочете заблокувати {{ userName }}? Заблоковані користувачі не зможуть увійти.",
|
||||
"New name": "Нова назва",
|
||||
"Name can't be empty": "Назва не може бути незаповненою",
|
||||
"Your import completed": "Your import completed",
|
||||
"Your import completed": "Ваш імпорт завершено",
|
||||
"Previous match": "Попередній збіг",
|
||||
"Next match": "Наступний збіг",
|
||||
"Find and replace": "Знайти та замінити",
|
||||
@@ -411,7 +413,7 @@
|
||||
"Replacement": "Заміна",
|
||||
"Replace": "Замінити",
|
||||
"Replace all": "Замінити все",
|
||||
"{{ userName }} won't be notified, as they do not have access to this document": "{{ userName }} won't be notified, as they do not have access to this document",
|
||||
"{{ userName }} won't be notified, as they do not have access to this document": "{{ userName }} не буде повідомлено, тому що він не має доступу до цього документа",
|
||||
"Profile picture": "Аватар",
|
||||
"Add column after": "Add column after",
|
||||
"Add column before": "Add column before",
|
||||
@@ -530,7 +532,7 @@
|
||||
"New document in <em>{{ collectionName }}</em>": "Новий документ у <em>{{ collectionName }}</em>",
|
||||
"New child document": "Новий вкладений документ",
|
||||
"Save in workspace": "Save in workspace",
|
||||
"Notification settings": "Notification settings",
|
||||
"Notification settings": "Налаштування сповіщень",
|
||||
"Revision options": "Варіанти перегляду",
|
||||
"Share link revoked": "Посилання для спільного доступу скасовано",
|
||||
"Share link copied": "Посилання скопійоване",
|
||||
@@ -761,10 +763,10 @@
|
||||
"Move list item up": "Переміщення елемента списку вгору",
|
||||
"Move list item down": "Переміщення елемента списку вниз",
|
||||
"Tables": "Tables",
|
||||
"Insert row": "Insert row",
|
||||
"Next cell": "Next cell",
|
||||
"Previous cell": "Previous cell",
|
||||
"Space": "Space",
|
||||
"Insert row": "Вставити рядок",
|
||||
"Next cell": "Наступна клітинка",
|
||||
"Previous cell": "Попередня клітинка",
|
||||
"Space": "Пробіл",
|
||||
"Numbered list": "Нумерований список",
|
||||
"Blockquote": "Цитата",
|
||||
"Horizontal divider": "Горизонтальний роздільник",
|
||||
@@ -775,8 +777,8 @@
|
||||
"Continue with Email": "Продовжити з електронною поштою",
|
||||
"Continue with {{ authProviderName }}": "Продовжити з {{ authProviderName }}",
|
||||
"Back to home": "Повернутися на головну",
|
||||
"The workspace could not be found": "The workspace could not be found",
|
||||
"To continue, enter your workspace’s subdomain.": "To continue, enter your workspace’s subdomain.",
|
||||
"The workspace could not be found": "Робоче середовище не знайдено",
|
||||
"To continue, enter your workspace’s subdomain.": "Щоб продовжити, введіть піддомен вашого робочого середовища.",
|
||||
"subdomain": "піддомен",
|
||||
"The domain associated with your email address has not been allowed for this workspace.": "Домен, пов'язаний з вашою електронною адресою, не був дозволений для робочої області.",
|
||||
"Unable to sign-in. Please navigate to your workspace's custom URL, then try to sign-in again.<1></1>If you were invited to a workspace, you will find a link to it in the invite email.": "Неможливо увійти. Будь ласка, перейдіть до користувацької URL-адреси робочої області, потім спробуйте увійти знову. <1></1>Якщо ви були запрошені на робочу область, знайдіть посилання на неї в електронному листі із запрошенням.",
|
||||
@@ -870,16 +872,16 @@
|
||||
"In Notion, click <em>Settings & Members</em> in the left sidebar and open Settings. Look for the Export section, and click <em>Export all workspace content</em>. Choose <em>HTML</em> as the format for the best data compatability.": "У Notion натисніть <em>Налаштування та учасники</em> на лівій бічній панелі та відкрийте Налаштування. Знайдіть розділ «Експорт» і натисніть <em>«Експортувати весь вміст робочого простору</em>. Виберіть <em>HTML</em> як формат для найкращої сумісності даних.",
|
||||
"Drag and drop the zip file from Notion's HTML export option, or click to upload": "Перетягніть zip-файл із опції експорту HTML Notion або натисніть, щоб завантажити",
|
||||
"Last active": "Остання активність",
|
||||
"Guest": "Guest",
|
||||
"Shared by": "Shared by",
|
||||
"Guest": "Гість",
|
||||
"Shared by": "Поділився",
|
||||
"Date shared": "Дата публікації",
|
||||
"Last accessed": "Останній доступ",
|
||||
"Domain": "Domain",
|
||||
"Views": "Перегляди",
|
||||
"All roles": "All roles",
|
||||
"All roles": "Всі ролі",
|
||||
"Admins": "Адміністратори",
|
||||
"Editors": "Editors",
|
||||
"All status": "All status",
|
||||
"Editors": "Редактори",
|
||||
"All status": "Весь статус",
|
||||
"Active": "Активний",
|
||||
"Settings saved": "Налаштування збережено",
|
||||
"Logo updated": "Логотип оновлено",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "Cài đặt ngay",
|
||||
"Deleted Collection": "Xóa Bộ Sưu Tập",
|
||||
"Unpin": "Bỏ ghim",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "Bao gồm các tài liệu lồng nhau",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "Tìm kiếm bộ sưu tập và tài liệu",
|
||||
"No results found": "Không tìm thấy kết quả",
|
||||
"Untitled": "Chưa đặt tên",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "Hiện đang chỉnh sửa",
|
||||
"Currently viewing": "Hiện đang xem",
|
||||
"Viewed {{ timeAgo }}": "Đã xem {{ timeAgo }}",
|
||||
"Copy of {{ documentName }}": "Sao chép {{ documentName }}",
|
||||
"Title": "Tiêu đề",
|
||||
"Include nested documents": "Bao gồm các tài liệu lồng nhau",
|
||||
"Module failed to load": "Không tải được Module",
|
||||
"Loading Failed": "Tải không thành công",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "Xin lỗi, một phần của ứng dụng không tải được. Điều này có thể là do nó đã được cập nhật kể từ khi bạn mở tab hoặc do yêu cầu mạng không thành công. Vui lòng thử tải lại.",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "立即安装",
|
||||
"Deleted Collection": "删除文档集",
|
||||
"Unpin": "取消置顶",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "包含子文档",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "搜索文档集和文档",
|
||||
"No results found": "未找到结果",
|
||||
"Untitled": "无标题",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "正在编辑",
|
||||
"Currently viewing": "正在浏览",
|
||||
"Viewed {{ timeAgo }}": "{{ timeAgo }} 浏览",
|
||||
"Copy of {{ documentName }}": "复制 {{ documentName }}",
|
||||
"Title": "标题",
|
||||
"Include nested documents": "包含子文档",
|
||||
"Module failed to load": "模块加载失败",
|
||||
"Loading Failed": "加载失败",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "对不起,部分应用程序加载失败。这可能是因为它在您打开选项卡后更新了,或者是因为网络请求失败。请尝试重新加载。",
|
||||
|
||||
@@ -196,6 +196,11 @@
|
||||
"Install now": "立即安裝",
|
||||
"Deleted Collection": "刪除的文件集",
|
||||
"Unpin": "取消釘選",
|
||||
"Select a location to copy": "Select a location to copy",
|
||||
"Document copied": "Document copied",
|
||||
"Couldn’t copy the document, try again?": "Couldn’t copy the document, try again?",
|
||||
"Include nested documents": "包含所有子文件",
|
||||
"Copy to <em>{{ location }}</em>": "Copy to <em>{{ location }}</em>",
|
||||
"Search collections & documents": "搜尋文件集與文件",
|
||||
"No results found": "找不到任何結果",
|
||||
"Untitled": "無標題",
|
||||
@@ -227,9 +232,6 @@
|
||||
"Currently editing": "正在編輯",
|
||||
"Currently viewing": "正在瀏覽",
|
||||
"Viewed {{ timeAgo }}": "{{ timeAgo }} 前瀏覽過",
|
||||
"Copy of {{ documentName }}": "拷貝 {{ documentName }}",
|
||||
"Title": "標題",
|
||||
"Include nested documents": "包含所有子文件",
|
||||
"Module failed to load": "模組載入失敗",
|
||||
"Loading Failed": "載入失敗",
|
||||
"Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "抱歉,部分應用程式載入失敗。有可能是因為在您打開分頁後被更新過,或是網路連線請求失敗。請嘗試重新載入。",
|
||||
|
||||
@@ -13276,10 +13276,10 @@ react-portal@^4.2.2:
|
||||
dependencies:
|
||||
prop-types "^15.5.8"
|
||||
|
||||
react-refresh@^0.14.0:
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e"
|
||||
integrity "sha1-TgKCU3il8icHlVTUKEiJNU5fVT4= sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ=="
|
||||
react-refresh@^0.14.0, react-refresh@^0.14.2:
|
||||
version "0.14.2"
|
||||
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
|
||||
integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
|
||||
|
||||
react-remove-scroll-bar@^2.3.3:
|
||||
version "2.3.3"
|
||||
|
||||
Reference in New Issue
Block a user