chore: Extract product name from translation strings (#4646)

This commit is contained in:
Tom Moor
2023-01-04 19:00:57 -08:00
committed by GitHub
parent f655288f67
commit 445d19f43e
32 changed files with 123 additions and 80 deletions

View File

@@ -13,7 +13,7 @@ function Branding({ href = env.URL }: Props) {
return (
<Link href={href}>
<OutlineIcon size={20} />
&nbsp;Outline
&nbsp;{env.APP_NAME}
</Link>
);
}

View File

@@ -6,6 +6,7 @@ import { languages, languageOptions } from "@shared/i18n";
import ButtonLink from "~/components/ButtonLink";
import Flex from "~/components/Flex";
import NoticeTip from "~/components/NoticeTip";
import env from "~/env";
import useCurrentUser from "~/hooks/useCurrentUser";
import useStores from "~/hooks/useStores";
import { detectLanguage } from "~/utils/language";
@@ -57,6 +58,7 @@ export default function LanguagePrompt() {
const option = find(languageOptions, (o) => o.value === language);
const optionLabel = option ? option.label : "";
const appName = env.APP_NAME;
return (
<NoticeTip>
@@ -64,7 +66,7 @@ export default function LanguagePrompt() {
<LanguageIcon />
<span>
<Trans>
Outline is available in your language{" "}
{{ appName }} is available in your language{" "}
{{
optionLabel,
}}

View File

@@ -7,6 +7,7 @@ import Flex from "~/components/Flex";
import { LoadingIndicatorBar } from "~/components/LoadingIndicator";
import SkipNavContent from "~/components/SkipNavContent";
import SkipNavLink from "~/components/SkipNavLink";
import env from "~/env";
import useKeyDown from "~/hooks/useKeyDown";
import { MenuProvider } from "~/hooks/useMenuContext";
import useStores from "~/hooks/useStores";
@@ -36,7 +37,7 @@ const Layout: React.FC<Props> = ({
return (
<Container column auto>
<Helmet>
<title>{title ? title : "Outline"}</title>
<title>{title ? title : env.APP_NAME}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</Helmet>

View File

@@ -2,6 +2,7 @@ import { observer } from "mobx-react";
import * as React from "react";
import { Helmet } from "react-helmet";
import { cdnPath } from "@shared/utils/urls";
import env from "~/env";
import useStores from "~/hooks/useStores";
type Props = {
@@ -16,14 +17,15 @@ const PageTitle = ({ title, favicon }: Props) => {
return (
<Helmet>
<title>
{team?.name ? `${title} - ${team.name}` : `${title} - Outline`}
{team?.name ? `${title} - ${team.name}` : `${title} - ${env.APP_NAME}}`}
</title>
{favicon ? (
<link rel="shortcut icon" href={favicon} />
<link rel="shortcut icon" href={favicon} key={favicon} />
) : (
<link
rel="shortcut icon"
type="image/png"
key="favicon"
href={cdnPath("/images/favicon-32.png")}
sizes="32x32"
/>

View File

@@ -13,6 +13,7 @@ import ErrorOffline from "~/scenes/ErrorOffline";
import Layout from "~/components/Layout";
import Sidebar from "~/components/Sidebar/Shared";
import Text from "~/components/Text";
import env from "~/env";
import usePolicy from "~/hooks/usePolicy";
import useStores from "~/hooks/useStores";
import { NavigationNode } from "~/types";
@@ -136,9 +137,10 @@ function SharedDocumentScene(props: Props) {
config?.name && isCloudHosted ? (
<Content>
{t(
"{{ teamName }} is using Outline to share documents, please login to continue.",
"{{ teamName }} is using {{ appName }} to share documents, please login to continue.",
{
teamName: config.name,
appName: env.APP_NAME,
}
)}
</Content>

View File

@@ -74,8 +74,8 @@ export default function Notices() {
)}
{notice === "suspended" && (
<NoticeAlert>
Your Outline account has been suspended. To re-activate your account,
please contact a team admin.
Your account has been suspended. To re-activate your account, please
contact a team admin.
</NoticeAlert>
)}
{notice === "authentication-provider-disabled" && (

View File

@@ -215,7 +215,7 @@ function Login({ children }: Props) {
<>
<StyledHeading as="h2" centered>
{t("Login to {{ authProviderName }}", {
authProviderName: config.name || "Outline",
authProviderName: config.name || env.APP_NAME,
})}
</StyledHeading>
{children?.(config)}

View File

@@ -12,6 +12,7 @@ import Item from "~/components/List/Item";
import PaginatedList from "~/components/PaginatedList";
import Scene from "~/components/Scene";
import Text from "~/components/Text";
import env from "~/env";
import useStores from "~/hooks/useStores";
import FileOperationListItem from "./components/FileOperationListItem";
import ImportNotionDialog from "./components/ImportNotionDialog";
@@ -20,6 +21,7 @@ import ImportOutlineDialog from "./components/ImportOutlineDialog";
function Import() {
const { t } = useTranslation();
const { dialogs, fileOperations } = useStores();
const appName = env.APP_NAME;
return (
<Scene title={t("Import")} icon={<NewDocumentIcon color="currentColor" />}>
@@ -27,8 +29,9 @@ function Import() {
<Text type="secondary">
<Trans>
Quickly transfer your existing documents, pages, and files from other
tools and services into Outline. You can also drag and drop any HTML,
Markdown, and text documents directly into Collections in the app.
tools and services into {{ appName }}. You can also drag and drop any
HTML, Markdown, and text documents directly into Collections in the
app.
</Trans>
</Text>
@@ -38,7 +41,7 @@ function Import() {
image={<MarkdownIcon size={28} />}
title={t("Markdown")}
subtitle={t(
"Import a zip file of Markdown documents (exported from Outline 0.67.0 or earlier)"
"Import a zip file of Markdown documents (exported from version 0.67.0 or earlier)"
)}
actions={
<Button

View File

@@ -16,6 +16,7 @@ import InputSearch from "~/components/InputSearch";
import Modal from "~/components/Modal";
import Scene from "~/components/Scene";
import Text from "~/components/Text";
import env from "~/env";
import useBoolean from "~/hooks/useBoolean";
import useCurrentTeam from "~/hooks/useCurrentTeam";
import usePolicy from "~/hooks/usePolicy";
@@ -142,6 +143,8 @@ function Members() {
[params, history, location.pathname]
);
const appName = env.APP_NAME;
return (
<Scene
title={t("Members")}
@@ -168,9 +171,9 @@ function Members() {
<Heading>{t("Members")}</Heading>
<Text type="secondary">
<Trans>
Everyone that has signed into Outline appears here. Its possible that
there are other users who have access through {team.signinMethods} but
havent signed in yet.
Everyone that has signed into {{ appName }} is listed here. Its
possible that there are other users who have access through{" "}
{team.signinMethods} but havent signed in yet.
</Trans>
</Text>
<Flex gap={8}>

View File

@@ -62,9 +62,7 @@ function Notifications() {
visible: isCloudHosted,
event: "emails.onboarding",
title: t("Getting started"),
description: t(
"Tips on getting started with Outlines features and functionality"
),
description: t("Tips on getting started with features and functionality"),
},
{
visible: isCloudHosted,

View File

@@ -53,6 +53,8 @@ function Slack() {
})
.sort((a) => (a[1] ? -1 : 1));
const appName = env.APP_NAME;
return (
<Scene title="Slack" icon={<SlackIcon color="currentColor" />}>
<Heading>Slack</Heading>
@@ -61,7 +63,7 @@ function Slack() {
<Notice>
<Trans>
Whoops, you need to accept the permissions in Slack to connect
Outline to your team. Try again?
{{ appName }} to your team. Try again?
</Trans>
</Notice>
)}
@@ -75,9 +77,10 @@ function Slack() {
)}
<Text type="secondary">
<Trans
defaults="Get rich previews of Outline links shared in Slack and use the <em>{{ command }}</em> slash command to search for documents without leaving your chat."
defaults="Get rich previews of {{ appName }} links shared in Slack and use the <em>{{ command }}</em> slash command to search for documents without leaving your chat."
values={{
command: "/outline",
appName,
}}
components={{
em: <Code />,
@@ -112,8 +115,8 @@ function Slack() {
<h2>{t("Collections")}</h2>
<Text type="secondary">
<Trans>
Connect Outline collections to Slack channels and messages will be
automatically posted to Slack when documents are published or
Connect {{ appName }} collections to Slack channels. Messages will
be automatically posted to Slack when documents are published or
updated.
</Trans>
</Text>

View File

@@ -11,6 +11,7 @@ import PaginatedList from "~/components/PaginatedList";
import Scene from "~/components/Scene";
import Subheading from "~/components/Subheading";
import Text from "~/components/Text";
import env from "~/env";
import useBoolean from "~/hooks/useBoolean";
import useCurrentTeam from "~/hooks/useCurrentTeam";
import usePolicy from "~/hooks/usePolicy";
@@ -24,6 +25,7 @@ function Webhooks() {
const { webhookSubscriptions } = useStores();
const [newModalOpen, handleNewModalOpen, handleNewModalClose] = useBoolean();
const can = usePolicy(team);
const appName = env.APP_NAME;
return (
<Scene
@@ -45,7 +47,11 @@ function Webhooks() {
>
<Heading>{t("Webhooks")}</Heading>
<Text type="secondary">
<Trans defaults="Webhooks can be used to notify your application when events happen in Outline. Events are sent as a https request with a JSON payload in near real-time." />
<Trans>
Webhooks can be used to notify your application when events happen in{" "}
{{ appName }}. Events are sent as a https request with a JSON payload
in near real-time.
</Trans>
</Text>
<PaginatedList
fetch={webhookSubscriptions.fetchPage}

View File

@@ -5,11 +5,13 @@ import Heading from "~/components/Heading";
import ZapierIcon from "~/components/Icons/ZapierIcon";
import Scene from "~/components/Scene";
import Text from "~/components/Text";
import env from "~/env";
import useStores from "~/hooks/useStores";
function Zapier() {
const { ui } = useStores();
const { resolvedTheme } = ui;
const appName = env.APP_NAME;
return (
<Scene title="Zapier" icon={<ZapierIcon color="currentColor" />}>
@@ -28,9 +30,9 @@ function Zapier() {
</Helmet>
<Text type="secondary">
<Trans>
Zapier is a platform that allows Outline to easily integrate with
thousands of other business tools. Automate your workflows, sync data,
and more.
Zapier is a platform that allows {{ appName }} to easily integrate
with thousands of other business tools. Automate your workflows, sync
data, and more.
</Trans>
</Text>
<br />

View File

@@ -2,12 +2,14 @@ import * as React from "react";
import { Trans } from "react-i18next";
import Flex from "~/components/Flex";
import Text from "~/components/Text";
import env from "~/env";
import useStores from "~/hooks/useStores";
import DropToImport from "./DropToImport";
import HelpDisclosure from "./HelpDisclosure";
function ImportOutlineDialog() {
const { dialogs } = useStores();
const appName = env.APP_NAME;
return (
<Flex column>
@@ -17,8 +19,8 @@ function ImportOutlineDialog() {
format="outline-markdown"
>
<Trans>
Drag and drop the zip file from Outline's Markdown export option, or
click to upload
Drag and drop the zip file from the Markdown export option in{" "}
{{ appName }}, or click to upload
</Trans>
</DropToImport>
</Text>

View File

@@ -56,6 +56,7 @@ function UserDelete() {
const inputProps = register("code", {
required: true,
});
const appName = env.APP_NAME;
return (
<Flex column>
@@ -91,8 +92,8 @@ function UserDelete() {
<Trans>
Are you sure? Deleting your account will destroy identifying
data associated with your user and cannot be undone. You will be
immediately logged out of Outline and all your API tokens will
be revoked.
immediately logged out of {{ appName }} and all your API tokens
will be revoked.
</Trans>
</Text>
</>

View File

@@ -1,4 +1,5 @@
import * as React from "react";
import env from "@server/env";
import BaseEmail from "./BaseEmail";
import Body from "./components/Body";
import CopyableCode from "./components/CopyableCode";
@@ -27,7 +28,7 @@ export default class ConfirmUserDeleteEmail extends BaseEmail<Props> {
protected renderAsText({ deleteConfirmationCode }: Props): string {
return `
You requested to permanantly delete your Outline account. Please enter the code below to confirm your account deletion.
You requested to permanantly delete your ${env.APP_NAME} account. Please enter the code below to confirm your account deletion.
Code: ${deleteConfirmationCode}
`;
@@ -41,8 +42,8 @@ Code: ${deleteConfirmationCode}
<Body>
<Heading>Your account deletion request</Heading>
<p>
You requested to permanantly delete your Outline account. Please
enter the code below to confirm your account deletion.
You requested to permanantly delete your {env.APP_NAME} account.
Please enter the code below to confirm your account deletion.
</p>
<EmptySpace height={5} />
<p>

View File

@@ -1,4 +1,5 @@
import * as React from "react";
import env from "@server/env";
import { NotificationSetting } from "@server/models";
import BaseEmail from "./BaseEmail";
import Body from "./components/Body";
@@ -39,7 +40,7 @@ export default class ExportSuccessEmail extends BaseEmail<Props> {
}
protected preview() {
return "Here's your request data export from Outline";
return `Here's your request data export from ${env.APP_NAME}`;
}
protected renderAsText() {

View File

@@ -1,4 +1,5 @@
import * as React from "react";
import env from "@server/env";
import { NotificationSetting } from "@server/models";
import BaseEmail from "./BaseEmail";
import Body from "./components/Body";
@@ -39,7 +40,7 @@ export default class InviteAcceptedEmail extends BaseEmail<Props> {
}
protected subject({ invitedName }: Props) {
return `${invitedName} has joined your Outline team`;
return `${invitedName} has joined your ${env.APP_NAME} team`;
}
protected preview({ invitedName }: Props) {
@@ -50,7 +51,7 @@ export default class InviteAcceptedEmail extends BaseEmail<Props> {
return `
Great news, ${invitedName} just accepted your invitation and has created an account. You can now start collaborating on documents.
Open Outline: ${teamUrl}
Open ${env.APP_NAME}: ${teamUrl}
`;
}
@@ -71,7 +72,7 @@ Open Outline: ${teamUrl}
</p>
<EmptySpace height={10} />
<p>
<Button href={teamUrl}>Open Outline</Button>
<Button href={teamUrl}>Open {env.APP_NAME}</Button>
</p>
</Body>

View File

@@ -1,4 +1,5 @@
import * as React from "react";
import env from "@server/env";
import BaseEmail from "./BaseEmail";
import Body from "./components/Body";
import Button from "./components/Button";
@@ -26,7 +27,7 @@ export default class InviteEmail extends BaseEmail<Props> {
}
protected preview() {
return "Outline is a place for your team to build and share knowledge.";
return `${env.APP_NAME} is a place for your team to build and share knowledge.`;
}
protected renderAsText({
@@ -36,9 +37,9 @@ export default class InviteEmail extends BaseEmail<Props> {
teamUrl,
}: Props): string {
return `
Join ${teamName} on Outline
Join ${teamName} on ${env.APP_NAME}
${actorName} (${actorEmail}) has invited you to join Outline, a place for your team to build and share knowledge.
${actorName} (${actorEmail}) has invited you to join ${env.APP_NAME}, a place for your team to build and share knowledge.
Join now: ${teamUrl}
`;
@@ -50,10 +51,12 @@ Join now: ${teamUrl}
<Header />
<Body>
<Heading>Join {teamName} on Outline</Heading>
<Heading>
Join {teamName} on {env.APP_NAME}
</Heading>
<p>
{actorName} ({actorEmail}) has invited you to join Outline, a place
for your team to build and share knowledge.
{actorName} ({actorEmail}) has invited you to join {env.APP_NAME}, a
place for your team to build and share knowledge.
</p>
<EmptySpace height={10} />
<p>

View File

@@ -1,4 +1,5 @@
import * as React from "react";
import env from "@server/env";
import BaseEmail from "./BaseEmail";
import Body from "./components/Body";
import Button from "./components/Button";
@@ -27,7 +28,7 @@ export default class InviteReminderEmail extends BaseEmail<Props> {
}
protected preview() {
return "Outline is a place for your team to build and share knowledge.";
return `${env.APP_NAME} is a place for your team to build and share knowledge.`;
}
protected renderAsText({
@@ -37,7 +38,7 @@ export default class InviteReminderEmail extends BaseEmail<Props> {
teamUrl,
}: Props): string {
return `
This is just a quick reminder that ${actorName} (${actorEmail}) invited you to join them in the ${teamName} team on Outline, a place for your team to build and share knowledge.
This is just a quick reminder that ${actorName} (${actorEmail}) invited you to join them in the ${teamName} team on ${env.APP_NAME}, a place for your team to build and share knowledge.
We only send a reminder once.
If you haven't signed up yet, you can do so here: ${teamUrl}
@@ -50,11 +51,13 @@ If you haven't signed up yet, you can do so here: ${teamUrl}
<Header />
<Body>
<Heading>Join {teamName} on Outline</Heading>
<Heading>
Join {teamName} on {env.APP_NAME}
</Heading>
<p>
This is just a quick reminder that {actorName} ({actorEmail})
invited you to join them in the {teamName} team on Outline, a place
for your team to build and share knowledge.
invited you to join them in the {teamName} team on {env.APP_NAME}, a
place for your team to build and share knowledge.
</p>
<p>If you haven't signed up yet, you can do so here:</p>
<EmptySpace height={10} />

View File

@@ -27,12 +27,12 @@ export default class SigninEmail extends BaseEmail<Props> {
}
protected preview(): string {
return "Heres your link to signin to Outline.";
return `Heres your link to signin to ${env.APP_NAME}.`;
}
protected renderAsText({ token, teamUrl, client }: Props): string {
return `
Use the link below to signin to Outline:
Use the link below to signin to ${env.APP_NAME}:
${this.signinLink(token, client)}
@@ -52,7 +52,7 @@ signin page at: ${teamUrl}
<Body>
<Heading>Magic Sign-in Link</Heading>
<p>Click the button below to sign in to Outline.</p>
<p>Click the button below to sign in to {env.APP_NAME}.</p>
<EmptySpace height={10} />
<p>
<Button href={this.signinLink(token, client)}>Sign In</Button>

View File

@@ -1,4 +1,5 @@
import * as React from "react";
import env from "@server/env";
import BaseEmail from "./BaseEmail";
import Body from "./components/Body";
import Button from "./components/Button";
@@ -19,18 +20,18 @@ type Props = {
*/
export default class WelcomeEmail extends BaseEmail<Props> {
protected subject() {
return "Welcome to Outline";
return `Welcome to ${env.APP_NAME}`;
}
protected preview() {
return "Outline is a place for your team to build and share knowledge.";
return `${env.APP_NAME} is a place for your team to build and share knowledge.`;
}
protected renderAsText({ teamUrl }: Props) {
return `
Welcome to Outline!
Welcome to ${env.APP_NAME}!
Outline is a place for your team to build and share knowledge.
${env.APP_NAME} is a place for your team to build and share knowledge.
To get started, head to the home screen and try creating a collection to help document your processes, create playbooks, or plan your teams work.
@@ -46,8 +47,11 @@ ${teamUrl}/home
<Header />
<Body>
<Heading>Welcome to Outline!</Heading>
<p>Outline is a place for your team to build and share knowledge.</p>
<Heading>Welcome to {env.APP_NAME}!</Heading>
<p>
{env.APP_NAME} is a place for your team to build and share
knowledge.
</p>
<p>
To get started, head to the home screen and try creating a
collection to help document your processes, create playbooks, or
@@ -60,7 +64,7 @@ ${teamUrl}/home
<EmptySpace height={10} />
<p>
<Button href={`${teamUrl}/home?ref=welcome-email`}>
Open Outline
Open {env.APP_NAME}
</Button>
</p>
</Body>

View File

@@ -37,7 +37,7 @@ export default ({ unsubscribeUrl }: Props) => {
<TR>
<TD style={footerStyle}>
<a href={env.URL} style={linkStyle}>
Outline
{env.APP_NAME}
</a>
<a href={twitterUrl()} style={externalLinkStyle}>
Twitter

View File

@@ -14,7 +14,7 @@ export default () => {
<TD>
<EmptySpace height={40} />
<img
alt="Outline"
alt={env.APP_NAME}
src={
isCloudHosted
? `${url}/email/header-logo.png`

View File

@@ -553,6 +553,11 @@ export class Environment {
@IsOptional()
public AWS_S3_ACL = process.env.AWS_S3_ACL ?? "private";
/**
* The product name
*/
public APP_NAME = "Outline";
private toOptionalString(value: string | undefined) {
return value ? value : undefined;
}

View File

@@ -211,8 +211,7 @@ class Team extends ParanoidModel {
const collection = await Collection.create(
{
name: "Welcome",
description:
"This collection is a quick guide to what Outline is all about. Feel free to delete this collection once your team is up to speed with the basics!",
description: `This collection is a quick guide to what ${env.APP_NAME} is all about. Feel free to delete this collection once your team is up to speed with the basics!`,
teamId: this.id,
createdById: userId,
sort: Collection.DEFAULT_SORT,

View File

@@ -30,6 +30,7 @@ export default function present(
GOOGLE_ANALYTICS_ID: env.GOOGLE_ANALYTICS_ID,
RELEASE:
process.env.SOURCE_COMMIT || process.env.SOURCE_VERSION || undefined,
APP_NAME: env.APP_NAME,
analytics: {
service: analytics?.service,
settings: analytics?.settings,

View File

@@ -62,7 +62,7 @@ export default class SlackProcessor extends BaseProcessor {
"Content-Type": "application/json",
},
body: JSON.stringify({
text: `👋 Hey there! When documents are published or updated in the *${collection.name}* collection on Outline they will be posted to this channel!`,
text: `👋 Hey there! When documents are published or updated in the *${collection.name}* collection on ${env.APP_NAME} they will be posted to this channel!`,
attachments: [
{
color: collection.color,

View File

@@ -230,8 +230,7 @@ router.post("hooks.slack", async (ctx: APIContext) => {
if (!team) {
ctx.body = {
response_type: "ephemeral",
text:
"Sorry, we couldnt find an integration for your team. Head to your Outline settings to set one up.",
text: `Sorry, we couldnt find an integration for your team. Head to your ${env.APP_NAME} settings to set one up.`,
};
return;
}
@@ -293,7 +292,7 @@ router.post("hooks.slack", async (ctx: APIContext) => {
query: text,
results: totalCount,
});
const haventSignedIn = `(It looks like you havent signed in to Outline yet, so results may be limited)`;
const haventSignedIn = `(It looks like you havent signed in to ${env.APP_NAME} yet, so results may be limited)`;
// Map search results to the format expected by the Slack API
if (results.length) {

View File

@@ -64,7 +64,7 @@ export const renderApp = async (
} = {}
) => {
const {
title = "Outline",
title = env.APP_NAME,
description = "A modern team knowledge base for your internal documentation, product specs, support answers, meeting notes, onboarding, &amp; more…",
canonical = "",
} = options;

View File

@@ -185,7 +185,7 @@
"Member": "Member",
"Viewer": "Viewer",
"Admin": "Admin",
"Outline is available in your language {{optionLabel}}, would you like to change?": "Outline is available in your language {{optionLabel}}, would you like to change?",
"{{appName}} is available in your language {{optionLabel}}, would you like to change?": "{{appName}} is available in your language {{optionLabel}}, would you like to change?",
"Change Language": "Change Language",
"Dismiss": "Dismiss",
"Youre offline.": "Youre offline.",
@@ -497,7 +497,7 @@
"The document will be accessible at <2>{{url}}</2>": "The document will be accessible at <2>{{url}}</2>",
"More options": "More options",
"Close": "Close",
"{{ teamName }} is using Outline to share documents, please login to continue.": "{{ teamName }} is using Outline to share documents, please login to continue.",
"{{ teamName }} is using {{ appName }} to share documents, please login to continue.": "",
"Are you sure you want to delete the <em>{{ documentTitle }}</em> template?": "Are you sure you want to delete the <em>{{ documentTitle }}</em> template?",
"Are you sure about that? Deleting the <em>{{ documentTitle }}</em> document will delete all of its history</em>.": "Are you sure about that? Deleting the <em>{{ documentTitle }}</em> document will delete all of its history</em>.",
"Are you sure about that? Deleting the <em>{{ documentTitle }}</em> document will delete all of its history and <em>{{ any }} nested document</em>.": "Are you sure about that? Deleting the <em>{{ documentTitle }}</em> document will delete all of its history and <em>one nested document</em>.",
@@ -643,7 +643,7 @@
"Drag and drop the zip file from Notion's HTML export option, or click to upload": "Drag and drop the zip file from Notion's HTML export option, or click to upload",
"Where do I find the file?": "Where do I find the file?",
"In Notion, click <em>Settings & Members</em> in the left sidebar and open Settings. Look for the Export section, and click <em>Export all workspace content</em>. Choose <em>HTML</em> as the format for the best data compatability.": "In Notion, click <em>Settings & Members</em> in the left sidebar and open Settings. Look for the Export section, and click <em>Export all workspace content</em>. Choose <em>HTML</em> as the format for the best data compatability.",
"Drag and drop the zip file from Outline's Markdown export option, or click to upload": "Drag and drop the zip file from Outline's Markdown export option, or click to upload",
"Drag and drop the zip file from the Markdown export option in {{appName}}, or click to upload": "Drag and drop the zip file from the Markdown export option in {{appName}}, or click to upload",
"How does this work?": "How does this work?",
"You can import a zip file that was previously exported from an Outline installation collections, documents, and images will be imported. In Outline, open <em>Export</em> in the Settings sidebar and click on <em>Export Data</em>.": "You can import a zip file that was previously exported from an Outline installation collections, documents, and images will be imported. In Outline, open <em>Export</em> in the Settings sidebar and click on <em>Export Data</em>.",
"Last active": "Last active",
@@ -713,14 +713,14 @@
"Groups can be used to organize and manage the people on your team.": "Groups can be used to organize and manage the people on your team.",
"All groups": "All groups",
"No groups have been created yet": "No groups have been created yet",
"Quickly transfer your existing documents, pages, and files from other tools and services into Outline. You can also drag and drop any HTML, Markdown, and text documents directly into Collections in the app.": "Quickly transfer your existing documents, pages, and files from other tools and services into Outline. You can also drag and drop any HTML, Markdown, and text documents directly into Collections in the app.",
"Import a zip file of Markdown documents (exported from Outline 0.67.0 or earlier)": "Import a zip file of Markdown documents (exported from Outline 0.67.0 or earlier)",
"Quickly transfer your existing documents, pages, and files from other tools and services into {{appName}}. You can also drag and drop any HTML, Markdown, and text documents directly into Collections in the app.": "Quickly transfer your existing documents, pages, and files from other tools and services into {{appName}}. You can also drag and drop any HTML, Markdown, and text documents directly into Collections in the app.",
"Import a zip file of Markdown documents (exported from version 0.67.0 or earlier)": "",
"Import data": "Import data",
"Import pages exported from Notion": "Import pages exported from Notion",
"Import pages from a Confluence instance": "Import pages from a Confluence instance",
"Enterprise": "Enterprise",
"Recent imports": "Recent imports",
"Everyone that has signed into Outline appears here. Its possible that there are other users who have access through {team.signinMethods} but havent signed in yet.": "Everyone that has signed into Outline appears here. Its possible that there are other users who have access through {team.signinMethods} but havent signed in yet.",
"Everyone that has signed into {{appName}} is listed here. Its possible that there are other users who have access through {team.signinMethods} but havent signed in yet.": "Everyone that has signed into {{appName}} is listed here. Its possible that there are other users who have access through {team.signinMethods} but havent signed in yet.",
"Filter": "Filter",
"Receive a notification whenever a new document is published": "Receive a notification whenever a new document is published",
"Receive a notification when a document you created is edited": "Receive a notification when a document you created is edited",
@@ -731,7 +731,7 @@
"Export completed": "Export completed",
"Receive a notification when an export you requested has been completed": "Receive a notification when an export you requested has been completed",
"Getting started": "Getting started",
"Tips on getting started with Outlines features and functionality": "Tips on getting started with Outlines features and functionality",
"Tips on getting started with features and functionality": "",
"New features": "New features",
"Receive an email when new features of note are added": "Receive an email when new features of note are added",
"Notifications saved": "Notifications saved",
@@ -786,10 +786,10 @@
"Sharing is currently disabled.": "Sharing is currently disabled.",
"You can globally enable and disable public document sharing in the <em>security settings</em>.": "You can globally enable and disable public document sharing in the <em>security settings</em>.",
"Documents that have been shared are listed below. Anyone that has the public link can access a read-only version of the document until the link has been revoked.": "Documents that have been shared are listed below. Anyone that has the public link can access a read-only version of the document until the link has been revoked.",
"Whoops, you need to accept the permissions in Slack to connect Outline to your team. Try again?": "Whoops, you need to accept the permissions in Slack to connect Outline to your team. Try again?",
"Whoops, you need to accept the permissions in Slack to connect{{appName}} to your team. Try again?": "Whoops, you need to accept the permissions in Slack to connect{{appName}} to your team. Try again?",
"Something went wrong while authenticating your request. Please try logging in again?": "Something went wrong while authenticating your request. Please try logging in again?",
"Get rich previews of Outline links shared in Slack and use the <em>{{ command }}</em> slash command to search for documents without leaving your chat.": "Get rich previews of Outline links shared in Slack and use the <em>{{ command }}</em> slash command to search for documents without leaving your chat.",
"Connect Outline collections to Slack channels and messages will be automatically posted to Slack when documents are published or updated.": "Connect Outline collections to Slack channels and messages will be automatically posted to Slack when documents are published or updated.",
"Get rich previews of {{ appName }} links shared in Slack and use the <em>{{ command }}</em> slash command to search for documents without leaving your chat.": "Get rich previews of {{ appName }} links shared in Slack and use the <em>{{ command }}</em> slash command to search for documents without leaving your chat.",
"Connect {{appName}} collections to Slack channels. Messages will be automatically posted to Slack when documents are published or updated.": "Connect {{appName}} collections to Slack channels. Messages will be automatically posted to Slack when documents are published or updated.",
"Connect": "Connect",
"The Slack integration is currently disabled. Please set the associated environment variables and restart the server to enable the integration.": "The Slack integration is currently disabled. Please set the associated environment variables and restart the server to enable the integration.",
"New token": "New token",
@@ -797,9 +797,9 @@
"Tokens": "Tokens",
"Create a token": "Create a token",
"New webhook": "New webhook",
"Webhooks can be used to notify your application when events happen in Outline. Events are sent as a https request with a JSON payload in near real-time.": "Webhooks can be used to notify your application when events happen in Outline. Events are sent as a https request with a JSON payload in near real-time.",
"Webhooks can be used to notify your application when events happen in {{appName}}. Events are sent as a https request with a JSON payload in near real-time.": "Webhooks can be used to notify your application when events happen in {{appName}}. Events are sent as a https request with a JSON payload in near real-time.",
"Create a webhook": "Create a webhook",
"Zapier is a platform that allows Outline to easily integrate with thousands of other business tools. Automate your workflows, sync data, and more.": "Zapier is a platform that allows Outline to easily integrate with thousands of other business tools. Automate your workflows, sync data, and more.",
"Zapier is a platform that allows {{appName}} to easily integrate with thousands of other business tools. Automate your workflows, sync data, and more.": "Zapier is a platform that allows {{appName}} to easily integrate with thousands of other business tools. Automate your workflows, sync data, and more.",
"Your are creating a new workspace using your current account — <em>{{email}}</em>": "Your are creating a new workspace using your current account — <em>{{email}}</em>",
"Workspace name": "Workspace name",
"When your new workspace is created, you will be the admin, meaning you will have the highest level of permissions and the ability to invite others.": "When your new workspace is created, you will be the admin, meaning you will have the highest level of permissions and the ability to invite others.",
@@ -809,7 +809,7 @@
"Trash is empty at the moment.": "Trash is empty at the moment.",
"A confirmation code has been sent to your email address, please enter the code below to permanantly destroy your account.": "A confirmation code has been sent to your email address, please enter the code below to permanantly destroy your account.",
"<em>Note:</em> Signing back in will cause a new account to be automatically reprovisioned.": "<em>Note:</em> Signing back in will cause a new account to be automatically reprovisioned.",
"Are you sure? Deleting your account will destroy identifying data associated with your user and cannot be undone. You will be immediately logged out of Outline and all your API tokens will be revoked.": "Are you sure? Deleting your account will destroy identifying data associated with your user and cannot be undone. You will be immediately logged out of Outline and all your API tokens will be revoked.",
"Are you sure? Deleting your account will destroy identifying data associated with your user and cannot be undone. You will be immediately logged out of {{appName}} and all your API tokens will be revoked.": "Are you sure? Deleting your account will destroy identifying data associated with your user and cannot be undone. You will be immediately logged out of {{appName}} and all your API tokens will be revoked.",
"Delete My Account": "Delete My Account",
"Profile picture": "Profile picture",
"You joined": "You joined",

View File

@@ -52,6 +52,7 @@ export type PublicEnv = {
DEFAULT_LANGUAGE: string;
GOOGLE_ANALYTICS_ID: string | undefined;
RELEASE: string | undefined;
APP_NAME: string;
analytics: {
service?: IntegrationService;
settings?: IntegrationSettings<IntegrationType.Analytics>;