chore: Extract product name from translation strings (#4646)
This commit is contained in:
@@ -13,7 +13,7 @@ function Branding({ href = env.URL }: Props) {
|
||||
return (
|
||||
<Link href={href}>
|
||||
<OutlineIcon size={20} />
|
||||
Outline
|
||||
{env.APP_NAME}
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}}
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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"
|
||||
/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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" && (
|
||||
|
||||
@@ -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)}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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. It’s possible that
|
||||
there are other users who have access through {team.signinMethods} but
|
||||
haven’t signed in yet.
|
||||
Everyone that has signed into {{ appName }} is listed here. It’s
|
||||
possible that there are other users who have access through{" "}
|
||||
{team.signinMethods} but haven’t signed in yet.
|
||||
</Trans>
|
||||
</Text>
|
||||
<Flex gap={8}>
|
||||
|
||||
@@ -62,9 +62,7 @@ function Notifications() {
|
||||
visible: isCloudHosted,
|
||||
event: "emails.onboarding",
|
||||
title: t("Getting started"),
|
||||
description: t(
|
||||
"Tips on getting started with Outline’s features and functionality"
|
||||
),
|
||||
description: t("Tips on getting started with features and functionality"),
|
||||
},
|
||||
{
|
||||
visible: isCloudHosted,
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
</>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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} />
|
||||
|
||||
@@ -27,12 +27,12 @@ export default class SigninEmail extends BaseEmail<Props> {
|
||||
}
|
||||
|
||||
protected preview(): string {
|
||||
return "Here’s your link to signin to Outline.";
|
||||
return `Here’s 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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -14,7 +14,7 @@ export default () => {
|
||||
<TD>
|
||||
<EmptySpace height={40} />
|
||||
<img
|
||||
alt="Outline"
|
||||
alt={env.APP_NAME}
|
||||
src={
|
||||
isCloudHosted
|
||||
? `${url}/email/header-logo.png`
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -230,8 +230,7 @@ router.post("hooks.slack", async (ctx: APIContext) => {
|
||||
if (!team) {
|
||||
ctx.body = {
|
||||
response_type: "ephemeral",
|
||||
text:
|
||||
"Sorry, we couldn’t find an integration for your team. Head to your Outline settings to set one up.",
|
||||
text: `Sorry, we couldn’t 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 haven’t signed in to Outline yet, so results may be limited)`;
|
||||
const haventSignedIn = `(It looks like you haven’t 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) {
|
||||
|
||||
@@ -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, & more…",
|
||||
canonical = "",
|
||||
} = options;
|
||||
|
||||
@@ -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",
|
||||
"You’re offline.": "You’re 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. It’s possible that there are other users who have access through {team.signinMethods} but haven’t signed in yet.": "Everyone that has signed into Outline appears here. It’s possible that there are other users who have access through {team.signinMethods} but haven’t signed in yet.",
|
||||
"Everyone that has signed into {{appName}} is listed here. It’s possible that there are other users who have access through {team.signinMethods} but haven’t signed in yet.": "Everyone that has signed into {{appName}} is listed here. It’s possible that there are other users who have access through {team.signinMethods} but haven’t 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 Outline’s features and functionality": "Tips on getting started with Outline’s 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",
|
||||
|
||||
@@ -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>;
|
||||
|
||||
Reference in New Issue
Block a user