translate managed page

This commit is contained in:
miloschwartz
2025-08-30 16:51:04 -07:00
parent 8e5aa9c195
commit 970ab9818a
2 changed files with 89 additions and 47 deletions

View File

@@ -1457,5 +1457,41 @@
"autoLoginRedirecting": "Redirecting to login...", "autoLoginRedirecting": "Redirecting to login...",
"autoLoginError": "Auto Login Error", "autoLoginError": "Auto Login Error",
"autoLoginErrorNoRedirectUrl": "No redirect URL received from the identity provider.", "autoLoginErrorNoRedirectUrl": "No redirect URL received from the identity provider.",
"autoLoginErrorGeneratingUrl": "Failed to generate authentication URL." "autoLoginErrorGeneratingUrl": "Failed to generate authentication URL.",
"managedSelfHosted": {
"title": "Managed Self-Hosted",
"description": "More reliable and low-maintenance self-hosted Pangolin server with extra bells and whistles",
"introTitle": "Managed Self-Hosted Pangolin",
"introDescription": "is a deployment option designed for people who want simplicity and extra reliability while still keeping their data private and self-hosted.",
"introDetail": "With this option, you still run your own Pangolin node — your tunnels, SSL termination, and traffic all stay on your server. The difference is that management and monitoring are handled through our cloud dashboard, which unlocks a number of benefits:",
"benefitSimplerOperations": {
"title": "Simpler operations",
"description": "No need to run your own mail server or set up complex alerting. You'll get health checks and downtime alerts out of the box."
},
"benefitAutomaticUpdates": {
"title": "Automatic updates",
"description": "The cloud dashboard evolves quickly, so you get new features and bug fixes without having to manually pull new containers every time."
},
"benefitLessMaintenance": {
"title": "Less maintenance",
"description": "No database migrations, backups, or extra infrastructure to manage. We handle that in the cloud."
},
"benefitCloudFailover": {
"title": "Cloud failover",
"description": "If your node goes down, your tunnels can temporarily fail over to our cloud points of presence until you bring it back online."
},
"benefitHighAvailability": {
"title": "High availability (PoPs)",
"description": "You can also attach multiple nodes to your account for redundancy and better performance."
},
"benefitFutureEnhancements": {
"title": "Future enhancements",
"description": "We're planning to add more analytics, alerting, and management tools to make your deployment even more robust."
},
"docsAlert": {
"text": "Learn more about the Managed Self-Hosted option in our",
"documentation": "documentation"
},
"convertButton": "Convert This Node to Managed Self-Hosted"
}
} }

View File

@@ -1,3 +1,5 @@
"use client";
import { import {
SettingsContainer, SettingsContainer,
SettingsSection, SettingsSection,
@@ -18,30 +20,27 @@ import {
ExternalLink ExternalLink
} from "lucide-react"; } from "lucide-react";
import Link from "next/link"; import Link from "next/link";
import { useTranslations } from "next-intl";
export default function ManagedPage() {
const t = useTranslations();
export default async function ManagedPage() {
return ( return (
<> <>
<SettingsSectionTitle <SettingsSectionTitle
title="Managed Self-Hosted" title={t("managedSelfHosted.title")}
description="More reliable and low-maintenance self-hosted Pangolin server with extra bells and whistles" description={t("managedSelfHosted.description")}
/> />
<SettingsContainer> <SettingsContainer>
<SettingsSection> <SettingsSection>
<SettingsSectionBody> <SettingsSectionBody>
<p className="text-muted-foreground mb-4"> <p className="text-muted-foreground mb-4">
<strong>Managed Self-Hosted Pangolin</strong> is a <strong>{t("managedSelfHosted.introTitle")}</strong>{" "}
deployment option designed for people who want {t("managedSelfHosted.introDescription")}
simplicity and extra reliability while still keeping
their data private and self-hosted.
</p> </p>
<p className="text-muted-foreground mb-6"> <p className="text-muted-foreground mb-6">
With this option, you still run your own Pangolin {t("managedSelfHosted.introDetail")}
node your tunnels, SSL termination, and traffic
all stay on your server. The difference is that
management and monitoring are handled through our
cloud dashboard, which unlocks a number of benefits:
</p> </p>
<div className="grid gap-4 md:grid-cols-2 py-4"> <div className="grid gap-4 md:grid-cols-2 py-4">
@@ -50,13 +49,14 @@ export default async function ManagedPage() {
<CheckCircle className="w-5 h-5 text-green-500 mt-0.5 flex-shrink-0" /> <CheckCircle className="w-5 h-5 text-green-500 mt-0.5 flex-shrink-0" />
<div> <div>
<h4 className="font-medium"> <h4 className="font-medium">
Simpler operations {t(
"managedSelfHosted.benefitSimplerOperations.title"
)}
</h4> </h4>
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
No need to run your own mail server {t(
or set up complex alerting. You'll "managedSelfHosted.benefitSimplerOperations.description"
get health checks and downtime )}
alerts out of the box.
</p> </p>
</div> </div>
</div> </div>
@@ -65,13 +65,14 @@ export default async function ManagedPage() {
<RefreshCw className="w-5 h-5 text-blue-500 mt-0.5 flex-shrink-0" /> <RefreshCw className="w-5 h-5 text-blue-500 mt-0.5 flex-shrink-0" />
<div> <div>
<h4 className="font-medium"> <h4 className="font-medium">
Automatic updates {t(
"managedSelfHosted.benefitAutomaticUpdates.title"
)}
</h4> </h4>
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
The cloud dashboard evolves quickly, {t(
so you get new features and bug "managedSelfHosted.benefitAutomaticUpdates.description"
fixes without having to manually )}
pull new containers every time.
</p> </p>
</div> </div>
</div> </div>
@@ -80,12 +81,14 @@ export default async function ManagedPage() {
<Wrench className="w-5 h-5 text-orange-500 mt-0.5 flex-shrink-0" /> <Wrench className="w-5 h-5 text-orange-500 mt-0.5 flex-shrink-0" />
<div> <div>
<h4 className="font-medium"> <h4 className="font-medium">
Less maintenance {t(
"managedSelfHosted.benefitLessMaintenance.title"
)}
</h4> </h4>
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
No database migrations, backups, or {t(
extra infrastructure to manage. We "managedSelfHosted.benefitLessMaintenance.description"
handle that in the cloud. )}
</p> </p>
</div> </div>
</div> </div>
@@ -96,13 +99,14 @@ export default async function ManagedPage() {
<Activity className="w-5 h-5 text-purple-500 mt-0.5 flex-shrink-0" /> <Activity className="w-5 h-5 text-purple-500 mt-0.5 flex-shrink-0" />
<div> <div>
<h4 className="font-medium"> <h4 className="font-medium">
Cloud failover {t(
"managedSelfHosted.benefitCloudFailover.title"
)}
</h4> </h4>
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
If your node goes down, your tunnels {t(
can temporarily fail over to our "managedSelfHosted.benefitCloudFailover.description"
cloud points of presence until you )}
bring it back online.
</p> </p>
</div> </div>
</div> </div>
@@ -110,12 +114,14 @@ export default async function ManagedPage() {
<Shield className="w-5 h-5 text-indigo-500 mt-0.5 flex-shrink-0" /> <Shield className="w-5 h-5 text-indigo-500 mt-0.5 flex-shrink-0" />
<div> <div>
<h4 className="font-medium"> <h4 className="font-medium">
High availability (PoPs) {t(
"managedSelfHosted.benefitHighAvailability.title"
)}
</h4> </h4>
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
You can also attach multiple nodes {t(
to your account for redundancy and "managedSelfHosted.benefitHighAvailability.description"
better performance. )}
</p> </p>
</div> </div>
</div> </div>
@@ -124,13 +130,14 @@ export default async function ManagedPage() {
<Zap className="w-5 h-5 text-yellow-500 mt-0.5 flex-shrink-0" /> <Zap className="w-5 h-5 text-yellow-500 mt-0.5 flex-shrink-0" />
<div> <div>
<h4 className="font-medium"> <h4 className="font-medium">
Future enhancements {t(
"managedSelfHosted.benefitFutureEnhancements.title"
)}
</h4> </h4>
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
We're planning to add more {t(
analytics, alerting, and management "managedSelfHosted.benefitFutureEnhancements.description"
tools to make your deployment even )}
more robust.
</p> </p>
</div> </div>
</div> </div>
@@ -141,15 +148,14 @@ export default async function ManagedPage() {
variant="neutral" variant="neutral"
className="flex items-center gap-1" className="flex items-center gap-1"
> >
Read the docs to learn more about the Managed {t("managedSelfHosted.docsAlert.text")}{" "}
Self-Hosted option in our{" "}
<Link <Link
href="https://docs.digpangolin.com/self-host/advanced/convert-to-managed" href="https://docs.digpangolin.com/manage/managed"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="hover:underline text-primary flex items-center gap-1" className="hover:underline text-primary flex items-center gap-1"
> >
documentation {t("managedSelfHosted.docsAlert.documentation")}
<ExternalLink className="w-4 h-4" /> <ExternalLink className="w-4 h-4" />
</Link> </Link>
. .
@@ -157,13 +163,13 @@ export default async function ManagedPage() {
</SettingsSectionBody> </SettingsSectionBody>
<SettingsSectionFooter> <SettingsSectionFooter>
<Link <Link
href="https://docs.digpangolin.com/self-host/advanced/convert-to-managed" href="https://docs.digpangolin.com/self-host/convert-managed"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="hover:underline text-primary flex items-center gap-1" className="hover:underline text-primary flex items-center gap-1"
> >
<Button> <Button>
Convert This Node to Managed Self-Hosted {t("managedSelfHosted.convertButton")}
</Button> </Button>
</Link> </Link>
</SettingsSectionFooter> </SettingsSectionFooter>