mirror of
https://github.com/outline/outline.git
synced 2026-06-13 19:35:02 +03:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 418627f901 | |||
| 6153f392ec | |||
| db404b63fe | |||
| c1ea8fa6a4 | |||
| 03175b38ad |
@@ -24,11 +24,6 @@ DEBUG=cache,presenters,events
|
||||
SLACK_KEY=get_a_key_from_slack
|
||||
SLACK_SECRET=get_the_secret_of_above_key
|
||||
|
||||
# To configure Google auth, you'll need to create an OAuth Client ID at
|
||||
# => https://console.cloud.google.com/apis/credentials
|
||||
#
|
||||
# When configuring the Client ID, add an Authorized redirect URI:
|
||||
# https://<your Outline URL>/auth/google.callback
|
||||
GOOGLE_CLIENT_ID=
|
||||
GOOGLE_CLIENT_SECRET=
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ Business Source License 1.1
|
||||
Parameters
|
||||
|
||||
Licensor: General Outline, Inc.
|
||||
Licensed Work: Outline 0.51.0
|
||||
Licensed Work: Outline 0.50.0
|
||||
The Licensed Work is (c) 2020 General Outline, Inc.
|
||||
Additional Use Grant: You may make use of the Licensed Work, provided that
|
||||
you may not use the Licensed Work for a Document
|
||||
@@ -15,7 +15,7 @@ Additional Use Grant: You may make use of the Licensed Work, provided that
|
||||
Licensed Work by creating teams and documents
|
||||
controlled by such third parties.
|
||||
|
||||
Change Date: 2023-12-13
|
||||
Change Date: 2023-11-14
|
||||
|
||||
Change License: Apache License, Version 2.0
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
<a href="https://circleci.com/gh/outline/outline" rel="nofollow"><img src="https://circleci.com/gh/outline/outline.svg?style=shield&circle-token=c0c4c2f39990e277385d5c1ae96169c409eb887a"></a>
|
||||
<a href="https://github.com/prettier/prettier"><img src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat"></a>
|
||||
<a href="https://github.com/styled-components/styled-components"><img src="https://img.shields.io/badge/style-%F0%9F%92%85%20styled--components-orange.svg"></a>
|
||||
<a href="https://translate.getoutline.com/project/outline"><img src="https://badges.crowdin.net/outline/localized.svg"></a>
|
||||
</p>
|
||||
|
||||
This is the source code that runs [**Outline**](https://www.getoutline.com) and all the associated services. If you want to use Outline then you don't need to run this code, we offer a hosted version of the app at [getoutline.com](https://www.getoutline.com).
|
||||
|
||||
@@ -99,7 +99,7 @@ const Breadcrumb = ({ document, onlyText }: Props) => {
|
||||
}
|
||||
|
||||
const path = collection.pathToDocument
|
||||
? collection.pathToDocument(document.id).slice(0, -1)
|
||||
? collection.pathToDocument(document).slice(0, -1)
|
||||
: [];
|
||||
|
||||
if (onlyText === true) {
|
||||
|
||||
@@ -102,7 +102,7 @@ function Editor(props: PropsWithRef) {
|
||||
deleteTable: t("Delete table"),
|
||||
em: t("Italic"),
|
||||
embedInvalidLink: t("Sorry, that link won’t work for this embed type"),
|
||||
findOrCreateDoc: `${t("Find or create a doc")}…`,
|
||||
findOrCreateDoc: t("Find or create a doc…"),
|
||||
h1: t("Big heading"),
|
||||
h2: t("Medium heading"),
|
||||
h3: t("Small heading"),
|
||||
@@ -115,18 +115,18 @@ function Editor(props: PropsWithRef) {
|
||||
link: t("Link"),
|
||||
linkCopied: t("Link copied to clipboard"),
|
||||
mark: t("Highlight"),
|
||||
newLineEmpty: `${t("Type '/' to insert")}…`,
|
||||
newLineWithSlash: `${t("Keep typing to filter")}…`,
|
||||
newLineEmpty: t("Type '/' to insert…"),
|
||||
newLineWithSlash: t("Keep typing to filter…"),
|
||||
noResults: t("No results"),
|
||||
openLink: t("Open link"),
|
||||
orderedList: t("Ordered list"),
|
||||
pasteLink: `${t("Paste a link")}…`,
|
||||
pasteLink: t("Paste a link…"),
|
||||
pasteLinkWithTitle: (service: string) =>
|
||||
t("Paste a {{service}} link…", { service }),
|
||||
placeholder: t("Placeholder"),
|
||||
quote: t("Quote"),
|
||||
removeLink: t("Remove link"),
|
||||
searchOrPasteLink: `${t("Search or paste a link")}…`,
|
||||
searchOrPasteLink: t("Search or paste a link…"),
|
||||
strikethrough: t("Strikethrough"),
|
||||
strong: t("Bold"),
|
||||
subheading: t("Subheading"),
|
||||
|
||||
@@ -200,7 +200,7 @@ class IconPicker extends React.Component<Props> {
|
||||
})}
|
||||
</Icons>
|
||||
<Flex onClick={preventEventBubble}>
|
||||
<React.Suspense fallback={<Loading>{t("Loading")}…</Loading>}>
|
||||
<React.Suspense fallback={<Loading>{t("Loading…")}</Loading>}>
|
||||
<ColorPicker
|
||||
color={this.props.color}
|
||||
onChange={(color) =>
|
||||
|
||||
@@ -54,7 +54,7 @@ class InputSearch extends React.Component<Props> {
|
||||
|
||||
render() {
|
||||
const { t } = this.props;
|
||||
const { theme, placeholder = `${t("Search")}…` } = this.props;
|
||||
const { theme, placeholder = t("Search…") } = this.props;
|
||||
|
||||
return (
|
||||
<InputMaxWidth
|
||||
|
||||
@@ -65,11 +65,6 @@ class Layout extends React.Component<Props> {
|
||||
window.document.body.style.background = props.theme.background;
|
||||
}
|
||||
|
||||
@keydown("meta+.")
|
||||
handleToggleSidebar() {
|
||||
this.props.ui.toggleCollapsedSidebar();
|
||||
}
|
||||
|
||||
@keydown("shift+/")
|
||||
handleOpenKeyboardShortcuts() {
|
||||
if (this.props.ui.editMode) return;
|
||||
@@ -124,11 +119,7 @@ class Layout extends React.Component<Props> {
|
||||
</Switch>
|
||||
)}
|
||||
|
||||
<Content
|
||||
auto
|
||||
justify="center"
|
||||
sidebarCollapsed={ui.editMode || ui.sidebarCollapsed}
|
||||
>
|
||||
<Content auto justify="center" editMode={ui.editMode}>
|
||||
{this.props.children}
|
||||
</Content>
|
||||
|
||||
@@ -168,10 +159,7 @@ const Content = styled(Flex)`
|
||||
}
|
||||
|
||||
${breakpoint("tablet")`
|
||||
margin-left: ${(props) =>
|
||||
props.sidebarCollapsed
|
||||
? props.theme.sidebarCollapsedWidth
|
||||
: props.theme.sidebarWidth};
|
||||
margin-left: ${(props) => (props.editMode ? 0 : props.theme.sidebarWidth)};
|
||||
`};
|
||||
`;
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import styled from "styled-components";
|
||||
import breakpoint from "styled-components-breakpoint";
|
||||
import Fade from "components/Fade";
|
||||
import Flex from "components/Flex";
|
||||
import CollapseToggle, { Button } from "./components/CollapseToggle";
|
||||
import usePrevious from "hooks/usePrevious";
|
||||
import useStores from "hooks/useStores";
|
||||
|
||||
@@ -31,14 +30,10 @@ function Sidebar({ location, children }: Props) {
|
||||
|
||||
const content = (
|
||||
<Container
|
||||
editMode={ui.editMode}
|
||||
mobileSidebarVisible={ui.mobileSidebarVisible}
|
||||
collapsed={ui.editMode || ui.sidebarCollapsed}
|
||||
column
|
||||
>
|
||||
<CollapseToggle
|
||||
collapsed={ui.sidebarCollapsed}
|
||||
onClick={ui.toggleCollapsedSidebar}
|
||||
/>
|
||||
<Toggle
|
||||
onClick={ui.toggleMobileSidebar}
|
||||
mobileSidebarVisible={ui.mobileSidebarVisible}
|
||||
@@ -68,7 +63,7 @@ const Container = styled(Flex)`
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
background: ${(props) => props.theme.sidebarBackground};
|
||||
transition: box-shadow, 100ms, ease-in-out, left 100ms ease-out,
|
||||
transition: left 100ms ease-out,
|
||||
${(props) => props.theme.backgroundTransition};
|
||||
margin-left: ${(props) => (props.mobileSidebarVisible ? 0 : "-100%")};
|
||||
z-index: ${(props) => props.theme.depths.sidebar};
|
||||
@@ -95,33 +90,10 @@ const Container = styled(Flex)`
|
||||
}
|
||||
|
||||
${breakpoint("tablet")`
|
||||
left: ${(props) =>
|
||||
props.collapsed
|
||||
? `calc(-${props.theme.sidebarWidth} + ${props.theme.sidebarCollapsedWidth})`
|
||||
: 0};
|
||||
left: ${(props) => (props.editMode ? `-${props.theme.sidebarWidth}` : 0)};
|
||||
width: ${(props) => props.theme.sidebarWidth};
|
||||
margin: 0;
|
||||
z-index: 3;
|
||||
|
||||
&:hover,
|
||||
&:focus-within {
|
||||
left: 0;
|
||||
box-shadow: ${(props) =>
|
||||
props.collapsed ? "rgba(0, 0, 0, 0.2) 1px 0 4px" : "none"};
|
||||
|
||||
& ${Button} {
|
||||
opacity: .75;
|
||||
}
|
||||
|
||||
& ${Button}:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&:not(:hover):not(:focus-within) > div {
|
||||
opacity: ${(props) => (props.collapsed ? "0" : "1")};
|
||||
transition: opacity 100ms ease-in-out;
|
||||
}
|
||||
`};
|
||||
`;
|
||||
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
// @flow
|
||||
import { NextIcon, BackIcon } from "outline-icons";
|
||||
import * as React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import styled from "styled-components";
|
||||
import Tooltip from "components/Tooltip";
|
||||
import { meta } from "utils/keyboard";
|
||||
|
||||
type Props = {|
|
||||
collapsed: boolean,
|
||||
onClick?: () => void,
|
||||
|};
|
||||
|
||||
function CollapseToggle({ collapsed, ...rest }: Props) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<Tooltip
|
||||
tooltip={collapsed ? t("Expand") : t("Collapse")}
|
||||
shortcut={`${meta}+.`}
|
||||
delay={500}
|
||||
placement="bottom"
|
||||
>
|
||||
<Button {...rest} aria-hidden>
|
||||
{collapsed ? (
|
||||
<NextIcon color="currentColor" />
|
||||
) : (
|
||||
<BackIcon color="currentColor" />
|
||||
)}
|
||||
</Button>
|
||||
</Tooltip>
|
||||
);
|
||||
}
|
||||
|
||||
export const Button = styled.button`
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 28px;
|
||||
right: 8px;
|
||||
border: 0;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
z-index: 1;
|
||||
font-weight: 600;
|
||||
color: ${(props) => props.theme.sidebarText};
|
||||
background: ${(props) => props.theme.sidebarItemBackground};
|
||||
transition: opacity 100ms ease-in-out;
|
||||
border-radius: 4px;
|
||||
opacity: 0;
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
|
||||
&:hover {
|
||||
color: ${(props) => props.theme.white};
|
||||
background: ${(props) => props.theme.primary};
|
||||
}
|
||||
`;
|
||||
|
||||
export default CollapseToggle;
|
||||
@@ -1,7 +1,7 @@
|
||||
// @flow
|
||||
import { observable } from "mobx";
|
||||
import { observer } from "mobx-react";
|
||||
import * as React from "react";
|
||||
import { useDrop } from "react-dnd";
|
||||
import UiStore from "stores/UiStore";
|
||||
import Collection from "models/Collection";
|
||||
import Document from "models/Document";
|
||||
@@ -10,7 +10,6 @@ import DropToImport from "components/DropToImport";
|
||||
import DocumentLink from "./DocumentLink";
|
||||
import EditableTitle from "./EditableTitle";
|
||||
import SidebarLink from "./SidebarLink";
|
||||
import useStores from "hooks/useStores";
|
||||
import CollectionMenu from "menus/CollectionMenu";
|
||||
|
||||
type Props = {|
|
||||
@@ -21,44 +20,27 @@ type Props = {|
|
||||
prefetchDocument: (id: string) => Promise<void>,
|
||||
|};
|
||||
|
||||
function CollectionLink({
|
||||
collection,
|
||||
activeDocument,
|
||||
prefetchDocument,
|
||||
canUpdate,
|
||||
ui,
|
||||
}: Props) {
|
||||
const [menuOpen, setMenuOpen] = React.useState(false);
|
||||
@observer
|
||||
class CollectionLink extends React.Component<Props> {
|
||||
@observable menuOpen = false;
|
||||
|
||||
const handleTitleChange = React.useCallback(
|
||||
async (name: string) => {
|
||||
await collection.save({ name });
|
||||
},
|
||||
[collection]
|
||||
);
|
||||
handleTitleChange = async (name: string) => {
|
||||
await this.props.collection.save({ name });
|
||||
};
|
||||
|
||||
const { documents, policies } = useStores();
|
||||
const expanded = collection.id === ui.activeCollectionId;
|
||||
render() {
|
||||
const {
|
||||
collection,
|
||||
activeDocument,
|
||||
prefetchDocument,
|
||||
canUpdate,
|
||||
ui,
|
||||
} = this.props;
|
||||
|
||||
// Droppable
|
||||
const [{ isOver, canDrop }, drop] = useDrop({
|
||||
accept: "document",
|
||||
drop: (item, monitor) => {
|
||||
if (!collection) return;
|
||||
documents.move(item.id, collection.id);
|
||||
},
|
||||
canDrop: (item, monitor) => {
|
||||
return policies.abilities(collection.id).update;
|
||||
},
|
||||
collect: (monitor) => ({
|
||||
isOver: !!monitor.isOver(),
|
||||
canDrop: monitor.canDrop(),
|
||||
}),
|
||||
});
|
||||
const expanded = collection.id === ui.activeCollectionId;
|
||||
|
||||
return (
|
||||
<>
|
||||
<div ref={drop}>
|
||||
return (
|
||||
<>
|
||||
<DropToImport key={collection.id} collectionId={collection.id}>
|
||||
<SidebarLink
|
||||
key={collection.id}
|
||||
@@ -68,12 +50,11 @@ function CollectionLink({
|
||||
}
|
||||
iconColor={collection.color}
|
||||
expanded={expanded}
|
||||
menuOpen={menuOpen}
|
||||
isActiveDrop={isOver && canDrop}
|
||||
menuOpen={this.menuOpen}
|
||||
label={
|
||||
<EditableTitle
|
||||
title={collection.name}
|
||||
onSubmit={handleTitleChange}
|
||||
onSubmit={this.handleTitleChange}
|
||||
canUpdate={canUpdate}
|
||||
/>
|
||||
}
|
||||
@@ -82,28 +63,28 @@ function CollectionLink({
|
||||
<CollectionMenu
|
||||
position="right"
|
||||
collection={collection}
|
||||
onOpen={() => setMenuOpen(true)}
|
||||
onClose={() => setMenuOpen(false)}
|
||||
onOpen={() => (this.menuOpen = true)}
|
||||
onClose={() => (this.menuOpen = false)}
|
||||
/>
|
||||
}
|
||||
></SidebarLink>
|
||||
</DropToImport>
|
||||
</div>
|
||||
|
||||
{expanded &&
|
||||
collection.documents.map((node) => (
|
||||
<DocumentLink
|
||||
key={node.id}
|
||||
node={node}
|
||||
collection={collection}
|
||||
activeDocument={activeDocument}
|
||||
prefetchDocument={prefetchDocument}
|
||||
canUpdate={canUpdate}
|
||||
depth={1.5}
|
||||
/>
|
||||
))}
|
||||
</>
|
||||
);
|
||||
{expanded &&
|
||||
collection.documents.map((node) => (
|
||||
<DocumentLink
|
||||
key={node.id}
|
||||
node={node}
|
||||
collection={collection}
|
||||
activeDocument={activeDocument}
|
||||
prefetchDocument={prefetchDocument}
|
||||
canUpdate={canUpdate}
|
||||
depth={1.5}
|
||||
/>
|
||||
))}
|
||||
</>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default observer(CollectionLink);
|
||||
export default CollectionLink;
|
||||
|
||||
@@ -72,7 +72,7 @@ class Collections extends React.Component<Props> {
|
||||
to="/collections"
|
||||
onClick={this.props.onCreateCollection}
|
||||
icon={<PlusIcon color="currentColor" />}
|
||||
label={`${t("New collection")}…`}
|
||||
label={t("New collection…")}
|
||||
exact
|
||||
/>
|
||||
</>
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
import { observer } from "mobx-react";
|
||||
import { CollapsedIcon } from "outline-icons";
|
||||
import * as React from "react";
|
||||
import { useDrag, useDrop } from "react-dnd";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import styled from "styled-components";
|
||||
import Collection from "models/Collection";
|
||||
@@ -34,7 +33,7 @@ function DocumentLink({
|
||||
depth,
|
||||
canUpdate,
|
||||
}: Props) {
|
||||
const { documents, policies } = useStores();
|
||||
const { documents } = useStores();
|
||||
const { t } = useTranslation();
|
||||
|
||||
const isActiveDocument = activeDocument && activeDocument.id === node.id;
|
||||
@@ -49,19 +48,13 @@ function DocumentLink({
|
||||
}
|
||||
}, [fetchChildDocuments, node, hasChildDocuments, isActiveDocument]);
|
||||
|
||||
const pathToNode = React.useMemo(
|
||||
() =>
|
||||
collection && collection.pathToDocument(node.id).map((entry) => entry.id),
|
||||
[collection, node]
|
||||
);
|
||||
|
||||
const showChildren = React.useMemo(() => {
|
||||
return !!(
|
||||
hasChildDocuments &&
|
||||
activeDocument &&
|
||||
collection &&
|
||||
(collection
|
||||
.pathToDocument(activeDocument.id)
|
||||
.pathToDocument(activeDocument)
|
||||
.map((entry) => entry.id)
|
||||
.includes(node.id) ||
|
||||
isActiveDocument)
|
||||
@@ -107,88 +100,51 @@ function DocumentLink({
|
||||
);
|
||||
|
||||
const [menuOpen, setMenuOpen] = React.useState(false);
|
||||
const isMoving = documents.movingDocumentId === node.id;
|
||||
|
||||
// Draggable
|
||||
const [{ isDragging }, drag] = useDrag({
|
||||
item: { type: "document", ...node, depth, active: isActiveDocument },
|
||||
collect: (monitor) => ({
|
||||
isDragging: !!monitor.isDragging(),
|
||||
}),
|
||||
canDrag: (monitor) => {
|
||||
return policies.abilities(node.id).move;
|
||||
},
|
||||
});
|
||||
|
||||
// Droppable
|
||||
const [{ isOver, canDrop }, drop] = useDrop({
|
||||
accept: "document",
|
||||
drop: async (item, monitor) => {
|
||||
if (!collection) return;
|
||||
documents.move(item.id, collection.id, node.id);
|
||||
},
|
||||
canDrop: (item, monitor) =>
|
||||
pathToNode && !pathToNode.includes(monitor.getItem().id),
|
||||
collect: (monitor) => ({
|
||||
isOver: !!monitor.isOver(),
|
||||
canDrop: monitor.canDrop(),
|
||||
}),
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
<Draggable
|
||||
key={node.id}
|
||||
ref={drag}
|
||||
$isDragging={isDragging}
|
||||
$isMoving={isMoving}
|
||||
>
|
||||
<div ref={drop}>
|
||||
<DropToImport documentId={node.id} activeClassName="activeDropZone">
|
||||
<SidebarLink
|
||||
innerRef={isActiveDocument ? activeDocumentRef : undefined}
|
||||
onMouseEnter={handleMouseEnter}
|
||||
to={{
|
||||
pathname: node.url,
|
||||
state: { title: node.title },
|
||||
}}
|
||||
label={
|
||||
<>
|
||||
{hasChildDocuments && (
|
||||
<Disclosure
|
||||
expanded={expanded && !isDragging}
|
||||
onClick={handleDisclosureClick}
|
||||
/>
|
||||
)}
|
||||
<EditableTitle
|
||||
title={node.title || t("Untitled")}
|
||||
onSubmit={handleTitleChange}
|
||||
canUpdate={canUpdate}
|
||||
/>
|
||||
</>
|
||||
}
|
||||
isActiveDrop={isOver && canDrop}
|
||||
depth={depth}
|
||||
exact={false}
|
||||
menuOpen={menuOpen}
|
||||
menu={
|
||||
document && !isMoving ? (
|
||||
<Fade>
|
||||
<DocumentMenu
|
||||
position="right"
|
||||
document={document}
|
||||
onOpen={() => setMenuOpen(true)}
|
||||
onClose={() => setMenuOpen(false)}
|
||||
/>
|
||||
</Fade>
|
||||
) : undefined
|
||||
}
|
||||
/>
|
||||
</DropToImport>
|
||||
</div>
|
||||
</Draggable>
|
||||
<React.Fragment key={node.id}>
|
||||
<DropToImport documentId={node.id} activeClassName="activeDropZone">
|
||||
<SidebarLink
|
||||
innerRef={isActiveDocument ? activeDocumentRef : undefined}
|
||||
onMouseEnter={handleMouseEnter}
|
||||
to={{
|
||||
pathname: node.url,
|
||||
state: { title: node.title },
|
||||
}}
|
||||
label={
|
||||
<>
|
||||
{hasChildDocuments && (
|
||||
<Disclosure
|
||||
expanded={expanded}
|
||||
onClick={handleDisclosureClick}
|
||||
/>
|
||||
)}
|
||||
<EditableTitle
|
||||
title={node.title || t("Untitled")}
|
||||
onSubmit={handleTitleChange}
|
||||
canUpdate={canUpdate}
|
||||
/>
|
||||
</>
|
||||
}
|
||||
depth={depth}
|
||||
exact={false}
|
||||
menuOpen={menuOpen}
|
||||
menu={
|
||||
document ? (
|
||||
<Fade>
|
||||
<DocumentMenu
|
||||
position="right"
|
||||
document={document}
|
||||
onOpen={() => setMenuOpen(true)}
|
||||
onClose={() => setMenuOpen(false)}
|
||||
/>
|
||||
</Fade>
|
||||
) : undefined
|
||||
}
|
||||
></SidebarLink>
|
||||
</DropToImport>
|
||||
|
||||
{expanded && !isDragging && (
|
||||
{expanded && (
|
||||
<>
|
||||
{node.children.map((childNode) => (
|
||||
<ObservedDocumentLink
|
||||
@@ -203,15 +159,10 @@ function DocumentLink({
|
||||
))}
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
const Draggable = styled("div")`
|
||||
opacity: ${(props) => (props.$isDragging || props.$isMoving ? 0.5 : 1)};
|
||||
pointer-events: ${(props) => (props.$isMoving ? "none" : "all")};
|
||||
`;
|
||||
|
||||
const Disclosure = styled(CollapsedIcon)`
|
||||
position: absolute;
|
||||
left: -24px;
|
||||
|
||||
@@ -61,7 +61,7 @@ const Header = styled.button`
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-shrink: 0;
|
||||
padding: 20px 24px;
|
||||
padding: 16px 24px;
|
||||
position: relative;
|
||||
background: none;
|
||||
line-height: inherit;
|
||||
|
||||
@@ -17,7 +17,6 @@ type Props = {
|
||||
menuOpen?: boolean,
|
||||
iconColor?: string,
|
||||
active?: boolean,
|
||||
isActiveDrop?: boolean,
|
||||
theme: Theme,
|
||||
exact?: boolean,
|
||||
depth?: number,
|
||||
@@ -31,7 +30,6 @@ function SidebarLink({
|
||||
to,
|
||||
label,
|
||||
active,
|
||||
isActiveDrop,
|
||||
menu,
|
||||
menuOpen,
|
||||
theme,
|
||||
@@ -56,8 +54,7 @@ function SidebarLink({
|
||||
|
||||
return (
|
||||
<StyledNavLink
|
||||
$isActiveDrop={isActiveDrop}
|
||||
activeStyle={isActiveDrop ? undefined : activeStyle}
|
||||
activeStyle={activeStyle}
|
||||
style={active ? activeStyle : style}
|
||||
onClick={onClick}
|
||||
onMouseEnter={onMouseEnter}
|
||||
@@ -106,20 +103,12 @@ const StyledNavLink = styled(NavLink)`
|
||||
text-overflow: ellipsis;
|
||||
padding: 4px 16px;
|
||||
border-radius: 4px;
|
||||
background: ${(props) =>
|
||||
props.$isActiveDrop ? props.theme.slateDark : "inherit"};
|
||||
color: ${(props) =>
|
||||
props.$isActiveDrop ? props.theme.white : props.theme.sidebarText};
|
||||
color: ${(props) => props.theme.sidebarText};
|
||||
font-size: 15px;
|
||||
cursor: pointer;
|
||||
|
||||
svg {
|
||||
${(props) => (props.$isActiveDrop ? `fill: ${props.theme.white};` : "")}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: ${(props) =>
|
||||
props.$isActiveDrop ? props.theme.white : props.theme.text};
|
||||
color: ${(props) => props.theme.text};
|
||||
}
|
||||
|
||||
&:focus {
|
||||
|
||||
+34
-36
@@ -3,7 +3,6 @@ import distanceInWordsToNow from "date-fns/distance_in_words_to_now";
|
||||
import format from "date-fns/format";
|
||||
import * as React from "react";
|
||||
import Tooltip from "components/Tooltip";
|
||||
import useStores from "hooks/useStores";
|
||||
|
||||
let callbacks = [];
|
||||
|
||||
@@ -29,45 +28,44 @@ type Props = {
|
||||
shorten?: boolean,
|
||||
};
|
||||
|
||||
function Time(props: Props) {
|
||||
const { auth } = useStores();
|
||||
const [_, setMinutesMounted] = React.useState(0); // eslint-disable-line no-unused-vars
|
||||
const callback = React.useRef();
|
||||
class Time extends React.Component<Props> {
|
||||
removeEachMinuteCallback: () => void;
|
||||
|
||||
React.useEffect(() => {
|
||||
callback.current = eachMinute(() => {
|
||||
setMinutesMounted((state) => ++state);
|
||||
componentDidMount() {
|
||||
this.removeEachMinuteCallback = eachMinute(() => {
|
||||
this.forceUpdate();
|
||||
});
|
||||
|
||||
return () => {
|
||||
if (callback.current) {
|
||||
callback.current();
|
||||
}
|
||||
};
|
||||
}, []);
|
||||
|
||||
const { shorten, addSuffix } = props;
|
||||
let content = distanceInWordsToNow(props.dateTime, {
|
||||
addSuffix,
|
||||
locale: auth.user ? auth.user.language : undefined,
|
||||
});
|
||||
|
||||
if (shorten) {
|
||||
content = content
|
||||
.replace("about", "")
|
||||
.replace("less than a minute ago", "just now")
|
||||
.replace("minute", "min");
|
||||
}
|
||||
|
||||
return (
|
||||
<Tooltip
|
||||
tooltip={format(props.dateTime, "MMMM Do, YYYY h:mm a")}
|
||||
delay={props.tooltipDelay}
|
||||
placement="bottom"
|
||||
>
|
||||
<time dateTime={props.dateTime}>{props.children || content}</time>
|
||||
</Tooltip>
|
||||
);
|
||||
componentWillUnmount() {
|
||||
this.removeEachMinuteCallback();
|
||||
}
|
||||
|
||||
render() {
|
||||
const { shorten, addSuffix } = this.props;
|
||||
let content = distanceInWordsToNow(this.props.dateTime, {
|
||||
addSuffix,
|
||||
});
|
||||
|
||||
if (shorten) {
|
||||
content = content
|
||||
.replace("about", "")
|
||||
.replace("less than a minute ago", "just now")
|
||||
.replace("minute", "min");
|
||||
}
|
||||
|
||||
return (
|
||||
<Tooltip
|
||||
tooltip={format(this.props.dateTime, "MMMM Do, YYYY h:mm a")}
|
||||
delay={this.props.tooltipDelay}
|
||||
placement="bottom"
|
||||
>
|
||||
<time dateTime={this.props.dateTime}>
|
||||
{this.props.children || content}
|
||||
</time>
|
||||
</Tooltip>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Time;
|
||||
|
||||
+9
-12
@@ -3,10 +3,9 @@ import "mobx-react-lite/batchingForReactDom";
|
||||
import "focus-visible";
|
||||
import { Provider } from "mobx-react";
|
||||
import * as React from "react";
|
||||
import { DndProvider } from "react-dnd";
|
||||
import { HTML5Backend } from "react-dnd-html5-backend";
|
||||
import { render } from "react-dom";
|
||||
import { BrowserRouter as Router } from "react-router-dom";
|
||||
|
||||
import { initI18n } from "shared/i18n";
|
||||
import stores from "stores";
|
||||
import ErrorBoundary from "components/ErrorBoundary";
|
||||
@@ -25,16 +24,14 @@ if (element) {
|
||||
<ErrorBoundary>
|
||||
<Provider {...stores}>
|
||||
<Theme>
|
||||
<DndProvider backend={HTML5Backend}>
|
||||
<Router>
|
||||
<>
|
||||
<ScrollToTop>
|
||||
<Routes />
|
||||
</ScrollToTop>
|
||||
<Toasts />
|
||||
</>
|
||||
</Router>
|
||||
</DndProvider>
|
||||
<Router>
|
||||
<>
|
||||
<ScrollToTop>
|
||||
<Routes />
|
||||
</ScrollToTop>
|
||||
<Toasts />
|
||||
</>
|
||||
</Router>
|
||||
</Theme>
|
||||
</Provider>
|
||||
</ErrorBoundary>,
|
||||
|
||||
@@ -159,22 +159,22 @@ class CollectionMenu extends React.Component<Props> {
|
||||
type: "separator",
|
||||
},
|
||||
{
|
||||
title: `${t("Edit")}…`,
|
||||
title: t("Edit…"),
|
||||
visible: !!(collection && can.update),
|
||||
onClick: this.handleEditCollectionOpen,
|
||||
},
|
||||
{
|
||||
title: `${t("Permissions")}…`,
|
||||
title: t("Permissions…"),
|
||||
visible: !!(collection && can.update),
|
||||
onClick: this.handleMembersModalOpen,
|
||||
},
|
||||
{
|
||||
title: `${t("Export")}…`,
|
||||
title: t("Export…"),
|
||||
visible: !!(collection && can.export),
|
||||
onClick: this.handleExportCollectionOpen,
|
||||
},
|
||||
{
|
||||
title: `${t("Delete")}…`,
|
||||
title: t("Delete…"),
|
||||
visible: !!(collection && can.delete),
|
||||
onClick: this.handleDeleteCollectionOpen,
|
||||
},
|
||||
|
||||
@@ -200,7 +200,7 @@ class DocumentMenu extends React.Component<Props> {
|
||||
onClick: this.handleRestore,
|
||||
},
|
||||
{
|
||||
title: `${t("Restore")}…`,
|
||||
title: t("Restore…"),
|
||||
visible: !collection && !!can.restore,
|
||||
style: {
|
||||
left: -170,
|
||||
@@ -251,7 +251,7 @@ class DocumentMenu extends React.Component<Props> {
|
||||
visible: !document.isStarred && !!can.star,
|
||||
},
|
||||
{
|
||||
title: `${t("Share link")}…`,
|
||||
title: t("Share link…"),
|
||||
onClick: this.handleShareLink,
|
||||
visible: canShareDocuments,
|
||||
},
|
||||
@@ -274,7 +274,7 @@ class DocumentMenu extends React.Component<Props> {
|
||||
visible: !!can.createChildDocument,
|
||||
},
|
||||
{
|
||||
title: `${t("Create template")}…`,
|
||||
title: t("Create template…"),
|
||||
onClick: this.handleOpenTemplateModal,
|
||||
visible: !!can.update && !document.isTemplate,
|
||||
},
|
||||
@@ -299,12 +299,12 @@ class DocumentMenu extends React.Component<Props> {
|
||||
visible: !!can.archive,
|
||||
},
|
||||
{
|
||||
title: `${t("Delete")}…`,
|
||||
title: t("Delete…"),
|
||||
onClick: this.handleDelete,
|
||||
visible: !!can.delete,
|
||||
},
|
||||
{
|
||||
title: `${t("Move")}…`,
|
||||
title: t("Move…"),
|
||||
onClick: this.handleMove,
|
||||
visible: !!can.move,
|
||||
},
|
||||
|
||||
@@ -78,7 +78,7 @@ class GroupMenu extends React.Component<Props> {
|
||||
<DropdownMenuItems
|
||||
items={[
|
||||
{
|
||||
title: `${t("Members")}…`,
|
||||
title: t("Members…"),
|
||||
onClick: this.props.onMembers,
|
||||
visible: !!(group && can.read),
|
||||
},
|
||||
@@ -86,12 +86,12 @@ class GroupMenu extends React.Component<Props> {
|
||||
type: "separator",
|
||||
},
|
||||
{
|
||||
title: `${t("Edit")}…`,
|
||||
title: t("Edit…"),
|
||||
onClick: this.onEdit,
|
||||
visible: !!(group && can.update),
|
||||
},
|
||||
{
|
||||
title: `${t("Delete")}…`,
|
||||
title: t("Delete…"),
|
||||
onClick: this.onDelete,
|
||||
visible: !!(group && can.delete),
|
||||
},
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import { observable } from "mobx";
|
||||
import { observer, inject } from "mobx-react";
|
||||
import * as React from "react";
|
||||
import { Trans, withTranslation, type TFunction } from "react-i18next";
|
||||
import { withTranslation, type TFunction } from "react-i18next";
|
||||
import { Redirect } from "react-router-dom";
|
||||
|
||||
import CollectionsStore from "stores/CollectionsStore";
|
||||
@@ -43,7 +43,6 @@ class NewChildDocumentMenu extends React.Component<Props> {
|
||||
|
||||
const { label, document, collections, t } = this.props;
|
||||
const collection = collections.get(document.collectionId);
|
||||
const collectionName = collection ? collection.name : t("collection");
|
||||
|
||||
return (
|
||||
<DropdownMenu label={label}>
|
||||
@@ -51,9 +50,12 @@ class NewChildDocumentMenu extends React.Component<Props> {
|
||||
items={[
|
||||
{
|
||||
title: (
|
||||
<Trans>
|
||||
New document in <strong>{{ collectionName }}</strong>
|
||||
</Trans>
|
||||
<span>
|
||||
{t("New document in")}{" "}
|
||||
<strong>
|
||||
{collection ? collection.name : t("collection")}
|
||||
</strong>
|
||||
</span>
|
||||
),
|
||||
onClick: this.handleNewDocument,
|
||||
},
|
||||
|
||||
@@ -45,7 +45,7 @@ class NewTemplateMenu extends React.Component<Props> {
|
||||
label={
|
||||
label || (
|
||||
<Button icon={<PlusIcon />} small>
|
||||
{t("New template")}…
|
||||
{t("New template…")}
|
||||
</Button>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ class UserMenu extends React.Component<Props> {
|
||||
type: "separator",
|
||||
},
|
||||
{
|
||||
title: `${t("Revoke invite")}…`,
|
||||
title: t("Revoke invite…"),
|
||||
onClick: this.handleRevoke,
|
||||
visible: user.isInvited,
|
||||
},
|
||||
@@ -109,7 +109,7 @@ class UserMenu extends React.Component<Props> {
|
||||
visible: !user.isInvited && user.isSuspended,
|
||||
},
|
||||
{
|
||||
title: `${t("Suspend account")}…`,
|
||||
title: t("Suspend account…"),
|
||||
onClick: this.handleSuspend,
|
||||
visible: !user.isInvited && !user.isSuspended,
|
||||
},
|
||||
|
||||
@@ -79,12 +79,12 @@ export default class Collection extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
pathToDocument(documentId: string) {
|
||||
pathToDocument(document: Document) {
|
||||
let path;
|
||||
const traveler = (nodes, previousPath) => {
|
||||
nodes.forEach((childNode) => {
|
||||
const newPath = [...previousPath, childNode];
|
||||
if (childNode.id === documentId) {
|
||||
if (childNode.id === document.id) {
|
||||
path = newPath;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@ export default class Document extends BaseModel {
|
||||
@action
|
||||
view = () => {
|
||||
// we don't record views for documents in the trash
|
||||
if (this.isDeleted || !this.publishedAt) {
|
||||
if (this.isDeleted) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@ export default class Document extends BaseModel {
|
||||
};
|
||||
|
||||
move = (collectionId: string, parentDocumentId: ?string) => {
|
||||
return this.store.move(this.id, collectionId, parentDocumentId);
|
||||
return this.store.move(this, collectionId, parentDocumentId);
|
||||
};
|
||||
|
||||
duplicate = () => {
|
||||
|
||||
@@ -144,7 +144,7 @@ class CollectionScene extends React.Component<Props> {
|
||||
<Action>
|
||||
<InputSearch
|
||||
source="collection"
|
||||
placeholder={`${t("Search in collection")}…`}
|
||||
placeholder={t("Search in collection…")}
|
||||
collectionId={match.params.id}
|
||||
/>
|
||||
</Action>
|
||||
@@ -207,7 +207,7 @@ class CollectionScene extends React.Component<Props> {
|
||||
|
||||
{collection.private && (
|
||||
<Button onClick={this.onPermissions} neutral>
|
||||
{t("Manage members")}…
|
||||
{t("Manage members…")}
|
||||
</Button>
|
||||
)}
|
||||
</Wrapper>
|
||||
|
||||
@@ -120,7 +120,7 @@ class CollectionEdit extends React.Component<Props> {
|
||||
type="submit"
|
||||
disabled={this.isSaving || !this.props.collection.name}
|
||||
>
|
||||
{this.isSaving ? `${t("Saving")}…` : t("Save")}
|
||||
{this.isSaving ? t("Saving…") : t("Save")}
|
||||
</Button>
|
||||
</form>
|
||||
</Flex>
|
||||
|
||||
@@ -92,7 +92,7 @@ class AddGroupsToCollection extends React.Component<Props> {
|
||||
|
||||
<Input
|
||||
type="search"
|
||||
placeholder={`${t("Search by group name")}…`}
|
||||
placeholder={t("Search by group name…")}
|
||||
value={this.query}
|
||||
onChange={this.handleFilter}
|
||||
label={t("Search groups")}
|
||||
|
||||
@@ -86,7 +86,7 @@ class AddPeopleToCollection extends React.Component<Props> {
|
||||
|
||||
<Input
|
||||
type="search"
|
||||
placeholder={`${t("Search by name")}…`}
|
||||
placeholder={t("Search by name…")}
|
||||
value={this.query}
|
||||
onChange={this.handleFilter}
|
||||
label={t("Search people")}
|
||||
|
||||
@@ -52,7 +52,7 @@ const MemberListItem = ({
|
||||
<ButtonWrap>
|
||||
<DropdownMenu>
|
||||
<DropdownMenuItem onClick={openMembersModal}>
|
||||
{t("Members")}…
|
||||
{t("Members…")}
|
||||
</DropdownMenuItem>
|
||||
<hr />
|
||||
<DropdownMenuItem onClick={onRemove}>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// @flow
|
||||
import * as React from "react";
|
||||
import { Trans, useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import styled from "styled-components";
|
||||
import Membership from "models/Membership";
|
||||
import User from "models/User";
|
||||
@@ -46,9 +46,11 @@ const MemberListItem = ({
|
||||
subtitle={
|
||||
<>
|
||||
{user.lastActiveAt ? (
|
||||
<Trans>
|
||||
Active <Time dateTime={user.lastActiveAt} /> ago
|
||||
</Trans>
|
||||
<>
|
||||
{t("Active {{ lastActiveAt }} ago", {
|
||||
lastActiveAt: <Time dateTime={user.lastActiveAt} />,
|
||||
})}
|
||||
</>
|
||||
) : (
|
||||
t("Never signed in")
|
||||
)}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// @flow
|
||||
import { PlusIcon } from "outline-icons";
|
||||
import * as React from "react";
|
||||
import { Trans, useTranslation } from "react-i18next";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import User from "models/User";
|
||||
import Avatar from "components/Avatar";
|
||||
import Badge from "components/Badge";
|
||||
@@ -25,9 +25,11 @@ const UserListItem = ({ user, onAdd, canEdit }: Props) => {
|
||||
subtitle={
|
||||
<>
|
||||
{user.lastActiveAt ? (
|
||||
<Trans>
|
||||
Active <Time dateTime={user.lastActiveAt} /> ago
|
||||
</Trans>
|
||||
<>
|
||||
{t("Active {{ lastActiveAt }} ago", {
|
||||
lastActiveAt: <Time dateTime={user.lastActiveAt} />,
|
||||
})}
|
||||
</>
|
||||
) : (
|
||||
t("Never signed in")
|
||||
)}
|
||||
|
||||
@@ -148,7 +148,7 @@ class CollectionNew extends React.Component<Props> {
|
||||
</HelpText>
|
||||
|
||||
<Button type="submit" disabled={this.isSaving || !this.name}>
|
||||
{this.isSaving ? `${t("Creating")}…` : t("Create")}
|
||||
{this.isSaving ? t("Creating…") : t("Create")}
|
||||
</Button>
|
||||
</form>
|
||||
);
|
||||
|
||||
@@ -203,7 +203,7 @@ class Header extends React.Component<Props> {
|
||||
<Wrapper align="center" justify="flex-end">
|
||||
{isSaving && !isPublishing && (
|
||||
<Action>
|
||||
<Status>{t("Saving")}…</Status>
|
||||
<Status>{t("Saving…")}</Status>
|
||||
</Action>
|
||||
)}
|
||||
|
||||
@@ -331,7 +331,7 @@ class Header extends React.Component<Props> {
|
||||
disabled={publishingIsDisabled}
|
||||
small
|
||||
>
|
||||
{isPublishing ? `${t("Publishing")}…` : t("Publish")}
|
||||
{isPublishing ? t("Publishing…") : t("Publish")}
|
||||
</Button>
|
||||
</Tooltip>
|
||||
</Action>
|
||||
|
||||
@@ -16,9 +16,8 @@ class MarkAsViewed extends React.Component<Props> {
|
||||
const { document } = this.props;
|
||||
|
||||
this.viewTimeout = setTimeout(async () => {
|
||||
const view = await document.view();
|
||||
|
||||
if (view) {
|
||||
if (document.publishedAt) {
|
||||
const view = await document.view();
|
||||
document.updateLastViewed(view);
|
||||
}
|
||||
}, MARK_AS_VIEWED_AFTER);
|
||||
|
||||
@@ -88,7 +88,7 @@ class AddPeopleToGroup extends React.Component<Props> {
|
||||
|
||||
<Input
|
||||
type="search"
|
||||
placeholder={`${t("Search by name")}…`}
|
||||
placeholder={t("Search by name…")}
|
||||
value={this.query}
|
||||
onChange={this.handleFilter}
|
||||
label={t("Search people")}
|
||||
|
||||
@@ -82,7 +82,7 @@ class GroupMembers extends React.Component<Props> {
|
||||
icon={<PlusIcon />}
|
||||
neutral
|
||||
>
|
||||
{t("Add people")}…
|
||||
{t("Add people…")}
|
||||
</Button>
|
||||
</span>
|
||||
</>
|
||||
|
||||
@@ -270,7 +270,7 @@ class Search extends React.Component<Props> {
|
||||
)}
|
||||
<ResultsWrapper pinToTop={this.pinToTop} column auto>
|
||||
<SearchField
|
||||
placeholder={`${t("Search")}…`}
|
||||
placeholder={t("Search…")}
|
||||
onKeyDown={this.handleKeyDown}
|
||||
onChange={this.updateLocation}
|
||||
defaultValue={this.query}
|
||||
|
||||
@@ -146,7 +146,7 @@ class Profile extends React.Component<Props> {
|
||||
.
|
||||
</HelpText>
|
||||
<Button type="submit" disabled={isSaving || !this.isValid}>
|
||||
{isSaving ? `${t("Saving")}…` : t("Save")}
|
||||
{isSaving ? t("Saving…") : t("Save")}
|
||||
</Button>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ class ImageUpload extends React.Component<Props> {
|
||||
@observable isUploading: boolean = false;
|
||||
@observable isCropping: boolean = false;
|
||||
@observable zoom: number = 1;
|
||||
@observable file: File;
|
||||
file: File;
|
||||
avatarEditorRef: AvatarEditor;
|
||||
|
||||
static defaultProps = {
|
||||
@@ -128,12 +128,7 @@ class ImageUpload extends React.Component<Props> {
|
||||
style={EMPTY_OBJECT}
|
||||
disablePreview
|
||||
>
|
||||
{({ getRootProps, getInputProps, isDragActive }) => (
|
||||
<div {...getRootProps()} {...{ isDragActive }}>
|
||||
<input {...getInputProps()} />
|
||||
{this.props.children}
|
||||
</div>
|
||||
)}
|
||||
{this.props.children}
|
||||
</Dropzone>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
// @flow
|
||||
import distanceInWordsToNow from "date-fns/distance_in_words_to_now";
|
||||
import { observer } from "mobx-react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { EditIcon } from "outline-icons";
|
||||
import * as React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { withRouter, type RouterHistory } from "react-router-dom";
|
||||
import styled from "styled-components";
|
||||
import { settings } from "shared/utils/routeHelpers";
|
||||
import AuthStore from "stores/AuthStore";
|
||||
import DocumentsStore from "stores/DocumentsStore";
|
||||
import User from "models/User";
|
||||
import Avatar from "components/Avatar";
|
||||
import Badge from "components/Badge";
|
||||
@@ -16,23 +18,20 @@ import HelpText from "components/HelpText";
|
||||
import Modal from "components/Modal";
|
||||
import PaginatedDocumentList from "components/PaginatedDocumentList";
|
||||
import Subheading from "components/Subheading";
|
||||
import useCurrentUser from "hooks/useCurrentUser";
|
||||
import useStores from "hooks/useStores";
|
||||
|
||||
type Props = {
|
||||
user: User,
|
||||
auth: AuthStore,
|
||||
documents: DocumentsStore,
|
||||
history: RouterHistory,
|
||||
onRequestClose: () => void,
|
||||
};
|
||||
|
||||
function UserProfile(props: Props) {
|
||||
const { t } = useTranslation();
|
||||
const { documents } = useStores();
|
||||
const currentUser = useCurrentUser();
|
||||
const { user, ...rest } = props;
|
||||
|
||||
const { user, auth, documents, ...rest } = props;
|
||||
if (!user) return null;
|
||||
const isCurrentUser = currentUser.id === user.id;
|
||||
const isCurrentUser = auth.user && auth.user.id === user.id;
|
||||
|
||||
return (
|
||||
<Modal
|
||||
@@ -61,7 +60,7 @@ function UserProfile(props: Props) {
|
||||
{isCurrentUser && (
|
||||
<Edit>
|
||||
<Button
|
||||
onClick={() => props.history.push(settings())}
|
||||
onClick={() => this.props.history.push(settings())}
|
||||
icon={<EditIcon />}
|
||||
neutral
|
||||
>
|
||||
@@ -104,4 +103,4 @@ const Meta = styled(HelpText)`
|
||||
margin-top: -12px;
|
||||
`;
|
||||
|
||||
export default withRouter(observer(UserProfile));
|
||||
export default inject("documents", "auth")(withRouter(observer(UserProfile)));
|
||||
|
||||
@@ -19,7 +19,6 @@ export default class DocumentsStore extends BaseStore<Document> {
|
||||
@observable searchCache: Map<string, SearchResult[]> = new Map();
|
||||
@observable starredIds: Map<string, boolean> = new Map();
|
||||
@observable backlinks: Map<string, string[]> = new Map();
|
||||
@observable movingDocumentId: ?string;
|
||||
|
||||
importFileTypes: string[] = [
|
||||
"text/markdown",
|
||||
@@ -451,26 +450,20 @@ export default class DocumentsStore extends BaseStore<Document> {
|
||||
|
||||
@action
|
||||
move = async (
|
||||
documentId: string,
|
||||
document: Document,
|
||||
collectionId: string,
|
||||
parentDocumentId: ?string
|
||||
) => {
|
||||
this.movingDocumentId = documentId;
|
||||
const res = await client.post("/documents.move", {
|
||||
id: document.id,
|
||||
collectionId,
|
||||
parentDocumentId,
|
||||
});
|
||||
invariant(res && res.data, "Data not available");
|
||||
|
||||
try {
|
||||
const res = await client.post("/documents.move", {
|
||||
id: documentId,
|
||||
collectionId,
|
||||
parentDocumentId,
|
||||
});
|
||||
invariant(res && res.data, "Data not available");
|
||||
|
||||
res.data.documents.forEach(this.add);
|
||||
res.data.collections.forEach(this.rootStore.collections.add);
|
||||
this.addPolicies(res.policies);
|
||||
} finally {
|
||||
this.movingDocumentId = undefined;
|
||||
}
|
||||
res.data.documents.forEach(this.add);
|
||||
res.data.collections.forEach(this.rootStore.collections.add);
|
||||
this.addPolicies(res.policies);
|
||||
};
|
||||
|
||||
@action
|
||||
|
||||
@@ -23,7 +23,6 @@ class UiStore {
|
||||
@observable editMode: boolean = false;
|
||||
@observable tocVisible: boolean = false;
|
||||
@observable mobileSidebarVisible: boolean = false;
|
||||
@observable sidebarCollapsed: boolean = false;
|
||||
@observable toasts: Map<string, Toast> = new Map();
|
||||
|
||||
constructor() {
|
||||
@@ -52,7 +51,6 @@ class UiStore {
|
||||
|
||||
// persisted keys
|
||||
this.languagePromptDismissed = data.languagePromptDismissed;
|
||||
this.sidebarCollapsed = data.sidebarCollapsed;
|
||||
this.tocVisible = data.tocVisible;
|
||||
this.theme = data.theme || "system";
|
||||
|
||||
@@ -109,21 +107,6 @@ class UiStore {
|
||||
this.activeCollectionId = undefined;
|
||||
};
|
||||
|
||||
@action
|
||||
collapseSidebar = () => {
|
||||
this.sidebarCollapsed = true;
|
||||
};
|
||||
|
||||
@action
|
||||
expandSidebar = () => {
|
||||
this.sidebarCollapsed = false;
|
||||
};
|
||||
|
||||
@action
|
||||
toggleCollapsedSidebar = () => {
|
||||
this.sidebarCollapsed = !this.sidebarCollapsed;
|
||||
};
|
||||
|
||||
@action
|
||||
showTableOfContents = () => {
|
||||
this.tocVisible = true;
|
||||
@@ -207,7 +190,6 @@ class UiStore {
|
||||
get asJson(): string {
|
||||
return JSON.stringify({
|
||||
tocVisible: this.tocVisible,
|
||||
sidebarCollapsed: this.sidebarCollapsed,
|
||||
languagePromptDismissed: this.languagePromptDismissed,
|
||||
theme: this.theme,
|
||||
});
|
||||
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
// flow-typed signature: c69369aa4bc769d5f1d4f6ec9c76d8f2
|
||||
// flow-typed version: c6154227d1/react-dropzone_v4.x.x/flow_>=v0.104.x
|
||||
|
||||
declare module "react-dropzone" {
|
||||
declare type ChildrenProps = {
|
||||
draggedFiles: Array<File>,
|
||||
acceptedFiles: Array<File>,
|
||||
rejectedFiles: Array<File>,
|
||||
isDragActive: boolean,
|
||||
isDragAccept: boolean,
|
||||
isDragReject: boolean,
|
||||
...
|
||||
}
|
||||
|
||||
declare type DropzoneFile = File & { preview?: string, ... }
|
||||
|
||||
declare type DropzoneProps = {
|
||||
accept?: string,
|
||||
children?: React$Node | (ChildrenProps) => React$Node,
|
||||
disableClick?: boolean,
|
||||
disabled?: boolean,
|
||||
disablePreview?: boolean,
|
||||
preventDropOnDocument?: boolean,
|
||||
inputProps?: Object,
|
||||
multiple?: boolean,
|
||||
name?: string,
|
||||
maxSize?: number,
|
||||
minSize?: number,
|
||||
className?: string,
|
||||
activeClassName?: string,
|
||||
acceptClassName?: string,
|
||||
rejectClassName?: string,
|
||||
disabledClassName?: string,
|
||||
style?: Object,
|
||||
activeStyle?: Object,
|
||||
acceptStyle?: Object,
|
||||
rejectStyle?: Object,
|
||||
disabledStyle?: Object,
|
||||
onClick?: (event: SyntheticMouseEvent<>) => mixed,
|
||||
onDrop?: (acceptedFiles: Array<DropzoneFile>, rejectedFiles: Array<DropzoneFile>, event: SyntheticDragEvent<>) => mixed,
|
||||
onDropAccepted?: (acceptedFiles: Array<DropzoneFile>, event: SyntheticDragEvent<>) => mixed,
|
||||
onDropRejected?: (rejectedFiles: Array<DropzoneFile>, event: SyntheticDragEvent<>) => mixed,
|
||||
onDragStart?: (event: SyntheticDragEvent<>) => mixed,
|
||||
onDragEnter?: (event: SyntheticDragEvent<>) => mixed,
|
||||
onDragOver?: (event: SyntheticDragEvent<>) => mixed,
|
||||
onDragLeave?: (event: SyntheticDragEvent<>) => mixed,
|
||||
onFileDialogCancel?: () => mixed,
|
||||
...
|
||||
};
|
||||
|
||||
declare class Dropzone extends React$Component<DropzoneProps> {
|
||||
open(): void;
|
||||
}
|
||||
|
||||
declare module.exports: typeof Dropzone;
|
||||
}
|
||||
+2
-4
@@ -137,8 +137,6 @@
|
||||
"react-autosize-textarea": "^6.0.0",
|
||||
"react-avatar-editor": "^10.3.0",
|
||||
"react-color": "^2.17.3",
|
||||
"react-dnd": "^11.1.3",
|
||||
"react-dnd-html5-backend": "^11.1.3",
|
||||
"react-dom": "^16.8.6",
|
||||
"react-dropzone": "^11.2.4",
|
||||
"react-helmet": "^5.2.0",
|
||||
@@ -150,7 +148,7 @@
|
||||
"react-virtualized-auto-sizer": "^1.0.2",
|
||||
"react-waypoint": "^9.0.2",
|
||||
"react-window": "^1.8.6",
|
||||
"rich-markdown-editor": "^11.0.11",
|
||||
"rich-markdown-editor": "^11.0.7",
|
||||
"semver": "^7.3.2",
|
||||
"sequelize": "^6.3.4",
|
||||
"sequelize-cli": "^6.2.0",
|
||||
@@ -206,5 +204,5 @@
|
||||
"dot-prop": "^5.2.0",
|
||||
"js-yaml": "^3.13.1"
|
||||
},
|
||||
"version": "0.51.0"
|
||||
"version": "0.50.0"
|
||||
}
|
||||
@@ -92,38 +92,6 @@ router.post("attachments.create", auth(), async (ctx) => {
|
||||
};
|
||||
});
|
||||
|
||||
router.post("attachments.delete", auth(), async (ctx) => {
|
||||
let { id } = ctx.body;
|
||||
ctx.assertPresent(id, "id is required");
|
||||
|
||||
const user = ctx.state.user;
|
||||
const attachment = await Attachment.findByPk(id);
|
||||
if (!attachment) {
|
||||
throw new NotFoundError();
|
||||
}
|
||||
|
||||
if (attachment.documentId) {
|
||||
const document = await Document.findByPk(attachment.documentId, {
|
||||
userId: user.id,
|
||||
});
|
||||
authorize(user, "update", document);
|
||||
}
|
||||
|
||||
authorize(user, "delete", attachment);
|
||||
await attachment.destroy();
|
||||
|
||||
await Event.create({
|
||||
name: "attachments.delete",
|
||||
teamId: user.teamId,
|
||||
userId: user.id,
|
||||
ip: ctx.request.ip,
|
||||
});
|
||||
|
||||
ctx.body = {
|
||||
success: true,
|
||||
};
|
||||
});
|
||||
|
||||
router.post("attachments.redirect", auth(), async (ctx) => {
|
||||
const { id } = ctx.body;
|
||||
ctx.assertPresent(id, "id is required");
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/* eslint-disable flowtype/require-valid-file-annotation */
|
||||
import TestServer from "fetch-test-server";
|
||||
import app from "../app";
|
||||
import { Attachment } from "../models";
|
||||
import {
|
||||
buildUser,
|
||||
buildCollection,
|
||||
@@ -12,127 +11,9 @@ import { flushdb } from "../test/support";
|
||||
|
||||
const server = new TestServer(app.callback());
|
||||
|
||||
jest.mock("aws-sdk", () => {
|
||||
const mS3 = { deleteObject: jest.fn().mockReturnThis(), promise: jest.fn() };
|
||||
return {
|
||||
S3: jest.fn(() => mS3),
|
||||
Endpoint: jest.fn(),
|
||||
};
|
||||
});
|
||||
|
||||
beforeEach(() => flushdb());
|
||||
afterAll(() => server.close());
|
||||
|
||||
describe("#attachments.delete", () => {
|
||||
it("should require authentication", async () => {
|
||||
const res = await server.post("/api/attachments.delete");
|
||||
expect(res.status).toEqual(401);
|
||||
});
|
||||
|
||||
it("should allow deleting an attachment belonging to a document user has access to", async () => {
|
||||
const user = await buildUser();
|
||||
const attachment = await buildAttachment({
|
||||
teamId: user.teamId,
|
||||
userId: user.id,
|
||||
});
|
||||
const res = await server.post("/api/attachments.delete", {
|
||||
body: { token: user.getJwtToken(), id: attachment.id },
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(200);
|
||||
expect(await Attachment.count()).toEqual(0);
|
||||
});
|
||||
|
||||
it("should allow deleting an attachment without a document created by user", async () => {
|
||||
const user = await buildUser();
|
||||
const attachment = await buildAttachment({
|
||||
teamId: user.teamId,
|
||||
userId: user.id,
|
||||
});
|
||||
|
||||
attachment.documentId = null;
|
||||
await attachment.save();
|
||||
|
||||
const res = await server.post("/api/attachments.delete", {
|
||||
body: { token: user.getJwtToken(), id: attachment.id },
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(200);
|
||||
expect(await Attachment.count()).toEqual(0);
|
||||
});
|
||||
|
||||
it("should allow deleting an attachment without a document if admin", async () => {
|
||||
const user = await buildUser({ isAdmin: true });
|
||||
const attachment = await buildAttachment({
|
||||
teamId: user.teamId,
|
||||
});
|
||||
|
||||
attachment.documentId = null;
|
||||
await attachment.save();
|
||||
|
||||
const res = await server.post("/api/attachments.delete", {
|
||||
body: { token: user.getJwtToken(), id: attachment.id },
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(200);
|
||||
expect(await Attachment.count()).toEqual(0);
|
||||
});
|
||||
|
||||
it("should not allow deleting an attachment in another team", async () => {
|
||||
const user = await buildUser({ isAdmin: true });
|
||||
const attachment = await buildAttachment();
|
||||
|
||||
attachment.documentId = null;
|
||||
await attachment.save();
|
||||
|
||||
const res = await server.post("/api/attachments.delete", {
|
||||
body: { token: user.getJwtToken(), id: attachment.id },
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(403);
|
||||
});
|
||||
|
||||
it("should not allow deleting an attachment without a document", async () => {
|
||||
const user = await buildUser();
|
||||
const attachment = await buildAttachment({
|
||||
teamId: user.teamId,
|
||||
});
|
||||
|
||||
attachment.documentId = null;
|
||||
await attachment.save();
|
||||
|
||||
const res = await server.post("/api/attachments.delete", {
|
||||
body: { token: user.getJwtToken(), id: attachment.id },
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(403);
|
||||
});
|
||||
|
||||
it("should not allow deleting an attachment belonging to a document user does not have access to", async () => {
|
||||
const user = await buildUser();
|
||||
const collection = await buildCollection({
|
||||
private: true,
|
||||
});
|
||||
const document = await buildDocument({
|
||||
teamId: collection.teamId,
|
||||
userId: collection.userId,
|
||||
collectionId: collection.id,
|
||||
});
|
||||
const attachment = await buildAttachment({
|
||||
teamId: document.teamId,
|
||||
userId: document.userId,
|
||||
documentId: document.id,
|
||||
acl: "private",
|
||||
});
|
||||
|
||||
const res = await server.post("/api/attachments.delete", {
|
||||
body: { token: user.getJwtToken(), id: attachment.id },
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(403);
|
||||
});
|
||||
});
|
||||
|
||||
describe("#attachments.redirect", () => {
|
||||
it("should require authentication", async () => {
|
||||
const res = await server.post("/api/attachments.redirect");
|
||||
|
||||
+1
-1
@@ -31,13 +31,13 @@ const api = new Koa();
|
||||
const router = new Router();
|
||||
|
||||
// middlewares
|
||||
api.use(errorHandling());
|
||||
api.use(
|
||||
bodyParser({
|
||||
multipart: true,
|
||||
formidable: { maxFieldsSize: 10 * 1024 * 1024 },
|
||||
})
|
||||
);
|
||||
api.use(errorHandling());
|
||||
api.use(methodOverride());
|
||||
api.use(validation());
|
||||
api.use(apiWrapper());
|
||||
|
||||
+10
-12
@@ -37,20 +37,18 @@ router.post("team.update", auth(), async (ctx) => {
|
||||
|
||||
await team.save();
|
||||
|
||||
if (changes) {
|
||||
for (const change of changes) {
|
||||
data[change] = team[change];
|
||||
}
|
||||
|
||||
await Event.create({
|
||||
name: "teams.update",
|
||||
actorId: user.id,
|
||||
teamId: user.teamId,
|
||||
data,
|
||||
ip: ctx.request.ip,
|
||||
});
|
||||
for (const change of changes) {
|
||||
data[change] = team[change];
|
||||
}
|
||||
|
||||
await Event.create({
|
||||
name: "teams.update",
|
||||
actorId: user.id,
|
||||
teamId: user.teamId,
|
||||
data,
|
||||
ip: ctx.request.ip,
|
||||
});
|
||||
|
||||
ctx.body = {
|
||||
data: presentTeam(team),
|
||||
policies: presentPolicies(user, [team]),
|
||||
|
||||
@@ -21,17 +21,6 @@ describe("#team.update", () => {
|
||||
expect(body.data.name).toEqual("New name");
|
||||
});
|
||||
|
||||
it("should allow identical team details", async () => {
|
||||
const { admin, team } = await seed();
|
||||
const res = await server.post("/api/team.update", {
|
||||
body: { token: admin.getJwtToken(), name: team.name },
|
||||
});
|
||||
const body = await res.json();
|
||||
|
||||
expect(res.status).toEqual(200);
|
||||
expect(body.data.name).toEqual(team.name);
|
||||
});
|
||||
|
||||
it("should require admin", async () => {
|
||||
const { user } = await seed();
|
||||
const res = await server.post("/api/team.update", {
|
||||
|
||||
+18
-54
@@ -4,80 +4,44 @@ import debug from "debug";
|
||||
import Router from "koa-router";
|
||||
import { AuthenticationError } from "../errors";
|
||||
import { Document, Attachment } from "../models";
|
||||
import { Op, sequelize } from "../sequelize";
|
||||
import parseAttachmentIds from "../utils/parseAttachmentIds";
|
||||
import { Op } from "../sequelize";
|
||||
|
||||
const router = new Router();
|
||||
const log = debug("utils");
|
||||
|
||||
router.post("utils.gc", async (ctx) => {
|
||||
const { token, limit = 500 } = ctx.body;
|
||||
const { token } = ctx.body;
|
||||
|
||||
if (process.env.UTILS_SECRET !== token) {
|
||||
throw new AuthenticationError("Invalid secret token");
|
||||
}
|
||||
|
||||
log(`Permanently destroying upto ${limit} documents older than 30 days…`);
|
||||
log("Permanently deleting documents older than 30 days…");
|
||||
|
||||
const where = {
|
||||
deletedAt: {
|
||||
[Op.lt]: subDays(new Date(), 30),
|
||||
},
|
||||
};
|
||||
|
||||
const documents = await Document.scope("withUnpublished").findAll({
|
||||
attributes: ["id", "teamId", "text"],
|
||||
attributes: ["id"],
|
||||
where,
|
||||
});
|
||||
const documentIds = documents.map((d) => d.id);
|
||||
|
||||
await Attachment.destroy({
|
||||
where: {
|
||||
deletedAt: {
|
||||
[Op.lt]: subDays(new Date(), 30),
|
||||
},
|
||||
documentId: documentIds,
|
||||
},
|
||||
paranoid: false,
|
||||
limit,
|
||||
});
|
||||
|
||||
const query = `
|
||||
SELECT COUNT(id)
|
||||
FROM documents
|
||||
WHERE "searchVector" @@ to_tsquery('english', :query) AND
|
||||
"teamId" = :teamId AND
|
||||
"id" != :documentId
|
||||
`;
|
||||
|
||||
for (const document of documents) {
|
||||
const attachmentIds = parseAttachmentIds(document.text);
|
||||
|
||||
for (const attachmentId of attachmentIds) {
|
||||
const [{ count }] = await sequelize.query(query, {
|
||||
type: sequelize.QueryTypes.SELECT,
|
||||
replacements: {
|
||||
documentId: document.id,
|
||||
teamId: document.teamId,
|
||||
query: attachmentId,
|
||||
},
|
||||
});
|
||||
|
||||
if (parseInt(count) === 0) {
|
||||
const attachment = await Attachment.findOne({
|
||||
where: {
|
||||
teamId: document.teamId,
|
||||
id: attachmentId,
|
||||
},
|
||||
});
|
||||
|
||||
if (attachment) {
|
||||
await attachment.destroy();
|
||||
|
||||
log(`Attachment ${attachmentId} deleted`);
|
||||
} else {
|
||||
log(`Unknown attachment ${attachmentId} ignored`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await Document.scope("withUnpublished").destroy({
|
||||
where: {
|
||||
id: documents.map((document) => document.id),
|
||||
},
|
||||
where,
|
||||
force: true,
|
||||
});
|
||||
|
||||
log(`Destroyed ${documents.length} documents`);
|
||||
log(`Deleted ${documentIds.length} documents`);
|
||||
|
||||
ctx.body = {
|
||||
success: true,
|
||||
|
||||
+31
-103
@@ -2,141 +2,69 @@
|
||||
import subDays from "date-fns/sub_days";
|
||||
import TestServer from "fetch-test-server";
|
||||
import app from "../app";
|
||||
import { Attachment, Document } from "../models";
|
||||
import { buildAttachment, buildDocument } from "../test/factories";
|
||||
import { Document } from "../models";
|
||||
import { sequelize } from "../sequelize";
|
||||
import { buildDocument } from "../test/factories";
|
||||
import { flushdb } from "../test/support";
|
||||
|
||||
const server = new TestServer(app.callback());
|
||||
|
||||
jest.mock("aws-sdk", () => {
|
||||
const mS3 = { deleteObject: jest.fn().mockReturnThis(), promise: jest.fn() };
|
||||
return {
|
||||
S3: jest.fn(() => mS3),
|
||||
Endpoint: jest.fn(),
|
||||
};
|
||||
});
|
||||
|
||||
beforeEach(() => flushdb());
|
||||
afterAll(() => server.close());
|
||||
|
||||
describe("#utils.gc", () => {
|
||||
it("should destroy documents deleted more than 30 days ago", async () => {
|
||||
await buildDocument({
|
||||
const document = await buildDocument({
|
||||
publishedAt: new Date(),
|
||||
deletedAt: subDays(new Date(), 60),
|
||||
});
|
||||
|
||||
await sequelize.query(
|
||||
`UPDATE documents SET "deletedAt" = '${subDays(
|
||||
new Date(),
|
||||
60
|
||||
).toISOString()}' WHERE id = '${document.id}'`
|
||||
);
|
||||
|
||||
const res = await server.post("/api/utils.gc", {
|
||||
body: {
|
||||
token: process.env.UTILS_SECRET,
|
||||
},
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(200);
|
||||
expect(await Document.scope().count()).toEqual(0);
|
||||
});
|
||||
|
||||
it("should destroy attachments no longer referenced", async () => {
|
||||
const document = await buildDocument({
|
||||
publishedAt: subDays(new Date(), 90),
|
||||
deletedAt: subDays(new Date(), 60),
|
||||
});
|
||||
|
||||
const attachment = await buildAttachment({
|
||||
teamId: document.teamId,
|
||||
documentId: document.id,
|
||||
});
|
||||
|
||||
document.text = ``;
|
||||
await document.save();
|
||||
|
||||
const res = await server.post("/api/utils.gc", {
|
||||
body: {
|
||||
token: process.env.UTILS_SECRET,
|
||||
const reloaded = await Document.scope().findOne({
|
||||
where: {
|
||||
id: document.id,
|
||||
},
|
||||
paranoid: false,
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(200);
|
||||
expect(await Attachment.count()).toEqual(0);
|
||||
expect(await Document.scope().count()).toEqual(0);
|
||||
});
|
||||
|
||||
it("should handle unknown attachment ids", async () => {
|
||||
const document = await buildDocument({
|
||||
publishedAt: subDays(new Date(), 90),
|
||||
deletedAt: subDays(new Date(), 60),
|
||||
});
|
||||
|
||||
const attachment = await buildAttachment({
|
||||
teamId: document.teamId,
|
||||
documentId: document.id,
|
||||
});
|
||||
|
||||
document.text = ``;
|
||||
await document.save();
|
||||
|
||||
// remove attachment so it no longer exists in the database, this is also
|
||||
// representative of a corrupt attachment id in the doc or the regex returning
|
||||
// an incorrect string
|
||||
await attachment.destroy({ force: true });
|
||||
|
||||
const res = await server.post("/api/utils.gc", {
|
||||
body: {
|
||||
token: process.env.UTILS_SECRET,
|
||||
},
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(200);
|
||||
expect(await Attachment.count()).toEqual(0);
|
||||
expect(await Document.scope().count()).toEqual(0);
|
||||
});
|
||||
|
||||
it("should not destroy attachments referenced in other documents", async () => {
|
||||
const document1 = await buildDocument();
|
||||
|
||||
const document = await buildDocument({
|
||||
teamId: document1.teamId,
|
||||
publishedAt: subDays(new Date(), 90),
|
||||
deletedAt: subDays(new Date(), 60),
|
||||
});
|
||||
|
||||
const attachment = await buildAttachment({
|
||||
teamId: document1.teamId,
|
||||
documentId: document.id,
|
||||
});
|
||||
|
||||
document1.text = ``;
|
||||
await document1.save();
|
||||
|
||||
document.text = ``;
|
||||
await document.save();
|
||||
|
||||
expect(await Attachment.count()).toEqual(1);
|
||||
|
||||
const res = await server.post("/api/utils.gc", {
|
||||
body: {
|
||||
token: process.env.UTILS_SECRET,
|
||||
},
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(200);
|
||||
expect(await Attachment.count()).toEqual(1);
|
||||
expect(await Document.scope().count()).toEqual(1);
|
||||
expect(reloaded).toBe(null);
|
||||
});
|
||||
|
||||
it("should destroy draft documents deleted more than 30 days ago", async () => {
|
||||
await buildDocument({
|
||||
const document = await buildDocument({
|
||||
publishedAt: undefined,
|
||||
deletedAt: subDays(new Date(), 60),
|
||||
});
|
||||
|
||||
await sequelize.query(
|
||||
`UPDATE documents SET "deletedAt" = '${subDays(
|
||||
new Date(),
|
||||
60
|
||||
).toISOString()}' WHERE id = '${document.id}'`
|
||||
);
|
||||
|
||||
const res = await server.post("/api/utils.gc", {
|
||||
body: {
|
||||
token: process.env.UTILS_SECRET,
|
||||
},
|
||||
});
|
||||
const reloaded = await Document.scope().findOne({
|
||||
where: {
|
||||
id: document.id,
|
||||
},
|
||||
paranoid: false,
|
||||
});
|
||||
expect(res.status).toEqual(200);
|
||||
expect(await Document.scope().count()).toEqual(0);
|
||||
expect(reloaded).toBe(null);
|
||||
});
|
||||
|
||||
it("should require authentication", async () => {
|
||||
|
||||
@@ -119,18 +119,6 @@ app.on("error", (error, ctx) => {
|
||||
if (requestId) {
|
||||
scope.setTag("request_id", requestId);
|
||||
}
|
||||
|
||||
const authType = ctx.state ? ctx.state.authType : undefined;
|
||||
if (authType) {
|
||||
scope.setTag("auth_type", authType);
|
||||
}
|
||||
|
||||
const userId =
|
||||
ctx.state && ctx.state.user ? ctx.state.user.id : undefined;
|
||||
if (userId) {
|
||||
scope.setUser({ id: userId });
|
||||
}
|
||||
|
||||
scope.addEventProcessor(function (event) {
|
||||
return Sentry.Handlers.parseRequest(event, ctx.request);
|
||||
});
|
||||
|
||||
@@ -45,11 +45,7 @@ router.post("email", async (ctx) => {
|
||||
user.lastSigninEmailSentAt &&
|
||||
user.lastSigninEmailSentAt > subMinutes(new Date(), 2)
|
||||
) {
|
||||
ctx.body = {
|
||||
redirect: `${team.url}?notice=email-auth-ratelimit`,
|
||||
message: "Rate limit exceeded",
|
||||
success: false,
|
||||
};
|
||||
ctx.redirect(`${team.url}?notice=email-auth-ratelimit`);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,8 +28,6 @@ export default async function documentMover({
|
||||
|
||||
document.collectionId = collectionId;
|
||||
document.parentDocumentId = null;
|
||||
document.lastModifiedById = user.id;
|
||||
document.updatedBy = user;
|
||||
|
||||
await document.save();
|
||||
result.documents.push(document);
|
||||
@@ -56,8 +54,6 @@ export default async function documentMover({
|
||||
// add to new collection (may be the same)
|
||||
document.collectionId = collectionId;
|
||||
document.parentDocumentId = parentDocumentId;
|
||||
document.lastModifiedById = user.id;
|
||||
document.updatedBy = user;
|
||||
|
||||
const newCollection: Collection = collectionChanged
|
||||
? await Collection.findByPk(collectionId, { transaction })
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = {
|
||||
up: async (queryInterface, Sequelize) => {
|
||||
await queryInterface.changeColumn(
|
||||
"attachments",
|
||||
"key",
|
||||
{ type: Sequelize.STRING(4096), allowNull: false, }
|
||||
);
|
||||
await queryInterface.changeColumn(
|
||||
"attachments",
|
||||
"url",
|
||||
{ type: Sequelize.STRING(4096), allowNull: false, }
|
||||
);
|
||||
},
|
||||
|
||||
down: async (queryInterface, Sequelize) => {
|
||||
await queryInterface.changeColumn(
|
||||
"attachments",
|
||||
"key",
|
||||
{ type: Sequelize.STRING(255), allowNull: false, }
|
||||
);
|
||||
await queryInterface.changeColumn(
|
||||
"attachments",
|
||||
"url",
|
||||
{ type: Sequelize.STRING(255), allowNull: false, }
|
||||
);
|
||||
}
|
||||
};
|
||||
@@ -1,37 +0,0 @@
|
||||
const tableName = 'attachments';
|
||||
|
||||
// because of this issue in Sequelize the foreign key constraint may be named differently depending
|
||||
// on when the previous migrations were ran https://github.com/sequelize/sequelize/pull/9890
|
||||
const constraintNames = ['attachments_documentId_fkey', 'attachments_foreign_idx'];
|
||||
|
||||
module.exports = {
|
||||
up: async (queryInterface, Sequelize) => {
|
||||
let error;
|
||||
for (const constraintName of constraintNames) {
|
||||
try {
|
||||
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
|
||||
return;
|
||||
} catch (err) {
|
||||
error = err;
|
||||
}
|
||||
}
|
||||
throw error;
|
||||
},
|
||||
|
||||
down: async (queryInterface, Sequelize) => {
|
||||
let error;
|
||||
for (const constraintName of constraintNames) {
|
||||
try {
|
||||
await queryInterface.sequelize.query(
|
||||
`alter table "${tableName}"
|
||||
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
|
||||
on delete cascade`
|
||||
);
|
||||
return;
|
||||
} catch (err) {
|
||||
error = err;
|
||||
}
|
||||
}
|
||||
throw error;
|
||||
},
|
||||
};
|
||||
@@ -1,14 +0,0 @@
|
||||
// @flow
|
||||
import { Attachment, User } from "../models";
|
||||
import policy from "./policy";
|
||||
|
||||
const { allow } = policy;
|
||||
|
||||
allow(User, "create", Attachment);
|
||||
|
||||
allow(User, "delete", Attachment, (actor, attachment) => {
|
||||
if (!attachment || attachment.teamId !== actor.teamId) return false;
|
||||
if (actor.isAdmin) return true;
|
||||
if (actor.id === attachment.userId) return true;
|
||||
return false;
|
||||
});
|
||||
@@ -1,8 +1,7 @@
|
||||
// @flow
|
||||
import { Attachment, Team, User, Collection, Document, Group } from "../models";
|
||||
import { Team, User, Collection, Document, Group } from "../models";
|
||||
import policy from "./policy";
|
||||
import "./apiKey";
|
||||
import "./attachment";
|
||||
import "./collection";
|
||||
import "./document";
|
||||
import "./integration";
|
||||
@@ -25,7 +24,7 @@ type Policy = {
|
||||
*/
|
||||
export function serialize(
|
||||
model: User,
|
||||
target: Attachment | Team | Collection | Document | Group
|
||||
target: Team | Collection | Document | Group
|
||||
): Policy {
|
||||
let output = {};
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// @flow
|
||||
import { takeRight } from "lodash";
|
||||
import { Attachment, Document, User } from "../models";
|
||||
import parseAttachmentIds from "../utils/parseAttachmentIds";
|
||||
import { getSignedImageUrl } from "../utils/s3";
|
||||
import presentUser from "./user";
|
||||
|
||||
@@ -9,9 +8,13 @@ type Options = {
|
||||
isPublic?: boolean,
|
||||
};
|
||||
|
||||
const attachmentRegex = /!\[.*?\]\(\/api\/attachments\.redirect\?id=(?<id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\)/gi;
|
||||
|
||||
// replaces attachments.redirect urls with signed/authenticated url equivalents
|
||||
async function replaceImageAttachments(text: string) {
|
||||
const attachmentIds = parseAttachmentIds(text);
|
||||
async function replaceImageAttachments(text) {
|
||||
const attachmentIds = [...text.matchAll(attachmentRegex)].map(
|
||||
(match) => match.groups && match.groups.id
|
||||
);
|
||||
|
||||
for (const id of attachmentIds) {
|
||||
const attachment = await Attachment.findByPk(id);
|
||||
|
||||
+2
-2
@@ -8,6 +8,7 @@ import sendfile from "koa-sendfile";
|
||||
import serve from "koa-static";
|
||||
import { languages } from "../shared/i18n";
|
||||
import environment from "./env";
|
||||
import { NotFoundError } from "./errors";
|
||||
import apexRedirect from "./middlewares/apexRedirect";
|
||||
import { opensearchResponse } from "./utils/opensearch";
|
||||
import { robotsResponse } from "./utils/robots";
|
||||
@@ -77,8 +78,7 @@ router.get("/locales/:lng.json", async (ctx) => {
|
||||
let { lng } = ctx.params;
|
||||
|
||||
if (!languages.includes(lng)) {
|
||||
ctx.status = 404;
|
||||
return;
|
||||
throw new NotFoundError();
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
// @flow
|
||||
const attachmentRegex = /!\[.*?\]\(\/api\/attachments\.redirect\?id=(?<id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\)/gi;
|
||||
|
||||
export default function parseAttachmentIds(text: any): string[] {
|
||||
return [...text.matchAll(attachmentRegex)].map(
|
||||
(match) => match.groups && match.groups.id
|
||||
);
|
||||
}
|
||||
+1
-1
@@ -59,7 +59,7 @@ export const makePolicy = (
|
||||
expiration: format(tomorrow, "YYYY-MM-DDTHH:mm:ss\\Z"),
|
||||
};
|
||||
|
||||
return Buffer.from(JSON.stringify(policy)).toString("base64");
|
||||
return new Buffer(JSON.stringify(policy)).toString("base64");
|
||||
};
|
||||
|
||||
export const getSignature = (policy: any) => {
|
||||
|
||||
@@ -36,7 +36,6 @@ export const languageOptions = [
|
||||
{ label: "Deutsch (Deutschland)", value: "de_DE" },
|
||||
{ label: "Español (España)", value: "es_ES" },
|
||||
{ label: "Français (France)", value: "fr_FR" },
|
||||
{ label: "한국어 (Korean)", value: "ko_KR" },
|
||||
{ label: "Português (Portugal)", value: "pt_PT" },
|
||||
];
|
||||
|
||||
|
||||
+12
-12
@@ -15,16 +15,16 @@ describe("i18n process.env is unset", () => {
|
||||
});
|
||||
|
||||
it("translation of key should match", () =>
|
||||
expect(i18n.t("Saving")).toBe("Saving"));
|
||||
expect(i18n.t("Saving…")).toBe("Saving…"));
|
||||
|
||||
it("translation if changed to de_DE", () => {
|
||||
i18n.changeLanguage("de_DE");
|
||||
expect(i18n.t("Saving")).toBe("Speichert");
|
||||
expect(i18n.t("Saving…")).toBe("Speichert…");
|
||||
});
|
||||
|
||||
it("translation if changed to pt_PT", () => {
|
||||
i18n.changeLanguage("pt_PT");
|
||||
expect(i18n.t("Saving")).toBe("A guardar");
|
||||
expect(i18n.t("Saving…")).toBe("A guardar…");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -38,16 +38,16 @@ describe("i18n process.env is en_US", () => {
|
||||
});
|
||||
|
||||
it("translation of key should match", () =>
|
||||
expect(i18n.t("Saving")).toBe("Saving"));
|
||||
expect(i18n.t("Saving…")).toBe("Saving…"));
|
||||
|
||||
it("translation if changed to de_DE", () => {
|
||||
i18n.changeLanguage("de_DE");
|
||||
expect(i18n.t("Saving")).toBe("Speichert");
|
||||
expect(i18n.t("Saving…")).toBe("Speichert…");
|
||||
});
|
||||
|
||||
it("translation if changed to pt_PT", () => {
|
||||
i18n.changeLanguage("pt_PT");
|
||||
expect(i18n.t("Saving")).toBe("A guardar");
|
||||
expect(i18n.t("Saving…")).toBe("A guardar…");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -61,16 +61,16 @@ describe("i18n process.env is de_DE", () => {
|
||||
});
|
||||
|
||||
it("translation of key should match", () =>
|
||||
expect(i18n.t("Saving")).toBe("Speichert"));
|
||||
expect(i18n.t("Saving…")).toBe("Speichert…"));
|
||||
|
||||
it("translation if changed to en_US", () => {
|
||||
i18n.changeLanguage("en_US");
|
||||
expect(i18n.t("Saving")).toBe("Saving");
|
||||
expect(i18n.t("Saving…")).toBe("Saving…");
|
||||
});
|
||||
|
||||
it("translation if changed to pt_PT", () => {
|
||||
i18n.changeLanguage("pt_PT");
|
||||
expect(i18n.t("Saving")).toBe("A guardar");
|
||||
expect(i18n.t("Saving…")).toBe("A guardar…");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -84,15 +84,15 @@ describe("i18n process.env is pt_PT", () => {
|
||||
});
|
||||
|
||||
it("translation of key should match", () =>
|
||||
expect(i18n.t("Saving")).toBe("A guardar"));
|
||||
expect(i18n.t("Saving…")).toBe("A guardar…"));
|
||||
|
||||
it("translation if changed to en_US", () => {
|
||||
i18n.changeLanguage("en_US");
|
||||
expect(i18n.t("Saving")).toBe("Saving");
|
||||
expect(i18n.t("Saving…")).toBe("Saving…");
|
||||
});
|
||||
|
||||
it("translation if changed to de_DE", () => {
|
||||
i18n.changeLanguage("de_DE");
|
||||
expect(i18n.t("Saving")).toBe("Speichert");
|
||||
expect(i18n.t("Saving…")).toBe("Speichert…");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -7,16 +7,6 @@
|
||||
"Archive": "Archiv",
|
||||
"Drafts": "Entwürfe",
|
||||
"Templates": "Vorlagen",
|
||||
"Deleted Collection": "Sammlung löschen",
|
||||
"deleted": "gelöscht",
|
||||
"archived": "archiviert",
|
||||
"created": "erstellt",
|
||||
"published": "veröffentlicht",
|
||||
"saved": "gespeichert",
|
||||
"updated": "aktualisiert",
|
||||
"Never viewed": "Nie angeschaut",
|
||||
"Viewed": "Angeschaut",
|
||||
"in": "in",
|
||||
"New": "Neu",
|
||||
"Only visible to you": "Nur für Sie sichtbar",
|
||||
"Draft": "Entwurf",
|
||||
@@ -43,7 +33,7 @@
|
||||
"Delete table": "Tabelle löschen",
|
||||
"Italic": "Kursiv",
|
||||
"Sorry, that link won’t work for this embed type": "Dieser Link funktioniert für diesen Einbettungstyp leider nicht",
|
||||
"Find or create a doc": "Suchen oder erstellen Sie ein Dokument",
|
||||
"Find or create a doc…": "Suchen oder erstellen Sie ein Dokument…",
|
||||
"Big heading": "Große Überschrift",
|
||||
"Medium heading": "Mittlere Überschrift",
|
||||
"Small heading": "Kleine Überschrift",
|
||||
@@ -56,17 +46,17 @@
|
||||
"Link": "Link",
|
||||
"Link copied to clipboard": "Link in die Zwischenablage kopiert",
|
||||
"Highlight": "Hervorheben",
|
||||
"Type '/' to insert": "Geben Sie '/' zum einfügen",
|
||||
"Keep typing to filter": "Tippen Sie weiter um zu filtern",
|
||||
"Type '/' to insert…": "Geben Sie '/' zum Einzufügen ein",
|
||||
"Keep typing to filter…": "Tippen Sie weiter um zu filtern",
|
||||
"No results": "Keine Ergebnisse",
|
||||
"Open link": "Link öffnen",
|
||||
"Ordered list": "Nummerierte Liste",
|
||||
"Paste a link": "Link einfügen",
|
||||
"Paste a link…": "Link einfügen…",
|
||||
"Paste a {{service}} link…": "{{service}} Link einfügen…",
|
||||
"Placeholder": "Platzhalter",
|
||||
"Quote": "Zitat",
|
||||
"Remove link": "Link entfernen",
|
||||
"Search or paste a link": "Suchen oder Einfügen eines Links",
|
||||
"Search or paste a link…": "Suchen oder Einfügen eines Links…",
|
||||
"Strikethrough": "Durchstreichen",
|
||||
"Bold": "Fett",
|
||||
"Subheading": "Untertitel",
|
||||
@@ -75,17 +65,13 @@
|
||||
"Tip notice": "Tipp Hinweis",
|
||||
"Warning": "Warnung",
|
||||
"Warning notice": "Warnhinweis",
|
||||
"Icon": "Icon",
|
||||
"Loading": "Laden",
|
||||
"Search": "Suche",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "Outline ist in Ihrer Sprache {{optionLabel}} verfügbar. Möchten Sie diese ändern?",
|
||||
"Change Language": "Sprache ändern",
|
||||
"Dismiss": "Ablehnen",
|
||||
"Search…": "Suche…",
|
||||
"Keyboard shortcuts": "Tastaturkürzel",
|
||||
"New collection": "Neue Sammlung",
|
||||
"New collection…": "Neue Sammlung…",
|
||||
"Collections": "Sammlungen",
|
||||
"Untitled": "Ohne Titel",
|
||||
"Home": "Startseite",
|
||||
"Search": "Suche",
|
||||
"Starred": "Favoriten",
|
||||
"Invite people…": "Personen einladen…",
|
||||
"Invite people": "Personen einladen",
|
||||
@@ -106,8 +92,8 @@
|
||||
"API documentation": "API Dokumentation",
|
||||
"Changelog": "Änderungsprotokoll",
|
||||
"Send us feedback": "Schicken Sie uns Feedback",
|
||||
"Report a bug": "Ein technischer Fehler melden",
|
||||
"Appearance": "Darstellung",
|
||||
"Report a bug": "Ein technischen Fehler melden",
|
||||
"Appearance": "Aussehen",
|
||||
"System": "System",
|
||||
"Light": "Hell",
|
||||
"Dark": "Dunkel",
|
||||
@@ -115,10 +101,10 @@
|
||||
"Collection permissions": "Sammlungsberechtigungen",
|
||||
"New document": "Neues Dokument",
|
||||
"Import document": "Dokument importieren",
|
||||
"Edit": "Bearbeiten",
|
||||
"Permissions": "Berechtigungen",
|
||||
"Export": "Exportieren",
|
||||
"Delete": "Löschen",
|
||||
"Edit…": "Bearbeiten…",
|
||||
"Permissions…": "Berechtigungen…",
|
||||
"Export…": "Exportieren…",
|
||||
"Delete…": "Löschen…",
|
||||
"Edit collection": "Sammlung bearbeiten",
|
||||
"Delete collection": "Sammlung löschen",
|
||||
"Export collection": "Sammlung exportieren",
|
||||
@@ -127,30 +113,33 @@
|
||||
"Document restored": "Dokument wiederhergestellt",
|
||||
"Document unpublished": "Dokument unveröffentlicht",
|
||||
"Restore": "Wiederherstellen",
|
||||
"Restore…": "Wiederherstellen…",
|
||||
"Choose a collection": "Sammlung auswählen",
|
||||
"Unpin": "Lospinnen",
|
||||
"Pin to collection": "Zur Sammlung anpinnen",
|
||||
"Unstar": "Aus den Favoriten entfernen",
|
||||
"Star": "Favorisieren",
|
||||
"Share link": "Link teilen",
|
||||
"Share link…": "Link teilen…",
|
||||
"Enable embeds": "Einbettungen aktivieren",
|
||||
"Disable embeds": "Einbettungen deaktivieren",
|
||||
"New nested document": "Neues verschachteltes Dokument",
|
||||
"Create template": "Vorlage erstellen",
|
||||
"Create template…": "Vorlage erstellen…",
|
||||
"Edit": "Bearbeiten",
|
||||
"Duplicate": "Duplizieren",
|
||||
"Unpublish": "Nicht veröffentlichen",
|
||||
"Move": "Verschieben",
|
||||
"Move…": "Verschieben…",
|
||||
"History": "Verlauf",
|
||||
"Download": "Herunterladen",
|
||||
"Print": "Drucken",
|
||||
"Delete {{ documentName }}": "{{ documentName }} löschen",
|
||||
"Create template": "Vorlage erstellen",
|
||||
"Share document": "Dokument teilen",
|
||||
"Edit group": "Gruppe bearbeiten",
|
||||
"Delete group": "Gruppe löschen",
|
||||
"Members": "Mitglieder",
|
||||
"Members…": "Mitglieder…",
|
||||
"New document in": "Neues Dokument in",
|
||||
"collection": "Sammlung",
|
||||
"New document in <1>{{collectionName}}</1>": "Neues Dokument in <1>{{collectionName}}</1>",
|
||||
"New template": "Neue Vorlage",
|
||||
"New template…": "Neue Vorlage…",
|
||||
"Link copied": "Link wurde kopiert",
|
||||
"Restore version": "Version wiederherstellen",
|
||||
"Copy link": "Link kopieren",
|
||||
@@ -158,22 +147,22 @@
|
||||
"Share link copied": "Freigabelink wurde kopiert",
|
||||
"Go to document": "Zum Dokument gehen",
|
||||
"Revoke link": "Link widerrufen",
|
||||
"By {{ author }}": "Von {{ author }}",
|
||||
"By {{ author }}": "von {{author}}",
|
||||
"Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.": "Sind Sie sicher, dass Sie {{ userName }} zu einem Administrator machen möchten? Administratoren können Team- und Rechnungsinformationen ändern.",
|
||||
"Are you sure you want to make {{ userName }} a member?": "Sind Sie sicher, dass Sie {{ userName }} zu einem Mitglied machen möchten?",
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "Möchten Sie dieses Konto wirklich sperren? Gesperrte Benutzer können sich nicht anmelden.",
|
||||
"Make {{ userName }} a member…": "{{ userName }} zu einem Mitglied machen…",
|
||||
"Make {{ userName }} an admin…": "{{ userName }} zu einem Admin machen…",
|
||||
"Revoke invite": "Einladung widerrufen",
|
||||
"Revoke invite…": "Einladung widerrufen…",
|
||||
"Activate account": "Konto aktivieren",
|
||||
"Suspend account": "Konto sperren",
|
||||
"Suspend account…": "Konto sperren…",
|
||||
"Documents": "Dokumente",
|
||||
"The document archive is empty at the moment.": "Das Dokumentenarchiv ist momentan leer.",
|
||||
"Search in collection": "Suche in Sammlung",
|
||||
"Search in collection…": "Suche in Sammlung…",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> enthält noch keine Dokumente.",
|
||||
"Get started by creating a new one!": "Erstellen Sie zunächst ein neues Dokument!",
|
||||
"Create a document": "Dokument erstellen",
|
||||
"Manage members": "Mitglieder verwalten",
|
||||
"Manage members…": "Mitglieder verwalten…",
|
||||
"Pinned": "Gepinned",
|
||||
"Recently updated": "Vor Kurzem aktualisiert",
|
||||
"Recently published": "Vor Kurzem veröffentlicht",
|
||||
@@ -184,15 +173,15 @@
|
||||
"Name": "Name",
|
||||
"Description": "Beschreibung",
|
||||
"More details about this collection…": "Weitere Details zu dieser Sammlung…",
|
||||
"Private collection": "Private Sammlung",
|
||||
"Private collection": "private Sammlung",
|
||||
"A private collection will only be visible to invited team members.": "Eine private Sammlung ist nur für eingeladene Teammitglieder sichtbar.",
|
||||
"Saving": "Speichert",
|
||||
"Saving…": "Speichert…",
|
||||
"Save": "Speichern",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} wurde zur Sammlung hinzugefügt",
|
||||
"Could not add user": "Benutzer kann nicht hinzugefügt werden",
|
||||
"Can’t find the group you’re looking for?": "Sie können die gesuchte Gruppe nicht finden?",
|
||||
"Create a group": "Gruppe erstellen",
|
||||
"Search by group name": "Suche nach Gruppennamen",
|
||||
"Search by group name…": "Suche nach Gruppennamen…",
|
||||
"Search groups": "Gruppen suchen",
|
||||
"No groups matching your search": "Keine Gruppen, die Ihrer Suche entsprechen",
|
||||
"No groups left to add": "Keine Gruppen übrig zum Hinzufügen",
|
||||
@@ -200,21 +189,22 @@
|
||||
"{{ userName }} was added to the collection": "{{ userName }} wurde zur Sammlung hinzugefügt",
|
||||
"Need to add someone who’s not yet on the team yet?": "Müssen Sie jemanden hinzufügen, der noch nicht im Team ist?",
|
||||
"Invite people to {{ teamName }}": "Personen zu {{ teamName }} einladen",
|
||||
"Search by name": "Nach Name suchen",
|
||||
"Search by name…": "Nach Name suchen…",
|
||||
"Search people": "Personen suchen",
|
||||
"No people matching your search": "Keine Personen, die Ihrer Suche entsprechen",
|
||||
"No people left to add": "Keine Personen übrig zum Hinzufügen",
|
||||
"Read only": "Schreibgeschützt",
|
||||
"Read & Edit": "Lesen & Bearbeiten",
|
||||
"Permissions": "Berechtigungen",
|
||||
"Remove": "Entfernen",
|
||||
"Active <1></1> ago": "Aktiv vor <1></1>",
|
||||
"Active {{ lastActiveAt }} ago": "Aktiv vor {{ lastActiveAt }}",
|
||||
"Never signed in": "Nie angemeldet",
|
||||
"Invited": "Eingeladen",
|
||||
"Admin": "Administrator",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Sammlungen dienen zur Gruppierung Ihrer Wissensbasis. Sie funktionieren am besten, wenn sie nach einem Thema oder einem internen Team organisiert sind - beispielsweise nach Produkt oder Engineering.",
|
||||
"Creating": "Erstellen",
|
||||
"Creating…": "Wird erstellt…",
|
||||
"Create": "Erstellen",
|
||||
"Recently viewed": "Zuletzt angesehen",
|
||||
"Recently viewed": "Vor Kurzem angesehen",
|
||||
"Created by me": "Von mir erstellt",
|
||||
"Hide contents": "Inhalt ausblenden",
|
||||
"Show contents": "Inhalt anzeigen",
|
||||
@@ -227,7 +217,7 @@
|
||||
"New from template": "Neu aus Vorlage",
|
||||
"Publish": "Veröffentlichen",
|
||||
"Publish document": "Dokument veröffentlichen",
|
||||
"Publishing": "Am Veröffentlichen",
|
||||
"Publishing…": "Am Veröffentlichen…",
|
||||
"No documents found for your filters.": "Keine Dokumente anhand Ihre Filter gefunden.",
|
||||
"You’ve not got any drafts at the moment.": "Sie haben im Moment keine Entwürfe.",
|
||||
"Not found": "Nicht gefunden",
|
||||
@@ -235,13 +225,13 @@
|
||||
"Offline": "Offline",
|
||||
"We were unable to load the document while offline.": "Wir konnten das Dokument nicht offline laden.",
|
||||
"Your account has been suspended": "Ihr Konto wurde gesperrt",
|
||||
"A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.": "Ein Administrator (<1>{{suspendedContactEmail}}</1>) hat Ihr Konto gesperrt. Um Ihr Konto wieder zu aktivieren, wenden Sie sich bitte direkt an diesen.",
|
||||
"A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.": "Ein Teamadministrator (<1>{{suspendedContactEmail}}</1>) hat Ihr Konto gesperrt. Um Ihr Konto wieder zu aktivieren, wenden Sie sich bitte direkt an diesen.",
|
||||
"{{userName}} was added to the group": "{{userName}} wurde zur Gruppe hinzugefügt",
|
||||
"Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?": "Fügen Sie unten Teammitglieder hinzu, um ihnen Zugriff auf die Gruppe zu gewähren. Sie müssen jemanden hinzufügen, der noch nicht im Team ist?",
|
||||
"Invite them to {{teamName}}": "Personen zu {{teamName}} einladen",
|
||||
"{{userName}} was removed from the group": "{{userName}} wurde aus der Gruppe entfernt",
|
||||
"Could not remove user": "Benutzer konnte nicht entfernt werden",
|
||||
"Add people": "Personen hinzufügen",
|
||||
"Add people…": "Personen hinzufügen…",
|
||||
"This group has no members.": "Diese Gruppe hat keine Mitglieder.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline ist so konzipiert, dass es schnell und einfach zu bedienen ist. Alle Ihre üblichen Tastaturkürzel funktionieren hier, und es gibt auch Markdown.",
|
||||
"Navigation": "Navigation",
|
||||
@@ -284,6 +274,7 @@
|
||||
"Delete Account": "Konto löschen",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "Sie können Ihren Account jederzeit löschen, beachten Sie, dass dies nicht wiederhergestellt werden kann",
|
||||
"Delete account": "Konto löschen",
|
||||
"Recently Updated": "Vor Kurzem Aktualisiert",
|
||||
"Alphabetical": "Alphabetisch",
|
||||
"You’ve not starred any documents yet.": "Keine Favoriten.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "Es gibt noch keine Vorlagen. Sie können Vorlagen erstellen, mit denen Ihr Team eine konsistente und genaue Dokumentation erstellen kann.",
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
"Delete table": "Delete table",
|
||||
"Italic": "Italic",
|
||||
"Sorry, that link won’t work for this embed type": "Sorry, that link won’t work for this embed type",
|
||||
"Find or create a doc": "Find or create a doc",
|
||||
"Find or create a doc…": "Find or create a doc…",
|
||||
"Big heading": "Big heading",
|
||||
"Medium heading": "Medium heading",
|
||||
"Small heading": "Small heading",
|
||||
@@ -56,17 +56,17 @@
|
||||
"Link": "Link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Highlight": "Highlight",
|
||||
"Type '/' to insert": "Type '/' to insert",
|
||||
"Keep typing to filter": "Keep typing to filter",
|
||||
"Type '/' to insert…": "Type '/' to insert…",
|
||||
"Keep typing to filter…": "Keep typing to filter…",
|
||||
"No results": "No results",
|
||||
"Open link": "Open link",
|
||||
"Ordered list": "Ordered list",
|
||||
"Paste a link": "Paste a link",
|
||||
"Paste a link…": "Paste a link…",
|
||||
"Paste a {{service}} link…": "Paste a {{service}} link…",
|
||||
"Placeholder": "Placeholder",
|
||||
"Quote": "Quote",
|
||||
"Remove link": "Remove link",
|
||||
"Search or paste a link": "Search or paste a link",
|
||||
"Search or paste a link…": "Search or paste a link…",
|
||||
"Strikethrough": "Strikethrough",
|
||||
"Bold": "Bold",
|
||||
"Subheading": "Subheading",
|
||||
@@ -76,18 +76,17 @@
|
||||
"Warning": "Warning",
|
||||
"Warning notice": "Warning notice",
|
||||
"Icon": "Icon",
|
||||
"Loading": "Loading",
|
||||
"Search": "Search",
|
||||
"Loading…": "Loading…",
|
||||
"Search…": "Search…",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "Outline is available in your language {{optionLabel}}, would you like to change?",
|
||||
"Change Language": "Change Language",
|
||||
"Dismiss": "Dismiss",
|
||||
"Keyboard shortcuts": "Keyboard shortcuts",
|
||||
"Expand": "Expand",
|
||||
"Collapse": "Collapse",
|
||||
"New collection": "New collection",
|
||||
"New collection…": "New collection…",
|
||||
"Collections": "Collections",
|
||||
"Untitled": "Untitled",
|
||||
"Home": "Home",
|
||||
"Search": "Search",
|
||||
"Starred": "Starred",
|
||||
"Invite people…": "Invite people…",
|
||||
"Invite people": "Invite people",
|
||||
@@ -117,10 +116,10 @@
|
||||
"Collection permissions": "Collection permissions",
|
||||
"New document": "New document",
|
||||
"Import document": "Import document",
|
||||
"Edit": "Edit",
|
||||
"Permissions": "Permissions",
|
||||
"Export": "Export",
|
||||
"Delete": "Delete",
|
||||
"Edit…": "Edit…",
|
||||
"Permissions…": "Permissions…",
|
||||
"Export…": "Export…",
|
||||
"Delete…": "Delete…",
|
||||
"Edit collection": "Edit collection",
|
||||
"Delete collection": "Delete collection",
|
||||
"Export collection": "Export collection",
|
||||
@@ -129,30 +128,33 @@
|
||||
"Document restored": "Document restored",
|
||||
"Document unpublished": "Document unpublished",
|
||||
"Restore": "Restore",
|
||||
"Restore…": "Restore…",
|
||||
"Choose a collection": "Choose a collection",
|
||||
"Unpin": "Unpin",
|
||||
"Pin to collection": "Pin to collection",
|
||||
"Unstar": "Unstar",
|
||||
"Star": "Star",
|
||||
"Share link": "Share link",
|
||||
"Share link…": "Share link…",
|
||||
"Enable embeds": "Enable embeds",
|
||||
"Disable embeds": "Disable embeds",
|
||||
"New nested document": "New nested document",
|
||||
"Create template": "Create template",
|
||||
"Create template…": "Create template…",
|
||||
"Edit": "Edit",
|
||||
"Duplicate": "Duplicate",
|
||||
"Unpublish": "Unpublish",
|
||||
"Move": "Move",
|
||||
"Move…": "Move…",
|
||||
"History": "History",
|
||||
"Download": "Download",
|
||||
"Print": "Print",
|
||||
"Delete {{ documentName }}": "Delete {{ documentName }}",
|
||||
"Create template": "Create template",
|
||||
"Share document": "Share document",
|
||||
"Edit group": "Edit group",
|
||||
"Delete group": "Delete group",
|
||||
"Members": "Members",
|
||||
"Members…": "Members…",
|
||||
"New document in": "New document in",
|
||||
"collection": "collection",
|
||||
"New document in <1>{{collectionName}}</1>": "New document in <1>{{collectionName}}</1>",
|
||||
"New template": "New template",
|
||||
"New template…": "New template…",
|
||||
"Link copied": "Link copied",
|
||||
"Restore version": "Restore version",
|
||||
"Copy link": "Copy link",
|
||||
@@ -166,16 +168,16 @@
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "Are you sure you want to suspend this account? Suspended users will be prevented from logging in.",
|
||||
"Make {{ userName }} a member…": "Make {{ userName }} a member…",
|
||||
"Make {{ userName }} an admin…": "Make {{ userName }} an admin…",
|
||||
"Revoke invite": "Revoke invite",
|
||||
"Revoke invite…": "Revoke invite…",
|
||||
"Activate account": "Activate account",
|
||||
"Suspend account": "Suspend account",
|
||||
"Suspend account…": "Suspend account…",
|
||||
"Documents": "Documents",
|
||||
"The document archive is empty at the moment.": "The document archive is empty at the moment.",
|
||||
"Search in collection": "Search in collection",
|
||||
"Search in collection…": "Search in collection…",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> doesn’t contain any documents yet.",
|
||||
"Get started by creating a new one!": "Get started by creating a new one!",
|
||||
"Create a document": "Create a document",
|
||||
"Manage members": "Manage members",
|
||||
"Manage members…": "Manage members…",
|
||||
"Pinned": "Pinned",
|
||||
"Recently updated": "Recently updated",
|
||||
"Recently published": "Recently published",
|
||||
@@ -188,13 +190,13 @@
|
||||
"More details about this collection…": "More details about this collection…",
|
||||
"Private collection": "Private collection",
|
||||
"A private collection will only be visible to invited team members.": "A private collection will only be visible to invited team members.",
|
||||
"Saving": "Saving",
|
||||
"Saving…": "Saving…",
|
||||
"Save": "Save",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} was added to the collection",
|
||||
"Could not add user": "Could not add user",
|
||||
"Can’t find the group you’re looking for?": "Can’t find the group you’re looking for?",
|
||||
"Create a group": "Create a group",
|
||||
"Search by group name": "Search by group name",
|
||||
"Search by group name…": "Search by group name…",
|
||||
"Search groups": "Search groups",
|
||||
"No groups matching your search": "No groups matching your search",
|
||||
"No groups left to add": "No groups left to add",
|
||||
@@ -202,19 +204,20 @@
|
||||
"{{ userName }} was added to the collection": "{{ userName }} was added to the collection",
|
||||
"Need to add someone who’s not yet on the team yet?": "Need to add someone who’s not yet on the team yet?",
|
||||
"Invite people to {{ teamName }}": "Invite people to {{ teamName }}",
|
||||
"Search by name": "Search by name",
|
||||
"Search by name…": "Search by name…",
|
||||
"Search people": "Search people",
|
||||
"No people matching your search": "No people matching your search",
|
||||
"No people left to add": "No people left to add",
|
||||
"Read only": "Read only",
|
||||
"Read & Edit": "Read & Edit",
|
||||
"Permissions": "Permissions",
|
||||
"Remove": "Remove",
|
||||
"Active <1></1> ago": "Active <1></1> ago",
|
||||
"Active {{ lastActiveAt }} ago": "Active {{ lastActiveAt }} ago",
|
||||
"Never signed in": "Never signed in",
|
||||
"Invited": "Invited",
|
||||
"Admin": "Admin",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.",
|
||||
"Creating": "Creating",
|
||||
"Creating…": "Creating…",
|
||||
"Create": "Create",
|
||||
"Recently viewed": "Recently viewed",
|
||||
"Created by me": "Created by me",
|
||||
@@ -229,7 +232,7 @@
|
||||
"New from template": "New from template",
|
||||
"Publish": "Publish",
|
||||
"Publish document": "Publish document",
|
||||
"Publishing": "Publishing",
|
||||
"Publishing…": "Publishing…",
|
||||
"No documents found for your filters.": "No documents found for your filters.",
|
||||
"You’ve not got any drafts at the moment.": "You’ve not got any drafts at the moment.",
|
||||
"Not found": "Not found",
|
||||
@@ -243,7 +246,7 @@
|
||||
"Invite them to {{teamName}}": "Invite them to {{teamName}}",
|
||||
"{{userName}} was removed from the group": "{{userName}} was removed from the group",
|
||||
"Could not remove user": "Could not remove user",
|
||||
"Add people": "Add people",
|
||||
"Add people…": "Add people…",
|
||||
"This group has no members.": "This group has no members.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.",
|
||||
"Navigation": "Navigation",
|
||||
|
||||
@@ -7,16 +7,6 @@
|
||||
"Archive": "Archivar",
|
||||
"Drafts": "Borradores",
|
||||
"Templates": "Plantillas",
|
||||
"Deleted Collection": "Colección Eliminada",
|
||||
"deleted": "eliminado",
|
||||
"archived": "archivado",
|
||||
"created": "creado",
|
||||
"published": "publicado",
|
||||
"saved": "guardado",
|
||||
"updated": "actualizado",
|
||||
"Never viewed": "Nunca visto",
|
||||
"Viewed": "Visto",
|
||||
"in": "en",
|
||||
"New": "Nuevo",
|
||||
"Only visible to you": "Solo visible para ti",
|
||||
"Draft": "Borrador",
|
||||
@@ -43,7 +33,7 @@
|
||||
"Delete table": "Eliminar tabla",
|
||||
"Italic": "Cursiva",
|
||||
"Sorry, that link won’t work for this embed type": "Lo sentimos, ese enlace no funcionará para este tipo embebido",
|
||||
"Find or create a doc": "Buscar o crear un documento",
|
||||
"Find or create a doc…": "Buscar o crear un documento…",
|
||||
"Big heading": "Título grande",
|
||||
"Medium heading": "Título medio",
|
||||
"Small heading": "Título pequeño",
|
||||
@@ -56,17 +46,17 @@
|
||||
"Link": "Enlace",
|
||||
"Link copied to clipboard": "Enlace copiado al porta papeles",
|
||||
"Highlight": "Resaltar",
|
||||
"Type '/' to insert": "Escriba '/' para insertar",
|
||||
"Keep typing to filter": "Sigue escribiendo para filtrar",
|
||||
"Type '/' to insert…": "Escriba '/' para insertar…",
|
||||
"Keep typing to filter…": "Sigue escribiendo para filtrar…",
|
||||
"No results": "No hay resultados",
|
||||
"Open link": "Abrir enlace",
|
||||
"Ordered list": "Lista ordenada",
|
||||
"Paste a link": "Pegar un enlace",
|
||||
"Paste a link…": "Pegar un enlace…",
|
||||
"Paste a {{service}} link…": "Pegar un enlace de {{service}}…",
|
||||
"Placeholder": "Marcador",
|
||||
"Quote": "Cita",
|
||||
"Remove link": "Eliminar enlace",
|
||||
"Search or paste a link": "Buscar o pegar un enlace",
|
||||
"Search or paste a link…": "Buscar o pegar un enlace…",
|
||||
"Strikethrough": "Tachado",
|
||||
"Bold": "Negrita",
|
||||
"Subheading": "Subtítulo",
|
||||
@@ -75,17 +65,13 @@
|
||||
"Tip notice": "Aviso de sugerencia",
|
||||
"Warning": "Advertencia",
|
||||
"Warning notice": "Aviso de advertencia",
|
||||
"Icon": "Ícono",
|
||||
"Loading": "Cargando",
|
||||
"Search": "Buscar",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "Outline is available in your language {{optionLabel}}, would you like to change?",
|
||||
"Change Language": "Cambiar Idioma",
|
||||
"Dismiss": "Descartar",
|
||||
"Search…": "Buscar…",
|
||||
"Keyboard shortcuts": "Atajos del teclado",
|
||||
"New collection": "Nueva colección",
|
||||
"New collection…": "Nueva colección…",
|
||||
"Collections": "Colecciones",
|
||||
"Untitled": "Sin título",
|
||||
"Home": "Inicio",
|
||||
"Search": "Buscar",
|
||||
"Starred": "Favoritos",
|
||||
"Invite people…": "Invitar personas…",
|
||||
"Invite people": "Invitar personas",
|
||||
@@ -115,10 +101,10 @@
|
||||
"Collection permissions": "Permisos de colección",
|
||||
"New document": "Nuevo documento",
|
||||
"Import document": "Importar documento",
|
||||
"Edit": "Editar",
|
||||
"Permissions": "Permisos",
|
||||
"Export": "Exportar",
|
||||
"Delete": "Borrar",
|
||||
"Edit…": "Editar…",
|
||||
"Permissions…": "Permisos…",
|
||||
"Export…": "Exportar…",
|
||||
"Delete…": "Borrar…",
|
||||
"Edit collection": "Editar colección",
|
||||
"Delete collection": "Eliminar colección",
|
||||
"Export collection": "Exportar colección",
|
||||
@@ -127,30 +113,33 @@
|
||||
"Document restored": "Documento restaurado",
|
||||
"Document unpublished": "Documento no publicado",
|
||||
"Restore": "Restaurar",
|
||||
"Restore…": "Restaurar…",
|
||||
"Choose a collection": "Elige una Colección",
|
||||
"Unpin": "Eliminar fijado",
|
||||
"Pin to collection": "Fijar a colección",
|
||||
"Unstar": "Eliminar de favoritos",
|
||||
"Star": "Favorito",
|
||||
"Share link": "Compartir enlace",
|
||||
"Share link…": "Compartir enlace…",
|
||||
"Enable embeds": "Habilitar embeds",
|
||||
"Disable embeds": "Desactivar embeds",
|
||||
"New nested document": "Nuevo documento anidado",
|
||||
"Create template": "Crear plantilla",
|
||||
"Create template…": "Crear plantilla…",
|
||||
"Edit": "Editar",
|
||||
"Duplicate": "Duplicar",
|
||||
"Unpublish": "Cancelar publicación",
|
||||
"Move": "Mover",
|
||||
"Move…": "Mover…",
|
||||
"History": "Historial",
|
||||
"Download": "Descargar",
|
||||
"Print": "Imprimir",
|
||||
"Delete {{ documentName }}": "Eliminar {{ documentName }}",
|
||||
"Create template": "Crear plantilla",
|
||||
"Share document": "Compartir documento",
|
||||
"Edit group": "Editar grupo",
|
||||
"Delete group": "Eliminar grupo",
|
||||
"Members": "Miembros",
|
||||
"Members…": "Miembros…",
|
||||
"New document in": "Nuevo documento en",
|
||||
"collection": "colección",
|
||||
"New document in <1>{{collectionName}}</1>": "Nuevo documento en <1>{{collectionName}}</1>",
|
||||
"New template": "Nueva plantilla",
|
||||
"New template…": "Nueva plantilla…",
|
||||
"Link copied": "Enlace copiado",
|
||||
"Restore version": "Restaurar versión",
|
||||
"Copy link": "Copiar enlace",
|
||||
@@ -164,16 +153,16 @@
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "¿Está seguro que desea suspender esta cuenta? Los usuarios suspendidos no podrán iniciar sesión.",
|
||||
"Make {{ userName }} a member…": "Hacer a {{ userName }} un miembro…",
|
||||
"Make {{ userName }} an admin…": "Hacer a {{ userName }} un administrador…",
|
||||
"Revoke invite": "Revocar Invitación",
|
||||
"Revoke invite…": "Revocar Invitación…",
|
||||
"Activate account": "Activar cuenta",
|
||||
"Suspend account": "Suspender Cuenta",
|
||||
"Suspend account…": "Suspender Cuenta…",
|
||||
"Documents": "Documentos",
|
||||
"The document archive is empty at the moment.": "El archivo de documento está vacío en este momento.",
|
||||
"Search in collection": "Buscar en colección",
|
||||
"Search in collection…": "Buscar en colección…",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> todavía no contiene ningún documento.",
|
||||
"Get started by creating a new one!": "¡Empiece creando uno nuevo!",
|
||||
"Create a document": "Crear Documento",
|
||||
"Manage members": "Administrar miembros",
|
||||
"Manage members…": "Administrar miembros…",
|
||||
"Pinned": "Fijado",
|
||||
"Recently updated": "Recientemente actualizado",
|
||||
"Recently published": "Recientemente publicado",
|
||||
@@ -186,13 +175,13 @@
|
||||
"More details about this collection…": "Más detalles sobre esta colección…",
|
||||
"Private collection": "Colección privada",
|
||||
"A private collection will only be visible to invited team members.": "Una colección privada sólo será visible para los miembros invitados del equipo.",
|
||||
"Saving": "Guardando",
|
||||
"Saving…": "Guardando…",
|
||||
"Save": "Guardar",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} fue agregado a la colección",
|
||||
"Could not add user": "No se pudo agregar al usuario",
|
||||
"Can’t find the group you’re looking for?": "¿No encuentras el grupo que estás buscando?",
|
||||
"Create a group": "Crear un grupo",
|
||||
"Search by group name": "Buscar por nombre de grupo",
|
||||
"Search by group name…": "Buscar por nombre de grupo…",
|
||||
"Search groups": "Buscar grupos",
|
||||
"No groups matching your search": "No hay proyectos que coincidan con tu búsqueda",
|
||||
"No groups left to add": "No quedan grupos para agregar",
|
||||
@@ -200,19 +189,20 @@
|
||||
"{{ userName }} was added to the collection": "{{ userName }} fue agregado a la colección",
|
||||
"Need to add someone who’s not yet on the team yet?": "¿Necesitas añadir a alguien que todavía no está en el equipo?",
|
||||
"Invite people to {{ teamName }}": "Invitar personas a {{ teamName }}",
|
||||
"Search by name": "Buscar por nombre",
|
||||
"Search by name…": "Buscar por nombre…",
|
||||
"Search people": "Buscar personas",
|
||||
"No people matching your search": "No hay personas que coincidan con su búsqueda",
|
||||
"No people left to add": "No quedan personas para agregar",
|
||||
"Read only": "Solo lectura",
|
||||
"Read & Edit": "Leer y editar",
|
||||
"Permissions": "Permisos",
|
||||
"Remove": "Eliminar",
|
||||
"Active <1></1> ago": "Activo hace <1></1>",
|
||||
"Active {{ lastActiveAt }} ago": "Activo hace {{ lastActiveAt }}",
|
||||
"Never signed in": "No ha iniciado sesión nunca",
|
||||
"Invited": "Invitado",
|
||||
"Admin": "Admin",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Las colecciones sirven para agrupar su base de conocimientos. Funcionan mejor cuando se organizan en torno a un tema o un equipo interno: producto o ingeniería, por ejemplo.",
|
||||
"Creating": "Creando",
|
||||
"Creating…": "Creando…",
|
||||
"Create": "Crear",
|
||||
"Recently viewed": "Recientemente vistos",
|
||||
"Created by me": "Creado por mí",
|
||||
@@ -227,7 +217,7 @@
|
||||
"New from template": "Nuevo desde plantilla",
|
||||
"Publish": "Publicar",
|
||||
"Publish document": "Publicar documento",
|
||||
"Publishing": "Publicando",
|
||||
"Publishing…": "Publicando…",
|
||||
"No documents found for your filters.": "No se encontraron documentos para sus filtros.",
|
||||
"You’ve not got any drafts at the moment.": "No tienes borradores en este momento.",
|
||||
"Not found": "No encontrado",
|
||||
@@ -241,7 +231,7 @@
|
||||
"Invite them to {{teamName}}": "Invítalos a {{teamName}}",
|
||||
"{{userName}} was removed from the group": "{{userName}} fue eliminado del grupo",
|
||||
"Could not remove user": "No se pudo remover al usuario",
|
||||
"Add people": "Agregar personas",
|
||||
"Add people…": "Agregar personas…",
|
||||
"This group has no members.": "Este grupo no tiene miembros.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline está diseñado para ser rápido y fácil de usar. Todos sus atajos de teclado habituales funcionan aquí, y también usa Markdown.",
|
||||
"Navigation": "Navegación",
|
||||
@@ -284,6 +274,7 @@
|
||||
"Delete Account": "Eliminar cuenta",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "Puede eliminar su cuenta en cualquier momento, tenga en cuenta que esto es irréversible",
|
||||
"Delete account": "Eliminar cuenta",
|
||||
"Recently Updated": "Actualizados recientemente",
|
||||
"Alphabetical": "Alfabético",
|
||||
"You’ve not starred any documents yet.": "Todavía no has marcado documentos como favoritos.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "Todavía no hay plantillas. Puede crear plantillas para ayudar a su equipo a crear documentación precisa y coherente.",
|
||||
|
||||
@@ -7,16 +7,6 @@
|
||||
"Archive": "Archiver",
|
||||
"Drafts": "Brouillons",
|
||||
"Templates": "Modèles",
|
||||
"Deleted Collection": "Collection supprimée",
|
||||
"deleted": "supprimé",
|
||||
"archived": "archivé",
|
||||
"created": "créé",
|
||||
"published": "publié",
|
||||
"saved": "enregistré",
|
||||
"updated": "mis à jour",
|
||||
"Never viewed": "Jamais vu",
|
||||
"Viewed": "Vu",
|
||||
"in": "dans",
|
||||
"New": "Nouveau",
|
||||
"Only visible to you": "Visible uniquement pour vous",
|
||||
"Draft": "Brouillon",
|
||||
@@ -43,7 +33,7 @@
|
||||
"Delete table": "Supprimer ce tableau",
|
||||
"Italic": "Italique",
|
||||
"Sorry, that link won’t work for this embed type": "Désolé, ce lien ne fonctionne pas pour ce type d'intégration",
|
||||
"Find or create a doc": "Rechercher ou créer un doc",
|
||||
"Find or create a doc…": "Rechercher ou créer un doc…",
|
||||
"Big heading": "En-tête",
|
||||
"Medium heading": "Titre moyen",
|
||||
"Small heading": "Petit titre",
|
||||
@@ -56,17 +46,17 @@
|
||||
"Link": "Lien",
|
||||
"Link copied to clipboard": "Lien copié dans le presse-papiers",
|
||||
"Highlight": "Surligner",
|
||||
"Type '/' to insert": "Tapez '/' pour insérer",
|
||||
"Keep typing to filter": "Continuez à taper pour filtrer",
|
||||
"Type '/' to insert…": "Tapez '/' pour insérer…",
|
||||
"Keep typing to filter…": "Continuez à taper pour filtrer…",
|
||||
"No results": "Aucun résultats",
|
||||
"Open link": "Ouvrir le lien",
|
||||
"Ordered list": "Liste ordonnée",
|
||||
"Paste a link": "Coller un lien",
|
||||
"Paste a link…": "Coller un lien…",
|
||||
"Paste a {{service}} link…": "Collez un lien {{service}}…",
|
||||
"Placeholder": "Indication",
|
||||
"Quote": "Citation",
|
||||
"Remove link": "Supprimer le lien",
|
||||
"Search or paste a link": "Rechercher ou coller un lien",
|
||||
"Search or paste a link…": "Rechercher ou coller un lien…",
|
||||
"Strikethrough": "Barré",
|
||||
"Bold": "Gras",
|
||||
"Subheading": "Sous-titre",
|
||||
@@ -75,17 +65,13 @@
|
||||
"Tip notice": "Astuce",
|
||||
"Warning": "Avertissement",
|
||||
"Warning notice": "Avertissement",
|
||||
"Icon": "Icône",
|
||||
"Loading": "Chargement",
|
||||
"Search": "Recherche",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "Outline est disponible dans votre langue {{optionLabel}}, voulez-vous changer ?",
|
||||
"Change Language": "Changer de Langue",
|
||||
"Dismiss": "Rejeter",
|
||||
"Search…": "Recherche…",
|
||||
"Keyboard shortcuts": "Raccourcis clavier",
|
||||
"New collection": "Nouvelle collection",
|
||||
"New collection…": "Nouvelle collection…",
|
||||
"Collections": "Collections",
|
||||
"Untitled": "Sans titre",
|
||||
"Home": "Accueil",
|
||||
"Search": "Recherche",
|
||||
"Starred": "Favoris",
|
||||
"Invite people…": "Inviter des personnes…",
|
||||
"Invite people": "Inviter des personnes",
|
||||
@@ -115,10 +101,10 @@
|
||||
"Collection permissions": "Permissions sur les collections",
|
||||
"New document": "Nouveau document",
|
||||
"Import document": "Importer un document",
|
||||
"Edit": "Modifier",
|
||||
"Permissions": "Permissions",
|
||||
"Export": "Exporter",
|
||||
"Delete": "Supprimer",
|
||||
"Edit…": "Modifier…",
|
||||
"Permissions…": "Permissions…",
|
||||
"Export…": "Exporter…",
|
||||
"Delete…": "Supprimer…",
|
||||
"Edit collection": "Modifier la collection",
|
||||
"Delete collection": "Supprimer la collection",
|
||||
"Export collection": "Exporter la collection",
|
||||
@@ -127,30 +113,33 @@
|
||||
"Document restored": "Document restauré",
|
||||
"Document unpublished": "Document dépublié",
|
||||
"Restore": "Restaurer",
|
||||
"Restore…": "Restaurer…",
|
||||
"Choose a collection": "Choisir une collection",
|
||||
"Unpin": "Désépingler",
|
||||
"Pin to collection": "Épingler à la collection",
|
||||
"Unstar": "Enlever des favoris",
|
||||
"Star": "Ajouter aux favoris",
|
||||
"Share link": "Partager le lien",
|
||||
"Share link…": "Partager le lien…",
|
||||
"Enable embeds": "Activer les intégrations",
|
||||
"Disable embeds": "Désactiver les intégrations",
|
||||
"New nested document": "Nouveau document imbriqué",
|
||||
"Create template": "Créer un modèle",
|
||||
"Create template…": "Créer un modèle…",
|
||||
"Edit": "Modifier",
|
||||
"Duplicate": "Dupliquer",
|
||||
"Unpublish": "Dépublier",
|
||||
"Move": "Déplacer",
|
||||
"Move…": "Déplacer…",
|
||||
"History": "Historique",
|
||||
"Download": "Télécharger",
|
||||
"Print": "Imprimer",
|
||||
"Delete {{ documentName }}": "Supprimer {{ documentName }}",
|
||||
"Create template": "Créer un modèle",
|
||||
"Share document": "Partager le document",
|
||||
"Edit group": "Modifier le groupe",
|
||||
"Delete group": "Supprimer le groupe",
|
||||
"Members": "Membres",
|
||||
"Members…": "Membres…",
|
||||
"New document in": "Nouveau document",
|
||||
"collection": "collection",
|
||||
"New document in <1>{{collectionName}}</1>": "Nouveau document dans <1>{{collectionName}}</1>",
|
||||
"New template": "Nouveau modèle",
|
||||
"New template…": "Nouveau modèle…",
|
||||
"Link copied": "Lien copié",
|
||||
"Restore version": "Restaurer cette version",
|
||||
"Copy link": "Copier le lien",
|
||||
@@ -164,16 +153,16 @@
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "Voulez-vous vraiment suspendre ce compte ? Les utilisateurs suspendus ne pourront plus se connecter.",
|
||||
"Make {{ userName }} a member…": "Faire de {{ userName }} un membre…",
|
||||
"Make {{ userName }} an admin…": "Faire de {{ userName }} un administrateur…",
|
||||
"Revoke invite": "Révoquer l'invitation",
|
||||
"Revoke invite…": "Révoquer l'invitation…",
|
||||
"Activate account": "Activer le compte",
|
||||
"Suspend account": "Suspendre le compte",
|
||||
"Suspend account…": "Suspendre le compte…",
|
||||
"Documents": "Documents",
|
||||
"The document archive is empty at the moment.": "L'archive du document est vide pour le moment.",
|
||||
"Search in collection": "Rechercher dans la collection",
|
||||
"Search in collection…": "Rechercher dans la collection…",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> ne contient aucun document pour le moment.",
|
||||
"Get started by creating a new one!": "Commencez par en créer un nouveau !",
|
||||
"Create a document": "Créer un document",
|
||||
"Manage members": "Gérer les membres",
|
||||
"Manage members…": "Gérer les membres…",
|
||||
"Pinned": "Épinglé",
|
||||
"Recently updated": "Récemment mis à jour",
|
||||
"Recently published": "Récemment publiés",
|
||||
@@ -186,13 +175,13 @@
|
||||
"More details about this collection…": "Plus de détails sur cette collection…",
|
||||
"Private collection": "Collection Privée",
|
||||
"A private collection will only be visible to invited team members.": "Une collection privée ne sera visible que pour les membres invités de l'équipe.",
|
||||
"Saving": "Enregistrement",
|
||||
"Saving…": "Enregistrement…",
|
||||
"Save": "Sauvegarder",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} été ajouté à la collection",
|
||||
"Could not add user": "Impossible d'ajouter l'utilisateur",
|
||||
"Can’t find the group you’re looking for?": "Vous ne trouvez pas le groupe que vous cherchez ?",
|
||||
"Create a group": "Créer un groupe",
|
||||
"Search by group name": "Rechercher par nom de groupe",
|
||||
"Search by group name…": "Rechercher par nom de groupe…",
|
||||
"Search groups": "Rechercher des groupes",
|
||||
"No groups matching your search": "Aucun groupe ne correspond à votre recherche",
|
||||
"No groups left to add": "Plus aucun groupe à ajouter",
|
||||
@@ -200,19 +189,20 @@
|
||||
"{{ userName }} was added to the collection": "{{ userName }} été ajouté à la collection",
|
||||
"Need to add someone who’s not yet on the team yet?": "Besoin d'ajouter quelqu'un qui ne fait pas encore partie de l'équipe?",
|
||||
"Invite people to {{ teamName }}": "Inviter des personnes à {{ teamName }}",
|
||||
"Search by name": "Rechercher par nom",
|
||||
"Search by name…": "Rechercher par nom…",
|
||||
"Search people": "Rechercher des personnes",
|
||||
"No people matching your search": "Aucune personne ne correspond à votre recherche",
|
||||
"No people left to add": "Plus aucune personne à ajouter",
|
||||
"Read only": "Lecture seule",
|
||||
"Read & Edit": "Lire et éditer",
|
||||
"Permissions": "Permissions",
|
||||
"Remove": "Supprimer",
|
||||
"Active <1></1> ago": "Active il y a <1></1>",
|
||||
"Active {{ lastActiveAt }} ago": "Actif il y a {{ lastActiveAt }}",
|
||||
"Never signed in": "Jamais connecté",
|
||||
"Invited": "Invité",
|
||||
"Admin": "Administrateur",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Les collections servent à regrouper votre base de connaissances. Ils fonctionnent mieux lorsqu'ils sont organisés autour d'un sujet ou d'une équipe interne - Produit ou Engineering par exemple.",
|
||||
"Creating": "Création en cours",
|
||||
"Creating…": "Création en cours…",
|
||||
"Create": "Créer",
|
||||
"Recently viewed": "Vu récemment",
|
||||
"Created by me": "Créé par moi",
|
||||
@@ -227,7 +217,7 @@
|
||||
"New from template": "Nouveau à partir d'un modèle",
|
||||
"Publish": "Publier",
|
||||
"Publish document": "Publier le document",
|
||||
"Publishing": "Publication en cours",
|
||||
"Publishing…": "Publication en cours…",
|
||||
"No documents found for your filters.": "Aucun documents trouvés pour votre recherche.",
|
||||
"You’ve not got any drafts at the moment.": "Vous n'avez aucun brouillon pour le moment.",
|
||||
"Not found": "Non trouvé",
|
||||
@@ -241,7 +231,7 @@
|
||||
"Invite them to {{teamName}}": "Invitez-les à {{teamName}}",
|
||||
"{{userName}} was removed from the group": "{{userName}} a été retiré du groupe",
|
||||
"Could not remove user": "Impossible de supprimer l'utilisateur",
|
||||
"Add people": "Ajouter quelqu'un",
|
||||
"Add people…": "Ajouter quelqu'un…",
|
||||
"This group has no members.": "Ce groupe n'a aucun membre.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline est conçu pour être rapide et facile à utiliser. Tous vos raccourcis clavier habituels fonctionnent ici, et il y a aussi un support Markdown.",
|
||||
"Navigation": "Navigation",
|
||||
@@ -284,6 +274,7 @@
|
||||
"Delete Account": "Supprimer le compte",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "Vous pouvez supprimer votre compte à tout moment, notez que cela est irrécupérable",
|
||||
"Delete account": "Supprimer compte",
|
||||
"Recently Updated": "Mis à jour récemment",
|
||||
"Alphabetical": "Alphabétique",
|
||||
"You’ve not starred any documents yet.": "Vous n'avez encore ajouté aucun document aux favoris.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "Il n'y a pas encore de modèles. Vous pouvez créer des modèles pour aider votre équipe à créer une documentation cohérente et précise.",
|
||||
|
||||
@@ -7,16 +7,6 @@
|
||||
"Archive": "Archive",
|
||||
"Drafts": "Drafts",
|
||||
"Templates": "Templates",
|
||||
"Deleted Collection": "Deleted Collection",
|
||||
"deleted": "deleted",
|
||||
"archived": "archived",
|
||||
"created": "created",
|
||||
"published": "published",
|
||||
"saved": "saved",
|
||||
"updated": "updated",
|
||||
"Never viewed": "Never viewed",
|
||||
"Viewed": "Viewed",
|
||||
"in": "in",
|
||||
"New": "New",
|
||||
"Only visible to you": "Only visible to you",
|
||||
"Draft": "Draft",
|
||||
@@ -43,7 +33,7 @@
|
||||
"Delete table": "Delete table",
|
||||
"Italic": "Italic",
|
||||
"Sorry, that link won’t work for this embed type": "Sorry, that link won’t work for this embed type",
|
||||
"Find or create a doc": "Find or create a doc",
|
||||
"Find or create a doc…": "Find or create a doc…",
|
||||
"Big heading": "Big heading",
|
||||
"Medium heading": "Medium heading",
|
||||
"Small heading": "Small heading",
|
||||
@@ -56,17 +46,17 @@
|
||||
"Link": "Link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Highlight": "Highlight",
|
||||
"Type '/' to insert": "Type '/' to insert",
|
||||
"Keep typing to filter": "Keep typing to filter",
|
||||
"Type '/' to insert…": "Type '/' to insert…",
|
||||
"Keep typing to filter…": "Keep typing to filter…",
|
||||
"No results": "No results",
|
||||
"Open link": "Open link",
|
||||
"Ordered list": "Ordered list",
|
||||
"Paste a link": "Paste a link",
|
||||
"Paste a link…": "Paste a link…",
|
||||
"Paste a {{service}} link…": "Paste a {{service}} link…",
|
||||
"Placeholder": "Placeholder",
|
||||
"Quote": "Quote",
|
||||
"Remove link": "Remove link",
|
||||
"Search or paste a link": "Search or paste a link",
|
||||
"Search or paste a link…": "Search or paste a link…",
|
||||
"Strikethrough": "Strikethrough",
|
||||
"Bold": "Bold",
|
||||
"Subheading": "Subheading",
|
||||
@@ -75,17 +65,13 @@
|
||||
"Tip notice": "Tip notice",
|
||||
"Warning": "Warning",
|
||||
"Warning notice": "Warning notice",
|
||||
"Icon": "Icon",
|
||||
"Loading": "Loading",
|
||||
"Search": "Search",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "Outline is available in your language {{optionLabel}}, would you like to change?",
|
||||
"Change Language": "Change Language",
|
||||
"Dismiss": "Dismiss",
|
||||
"Search…": "Search…",
|
||||
"Keyboard shortcuts": "Keyboard shortcuts",
|
||||
"New collection": "New collection",
|
||||
"New collection…": "New collection…",
|
||||
"Collections": "Collections",
|
||||
"Untitled": "Untitled",
|
||||
"Home": "Home",
|
||||
"Search": "Search",
|
||||
"Starred": "Starred",
|
||||
"Invite people…": "Invite people…",
|
||||
"Invite people": "Invite people",
|
||||
@@ -115,10 +101,10 @@
|
||||
"Collection permissions": "Collection permissions",
|
||||
"New document": "New document",
|
||||
"Import document": "Import document",
|
||||
"Edit": "Edit",
|
||||
"Permissions": "Permissions",
|
||||
"Export": "Export",
|
||||
"Delete": "Delete",
|
||||
"Edit…": "Edit…",
|
||||
"Permissions…": "Permissions…",
|
||||
"Export…": "Export…",
|
||||
"Delete…": "Delete…",
|
||||
"Edit collection": "Edit collection",
|
||||
"Delete collection": "Delete collection",
|
||||
"Export collection": "Export collection",
|
||||
@@ -127,30 +113,33 @@
|
||||
"Document restored": "Document restored",
|
||||
"Document unpublished": "Document unpublished",
|
||||
"Restore": "Restore",
|
||||
"Restore…": "Restore…",
|
||||
"Choose a collection": "Choose a collection",
|
||||
"Unpin": "Unpin",
|
||||
"Pin to collection": "Pin to collection",
|
||||
"Unstar": "Unstar",
|
||||
"Star": "Star",
|
||||
"Share link": "Share link",
|
||||
"Share link…": "Share link…",
|
||||
"Enable embeds": "Enable embeds",
|
||||
"Disable embeds": "Disable embeds",
|
||||
"New nested document": "New nested document",
|
||||
"Create template": "Create template",
|
||||
"Create template…": "Create template…",
|
||||
"Edit": "Edit",
|
||||
"Duplicate": "Duplicate",
|
||||
"Unpublish": "Unpublish",
|
||||
"Move": "Move",
|
||||
"Move…": "Move…",
|
||||
"History": "History",
|
||||
"Download": "Download",
|
||||
"Print": "Print",
|
||||
"Delete {{ documentName }}": "Delete {{ documentName }}",
|
||||
"Create template": "Create template",
|
||||
"Share document": "Share document",
|
||||
"Edit group": "Edit group",
|
||||
"Delete group": "Delete group",
|
||||
"Members": "Members",
|
||||
"Members…": "Members…",
|
||||
"New document in": "New document in",
|
||||
"collection": "collection",
|
||||
"New document in <1>{{collectionName}}</1>": "New document in <1>{{collectionName}}</1>",
|
||||
"New template": "New template",
|
||||
"New template…": "New template…",
|
||||
"Link copied": "Link copied",
|
||||
"Restore version": "Restore version",
|
||||
"Copy link": "Copy link",
|
||||
@@ -164,16 +153,16 @@
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "Are you sure you want to suspend this account? Suspended users will be prevented from logging in.",
|
||||
"Make {{ userName }} a member…": "Make {{ userName }} a member…",
|
||||
"Make {{ userName }} an admin…": "Make {{ userName }} an admin…",
|
||||
"Revoke invite": "Revoke invite",
|
||||
"Revoke invite…": "Revoke invite…",
|
||||
"Activate account": "Activate account",
|
||||
"Suspend account": "Suspend account",
|
||||
"Suspend account…": "Suspend account…",
|
||||
"Documents": "Documents",
|
||||
"The document archive is empty at the moment.": "The document archive is empty at the moment.",
|
||||
"Search in collection": "Search in collection",
|
||||
"Search in collection…": "Search in collection…",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> doesn’t contain any documents yet.",
|
||||
"Get started by creating a new one!": "Get started by creating a new one!",
|
||||
"Create a document": "Create a document",
|
||||
"Manage members": "Manage members",
|
||||
"Manage members…": "Manage members…",
|
||||
"Pinned": "Pinned",
|
||||
"Recently updated": "Recently updated",
|
||||
"Recently published": "Recently published",
|
||||
@@ -186,13 +175,13 @@
|
||||
"More details about this collection…": "More details about this collection…",
|
||||
"Private collection": "Private collection",
|
||||
"A private collection will only be visible to invited team members.": "A private collection will only be visible to invited team members.",
|
||||
"Saving": "Saving",
|
||||
"Saving…": "Saving…",
|
||||
"Save": "Save",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} was added to the collection",
|
||||
"Could not add user": "Could not add user",
|
||||
"Can’t find the group you’re looking for?": "Can’t find the group you’re looking for?",
|
||||
"Create a group": "Create a group",
|
||||
"Search by group name": "Search by group name",
|
||||
"Search by group name…": "Search by group name…",
|
||||
"Search groups": "Search groups",
|
||||
"No groups matching your search": "No groups matching your search",
|
||||
"No groups left to add": "No groups left to add",
|
||||
@@ -200,19 +189,20 @@
|
||||
"{{ userName }} was added to the collection": "{{ userName }} was added to the collection",
|
||||
"Need to add someone who’s not yet on the team yet?": "Need to add someone who’s not yet on the team yet?",
|
||||
"Invite people to {{ teamName }}": "Invite people to {{ teamName }}",
|
||||
"Search by name": "Search by name",
|
||||
"Search by name…": "Search by name…",
|
||||
"Search people": "Search people",
|
||||
"No people matching your search": "No people matching your search",
|
||||
"No people left to add": "No people left to add",
|
||||
"Read only": "Read only",
|
||||
"Read & Edit": "Read & Edit",
|
||||
"Permissions": "Permissions",
|
||||
"Remove": "Remove",
|
||||
"Active <1></1> ago": "Active <1></1> ago",
|
||||
"Active {{ lastActiveAt }} ago": "Active {{ lastActiveAt }} ago",
|
||||
"Never signed in": "Never signed in",
|
||||
"Invited": "Invited",
|
||||
"Admin": "Admin",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.",
|
||||
"Creating": "Creating",
|
||||
"Creating…": "Creating…",
|
||||
"Create": "Create",
|
||||
"Recently viewed": "Recently viewed",
|
||||
"Created by me": "Created by me",
|
||||
@@ -227,7 +217,7 @@
|
||||
"New from template": "New from template",
|
||||
"Publish": "Publish",
|
||||
"Publish document": "Publish document",
|
||||
"Publishing": "Publishing",
|
||||
"Publishing…": "Publishing…",
|
||||
"No documents found for your filters.": "No documents found for your filters.",
|
||||
"You’ve not got any drafts at the moment.": "You’ve not got any drafts at the moment.",
|
||||
"Not found": "Not found",
|
||||
@@ -241,7 +231,7 @@
|
||||
"Invite them to {{teamName}}": "Invite them to {{teamName}}",
|
||||
"{{userName}} was removed from the group": "{{userName}} was removed from the group",
|
||||
"Could not remove user": "Could not remove user",
|
||||
"Add people": "Add people",
|
||||
"Add people…": "Add people…",
|
||||
"This group has no members.": "This group has no members.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.",
|
||||
"Navigation": "Navigation",
|
||||
@@ -284,6 +274,7 @@
|
||||
"Delete Account": "Delete Account",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "You may delete your account at any time, note that this is unrecoverable",
|
||||
"Delete account": "Delete account",
|
||||
"Recently Updated": "Recently Updated",
|
||||
"Alphabetical": "Alphabetical",
|
||||
"You’ve not starred any documents yet.": "You’ve not starred any documents yet.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.",
|
||||
|
||||
@@ -1,297 +0,0 @@
|
||||
{
|
||||
"currently editing": "현재 편집 중",
|
||||
"currently viewing": "현재 조회 중",
|
||||
"viewed {{ timeAgo }} ago": "{{ timeAgo }} 전 조회",
|
||||
"You": "귀하",
|
||||
"Trash": "휴지통",
|
||||
"Archive": "보관",
|
||||
"Drafts": "임시 보관함",
|
||||
"Templates": "탬플릿",
|
||||
"Deleted Collection": "삭제 된 콜렉션",
|
||||
"deleted": "삭제됨",
|
||||
"archived": "보관됨",
|
||||
"created": "추가됨",
|
||||
"published": "게시됨",
|
||||
"saved": "저장됨",
|
||||
"updated": "업데이트 됨",
|
||||
"Never viewed": "미조회",
|
||||
"Viewed": "조회",
|
||||
"in": "안에",
|
||||
"New": "새",
|
||||
"Only visible to you": "나에게만 보임",
|
||||
"Draft": "임시보관",
|
||||
"Template": "템플릿",
|
||||
"New doc": "새 문서",
|
||||
"More options": "옵션 더 보기",
|
||||
"Insert column after": "뒤에 열 추가",
|
||||
"Insert column before": "앞에 열 추가",
|
||||
"Insert row after": "뒤에 행 추가",
|
||||
"Insert row before": "앞에 행 추가",
|
||||
"Align center": "가운데 정렬",
|
||||
"Align left": "왼쪽 정렬",
|
||||
"Align right": "오른쪽 정렬",
|
||||
"Bulleted list": "글머리 기호 목록",
|
||||
"Todo list": "할 일 목록",
|
||||
"Code block": "코드블럭",
|
||||
"Copied to clipboard": "클립보드에 복사되었습니다",
|
||||
"Code": "코드",
|
||||
"Create link": "링크 생성",
|
||||
"Sorry, an error occurred creating the link": "죄송합니다, 링크 생성 중 에러가 발생했습니다",
|
||||
"Create a new doc": "새 문서 만들기",
|
||||
"Delete column": "열 삭제",
|
||||
"Delete row": "행 삭제",
|
||||
"Delete table": "테이블 삭제",
|
||||
"Italic": "이탤릭체",
|
||||
"Sorry, that link won’t work for this embed type": "죄송합니다, 해당 링크를 이 임베드 유형에서 사용할 수 없습니다",
|
||||
"Find or create a doc": "찾기 또는 새 문서 만들기",
|
||||
"Big heading": "큰 제목",
|
||||
"Medium heading": "중간 제목",
|
||||
"Small heading": "작은 제목",
|
||||
"Heading": "제목",
|
||||
"Divider": "구분선",
|
||||
"Image": "이미지",
|
||||
"Sorry, an error occurred uploading the image": "이미지 업로드 중에 오류가 발생했습니다",
|
||||
"Info": "정보",
|
||||
"Info notice": "정보 공지",
|
||||
"Link": "링크",
|
||||
"Link copied to clipboard": "링크가 클립보드로 복사 되었습니다",
|
||||
"Highlight": "강조",
|
||||
"Type '/' to insert": "키보드의 '/' 키로 글을 작성할 수 있어요",
|
||||
"Keep typing to filter": "찾으실 항목을 입력해 주세요",
|
||||
"No results": "결과 없음",
|
||||
"Open link": "링크 열기",
|
||||
"Ordered list": "번호가 있는 목록",
|
||||
"Paste a link": "링크 붙여 넣기",
|
||||
"Paste a {{service}} link…": "{{service}} 링크 붙여 넣기…",
|
||||
"Placeholder": "Placeholder",
|
||||
"Quote": "인용구",
|
||||
"Remove link": "링크 삭제",
|
||||
"Search or paste a link": "링크 검색 또는 붙여넣기",
|
||||
"Strikethrough": "취소선",
|
||||
"Bold": "굵게",
|
||||
"Subheading": "부제목",
|
||||
"Table": "표",
|
||||
"Tip": "도움말",
|
||||
"Tip notice": "팁 사항",
|
||||
"Warning": "주의",
|
||||
"Warning notice": "주의 사항",
|
||||
"Icon": "아이콘",
|
||||
"Loading": "로딩 중",
|
||||
"Search": "검색",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "Outline을 {{optionLabel}}어로 사용할 수 있어요. 적용할까요?",
|
||||
"Change Language": "언어 변경",
|
||||
"Dismiss": "닫기",
|
||||
"Keyboard shortcuts": "단축키",
|
||||
"New collection": "새 컬렉션",
|
||||
"Collections": "컬렉션",
|
||||
"Untitled": "제목없음",
|
||||
"Home": "홈",
|
||||
"Starred": "중요 문서",
|
||||
"Invite people…": "초대하기…",
|
||||
"Invite people": "초대하기",
|
||||
"Create a collection": "컬렉션 만들기",
|
||||
"Return to App": "앱으로 돌아가기",
|
||||
"Profile": "사용자 정보",
|
||||
"Notifications": "알림",
|
||||
"API Tokens": "API 토큰",
|
||||
"Details": "세부 정보",
|
||||
"Security": "보안",
|
||||
"People": "사용자",
|
||||
"Groups": "그룹",
|
||||
"Share Links": "링크공유",
|
||||
"Export Data": "데이터 내보내기",
|
||||
"Integrations": "연동",
|
||||
"Installation": "설치",
|
||||
"Settings": "설정",
|
||||
"API documentation": "API 문서",
|
||||
"Changelog": "변경 사항",
|
||||
"Send us feedback": "의견 보내기",
|
||||
"Report a bug": "버그 신고",
|
||||
"Appearance": "화면",
|
||||
"System": "시스템",
|
||||
"Light": "밝게 보기",
|
||||
"Dark": "어둡게 보기",
|
||||
"Log out": "로그아웃",
|
||||
"Collection permissions": "컬렉션 권한",
|
||||
"New document": "새 문서",
|
||||
"Import document": "문서 가져 오기",
|
||||
"Edit": "편집",
|
||||
"Permissions": "권한",
|
||||
"Export": "내보내기",
|
||||
"Delete": "삭제",
|
||||
"Edit collection": "컬렉션 편집",
|
||||
"Delete collection": "컬렉션 삭제",
|
||||
"Export collection": "컬렉션 내보내기",
|
||||
"Document duplicated": "문서가 중복되었습니다",
|
||||
"Document archived": "문서가 보관되었습니다",
|
||||
"Document restored": "문서가 복원되었습니다",
|
||||
"Document unpublished": "문서가 게시되지 않았습니다",
|
||||
"Restore": "복원하기",
|
||||
"Choose a collection": "컬렉션 선택",
|
||||
"Unpin": "고정 해제",
|
||||
"Pin to collection": "컬렉션에 고정",
|
||||
"Unstar": "중요 문서 해제",
|
||||
"Star": "중요 문서 표시",
|
||||
"Share link": "링크 공유하기",
|
||||
"Enable embeds": "임베드 활성화",
|
||||
"Disable embeds": "임베드 비활성화",
|
||||
"New nested document": "새 하위 문서",
|
||||
"Create template": "템플릿 만들기",
|
||||
"Duplicate": "복사하기",
|
||||
"Unpublish": "게시 취소",
|
||||
"Move": "Move",
|
||||
"History": "히스토리",
|
||||
"Download": "다운로드",
|
||||
"Print": "인쇄",
|
||||
"Delete {{ documentName }}": "{{ documentName }} 삭제",
|
||||
"Share document": "문서 공유하기",
|
||||
"Edit group": "그룹 수정",
|
||||
"Delete group": "그룹 삭제",
|
||||
"Members": "Members",
|
||||
"collection": "컬렉션",
|
||||
"New document in <1>{{collectionName}}</1>": "New document in <1>{{collectionName}}</1>",
|
||||
"New template": "New template",
|
||||
"Link copied": "링크 복사됨",
|
||||
"Restore version": "버전 복원",
|
||||
"Copy link": "링크 복사",
|
||||
"Share link revoked": "링크 공유가 취소되었습니다",
|
||||
"Share link copied": "공유 할 링크가 복사되었습니다.",
|
||||
"Go to document": "문서로 이동",
|
||||
"Revoke link": "링크 삭제",
|
||||
"By {{ author }}": "{{ author }} 작성",
|
||||
"Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.": "정말로 {{ userName }} 에게 관리자 권한을 부여 하시겠습니까? 관리자는 팀과 결제 정보를 수정할 수 있습니다.",
|
||||
"Are you sure you want to make {{ userName }} a member?": "정말로 {{ userName }} 에게 멤버 권한을 부여 하시겠습니까?",
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "이 계정 사용을 중지 하시겠습니까? 정지된 사용자는 로그인 할 수 없습니다.",
|
||||
"Make {{ userName }} a member…": "{{ userName }} 을 멤버로 지정...",
|
||||
"Make {{ userName }} an admin…": "{{ userName }} 을 관리자로 지정...",
|
||||
"Revoke invite": "Revoke invite",
|
||||
"Activate account": "계정 활성화",
|
||||
"Suspend account": "Suspend account",
|
||||
"Documents": "문서",
|
||||
"The document archive is empty at the moment.": "현재 보관 문서함이 비어 있습니다.",
|
||||
"Search in collection": "Search in collection",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> 에 문서가 아직 없습니다.",
|
||||
"Get started by creating a new one!": "새 문서를 만들어 시작해 보세요!",
|
||||
"Create a document": "새 문서",
|
||||
"Manage members": "Manage members",
|
||||
"Pinned": "고정됨",
|
||||
"Recently updated": "최근 업데이트 순",
|
||||
"Recently published": "최근 게시 순",
|
||||
"Least recently updated": "오래된 순",
|
||||
"A–Z": "A-Z",
|
||||
"The collection was updated": "컬렉션이 업데이트 되었습니다.",
|
||||
"You can edit the name and other details at any time, however doing so often might confuse your team mates.": "이름 및 기타 세부 정보를 언제라도 수정할 수 있지만 그렇게 할 경우 팀원들에게 자주 혼란을 줄 수 있습니다.",
|
||||
"Name": "이름",
|
||||
"Description": "설명",
|
||||
"More details about this collection…": "이 컬렉션에 대한 세부 정보…",
|
||||
"Private collection": "비공개 컬렉션",
|
||||
"A private collection will only be visible to invited team members.": "비공개 컬렉션은 초대된 팀원에게만 표시됩니다.",
|
||||
"Saving": "Saving",
|
||||
"Save": "저장",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} 이 컬렉션에 추가되었습니다.",
|
||||
"Could not add user": "사용자를 추가할 수 없습니다",
|
||||
"Can’t find the group you’re looking for?": "그룹을 찾지 못하시겠습니까?",
|
||||
"Create a group": "그룹 만들기",
|
||||
"Search by group name": "Search by group name",
|
||||
"Search groups": "그룹 검색",
|
||||
"No groups matching your search": "찾으시는 그룹이 없습니다",
|
||||
"No groups left to add": "사용자를 추가할 그룹이 없습니다",
|
||||
"Add": "추가",
|
||||
"{{ userName }} was added to the collection": "{{ userName }} 사용자가 컬렉션에 추가되었습니다",
|
||||
"Need to add someone who’s not yet on the team yet?": "아직 팀에 추가하실 사람이 더 있습니까?",
|
||||
"Invite people to {{ teamName }}": "사용자를 {{ teamName }} 팀으로 초대",
|
||||
"Search by name": "이름으로 검색",
|
||||
"Search people": "사용자 검색",
|
||||
"No people matching your search": "찾으시는 사용자가 없습니다.",
|
||||
"No people left to add": "추가할 사용자가 없습니다",
|
||||
"Read only": "읽기 전용",
|
||||
"Read & Edit": "조회 & 편집",
|
||||
"Remove": "제거",
|
||||
"Active <1></1> ago": "<1></1> 전에 활동",
|
||||
"Never signed in": "로그인 한 적 없음",
|
||||
"Invited": "초대됨",
|
||||
"Admin": "관리자",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "컬렉션을 통해 사용자님의 지식문서들을 그룹화합니다. 주제나 내부 팀을 중심으로 구성되었을 때 가장 좋습니다.",
|
||||
"Creating": "Creating",
|
||||
"Create": "생성",
|
||||
"Recently viewed": "최근에 조회됨",
|
||||
"Created by me": "나에 의해 생성됨",
|
||||
"Hide contents": "내용 숨기기",
|
||||
"Show contents": "내용 보기",
|
||||
"Archived": "보관됨",
|
||||
"Anyone with the link <1></1>can view this document": "링크 <1></1> 가 있는 모든 사용자는 이 문서를 볼 수 있습니다",
|
||||
"Share": "공유하기",
|
||||
"Save Draft": "임시 저장",
|
||||
"Done Editing": "편집 완료",
|
||||
"Edit {{noun}}": "{{noun}} 편집하기",
|
||||
"New from template": "새 템플릿 문서",
|
||||
"Publish": "게시하기",
|
||||
"Publish document": "문서 게시",
|
||||
"Publishing": "게시 중",
|
||||
"No documents found for your filters.": "검색조건과 맞는 문서를 찾을 수 없습니다.",
|
||||
"You’ve not got any drafts at the moment.": "현재 임시보관 된 문서가 없습니다.",
|
||||
"Not found": "찾을 수 없습니다",
|
||||
"We were unable to find the page you’re looking for. Go to the <2>homepage</2>?": "페이지를 찾을 수 없습니다. <2>홈페이지</2>로 돌아가시겠습니까?",
|
||||
"Offline": "오프라인",
|
||||
"We were unable to load the document while offline.": "오프라인 상태에서는 문서를 불러 올 수 없습니다.",
|
||||
"Your account has been suspended": "계정사용이 중지 되었습니다",
|
||||
"A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.": "관리자(<1>{{suspendedContactEmail}}</1>) 가 귀하의 계정 사용을 중지시켰습니다. 계정을 다시 활성화 하려면 해당 담당자에게 직접 문의 하십시오.",
|
||||
"{{userName}} was added to the group": "{{userName}} 이 그룹에 추가되었습니다.",
|
||||
"Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?": "팀원을 그룹에 추가하여 그룹의 접근 권한을 부여할 수 있어요. 추가할 팀원이 있으신가요?",
|
||||
"Invite them to {{teamName}}": "{{teamName}}으로 초대해보세요",
|
||||
"{{userName}} was removed from the group": "{{userName}} 이 그룹에서 제외되었습니다.",
|
||||
"Could not remove user": "사용자를 제거할 수 없습니다",
|
||||
"Add people": "Add people",
|
||||
"This group has no members.": "비어있는 그룹입니다.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline은 쉽고 빠르게 사용할 수 있도록 디자인되었습니다. 일반적인 키보드 단축키들을 사용할 수 있으며, 마크다운 형식도 사용가능합니다.",
|
||||
"Navigation": "네비게이션",
|
||||
"New document in current collection": "현재 컬렉션의 새 문서",
|
||||
"Edit current document": "현재 문서 편집",
|
||||
"Move current document": "현재 문서로 이동",
|
||||
"Jump to search": "검색으로 이동",
|
||||
"Jump to dashboard": "대시보드로 이동",
|
||||
"Table of contents": "목차",
|
||||
"Open this guide": "이 가이드 열기",
|
||||
"Editor": "편집자",
|
||||
"Save and exit document edit mode": "문서 저장하고 편집 모드 종료",
|
||||
"Publish and exit document edit mode": "문서 게시하고 편집모드 종료",
|
||||
"Save document and continue editing": "저장하고 편집 계속하기",
|
||||
"Cancel editing": "변경 취소",
|
||||
"Underline": "밑줄",
|
||||
"Undo": "실행 취소",
|
||||
"Redo": "복원하기",
|
||||
"Markdown": "마크다운",
|
||||
"Large header": "큰 제목",
|
||||
"Medium header": "중간 제목",
|
||||
"Small header": "작은 제목",
|
||||
"Numbered list": "번호 매기기 목록",
|
||||
"Blockquote": "블록 인용구",
|
||||
"Horizontal divider": "구분선",
|
||||
"Inline code": "인라인 코드",
|
||||
"Not Found": "찾을 수 없습니다",
|
||||
"We were unable to find the page you’re looking for.": "페이지를 찾을 수 없습니다.",
|
||||
"Use the <1>{{meta}}+K</1> shortcut to search from anywhere in your knowledge base": "<1>{{meta}}+K</1>를 입력해서 검색할 수 있어요",
|
||||
"No documents found for your search filters. <1></1>Create a new document?": "문서를 찾을 수 없어요. <1></1>새 문서를 만들까요?",
|
||||
"Clear filters": "필터 지우기",
|
||||
"Profile saved": "프로필이 저장되었습니다",
|
||||
"Profile picture updated": "프로필 사진이 업데이트 됨",
|
||||
"Unable to upload new profile picture": "새 프로필 사진을 업로드 할 수 없습니다",
|
||||
"Photo": "사진",
|
||||
"Upload": "업로드",
|
||||
"Full name": "이름",
|
||||
"Language": "언어",
|
||||
"Please note that translations are currently in early access.<1></1>Community contributions are accepted though our <4>translation portal</4>": "현재 번역은 사전 체험판입니다. <1></1> <4>번역 포털</4> 을 통해 커뮤니티에 공헌하실 수 있습니다",
|
||||
"Delete Account": "계정 삭제",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "계정을 언제든지 삭제할 수 있지만 다시 복구할 수 없습니다",
|
||||
"Delete account": "계정 삭제",
|
||||
"Alphabetical": "알파벳 순",
|
||||
"You’ve not starred any documents yet.": "중요 표시된 문서가 없어요.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "템플릿이 없습니다. 템플릿을 추가해서 팀이 지속적이고 정확한 문서를 만들도록 도와줄 수 있습니다.",
|
||||
"Trash is empty at the moment.": "현재 휴지통이 비어 있습니다.",
|
||||
"You joined": "{0}에 참여하였습니다",
|
||||
"Joined": "참여함",
|
||||
"{{ time }} ago.": "{{ time }} 전.",
|
||||
"Suspended": "사용 중지됨",
|
||||
"Edit Profile": "프로필 수정",
|
||||
"{{ userName }} hasn’t updated any documents yet.": "아직 {{ userName }} 가 문서를 업데이트하지 않았습니다."
|
||||
}
|
||||
@@ -1,297 +0,0 @@
|
||||
{
|
||||
"currently editing": "atualmente editando",
|
||||
"currently viewing": "atualmente visualizando",
|
||||
"viewed {{ timeAgo }} ago": "visto {{ timeAgo }} atrás",
|
||||
"You": "Você",
|
||||
"Trash": "Lixeira",
|
||||
"Archive": "Arquivo",
|
||||
"Drafts": "Rascunhos",
|
||||
"Templates": "Modelos",
|
||||
"Deleted Collection": "Excluir Coleção",
|
||||
"deleted": "excluído",
|
||||
"archived": "arquivado",
|
||||
"created": "criado",
|
||||
"published": "publicado",
|
||||
"saved": "salvo",
|
||||
"updated": "atualizado",
|
||||
"Never viewed": "Nunca aberto",
|
||||
"Viewed": "Visualizado",
|
||||
"in": "em",
|
||||
"New": "Novo",
|
||||
"Only visible to you": "Visível apenas para você",
|
||||
"Draft": "Rascunho",
|
||||
"Template": "Modelo",
|
||||
"New doc": "Novo documento",
|
||||
"More options": "Mais opções",
|
||||
"Insert column after": "Inserir coluna à esquerda",
|
||||
"Insert column before": "Inserir coluna à direita",
|
||||
"Insert row after": "Inserir linha acima",
|
||||
"Insert row before": "Inserir linha abaixo",
|
||||
"Align center": "Alinhar ao centro",
|
||||
"Align left": "Alinhar à esquerda",
|
||||
"Align right": "Alinhar à direita",
|
||||
"Bulleted list": "Lista não ordenada",
|
||||
"Todo list": "Lista de tarefas",
|
||||
"Code block": "Bloco de código",
|
||||
"Copied to clipboard": "Copiado para a área de transferência",
|
||||
"Code": "Código",
|
||||
"Create link": "Criar atalho",
|
||||
"Sorry, an error occurred creating the link": "Desculpe, ocorreu um erro ao criar o link",
|
||||
"Create a new doc": "Criar um novo documento",
|
||||
"Delete column": "Excluir coluna",
|
||||
"Delete row": "Excluir linha",
|
||||
"Delete table": "Excluir tabela",
|
||||
"Italic": "Itálico",
|
||||
"Sorry, that link won’t work for this embed type": "Desculpe, esse link não funcionará para este tipo de incorporação",
|
||||
"Find or create a doc": "Find or create a doc",
|
||||
"Big heading": "Cabeçalho grande",
|
||||
"Medium heading": "Cabeçalho médio",
|
||||
"Small heading": "Cabeçalho pequeno",
|
||||
"Heading": "Cabeçalho",
|
||||
"Divider": "Divisor",
|
||||
"Image": "Imagem",
|
||||
"Sorry, an error occurred uploading the image": "Desculpe, ocorreu um erro ao enviar a imagem",
|
||||
"Info": "Informação",
|
||||
"Info notice": "Aviso de informação",
|
||||
"Link": "Link",
|
||||
"Link copied to clipboard": "Link copiado para área de transferência",
|
||||
"Highlight": "Destaque",
|
||||
"Type '/' to insert": "Type '/' to insert",
|
||||
"Keep typing to filter": "Keep typing to filter",
|
||||
"No results": "Sem resultados",
|
||||
"Open link": "Abrir link",
|
||||
"Ordered list": "Lista ordenada",
|
||||
"Paste a link": "Paste a link",
|
||||
"Paste a {{service}} link…": "Cole um link de {{service}}…",
|
||||
"Placeholder": "Placeholder",
|
||||
"Quote": "Citação",
|
||||
"Remove link": "Excluir link",
|
||||
"Search or paste a link": "Search or paste a link",
|
||||
"Strikethrough": "Riscado",
|
||||
"Bold": "Negrito",
|
||||
"Subheading": "Subtítulo",
|
||||
"Table": "Tabela",
|
||||
"Tip": "Dica",
|
||||
"Tip notice": "Aviso de dica",
|
||||
"Warning": "Atenção",
|
||||
"Warning notice": "Aviso de atenção",
|
||||
"Icon": "Ícone",
|
||||
"Loading": "Loading",
|
||||
"Search": "Busca",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "O esboço está disponível em seu idioma {{optionLabel}}, deseja alterar?",
|
||||
"Change Language": "Mudar Idioma",
|
||||
"Dismiss": "Descartar",
|
||||
"Keyboard shortcuts": "Atalhos de teclado",
|
||||
"New collection": "New collection",
|
||||
"Collections": "Coleções",
|
||||
"Untitled": "Sem título",
|
||||
"Home": "Início",
|
||||
"Starred": "Favoritos",
|
||||
"Invite people…": "Convidar pessoas…",
|
||||
"Invite people": "Convidar pessoas",
|
||||
"Create a collection": "Criar uma coleção",
|
||||
"Return to App": "Voltar ao App",
|
||||
"Profile": "Perfil",
|
||||
"Notifications": "Notificações",
|
||||
"API Tokens": "Tokens de API",
|
||||
"Details": "Detalhes",
|
||||
"Security": "Segurança",
|
||||
"People": "Pessoas",
|
||||
"Groups": "Grupos",
|
||||
"Share Links": "Links Compartilhados",
|
||||
"Export Data": "Exportar Dados",
|
||||
"Integrations": "Integrações",
|
||||
"Installation": "Instalação",
|
||||
"Settings": "Configurações",
|
||||
"API documentation": "Documentação da API",
|
||||
"Changelog": "Histórico de Atualizações",
|
||||
"Send us feedback": "Envie-nos a sua opinião",
|
||||
"Report a bug": "Reportar erro",
|
||||
"Appearance": "Aparência",
|
||||
"System": "Sistema",
|
||||
"Light": "Claro",
|
||||
"Dark": "Escuro",
|
||||
"Log out": "Sair",
|
||||
"Collection permissions": "Permissões da coleção",
|
||||
"New document": "Novo documento",
|
||||
"Import document": "Importar documento",
|
||||
"Edit": "Edit",
|
||||
"Permissions": "Permissões",
|
||||
"Export": "Export",
|
||||
"Delete": "Delete",
|
||||
"Edit collection": "Editar coleção",
|
||||
"Delete collection": "Excluir coleção",
|
||||
"Export collection": "Exportar coleção",
|
||||
"Document duplicated": "Documento duplicado",
|
||||
"Document archived": "Documento arquivado",
|
||||
"Document restored": "Documento restaurado",
|
||||
"Document unpublished": "Documento não publicado",
|
||||
"Restore": "Restaurar",
|
||||
"Choose a collection": "Escolha uma coleção",
|
||||
"Unpin": "Desafixar",
|
||||
"Pin to collection": "Fixar à coleção",
|
||||
"Unstar": "Desfavoritar",
|
||||
"Star": "Favoritar",
|
||||
"Share link": "Share link",
|
||||
"Enable embeds": "Enable embeds",
|
||||
"Disable embeds": "Disable embeds",
|
||||
"New nested document": "New nested document",
|
||||
"Create template": "Create template",
|
||||
"Duplicate": "Duplicate",
|
||||
"Unpublish": "Unpublish",
|
||||
"Move": "Move",
|
||||
"History": "History",
|
||||
"Download": "Download",
|
||||
"Print": "Print",
|
||||
"Delete {{ documentName }}": "Delete {{ documentName }}",
|
||||
"Share document": "Share document",
|
||||
"Edit group": "Edit group",
|
||||
"Delete group": "Delete group",
|
||||
"Members": "Members",
|
||||
"collection": "collection",
|
||||
"New document in <1>{{collectionName}}</1>": "New document in <1>{{collectionName}}</1>",
|
||||
"New template": "New template",
|
||||
"Link copied": "Link copied",
|
||||
"Restore version": "Restore version",
|
||||
"Copy link": "Copy link",
|
||||
"Share link revoked": "Share link revoked",
|
||||
"Share link copied": "Share link copied",
|
||||
"Go to document": "Go to document",
|
||||
"Revoke link": "Revoke link",
|
||||
"By {{ author }}": "By {{ author }}",
|
||||
"Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.": "Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.",
|
||||
"Are you sure you want to make {{ userName }} a member?": "Are you sure you want to make {{ userName }} a member?",
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "Are you sure you want to suspend this account? Suspended users will be prevented from logging in.",
|
||||
"Make {{ userName }} a member…": "Make {{ userName }} a member…",
|
||||
"Make {{ userName }} an admin…": "Make {{ userName }} an admin…",
|
||||
"Revoke invite": "Revoke invite",
|
||||
"Activate account": "Activate account",
|
||||
"Suspend account": "Suspend account",
|
||||
"Documents": "Documents",
|
||||
"The document archive is empty at the moment.": "The document archive is empty at the moment.",
|
||||
"Search in collection": "Search in collection",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> doesn’t contain any documents yet.",
|
||||
"Get started by creating a new one!": "Get started by creating a new one!",
|
||||
"Create a document": "Create a document",
|
||||
"Manage members": "Manage members",
|
||||
"Pinned": "Pinned",
|
||||
"Recently updated": "Recently updated",
|
||||
"Recently published": "Recently published",
|
||||
"Least recently updated": "Least recently updated",
|
||||
"A–Z": "A–Z",
|
||||
"The collection was updated": "The collection was updated",
|
||||
"You can edit the name and other details at any time, however doing so often might confuse your team mates.": "You can edit the name and other details at any time, however doing so often might confuse your team mates.",
|
||||
"Name": "Nome",
|
||||
"Description": "Descrição",
|
||||
"More details about this collection…": "Mais detalhes sobre esta coleção…",
|
||||
"Private collection": "Coleção privada",
|
||||
"A private collection will only be visible to invited team members.": "Uma coleção privada só será visível aos membros convidados da equipe.",
|
||||
"Saving": "Saving",
|
||||
"Save": "Salvar",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} foi adicionado à coleção",
|
||||
"Could not add user": "Não foi possível adicionar o usuário",
|
||||
"Can’t find the group you’re looking for?": "Não achou o grupo que procura?",
|
||||
"Create a group": "Criar um grupo",
|
||||
"Search by group name": "Search by group name",
|
||||
"Search groups": "Buscar grupos",
|
||||
"No groups matching your search": "Nenhum grupo corresponde à sua pesquisa",
|
||||
"No groups left to add": "Nenhum grupo restante para adicionar",
|
||||
"Add": "Adicionar",
|
||||
"{{ userName }} was added to the collection": "{{ userName }} foi adicionado à coleção",
|
||||
"Need to add someone who’s not yet on the team yet?": "Precisa adicionar alguém que ainda não faz parte da equipe?",
|
||||
"Invite people to {{ teamName }}": "Convide pessoas para {{ teamName }}",
|
||||
"Search by name": "Search by name",
|
||||
"Search people": "Procurar pessoas",
|
||||
"No people matching your search": "Nenhuma pessoa corresponde à sua pesquisa",
|
||||
"No people left to add": "Nenhuma pessoa restante para adicionar",
|
||||
"Read only": "Somente leitura",
|
||||
"Read & Edit": "Leitura & Edição",
|
||||
"Remove": "Remover",
|
||||
"Active <1></1> ago": "Active <1></1> ago",
|
||||
"Never signed in": "Nunca logou",
|
||||
"Invited": "Convidado",
|
||||
"Admin": "Administrador",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Coleções são para agrupar sua base de conhecimento. Elas funcionam melhor quando organizadas em torno de um tópico ou equipe interna - por exemplo, Produto ou Engenharia.",
|
||||
"Creating": "Creating",
|
||||
"Create": "Create",
|
||||
"Recently viewed": "Recently viewed",
|
||||
"Created by me": "Created by me",
|
||||
"Hide contents": "Hide contents",
|
||||
"Show contents": "Show contents",
|
||||
"Archived": "Archived",
|
||||
"Anyone with the link <1></1>can view this document": "Anyone with the link <1></1>can view this document",
|
||||
"Share": "Share",
|
||||
"Save Draft": "Save Draft",
|
||||
"Done Editing": "Done Editing",
|
||||
"Edit {{noun}}": "Edit {{noun}}",
|
||||
"New from template": "New from template",
|
||||
"Publish": "Publish",
|
||||
"Publish document": "Publish document",
|
||||
"Publishing": "Publishing",
|
||||
"No documents found for your filters.": "No documents found for your filters.",
|
||||
"You’ve not got any drafts at the moment.": "You’ve not got any drafts at the moment.",
|
||||
"Not found": "Not found",
|
||||
"We were unable to find the page you’re looking for. Go to the <2>homepage</2>?": "We were unable to find the page you’re looking for. Go to the <2>homepage</2>?",
|
||||
"Offline": "Offline",
|
||||
"We were unable to load the document while offline.": "We were unable to load the document while offline.",
|
||||
"Your account has been suspended": "Your account has been suspended",
|
||||
"A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.": "A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.",
|
||||
"{{userName}} was added to the group": "{{userName}} was added to the group",
|
||||
"Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?": "Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?",
|
||||
"Invite them to {{teamName}}": "Invite them to {{teamName}}",
|
||||
"{{userName}} was removed from the group": "{{userName}} was removed from the group",
|
||||
"Could not remove user": "Could not remove user",
|
||||
"Add people": "Add people",
|
||||
"This group has no members.": "This group has no members.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.",
|
||||
"Navigation": "Navigation",
|
||||
"New document in current collection": "New document in current collection",
|
||||
"Edit current document": "Edit current document",
|
||||
"Move current document": "Move current document",
|
||||
"Jump to search": "Jump to search",
|
||||
"Jump to dashboard": "Jump to dashboard",
|
||||
"Table of contents": "Table of contents",
|
||||
"Open this guide": "Open this guide",
|
||||
"Editor": "Editor",
|
||||
"Save and exit document edit mode": "Save and exit document edit mode",
|
||||
"Publish and exit document edit mode": "Publish and exit document edit mode",
|
||||
"Save document and continue editing": "Save document and continue editing",
|
||||
"Cancel editing": "Cancel editing",
|
||||
"Underline": "Underline",
|
||||
"Undo": "Undo",
|
||||
"Redo": "Redo",
|
||||
"Markdown": "Markdown",
|
||||
"Large header": "Large header",
|
||||
"Medium header": "Medium header",
|
||||
"Small header": "Small header",
|
||||
"Numbered list": "Numbered list",
|
||||
"Blockquote": "Blockquote",
|
||||
"Horizontal divider": "Horizontal divider",
|
||||
"Inline code": "Inline code",
|
||||
"Not Found": "Not Found",
|
||||
"We were unable to find the page you’re looking for.": "We were unable to find the page you’re looking for.",
|
||||
"Use the <1>{{meta}}+K</1> shortcut to search from anywhere in your knowledge base": "Use the <1>{{meta}}+K</1> shortcut to search from anywhere in your knowledge base",
|
||||
"No documents found for your search filters. <1></1>Create a new document?": "No documents found for your search filters. <1></1>Create a new document?",
|
||||
"Clear filters": "Clear filters",
|
||||
"Profile saved": "Profile saved",
|
||||
"Profile picture updated": "Profile picture updated",
|
||||
"Unable to upload new profile picture": "Unable to upload new profile picture",
|
||||
"Photo": "Photo",
|
||||
"Upload": "Upload",
|
||||
"Full name": "Full name",
|
||||
"Language": "Language",
|
||||
"Please note that translations are currently in early access.<1></1>Community contributions are accepted though our <4>translation portal</4>": "Please note that translations are currently in early access.<1></1>Community contributions are accepted though our <4>translation portal</4>",
|
||||
"Delete Account": "Delete Account",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "You may delete your account at any time, note that this is unrecoverable",
|
||||
"Delete account": "Delete account",
|
||||
"Alphabetical": "Alphabetical",
|
||||
"You’ve not starred any documents yet.": "You’ve not starred any documents yet.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.",
|
||||
"Trash is empty at the moment.": "Trash is empty at the moment.",
|
||||
"You joined": "You joined",
|
||||
"Joined": "Joined",
|
||||
"{{ time }} ago.": "{{ time }} ago.",
|
||||
"Suspended": "Suspended",
|
||||
"Edit Profile": "Edit Profile",
|
||||
"{{ userName }} hasn’t updated any documents yet.": "{{ userName }} hasn’t updated any documents yet."
|
||||
}
|
||||
@@ -7,16 +7,6 @@
|
||||
"Archive": "Arquivo",
|
||||
"Drafts": "Rascunhos",
|
||||
"Templates": "Modelos",
|
||||
"Deleted Collection": "Coleção eliminada",
|
||||
"deleted": "eliminado",
|
||||
"archived": "arquivado",
|
||||
"created": "criado",
|
||||
"published": "publicado",
|
||||
"saved": "guardado",
|
||||
"updated": "atualizado",
|
||||
"Never viewed": "Nunca visto",
|
||||
"Viewed": "Visto",
|
||||
"in": "em",
|
||||
"New": "Novo",
|
||||
"Only visible to you": "Apenas visível para ti",
|
||||
"Draft": "Rascunho",
|
||||
@@ -43,7 +33,7 @@
|
||||
"Delete table": "Eliminar tabela",
|
||||
"Italic": "Itálico",
|
||||
"Sorry, that link won’t work for this embed type": "Desculpe, esse link não funcionará para este tipo de incorporação",
|
||||
"Find or create a doc": "Encontre ou crie um documento",
|
||||
"Find or create a doc…": "Encontre ou crie um documento…",
|
||||
"Big heading": "Cabeçalho grande",
|
||||
"Medium heading": "Cabeçalho médio",
|
||||
"Small heading": "Cabeçalho pequeno",
|
||||
@@ -56,17 +46,17 @@
|
||||
"Link": "Link",
|
||||
"Link copied to clipboard": "Copiado para o clipboard",
|
||||
"Highlight": "Destaque",
|
||||
"Type '/' to insert": "Digite '/' para inserir",
|
||||
"Keep typing to filter": "Continue digitando para filtrar",
|
||||
"Type '/' to insert…": "Digite '/' para inserir…",
|
||||
"Keep typing to filter…": "Continue digitando para filtrar…",
|
||||
"No results": "Sem resultados",
|
||||
"Open link": "Abrir link",
|
||||
"Ordered list": "Lista ordenada",
|
||||
"Paste a link": "Inserir um link",
|
||||
"Paste a link…": "Inserir um link…",
|
||||
"Paste a {{service}} link…": "Inserir um {{service}} link…",
|
||||
"Placeholder": "Espaço em branco",
|
||||
"Quote": "Citação",
|
||||
"Remove link": "Remover link",
|
||||
"Search or paste a link": "Procure ou insira um link",
|
||||
"Search or paste a link…": "Procure ou insira um link…",
|
||||
"Strikethrough": "Riscado",
|
||||
"Bold": "Negrito",
|
||||
"Subheading": "Subtítulo",
|
||||
@@ -75,17 +65,13 @@
|
||||
"Tip notice": "Aviso de dica",
|
||||
"Warning": "Aviso",
|
||||
"Warning notice": "Aviso de alerta",
|
||||
"Icon": "Ícone",
|
||||
"Loading": "A carregar",
|
||||
"Search": "Pesquisa",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "O Outline está disponível no seu idioma {{optionLabel}}, deseja alterar?",
|
||||
"Change Language": "Alterar língua",
|
||||
"Dismiss": "Dispensar",
|
||||
"Search…": "Pesquisa…",
|
||||
"Keyboard shortcuts": "Atalhos do teclado",
|
||||
"New collection": "Nova coleção",
|
||||
"New collection…": "Nova coleção…",
|
||||
"Collections": "Coleções",
|
||||
"Untitled": "Sem título",
|
||||
"Home": "Página inicial",
|
||||
"Search": "Pesquisa",
|
||||
"Starred": "Favoritos",
|
||||
"Invite people…": "Convidar pessoas…",
|
||||
"Invite people": "Convidar pessoas",
|
||||
@@ -115,10 +101,10 @@
|
||||
"Collection permissions": "Permissões da coleção",
|
||||
"New document": "Novo documento",
|
||||
"Import document": "Importar documento",
|
||||
"Edit": "Editar",
|
||||
"Permissions": "Permissões",
|
||||
"Export": "Exportar",
|
||||
"Delete": "Apagar",
|
||||
"Edit…": "Editar…",
|
||||
"Permissions…": "Permissões…",
|
||||
"Export…": "Exportar…",
|
||||
"Delete…": "Apagar…",
|
||||
"Edit collection": "Editar coleção",
|
||||
"Delete collection": "Apagar coleção",
|
||||
"Export collection": "Exportar coleção",
|
||||
@@ -127,30 +113,33 @@
|
||||
"Document restored": "Documento restaurado",
|
||||
"Document unpublished": "Documento não publicado",
|
||||
"Restore": "Restaurar",
|
||||
"Restore…": "Restaurar…",
|
||||
"Choose a collection": "Escolher coleção",
|
||||
"Unpin": "Tirar pino",
|
||||
"Pin to collection": "Pin coleção",
|
||||
"Unstar": "Tirar estrela",
|
||||
"Star": "Estrela",
|
||||
"Share link": "Partilhar link",
|
||||
"Share link…": "Partilhar link…",
|
||||
"Enable embeds": "Ativar embeds",
|
||||
"Disable embeds": "Desativar embeds",
|
||||
"New nested document": "Novo documento aninhado",
|
||||
"Create template": "Criar template",
|
||||
"Create template…": "Criar template…",
|
||||
"Edit": "Editar",
|
||||
"Duplicate": "Duplicar",
|
||||
"Unpublish": "Despublicar",
|
||||
"Move": "Mover",
|
||||
"Move…": "Mover…",
|
||||
"History": "Historia",
|
||||
"Download": "Download",
|
||||
"Print": "Imprimir",
|
||||
"Delete {{ documentName }}": "Apagar {{ documentName }}",
|
||||
"Create template": "Criar template",
|
||||
"Share document": "Partilhar documento",
|
||||
"Edit group": "Editar grupo",
|
||||
"Delete group": "Apagar grupo",
|
||||
"Members": "Membros",
|
||||
"Members…": "Membros…",
|
||||
"New document in": "Novo documento em",
|
||||
"collection": "coleção",
|
||||
"New document in <1>{{collectionName}}</1>": "Novo documento em <1>{{collectionName}}</1>",
|
||||
"New template": "Novo template",
|
||||
"New template…": "Novo template…",
|
||||
"Link copied": "Link copiado",
|
||||
"Restore version": "Restaurar versão",
|
||||
"Copy link": "Copiar link",
|
||||
@@ -164,16 +153,16 @@
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "Tem a certeza que deseja suspender esta conta? Os usuários suspensos serão impedidos de se conectar.",
|
||||
"Make {{ userName }} a member…": "Tornar {{ userName }} um membro…",
|
||||
"Make {{ userName }} an admin…": "Tornar {{ userName }} um administrador…",
|
||||
"Revoke invite": "Revogar convite",
|
||||
"Revoke invite…": "Revogar convite…",
|
||||
"Activate account": "Ativar conta",
|
||||
"Suspend account": "Suspender conta",
|
||||
"Suspend account…": "Suspender conta…",
|
||||
"Documents": "Documentos",
|
||||
"The document archive is empty at the moment.": "O arquivo do documento está vazio neste momento.",
|
||||
"Search in collection": "Procurar na coleção",
|
||||
"Search in collection…": "Procurar na coleção…",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> não contém nenhum documento ainda.",
|
||||
"Get started by creating a new one!": "Para começar, crie um documento novo!",
|
||||
"Create a document": "Criar documento",
|
||||
"Manage members": "Gerenciar membros",
|
||||
"Manage members…": "Gerenciar membros…",
|
||||
"Pinned": "Marcado",
|
||||
"Recently updated": "Atualizado recentemente",
|
||||
"Recently published": "Publicado recentemente",
|
||||
@@ -186,13 +175,13 @@
|
||||
"More details about this collection…": "Mais detalhes sobre esta coleção…",
|
||||
"Private collection": "Coleção privada",
|
||||
"A private collection will only be visible to invited team members.": "Uma coleção privada só será visível para os membros convidados da equipa.",
|
||||
"Saving": "A guardar",
|
||||
"Saving…": "A guardar…",
|
||||
"Save": "Guardar",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} foi adicionado à coleção",
|
||||
"Could not add user": "Não foi possível adicionar usuário",
|
||||
"Can’t find the group you’re looking for?": "Não consegue encontrar o grupo que procura?",
|
||||
"Create a group": "Criar grupo",
|
||||
"Search by group name": "Procurar grupo pelo nome",
|
||||
"Search by group name…": "Procurar grupo pelo nome…",
|
||||
"Search groups": "Procurar grupos",
|
||||
"No groups matching your search": "Nenhum grupo corresponde à sua pesquisa",
|
||||
"No groups left to add": "Nenhum grupo restante para adicionar",
|
||||
@@ -200,19 +189,20 @@
|
||||
"{{ userName }} was added to the collection": "{{ userName }} foi adicionado à coleção",
|
||||
"Need to add someone who’s not yet on the team yet?": "Precisa adicionar alguém que ainda não faz parte da equipe?",
|
||||
"Invite people to {{ teamName }}": "Convide pessoas para {{ teamName }}",
|
||||
"Search by name": "Procurar pelo nome",
|
||||
"Search by name…": "Procurar pelo nome…",
|
||||
"Search people": "Procurar pessoas",
|
||||
"No people matching your search": "Nenhuma pessoa corresponde à sua pesquisa",
|
||||
"No people left to add": "Não sobrou ninguém para adicionar",
|
||||
"Read only": "Somente leitura",
|
||||
"Read & Edit": "Leitura & Escrita",
|
||||
"Permissions": "Permissões",
|
||||
"Remove": "Remover",
|
||||
"Active <1></1> ago": "Ativo <1></1> atrás",
|
||||
"Active {{ lastActiveAt }} ago": "Ativo há {{ lastActiveAt }}",
|
||||
"Never signed in": "Nunca conectado",
|
||||
"Invited": "Convidado",
|
||||
"Admin": "Administrador",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Coleções são para agrupar a sua base de dados de conhecimento. Elas trabalham melhor quando organizadas em torno de um tópico ou equipa interna — Produto ou Engenharia, por exemplo.",
|
||||
"Creating": "Criando",
|
||||
"Creating…": "Criando…",
|
||||
"Create": "Criar",
|
||||
"Recently viewed": "Visto recentemente",
|
||||
"Created by me": "Criado por mim",
|
||||
@@ -227,7 +217,7 @@
|
||||
"New from template": "Criar a partir do modelo",
|
||||
"Publish": "Publicar",
|
||||
"Publish document": "Publicar documento",
|
||||
"Publishing": "Publicando",
|
||||
"Publishing…": "Publicando…",
|
||||
"No documents found for your filters.": "Nenhum documento encontrado com os seus filtros.",
|
||||
"You’ve not got any drafts at the moment.": "Não tem nenhum rascunho de momento.",
|
||||
"Not found": "Não encontrado",
|
||||
@@ -241,7 +231,7 @@
|
||||
"Invite them to {{teamName}}": "Convide pessoas para {{teamName}}",
|
||||
"{{userName}} was removed from the group": "{{userName}} foi removido do grupo",
|
||||
"Could not remove user": "Não foi possível remover o usuário",
|
||||
"Add people": "Adicionar pessoas",
|
||||
"Add people…": "Adicionar pessoas…",
|
||||
"This group has no members.": "Este grupo não tem membros.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "O Outline foi projetado para ser rápido e fácil de usar. Todos os seus atalhos de teclado usuais funcionam aqui, e há Markdown também.",
|
||||
"Navigation": "Navegação",
|
||||
@@ -284,6 +274,7 @@
|
||||
"Delete Account": "Apagar conta",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "Pode apagar a sua conta a qualquer momento, atenção que isso é irrecuperável",
|
||||
"Delete account": "Apagar conta",
|
||||
"Recently Updated": "Atualizado recentemente",
|
||||
"Alphabetical": "Alfabético",
|
||||
"You’ve not starred any documents yet.": "Ainda não marcou nenhum documento com estrela.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "Ainda não existem modelos. Pode criar modelos para ajudar sua equipa a criar documentação consistente e precisa.",
|
||||
|
||||
@@ -1,297 +1,288 @@
|
||||
{
|
||||
"currently editing": "сейчас редактируется",
|
||||
"currently viewing": "сейчас просматривается",
|
||||
"currently editing": "редактируется",
|
||||
"currently viewing": "просматривается",
|
||||
"viewed {{ timeAgo }} ago": "просмотрено {{ timeAgo }} назад",
|
||||
"You": "Вы",
|
||||
"You": "You",
|
||||
"Trash": "Корзина",
|
||||
"Archive": "Архив",
|
||||
"Drafts": "Черновики",
|
||||
"Templates": "Шаблоны",
|
||||
"Deleted Collection": "Удаленная коллекция",
|
||||
"deleted": "удален",
|
||||
"archived": "архивирован",
|
||||
"created": "создан",
|
||||
"published": "опубликован",
|
||||
"saved": "сохранен",
|
||||
"updated": "обновлен",
|
||||
"Never viewed": "Не просмотрено",
|
||||
"Viewed": "Просмотрено",
|
||||
"in": "в",
|
||||
"New": "Новое",
|
||||
"Only visible to you": "Видно только вам",
|
||||
"New": "New",
|
||||
"Only visible to you": "Only visible to you",
|
||||
"Draft": "Черновик",
|
||||
"Template": "Шаблон",
|
||||
"New doc": "Новый документ",
|
||||
"More options": "Больше опций",
|
||||
"Insert column after": "Вставить столбец справа",
|
||||
"Insert column before": "Вставить столбец слева",
|
||||
"Insert row after": "Вставить строку снизу",
|
||||
"Insert row before": "Вставить строку сверху",
|
||||
"Align center": "Выровнять по центру",
|
||||
"Align left": "Выровнять по левому краю",
|
||||
"Align right": "Выровнять по правому краю",
|
||||
"Bulleted list": "Маркированный список",
|
||||
"Todo list": "Список дел",
|
||||
"Code block": "Блок кода",
|
||||
"Copied to clipboard": "Скопировано в буфер обмена",
|
||||
"Code": "Код",
|
||||
"Create link": "Создать ссылку",
|
||||
"New doc": "New doc",
|
||||
"More options": "More options",
|
||||
"Insert column after": "Insert column after",
|
||||
"Insert column before": "Insert column before",
|
||||
"Insert row after": "Insert row after",
|
||||
"Insert row before": "Insert row before",
|
||||
"Align center": "Align center",
|
||||
"Align left": "Align left",
|
||||
"Align right": "Align right",
|
||||
"Bulleted list": "Bulleted list",
|
||||
"Todo list": "Todo list",
|
||||
"Code block": "Code block",
|
||||
"Copied to clipboard": "Copied to clipboard",
|
||||
"Code": "Code",
|
||||
"Create link": "Create link",
|
||||
"Sorry, an error occurred creating the link": "К сожалению, при создании ссылки возникла ошибка",
|
||||
"Create a new doc": "Создать новый документ",
|
||||
"Delete column": "Удалить столбец",
|
||||
"Create a new doc": "Create a new doc",
|
||||
"Delete column": "Удалить колонку",
|
||||
"Delete row": "Удалить строку",
|
||||
"Delete table": "Удалить таблицу",
|
||||
"Italic": "Курсив",
|
||||
"Sorry, that link won’t work for this embed type": "К сожалению, эта ссылка не работает для такого типа встраивания",
|
||||
"Find or create a doc": "Find or create a doc",
|
||||
"Big heading": "Большой заголовок",
|
||||
"Medium heading": "Средний заголовок",
|
||||
"Small heading": "Малый заголовок",
|
||||
"Heading": "Заголовок",
|
||||
"Divider": "Разделитель",
|
||||
"Image": "Изображение",
|
||||
"Sorry, an error occurred uploading the image": "К сожалению, при загрузке изображения произошла ошибка",
|
||||
"Info": "Информация",
|
||||
"Info notice": "Информационное уведомление",
|
||||
"Link": "Ссылка",
|
||||
"Link copied to clipboard": "Ссылка скопирована в буфер обмена",
|
||||
"Highlight": "Выделение",
|
||||
"Type '/' to insert": "Type '/' to insert",
|
||||
"Keep typing to filter": "Keep typing to filter",
|
||||
"No results": "Ничего не найденo",
|
||||
"Open link": "Перейти по ссылке",
|
||||
"Ordered list": "Нумерованный список",
|
||||
"Paste a link": "Paste a link",
|
||||
"Paste a {{service}} link…": "Вставить ссылку {{service}}…",
|
||||
"Placeholder": "Поле для заполнения",
|
||||
"Sorry, that link won’t work for this embed type": "Sorry, that link won’t work for this embed type",
|
||||
"Find or create a doc…": "Find or create a doc…",
|
||||
"Big heading": "Big heading",
|
||||
"Medium heading": "Medium heading",
|
||||
"Small heading": "Small heading",
|
||||
"Heading": "Heading",
|
||||
"Divider": "Divider",
|
||||
"Image": "Image",
|
||||
"Sorry, an error occurred uploading the image": "Sorry, an error occurred uploading the image",
|
||||
"Info": "Info",
|
||||
"Info notice": "Info notice",
|
||||
"Link": "Link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Highlight": "Highlight",
|
||||
"Type '/' to insert…": "Type '/' to insert…",
|
||||
"Keep typing to filter…": "Keep typing to filter…",
|
||||
"No results": "No results",
|
||||
"Open link": "Open link",
|
||||
"Ordered list": "Ordered list",
|
||||
"Paste a link…": "Paste a link…",
|
||||
"Paste a {{service}} link…": "Paste a {{service}} link…",
|
||||
"Placeholder": "Placeholder",
|
||||
"Quote": "Цитата",
|
||||
"Remove link": "Удалить ссылку",
|
||||
"Search or paste a link": "Search or paste a link",
|
||||
"Strikethrough": "Зачеркнуто",
|
||||
"Bold": "Жирный",
|
||||
"Subheading": "Подзаголовок",
|
||||
"Table": "Таблица",
|
||||
"Tip": "Подсказка",
|
||||
"Tip notice": "Подсказка",
|
||||
"Warning": "Предупреждение",
|
||||
"Warning notice": "Предупреждение",
|
||||
"Icon": "Значок",
|
||||
"Loading": "Loading",
|
||||
"Search": "Поиск",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "Outline доступен на Вашем языке {{optionLabel}}, хотите изменить?",
|
||||
"Change Language": "Сменить язык",
|
||||
"Dismiss": "Убрать",
|
||||
"Keyboard shortcuts": "Горячие клавиши",
|
||||
"New collection": "New collection",
|
||||
"Collections": "Коллекции",
|
||||
"Untitled": "Без названия",
|
||||
"Home": "Домашняя страница",
|
||||
"Starred": "Избранное",
|
||||
"Invite people…": "Пригласить людей…",
|
||||
"Invite people": "Пригласить людей",
|
||||
"Create a collection": "Создать коллекцию",
|
||||
"Return to App": "Вернуться в приложение",
|
||||
"Profile": "Профиль",
|
||||
"Notifications": "Уведомления",
|
||||
"API Tokens": "Токены API",
|
||||
"Details": "Подробнее",
|
||||
"Security": "Безопасность",
|
||||
"People": "Люди",
|
||||
"Groups": "Группы",
|
||||
"Share Links": "Ссылки общего доступа",
|
||||
"Export Data": "Экспорт данных",
|
||||
"Integrations": "Интеграции",
|
||||
"Installation": "Установка",
|
||||
"Settings": "Настройки",
|
||||
"API documentation": "Документация по API",
|
||||
"Changelog": "История изменений",
|
||||
"Send us feedback": "Отправьте нам отзыв",
|
||||
"Report a bug": "Сообщить об ошибке",
|
||||
"Appearance": "Оформление",
|
||||
"System": "Система",
|
||||
"Light": "Светлая",
|
||||
"Dark": "Темная",
|
||||
"Log out": "Выйти из системы",
|
||||
"Collection permissions": "Права доступа к коллекциям",
|
||||
"New document": "Новый документ",
|
||||
"Import document": "Импорт документа",
|
||||
"Edit": "Редактировать",
|
||||
"Permissions": "Права доступа",
|
||||
"Export": "Export",
|
||||
"Delete": "Delete",
|
||||
"Edit collection": "Редактировать коллекцию",
|
||||
"Delete collection": "Удалить коллекцию",
|
||||
"Export collection": "Экспорт коллекции",
|
||||
"Document duplicated": "Документ скопирован",
|
||||
"Document archived": "Документ архивирован",
|
||||
"Document restored": "Документ восстановлен",
|
||||
"Document unpublished": "Документ снят с публикации",
|
||||
"Restore": "Восстановить",
|
||||
"Choose a collection": "Выберите коллекцию",
|
||||
"Unpin": "Открепить",
|
||||
"Pin to collection": "Прикрепить к коллекции",
|
||||
"Unstar": "Убрать из избранного",
|
||||
"Star": "Добавить в избранное",
|
||||
"Share link": "Share link",
|
||||
"Enable embeds": "Включить встраивание",
|
||||
"Disable embeds": "Отключить встраивание",
|
||||
"New nested document": "Новый вложенный документ",
|
||||
"Create template": "Создать шаблон",
|
||||
"Duplicate": "Сделать копию",
|
||||
"Unpublish": "Снять с публикации",
|
||||
"Move": "Move",
|
||||
"History": "История",
|
||||
"Download": "Скачать",
|
||||
"Print": "Распечатать",
|
||||
"Delete {{ documentName }}": "Удалить {{ documentName }}",
|
||||
"Share document": "Поделиться документом",
|
||||
"Edit group": "Редактировать группу",
|
||||
"Delete group": "Удалить группу",
|
||||
"Members": "Members",
|
||||
"collection": "коллекция",
|
||||
"New document in <1>{{collectionName}}</1>": "New document in <1>{{collectionName}}</1>",
|
||||
"New template": "New template",
|
||||
"Link copied": "Ссылка скопирована",
|
||||
"Restore version": "Восстановить версию",
|
||||
"Copy link": "Скопировать ссылку",
|
||||
"Share link revoked": "Ссылка общего доступа отозвана",
|
||||
"Share link copied": "Ссылка общего доступа скопирована",
|
||||
"Go to document": "Перейти к документу",
|
||||
"Revoke link": "Отозвать ссылку",
|
||||
"By {{ author }}": "По {{ author }}",
|
||||
"Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.": "Вы уверены, что хотите сделать {{ userName }} администратором? Администраторы могут изменять информацию о команде и платежную информацию.",
|
||||
"Are you sure you want to make {{ userName }} a member?": "Вы уверены, что хотите сделать {{ userName }} участником?",
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "Вы уверены, что хотите заблокировать эту учетную запись? Заблокированным пользователям будет запрещено входить в систему.",
|
||||
"Make {{ userName }} a member…": "Сделать {{ userName }} участником…",
|
||||
"Make {{ userName }} an admin…": "Сделать {{ userName }} администратором…",
|
||||
"Revoke invite": "Revoke invite",
|
||||
"Activate account": "Активировать аккаунт",
|
||||
"Suspend account": "Suspend account",
|
||||
"Documents": "Документы",
|
||||
"The document archive is empty at the moment.": "Архив документов на данный момент пуст.",
|
||||
"Search in collection": "Search in collection",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> пока не содержит документов.",
|
||||
"Get started by creating a new one!": "Начните с создания нового!",
|
||||
"Create a document": "Создать документ",
|
||||
"Manage members": "Manage members",
|
||||
"Pinned": "Прикреплено",
|
||||
"Recently updated": "Недавно обновлено",
|
||||
"Recently published": "Недавно опубликовано",
|
||||
"Least recently updated": "Наиболее давно обновлено",
|
||||
"A–Z": "А–Я",
|
||||
"The collection was updated": "Коллекция обновлена",
|
||||
"You can edit the name and other details at any time, however doing so often might confuse your team mates.": "Вы можете изменить имя и прочие подробности в любое время, однако зачастую это может сбить с толку членов вашей команды.",
|
||||
"Name": "Имя",
|
||||
"Description": "Описание",
|
||||
"More details about this collection…": "Подробнее об этой коллекции…",
|
||||
"Private collection": "Частная коллекция",
|
||||
"A private collection will only be visible to invited team members.": "Частная коллекция будет видна только приглашенным членам команды.",
|
||||
"Saving": "Saving",
|
||||
"Save": "Сохранить",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} добавлен в коллекцию",
|
||||
"Could not add user": "Не удалось добавить пользователя",
|
||||
"Can’t find the group you’re looking for?": "Не можете найти интересующую Вас группу?",
|
||||
"Create a group": "Создать группу",
|
||||
"Search by group name": "Search by group name",
|
||||
"Search groups": "Поиск групп",
|
||||
"No groups matching your search": "Нет групп, соответствующих вашему запросу",
|
||||
"No groups left to add": "Не осталось групп для добавления",
|
||||
"Add": "Добавить",
|
||||
"{{ userName }} was added to the collection": "{{ userName }} добавлен в коллекцию",
|
||||
"Need to add someone who’s not yet on the team yet?": "Нужно добавить кого-то, кого еще нет в команде?",
|
||||
"Invite people to {{ teamName }}": "Пригласить людей в {{ teamName }}",
|
||||
"Search by name": "Search by name",
|
||||
"Search people": "Поиск людей",
|
||||
"No people matching your search": "Нет людей, соответствующих вашему запросу",
|
||||
"No people left to add": "Не осталось людей для добавления",
|
||||
"Read only": "Только для чтения",
|
||||
"Read & Edit": "Читать и редактировать",
|
||||
"Remove": "Удалить",
|
||||
"Active <1></1> ago": "Active <1></1> ago",
|
||||
"Never signed in": "Никогда не входил",
|
||||
"Invited": "Приглашенные",
|
||||
"Admin": "Администратор",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Коллекции предназначены для группирования вашей базы знаний. Они работают лучше всего, когда организованы вокруг определенной темы или внутренней команды — например, Продукта или Разработки.",
|
||||
"Creating": "Creating",
|
||||
"Create": "Создать",
|
||||
"Recently viewed": "Недавно просмотренные",
|
||||
"Created by me": "Созданные мной",
|
||||
"Hide contents": "Скрыть содержимое",
|
||||
"Show contents": "Показать содержимое",
|
||||
"Archived": "Архивировано",
|
||||
"Anyone with the link <1></1>can view this document": "Все, у кого есть ссылка <1></1> могут просмотреть этот документ",
|
||||
"Share": "Поделиться",
|
||||
"Save Draft": "Сохранить черновик",
|
||||
"Done Editing": "Правки внесены",
|
||||
"Edit {{noun}}": "Редактировать {{noun}}",
|
||||
"New from template": "Создать из шаблона",
|
||||
"Publish": "Опубликовать",
|
||||
"Publish document": "Опубликовать документ",
|
||||
"Publishing": "Publishing",
|
||||
"No documents found for your filters.": "По вашему запросу ничего не найдено.",
|
||||
"You’ve not got any drafts at the moment.": "На данный момент у вас нет черновиков.",
|
||||
"Not found": "Не найдено",
|
||||
"We were unable to find the page you’re looking for. Go to the <2>homepage</2>?": "Нам не удалось найти страницу, которую вы ищете. Перейти на <2>домашнюю страницу</2>?",
|
||||
"Offline": "Оффлайн",
|
||||
"We were unable to load the document while offline.": "Нам не удалось загрузить документ в режиме оффлайн.",
|
||||
"Your account has been suspended": "Ваш аккаунт был заблокирован",
|
||||
"A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.": "Администратор команды (<1>{{suspendedContactEmail}}</1>) заблокировал Вашу учетную запись. Чтобы возобновить действие аккаунта, свяжитесь с ним напрямую.",
|
||||
"{{userName}} was added to the group": "{{userName}} добавлен в группу",
|
||||
"Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?": "Добавьте ниже членов команды, чтобы предоставить им доступ к группе. Нужно добавить кого-то, кого еще нет в команде?",
|
||||
"Invite them to {{teamName}}": "Пригласить их в {{teamName}}",
|
||||
"{{userName}} was removed from the group": "{{userName}} удален из группы",
|
||||
"Could not remove user": "Не удалось удалить пользователя",
|
||||
"Add people": "Add people",
|
||||
"This group has no members.": "В этой группе нет участников.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline разработан, чтобы быть быстрым и простым в использовании. Здесь работают все привычные сочетания клавиш, а также есть Markdown.",
|
||||
"Navigation": "Навигация",
|
||||
"New document in current collection": "Новый документ в текущей коллекции",
|
||||
"Edit current document": "Редактировать текущий документ",
|
||||
"Move current document": "Переместить текущий документ",
|
||||
"Jump to search": "Перейти к поиску",
|
||||
"Jump to dashboard": "Перейти к панели управления",
|
||||
"Table of contents": "Содержание",
|
||||
"Open this guide": "Открыть эту инструкцию",
|
||||
"Editor": "Редактор",
|
||||
"Save and exit document edit mode": "Сохранить и закончить редактирование документа",
|
||||
"Publish and exit document edit mode": "Опубликовать и закончить редактирование документа",
|
||||
"Save document and continue editing": "Сохранить документ и продолжить редактирование",
|
||||
"Cancel editing": "Отменить редактирование",
|
||||
"Underline": "Подчеркивание",
|
||||
"Undo": "Отменить",
|
||||
"Redo": "Повторить",
|
||||
"Remove link": "Remove link",
|
||||
"Search or paste a link…": "Search or paste a link…",
|
||||
"Strikethrough": "Strikethrough",
|
||||
"Bold": "Bold",
|
||||
"Subheading": "Subheading",
|
||||
"Table": "Table",
|
||||
"Tip": "Tip",
|
||||
"Tip notice": "Tip notice",
|
||||
"Warning": "Warning",
|
||||
"Warning notice": "Warning notice",
|
||||
"Search…": "Search…",
|
||||
"Keyboard shortcuts": "Keyboard shortcuts",
|
||||
"New collection…": "New collection…",
|
||||
"Collections": "Collections",
|
||||
"Untitled": "Untitled",
|
||||
"Home": "Home",
|
||||
"Search": "Search",
|
||||
"Starred": "Starred",
|
||||
"Invite people…": "Invite people…",
|
||||
"Invite people": "Invite people",
|
||||
"Create a collection": "Create a collection",
|
||||
"Return to App": "Return to App",
|
||||
"Profile": "Profile",
|
||||
"Notifications": "Notifications",
|
||||
"API Tokens": "API Tokens",
|
||||
"Details": "Details",
|
||||
"Security": "Security",
|
||||
"People": "People",
|
||||
"Groups": "Groups",
|
||||
"Share Links": "Share Links",
|
||||
"Export Data": "Export Data",
|
||||
"Integrations": "Integrations",
|
||||
"Installation": "Installation",
|
||||
"Settings": "Settings",
|
||||
"API documentation": "API documentation",
|
||||
"Changelog": "Changelog",
|
||||
"Send us feedback": "Send us feedback",
|
||||
"Report a bug": "Report a bug",
|
||||
"Appearance": "Appearance",
|
||||
"System": "System",
|
||||
"Light": "Light",
|
||||
"Dark": "Dark",
|
||||
"Log out": "Log out",
|
||||
"Collection permissions": "Collection permissions",
|
||||
"New document": "New document",
|
||||
"Import document": "Import document",
|
||||
"Edit…": "Edit…",
|
||||
"Permissions…": "Permissions…",
|
||||
"Export…": "Export…",
|
||||
"Delete…": "Delete…",
|
||||
"Edit collection": "Edit collection",
|
||||
"Delete collection": "Delete collection",
|
||||
"Export collection": "Export collection",
|
||||
"Document duplicated": "Document duplicated",
|
||||
"Document archived": "Document archived",
|
||||
"Document restored": "Document restored",
|
||||
"Document unpublished": "Document unpublished",
|
||||
"Restore": "Restore",
|
||||
"Restore…": "Restore…",
|
||||
"Choose a collection": "Choose a collection",
|
||||
"Unpin": "Unpin",
|
||||
"Pin to collection": "Pin to collection",
|
||||
"Unstar": "Unstar",
|
||||
"Star": "Star",
|
||||
"Share link…": "Share link…",
|
||||
"Enable embeds": "Enable embeds",
|
||||
"Disable embeds": "Disable embeds",
|
||||
"New nested document": "New nested document",
|
||||
"Create template…": "Create template…",
|
||||
"Edit": "Edit",
|
||||
"Duplicate": "Duplicate",
|
||||
"Unpublish": "Unpublish",
|
||||
"Move…": "Move…",
|
||||
"History": "History",
|
||||
"Download": "Download",
|
||||
"Print": "Print",
|
||||
"Delete {{ documentName }}": "Delete {{ documentName }}",
|
||||
"Create template": "Create template",
|
||||
"Share document": "Share document",
|
||||
"Edit group": "Edit group",
|
||||
"Delete group": "Delete group",
|
||||
"Members…": "Members…",
|
||||
"New document in": "New document in",
|
||||
"collection": "collection",
|
||||
"New template…": "New template…",
|
||||
"Link copied": "Link copied",
|
||||
"Restore version": "Restore version",
|
||||
"Copy link": "Copy link",
|
||||
"Share link revoked": "Share link revoked",
|
||||
"Share link copied": "Share link copied",
|
||||
"Go to document": "Go to document",
|
||||
"Revoke link": "Revoke link",
|
||||
"By {{ author }}": "By {{ author }}",
|
||||
"Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.": "Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.",
|
||||
"Are you sure you want to make {{ userName }} a member?": "Are you sure you want to make {{ userName }} a member?",
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "Are you sure you want to suspend this account? Suspended users will be prevented from logging in.",
|
||||
"Make {{ userName }} a member…": "Make {{ userName }} a member…",
|
||||
"Make {{ userName }} an admin…": "Make {{ userName }} an admin…",
|
||||
"Revoke invite…": "Revoke invite…",
|
||||
"Activate account": "Activate account",
|
||||
"Suspend account…": "Suspend account…",
|
||||
"Documents": "Documents",
|
||||
"The document archive is empty at the moment.": "The document archive is empty at the moment.",
|
||||
"Search in collection…": "Search in collection…",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> doesn’t contain any documents yet.",
|
||||
"Get started by creating a new one!": "Get started by creating a new one!",
|
||||
"Create a document": "Create a document",
|
||||
"Manage members…": "Manage members…",
|
||||
"Pinned": "Pinned",
|
||||
"Recently updated": "Recently updated",
|
||||
"Recently published": "Recently published",
|
||||
"Least recently updated": "Least recently updated",
|
||||
"A–Z": "A–Z",
|
||||
"The collection was updated": "The collection was updated",
|
||||
"You can edit the name and other details at any time, however doing so often might confuse your team mates.": "You can edit the name and other details at any time, however doing so often might confuse your team mates.",
|
||||
"Name": "Name",
|
||||
"Description": "Description",
|
||||
"More details about this collection…": "More details about this collection…",
|
||||
"Private collection": "Private collection",
|
||||
"A private collection will only be visible to invited team members.": "A private collection will only be visible to invited team members.",
|
||||
"Saving…": "Saving…",
|
||||
"Save": "Save",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} was added to the collection",
|
||||
"Could not add user": "Could not add user",
|
||||
"Can’t find the group you’re looking for?": "Can’t find the group you’re looking for?",
|
||||
"Create a group": "Create a group",
|
||||
"Search by group name…": "Search by group name…",
|
||||
"Search groups": "Search groups",
|
||||
"No groups matching your search": "No groups matching your search",
|
||||
"No groups left to add": "No groups left to add",
|
||||
"Add": "Add",
|
||||
"{{ userName }} was added to the collection": "{{ userName }} was added to the collection",
|
||||
"Need to add someone who’s not yet on the team yet?": "Need to add someone who’s not yet on the team yet?",
|
||||
"Invite people to {{ teamName }}": "Invite people to {{ teamName }}",
|
||||
"Search by name…": "Search by name…",
|
||||
"Search people": "Search people",
|
||||
"No people matching your search": "No people matching your search",
|
||||
"No people left to add": "No people left to add",
|
||||
"Read only": "Read only",
|
||||
"Read & Edit": "Read & Edit",
|
||||
"Permissions": "Permissions",
|
||||
"Remove": "Remove",
|
||||
"Active {{ lastActiveAt }} ago": "Active {{ lastActiveAt }} ago",
|
||||
"Never signed in": "Never signed in",
|
||||
"Invited": "Invited",
|
||||
"Admin": "Admin",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.",
|
||||
"Creating…": "Creating…",
|
||||
"Create": "Create",
|
||||
"Recently viewed": "Recently viewed",
|
||||
"Created by me": "Created by me",
|
||||
"Hide contents": "Hide contents",
|
||||
"Show contents": "Show contents",
|
||||
"Archived": "Archived",
|
||||
"Anyone with the link <1></1>can view this document": "Anyone with the link <1></1>can view this document",
|
||||
"Share": "Share",
|
||||
"Save Draft": "Save Draft",
|
||||
"Done Editing": "Done Editing",
|
||||
"Edit {{noun}}": "Edit {{noun}}",
|
||||
"New from template": "New from template",
|
||||
"Publish": "Publish",
|
||||
"Publish document": "Publish document",
|
||||
"Publishing…": "Publishing…",
|
||||
"No documents found for your filters.": "No documents found for your filters.",
|
||||
"You’ve not got any drafts at the moment.": "You’ve not got any drafts at the moment.",
|
||||
"Not found": "Not found",
|
||||
"We were unable to find the page you’re looking for. Go to the <2>homepage</2>?": "We were unable to find the page you’re looking for. Go to the <2>homepage</2>?",
|
||||
"Offline": "Offline",
|
||||
"We were unable to load the document while offline.": "We were unable to load the document while offline.",
|
||||
"Your account has been suspended": "Your account has been suspended",
|
||||
"A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.": "A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.",
|
||||
"{{userName}} was added to the group": "{{userName}} was added to the group",
|
||||
"Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?": "Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?",
|
||||
"Invite them to {{teamName}}": "Invite them to {{teamName}}",
|
||||
"{{userName}} was removed from the group": "{{userName}} was removed from the group",
|
||||
"Could not remove user": "Could not remove user",
|
||||
"Add people…": "Add people…",
|
||||
"This group has no members.": "This group has no members.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.",
|
||||
"Navigation": "Navigation",
|
||||
"New document in current collection": "New document in current collection",
|
||||
"Edit current document": "Edit current document",
|
||||
"Move current document": "Move current document",
|
||||
"Jump to search": "Jump to search",
|
||||
"Jump to dashboard": "Jump to dashboard",
|
||||
"Table of contents": "Table of contents",
|
||||
"Open this guide": "Open this guide",
|
||||
"Editor": "Editor",
|
||||
"Save and exit document edit mode": "Save and exit document edit mode",
|
||||
"Publish and exit document edit mode": "Publish and exit document edit mode",
|
||||
"Save document and continue editing": "Save document and continue editing",
|
||||
"Cancel editing": "Cancel editing",
|
||||
"Underline": "Underline",
|
||||
"Undo": "Undo",
|
||||
"Redo": "Redo",
|
||||
"Markdown": "Markdown",
|
||||
"Large header": "Большой заголовок",
|
||||
"Medium header": "Средний заголовок",
|
||||
"Small header": "Малый заголовок",
|
||||
"Numbered list": "Нумерованный список",
|
||||
"Blockquote": "Цитата",
|
||||
"Horizontal divider": "Горизонтальный разделитель",
|
||||
"Inline code": "Встроенный код",
|
||||
"Not Found": "Не найдено",
|
||||
"We were unable to find the page you’re looking for.": "Нам не удалось найти нужную вам страницу.",
|
||||
"Use the <1>{{meta}}+K</1> shortcut to search from anywhere in your knowledge base": "Используйте сочетание клавиш <1>{{meta}}+K</1> для поиска в базе знаний, находясь где угодно",
|
||||
"No documents found for your search filters. <1></1>Create a new document?": "Не найдено документов для ваших поисковых фильтров. <1></1>Создать новый документ?",
|
||||
"Clear filters": "Сбросить фильтры",
|
||||
"Profile saved": "Профиль сохранен",
|
||||
"Profile picture updated": "Фото профиля обновлено",
|
||||
"Unable to upload new profile picture": "Невозможно загрузить новое фото профиля",
|
||||
"Photo": "Фото",
|
||||
"Upload": "Загрузить",
|
||||
"Full name": "Полное имя",
|
||||
"Language": "Язык",
|
||||
"Please note that translations are currently in early access.<1></1>Community contributions are accepted though our <4>translation portal</4>": "Обратите внимание, что в настоящее время переводы находятся в раннем доступе.<1></1>Вклады сообщества принимаются через наш <4>портал переводов</4>",
|
||||
"Delete Account": "Удалить аккаунт",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "Вы можете удалить свой аккаунт в любое время, обратите внимание, что это необратимо",
|
||||
"Delete account": "Удалить аккаунт",
|
||||
"Alphabetical": "По алфавиту",
|
||||
"You’ve not starred any documents yet.": "Вы еще не добавили ни одного документа в избранное.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "Шаблонов пока нет. Вы можете создавать шаблоны, которые помогут вашей команде создать последовательную и точную документацию.",
|
||||
"Trash is empty at the moment.": "Корзина пока пуста.",
|
||||
"You joined": "Вы присоединились",
|
||||
"Joined": "Присоединились",
|
||||
"{{ time }} ago.": "{{ time }} назад.",
|
||||
"Suspended": "Заблокированы",
|
||||
"Edit Profile": "Редактировать профиль",
|
||||
"{{ userName }} hasn’t updated any documents yet.": "{{ userName }} еще не обновил ни одного документа."
|
||||
"Large header": "Large header",
|
||||
"Medium header": "Medium header",
|
||||
"Small header": "Small header",
|
||||
"Numbered list": "Numbered list",
|
||||
"Blockquote": "Blockquote",
|
||||
"Horizontal divider": "Horizontal divider",
|
||||
"Inline code": "Inline code",
|
||||
"Not Found": "Not Found",
|
||||
"We were unable to find the page you’re looking for.": "We were unable to find the page you’re looking for.",
|
||||
"Use the <1>{{meta}}+K</1> shortcut to search from anywhere in your knowledge base": "Use the <1>{{meta}}+K</1> shortcut to search from anywhere in your knowledge base",
|
||||
"No documents found for your search filters. <1></1>Create a new document?": "No documents found for your search filters. <1></1>Create a new document?",
|
||||
"Clear filters": "Clear filters",
|
||||
"Profile saved": "Profile saved",
|
||||
"Profile picture updated": "Profile picture updated",
|
||||
"Unable to upload new profile picture": "Unable to upload new profile picture",
|
||||
"Photo": "Photo",
|
||||
"Upload": "Upload",
|
||||
"Full name": "Full name",
|
||||
"Language": "Language",
|
||||
"Please note that translations are currently in early access.<1></1>Community contributions are accepted though our <4>translation portal</4>": "Please note that translations are currently in early access.<1></1>Community contributions are accepted though our <4>translation portal</4>",
|
||||
"Delete Account": "Delete Account",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "You may delete your account at any time, note that this is unrecoverable",
|
||||
"Delete account": "Delete account",
|
||||
"Recently Updated": "Recently Updated",
|
||||
"Alphabetical": "Alphabetical",
|
||||
"You’ve not starred any documents yet.": "You’ve not starred any documents yet.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.",
|
||||
"Trash is empty at the moment.": "Trash is empty at the moment.",
|
||||
"You joined": "You joined",
|
||||
"Joined": "Joined",
|
||||
"{{ time }} ago.": "{{ time }} ago.",
|
||||
"Suspended": "Suspended",
|
||||
"Edit Profile": "Edit Profile",
|
||||
"{{ userName }} hasn’t updated any documents yet.": "{{ userName }} hasn’t updated any documents yet."
|
||||
}
|
||||
|
||||
@@ -1,218 +1,208 @@
|
||||
{
|
||||
"currently editing": "正在编辑:",
|
||||
"currently viewing": "目前查看",
|
||||
"viewed {{ timeAgo }} ago": "{{ timeAgo }} 前浏览",
|
||||
"You": "你",
|
||||
"Trash": "回收站",
|
||||
"Archive": "归档",
|
||||
"Drafts": "草稿",
|
||||
"Templates": "文档模板",
|
||||
"Deleted Collection": "删除文档集",
|
||||
"deleted": "已删除",
|
||||
"archived": "已归档",
|
||||
"created": "已创建",
|
||||
"published": "已发布",
|
||||
"saved": "保存成功",
|
||||
"updated": "更新成功",
|
||||
"Never viewed": "未被浏览",
|
||||
"Viewed": "已浏览",
|
||||
"in": "在",
|
||||
"New": "新",
|
||||
"Only visible to you": "只对您可见",
|
||||
"Draft": "草稿",
|
||||
"Template": "模板",
|
||||
"New doc": "新文档",
|
||||
"More options": "更多选项",
|
||||
"Insert column after": "向后插入列",
|
||||
"Insert column before": "向前插入列",
|
||||
"Insert row after": "上方插入行",
|
||||
"Insert row before": "下方插入行",
|
||||
"Align center": "居中对齐",
|
||||
"Align left": "左对齐",
|
||||
"Align right": "右对齐",
|
||||
"Bulleted list": "无序列表",
|
||||
"Todo list": "待办事项列表",
|
||||
"Code block": "代码块",
|
||||
"Copied to clipboard": "已复制到剪切板",
|
||||
"Code": "代码",
|
||||
"Create link": "创建链接",
|
||||
"Sorry, an error occurred creating the link": "抱歉,创建链接时发生错误",
|
||||
"Create a new doc": "新建文档",
|
||||
"Delete column": "删除列",
|
||||
"Delete row": "删除行",
|
||||
"Delete table": "删除表格",
|
||||
"Italic": "斜体",
|
||||
"Sorry, that link won’t work for this embed type": "抱歉,该链接不适用于此嵌入类型",
|
||||
"Find or create a doc": "Find or create a doc",
|
||||
"Big heading": "主标题",
|
||||
"Medium heading": "次标题",
|
||||
"Small heading": "小标题",
|
||||
"Heading": "标题",
|
||||
"Divider": "分割线",
|
||||
"Image": "图片",
|
||||
"Sorry, an error occurred uploading the image": "抱歉,上传图片时发生错误",
|
||||
"Info": "信息",
|
||||
"Info notice": "信息提示",
|
||||
"Link": "链接",
|
||||
"Link copied to clipboard": "链接已经复制到剪贴板",
|
||||
"Highlight": "高亮",
|
||||
"Type '/' to insert": "Type '/' to insert",
|
||||
"Keep typing to filter": "Keep typing to filter",
|
||||
"No results": "没有找到结果",
|
||||
"Open link": "打开链接",
|
||||
"Ordered list": "有序列表",
|
||||
"Paste a link": "Paste a link",
|
||||
"Paste a {{service}} link…": "粘贴 {{service}} 链接…",
|
||||
"Placeholder": "占位符",
|
||||
"Quote": "引用",
|
||||
"Remove link": "移除链接",
|
||||
"Search or paste a link": "Search or paste a link",
|
||||
"Strikethrough": "删除线",
|
||||
"Bold": "加粗",
|
||||
"Subheading": "副标题",
|
||||
"Table": "表格",
|
||||
"Tip": "提示",
|
||||
"Tip notice": "提示信息",
|
||||
"Warning": "警告",
|
||||
"Warning notice": "警告信息",
|
||||
"Icon": "图标",
|
||||
"Loading": "Loading",
|
||||
"Search": "搜索",
|
||||
"Outline is available in your language {{optionLabel}}, would you like to change?": "Outline 当前支持 {{optionLabel}},您想要更改吗?",
|
||||
"Change Language": "更改界面语言",
|
||||
"Dismiss": "忽略",
|
||||
"Keyboard shortcuts": "快捷键",
|
||||
"New collection": "New collection",
|
||||
"Collections": "文档集",
|
||||
"Untitled": "无标题文档",
|
||||
"Home": "主页",
|
||||
"Starred": "已加星标",
|
||||
"Invite people…": "邀请其他人…",
|
||||
"Invite people": "邀请其他人",
|
||||
"Create a collection": "创建文档集",
|
||||
"Return to App": "返回应用",
|
||||
"Profile": "基本资料",
|
||||
"Notifications": "通知",
|
||||
"currently editing": "currently editing",
|
||||
"currently viewing": "currently viewing",
|
||||
"viewed {{ timeAgo }} ago": "viewed {{ timeAgo }} ago",
|
||||
"You": "You",
|
||||
"Trash": "Trash",
|
||||
"Archive": "Archive",
|
||||
"Drafts": "Drafts",
|
||||
"Templates": "Templates",
|
||||
"New": "New",
|
||||
"Only visible to you": "Only visible to you",
|
||||
"Draft": "Draft",
|
||||
"Template": "Template",
|
||||
"New doc": "New doc",
|
||||
"More options": "More options",
|
||||
"Insert column after": "Insert column after",
|
||||
"Insert column before": "Insert column before",
|
||||
"Insert row after": "Insert row after",
|
||||
"Insert row before": "Insert row before",
|
||||
"Align center": "Align center",
|
||||
"Align left": "Align left",
|
||||
"Align right": "Align right",
|
||||
"Bulleted list": "Bulleted list",
|
||||
"Todo list": "Todo list",
|
||||
"Code block": "Code block",
|
||||
"Copied to clipboard": "Copied to clipboard",
|
||||
"Code": "Code",
|
||||
"Create link": "Create link",
|
||||
"Sorry, an error occurred creating the link": "Sorry, an error occurred creating the link",
|
||||
"Create a new doc": "Create a new doc",
|
||||
"Delete column": "Delete column",
|
||||
"Delete row": "Delete row",
|
||||
"Delete table": "Delete table",
|
||||
"Italic": "Italic",
|
||||
"Sorry, that link won’t work for this embed type": "Sorry, that link won’t work for this embed type",
|
||||
"Find or create a doc…": "Find or create a doc…",
|
||||
"Big heading": "Big heading",
|
||||
"Medium heading": "Medium heading",
|
||||
"Small heading": "Small heading",
|
||||
"Heading": "Heading",
|
||||
"Divider": "Divider",
|
||||
"Image": "Image",
|
||||
"Sorry, an error occurred uploading the image": "Sorry, an error occurred uploading the image",
|
||||
"Info": "Info",
|
||||
"Info notice": "Info notice",
|
||||
"Link": "Link",
|
||||
"Link copied to clipboard": "Link copied to clipboard",
|
||||
"Highlight": "Highlight",
|
||||
"Type '/' to insert…": "Type '/' to insert…",
|
||||
"Keep typing to filter…": "Keep typing to filter…",
|
||||
"No results": "No results",
|
||||
"Open link": "Open link",
|
||||
"Ordered list": "Ordered list",
|
||||
"Paste a link…": "Paste a link…",
|
||||
"Paste a {{service}} link…": "Paste a {{service}} link…",
|
||||
"Placeholder": "Placeholder",
|
||||
"Quote": "Quote",
|
||||
"Remove link": "Remove link",
|
||||
"Search or paste a link…": "Search or paste a link…",
|
||||
"Strikethrough": "Strikethrough",
|
||||
"Bold": "Bold",
|
||||
"Subheading": "Subheading",
|
||||
"Table": "Table",
|
||||
"Tip": "Tip",
|
||||
"Tip notice": "Tip notice",
|
||||
"Warning": "Warning",
|
||||
"Warning notice": "Warning notice",
|
||||
"Search…": "Search…",
|
||||
"Keyboard shortcuts": "Keyboard shortcuts",
|
||||
"New collection…": "New collection…",
|
||||
"Collections": "Collections",
|
||||
"Untitled": "Untitled",
|
||||
"Home": "Home",
|
||||
"Search": "Search",
|
||||
"Starred": "Starred",
|
||||
"Invite people…": "Invite people…",
|
||||
"Invite people": "Invite people",
|
||||
"Create a collection": "Create a collection",
|
||||
"Return to App": "Return to App",
|
||||
"Profile": "Profile",
|
||||
"Notifications": "Notifications",
|
||||
"API Tokens": "API Tokens",
|
||||
"Details": "详细信息",
|
||||
"Security": "安全性",
|
||||
"People": "用户",
|
||||
"Groups": "用户组",
|
||||
"Details": "Details",
|
||||
"Security": "Security",
|
||||
"People": "People",
|
||||
"Groups": "Groups",
|
||||
"Share Links": "Share Links",
|
||||
"Export Data": "Export Data",
|
||||
"Integrations": "Integrations",
|
||||
"Installation": "Installation",
|
||||
"Settings": "Settings",
|
||||
"API documentation": "API 文档",
|
||||
"Changelog": "更新日志",
|
||||
"Send us feedback": "发送反馈",
|
||||
"API documentation": "API documentation",
|
||||
"Changelog": "Changelog",
|
||||
"Send us feedback": "Send us feedback",
|
||||
"Report a bug": "Report a bug",
|
||||
"Appearance": "界面外观",
|
||||
"System": "系统信息",
|
||||
"Appearance": "Appearance",
|
||||
"System": "System",
|
||||
"Light": "Light",
|
||||
"Dark": "Dark",
|
||||
"Log out": "退出登录",
|
||||
"Collection permissions": "文档集权限",
|
||||
"New document": "新建文档",
|
||||
"Import document": "导入文档",
|
||||
"Edit": "编辑",
|
||||
"Permissions": "Permissions",
|
||||
"Export": "Export",
|
||||
"Delete": "Delete",
|
||||
"Edit collection": "编辑文档集",
|
||||
"Delete collection": "删除文档集",
|
||||
"Export collection": "导出文档集",
|
||||
"Log out": "Log out",
|
||||
"Collection permissions": "Collection permissions",
|
||||
"New document": "New document",
|
||||
"Import document": "Import document",
|
||||
"Edit…": "Edit…",
|
||||
"Permissions…": "Permissions…",
|
||||
"Export…": "Export…",
|
||||
"Delete…": "Delete…",
|
||||
"Edit collection": "Edit collection",
|
||||
"Delete collection": "Delete collection",
|
||||
"Export collection": "Export collection",
|
||||
"Document duplicated": "Document duplicated",
|
||||
"Document archived": "文件已封存",
|
||||
"Document restored": "文档已恢复",
|
||||
"Document archived": "Document archived",
|
||||
"Document restored": "Document restored",
|
||||
"Document unpublished": "Document unpublished",
|
||||
"Restore": "恢复",
|
||||
"Choose a collection": "选择一个文档集",
|
||||
"Unpin": "取消置顶",
|
||||
"Pin to collection": "置顶文档集",
|
||||
"Unstar": "取消星标",
|
||||
"Star": "加星标",
|
||||
"Share link": "Share link",
|
||||
"Enable embeds": "启用嵌入",
|
||||
"Disable embeds": "禁用嵌入",
|
||||
"New nested document": "新的嵌套文档",
|
||||
"Create template": "创建模板",
|
||||
"Duplicate": "复制项目",
|
||||
"Unpublish": "取消发布",
|
||||
"Move": "Move",
|
||||
"History": "历史记录",
|
||||
"Download": "下载",
|
||||
"Print": "打印",
|
||||
"Delete {{ documentName }}": "删除 {{ documentName }}",
|
||||
"Share document": "共享文档",
|
||||
"Edit group": "编辑群组",
|
||||
"Delete group": "刪除群組",
|
||||
"Members": "Members",
|
||||
"collection": "文档集",
|
||||
"New document in <1>{{collectionName}}</1>": "New document in <1>{{collectionName}}</1>",
|
||||
"New template": "New template",
|
||||
"Link copied": "链接已复制",
|
||||
"Restore version": "恢复此版本",
|
||||
"Copy link": "复制链接",
|
||||
"Share link revoked": "已撤销分享链接",
|
||||
"Share link copied": "分享链接已复制",
|
||||
"Go to document": "转到文档",
|
||||
"Revoke link": "撤消链接",
|
||||
"By {{ author }}": "作者 {{ author }}",
|
||||
"Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.": "您确定要设置 {{ userName }} 为管理员吗?管理员可以修改团队和帐单信息。",
|
||||
"Are you sure you want to make {{ userName }} a member?": "您确定要设置 {{ userName }} 为成员吗?",
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "您确定要冻结此帐户吗?被冻结的用户将无法登录。",
|
||||
"Make {{ userName }} a member…": "将 {{ userName }} 设为成员…",
|
||||
"Make {{ userName }} an admin…": "将 {{ userName }} 设为管理员…",
|
||||
"Revoke invite": "Revoke invite",
|
||||
"Activate account": "激活帐号",
|
||||
"Suspend account": "Suspend account",
|
||||
"Documents": "文档",
|
||||
"The document archive is empty at the moment.": "目前没有被归档的文档",
|
||||
"Search in collection": "Search in collection",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0>目前还没有任何文档",
|
||||
"Get started by creating a new one!": "从创建一个新文档集开始!",
|
||||
"Create a document": "创建文档",
|
||||
"Manage members": "Manage members",
|
||||
"Pinned": "已置顶",
|
||||
"Recently updated": "最近更新",
|
||||
"Recently published": "最近发布",
|
||||
"Least recently updated": "最旧未更新",
|
||||
"A–Z": "字母序",
|
||||
"The collection was updated": "文档集已更新",
|
||||
"Restore": "Restore",
|
||||
"Restore…": "Restore…",
|
||||
"Choose a collection": "Choose a collection",
|
||||
"Unpin": "Unpin",
|
||||
"Pin to collection": "Pin to collection",
|
||||
"Unstar": "Unstar",
|
||||
"Star": "Star",
|
||||
"Share link…": "Share link…",
|
||||
"Enable embeds": "Enable embeds",
|
||||
"Disable embeds": "Disable embeds",
|
||||
"New nested document": "New nested document",
|
||||
"Create template…": "Create template…",
|
||||
"Edit": "Edit",
|
||||
"Duplicate": "Duplicate",
|
||||
"Unpublish": "Unpublish",
|
||||
"Move…": "Move…",
|
||||
"History": "History",
|
||||
"Download": "Download",
|
||||
"Print": "Print",
|
||||
"Delete {{ documentName }}": "Delete {{ documentName }}",
|
||||
"Create template": "Create template",
|
||||
"Share document": "Share document",
|
||||
"Edit group": "Edit group",
|
||||
"Delete group": "Delete group",
|
||||
"Members…": "Members…",
|
||||
"New document in": "New document in",
|
||||
"collection": "collection",
|
||||
"New template…": "New template…",
|
||||
"Link copied": "Link copied",
|
||||
"Restore version": "Restore version",
|
||||
"Copy link": "Copy link",
|
||||
"Share link revoked": "Share link revoked",
|
||||
"Share link copied": "Share link copied",
|
||||
"Go to document": "Go to document",
|
||||
"Revoke link": "Revoke link",
|
||||
"By {{ author }}": "By {{ author }}",
|
||||
"Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.": "Are you sure you want to make {{ userName }} an admin? Admins can modify team and billing information.",
|
||||
"Are you sure you want to make {{ userName }} a member?": "Are you sure you want to make {{ userName }} a member?",
|
||||
"Are you sure you want to suspend this account? Suspended users will be prevented from logging in.": "Are you sure you want to suspend this account? Suspended users will be prevented from logging in.",
|
||||
"Make {{ userName }} a member…": "Make {{ userName }} a member…",
|
||||
"Make {{ userName }} an admin…": "Make {{ userName }} an admin…",
|
||||
"Revoke invite…": "Revoke invite…",
|
||||
"Activate account": "Activate account",
|
||||
"Suspend account…": "Suspend account…",
|
||||
"Documents": "Documents",
|
||||
"The document archive is empty at the moment.": "The document archive is empty at the moment.",
|
||||
"Search in collection…": "Search in collection…",
|
||||
"<0>{{collectionName}}</0> doesn’t contain any documents yet.": "<0>{{collectionName}}</0> doesn’t contain any documents yet.",
|
||||
"Get started by creating a new one!": "Get started by creating a new one!",
|
||||
"Create a document": "Create a document",
|
||||
"Manage members…": "Manage members…",
|
||||
"Pinned": "Pinned",
|
||||
"Recently updated": "Recently updated",
|
||||
"Recently published": "Recently published",
|
||||
"Least recently updated": "Least recently updated",
|
||||
"A–Z": "A–Z",
|
||||
"The collection was updated": "The collection was updated",
|
||||
"You can edit the name and other details at any time, however doing so often might confuse your team mates.": "You can edit the name and other details at any time, however doing so often might confuse your team mates.",
|
||||
"Name": "Name",
|
||||
"Description": "Description",
|
||||
"More details about this collection…": "有关此文档集的更多详细信息…",
|
||||
"Private collection": "私密文档集",
|
||||
"A private collection will only be visible to invited team members.": "私密文档集仅对受邀团队成员可见。",
|
||||
"Saving": "Saving",
|
||||
"More details about this collection…": "More details about this collection…",
|
||||
"Private collection": "Private collection",
|
||||
"A private collection will only be visible to invited team members.": "A private collection will only be visible to invited team members.",
|
||||
"Saving…": "Saving…",
|
||||
"Save": "Save",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} 已添加到文档集",
|
||||
"{{ groupName }} was added to the collection": "{{ groupName }} was added to the collection",
|
||||
"Could not add user": "Could not add user",
|
||||
"Can’t find the group you’re looking for?": "Can’t find the group you’re looking for?",
|
||||
"Create a group": "Create a group",
|
||||
"Search by group name": "Search by group name",
|
||||
"Search by group name…": "Search by group name…",
|
||||
"Search groups": "Search groups",
|
||||
"No groups matching your search": "No groups matching your search",
|
||||
"No groups left to add": "No groups left to add",
|
||||
"Add": "Add",
|
||||
"{{ userName }} was added to the collection": "{{ userName }} 已添加到文档集",
|
||||
"{{ userName }} was added to the collection": "{{ userName }} was added to the collection",
|
||||
"Need to add someone who’s not yet on the team yet?": "Need to add someone who’s not yet on the team yet?",
|
||||
"Invite people to {{ teamName }}": "Invite people to {{ teamName }}",
|
||||
"Search by name": "Search by name",
|
||||
"Search by name…": "Search by name…",
|
||||
"Search people": "Search people",
|
||||
"No people matching your search": "No people matching your search",
|
||||
"No people left to add": "No people left to add",
|
||||
"Read only": "Read only",
|
||||
"Read & Edit": "Read & Edit",
|
||||
"Permissions": "Permissions",
|
||||
"Remove": "Remove",
|
||||
"Active <1></1> ago": "Active <1></1> ago",
|
||||
"Active {{ lastActiveAt }} ago": "Active {{ lastActiveAt }} ago",
|
||||
"Never signed in": "Never signed in",
|
||||
"Invited": "Invited",
|
||||
"Admin": "Admin",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "文档集用于对文档进行分组。建议使用文档集管理同一主题或固定团队(比如产品团队或工程师团队)的文档。",
|
||||
"Creating": "Creating",
|
||||
"Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.": "Collections are for grouping your knowledge base. They work best when organized around a topic or internal team — Product or Engineering for example.",
|
||||
"Creating…": "Creating…",
|
||||
"Create": "Create",
|
||||
"Recently viewed": "Recently viewed",
|
||||
"Created by me": "Created by me",
|
||||
@@ -225,57 +215,57 @@
|
||||
"Done Editing": "Done Editing",
|
||||
"Edit {{noun}}": "Edit {{noun}}",
|
||||
"New from template": "New from template",
|
||||
"Publish": "发布",
|
||||
"Publish document": "发布文档",
|
||||
"Publishing": "Publishing",
|
||||
"No documents found for your filters.": "没有找到相关文档。",
|
||||
"You’ve not got any drafts at the moment.": "您目前还没有任何草稿。",
|
||||
"Not found": "没有找到",
|
||||
"We were unable to find the page you’re looking for. Go to the <2>homepage</2>?": "我们找不到您要查找的页面。转到<2>主页</2>?",
|
||||
"Offline": "离线",
|
||||
"We were unable to load the document while offline.": "离线时我们无法加载文档。",
|
||||
"Your account has been suspended": "您的账户已被停用",
|
||||
"A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.": "团队管理员(<1>{{suspendedContactEmail}}</1> )已暂停您的帐户。要重新激活您的帐户,请直接与他们联系。",
|
||||
"{{userName}} was added to the group": "{{userName}} 已添加到群组",
|
||||
"Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?": "在下方添加团队成员以便让他们访问群组。需要添加尚未加入团队的人吗?",
|
||||
"Invite them to {{teamName}}": "邀请他们加入 {{teamName}}",
|
||||
"{{userName}} was removed from the group": "从群组中移除 {{userName}}。",
|
||||
"Could not remove user": "无法删除用户",
|
||||
"Add people": "Add people",
|
||||
"This group has no members.": "这个群组没有任何成员",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline 旨在快速且易于使用。您常用的键盘快捷键都可使用,还支持 Markdown 语法。",
|
||||
"Navigation": "导航",
|
||||
"New document in current collection": "在当前文档集中创建新文档",
|
||||
"Edit current document": "编辑当前文档",
|
||||
"Move current document": "移动当前文档",
|
||||
"Jump to search": "跳转到搜索",
|
||||
"Jump to dashboard": "跳转到仪表板",
|
||||
"Table of contents": "目录",
|
||||
"Open this guide": "打开本指南",
|
||||
"Editor": "编辑器",
|
||||
"Save and exit document edit mode": "保存并退出文档编辑模式",
|
||||
"Publish and exit document edit mode": "发布并退出文档编辑模式",
|
||||
"Save document and continue editing": "保存文档并继续编辑",
|
||||
"Cancel editing": "取消编辑",
|
||||
"Underline": "下划线",
|
||||
"Undo": "撤销",
|
||||
"Redo": "重做",
|
||||
"Markdown": "Markdown 语法",
|
||||
"Large header": "大标题",
|
||||
"Medium header": "中标题",
|
||||
"Small header": "小标题",
|
||||
"Numbered list": "编号列表",
|
||||
"Blockquote": "块引用",
|
||||
"Horizontal divider": "水平分隔线",
|
||||
"Inline code": "行内代码",
|
||||
"Not Found": "没找到",
|
||||
"We were unable to find the page you’re looking for.": "我们找不到您要查找的页面。",
|
||||
"Use the <1>{{meta}}+K</1> shortcut to search from anywhere in your knowledge base": "在知识库的任何位置,按下 <1>{{meta}}+K</1> 快捷键就可以启动搜索",
|
||||
"No documents found for your search filters. <1></1>Create a new document?": "找不到相关文档。<1></1>创建一个新文档?",
|
||||
"Clear filters": "清除筛选",
|
||||
"Profile saved": "配置文件已保存",
|
||||
"Profile picture updated": "个人图片已更新",
|
||||
"Unable to upload new profile picture": "不能上传个人资料照片",
|
||||
"Publish": "Publish",
|
||||
"Publish document": "Publish document",
|
||||
"Publishing…": "Publishing…",
|
||||
"No documents found for your filters.": "No documents found for your filters.",
|
||||
"You’ve not got any drafts at the moment.": "You’ve not got any drafts at the moment.",
|
||||
"Not found": "Not found",
|
||||
"We were unable to find the page you’re looking for. Go to the <2>homepage</2>?": "We were unable to find the page you’re looking for. Go to the <2>homepage</2>?",
|
||||
"Offline": "Offline",
|
||||
"We were unable to load the document while offline.": "We were unable to load the document while offline.",
|
||||
"Your account has been suspended": "Your account has been suspended",
|
||||
"A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.": "A team admin (<1>{{suspendedContactEmail}}</1>) has suspended your account. To re-activate your account, please reach out to them directly.",
|
||||
"{{userName}} was added to the group": "{{userName}} was added to the group",
|
||||
"Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?": "Add team members below to give them access to the group. Need to add someone who’s not yet on the team yet?",
|
||||
"Invite them to {{teamName}}": "Invite them to {{teamName}}",
|
||||
"{{userName}} was removed from the group": "{{userName}} was removed from the group",
|
||||
"Could not remove user": "Could not remove user",
|
||||
"Add people…": "Add people…",
|
||||
"This group has no members.": "This group has no members.",
|
||||
"Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.": "Outline is designed to be fast and easy to use. All of your usual keyboard shortcuts work here, and there’s Markdown too.",
|
||||
"Navigation": "Navigation",
|
||||
"New document in current collection": "New document in current collection",
|
||||
"Edit current document": "Edit current document",
|
||||
"Move current document": "Move current document",
|
||||
"Jump to search": "Jump to search",
|
||||
"Jump to dashboard": "Jump to dashboard",
|
||||
"Table of contents": "Table of contents",
|
||||
"Open this guide": "Open this guide",
|
||||
"Editor": "Editor",
|
||||
"Save and exit document edit mode": "Save and exit document edit mode",
|
||||
"Publish and exit document edit mode": "Publish and exit document edit mode",
|
||||
"Save document and continue editing": "Save document and continue editing",
|
||||
"Cancel editing": "Cancel editing",
|
||||
"Underline": "Underline",
|
||||
"Undo": "Undo",
|
||||
"Redo": "Redo",
|
||||
"Markdown": "Markdown",
|
||||
"Large header": "Large header",
|
||||
"Medium header": "Medium header",
|
||||
"Small header": "Small header",
|
||||
"Numbered list": "Numbered list",
|
||||
"Blockquote": "Blockquote",
|
||||
"Horizontal divider": "Horizontal divider",
|
||||
"Inline code": "Inline code",
|
||||
"Not Found": "Not Found",
|
||||
"We were unable to find the page you’re looking for.": "We were unable to find the page you’re looking for.",
|
||||
"Use the <1>{{meta}}+K</1> shortcut to search from anywhere in your knowledge base": "Use the <1>{{meta}}+K</1> shortcut to search from anywhere in your knowledge base",
|
||||
"No documents found for your search filters. <1></1>Create a new document?": "No documents found for your search filters. <1></1>Create a new document?",
|
||||
"Clear filters": "Clear filters",
|
||||
"Profile saved": "Profile saved",
|
||||
"Profile picture updated": "Profile picture updated",
|
||||
"Unable to upload new profile picture": "Unable to upload new profile picture",
|
||||
"Photo": "Photo",
|
||||
"Upload": "Upload",
|
||||
"Full name": "Full name",
|
||||
@@ -284,6 +274,7 @@
|
||||
"Delete Account": "Delete Account",
|
||||
"You may delete your account at any time, note that this is unrecoverable": "You may delete your account at any time, note that this is unrecoverable",
|
||||
"Delete account": "Delete account",
|
||||
"Recently Updated": "Recently Updated",
|
||||
"Alphabetical": "Alphabetical",
|
||||
"You’ve not starred any documents yet.": "You’ve not starred any documents yet.",
|
||||
"There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.": "There are no templates just yet. You can create templates to help your team create consistent and accurate documentation.",
|
||||
|
||||
@@ -48,7 +48,6 @@ const spacing = {
|
||||
vpadding: "1.5vw",
|
||||
hpadding: "1.875vw",
|
||||
sidebarWidth: "280px",
|
||||
sidebarCollapsedWidth: "16px",
|
||||
sidebarMinWidth: "250px",
|
||||
sidebarMaxWidth: "350px",
|
||||
};
|
||||
|
||||
@@ -1365,21 +1365,6 @@
|
||||
dependencies:
|
||||
"@types/node" ">= 8"
|
||||
|
||||
"@react-dnd/asap@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@react-dnd/asap/-/asap-4.0.0.tgz#b300eeed83e9801f51bd66b0337c9a6f04548651"
|
||||
integrity sha512-0XhqJSc6pPoNnf8DhdsPHtUhRzZALVzYMTzRwV4VI6DJNJ/5xxfL9OQUwb8IH5/2x7lSf7nAZrnzUD+16VyOVQ==
|
||||
|
||||
"@react-dnd/invariant@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@react-dnd/invariant/-/invariant-2.0.0.tgz#09d2e81cd39e0e767d7da62df9325860f24e517e"
|
||||
integrity sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==
|
||||
|
||||
"@react-dnd/shallowequal@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz#a3031eb54129f2c66b2753f8404266ec7bf67f0a"
|
||||
integrity sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==
|
||||
|
||||
"@rehooks/window-scroll-position@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@rehooks/window-scroll-position/-/window-scroll-position-1.0.1.tgz#3cb80f22cbf9cdbd2041b5236ae1fce8245b2f1c"
|
||||
@@ -1570,14 +1555,6 @@
|
||||
dependencies:
|
||||
"@types/unist" "*"
|
||||
|
||||
"@types/hoist-non-react-statics@^3.3.1":
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
|
||||
integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
hoist-non-react-statics "^3.3.0"
|
||||
|
||||
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
|
||||
@@ -1627,19 +1604,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00"
|
||||
integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==
|
||||
|
||||
"@types/prop-types@*":
|
||||
version "15.7.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
|
||||
integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
|
||||
|
||||
"@types/react@*":
|
||||
version "17.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8"
|
||||
integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw==
|
||||
dependencies:
|
||||
"@types/prop-types" "*"
|
||||
csstype "^3.0.2"
|
||||
|
||||
"@types/stack-utils@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff"
|
||||
@@ -3801,11 +3765,6 @@ cssstyle@^2.2.0:
|
||||
dependencies:
|
||||
cssom "~0.3.6"
|
||||
|
||||
csstype@^3.0.2:
|
||||
version "3.0.5"
|
||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8"
|
||||
integrity sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==
|
||||
|
||||
cyclist@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
|
||||
@@ -4043,15 +4002,6 @@ direction@^0.1.5:
|
||||
resolved "https://registry.yarnpkg.com/direction/-/direction-0.1.5.tgz#ce5d797f97e26f8be7beff53f7dc40e1c1a9ec4c"
|
||||
integrity sha1-zl15f5fib4vnvv9T99xA4cGp7Ew=
|
||||
|
||||
dnd-core@^11.1.3:
|
||||
version "11.1.3"
|
||||
resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-11.1.3.tgz#f92099ba7245e49729d2433157031a6267afcc98"
|
||||
integrity sha512-QugF55dNW+h+vzxVJ/LSJeTeUw9MCJ2cllhmVThVPEtF16ooBkxj0WBE5RB+AceFxMFo1rO6bJKXtqKl+JNnyA==
|
||||
dependencies:
|
||||
"@react-dnd/asap" "^4.0.0"
|
||||
"@react-dnd/invariant" "^2.0.0"
|
||||
redux "^4.0.4"
|
||||
|
||||
doctrine@1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
|
||||
@@ -5803,7 +5753,7 @@ hmac-drbg@^1.0.0:
|
||||
minimalistic-assert "^1.0.0"
|
||||
minimalistic-crypto-utils "^1.0.1"
|
||||
|
||||
hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0:
|
||||
hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
|
||||
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
|
||||
@@ -6162,9 +6112,9 @@ inherits@2.0.3:
|
||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
||||
|
||||
ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
|
||||
version "1.3.7"
|
||||
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
|
||||
integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
|
||||
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
|
||||
|
||||
internal-slot@^1.0.2:
|
||||
version "1.0.2"
|
||||
@@ -9809,23 +9759,6 @@ react-color@^2.17.3:
|
||||
reactcss "^1.2.0"
|
||||
tinycolor2 "^1.4.1"
|
||||
|
||||
react-dnd-html5-backend@^11.1.3:
|
||||
version "11.1.3"
|
||||
resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-11.1.3.tgz#2749f04f416ec230ea193f5c1fbea2de7dffb8f7"
|
||||
integrity sha512-/1FjNlJbW/ivkUxlxQd7o3trA5DE33QiRZgxent3zKme8DwF4Nbw3OFVhTRFGaYhHFNL1rZt6Rdj1D78BjnNLw==
|
||||
dependencies:
|
||||
dnd-core "^11.1.3"
|
||||
|
||||
react-dnd@^11.1.3:
|
||||
version "11.1.3"
|
||||
resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-11.1.3.tgz#f9844f5699ccc55dfc81462c2c19f726e670c1af"
|
||||
integrity sha512-8rtzzT8iwHgdSC89VktwhqdKKtfXaAyC4wiqp0SywpHG12TTLvfOoL6xNEIUWXwIEWu+CFfDn4GZJyynCEuHIQ==
|
||||
dependencies:
|
||||
"@react-dnd/shallowequal" "^2.0.0"
|
||||
"@types/hoist-non-react-statics" "^3.3.1"
|
||||
dnd-core "^11.1.3"
|
||||
hoist-non-react-statics "^3.3.0"
|
||||
|
||||
react-dom@^16.8.6:
|
||||
version "16.14.0"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89"
|
||||
@@ -10094,14 +10027,6 @@ redis@^3.0.0:
|
||||
redis-errors "^1.2.0"
|
||||
redis-parser "^3.0.0"
|
||||
|
||||
redux@^4.0.4:
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
|
||||
integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==
|
||||
dependencies:
|
||||
loose-envify "^1.4.0"
|
||||
symbol-observable "^1.2.0"
|
||||
|
||||
referrer-policy@1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.2.0.tgz#b99cfb8b57090dc454895ef897a4cc35ef67a98e"
|
||||
@@ -10414,10 +10339,10 @@ retry-as-promised@^3.2.0:
|
||||
dependencies:
|
||||
any-promise "^1.3.0"
|
||||
|
||||
rich-markdown-editor@^11.0.11:
|
||||
version "11.0.11"
|
||||
resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-11.0.11.tgz#7f29f0956a81618966866d4c05219910e317a7d1"
|
||||
integrity sha512-2p7kETZSDCene8DqV0WgGNeSgaK3V8uRIXUK9gJAORl6zaieuY0TQu3GKIYkblxxeJYeMGp/kQeDJRrBYnRDBg==
|
||||
rich-markdown-editor@^11.0.7:
|
||||
version "11.0.7"
|
||||
resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-11.0.7.tgz#0788d5517325f4d6322860735ce104d48b4388f3"
|
||||
integrity sha512-w4EFqjikopkx3ynyJl1pZLBY2f9A+idIpTPhlJuE4/kn9JMQWEKdYaxucKOmpHaSRmwCMt9ZkbadJxbgMJtPIg==
|
||||
dependencies:
|
||||
copy-to-clipboard "^3.0.8"
|
||||
lodash "^4.17.11"
|
||||
@@ -11462,11 +11387,6 @@ supports-hyperlinks@^2.0.0:
|
||||
has-flag "^4.0.0"
|
||||
supports-color "^7.0.0"
|
||||
|
||||
symbol-observable@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
||||
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
||||
|
||||
symbol-tree@^3.2.4:
|
||||
version "3.2.4"
|
||||
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
|
||||
|
||||
Reference in New Issue
Block a user