Merge pull request #1503 from Dokploy/revert-1429-feat/update-zh-Hans-translation

Revert "feat(i18n): update zh-Hans translation"
This commit is contained in:
Mauricio Siu
2025-03-15 22:09:08 -06:00
committed by GitHub
81 changed files with 1268 additions and 1765 deletions

View File

@@ -21,7 +21,6 @@ import { Input } from "@/components/ui/input";
import { api } from "@/utils/api";
import { zodResolver } from "@hookform/resolvers/zod";
import { PenBoxIcon, Plus } from "lucide-react";
import { useTranslation } from "next-i18next";
import { useEffect, useState } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
@@ -42,7 +41,6 @@ interface Props {
}
export function AddOrganization({ organizationId }: Props) {
const { t } = useTranslation();
const [open, setOpen] = useState(false);
const utils = api.useUtils();
const { data: organization } = api.organization.one.useQuery(
@@ -83,9 +81,7 @@ export function AddOrganization({ organizationId }: Props) {
.then(() => {
form.reset();
toast.success(
organizationId
? t("common.side.organizations.updateSuccess")
: t("common.side.organizations.createSuccess"),
`Organization ${organizationId ? "updated" : "created"} successfully`,
);
utils.organization.all.invalidate();
setOpen(false);
@@ -93,9 +89,7 @@ export function AddOrganization({ organizationId }: Props) {
.catch((error) => {
console.error(error);
toast.error(
organizationId
? t("common.side.organizations.updateFailed")
: t("common.side.organizations.createFailed"),
`Failed to ${organizationId ? "update" : "create"} organization`,
);
});
};
@@ -119,7 +113,7 @@ export function AddOrganization({ organizationId }: Props) {
<Plus className="size-4" />
</div>
<div className="font-medium text-muted-foreground">
{t("common.side.organizations.createOrganization")}
Add organization
</div>
</DropdownMenuItem>
)}
@@ -127,14 +121,12 @@ export function AddOrganization({ organizationId }: Props) {
<DialogContent className="sm:max-w-[425px]">
<DialogHeader>
<DialogTitle>
{organizationId
? t("common.side.organizations.updateOrganization")
: t("common.side.organizations.createOrganization")}
{organizationId ? "Update organization" : "Add organization"}
</DialogTitle>
<DialogDescription>
{organizationId
? t("common.side.organizations.updateOrganizationDescription")
: t("common.side.organizations.createOrganizationDescription")}
? "Update the organization name and logo"
: "Create a new organization to manage your projects."}
</DialogDescription>
</DialogHeader>
<Form {...form}>
@@ -147,14 +139,10 @@ export function AddOrganization({ organizationId }: Props) {
name="name"
render={({ field }) => (
<FormItem className="tems-center gap-4">
<FormLabel className="text-right">
{t("common.side.organizations.name")}
</FormLabel>
<FormLabel className="text-right">Name</FormLabel>
<FormControl>
<Input
placeholder={t(
"common.side.organizations.name.placeholder",
)}
placeholder="Organization name"
{...field}
className="col-span-3"
/>
@@ -168,9 +156,7 @@ export function AddOrganization({ organizationId }: Props) {
name="logo"
render={({ field }) => (
<FormItem className=" gap-4">
<FormLabel className="text-right">
{t("common.side.organizations.logoURL")}
</FormLabel>
<FormLabel className="text-right">Logo URL</FormLabel>
<FormControl>
<Input
placeholder="https://example.com/logo.png"
@@ -185,9 +171,7 @@ export function AddOrganization({ organizationId }: Props) {
/>
<DialogFooter className="mt-4">
<Button type="submit" isLoading={isLoading}>
{organizationId
? t("common.side.organizations.updateOrganization")
: t("common.side.organizations.createOrganization")}
{organizationId ? "Update organization" : "Create organization"}
</Button>
</DialogFooter>
</form>

View File

@@ -47,11 +47,9 @@ import { useMemo, useState } from "react";
import { toast } from "sonner";
import { HandleProject } from "./handle-project";
import { ProjectEnvironment } from "./project-environment";
import { useTranslation } from "next-i18next";
export const ShowProjects = () => {
const utils = api.useUtils();
const { t } = useTranslation();
const { data, isLoading } = api.project.all.useQuery();
const { data: auth } = api.user.get.useQuery();
const { mutateAsync } = api.project.remove.useMutation();
@@ -78,10 +76,10 @@ export const ShowProjects = () => {
<CardHeader className="p-0">
<CardTitle className="text-xl flex flex-row gap-2">
<FolderInput className="size-6 text-muted-foreground self-center" />
{t("home.projects.title")}
Projects
</CardTitle>
<CardDescription>
{t("home.projects.description")}
Create and manage your projects
</CardDescription>
</CardHeader>
@@ -188,9 +186,7 @@ export const ShowProjects = () => {
target="_blank"
href={`${domain.https ? "https" : "http"}://${domain.host}${domain.path}`}
>
<span className="truncate">
{domain.host}
</span>
<span className="truncate">{domain.host}</span>
<ExternalLinkIcon className="size-4 shrink-0" />
</Link>
</DropdownMenuItem>
@@ -226,9 +222,7 @@ export const ShowProjects = () => {
target="_blank"
href={`${domain.https ? "https" : "http"}://${domain.host}${domain.path}`}
>
<span className="truncate">
{domain.host}
</span>
<span className="truncate">{domain.host}</span>
<ExternalLinkIcon className="size-4 shrink-0" />
</Link>
</DropdownMenuItem>

View File

@@ -33,7 +33,6 @@ import {
import { Switch } from "@/components/ui/switch";
import copy from "copy-to-clipboard";
import { CodeEditor } from "@/components/shared/code-editor";
import { useTranslation } from "next-i18next";
const formSchema = z.object({
name: z.string().min(1, "Name is required"),
@@ -80,7 +79,6 @@ const REFILL_INTERVAL_OPTIONS = [
];
export const AddApiKey = () => {
const { t } = useTranslation();
const [open, setOpen] = useState(false);
const [showSuccessModal, setShowSuccessModal] = useState(false);
const [newApiKey, setNewApiKey] = useState("");
@@ -97,7 +95,7 @@ export const AddApiKey = () => {
void refetch();
},
onError: () => {
toast.error(t("settings.api.errorGeneratingApiKey"));
toast.error("Failed to generate API key");
},
});
@@ -142,13 +140,14 @@ export const AddApiKey = () => {
<>
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button>{t("settings.api.generateNewKey")}</Button>
<Button>Generate New Key</Button>
</DialogTrigger>
<DialogContent className="sm:max-w-xl max-h-[90vh] overflow-y-auto">
<DialogHeader>
<DialogTitle>{t("settings.api.generateApiKey")}</DialogTitle>
<DialogTitle>Generate API Key</DialogTitle>
<DialogDescription>
{t("settings.api.createNewApiKeyDescription")}
Create a new API key for accessing the API. You can set an
expiration date and a custom prefix for better organization.
</DialogDescription>
</DialogHeader>
<Form {...form}>
@@ -158,12 +157,9 @@ export const AddApiKey = () => {
name="name"
render={({ field }) => (
<FormItem>
<FormLabel>{t("settings.api.name")}</FormLabel>
<FormLabel>Name</FormLabel>
<FormControl>
<Input
placeholder={t("settings.api.namePlaceholder")}
{...field}
/>
<Input placeholder="My API Key" {...field} />
</FormControl>
<FormMessage />
</FormItem>
@@ -174,12 +170,9 @@ export const AddApiKey = () => {
name="prefix"
render={({ field }) => (
<FormItem>
<FormLabel>{t("settings.api.prefix")}</FormLabel>
<FormLabel>Prefix</FormLabel>
<FormControl>
<Input
placeholder={t("settings.api.prefixPlaceholder")}
{...field}
/>
<Input placeholder="my_app" {...field} />
</FormControl>
<FormMessage />
</FormItem>
@@ -190,7 +183,7 @@ export const AddApiKey = () => {
name="expiresIn"
render={({ field }) => (
<FormItem>
<FormLabel>{t("settings.api.expiration")}</FormLabel>
<FormLabel>Expiration</FormLabel>
<Select
value={field.value?.toString() || "0"}
onValueChange={(value) =>
@@ -199,17 +192,13 @@ export const AddApiKey = () => {
>
<FormControl>
<SelectTrigger>
<SelectValue
placeholder={t("settings.api.selectExpirationTime")}
/>
<SelectValue placeholder="Select expiration time" />
</SelectTrigger>
</FormControl>
<SelectContent>
{EXPIRATION_OPTIONS.map((option) => (
<SelectItem key={option.value} value={option.value}>
{t(
`settings.api.expirationOptions.${option.label}`,
)}
{option.label}
</SelectItem>
))}
</SelectContent>
@@ -223,13 +212,11 @@ export const AddApiKey = () => {
name="organizationId"
render={({ field }) => (
<FormItem>
<FormLabel>{t("settings.api.organization")}</FormLabel>
<FormLabel>Organization</FormLabel>
<Select value={field.value} onValueChange={field.onChange}>
<FormControl>
<SelectTrigger>
<SelectValue
placeholder={t("settings.api.selectOrganization")}
/>
<SelectValue placeholder="Select organization" />
</SelectTrigger>
</FormControl>
<SelectContent>
@@ -247,20 +234,16 @@ export const AddApiKey = () => {
{/* Rate Limiting Section */}
<div className="space-y-4 rounded-lg border p-4">
<h3 className="text-lg font-medium">
{t("settings.api.rateLimiting")}
</h3>
<h3 className="text-lg font-medium">Rate Limiting</h3>
<FormField
control={form.control}
name="rateLimitEnabled"
render={({ field }) => (
<FormItem className="flex flex-row items-center justify-between rounded-lg border p-3">
<div className="space-y-0.5">
<FormLabel>
{t("settings.api.enableRateLimiting")}
</FormLabel>
<FormLabel>Enable Rate Limiting</FormLabel>
<FormDescription>
{t("settings.api.limitRequestsDescription")}
Limit the number of requests within a time window
</FormDescription>
</div>
<FormControl>
@@ -280,7 +263,7 @@ export const AddApiKey = () => {
name="rateLimitTimeWindow"
render={({ field }) => (
<FormItem>
<FormLabel>{t("settings.api.timeWindow")}</FormLabel>
<FormLabel>Time Window</FormLabel>
<Select
value={field.value?.toString()}
onValueChange={(value) =>
@@ -289,11 +272,7 @@ export const AddApiKey = () => {
>
<FormControl>
<SelectTrigger>
<SelectValue
placeholder={t(
"settings.api.selectTimeWindow",
)}
/>
<SelectValue placeholder="Select time window" />
</SelectTrigger>
</FormControl>
<SelectContent>
@@ -302,15 +281,13 @@ export const AddApiKey = () => {
key={option.value}
value={option.value}
>
{t(
`settings.api.timeWindowOptions.${option.label}`,
)}
{option.label}
</SelectItem>
))}
</SelectContent>
</Select>
<FormDescription>
{t("settings.api.timeWindowDescription")}
The duration in which requests are counted
</FormDescription>
<FormMessage />
</FormItem>
@@ -321,13 +298,11 @@ export const AddApiKey = () => {
name="rateLimitMax"
render={({ field }) => (
<FormItem>
<FormLabel>{t("settings.api.maxRequests")}</FormLabel>
<FormLabel>Maximum Requests</FormLabel>
<FormControl>
<Input
type="number"
placeholder={t(
"settings.api.maxRequestsPlaceholder",
)}
placeholder="100"
value={field.value?.toString() ?? ""}
onChange={(e) =>
field.onChange(
@@ -339,7 +314,8 @@ export const AddApiKey = () => {
/>
</FormControl>
<FormDescription>
{t("settings.api.maxRequestsDescription")}
Maximum number of requests allowed within the time
window
</FormDescription>
<FormMessage />
</FormItem>
@@ -351,23 +327,17 @@ export const AddApiKey = () => {
{/* Request Limiting Section */}
<div className="space-y-4 rounded-lg border p-4">
<h3 className="text-lg font-medium">
{t("settings.api.requestLimiting")}
</h3>
<h3 className="text-lg font-medium">Request Limiting</h3>
<FormField
control={form.control}
name="remaining"
render={({ field }) => (
<FormItem>
<FormLabel>
{t("settings.api.totalRequestLimit")}
</FormLabel>
<FormLabel>Total Request Limit</FormLabel>
<FormControl>
<Input
type="number"
placeholder={t(
"settings.api.totalRequestLimitPlaceholder",
)}
placeholder="Leave empty for unlimited"
value={field.value?.toString() ?? ""}
onChange={(e) =>
field.onChange(
@@ -379,7 +349,8 @@ export const AddApiKey = () => {
/>
</FormControl>
<FormDescription>
{t("settings.api.totalRequestLimitDescription")}
Total number of requests allowed (leave empty for
unlimited)
</FormDescription>
<FormMessage />
</FormItem>
@@ -391,13 +362,11 @@ export const AddApiKey = () => {
name="refillAmount"
render={({ field }) => (
<FormItem>
<FormLabel>{t("settings.api.refillAmount")}</FormLabel>
<FormLabel>Refill Amount</FormLabel>
<FormControl>
<Input
type="number"
placeholder={t(
"settings.api.refillAmountPlaceholder",
)}
placeholder="Amount to refill"
value={field.value?.toString() ?? ""}
onChange={(e) =>
field.onChange(
@@ -409,7 +378,7 @@ export const AddApiKey = () => {
/>
</FormControl>
<FormDescription>
{t("settings.api.refillAmountDescription")}
Number of requests to add on each refill
</FormDescription>
<FormMessage />
</FormItem>
@@ -421,7 +390,7 @@ export const AddApiKey = () => {
name="refillInterval"
render={({ field }) => (
<FormItem>
<FormLabel>{t("settings.api.refillInterval")}</FormLabel>
<FormLabel>Refill Interval</FormLabel>
<Select
value={field.value?.toString()}
onValueChange={(value) =>
@@ -430,25 +399,19 @@ export const AddApiKey = () => {
>
<FormControl>
<SelectTrigger>
<SelectValue
placeholder={t(
"settings.api.selectRefillInterval",
)}
/>
<SelectValue placeholder="Select refill interval" />
</SelectTrigger>
</FormControl>
<SelectContent>
{REFILL_INTERVAL_OPTIONS.map((option) => (
<SelectItem key={option.value} value={option.value}>
{t(
`settings.api.refillIntervalOptions.${option.label}`,
)}
{option.label}
</SelectItem>
))}
</SelectContent>
</Select>
<FormDescription>
{t("settings.api.refillIntervalDescription")}
How often to refill the request limit
</FormDescription>
<FormMessage />
</FormItem>
@@ -462,9 +425,9 @@ export const AddApiKey = () => {
variant="outline"
onClick={() => setOpen(false)}
>
{t("settings.api.cancel")}
Cancel
</Button>
<Button type="submit">{t("settings.api.generate")}</Button>
<Button type="submit">Generate</Button>
</div>
</form>
</Form>
@@ -474,11 +437,9 @@ export const AddApiKey = () => {
<Dialog open={showSuccessModal} onOpenChange={setShowSuccessModal}>
<DialogContent className="sm:max-w-xl">
<DialogHeader>
<DialogTitle>
{t("settings.api.apiKeyGeneratedSuccessfully")}
</DialogTitle>
<DialogTitle>API Key Generated Successfully</DialogTitle>
<DialogDescription>
{t("settings.api.copyApiKeyNow")}
Please copy your API key now. You won't be able to see it again!
</DialogDescription>
</DialogHeader>
<div className="mt-4 space-y-4">
@@ -492,16 +453,16 @@ export const AddApiKey = () => {
<Button
onClick={() => {
copy(newApiKey);
toast.success(t("settings.api.apiKeyCopied"));
toast.success("API key copied to clipboard");
}}
>
{t("settings.api.copyToClipboard")}
Copy to Clipboard
</Button>
<Button
variant="outline"
onClick={() => setShowSuccessModal(false)}
>
{t("settings.api.close")}
Close
</Button>
</div>
</div>

View File

@@ -14,11 +14,8 @@ import { formatDistanceToNow } from "date-fns";
import { DialogAction } from "@/components/shared/dialog-action";
import { AddApiKey } from "./add-api-key";
import { Badge } from "@/components/ui/badge";
import { useTranslation } from "next-i18next";
import { getDateFnsLocaleByCode } from "@/lib/languages";
export const ShowApiKeys = () => {
const { t, i18n } = useTranslation();
const { data, refetch } = api.user.get.useQuery();
const { mutateAsync: deleteApiKey, isLoading: isLoadingDelete } =
api.user.deleteApiKey.useMutation();
@@ -31,24 +28,22 @@ export const ShowApiKeys = () => {
<div>
<CardTitle className="text-xl flex items-center gap-2">
<KeyIcon className="size-5" />
{t("settings.api.apiCliKeys")}
API/CLI Keys
</CardTitle>
<CardDescription>
{t("settings.api.generateAndManageKeys")}
Generate and manage API keys to access the API/CLI
</CardDescription>
</div>
<div className="flex flex-row gap-2 max-sm:flex-wrap items-end">
<span className="text-sm font-medium text-muted-foreground">
{t("settings.api.swaggerApi")}
Swagger API:
</span>
<Link
href="/swagger"
target="_blank"
className="flex flex-row gap-2 items-center"
>
<span className="text-sm font-medium">
{t("settings.api.view")}
</span>
<span className="text-sm font-medium">View</span>
<ExternalLinkIcon className="size-4" />
</Link>
</div>
@@ -67,11 +62,9 @@ export const ShowApiKeys = () => {
<div className="flex flex-wrap gap-2 items-center text-sm text-muted-foreground">
<span className="flex items-center gap-1">
<Clock className="size-3.5" />
{t("settings.api.created")}{" "}
{formatDistanceToNow(new Date(apiKey.createdAt), {
locale: getDateFnsLocaleByCode(i18n.language),
})}{" "}
{t("settings.api.ago")}
Created{" "}
{formatDistanceToNow(new Date(apiKey.createdAt))}{" "}
ago
</span>
{apiKey.prefix && (
<Badge
@@ -88,17 +81,17 @@ export const ShowApiKeys = () => {
className="flex items-center gap-1"
>
<Clock className="size-3.5" />
{t("settings.api.expiresIn")}{" "}
{formatDistanceToNow(new Date(apiKey.expiresAt), {
locale: getDateFnsLocaleByCode(i18n.language),
})}{" "}
Expires in{" "}
{formatDistanceToNow(
new Date(apiKey.expiresAt),
)}{" "}
</Badge>
)}
</div>
</div>
<DialogAction
title={t("settings.api.deleteApiKey")}
description={t("settings.api.deleteApiKeyDescription")}
title="Delete API Key"
description="Are you sure you want to delete this API key? This action cannot be undone."
type="destructive"
onClick={async () => {
try {
@@ -106,12 +99,12 @@ export const ShowApiKeys = () => {
apiKeyId: apiKey.id,
});
await refetch();
toast.success(t("settings.api.apiKeyDeleted"));
toast.success("API key deleted successfully");
} catch (error) {
toast.error(
error instanceof Error
? error.message
: t("settings.api.errorDeletingApiKey"),
: "Error deleting API key",
);
}
}}
@@ -131,7 +124,7 @@ export const ShowApiKeys = () => {
<div className="flex flex-col items-center gap-3 py-6">
<KeyIcon className="size-8 text-muted-foreground" />
<span className="text-base text-muted-foreground">
{t("settings.api.noApiKeysFound")}
No API keys found
</span>
</div>
)}

View File

@@ -26,7 +26,6 @@ import { authClient } from "@/lib/auth-client";
import { api } from "@/utils/api";
import { zodResolver } from "@hookform/resolvers/zod";
import { Fingerprint, QrCode } from "lucide-react";
import { useTranslation } from "next-i18next";
import QRCode from "qrcode";
import { useEffect, useState } from "react";
import { useForm } from "react-hook-form";
@@ -56,7 +55,6 @@ type PinForm = z.infer<typeof PinSchema>;
export const Enable2FA = () => {
const utils = api.useUtils();
const { t } = useTranslation();
const [data, setData] = useState<TwoFactorSetupData | null>(null);
const [backupCodes, setBackupCodes] = useState<string[]>([]);
const [isDialogOpen, setIsDialogOpen] = useState(false);
@@ -88,15 +86,13 @@ export const Enable2FA = () => {
});
setStep("verify");
toast.success(t("settings.2fa.scanQrCode"));
toast.success("Scan the QR code with your authenticator app");
} else {
throw new Error("No TOTP URI received from server");
}
} catch (error) {
toast.error(
error instanceof Error
? error.message
: t("settings.2fa.errorSettingUp"),
error instanceof Error ? error.message : "Error setting up 2FA",
);
passwordForm.setError("password", {
message:
@@ -116,9 +112,9 @@ export const Enable2FA = () => {
if (result.error) {
if (result.error.code === "INVALID_TWO_FACTOR_AUTHENTICATION") {
pinForm.setError("pin", {
message: t("settings.2fa.invalidCode"),
message: "Invalid code. Please try again.",
});
toast.error(t("settings.2fa.invalidVerificationCode"));
toast.error("Invalid verification code");
return;
}
@@ -129,14 +125,14 @@ export const Enable2FA = () => {
throw new Error("No response received from server");
}
toast.success(t("settings.2fa.success"));
toast.success("2FA configured successfully");
utils.user.get.invalidate();
setIsDialogOpen(false);
} catch (error) {
if (error instanceof Error) {
const errorMessage =
error.message === "Failed to fetch"
? t("settings.2fa.connectionError")
? "Connection error. Please check your internet connection."
: error.message;
pinForm.setError("pin", {
@@ -145,9 +141,9 @@ export const Enable2FA = () => {
toast.error(errorMessage);
} else {
pinForm.setError("pin", {
message: t("settings.2fa.errorVerifyingCode"),
message: "Error verifying code",
});
toast.error(t("settings.2fa.errorVerifying2faCode"));
toast.error("Error verifying 2FA code");
}
}
};
@@ -181,16 +177,16 @@ export const Enable2FA = () => {
<DialogTrigger asChild>
<Button variant="ghost">
<Fingerprint className="size-4 text-muted-foreground" />
{t("settings.2fa.enable2fa")}
Enable 2FA
</Button>
</DialogTrigger>
<DialogContent className="max-h-screen overflow-y-auto sm:max-w-xl">
<DialogHeader>
<DialogTitle>{t("settings.2fa.title")}</DialogTitle>
<DialogTitle>2FA Setup</DialogTitle>
<DialogDescription>
{step === "password"
? t("settings.2fa.enterPassword")
: t("settings.2fa.scanQrCodeAndVerify")}
? "Enter your password to begin 2FA setup"
: "Scan the QR code and verify with your authenticator app"}
</DialogDescription>
</DialogHeader>
@@ -206,16 +202,16 @@ export const Enable2FA = () => {
name="password"
render={({ field }) => (
<FormItem>
<FormLabel>{t("settings.2fa.password")}</FormLabel>
<FormLabel>Password</FormLabel>
<FormControl>
<Input
type="password"
placeholder={t("settings.2fa.enterPasswordPlaceholder")}
placeholder="Enter your password"
{...field}
/>
</FormControl>
<FormDescription>
{t("settings.2fa.enterPasswordDescription")}
Enter your password to enable 2FA
</FormDescription>
<FormMessage />
</FormItem>
@@ -226,7 +222,7 @@ export const Enable2FA = () => {
className="w-full"
isLoading={isPasswordLoading}
>
{t("settings.2fa.continue")}
Continue
</Button>
</form>
</Form>
@@ -243,16 +239,16 @@ export const Enable2FA = () => {
<div className="flex flex-col items-center gap-4 p-6 border rounded-lg">
<QrCode className="size-5 text-muted-foreground" />
<span className="text-sm font-medium">
{t("settings.2fa.scanQrCode")}
Scan this QR code with your authenticator app
</span>
<img
src={data.qrCodeUrl}
alt={t("settings.2fa.qrCodeAlt")}
alt="2FA QR Code"
className="rounded-lg w-48 h-48"
/>
<div className="flex flex-col gap-2 text-center">
<span className="text-sm text-muted-foreground">
{t("settings.2fa.cantScanQrCode")}
Can't scan the QR code?
</span>
<span className="text-xs font-mono bg-muted p-2 rounded">
{data.secret}
@@ -262,9 +258,7 @@ export const Enable2FA = () => {
{backupCodes && backupCodes.length > 0 && (
<div className="w-full space-y-3 border rounded-lg p-4">
<h4 className="font-medium">
{t("settings.2fa.backupCodes")}
</h4>
<h4 className="font-medium">Backup Codes</h4>
<div className="grid grid-cols-2 gap-2">
{backupCodes.map((code, index) => (
<code
@@ -276,7 +270,9 @@ export const Enable2FA = () => {
))}
</div>
<p className="text-sm text-muted-foreground">
{t("settings.2fa.saveBackupCodes")}
Save these backup codes in a secure place. You can use
them to access your account if you lose access to your
authenticator device.
</p>
</div>
)}
@@ -293,7 +289,7 @@ export const Enable2FA = () => {
name="pin"
render={({ field }) => (
<FormItem className="flex flex-col justify-center items-center">
<FormLabel>{t("settings.2fa.verificationCode")}</FormLabel>
<FormLabel>Verification Code</FormLabel>
<FormControl>
<InputOTP maxLength={6} {...field}>
<InputOTPGroup>
@@ -307,7 +303,7 @@ export const Enable2FA = () => {
</InputOTP>
</FormControl>
<FormDescription>
{t("settings.2fa.enterVerificationCode")}
Enter the 6-digit code from your authenticator app
</FormDescription>
<FormMessage />
</FormItem>
@@ -319,7 +315,7 @@ export const Enable2FA = () => {
className="w-full"
isLoading={isPasswordLoading}
>
{t("settings.2fa.enable2fa")}
Enable 2FA
</Button>
</form>
</Form>

View File

@@ -62,7 +62,7 @@ export const ProfileForm = () => {
isError,
error,
} = api.user.update.useMutation();
const { t } = useTranslation();
const { t } = useTranslation("settings");
const [gravatarHash, setGravatarHash] = useState<string | null>(null);
const availableAvatars = useMemo(() => {
@@ -170,9 +170,7 @@ export const ProfileForm = () => {
name="currentPassword"
render={({ field }) => (
<FormItem>
<FormLabel>
{t("settings.profile.oldPassword")}
</FormLabel>
<FormLabel>Current Password</FormLabel>
<FormControl>
<Input
type="password"
@@ -191,7 +189,7 @@ export const ProfileForm = () => {
render={({ field }) => (
<FormItem>
<FormLabel>
{t("settings.profile.newPassword")}
{t("settings.profile.password")}
</FormLabel>
<FormControl>
<Input

View File

@@ -18,7 +18,7 @@ import { TerminalModal } from "../../web-server/terminal-modal";
import { GPUSupportModal } from "../gpu-support-modal";
export const ShowDokployActions = () => {
const { t } = useTranslation();
const { t } = useTranslation("settings");
const { mutateAsync: reloadServer, isLoading } =
api.settings.reloadServer.useMutation();

View File

@@ -17,7 +17,7 @@ interface Props {
serverId?: string;
}
export const ShowStorageActions = ({ serverId }: Props) => {
const { t } = useTranslation();
const { t } = useTranslation("settings");
const { mutateAsync: cleanAll, isLoading: cleanAllIsLoading } =
api.settings.cleanAll.useMutation();

View File

@@ -20,7 +20,7 @@ interface Props {
serverId?: string;
}
export const ShowTraefikActions = ({ serverId }: Props) => {
const { t } = useTranslation();
const { t } = useTranslation("settings");
const { mutateAsync: reloadTraefik, isLoading: reloadTraefikIsLoading } =
api.settings.reloadTraefik.useMutation();

View File

@@ -61,7 +61,7 @@ interface Props {
}
export const HandleServers = ({ serverId }: Props) => {
const { t } = useTranslation();
const { t } = useTranslation("settings");
const utils = api.useUtils();
const [isOpen, setIsOpen] = useState(false);

View File

@@ -44,7 +44,7 @@ import { ShowTraefikFileSystemModal } from "./show-traefik-file-system-modal";
import { WelcomeSuscription } from "./welcome-stripe/welcome-suscription";
export const ShowServers = () => {
const { t } = useTranslation();
const { t } = useTranslation("settings");
const router = useRouter();
const query = router.query;
const { data, refetch, isLoading } = api.server.all.useQuery();
@@ -235,7 +235,9 @@ export const ShowServers = () => {
serverId={server.serverId}
>
<span>
{t("common.enterTerminal")}
{t(
"settings.common.enterTerminal",
)}
</span>
</TerminalModal>
)}

View File

@@ -51,7 +51,7 @@ const addServerDomain = z
type AddServerDomain = z.infer<typeof addServerDomain>;
export const WebDomain = () => {
const { t } = useTranslation();
const { t } = useTranslation("settings");
const { data, refetch } = api.user.get.useQuery();
const { mutateAsync, isLoading } =
api.settings.assignDomainServer.useMutation();

View File

@@ -15,7 +15,7 @@ import { ToggleDockerCleanup } from "./servers/actions/toggle-docker-cleanup";
import { UpdateServer } from "./web-server/update-server";
export const WebServer = () => {
const { t } = useTranslation();
const { t } = useTranslation("settings");
const { data } = api.user.get.useQuery();
const { data: dokployVersion } = api.settings.getDokployVersion.useQuery();

View File

@@ -52,7 +52,7 @@ interface Props {
}
const LocalServerConfig = ({ onSave }: Props) => {
const { t } = useTranslation();
const { t } = useTranslation("settings");
const form = useForm<Schema>({
defaultValues: getLocalServerData(),

View File

@@ -54,7 +54,7 @@ const TraefikPortsSchema = z.object({
type TraefikPortsForm = z.infer<typeof TraefikPortsSchema>;
export const ManageTraefikPorts = ({ children, serverId }: Props) => {
const { t } = useTranslation();
const { t } = useTranslation("settings");
const [open, setOpen] = useState(false);
const form = useForm<TraefikPortsForm>({

View File

@@ -86,7 +86,6 @@ import { Logo } from "../shared/logo";
import { Button } from "../ui/button";
import { UpdateServerButton } from "./update-server";
import { UserNav } from "./user-nav";
import { useTranslation } from "next-i18next";
// The types of the queries we are going to use
type AuthQueryOutput = inferRouterOutputs<AppRouter>["user"]["get"];
@@ -94,7 +93,6 @@ type AuthQueryOutput = inferRouterOutputs<AppRouter>["user"]["get"];
type SingleNavItem = {
isSingle?: true;
title: string;
titleKey: string;
url: string;
icon?: LucideIcon;
isEnabled?: (opts: {
@@ -112,7 +110,6 @@ type NavItem =
| {
isSingle: false;
title: string;
titleKey: string;
icon: LucideIcon;
items: SingleNavItem[];
isEnabled?: (opts: {
@@ -125,7 +122,6 @@ type NavItem =
// Represents an external link item (used for the help section)
type ExternalLink = {
name: string;
nameKey: string;
url: string;
icon: React.ComponentType<{ className?: string }>;
isEnabled?: (opts: {
@@ -151,14 +147,12 @@ const MENU: Menu = {
{
isSingle: true,
title: "Projects",
titleKey: "common.side.projects",
url: "/dashboard/projects",
icon: Folder,
},
{
isSingle: true,
title: "Monitoring",
titleKey: "common.side.monitoring",
url: "/dashboard/monitoring",
icon: BarChartHorizontalBigIcon,
// Only enabled in non-cloud environments
@@ -167,7 +161,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Traefik File System",
titleKey: "common.side.traefik",
url: "/dashboard/traefik",
icon: GalleryVerticalEnd,
// Only enabled for admins and users with access to Traefik files in non-cloud environments
@@ -180,7 +173,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Docker",
titleKey: "common.side.docker",
url: "/dashboard/docker",
icon: BlocksIcon,
// Only enabled for admins and users with access to Docker in non-cloud environments
@@ -190,7 +182,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Swarm",
titleKey: "common.side.swarm",
url: "/dashboard/swarm",
icon: PieChart,
// Only enabled for admins and users with access to Docker in non-cloud environments
@@ -200,7 +191,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Requests",
titleKey: "common.side.requests",
url: "/dashboard/requests",
icon: Forward,
// Only enabled for admins and users with access to Docker in non-cloud environments
@@ -269,7 +259,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Web Server",
titleKey: "common.side.web-server",
url: "/dashboard/settings/server",
icon: Activity,
// Only enabled for admins in non-cloud environments
@@ -278,14 +267,12 @@ const MENU: Menu = {
{
isSingle: true,
title: "Profile",
titleKey: "common.side.profile",
url: "/dashboard/settings/profile",
icon: User,
},
{
isSingle: true,
title: "Remote Servers",
titleKey: "common.side.remote-servers",
url: "/dashboard/settings/servers",
icon: Server,
// Only enabled for admins
@@ -294,7 +281,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Users",
titleKey: "common.side.users",
icon: Users,
url: "/dashboard/settings/users",
// Only enabled for admins
@@ -303,7 +289,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "SSH Keys",
titleKey: "common.side.ssh-keys",
icon: KeyRound,
url: "/dashboard/settings/ssh-keys",
// Only enabled for admins and users with access to SSH keys
@@ -312,7 +297,6 @@ const MENU: Menu = {
},
{
title: "AI",
titleKey: "common.side.ai",
icon: BotIcon,
url: "/dashboard/settings/ai",
isSingle: true,
@@ -321,7 +305,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Git",
titleKey: "common.side.git",
url: "/dashboard/settings/git-providers",
icon: GitBranch,
// Only enabled for admins and users with access to Git providers
@@ -331,7 +314,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Registry",
titleKey: "common.side.registry",
url: "/dashboard/settings/registry",
icon: Package,
// Only enabled for admins
@@ -340,7 +322,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "S3 Destinations",
titleKey: "common.side.s3-destinations",
url: "/dashboard/settings/destinations",
icon: Database,
// Only enabled for admins
@@ -350,7 +331,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Certificates",
titleKey: "common.side.certificates",
url: "/dashboard/settings/certificates",
icon: ShieldCheck,
// Only enabled for admins
@@ -359,7 +339,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Cluster",
titleKey: "common.side.cluster",
url: "/dashboard/settings/cluster",
icon: Boxes,
// Only enabled for admins in non-cloud environments
@@ -368,7 +347,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Notifications",
titleKey: "common.side.notifications",
url: "/dashboard/settings/notifications",
icon: Bell,
// Only enabled for admins
@@ -377,7 +355,6 @@ const MENU: Menu = {
{
isSingle: true,
title: "Billing",
titleKey: "common.side.billing",
url: "/dashboard/settings/billing",
icon: CreditCard,
// Only enabled for admins in cloud environments
@@ -388,19 +365,16 @@ const MENU: Menu = {
help: [
{
name: "Documentation",
nameKey: "common.side.documentation",
url: "https://docs.dokploy.com/docs/core",
icon: BookIcon,
},
{
name: "Support",
nameKey: "common.side.support",
url: "https://discord.gg/2tBnJ3jDJc",
icon: CircleHelp,
},
{
name: "Sponsor",
nameKey: "common.side.sponsor",
url: "https://opencollective.com/dokploy",
icon: ({ className }) => (
<HeartIcon
@@ -519,7 +493,6 @@ function LogoWrapper() {
}
function SidebarLogo() {
const { t } = useTranslation();
const { state } = useSidebar();
const { data: isCloud } = api.settings.isCloud.useQuery();
const { data: user } = api.user.get.useQuery();
@@ -603,8 +576,7 @@ function SidebarLogo() {
)}
>
<p className="text-sm font-medium leading-none">
{activeOrganization?.name ??
t("common.side.organizations.select-organization")}
{activeOrganization?.name ?? "Select Organization"}
</p>
</div>
</div>
@@ -620,7 +592,7 @@ function SidebarLogo() {
sideOffset={4}
>
<DropdownMenuLabel className="text-xs text-muted-foreground">
{t("common.side.organizations")}
Organizations
</DropdownMenuLabel>
{organizations?.map((org) => (
<div className="flex flex-row justify-between" key={org.name}>
@@ -648,12 +620,8 @@ function SidebarLogo() {
<div className="flex items-center gap-2">
<AddOrganization organizationId={org.id} />
<DialogAction
title={t(
"common.side.organizations.delete-organization",
)}
description={t(
"common.side.organizations.confirm-delete-organization",
)}
title="Delete Organization"
description="Are you sure you want to delete this organization?"
type="destructive"
onClick={async () => {
await deleteOrganization({
@@ -662,17 +630,13 @@ function SidebarLogo() {
.then(() => {
refetch();
toast.success(
t(
"common.side.organizations.organization-deleted",
),
"Organization deleted successfully",
);
})
.catch((error) => {
toast.error(
error?.message ||
t(
"common.side.organizations.error-deleting-organization",
),
"Error deleting organization",
);
});
}}
@@ -725,9 +689,7 @@ function SidebarLogo() {
side={"right"}
className="w-80"
>
<DropdownMenuLabel>
{t("common.side.invitations.pending-invitations")}
</DropdownMenuLabel>
<DropdownMenuLabel>Pending Invitations</DropdownMenuLabel>
<div className="flex flex-col gap-2">
{invitations && invitations.length > 0 ? (
invitations.map((invitation) => (
@@ -740,23 +702,16 @@ function SidebarLogo() {
{invitation?.organization?.name}
</div>
<div className="text-xs text-muted-foreground">
{t("common.side.invitations.expires", {
expireDate: new Date(
invitation.expiresAt,
).toLocaleString(),
})}
Expires:{" "}
{new Date(invitation.expiresAt).toLocaleString()}
</div>
<div className="text-xs text-muted-foreground">
{t("common.side.invitations.role", {
role: invitation.role,
})}
Role: {invitation.role}
</div>
</DropdownMenuItem>
<DialogAction
title={t("common.side.invitations.accept-invitation")}
description={t(
"common.side.invitations.confirm-accept-invitation",
)}
title="Accept Invitation"
description="Are you sure you want to accept this invitation?"
type="default"
onClick={async () => {
const { error } =
@@ -766,31 +721,24 @@ function SidebarLogo() {
if (error) {
toast.error(
error.message ||
t(
"common.side.invitations.error-accepting-invitation",
),
error.message || "Error accepting invitation",
);
} else {
toast.success(
t(
"common.side.invitations.invitation-accepted",
),
);
toast.success("Invitation accepted successfully");
await refetchInvitations();
await refetch();
}
}}
>
<Button size="sm" variant="secondary">
{t("common.side.invitations.accept-invitation")}
Accept Invitation
</Button>
</DialogAction>
</div>
))
) : (
<DropdownMenuItem disabled>
{t("common.side.invitations.no-pending-invitations")}
No pending invitations
</DropdownMenuItem>
)}
</div>
@@ -804,8 +752,6 @@ function SidebarLogo() {
}
export default function Page({ children }: Props) {
const { t } = useTranslation();
const [defaultOpen, setDefaultOpen] = useState<boolean | undefined>(
undefined,
);
@@ -872,7 +818,7 @@ export default function Page({ children }: Props) {
</SidebarHeader>
<SidebarContent>
<SidebarGroup>
<SidebarGroupLabel>{t("common.side.home")}</SidebarGroupLabel>
<SidebarGroupLabel>Home</SidebarGroupLabel>
<SidebarMenu>
{filteredHome.map((item) => {
const isSingle = item.isSingle !== false;
@@ -893,7 +839,7 @@ export default function Page({ children }: Props) {
{isSingle ? (
<SidebarMenuButton
asChild
tooltip={t(item.titleKey)}
tooltip={item.title}
className={cn(isActive && "bg-border")}
>
<Link
@@ -905,14 +851,14 @@ export default function Page({ children }: Props) {
className={cn(isActive && "text-primary")}
/>
)}
<span>{t(item.titleKey)}</span>
<span>{item.title}</span>
</Link>
</SidebarMenuButton>
) : (
<>
<CollapsibleTrigger asChild>
<SidebarMenuButton
tooltip={t(item.titleKey)}
tooltip={item.title}
isActive={isActive}
>
{item.icon && <item.icon />}
@@ -961,7 +907,7 @@ export default function Page({ children }: Props) {
</SidebarMenu>
</SidebarGroup>
<SidebarGroup>
<SidebarGroupLabel>{t("common.side.settings")}</SidebarGroupLabel>
<SidebarGroupLabel>Settings</SidebarGroupLabel>
<SidebarMenu className="gap-2">
{filteredSettings.map((item) => {
const isSingle = item.isSingle !== false;
@@ -982,7 +928,7 @@ export default function Page({ children }: Props) {
{isSingle ? (
<SidebarMenuButton
asChild
tooltip={t(item.titleKey)}
tooltip={item.title}
className={cn(isActive && "bg-border")}
>
<Link
@@ -994,19 +940,19 @@ export default function Page({ children }: Props) {
className={cn(isActive && "text-primary")}
/>
)}
<span>{t(item.titleKey)}</span>
<span>{item.title}</span>
</Link>
</SidebarMenuButton>
) : (
<>
<CollapsibleTrigger asChild>
<SidebarMenuButton
tooltip={t(item.titleKey)}
tooltip={item.title}
isActive={isActive}
>
{item.icon && <item.icon />}
<span>{t(item.titleKey)}</span>
<span>{item.title}</span>
{item.items?.length && (
<ChevronRight className="ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90" />
)}
@@ -1050,7 +996,7 @@ export default function Page({ children }: Props) {
</SidebarMenu>
</SidebarGroup>
<SidebarGroup className="group-data-[collapsible=icon]:hidden">
<SidebarGroupLabel>{t("common.side.extra")}</SidebarGroupLabel>
<SidebarGroupLabel>Extra</SidebarGroupLabel>
<SidebarMenu>
{help.map((item: ExternalLink) => (
<SidebarMenuItem key={item.name}>
@@ -1064,7 +1010,7 @@ export default function Page({ children }: Props) {
<span className="mr-2">
<item.icon className="h-4 w-4" />
</span>
<span>{t(item.nameKey)}</span>
<span>{item.name}</span>
</a>
</SidebarMenuButton>
</SidebarMenuItem>
@@ -1111,7 +1057,7 @@ export default function Page({ children }: Props) {
href={activeItem?.url || "/"}
className="flex items-center gap-1.5"
>
{activeItem?.titleKey ? t(activeItem.titleKey) : ""}
{activeItem?.title}
</Link>
</BreadcrumbLink>
</BreadcrumbItem>

View File

@@ -23,13 +23,11 @@ import { ChevronsUpDown } from "lucide-react";
import { useRouter } from "next/router";
import { ModeToggle } from "../ui/modeToggle";
import { SidebarMenuButton } from "../ui/sidebar";
import { useTranslation } from "next-i18next";
const _AUTO_CHECK_UPDATES_INTERVAL_MINUTES = 7;
export const UserNav = () => {
const router = useRouter();
const { t } = useTranslation();
const { data } = api.user.get.useQuery();
const { data: isCloud } = api.settings.isCloud.useQuery();
@@ -51,9 +49,7 @@ export const UserNav = () => {
<AvatarFallback className="rounded-lg">CN</AvatarFallback>
</Avatar>
<div className="grid flex-1 text-left text-sm leading-tight">
<span className="truncate font-semibold">
{t("common.account")}
</span>
<span className="truncate font-semibold">Account</span>
<span className="truncate text-xs">{data?.user?.email}</span>
</div>
<ChevronsUpDown className="ml-auto size-4" />
@@ -67,7 +63,7 @@ export const UserNav = () => {
>
<div className="flex items-center justify-between px-2 py-1.5">
<DropdownMenuLabel className="flex flex-col">
{t("common.account.mine")}
My Account
<span className="text-xs font-normal text-muted-foreground">
{data?.user?.email}
</span>
@@ -82,7 +78,7 @@ export const UserNav = () => {
router.push("/dashboard/settings/profile");
}}
>
{t("common.side.profile")}
Profile
</DropdownMenuItem>
<DropdownMenuItem
className="cursor-pointer"
@@ -90,7 +86,7 @@ export const UserNav = () => {
router.push("/dashboard/projects");
}}
>
{t("common.side.projects")}
Projects
</DropdownMenuItem>
{!isCloud ? (
<>
@@ -100,7 +96,7 @@ export const UserNav = () => {
router.push("/dashboard/monitoring");
}}
>
{t("common.side.monitoring")}
Monitoring
</DropdownMenuItem>
{(data?.role === "owner" || data?.canAccessToTraefikFiles) && (
<DropdownMenuItem
@@ -109,7 +105,7 @@ export const UserNav = () => {
router.push("/dashboard/traefik");
}}
>
{t("common.side.traefik")}
Traefik
</DropdownMenuItem>
)}
{(data?.role === "owner" || data?.canAccessToDocker) && (
@@ -121,7 +117,7 @@ export const UserNav = () => {
});
}}
>
{t("common.side.docker")}
Docker
</DropdownMenuItem>
)}
@@ -132,7 +128,7 @@ export const UserNav = () => {
router.push("/dashboard/settings");
}}
>
{t("common.side.settings")}
Settings
</DropdownMenuItem>
)}
</>
@@ -145,7 +141,7 @@ export const UserNav = () => {
router.push("/dashboard/settings/servers");
}}
>
{t("common.side.remote-servers")}
Servers
</DropdownMenuItem>
)}
@@ -156,7 +152,7 @@ export const UserNav = () => {
router.push("/dashboard/settings");
}}
>
{t("common.side.settings")}
Settings
</DropdownMenuItem>
)}
</>
@@ -169,7 +165,7 @@ export const UserNav = () => {
router.push("/dashboard/settings/billing");
}}
>
{t("common.side.billing")}
Billing
</DropdownMenuItem>
)}
<DropdownMenuSeparator />
@@ -185,7 +181,7 @@ export const UserNav = () => {
// });
}}
>
{t("common.account.logout")}
Log out
</DropdownMenuItem>
<div className="w-32">
<Select
@@ -194,7 +190,7 @@ export const UserNav = () => {
value={locale}
>
<SelectTrigger>
<SelectValue placeholder={t("common.account.selectLanguage")} />
<SelectValue placeholder="Select Language" />
</SelectTrigger>
<SelectContent>
{Object.values(Languages).map((language) => (

View File

@@ -1,56 +1,25 @@
import {
enUS,
zhCN,
zhHK,
pl,
uk,
ru,
fr,
de,
tr,
ko,
ptBR,
it,
ja,
es,
az,
id,
kk,
faIR,
nb,
} from "date-fns/locale";
export const Languages = {
english: { code: "en", name: "English", dateFnsLocale: enUS },
polish: { code: "pl", name: "Polski", dateFnsLocale: pl },
ukrainian: { code: "uk", name: "Українська", dateFnsLocale: uk },
russian: { code: "ru", name: "Русский", dateFnsLocale: ru },
french: { code: "fr", name: "Français", dateFnsLocale: fr },
german: { code: "de", name: "Deutsch", dateFnsLocale: de },
chineseTraditional: {
code: "zh-Hant",
name: "繁體中文",
dateFnsLocale: zhHK,
},
chineseSimplified: { code: "zh-Hans", name: "简体中文", dateFnsLocale: zhCN },
turkish: { code: "tr", name: "Türkçe", dateFnsLocale: tr },
kazakh: { code: "kz", name: "Қазақ", dateFnsLocale: kk },
persian: { code: "fa", name: "فارسی", dateFnsLocale: faIR },
korean: { code: "ko", name: "한국어", dateFnsLocale: ko },
portuguese: { code: "pt-br", name: "Português", dateFnsLocale: ptBR },
italian: { code: "it", name: "Italiano", dateFnsLocale: it },
japanese: { code: "ja", name: "日本語", dateFnsLocale: ja },
spanish: { code: "es", name: "Español", dateFnsLocale: es },
norwegian: { code: "no", name: "Norsk", dateFnsLocale: nb },
azerbaijani: { code: "az", name: "Azərbaycan", dateFnsLocale: az },
indonesian: { code: "id", name: "Bahasa Indonesia", dateFnsLocale: id },
malayalam: { code: "ml", name: "മലയാളം", dateFnsLocale: enUS },
english: { code: "en", name: "English" },
polish: { code: "pl", name: "Polski" },
ukrainian: { code: "uk", name: "Українська" },
russian: { code: "ru", name: "Русский" },
french: { code: "fr", name: "Français" },
german: { code: "de", name: "Deutsch" },
chineseTraditional: { code: "zh-Hant", name: "繁體中文" },
chineseSimplified: { code: "zh-Hans", name: "简体中文" },
turkish: { code: "tr", name: "Türkçe" },
kazakh: { code: "kz", name: "Қазақ" },
persian: { code: "fa", name: "فارسی" },
korean: { code: "ko", name: "한국어" },
portuguese: { code: "pt-br", name: "Português" },
italian: { code: "it", name: "Italiano" },
japanese: { code: "ja", name: "日本語" },
spanish: { code: "es", name: "Español" },
norwegian: { code: "no", name: "Norsk" },
azerbaijani: { code: "az", name: "Azərbaycan" },
indonesian: { code: "id", name: "Bahasa Indonesia" },
malayalam: { code: "ml", name: "മലയാളം" },
};
export function getDateFnsLocaleByCode(code: LanguageCode) {
const language = Object.values(Languages).find((lang) => lang.code === code);
return language ? language.dateFnsLocale : enUS;
}
export type Language = keyof typeof Languages;
export type LanguageCode = (typeof Languages)[keyof typeof Languages]["code"];

View File

@@ -1,7 +1,6 @@
import { ShowContainers } from "@/components/dashboard/docker/show/show-containers";
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { IS_CLOUD } from "@dokploy/server/constants";
import { validateRequest } from "@dokploy/server/lib/auth";
import { createServerSideHelpers } from "@trpc/react-query/server";
@@ -39,7 +38,6 @@ export async function getServerSideProps(
};
}
const { req, res } = ctx;
const locale = getLocale(req.cookies);
const helpers = createServerSideHelpers({
router: appRouter,
@@ -72,14 +70,11 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
} catch (_error) {
return {
props: {
...(await serverSideTranslations(locale)),
},
props: {},
};
}
}

View File

@@ -4,7 +4,6 @@ import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { Card } from "@/components/ui/card";
import { useLocalStorage } from "@/hooks/useLocalStorage";
import { api } from "@/utils/api";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { IS_CLOUD } from "@dokploy/server/constants";
import { validateRequest } from "@dokploy/server/lib/auth";
import { Loader2 } from "lucide-react";
@@ -92,8 +91,6 @@ Dashboard.getLayout = (page: ReactElement) => {
export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req } = ctx;
const locale = getLocale(req.cookies);
if (IS_CLOUD) {
return {
redirect: {
@@ -113,8 +110,6 @@ export async function getServerSideProps(
}
return {
props: {
...(await serverSideTranslations(locale)),
},
props: {},
};
}

View File

@@ -2,7 +2,6 @@ import { ShowProjects } from "@/components/dashboard/projects/show";
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { api } from "@/utils/api";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { validateRequest } from "@dokploy/server/lib/auth";
import { createServerSideHelpers } from "@trpc/react-query/server";
import type { GetServerSidePropsContext } from "next";
@@ -38,7 +37,6 @@ export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req, res } = ctx;
const locale = getLocale(req.cookies);
const { user, session } = await validateRequest(req);
const helpers = createServerSideHelpers({
@@ -66,7 +64,6 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -1,6 +1,5 @@
import { ShowRequests } from "@/components/dashboard/requests/show-requests";
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { IS_CLOUD } from "@dokploy/server/constants";
import { validateRequest } from "@dokploy/server/lib/auth";
import type { GetServerSidePropsContext } from "next";
@@ -15,8 +14,6 @@ Requests.getLayout = (page: ReactElement) => {
export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req } = ctx;
const locale = getLocale(req.cookies);
if (IS_CLOUD) {
return {
redirect: {
@@ -36,8 +33,6 @@ export async function getServerSideProps(
}
return {
props: {
...(await serverSideTranslations(locale)),
},
props: {},
};
}

View File

@@ -55,7 +55,7 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
...(await serverSideTranslations(locale, ["settings"])),
},
};
}

View File

@@ -2,7 +2,6 @@ import { ShowBilling } from "@/components/dashboard/settings/billing/show-billin
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { IS_CLOUD } from "@dokploy/server/constants";
import { validateRequest } from "@dokploy/server/lib/auth";
import { createServerSideHelpers } from "@trpc/react-query/server";
@@ -31,8 +30,6 @@ export async function getServerSideProps(
};
}
const { req, res } = ctx;
const locale = getLocale(req.cookies);
const { user, session } = await validateRequest(req);
if (!user || user.role === "member") {
return {
@@ -62,7 +59,6 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -2,7 +2,6 @@ import { ShowCertificates } from "@/components/dashboard/settings/certificates/s
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { validateRequest } from "@dokploy/server";
import { createServerSideHelpers } from "@trpc/react-query/server";
import type { GetServerSidePropsContext } from "next";
@@ -25,7 +24,6 @@ export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req, res } = ctx;
const locale = await getLocale(req.cookies);
const { user, session } = await validateRequest(req);
if (!user || user.role === "member") {
return {
@@ -53,7 +51,6 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -2,7 +2,6 @@ import { ShowNodes } from "@/components/dashboard/settings/cluster/nodes/show-no
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { IS_CLOUD, validateRequest } from "@dokploy/server";
import { createServerSideHelpers } from "@trpc/react-query/server";
import type { GetServerSidePropsContext } from "next";
@@ -26,7 +25,6 @@ export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req, res } = ctx;
const locale = await getLocale(req.cookies);
if (IS_CLOUD) {
return {
redirect: {
@@ -60,7 +58,6 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -2,7 +2,6 @@ import { ShowDestinations } from "@/components/dashboard/settings/destination/sh
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { validateRequest } from "@dokploy/server";
import { createServerSideHelpers } from "@trpc/react-query/server";
import type { GetServerSidePropsContext } from "next";
@@ -26,7 +25,6 @@ export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req, res } = ctx;
const locale = await getLocale(req.cookies);
const { user, session } = await validateRequest(req);
if (!user || user.role === "member") {
return {
@@ -54,7 +52,6 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -2,7 +2,6 @@ import { ShowGitProviders } from "@/components/dashboard/settings/git/show-git-p
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { validateRequest } from "@dokploy/server";
import { createServerSideHelpers } from "@trpc/react-query/server";
import type { GetServerSidePropsContext } from "next";
@@ -35,7 +34,6 @@ export async function getServerSideProps(
};
}
const { req, res } = ctx;
const locale = await getLocale(req.cookies);
const helpers = createServerSideHelpers({
router: appRouter,
ctx: {
@@ -68,14 +66,11 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
} catch (_error) {
return {
props: {
...(await serverSideTranslations(locale)),
},
props: {},
};
}
}

View File

@@ -21,7 +21,6 @@ import {
import { Switch } from "@/components/ui/switch";
import { appRouter } from "@/server/api/root";
import { api } from "@/utils/api";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { validateRequest } from "@dokploy/server";
import { zodResolver } from "@hookform/resolvers/zod";
import { createServerSideHelpers } from "@trpc/react-query/server";
@@ -181,7 +180,6 @@ export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req, res } = ctx;
const locale = await getLocale(req.cookies);
const { user, session } = await validateRequest(ctx.req);
if (!user) {
return {
@@ -216,7 +214,6 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -2,7 +2,6 @@ import { ShowNotifications } from "@/components/dashboard/settings/notifications
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { validateRequest } from "@dokploy/server";
import { createServerSideHelpers } from "@trpc/react-query/server";
import type { GetServerSidePropsContext } from "next";
@@ -26,7 +25,6 @@ export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req, res } = ctx;
const locale = await getLocale(req.cookies);
const { user, session } = await validateRequest(req);
if (!user || user.role === "member") {
return {
@@ -54,7 +52,6 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -66,7 +66,7 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
...(await serverSideTranslations(locale, ["settings"])),
},
};
}

View File

@@ -2,7 +2,6 @@ import { ShowRegistry } from "@/components/dashboard/settings/cluster/registry/s
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { serverSideTranslations, getLocale } from "@/utils/i18n";
import { validateRequest } from "@dokploy/server";
import { createServerSideHelpers } from "@trpc/react-query/server";
import type { GetServerSidePropsContext } from "next";
@@ -26,7 +25,6 @@ export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req, res } = ctx;
const locale = await getLocale(req.cookies);
const { user, session } = await validateRequest(req);
if (!user || user.role === "member") {
return {
@@ -53,7 +51,6 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -115,7 +115,7 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
...(await serverSideTranslations(locale, ["settings"])),
},
};
}

View File

@@ -62,7 +62,7 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
...(await serverSideTranslations(locale, ["settings"])),
},
};
}

View File

@@ -2,7 +2,6 @@ import { ShowDestinations } from "@/components/dashboard/settings/ssh-keys/show-
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { validateRequest } from "@dokploy/server";
import { createServerSideHelpers } from "@trpc/react-query/server";
import type { GetServerSidePropsContext } from "next";
@@ -35,7 +34,6 @@ export async function getServerSideProps(
};
}
const { req, res } = ctx;
const locale = await getLocale(req.cookies);
const helpers = createServerSideHelpers({
router: appRouter,
ctx: {
@@ -69,14 +67,11 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
} catch (_error) {
return {
props: {
...(await serverSideTranslations(locale)),
},
props: {},
};
}
}

View File

@@ -3,7 +3,6 @@ import { ShowUsers } from "@/components/dashboard/settings/users/show-users";
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { validateRequest } from "@dokploy/server";
import { createServerSideHelpers } from "@trpc/react-query/server";
import type { GetServerSidePropsContext } from "next";
@@ -28,7 +27,6 @@ export async function getServerSideProps(
ctx: GetServerSidePropsContext<{ serviceId: string }>,
) {
const { req, res } = ctx;
const locale = await getLocale(req.cookies);
const { user, session } = await validateRequest(req);
if (!user || user.role === "member") {
@@ -57,7 +55,6 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -1,7 +1,6 @@
import SwarmMonitorCard from "@/components/dashboard/swarm/monitoring-card";
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { IS_CLOUD } from "@dokploy/server/constants";
import { validateRequest } from "@dokploy/server/lib/auth";
import { createServerSideHelpers } from "@trpc/react-query/server";
@@ -39,7 +38,6 @@ export async function getServerSideProps(
};
}
const { req, res } = ctx;
const locale = getLocale(req.cookies);
const helpers = createServerSideHelpers({
router: appRouter,
@@ -72,14 +70,11 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
} catch (_error) {
return {
props: {
...(await serverSideTranslations(locale)),
},
props: {},
};
}
}

View File

@@ -1,7 +1,6 @@
import { ShowTraefikSystem } from "@/components/dashboard/file-system/show-traefik-system";
import { DashboardLayout } from "@/components/layouts/dashboard-layout";
import { appRouter } from "@/server/api/root";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { IS_CLOUD } from "@dokploy/server/constants";
import { validateRequest } from "@dokploy/server/lib/auth";
import { createServerSideHelpers } from "@trpc/react-query/server";
@@ -39,7 +38,6 @@ export async function getServerSideProps(
};
}
const { req, res } = ctx;
const locale = getLocale(req.cookies);
const helpers = createServerSideHelpers({
router: appRouter,
@@ -72,14 +70,11 @@ export async function getServerSideProps(
return {
props: {
trpcState: helpers.dehydrate(),
...(await serverSideTranslations(locale)),
},
};
} catch (_error) {
return {
props: {
...(await serverSideTranslations(locale)),
},
props: {},
};
}
}

View File

@@ -26,13 +26,11 @@ import {
} from "@/components/ui/input-otp";
import { Label } from "@/components/ui/label";
import { authClient } from "@/lib/auth-client";
import { getLocale, serverSideTranslations } from "@/utils/i18n";
import { IS_CLOUD, isAdminPresent } from "@dokploy/server";
import { validateRequest } from "@dokploy/server/lib/auth";
import { zodResolver } from "@hookform/resolvers/zod";
import { REGEXP_ONLY_DIGITS } from "input-otp";
import type { GetServerSidePropsContext } from "next";
import { useTranslation } from "next-i18next";
import Link from "next/link";
import { useRouter } from "next/router";
import { type ReactElement, useState } from "react";
@@ -56,8 +54,6 @@ interface Props {
}
export default function Home({ IS_CLOUD }: Props) {
const router = useRouter();
const { t } = useTranslation();
const [isLoginLoading, setIsLoginLoading] = useState(false);
const [isTwoFactorLoading, setIsTwoFactorLoading] = useState(false);
const [isBackupCodeLoading, setIsBackupCodeLoading] = useState(false);
@@ -110,7 +106,7 @@ export default function Home({ IS_CLOUD }: Props) {
const onTwoFactorSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (twoFactorCode.length !== 6) {
toast.error(t("auth.invalidTwoFactorCode"));
toast.error("Please enter a valid 6-digit code");
return;
}
@@ -122,14 +118,14 @@ export default function Home({ IS_CLOUD }: Props) {
if (error) {
toast.error(error.message);
setError(error.message || t("auth.twoFactorVerificationError"));
setError(error.message || "An error occurred while verifying 2FA code");
return;
}
toast.success("Logged in successfully");
router.push("/dashboard/projects");
} catch (_error) {
toast.error(t("auth.twoFactorVerificationError"));
toast.error("An error occurred while verifying 2FA code");
} finally {
setIsTwoFactorLoading(false);
}
@@ -138,7 +134,7 @@ export default function Home({ IS_CLOUD }: Props) {
const onBackupCodeSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (backupCode.length < 8) {
toast.error(t("auth.invalidBackupCode"));
toast.error("Please enter a valid backup code");
return;
}
@@ -150,14 +146,16 @@ export default function Home({ IS_CLOUD }: Props) {
if (error) {
toast.error(error.message);
setError(error.message || t("auth.backupCodeVerificationError"));
setError(
error.message || "An error occurred while verifying backup code",
);
return;
}
toast.success("Logged in successfully");
router.push("/dashboard/projects");
} catch (_error) {
toast.error(t("auth.backupCodeVerificationError"));
toast.error("An error occurred while verifying backup code");
} finally {
setIsBackupCodeLoading(false);
}
@@ -175,9 +173,8 @@ export default function Home({ IS_CLOUD }: Props) {
return;
}
} catch (error) {
toast.error(t("auth.githubSignInError"), {
description:
error instanceof Error ? error.message : t("auth.unknownError"),
toast.error("An error occurred while signing in with GitHub", {
description: error instanceof Error ? error.message : "Unknown error",
});
} finally {
setIsGithubLoading(false);
@@ -196,9 +193,8 @@ export default function Home({ IS_CLOUD }: Props) {
return;
}
} catch (error) {
toast.error(t("auth.googleSignInError"), {
description:
error instanceof Error ? error.message : t("auth.unknownError"),
toast.error("An error occurred while signing in with Google", {
description: error instanceof Error ? error.message : "Unknown error",
});
} finally {
setIsGoogleLoading(false);
@@ -210,11 +206,11 @@ export default function Home({ IS_CLOUD }: Props) {
<h1 className="text-2xl font-semibold tracking-tight">
<div className="flex flex-row items-center justify-center gap-2">
<Logo className="size-12" />
{t("auth.signIn")}
Sign in
</div>
</h1>
<p className="text-sm text-muted-foreground">
{t("auth.signInDescription")}
Enter your email and password to sign in
</p>
</div>
{error && (
@@ -239,7 +235,7 @@ export default function Home({ IS_CLOUD }: Props) {
d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z"
/>
</svg>
{t("auth.signInWithGithub")}
Sign in with GitHub
</Button>
)}
{IS_CLOUD && (
@@ -268,7 +264,7 @@ export default function Home({ IS_CLOUD }: Props) {
d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
/>
</svg>
{t("auth.signInWithGoogle")}
Sign in with Google
</Button>
)}
<Form {...loginForm}>
@@ -282,7 +278,7 @@ export default function Home({ IS_CLOUD }: Props) {
name="email"
render={({ field }) => (
<FormItem>
<FormLabel>{t("auth.email")}</FormLabel>
<FormLabel>Email</FormLabel>
<FormControl>
<Input placeholder="john@example.com" {...field} />
</FormControl>
@@ -295,11 +291,11 @@ export default function Home({ IS_CLOUD }: Props) {
name="password"
render={({ field }) => (
<FormItem>
<FormLabel>{t("auth.password")}</FormLabel>
<FormLabel>Password</FormLabel>
<FormControl>
<Input
type="password"
placeholder={t("auth.password.placeholder")}
placeholder="Enter your password"
{...field}
/>
</FormControl>
@@ -312,7 +308,7 @@ export default function Home({ IS_CLOUD }: Props) {
type="submit"
isLoading={isLoginLoading}
>
{t("auth.login")}
Login
</Button>
</form>
</Form>
@@ -326,7 +322,7 @@ export default function Home({ IS_CLOUD }: Props) {
autoComplete="off"
>
<div className="flex flex-col gap-2">
<Label>{t("auth.twoFactorCode")}</Label>
<Label>2FA Code</Label>
<InputOTP
value={twoFactorCode}
onChange={setTwoFactorCode}
@@ -344,14 +340,14 @@ export default function Home({ IS_CLOUD }: Props) {
</InputOTPGroup>
</InputOTP>
<CardDescription>
{t("auth.twoFactorCodeDescription")}
Enter the 6-digit code from your authenticator app
</CardDescription>
<button
type="button"
onClick={() => setIsBackupCodeModalOpen(true)}
className="text-sm text-muted-foreground hover:underline self-start mt-2"
>
{t("auth.lostAuthenticator")}
Lost access to your authenticator app?
</button>
</div>
@@ -365,14 +361,14 @@ export default function Home({ IS_CLOUD }: Props) {
setTwoFactorCode("");
}}
>
{t("auth.back")}
Back
</Button>
<Button
className="w-full"
type="submit"
isLoading={isTwoFactorLoading}
>
{t("auth.verify")}
Verify
</Button>
</div>
</form>
@@ -383,23 +379,24 @@ export default function Home({ IS_CLOUD }: Props) {
>
<DialogContent>
<DialogHeader>
<DialogTitle>{t("auth.enterBackupCode")}</DialogTitle>
<DialogTitle>Enter Backup Code</DialogTitle>
<DialogDescription>
{t("auth.enterBackupCodeDescription")}
Enter one of your backup codes to access your account
</DialogDescription>
</DialogHeader>
<form onSubmit={onBackupCodeSubmit} className="space-y-4">
<div className="flex flex-col gap-2">
<Label>{t("auth.backupCode")}</Label>
<Label>Backup Code</Label>
<Input
value={backupCode}
onChange={(e) => setBackupCode(e.target.value)}
placeholder={t("auth.backupCode.placeholder")}
placeholder="Enter your backup code"
className="font-mono"
/>
<CardDescription>
{t("auth.backupCodeDescription")}
Enter one of the backup codes you received when setting up
2FA
</CardDescription>
</div>
@@ -413,14 +410,14 @@ export default function Home({ IS_CLOUD }: Props) {
setBackupCode("");
}}
>
{t("auth.cancel")}
Cancel
</Button>
<Button
className="w-full"
type="submit"
isLoading={isBackupCodeLoading}
>
{t("auth.verify")}
Verify
</Button>
</div>
</form>
@@ -436,7 +433,7 @@ export default function Home({ IS_CLOUD }: Props) {
className="hover:underline text-muted-foreground"
href="/register"
>
{t("auth.createAccount")}
Create an account
</Link>
)}
</div>
@@ -447,7 +444,7 @@ export default function Home({ IS_CLOUD }: Props) {
className="hover:underline text-muted-foreground"
href="/send-reset-password"
>
{t("auth.forgetPassword")}
Lost your password?
</Link>
) : (
<Link
@@ -455,7 +452,7 @@ export default function Home({ IS_CLOUD }: Props) {
href="https://docs.dokploy.com/docs/core/reset-password"
target="_blank"
>
{t("auth.forgetPassword")}
Lost your password?
</Link>
)}
</div>
@@ -470,9 +467,6 @@ Home.getLayout = (page: ReactElement) => {
return <OnboardingLayout>{page}</OnboardingLayout>;
};
export async function getServerSideProps(context: GetServerSidePropsContext) {
const { req } = context;
const locale = getLocale(req.cookies);
if (IS_CLOUD) {
try {
const { user } = await validateRequest(context.req);
@@ -517,7 +511,6 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
return {
props: {
hasAdmin,
...(await serverSideTranslations(locale)),
},
};
}

View File

@@ -1,54 +1 @@
{
"settings.common.save": "Yadda saxla",
"settings.common.enterTerminal": "Terminala daxil ol",
"settings.server.domain.title": "Server Domeni",
"settings.server.domain.description": "Server tətbiqinizə domen əlavə edin.",
"settings.server.domain.form.domain": "Domen",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt E-poçtu",
"settings.server.domain.form.certificate.label": "Sertifikat Təminatçısı",
"settings.server.domain.form.certificate.placeholder": "Sertifikat seçin",
"settings.server.domain.form.certificateOptions.none": "Heç biri",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Veb Server",
"settings.server.webServer.description": "Veb serveri yenidən yüklə və ya təmizlə.",
"settings.server.webServer.actions": "Əməliyyatlar",
"settings.server.webServer.reload": "Yenidən yüklə",
"settings.server.webServer.watchLogs": "Logları izlə",
"settings.server.webServer.updateServerIp": "Server IP-ni Yenilə",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Mühiti Dəyişdir",
"settings.server.webServer.traefik.managePorts": "Əlavə Port Təyinatları",
"settings.server.webServer.traefik.managePortsDescription": "Traefik üçün əlavə portlar əlavə edin və ya silin",
"settings.server.webServer.traefik.targetPort": "Hədəf Port",
"settings.server.webServer.traefik.publishedPort": "Dərc Edilmiş Port",
"settings.server.webServer.traefik.addPort": "Port Əlavə Et",
"settings.server.webServer.traefik.portsUpdated": "Portlar uğurla yeniləndi",
"settings.server.webServer.traefik.portsUpdateError": "Portların yenilənməsi uğursuz oldu",
"settings.server.webServer.traefik.publishMode": "Dərc Rejimi",
"settings.server.webServer.storage.label": "Yer",
"settings.server.webServer.storage.cleanUnusedImages": "İstifadə edilməyən şəkilləri təmizlə",
"settings.server.webServer.storage.cleanUnusedVolumes": "İstifadə edilməyən həcmləri təmizlə",
"settings.server.webServer.storage.cleanStoppedContainers": "Dayandırılmış konteynerləri təmizlə",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker Builder və Sistemi təmizlə",
"settings.server.webServer.storage.cleanMonitoring": "Monitorinqi təmizlə",
"settings.server.webServer.storage.cleanAll": "Hamısını təmizlə",
"settings.profile.title": "Hesab",
"settings.profile.description": "Profilinizin məlumatlarını buradan dəyişin.",
"settings.profile.email": "E-poçt",
"settings.profile.password": "Şifrə",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Görünüş",
"settings.appearance.description": "İdarəetmə panelinizin görünüşünü fərdiləşdirin.",
"settings.appearance.theme": "Mövzu",
"settings.appearance.themeDescription": "İdarəetmə paneliniz üçün mövzu seçin",
"settings.appearance.themes.light": "İşıqlı",
"settings.appearance.themes.dark": "Qaranlıq",
"settings.appearance.themes.system": "Sistem",
"settings.appearance.language": "Dil",
"settings.appearance.languageDescription": "İdarəetmə paneliniz üçün dil seçin",
"settings.terminal.connectionSettings": "Bağlantı parametrləri",
"settings.terminal.ipAddress": "IP Ünvanı",
"settings.terminal.port": "Port",
"settings.terminal.username": "İstifadəçi adı"
}
{}

View File

@@ -0,0 +1,58 @@
{
"settings.common.save": "Yadda saxla",
"settings.common.enterTerminal": "Terminala daxil ol",
"settings.server.domain.title": "Server Domeni",
"settings.server.domain.description": "Server tətbiqinizə domen əlavə edin.",
"settings.server.domain.form.domain": "Domen",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt E-poçtu",
"settings.server.domain.form.certificate.label": "Sertifikat Təminatçısı",
"settings.server.domain.form.certificate.placeholder": "Sertifikat seçin",
"settings.server.domain.form.certificateOptions.none": "Heç biri",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Veb Server",
"settings.server.webServer.description": "Veb serveri yenidən yüklə və ya təmizlə.",
"settings.server.webServer.actions": "Əməliyyatlar",
"settings.server.webServer.reload": "Yenidən yüklə",
"settings.server.webServer.watchLogs": "Logları izlə",
"settings.server.webServer.updateServerIp": "Server IP-ni Yenilə",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Mühiti Dəyişdir",
"settings.server.webServer.traefik.managePorts": "Əlavə Port Təyinatları",
"settings.server.webServer.traefik.managePortsDescription": "Traefik üçün əlavə portlar əlavə edin və ya silin",
"settings.server.webServer.traefik.targetPort": "Hədəf Port",
"settings.server.webServer.traefik.publishedPort": "Dərc Edilmiş Port",
"settings.server.webServer.traefik.addPort": "Port Əlavə Et",
"settings.server.webServer.traefik.portsUpdated": "Portlar uğurla yeniləndi",
"settings.server.webServer.traefik.portsUpdateError": "Portların yenilənməsi uğursuz oldu",
"settings.server.webServer.traefik.publishMode": "Dərc Rejimi",
"settings.server.webServer.storage.label": "Yer",
"settings.server.webServer.storage.cleanUnusedImages": "İstifadə edilməyən şəkilləri təmizlə",
"settings.server.webServer.storage.cleanUnusedVolumes": "İstifadə edilməyən həcmləri təmizlə",
"settings.server.webServer.storage.cleanStoppedContainers": "Dayandırılmış konteynerləri təmizlə",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker Builder və Sistemi təmizlə",
"settings.server.webServer.storage.cleanMonitoring": "Monitorinqi təmizlə",
"settings.server.webServer.storage.cleanAll": "Hamısını təmizlə",
"settings.profile.title": "Hesab",
"settings.profile.description": "Profilinizin məlumatlarını buradan dəyişin.",
"settings.profile.email": "E-poçt",
"settings.profile.password": "Şifrə",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Görünüş",
"settings.appearance.description": "İdarəetmə panelinizin görünüşünü fərdiləşdirin.",
"settings.appearance.theme": "Mövzu",
"settings.appearance.themeDescription": "İdarəetmə paneliniz üçün mövzu seçin",
"settings.appearance.themes.light": "İşıqlı",
"settings.appearance.themes.dark": "Qaranlıq",
"settings.appearance.themes.system": "Sistem",
"settings.appearance.language": "Dil",
"settings.appearance.languageDescription": "İdarəetmə paneliniz üçün dil seçin",
"settings.terminal.connectionSettings": "Bağlantı parametrləri",
"settings.terminal.ipAddress": "IP Ünvanı",
"settings.terminal.port": "Port",
"settings.terminal.username": "İstifadəçi adı"
}

View File

@@ -1,41 +1 @@
{
"settings.common.save": "Speichern",
"settings.server.domain.title": "Server-Domain",
"settings.server.domain.description": "Füg eine Domain zu deiner Server-Anwendung hinzu.",
"settings.server.domain.form.domain": "Domain",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt E-Mail",
"settings.server.domain.form.certificate.label": "Zertifikat",
"settings.server.domain.form.certificate.placeholder": "Wähl ein Zertifikat aus",
"settings.server.domain.form.certificateOptions.none": "Keins",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Standard)",
"settings.server.webServer.title": "Web-Server",
"settings.server.webServer.description": "Lade den Web-Server neu oder reinige ihn.",
"settings.server.webServer.actions": "Aktionen",
"settings.server.webServer.reload": "Neu laden",
"settings.server.webServer.watchLogs": "Logs anschauen",
"settings.server.webServer.updateServerIp": "Server-IP Aktualisieren",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Umgebungsvariablen ändern",
"settings.server.webServer.storage.label": "Speicherplatz",
"settings.server.webServer.storage.cleanUnusedImages": "Nicht genutzte Bilder löschen",
"settings.server.webServer.storage.cleanUnusedVolumes": "Nicht genutzte Volumes löschen",
"settings.server.webServer.storage.cleanStoppedContainers": "Gestoppte Container löschen",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker Builder & System bereinigen",
"settings.server.webServer.storage.cleanMonitoring": "Monitoring bereinigen",
"settings.server.webServer.storage.cleanAll": "Alles bereinigen",
"settings.profile.title": "Konto",
"settings.profile.description": "Ändere die Details deines Profiles hier.",
"settings.profile.email": "E-Mail",
"settings.profile.password": "Passwort",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Aussehen",
"settings.appearance.description": "Pass das Design deines Dashboards an.",
"settings.appearance.theme": "Theme",
"settings.appearance.themeDescription": "Wähl ein Theme für dein Dashboard aus",
"settings.appearance.themes.light": "Hell",
"settings.appearance.themes.dark": "Dunkel",
"settings.appearance.themes.system": "System",
"settings.appearance.language": "Sprache",
"settings.appearance.languageDescription": "Wähl eine Sprache für dein Dashboard aus"
}
{}

View File

@@ -0,0 +1,44 @@
{
"settings.common.save": "Speichern",
"settings.server.domain.title": "Server-Domain",
"settings.server.domain.description": "Füg eine Domain zu deiner Server-Anwendung hinzu.",
"settings.server.domain.form.domain": "Domain",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt E-Mail",
"settings.server.domain.form.certificate.label": "Zertifikat",
"settings.server.domain.form.certificate.placeholder": "Wähl ein Zertifikat aus",
"settings.server.domain.form.certificateOptions.none": "Keins",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Standard)",
"settings.server.webServer.title": "Web-Server",
"settings.server.webServer.description": "Lade den Web-Server neu oder reinige ihn.",
"settings.server.webServer.actions": "Aktionen",
"settings.server.webServer.reload": "Neu laden",
"settings.server.webServer.watchLogs": "Logs anschauen",
"settings.server.webServer.updateServerIp": "Server-IP Aktualisieren",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Umgebungsvariablen ändern",
"settings.server.webServer.storage.label": "Speicherplatz",
"settings.server.webServer.storage.cleanUnusedImages": "Nicht genutzte Bilder löschen",
"settings.server.webServer.storage.cleanUnusedVolumes": "Nicht genutzte Volumes löschen",
"settings.server.webServer.storage.cleanStoppedContainers": "Gestoppte Container löschen",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker Builder & System bereinigen",
"settings.server.webServer.storage.cleanMonitoring": "Monitoring bereinigen",
"settings.server.webServer.storage.cleanAll": "Alles bereinigen",
"settings.profile.title": "Konto",
"settings.profile.description": "Ändere die Details deines Profiles hier.",
"settings.profile.email": "E-Mail",
"settings.profile.password": "Passwort",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Aussehen",
"settings.appearance.description": "Pass das Design deines Dashboards an.",
"settings.appearance.theme": "Theme",
"settings.appearance.themeDescription": "Wähl ein Theme für dein Dashboard aus",
"settings.appearance.themes.light": "Hell",
"settings.appearance.themes.dark": "Dunkel",
"settings.appearance.themes.system": "System",
"settings.appearance.language": "Sprache",
"settings.appearance.languageDescription": "Wähl eine Sprache für dein Dashboard aus"
}

View File

@@ -1,231 +1 @@
{
"auth.signIn": "Sign In",
"auth.signInDescription": "Enter your email and password to sign in",
"auth.signInWithGoogle": "Sign in with Google",
"auth.signInWithGithub": "Sign in with GitHub",
"auth.email": "Email",
"auth.password": "Password",
"auth.password.placeholder": "Enter your password",
"auth.login": "Login",
"auth.forgetPassword": "Lost your password?",
"auth.createAccount": "Create an account",
"auth.twoFactorCode": "2FA Code",
"auth.twoFactorCodeDescription": "Enter the 6-digit code from your authenticator app",
"auth.lostAuthenticator": "Lost access to your authenticator app?",
"auth.back": "Back",
"auth.verify": "Verify",
"auth.enterBackupCode": "Enter Backup Code",
"auth.enterBackupCodeDescription": "Enter one of your backup codes to access your account",
"auth.backupCode": "Backup Code",
"auth.backupCode.placeholder": "Enter your backup code",
"auth.backupCodeDescription": "Enter one of the backup codes you received when setting up 2FA",
"auth.cancel": "Cancel",
"auth.invalidTwoFactorCode": "Please enter a valid 6-digit code",
"auth.twoFactorVerificationError": "An error occurred while verifying 2FA code",
"auth.invalidBackupCode": "Please enter a valid backup code",
"auth.backupCodeVerificationError": "An error occurred while verifying backup code",
"auth.githubSignInError": "An error occurred while signing in with GitHub",
"auth.googleSignInError": "An error occurred while signing in with Google",
"auth.unknownError": "Unknown error",
"common.side.home": "Home",
"common.side.settings": "Settings",
"common.side.extra": "Extra",
"common.side.projects": "Projects",
"common.side.monitoring": "Monitoring",
"common.side.traefik": "Traefik File System",
"common.side.docker": "Docker",
"common.side.swarm": "Swarm",
"common.side.requests": "Requests",
"common.side.web-server": "Web Server",
"common.side.profile": "Profile",
"common.side.remote-servers": "Remote Servers",
"common.side.users": "Users",
"common.side.ssh-keys": "SSH Keys",
"common.side.ai": "AI",
"common.side.git": "Git",
"common.side.registry": "Registry",
"common.side.s3-destinations": "S3 Destinations",
"common.side.certificates": "Certificates",
"common.side.cluster": "Cluster",
"common.side.notifications": "Notifications",
"common.side.billing": "Billing",
"common.side.documentation": "Documentation",
"common.side.support": "Support",
"common.side.sponsor": "Sponsor",
"common.side.invitations.pending-invitations": "Pending Invitations",
"common.side.invitations.no-pending-invitations": "No pending invitations",
"common.side.invitations.accept-invitation": "Accept Invitation",
"common.side.invitations.confirm-accept-invitation": "Are you sure you want to accept this invitation?",
"common.side.invitations.error-accepting-invitation": "Error accepting invitation",
"common.side.invitations.invitation-accepted": "Invitation accepted successfully",
"common.side.invitations.expires": "Expires: {{expireDate}}",
"common.side.invitations.role": "Role: {{role}}",
"common.side.organizations": "Organizations",
"common.side.organizations.select-organization": "Select Organization",
"common.side.organizations.delete-organization": "Delete Organization",
"common.side.organizations.confirm-delete-organization": "Are you sure you want to delete this organization?",
"common.side.organizations.organization-deleted": "Organization deleted successfully",
"common.side.organizations.error-deleting-organization": "Error deleting organization",
"common.side.organizations.createOrganization": "Create organization",
"common.side.organizations.updateOrganization": "Update organization",
"common.side.organizations.createOrganizationDescription": "Create a new organization to manage your projects.",
"common.side.organizations.updateOrganizationDescription": "Update the organization name and logo",
"common.side.organizations.name": "Name",
"common.side.organizations.name.placeholder": "Organization name",
"common.side.organizations.logoURL": "Logo URL",
"common.side.organizations.createSuccess": "Organization created successfully",
"common.side.organizations.updateSuccess": "Organization updated successfully",
"common.side.organizations.createFailed": "Failed to create organization",
"common.side.organizations.updateFailed": "Failed to update organization",
"common.account": "Account",
"common.account.mine": "My Account",
"common.account.logout": "Logout",
"common.account.selectLanguage": "Select Language",
"home.projects.title": "Projects",
"home.projects.description": "Create and manage your projects",
"settings.common.save": "Save",
"settings.common.enterTerminal": "Terminal",
"settings.server.domain.title": "Server Domain",
"settings.server.domain.description": "Add a domain to your server application.",
"settings.server.domain.form.domain": "Domain",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt Email",
"settings.server.domain.form.certificate.label": "Certificate Provider",
"settings.server.domain.form.certificate.placeholder": "Select a certificate",
"settings.server.domain.form.certificateOptions.none": "None",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Web Server",
"settings.server.webServer.description": "Reload or clean the web server.",
"settings.server.webServer.actions": "Actions",
"settings.server.webServer.reload": "Reload",
"settings.server.webServer.watchLogs": "View Logs",
"settings.server.webServer.updateServerIp": "Update Server IP",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Modify Environment",
"settings.server.webServer.traefik.managePorts": "Additional Port Mappings",
"settings.server.webServer.traefik.managePortsDescription": "Add or remove additional ports for Traefik",
"settings.server.webServer.traefik.targetPort": "Target Port",
"settings.server.webServer.traefik.publishedPort": "Published Port",
"settings.server.webServer.traefik.addPort": "Add Port",
"settings.server.webServer.traefik.portsUpdated": "Ports updated successfully",
"settings.server.webServer.traefik.portsUpdateError": "Failed to update ports",
"settings.server.webServer.traefik.publishMode": "Publish Mode",
"settings.server.webServer.storage.label": "Space",
"settings.server.webServer.storage.cleanUnusedImages": "Clean unused images",
"settings.server.webServer.storage.cleanUnusedVolumes": "Clean unused volumes",
"settings.server.webServer.storage.cleanStoppedContainers": "Clean stopped containers",
"settings.server.webServer.storage.cleanDockerBuilder": "Clean Docker Builder & System",
"settings.server.webServer.storage.cleanMonitoring": "Clean Monitoring",
"settings.server.webServer.storage.cleanAll": "Clean all",
"settings.profile.title": "Account",
"settings.profile.description": "Change the details of your profile here.",
"settings.profile.email": "Email",
"settings.profile.oldPassword": "Current Password",
"settings.profile.newPassword": "New Password",
"settings.profile.password": "Password",
"settings.profile.avatar": "Avatar",
"settings.2fa.enable2fa": "Enable 2FA",
"settings.2fa.title": "2FA Setup",
"settings.2fa.enterPassword": "Enter your password to begin 2FA setup",
"settings.2fa.scanQrCodeAndVerify": "Scan the QR code and verify with your authenticator app",
"settings.2fa.password": "Password",
"settings.2fa.enterPasswordPlaceholder": "Enter your password",
"settings.2fa.enterPasswordDescription": "Enter your password to enable 2FA",
"settings.2fa.continue": "Continue",
"settings.2fa.scanQrCode": "Scan this QR code with your authenticator app",
"settings.2fa.qrCodeAlt": "2FA QR Code",
"settings.2fa.cantScanQrCode": "Can't scan the QR code?",
"settings.2fa.backupCodes": "Backup Codes",
"settings.2fa.saveBackupCodes": "Save these backup codes in a secure place. You can use them to access your account if you lose access to your authenticator device.",
"settings.2fa.verificationCode": "Verification Code",
"settings.2fa.enterVerificationCode": "Enter the 6-digit code from your authenticator app",
"settings.2fa.errorSettingUp": "Error setting up 2FA",
"settings.2fa.errorVerifyingPassword": "Error verifying password",
"settings.2fa.invalidCode": "Invalid code. Please try again.",
"settings.2fa.invalidVerificationCode": "Invalid verification code",
"settings.2fa.success": "2FA configured successfully",
"settings.2fa.connectionError": "Connection error. Please check your internet connection.",
"settings.2fa.errorVerifyingCode": "Error verifying code",
"settings.2fa.errorVerifying2faCode": "Error verifying 2FA code",
"settings.appearance.title": "Appearance",
"settings.appearance.description": "Customize the theme of your dashboard.",
"settings.appearance.theme": "Theme",
"settings.appearance.themeDescription": "Select a theme for your dashboard",
"settings.appearance.themes.light": "Light",
"settings.appearance.themes.dark": "Dark",
"settings.appearance.themes.system": "System",
"settings.appearance.language": "Language",
"settings.appearance.languageDescription": "Select a language for your dashboard",
"settings.terminal.connectionSettings": "Connection settings",
"settings.terminal.ipAddress": "IP Address",
"settings.terminal.port": "Port",
"settings.terminal.username": "Username",
"settings.api.apiCliKeys": "API/CLI Keys",
"settings.api.generateAndManageKeys": "Generate and manage API keys to access the API/CLI",
"settings.api.swaggerApi": "Swagger API:",
"settings.api.view": "View",
"settings.api.created": "Created",
"settings.api.ago": "ago",
"settings.api.expiresIn": "Expires in",
"settings.api.deleteApiKey": "Delete API Key",
"settings.api.deleteApiKeyDescription": "Are you sure you want to delete this API key? This action cannot be undone.",
"settings.api.apiKeyDeleted": "API key deleted successfully",
"settings.api.errorDeletingApiKey": "Error deleting API key",
"settings.api.noApiKeysFound": "No API keys found",
"settings.api.errorGeneratingApiKey": "Failed to generate API key",
"settings.api.generateNewKey": "Generate New Key",
"settings.api.generateApiKey": "Generate API Key",
"settings.api.createNewApiKeyDescription": "Create a new API key for accessing the API. You can set an expiration date and a custom prefix for better organization.",
"settings.api.name": "Name",
"settings.api.namePlaceholder": "My API Key",
"settings.api.prefix": "Prefix",
"settings.api.prefixPlaceholder": "my_app",
"settings.api.expiration": "Expiration",
"settings.api.selectExpirationTime": "Select expiration time",
"settings.api.expirationOptions.Never": "Never",
"settings.api.expirationOptions.1 day": "1 day",
"settings.api.expirationOptions.7 days": "7 days",
"settings.api.expirationOptions.30 days": "30 days",
"settings.api.expirationOptions.90 days": "90 days",
"settings.api.expirationOptions.1 year": "1 year",
"settings.api.organization": "Organization",
"settings.api.selectOrganization": "Select organization",
"settings.api.rateLimiting": "Rate Limiting",
"settings.api.enableRateLimiting": "Enable Rate Limiting",
"settings.api.limitRequestsDescription": "Limit the number of requests within a time window",
"settings.api.timeWindow": "Time Window",
"settings.api.selectTimeWindow": "Select time window",
"settings.api.timeWindowOptions.1 minute": "1 minute",
"settings.api.timeWindowOptions.5 minutes": "5 minutes",
"settings.api.timeWindowOptions.15 minutes": "15 minutes",
"settings.api.timeWindowOptions.30 minutes": "30 minutes",
"settings.api.timeWindowOptions.1 hour": "1 hour",
"settings.api.timeWindowOptions.1 day": "1 day",
"settings.api.timeWindowDescription": "The duration in which requests are counted",
"settings.api.maxRequests": "Maximum Requests",
"settings.api.maxRequestsPlaceholder": "100",
"settings.api.maxRequestsDescription": "Maximum number of requests allowed within the time window",
"settings.api.requestLimiting": "Request Limiting",
"settings.api.totalRequestLimit": "Total Request Limit",
"settings.api.totalRequestLimitPlaceholder": "Leave empty for unlimited",
"settings.api.totalRequestLimitDescription": "Total number of requests allowed (leave empty for unlimited)",
"settings.api.refillAmount": "Refill Amount",
"settings.api.refillAmountPlaceholder": "Amount to refill",
"settings.api.refillAmountDescription": "Number of requests to add on each refill",
"settings.api.refillInterval": "Refill Interval",
"settings.api.selectRefillInterval": "Select refill interval",
"settings.api.refillIntervalOptions.1 hour": "1 hour",
"settings.api.refillIntervalOptions.6 hours": "6 hours",
"settings.api.refillIntervalOptions.12 hours": "12 hours",
"settings.api.refillIntervalOptions.1 day": "1 day",
"settings.api.refillIntervalOptions.7 days": "7 days",
"settings.api.refillIntervalOptions.30 days": "30 days",
"settings.api.refillIntervalDescription": "How often to refill the request limit",
"settings.api.cancel": "Cancel",
"settings.api.generate": "Generate",
"settings.api.apiKeyGeneratedSuccessfully": "API Key Generated Successfully",
"settings.api.copyApiKeyNow": "Please copy your API key now. You won't be able to see it again!",
"settings.api.apiKeyCopied": "API key copied to clipboard",
"settings.api.copyToClipboard": "Copy to Clipboard",
"settings.api.close": "Close"
}
{}

View File

@@ -0,0 +1,58 @@
{
"settings.common.save": "Save",
"settings.common.enterTerminal": "Terminal",
"settings.server.domain.title": "Server Domain",
"settings.server.domain.description": "Add a domain to your server application.",
"settings.server.domain.form.domain": "Domain",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt Email",
"settings.server.domain.form.certificate.label": "Certificate Provider",
"settings.server.domain.form.certificate.placeholder": "Select a certificate",
"settings.server.domain.form.certificateOptions.none": "None",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Web Server",
"settings.server.webServer.description": "Reload or clean the web server.",
"settings.server.webServer.actions": "Actions",
"settings.server.webServer.reload": "Reload",
"settings.server.webServer.watchLogs": "View Logs",
"settings.server.webServer.updateServerIp": "Update Server IP",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Modify Environment",
"settings.server.webServer.traefik.managePorts": "Additional Port Mappings",
"settings.server.webServer.traefik.managePortsDescription": "Add or remove additional ports for Traefik",
"settings.server.webServer.traefik.targetPort": "Target Port",
"settings.server.webServer.traefik.publishedPort": "Published Port",
"settings.server.webServer.traefik.addPort": "Add Port",
"settings.server.webServer.traefik.portsUpdated": "Ports updated successfully",
"settings.server.webServer.traefik.portsUpdateError": "Failed to update ports",
"settings.server.webServer.traefik.publishMode": "Publish Mode",
"settings.server.webServer.storage.label": "Space",
"settings.server.webServer.storage.cleanUnusedImages": "Clean unused images",
"settings.server.webServer.storage.cleanUnusedVolumes": "Clean unused volumes",
"settings.server.webServer.storage.cleanStoppedContainers": "Clean stopped containers",
"settings.server.webServer.storage.cleanDockerBuilder": "Clean Docker Builder & System",
"settings.server.webServer.storage.cleanMonitoring": "Clean Monitoring",
"settings.server.webServer.storage.cleanAll": "Clean all",
"settings.profile.title": "Account",
"settings.profile.description": "Change the details of your profile here.",
"settings.profile.email": "Email",
"settings.profile.password": "Password",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Appearance",
"settings.appearance.description": "Customize the theme of your dashboard.",
"settings.appearance.theme": "Theme",
"settings.appearance.themeDescription": "Select a theme for your dashboard",
"settings.appearance.themes.light": "Light",
"settings.appearance.themes.dark": "Dark",
"settings.appearance.themes.system": "System",
"settings.appearance.language": "Language",
"settings.appearance.languageDescription": "Select a language for your dashboard",
"settings.terminal.connectionSettings": "Connection settings",
"settings.terminal.ipAddress": "IP Address",
"settings.terminal.port": "Port",
"settings.terminal.username": "Username"
}

View File

@@ -1,49 +1 @@
{
"settings.common.save": "Guardar",
"settings.server.domain.title": "Dominio del Servidor",
"settings.server.domain.description": "Añade un dominio a tu aplicación de servidor.",
"settings.server.domain.form.domain": "Dominio",
"settings.server.domain.form.letsEncryptEmail": "Correo de Let's Encrypt",
"settings.server.domain.form.certificate.label": "Proveedor de Certificado",
"settings.server.domain.form.certificate.placeholder": "Selecciona un certificado",
"settings.server.domain.form.certificateOptions.none": "Ninguno",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Servidor Web",
"settings.server.webServer.description": "Recarga o limpia el servidor web.",
"settings.server.webServer.actions": "Acciones",
"settings.server.webServer.reload": "Recargar",
"settings.server.webServer.watchLogs": "Ver registros",
"settings.server.webServer.updateServerIp": "Actualizar IP del Servidor",
"settings.server.webServer.server.label": "Servidor",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Modificar Entorno",
"settings.server.webServer.traefik.managePorts": "Asignación Adicional de Puertos",
"settings.server.webServer.traefik.managePortsDescription": "Añadir o eliminar puertos adicionales para Traefik",
"settings.server.webServer.traefik.targetPort": "Puerto de Destino",
"settings.server.webServer.traefik.publishedPort": "Puerto Publicado",
"settings.server.webServer.traefik.addPort": "Añadir Puerto",
"settings.server.webServer.traefik.portsUpdated": "Puertos actualizados correctamente",
"settings.server.webServer.traefik.portsUpdateError": "Error al actualizar los puertos",
"settings.server.webServer.traefik.publishMode": "Modo de Publicación",
"settings.server.webServer.storage.label": "Espacio",
"settings.server.webServer.storage.cleanUnusedImages": "Limpiar imágenes no utilizadas",
"settings.server.webServer.storage.cleanUnusedVolumes": "Limpiar volúmenes no utilizados",
"settings.server.webServer.storage.cleanStoppedContainers": "Limpiar contenedores detenidos",
"settings.server.webServer.storage.cleanDockerBuilder": "Limpiar Constructor de Docker y Sistema",
"settings.server.webServer.storage.cleanMonitoring": "Limpiar Monitoreo",
"settings.server.webServer.storage.cleanAll": "Limpiar todo",
"settings.profile.title": "Cuenta",
"settings.profile.description": "Cambia los detalles de tu perfil aquí.",
"settings.profile.email": "Correo electrónico",
"settings.profile.password": "Contraseña",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Apariencia",
"settings.appearance.description": "Personaliza el tema de tu panel.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Selecciona un tema para tu panel",
"settings.appearance.themes.light": "Claro",
"settings.appearance.themes.dark": "Oscuro",
"settings.appearance.themes.system": "Sistema",
"settings.appearance.language": "Idioma",
"settings.appearance.languageDescription": "Selecciona un idioma para tu panel"
}
{}

View File

@@ -0,0 +1,52 @@
{
"settings.common.save": "Guardar",
"settings.server.domain.title": "Dominio del Servidor",
"settings.server.domain.description": "Añade un dominio a tu aplicación de servidor.",
"settings.server.domain.form.domain": "Dominio",
"settings.server.domain.form.letsEncryptEmail": "Correo de Let's Encrypt",
"settings.server.domain.form.certificate.label": "Proveedor de Certificado",
"settings.server.domain.form.certificate.placeholder": "Selecciona un certificado",
"settings.server.domain.form.certificateOptions.none": "Ninguno",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Servidor Web",
"settings.server.webServer.description": "Recarga o limpia el servidor web.",
"settings.server.webServer.actions": "Acciones",
"settings.server.webServer.reload": "Recargar",
"settings.server.webServer.watchLogs": "Ver registros",
"settings.server.webServer.updateServerIp": "Actualizar IP del Servidor",
"settings.server.webServer.server.label": "Servidor",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Modificar Entorno",
"settings.server.webServer.traefik.managePorts": "Asignación Adicional de Puertos",
"settings.server.webServer.traefik.managePortsDescription": "Añadir o eliminar puertos adicionales para Traefik",
"settings.server.webServer.traefik.targetPort": "Puerto de Destino",
"settings.server.webServer.traefik.publishedPort": "Puerto Publicado",
"settings.server.webServer.traefik.addPort": "Añadir Puerto",
"settings.server.webServer.traefik.portsUpdated": "Puertos actualizados correctamente",
"settings.server.webServer.traefik.portsUpdateError": "Error al actualizar los puertos",
"settings.server.webServer.traefik.publishMode": "Modo de Publicación",
"settings.server.webServer.storage.label": "Espacio",
"settings.server.webServer.storage.cleanUnusedImages": "Limpiar imágenes no utilizadas",
"settings.server.webServer.storage.cleanUnusedVolumes": "Limpiar volúmenes no utilizados",
"settings.server.webServer.storage.cleanStoppedContainers": "Limpiar contenedores detenidos",
"settings.server.webServer.storage.cleanDockerBuilder": "Limpiar Constructor de Docker y Sistema",
"settings.server.webServer.storage.cleanMonitoring": "Limpiar Monitoreo",
"settings.server.webServer.storage.cleanAll": "Limpiar todo",
"settings.profile.title": "Cuenta",
"settings.profile.description": "Cambia los detalles de tu perfil aquí.",
"settings.profile.email": "Correo electrónico",
"settings.profile.password": "Contraseña",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Apariencia",
"settings.appearance.description": "Personaliza el tema de tu panel.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Selecciona un tema para tu panel",
"settings.appearance.themes.light": "Claro",
"settings.appearance.themes.dark": "Oscuro",
"settings.appearance.themes.system": "Sistema",
"settings.appearance.language": "Idioma",
"settings.appearance.languageDescription": "Selecciona un idioma para tu panel"
}

View File

@@ -1,41 +1 @@
{
"settings.common.save": "ذخیره",
"settings.server.domain.title": "دامنه سرور",
"settings.server.domain.description": "یک دامنه به برنامه سرور خود اضافه کنید.",
"settings.server.domain.form.domain": "دامنه",
"settings.server.domain.form.letsEncryptEmail": "ایمیل Let's Encrypt",
"settings.server.domain.form.certificate.label": "گواهینامه",
"settings.server.domain.form.certificate.placeholder": "یک گواهینامه انتخاب کنید",
"settings.server.domain.form.certificateOptions.none": "هیچکدام",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (پیش‌فرض)",
"settings.server.webServer.title": "وب سرور",
"settings.server.webServer.description": "وب سرور را بازنشانی یا پاک کنید.",
"settings.server.webServer.actions": "اقدامات",
"settings.server.webServer.reload": "بارگذاری مجدد",
"settings.server.webServer.watchLogs": "مشاهده گزارش‌ها",
"settings.server.webServer.updateServerIp": "به‌روزرسانی آی‌پی سرور",
"settings.server.webServer.server.label": "سرور",
"settings.server.webServer.traefik.label": "ترافیک",
"settings.server.webServer.traefik.modifyEnv": "ویرایش محیط",
"settings.server.webServer.storage.label": "فضا",
"settings.server.webServer.storage.cleanUnusedImages": "پاکسازی Image های بدون استفاده",
"settings.server.webServer.storage.cleanUnusedVolumes": "پاک‌سازی ولوم‌های بدون استفاده",
"settings.server.webServer.storage.cleanStoppedContainers": "پاک‌سازی کانتینرهای متوقف‌شده",
"settings.server.webServer.storage.cleanDockerBuilder": "پاک‌سازی بیلدر و سیستم داکر",
"settings.server.webServer.storage.cleanMonitoring": "پاک‌سازی پایش",
"settings.server.webServer.storage.cleanAll": "پاک‌سازی همه",
"settings.profile.title": "حساب کاربری",
"settings.profile.description": "جزئیات پروفایل خود را در اینجا تغییر دهید.",
"settings.profile.email": "ایمیل",
"settings.profile.password": "رمز عبور",
"settings.profile.avatar": "تصویر پروفایل",
"settings.appearance.title": "ظاهر",
"settings.appearance.description": "تم داشبورد خود را سفارشی کنید.",
"settings.appearance.theme": "تم",
"settings.appearance.themeDescription": "یک تم برای داشبورد خود انتخاب کنید",
"settings.appearance.themes.light": "روشن",
"settings.appearance.themes.dark": "تاریک",
"settings.appearance.themes.system": "سیستم",
"settings.appearance.language": "زبان",
"settings.appearance.languageDescription": "یک زبان برای داشبورد خود انتخاب کنید"
}
{}

View File

@@ -0,0 +1,44 @@
{
"settings.common.save": "ذخیره",
"settings.server.domain.title": "دامنه سرور",
"settings.server.domain.description": "یک دامنه به برنامه سرور خود اضافه کنید.",
"settings.server.domain.form.domain": "دامنه",
"settings.server.domain.form.letsEncryptEmail": "ایمیل Let's Encrypt",
"settings.server.domain.form.certificate.label": "گواهینامه",
"settings.server.domain.form.certificate.placeholder": "یک گواهینامه انتخاب کنید",
"settings.server.domain.form.certificateOptions.none": "هیچکدام",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (پیش‌فرض)",
"settings.server.webServer.title": "وب سرور",
"settings.server.webServer.description": "وب سرور را بازنشانی یا پاک کنید.",
"settings.server.webServer.actions": "اقدامات",
"settings.server.webServer.reload": "بارگذاری مجدد",
"settings.server.webServer.watchLogs": "مشاهده گزارش‌ها",
"settings.server.webServer.updateServerIp": "به‌روزرسانی آی‌پی سرور",
"settings.server.webServer.server.label": "سرور",
"settings.server.webServer.traefik.label": "ترافیک",
"settings.server.webServer.traefik.modifyEnv": "ویرایش محیط",
"settings.server.webServer.storage.label": "فضا",
"settings.server.webServer.storage.cleanUnusedImages": "پاکسازی Image های بدون استفاده",
"settings.server.webServer.storage.cleanUnusedVolumes": "پاک‌سازی ولوم‌های بدون استفاده",
"settings.server.webServer.storage.cleanStoppedContainers": "پاک‌سازی کانتینرهای متوقف‌شده",
"settings.server.webServer.storage.cleanDockerBuilder": "پاک‌سازی بیلدر و سیستم داکر",
"settings.server.webServer.storage.cleanMonitoring": "پاک‌سازی پایش",
"settings.server.webServer.storage.cleanAll": "پاک‌سازی همه",
"settings.profile.title": "حساب کاربری",
"settings.profile.description": "جزئیات پروفایل خود را در اینجا تغییر دهید.",
"settings.profile.email": "ایمیل",
"settings.profile.password": "رمز عبور",
"settings.profile.avatar": "تصویر پروفایل",
"settings.appearance.title": "ظاهر",
"settings.appearance.description": "تم داشبورد خود را سفارشی کنید.",
"settings.appearance.theme": "تم",
"settings.appearance.themeDescription": "یک تم برای داشبورد خود انتخاب کنید",
"settings.appearance.themes.light": "روشن",
"settings.appearance.themes.dark": "تاریک",
"settings.appearance.themes.system": "سیستم",
"settings.appearance.language": "زبان",
"settings.appearance.languageDescription": "یک زبان برای داشبورد خود انتخاب کنید"
}

View File

@@ -1,41 +1 @@
{
"settings.common.save": "Sauvegarder",
"settings.server.domain.title": "Nom de domaine du serveur",
"settings.server.domain.description": "Ajouter un nom de domaine au serveur de votre application.",
"settings.server.domain.form.domain": "Domaine",
"settings.server.domain.form.letsEncryptEmail": "Adresse email Let's Encrypt",
"settings.server.domain.form.certificate.label": "Certificat",
"settings.server.domain.form.certificate.placeholder": "Choisir un certificat",
"settings.server.domain.form.certificateOptions.none": "Aucun",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Par défaut)",
"settings.server.webServer.title": "Serveur web",
"settings.server.webServer.description": "Recharger ou nettoyer le serveur web.",
"settings.server.webServer.actions": "Actions",
"settings.server.webServer.reload": "Recharger",
"settings.server.webServer.watchLogs": "Consulter les logs",
"settings.server.webServer.updateServerIp": "Mettre à jour l'IP du serveur",
"settings.server.webServer.server.label": "Serveur",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Modifier les variables d'environnement",
"settings.server.webServer.storage.label": "Stockage",
"settings.server.webServer.storage.cleanUnusedImages": "Supprimer les images inutilisées",
"settings.server.webServer.storage.cleanUnusedVolumes": "Supprimer les volumes inutilisés",
"settings.server.webServer.storage.cleanStoppedContainers": "Supprimer les conteneurs arrêtés",
"settings.server.webServer.storage.cleanDockerBuilder": "Nettoyer le Docker Builder & System",
"settings.server.webServer.storage.cleanMonitoring": "Nettoyer le monitoring",
"settings.server.webServer.storage.cleanAll": "Tout nettoyer",
"settings.profile.title": "Compte",
"settings.profile.description": "Modifier les informations de votre compte ici.",
"settings.profile.email": "Adresse Email",
"settings.profile.password": "Mot de passe",
"settings.profile.avatar": "Photo de profil",
"settings.appearance.title": "Apparence",
"settings.appearance.description": "Customiser le thème de votre dashboard.",
"settings.appearance.theme": "Thème",
"settings.appearance.themeDescription": "Choisir un thème pour votre dashboard",
"settings.appearance.themes.light": "Clair",
"settings.appearance.themes.dark": "Sombre",
"settings.appearance.themes.system": "Système",
"settings.appearance.language": "Langue",
"settings.appearance.languageDescription": "Sélectionner une langue pour votre dashboard"
}
{}

View File

@@ -0,0 +1,44 @@
{
"settings.common.save": "Sauvegarder",
"settings.server.domain.title": "Nom de domaine du serveur",
"settings.server.domain.description": "Ajouter un nom de domaine au serveur de votre application.",
"settings.server.domain.form.domain": "Domaine",
"settings.server.domain.form.letsEncryptEmail": "Adresse email Let's Encrypt",
"settings.server.domain.form.certificate.label": "Certificat",
"settings.server.domain.form.certificate.placeholder": "Choisir un certificat",
"settings.server.domain.form.certificateOptions.none": "Aucun",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Par défaut)",
"settings.server.webServer.title": "Serveur web",
"settings.server.webServer.description": "Recharger ou nettoyer le serveur web.",
"settings.server.webServer.actions": "Actions",
"settings.server.webServer.reload": "Recharger",
"settings.server.webServer.watchLogs": "Consulter les logs",
"settings.server.webServer.updateServerIp": "Mettre à jour l'IP du serveur",
"settings.server.webServer.server.label": "Serveur",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Modifier les variables d'environnement",
"settings.server.webServer.storage.label": "Stockage",
"settings.server.webServer.storage.cleanUnusedImages": "Supprimer les images inutilisées",
"settings.server.webServer.storage.cleanUnusedVolumes": "Supprimer les volumes inutilisés",
"settings.server.webServer.storage.cleanStoppedContainers": "Supprimer les conteneurs arrêtés",
"settings.server.webServer.storage.cleanDockerBuilder": "Nettoyer le Docker Builder & System",
"settings.server.webServer.storage.cleanMonitoring": "Nettoyer le monitoring",
"settings.server.webServer.storage.cleanAll": "Tout nettoyer",
"settings.profile.title": "Compte",
"settings.profile.description": "Modifier les informations de votre compte ici.",
"settings.profile.email": "Adresse Email",
"settings.profile.password": "Mot de passe",
"settings.profile.avatar": "Photo de profil",
"settings.appearance.title": "Apparence",
"settings.appearance.description": "Customiser le thème de votre dashboard.",
"settings.appearance.theme": "Thème",
"settings.appearance.themeDescription": "Choisir un thème pour votre dashboard",
"settings.appearance.themes.light": "Clair",
"settings.appearance.themes.dark": "Sombre",
"settings.appearance.themes.system": "Système",
"settings.appearance.language": "Langue",
"settings.appearance.languageDescription": "Sélectionner une langue pour votre dashboard"
}

View File

@@ -1,54 +1 @@
{
"settings.common.save": "Simpan",
"settings.common.enterTerminal": "Buka Terminal",
"settings.server.domain.title": "Domain Server",
"settings.server.domain.description": "Tambahkan domain ke aplikasi server anda.",
"settings.server.domain.form.domain": "Domain",
"settings.server.domain.form.letsEncryptEmail": "Email Let's Encrypt",
"settings.server.domain.form.certificate.label": "Penyedia Sertifikat",
"settings.server.domain.form.certificate.placeholder": "Pilih sertifikat",
"settings.server.domain.form.certificateOptions.none": "Tidak ada",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Server Web",
"settings.server.webServer.description": "Muat ulang atau bersihkan server web.",
"settings.server.webServer.actions": "Opsi",
"settings.server.webServer.reload": "Muat ulang",
"settings.server.webServer.watchLogs": "Lihat log",
"settings.server.webServer.updateServerIp": "Perbarui IP Server",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Ubah Environment",
"settings.server.webServer.traefik.managePorts": "Pengaturan Port Tambahan",
"settings.server.webServer.traefik.managePortsDescription": "Tambahkan atau hapus port tambahan untuk Traefik",
"settings.server.webServer.traefik.targetPort": "Port Tujuan",
"settings.server.webServer.traefik.publishedPort": "Port saai ini",
"settings.server.webServer.traefik.addPort": "Tambah Port",
"settings.server.webServer.traefik.portsUpdated": "Port berhasil diperbarui",
"settings.server.webServer.traefik.portsUpdateError": "Gagal memperbarui Port",
"settings.server.webServer.traefik.publishMode": "Pilihan mode Port",
"settings.server.webServer.storage.label": "Penyimpanan",
"settings.server.webServer.storage.cleanUnusedImages": "Hapus Image tidak terpakai",
"settings.server.webServer.storage.cleanUnusedVolumes": "Hapus Volume tidak terpakai",
"settings.server.webServer.storage.cleanStoppedContainers": "Hapus Container tidak aktif",
"settings.server.webServer.storage.cleanDockerBuilder": "Bersihkan Docker Builder & System",
"settings.server.webServer.storage.cleanMonitoring": "Bersihkan Monitoring",
"settings.server.webServer.storage.cleanAll": "Bersihkan",
"settings.profile.title": "Akun",
"settings.profile.description": "Ubah detail profil Anda di sini.",
"settings.profile.email": "Email",
"settings.profile.password": "Kata Sandi",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Tampilan",
"settings.appearance.description": "Sesuaikan tema dasbor Anda.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Pilih tema untuk dasbor Anda",
"settings.appearance.themes.light": "Terang",
"settings.appearance.themes.dark": "Gelap",
"settings.appearance.themes.system": "Sistem",
"settings.appearance.language": "Bahasa",
"settings.appearance.languageDescription": "Pilih bahasa untuk dasbor Anda",
"settings.terminal.connectionSettings": "Pengaturan koneksi",
"settings.terminal.ipAddress": "Alamat IP",
"settings.terminal.port": "Port",
"settings.terminal.username": "Username"
}
{}

View File

@@ -0,0 +1,58 @@
{
"settings.common.save": "Simpan",
"settings.common.enterTerminal": "Buka Terminal",
"settings.server.domain.title": "Domain Server",
"settings.server.domain.description": "Tambahkan domain ke aplikasi server anda.",
"settings.server.domain.form.domain": "Domain",
"settings.server.domain.form.letsEncryptEmail": "Email Let's Encrypt",
"settings.server.domain.form.certificate.label": "Penyedia Sertifikat",
"settings.server.domain.form.certificate.placeholder": "Pilih sertifikat",
"settings.server.domain.form.certificateOptions.none": "Tidak ada",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Server Web",
"settings.server.webServer.description": "Muat ulang atau bersihkan server web.",
"settings.server.webServer.actions": "Opsi",
"settings.server.webServer.reload": "Muat ulang",
"settings.server.webServer.watchLogs": "Lihat log",
"settings.server.webServer.updateServerIp": "Perbarui IP Server",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Ubah Environment",
"settings.server.webServer.traefik.managePorts": "Pengaturan Port Tambahan",
"settings.server.webServer.traefik.managePortsDescription": "Tambahkan atau hapus port tambahan untuk Traefik",
"settings.server.webServer.traefik.targetPort": "Port Tujuan",
"settings.server.webServer.traefik.publishedPort": "Port saai ini",
"settings.server.webServer.traefik.addPort": "Tambah Port",
"settings.server.webServer.traefik.portsUpdated": "Port berhasil diperbarui",
"settings.server.webServer.traefik.portsUpdateError": "Gagal memperbarui Port",
"settings.server.webServer.traefik.publishMode": "Pilihan mode Port",
"settings.server.webServer.storage.label": "Penyimpanan",
"settings.server.webServer.storage.cleanUnusedImages": "Hapus Image tidak terpakai",
"settings.server.webServer.storage.cleanUnusedVolumes": "Hapus Volume tidak terpakai",
"settings.server.webServer.storage.cleanStoppedContainers": "Hapus Container tidak aktif",
"settings.server.webServer.storage.cleanDockerBuilder": "Bersihkan Docker Builder & System",
"settings.server.webServer.storage.cleanMonitoring": "Bersihkan Monitoring",
"settings.server.webServer.storage.cleanAll": "Bersihkan",
"settings.profile.title": "Akun",
"settings.profile.description": "Ubah detail profil Anda di sini.",
"settings.profile.email": "Email",
"settings.profile.password": "Kata Sandi",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Tampilan",
"settings.appearance.description": "Sesuaikan tema dasbor Anda.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Pilih tema untuk dasbor Anda",
"settings.appearance.themes.light": "Terang",
"settings.appearance.themes.dark": "Gelap",
"settings.appearance.themes.system": "Sistem",
"settings.appearance.language": "Bahasa",
"settings.appearance.languageDescription": "Pilih bahasa untuk dasbor Anda",
"settings.terminal.connectionSettings": "Pengaturan koneksi",
"settings.terminal.ipAddress": "Alamat IP",
"settings.terminal.port": "Port",
"settings.terminal.username": "Username"
}

View File

@@ -1,41 +1 @@
{
"settings.common.save": "Salva",
"settings.server.domain.title": "Dominio del server",
"settings.server.domain.description": "Aggiungi un dominio alla tua applicazione server.",
"settings.server.domain.form.domain": "Dominio",
"settings.server.domain.form.letsEncryptEmail": "Email di Let's Encrypt",
"settings.server.domain.form.certificate.label": "Certificato",
"settings.server.domain.form.certificate.placeholder": "Seleziona un certificato",
"settings.server.domain.form.certificateOptions.none": "Nessuno",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Predefinito)",
"settings.server.webServer.title": "Server Web",
"settings.server.webServer.description": "Ricarica o pulisci il server web.",
"settings.server.webServer.actions": "Azioni",
"settings.server.webServer.reload": "Ricarica",
"settings.server.webServer.watchLogs": "Guarda i log",
"settings.server.webServer.updateServerIp": "Aggiorna IP del server",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Modifica Env",
"settings.server.webServer.storage.label": "Spazio",
"settings.server.webServer.storage.cleanUnusedImages": "Pulisci immagini inutilizzate",
"settings.server.webServer.storage.cleanUnusedVolumes": "Pulisci volumi inutilizzati",
"settings.server.webServer.storage.cleanStoppedContainers": "Pulisci container fermati",
"settings.server.webServer.storage.cleanDockerBuilder": "Pulisci Docker Builder e sistema",
"settings.server.webServer.storage.cleanMonitoring": "Pulisci monitoraggio",
"settings.server.webServer.storage.cleanAll": "Pulisci tutto",
"settings.profile.title": "Account",
"settings.profile.description": "Modifica i dettagli del tuo profilo qui.",
"settings.profile.email": "Email",
"settings.profile.password": "Password",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Aspetto",
"settings.appearance.description": "Personalizza il tema della tua dashboard.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Seleziona un tema per la tua dashboard",
"settings.appearance.themes.light": "Chiaro",
"settings.appearance.themes.dark": "Scuro",
"settings.appearance.themes.system": "Sistema",
"settings.appearance.language": "Lingua",
"settings.appearance.languageDescription": "Seleziona una lingua per la tua dashboard"
}
{}

View File

@@ -0,0 +1,44 @@
{
"settings.common.save": "Salva",
"settings.server.domain.title": "Dominio del server",
"settings.server.domain.description": "Aggiungi un dominio alla tua applicazione server.",
"settings.server.domain.form.domain": "Dominio",
"settings.server.domain.form.letsEncryptEmail": "Email di Let's Encrypt",
"settings.server.domain.form.certificate.label": "Certificato",
"settings.server.domain.form.certificate.placeholder": "Seleziona un certificato",
"settings.server.domain.form.certificateOptions.none": "Nessuno",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Predefinito)",
"settings.server.webServer.title": "Server Web",
"settings.server.webServer.description": "Ricarica o pulisci il server web.",
"settings.server.webServer.actions": "Azioni",
"settings.server.webServer.reload": "Ricarica",
"settings.server.webServer.watchLogs": "Guarda i log",
"settings.server.webServer.updateServerIp": "Aggiorna IP del server",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Modifica Env",
"settings.server.webServer.storage.label": "Spazio",
"settings.server.webServer.storage.cleanUnusedImages": "Pulisci immagini inutilizzate",
"settings.server.webServer.storage.cleanUnusedVolumes": "Pulisci volumi inutilizzati",
"settings.server.webServer.storage.cleanStoppedContainers": "Pulisci container fermati",
"settings.server.webServer.storage.cleanDockerBuilder": "Pulisci Docker Builder e sistema",
"settings.server.webServer.storage.cleanMonitoring": "Pulisci monitoraggio",
"settings.server.webServer.storage.cleanAll": "Pulisci tutto",
"settings.profile.title": "Account",
"settings.profile.description": "Modifica i dettagli del tuo profilo qui.",
"settings.profile.email": "Email",
"settings.profile.password": "Password",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Aspetto",
"settings.appearance.description": "Personalizza il tema della tua dashboard.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Seleziona un tema per la tua dashboard",
"settings.appearance.themes.light": "Chiaro",
"settings.appearance.themes.dark": "Scuro",
"settings.appearance.themes.system": "Sistema",
"settings.appearance.language": "Lingua",
"settings.appearance.languageDescription": "Seleziona una lingua per la tua dashboard"
}

View File

@@ -1,41 +1 @@
{
"settings.common.save": "保存",
"settings.server.domain.title": "サーバードメイン",
"settings.server.domain.description": "サーバーアプリケーションにドメインを追加",
"settings.server.domain.form.domain": "ドメイン",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt メールアドレス",
"settings.server.domain.form.certificate.label": "証明書",
"settings.server.domain.form.certificate.placeholder": "証明書を選択",
"settings.server.domain.form.certificateOptions.none": "なし",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (デフォルト)",
"settings.server.webServer.title": "ウェブサーバー",
"settings.server.webServer.description": "ウェブサーバーをリロードまたはクリーンアップします",
"settings.server.webServer.actions": "アクション",
"settings.server.webServer.reload": "リロード",
"settings.server.webServer.watchLogs": "ログを監視",
"settings.server.webServer.updateServerIp": "サーバーIPを更新",
"settings.server.webServer.server.label": "サーバー",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "環境設定を変更",
"settings.server.webServer.storage.label": "ストレージ",
"settings.server.webServer.storage.cleanUnusedImages": "未使用のイメージを削除",
"settings.server.webServer.storage.cleanUnusedVolumes": "未使用のボリュームを削除",
"settings.server.webServer.storage.cleanStoppedContainers": "停止中のコンテナを削除",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker ビルダー&システムをクリーンアップ",
"settings.server.webServer.storage.cleanMonitoring": "モニタリングをクリーンアップ",
"settings.server.webServer.storage.cleanAll": "すべてをクリーンアップ",
"settings.profile.title": "アカウント",
"settings.profile.description": "ここでプロフィールの詳細を変更できます",
"settings.profile.email": "メールアドレス",
"settings.profile.password": "パスワード",
"settings.profile.avatar": "アバター",
"settings.appearance.title": "外観",
"settings.appearance.description": "ダッシュボードのテーマをカスタマイズ",
"settings.appearance.theme": "テーマ",
"settings.appearance.themeDescription": "ダッシュボードのテーマを選択してください",
"settings.appearance.themes.light": "ライト",
"settings.appearance.themes.dark": "ダーク",
"settings.appearance.themes.system": "システム",
"settings.appearance.language": "言語",
"settings.appearance.languageDescription": "ダッシュボードの言語を選択してください"
}
{}

View File

@@ -0,0 +1,44 @@
{
"settings.common.save": "保存",
"settings.server.domain.title": "サーバードメイン",
"settings.server.domain.description": "サーバーアプリケーションにドメインを追加",
"settings.server.domain.form.domain": "ドメイン",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt メールアドレス",
"settings.server.domain.form.certificate.label": "証明書",
"settings.server.domain.form.certificate.placeholder": "証明書を選択",
"settings.server.domain.form.certificateOptions.none": "なし",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (デフォルト)",
"settings.server.webServer.title": "ウェブサーバー",
"settings.server.webServer.description": "ウェブサーバーをリロードまたはクリーンアップします",
"settings.server.webServer.actions": "アクション",
"settings.server.webServer.reload": "リロード",
"settings.server.webServer.watchLogs": "ログを監視",
"settings.server.webServer.updateServerIp": "サーバーIPを更新",
"settings.server.webServer.server.label": "サーバー",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "環境設定を変更",
"settings.server.webServer.storage.label": "ストレージ",
"settings.server.webServer.storage.cleanUnusedImages": "未使用のイメージを削除",
"settings.server.webServer.storage.cleanUnusedVolumes": "未使用のボリュームを削除",
"settings.server.webServer.storage.cleanStoppedContainers": "停止中のコンテナを削除",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker ビルダー&システムをクリーンアップ",
"settings.server.webServer.storage.cleanMonitoring": "モニタリングをクリーンアップ",
"settings.server.webServer.storage.cleanAll": "すべてをクリーンアップ",
"settings.profile.title": "アカウント",
"settings.profile.description": "ここでプロフィールの詳細を変更できます",
"settings.profile.email": "メールアドレス",
"settings.profile.password": "パスワード",
"settings.profile.avatar": "アバター",
"settings.appearance.title": "外観",
"settings.appearance.description": "ダッシュボードのテーマをカスタマイズ",
"settings.appearance.theme": "テーマ",
"settings.appearance.themeDescription": "ダッシュボードのテーマを選択してください",
"settings.appearance.themes.light": "ライト",
"settings.appearance.themes.dark": "ダーク",
"settings.appearance.themes.system": "システム",
"settings.appearance.language": "言語",
"settings.appearance.languageDescription": "ダッシュボードの言語を選択してください"
}

View File

@@ -1,41 +1 @@
{
"settings.common.save": "저장",
"settings.server.domain.title": "서버 도메인",
"settings.server.domain.description": "서버 애플리케이션에 도메인을 추가합니다.",
"settings.server.domain.form.domain": "도메인",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt 이메일",
"settings.server.domain.form.certificate.label": "인증서",
"settings.server.domain.form.certificate.placeholder": "인증서 선택",
"settings.server.domain.form.certificateOptions.none": "없음",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (기본)",
"settings.server.webServer.title": "웹 서버",
"settings.server.webServer.description": "웹 서버를 재시작하거나 정리합니다.",
"settings.server.webServer.actions": "작업",
"settings.server.webServer.reload": "재시작",
"settings.server.webServer.watchLogs": "로그 보기",
"settings.server.webServer.updateServerIp": "서버 IP 갱신",
"settings.server.webServer.server.label": "서버",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "환경 변수 수정",
"settings.server.webServer.storage.label": "저장 공간",
"settings.server.webServer.storage.cleanUnusedImages": "사용하지 않는 이미지 정리",
"settings.server.webServer.storage.cleanUnusedVolumes": "사용하지 않는 볼륨 정리",
"settings.server.webServer.storage.cleanStoppedContainers": "정지된 컨테이너 정리",
"settings.server.webServer.storage.cleanDockerBuilder": "도커 빌더 & 시스템 정리",
"settings.server.webServer.storage.cleanMonitoring": "모니터링 데이터 정리",
"settings.server.webServer.storage.cleanAll": "전체 정리",
"settings.profile.title": "계정",
"settings.profile.description": "여기에서 프로필 세부 정보를 변경하세요.",
"settings.profile.email": "이메일",
"settings.profile.password": "비밀번호",
"settings.profile.avatar": "아바타",
"settings.appearance.title": "외관",
"settings.appearance.description": "대시보드의 테마를 사용자 설정합니다.",
"settings.appearance.theme": "테마",
"settings.appearance.themeDescription": "대시보드 테마 선택",
"settings.appearance.themes.light": "라이트",
"settings.appearance.themes.dark": "다크",
"settings.appearance.themes.system": "시스템",
"settings.appearance.language": "언어",
"settings.appearance.languageDescription": "대시보드에서 사용할 언어 선택"
}
{}

View File

@@ -0,0 +1,44 @@
{
"settings.common.save": "저장",
"settings.server.domain.title": "서버 도메인",
"settings.server.domain.description": "서버 애플리케이션에 도메인을 추가합니다.",
"settings.server.domain.form.domain": "도메인",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt 이메일",
"settings.server.domain.form.certificate.label": "인증서",
"settings.server.domain.form.certificate.placeholder": "인증서 선택",
"settings.server.domain.form.certificateOptions.none": "없음",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (기본)",
"settings.server.webServer.title": "웹 서버",
"settings.server.webServer.description": "웹 서버를 재시작하거나 정리합니다.",
"settings.server.webServer.actions": "작업",
"settings.server.webServer.reload": "재시작",
"settings.server.webServer.watchLogs": "로그 보기",
"settings.server.webServer.updateServerIp": "서버 IP 갱신",
"settings.server.webServer.server.label": "서버",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "환경 변수 수정",
"settings.server.webServer.storage.label": "저장 공간",
"settings.server.webServer.storage.cleanUnusedImages": "사용하지 않는 이미지 정리",
"settings.server.webServer.storage.cleanUnusedVolumes": "사용하지 않는 볼륨 정리",
"settings.server.webServer.storage.cleanStoppedContainers": "정지된 컨테이너 정리",
"settings.server.webServer.storage.cleanDockerBuilder": "도커 빌더 & 시스템 정리",
"settings.server.webServer.storage.cleanMonitoring": "모니터링 데이터 정리",
"settings.server.webServer.storage.cleanAll": "전체 정리",
"settings.profile.title": "계정",
"settings.profile.description": "여기에서 프로필 세부 정보를 변경하세요.",
"settings.profile.email": "이메일",
"settings.profile.password": "비밀번호",
"settings.profile.avatar": "아바타",
"settings.appearance.title": "외관",
"settings.appearance.description": "대시보드의 테마를 사용자 설정합니다.",
"settings.appearance.theme": "테마",
"settings.appearance.themeDescription": "대시보드 테마 선택",
"settings.appearance.themes.light": "라이트",
"settings.appearance.themes.dark": "다크",
"settings.appearance.themes.system": "시스템",
"settings.appearance.language": "언어",
"settings.appearance.languageDescription": "대시보드에서 사용할 언어 선택"
}

View File

@@ -1,41 +1 @@
{
"settings.common.save": "Сақтау",
"settings.server.domain.title": "Сервер домені",
"settings.server.domain.description": "Dokploy сервер қолданбасына домен енгізіңіз.",
"settings.server.domain.form.domain": "Домен",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt Эл. поштасы",
"settings.server.domain.form.certificate.label": "Сертификат",
"settings.server.domain.form.certificate.placeholder": "Сертификатты таңдаңыз",
"settings.server.domain.form.certificateOptions.none": "Жоқ",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Стандартты)",
"settings.server.webServer.title": "Веб-Сервер",
"settings.server.webServer.description": "Веб-серверді қайта жүктеу немесе тазалау.",
"settings.server.webServer.actions": "Әрекеттер",
"settings.server.webServer.reload": "Қайта жүктеу",
"settings.server.webServer.watchLogs": "Журналдарды қарау",
"settings.server.webServer.updateServerIp": "Сервердің IP жаңарту",
"settings.server.webServer.server.label": "Сервер",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Env Өзгерту",
"settings.server.webServer.storage.label": "Диск кеңістігі",
"settings.server.webServer.storage.cleanUnusedImages": "Пайдаланылмаған образды тазалау",
"settings.server.webServer.storage.cleanUnusedVolumes": "Пайдаланылмаған томды тазалау",
"settings.server.webServer.storage.cleanStoppedContainers": "Тоқтатылған контейнерлерді тазалау",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker Builder & Системаны тазалау",
"settings.server.webServer.storage.cleanMonitoring": "Мониторингті тазалау",
"settings.server.webServer.storage.cleanAll": "Барлығын тазалау",
"settings.profile.title": "Аккаунт",
"settings.profile.description": "Профиль мәліметтерін осы жерден өзгертіңіз.",
"settings.profile.email": "Эл. пошта",
"settings.profile.password": "Құпия сөз",
"settings.profile.avatar": "Аватар",
"settings.appearance.title": "Сыртқы түрі",
"settings.appearance.description": "Dokploy сыртқы келбетін өзгерту.",
"settings.appearance.theme": "Келбеті",
"settings.appearance.themeDescription": "Жүйе тақтасының келбетің таңдаңыз",
"settings.appearance.themes.light": "Жарық",
"settings.appearance.themes.dark": "Қараңғы",
"settings.appearance.themes.system": "Жүйелік",
"settings.appearance.language": "Тіл",
"settings.appearance.languageDescription": "Жүйе тақтасының тілің таңдаңыз"
}
{}

View File

@@ -0,0 +1,41 @@
{
"settings.common.save": "Сақтау",
"settings.server.domain.title": "Сервер домені",
"settings.server.domain.description": "Dokploy сервер қолданбасына домен енгізіңіз.",
"settings.server.domain.form.domain": "Домен",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt Эл. поштасы",
"settings.server.domain.form.certificate.label": "Сертификат",
"settings.server.domain.form.certificate.placeholder": "Сертификатты таңдаңыз",
"settings.server.domain.form.certificateOptions.none": "Жоқ",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Стандартты)",
"settings.server.webServer.title": "Веб-Сервер",
"settings.server.webServer.description": "Веб-серверді қайта жүктеу немесе тазалау.",
"settings.server.webServer.actions": "Әрекеттер",
"settings.server.webServer.reload": "Қайта жүктеу",
"settings.server.webServer.watchLogs": "Журналдарды қарау",
"settings.server.webServer.updateServerIp": "Сервердің IP жаңарту",
"settings.server.webServer.server.label": "Сервер",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Env Өзгерту",
"settings.server.webServer.storage.label": "Диск кеңістігі",
"settings.server.webServer.storage.cleanUnusedImages": "Пайдаланылмаған образды тазалау",
"settings.server.webServer.storage.cleanUnusedVolumes": "Пайдаланылмаған томды тазалау",
"settings.server.webServer.storage.cleanStoppedContainers": "Тоқтатылған контейнерлерді тазалау",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker Builder & Системаны тазалау",
"settings.server.webServer.storage.cleanMonitoring": "Мониторингті тазалау",
"settings.server.webServer.storage.cleanAll": "Барлығын тазалау",
"settings.profile.title": "Аккаунт",
"settings.profile.description": "Профиль мәліметтерін осы жерден өзгертіңіз.",
"settings.profile.email": "Эл. пошта",
"settings.profile.password": "Құпия сөз",
"settings.profile.avatar": "Аватар",
"settings.appearance.title": "Сыртқы түрі",
"settings.appearance.description": "Dokploy сыртқы келбетін өзгерту.",
"settings.appearance.theme": "Келбеті",
"settings.appearance.themeDescription": "Жүйе тақтасының келбетің таңдаңыз",
"settings.appearance.themes.light": "Жарық",
"settings.appearance.themes.dark": "Қараңғы",
"settings.appearance.themes.system": "Жүйелік",
"settings.appearance.language": "Тіл",
"settings.appearance.languageDescription": "Жүйе тақтасының тілің таңдаңыз"
}

View File

@@ -1,54 +1 @@
{
"settings.common.save": "സേവ് ചെയ്യുക",
"settings.common.enterTerminal": "ടർമിനലിൽ പ്രവേശിക്കുക",
"settings.server.domain.title": "സർവർ ഡോമെയ്ൻ",
"settings.server.domain.description": "നിങ്ങളുടെ സർവർ അപ്ലിക്കേഷനിൽ ഒരു ഡോമെയ്ൻ ചേർക്കുക.",
"settings.server.domain.form.domain": "ഡോമെയ്ൻ",
"settings.server.domain.form.letsEncryptEmail": "ലെറ്റ്സ് എൻക്രിപ്റ്റ് ഇമെയിൽ",
"settings.server.domain.form.certificate.label": "സർട്ടിഫിക്കറ്റ് പ്രൊവൈഡർ",
"settings.server.domain.form.certificate.placeholder": "ഒരു സർട്ടിഫിക്കറ്റ് തിരഞ്ഞെടുക്കുക",
"settings.server.domain.form.certificateOptions.none": "ഒന്നുമില്ല",
"settings.server.domain.form.certificateOptions.letsencrypt": "ലെറ്റ്സ് എൻക്രിപ്റ്റ്",
"settings.server.webServer.title": "വെബ് സർവർ",
"settings.server.webServer.description": "വെബ് സർവർ റീലോഡ് ചെയ്യുക അല്ലെങ്കിൽ ശുചീകരിക്കുക.",
"settings.server.webServer.actions": "നടപടികൾ",
"settings.server.webServer.reload": "റീലോഡ് ചെയ്യുക",
"settings.server.webServer.watchLogs": "ലോഗുകൾ കാണുക",
"settings.server.webServer.updateServerIp": "സർവർ IP അപ്ഡേറ്റ് ചെയ്യുക",
"settings.server.webServer.server.label": "സർവർ",
"settings.server.webServer.traefik.label": "ട്രാഫിക്",
"settings.server.webServer.traefik.modifyEnv": "ചുറ്റുപാടുകൾ മാറ്റുക",
"settings.server.webServer.traefik.managePorts": "അധിക പോർട്ട് മാപ്പിംഗ്",
"settings.server.webServer.traefik.managePortsDescription": "ട്രാഫിക്കിനായി അധിക പോർട്ടുകൾ ചേർക്കുക അല്ലെങ്കിൽ നീക്കം ചെയ്യുക",
"settings.server.webServer.traefik.targetPort": "ടാർഗറ്റ് പോർട്ട്",
"settings.server.webServer.traefik.publishedPort": "പ്രസിദ്ധീകരിച്ച പോർട്ട്",
"settings.server.webServer.traefik.addPort": "പോർട്ട് ചേർക്കുക",
"settings.server.webServer.traefik.portsUpdated": "പോർട്ടുകൾ വിജയകരമായി അപ്ഡേറ്റ് ചെയ്തു",
"settings.server.webServer.traefik.portsUpdateError": "പോർട്ടുകൾ അപ്ഡേറ്റ് ചെയ്യാൻ പരാജയപ്പെട്ടു",
"settings.server.webServer.traefik.publishMode": "പ്രസിദ്ധീകരണ മോഡ്",
"settings.server.webServer.storage.label": "ഇടം",
"settings.server.webServer.storage.cleanUnusedImages": "ഉപയോഗിക്കാത്ത ഇമേജുകൾ ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanUnusedVolumes": "ഉപയോഗിക്കാത്ത വോള്യങ്ങൾ ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanStoppedContainers": "നിർത്തിയ കണ്ടെയ്‌നറുകൾ ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanDockerBuilder": "ഡോക്കർ ബിൽഡറും സിസ്റ്റവും ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanMonitoring": "മോണിറ്ററിംഗ് ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanAll": "എല്ലാം ശുചീകരിക്കുക",
"settings.profile.title": "അക്കൗണ്ട്",
"settings.profile.description": "നിങ്ങളുടെ പ്രൊഫൈൽ വിശദാംശങ്ങൾ ഇവിടെ മാറ്റുക.",
"settings.profile.email": "ഇമെയിൽ",
"settings.profile.password": "പാസ്വേഡ്",
"settings.profile.avatar": "അവതാർ",
"settings.appearance.title": "ദൃശ്യമാനം",
"settings.appearance.description": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന്റെ തീം ഇഷ്ടാനുസൃതമാക്കുക.",
"settings.appearance.theme": "തീം",
"settings.appearance.themeDescription": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന് ഒരു തീം തിരഞ്ഞെടുക്കുക",
"settings.appearance.themes.light": "ലൈറ്റ്",
"settings.appearance.themes.dark": "ഡാർക്ക്",
"settings.appearance.themes.system": "സിസ്റ്റം",
"settings.appearance.language": "ഭാഷ",
"settings.appearance.languageDescription": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന് ഒരു ഭാഷ തിരഞ്ഞെടുക്കുക",
"settings.terminal.connectionSettings": "കണക്ഷൻ ക്രമീകരണങ്ങൾ",
"settings.terminal.ipAddress": "IP വിലാസം",
"settings.terminal.port": "പോർട്ട്",
"settings.terminal.username": "ഉപയോക്തൃനാമം"
}
{}

View File

@@ -0,0 +1,58 @@
{
"settings.common.save": "സേവ് ചെയ്യുക",
"settings.common.enterTerminal": "ടർമിനലിൽ പ്രവേശിക്കുക",
"settings.server.domain.title": "സർവർ ഡോമെയ്ൻ",
"settings.server.domain.description": "നിങ്ങളുടെ സർവർ അപ്ലിക്കേഷനിൽ ഒരു ഡോമെയ്ൻ ചേർക്കുക.",
"settings.server.domain.form.domain": "ഡോമെയ്ൻ",
"settings.server.domain.form.letsEncryptEmail": "ലെറ്റ്സ് എൻക്രിപ്റ്റ് ഇമെയിൽ",
"settings.server.domain.form.certificate.label": "സർട്ടിഫിക്കറ്റ് പ്രൊവൈഡർ",
"settings.server.domain.form.certificate.placeholder": "ഒരു സർട്ടിഫിക്കറ്റ് തിരഞ്ഞെടുക്കുക",
"settings.server.domain.form.certificateOptions.none": "ഒന്നുമില്ല",
"settings.server.domain.form.certificateOptions.letsencrypt": "ലെറ്റ്സ് എൻക്രിപ്റ്റ്",
"settings.server.webServer.title": "വെബ് സർവർ",
"settings.server.webServer.description": "വെബ് സർവർ റീലോഡ് ചെയ്യുക അല്ലെങ്കിൽ ശുചീകരിക്കുക.",
"settings.server.webServer.actions": "നടപടികൾ",
"settings.server.webServer.reload": "റീലോഡ് ചെയ്യുക",
"settings.server.webServer.watchLogs": "ലോഗുകൾ കാണുക",
"settings.server.webServer.updateServerIp": "സർവർ IP അപ്ഡേറ്റ് ചെയ്യുക",
"settings.server.webServer.server.label": "സർവർ",
"settings.server.webServer.traefik.label": "ട്രാഫിക്",
"settings.server.webServer.traefik.modifyEnv": "ചുറ്റുപാടുകൾ മാറ്റുക",
"settings.server.webServer.traefik.managePorts": "അധിക പോർട്ട് മാപ്പിംഗ്",
"settings.server.webServer.traefik.managePortsDescription": "ട്രാഫിക്കിനായി അധിക പോർട്ടുകൾ ചേർക്കുക അല്ലെങ്കിൽ നീക്കം ചെയ്യുക",
"settings.server.webServer.traefik.targetPort": "ടാർഗറ്റ് പോർട്ട്",
"settings.server.webServer.traefik.publishedPort": "പ്രസിദ്ധീകരിച്ച പോർട്ട്",
"settings.server.webServer.traefik.addPort": "പോർട്ട് ചേർക്കുക",
"settings.server.webServer.traefik.portsUpdated": "പോർട്ടുകൾ വിജയകരമായി അപ്ഡേറ്റ് ചെയ്തു",
"settings.server.webServer.traefik.portsUpdateError": "പോർട്ടുകൾ അപ്ഡേറ്റ് ചെയ്യാൻ പരാജയപ്പെട്ടു",
"settings.server.webServer.traefik.publishMode": "പ്രസിദ്ധീകരണ മോഡ്",
"settings.server.webServer.storage.label": "ഇടം",
"settings.server.webServer.storage.cleanUnusedImages": "ഉപയോഗിക്കാത്ത ഇമേജുകൾ ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanUnusedVolumes": "ഉപയോഗിക്കാത്ത വോള്യങ്ങൾ ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanStoppedContainers": "നിർത്തിയ കണ്ടെയ്‌നറുകൾ ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanDockerBuilder": "ഡോക്കർ ബിൽഡറും സിസ്റ്റവും ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanMonitoring": "മോണിറ്ററിംഗ് ശുചീകരിക്കുക",
"settings.server.webServer.storage.cleanAll": "എല്ലാം ശുചീകരിക്കുക",
"settings.profile.title": "അക്കൗണ്ട്",
"settings.profile.description": "നിങ്ങളുടെ പ്രൊഫൈൽ വിശദാംശങ്ങൾ ഇവിടെ മാറ്റുക.",
"settings.profile.email": "ഇമെയിൽ",
"settings.profile.password": "പാസ്വേഡ്",
"settings.profile.avatar": "അവതാർ",
"settings.appearance.title": "ദൃശ്യമാനം",
"settings.appearance.description": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന്റെ തീം ഇഷ്ടാനുസൃതമാക്കുക.",
"settings.appearance.theme": "തീം",
"settings.appearance.themeDescription": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന് ഒരു തീം തിരഞ്ഞെടുക്കുക",
"settings.appearance.themes.light": "ലൈറ്റ്",
"settings.appearance.themes.dark": "ഡാർക്ക്",
"settings.appearance.themes.system": "സിസ്റ്റം",
"settings.appearance.language": "ഭാഷ",
"settings.appearance.languageDescription": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന് ഒരു ഭാഷ തിരഞ്ഞെടുക്കുക",
"settings.terminal.connectionSettings": "കണക്ഷൻ ക്രമീകരണങ്ങൾ",
"settings.terminal.ipAddress": "IP വിലാസം",
"settings.terminal.port": "പോർട്ട്",
"settings.terminal.username": "ഉപയോക്തൃനാമം"
}

View File

@@ -1,49 +1 @@
{
"settings.common.save": "Lagre",
"settings.server.domain.title": "Serverdomene",
"settings.server.domain.description": "Legg til et domene i serverapplikasjonen din.",
"settings.server.domain.form.domain": "Domene",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt Epost",
"settings.server.domain.form.certificate.label": "Sertifikatleverandør",
"settings.server.domain.form.certificate.placeholder": "Velg et sertifikat",
"settings.server.domain.form.certificateOptions.none": "Ingen",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Webserver",
"settings.server.webServer.description": "Last på nytt eller rens webserveren.",
"settings.server.webServer.actions": "Handlinger",
"settings.server.webServer.reload": "Last på nytt",
"settings.server.webServer.watchLogs": "Se logger",
"settings.server.webServer.updateServerIp": "Oppdater server-IP",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Endre miljø",
"settings.server.webServer.traefik.managePorts": "Ytterligere portkartlegginger",
"settings.server.webServer.traefik.managePortsDescription": "Legg til eller fjern flere porter for Traefik",
"settings.server.webServer.traefik.targetPort": "Målport",
"settings.server.webServer.traefik.publishedPort": "Publisert port",
"settings.server.webServer.traefik.addPort": "Legg til port",
"settings.server.webServer.traefik.portsUpdated": "Portene ble oppdatert",
"settings.server.webServer.traefik.portsUpdateError": "Kunne ikke oppdatere portene",
"settings.server.webServer.traefik.publishMode": "Publiseringsmodus",
"settings.server.webServer.storage.label": "Lagring",
"settings.server.webServer.storage.cleanUnusedImages": "Rens ubrukte bilder",
"settings.server.webServer.storage.cleanUnusedVolumes": "Rens ubrukte volumer",
"settings.server.webServer.storage.cleanStoppedContainers": "Rens stoppete containere",
"settings.server.webServer.storage.cleanDockerBuilder": "Rens Docker Builder og System",
"settings.server.webServer.storage.cleanMonitoring": "Rens overvåking",
"settings.server.webServer.storage.cleanAll": "Rens alt",
"settings.profile.title": "Konto",
"settings.profile.description": "Endre detaljene for profilen din her.",
"settings.profile.email": "Epost",
"settings.profile.password": "Passord",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Utseende",
"settings.appearance.description": "Tilpass temaet for dashbordet ditt.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Velg et tema for dashbordet ditt",
"settings.appearance.themes.light": "Lys",
"settings.appearance.themes.dark": "Mørk",
"settings.appearance.themes.system": "System",
"settings.appearance.language": "Språk",
"settings.appearance.languageDescription": "Velg et språk for dashbordet ditt"
}
{}

View File

@@ -0,0 +1,52 @@
{
"settings.common.save": "Lagre",
"settings.server.domain.title": "Serverdomene",
"settings.server.domain.description": "Legg til et domene i serverapplikasjonen din.",
"settings.server.domain.form.domain": "Domene",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt Epost",
"settings.server.domain.form.certificate.label": "Sertifikatleverandør",
"settings.server.domain.form.certificate.placeholder": "Velg et sertifikat",
"settings.server.domain.form.certificateOptions.none": "Ingen",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Webserver",
"settings.server.webServer.description": "Last på nytt eller rens webserveren.",
"settings.server.webServer.actions": "Handlinger",
"settings.server.webServer.reload": "Last på nytt",
"settings.server.webServer.watchLogs": "Se logger",
"settings.server.webServer.updateServerIp": "Oppdater server-IP",
"settings.server.webServer.server.label": "Server",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Endre miljø",
"settings.server.webServer.traefik.managePorts": "Ytterligere portkartlegginger",
"settings.server.webServer.traefik.managePortsDescription": "Legg til eller fjern flere porter for Traefik",
"settings.server.webServer.traefik.targetPort": "Målport",
"settings.server.webServer.traefik.publishedPort": "Publisert port",
"settings.server.webServer.traefik.addPort": "Legg til port",
"settings.server.webServer.traefik.portsUpdated": "Portene ble oppdatert",
"settings.server.webServer.traefik.portsUpdateError": "Kunne ikke oppdatere portene",
"settings.server.webServer.traefik.publishMode": "Publiseringsmodus",
"settings.server.webServer.storage.label": "Lagring",
"settings.server.webServer.storage.cleanUnusedImages": "Rens ubrukte bilder",
"settings.server.webServer.storage.cleanUnusedVolumes": "Rens ubrukte volumer",
"settings.server.webServer.storage.cleanStoppedContainers": "Rens stoppete containere",
"settings.server.webServer.storage.cleanDockerBuilder": "Rens Docker Builder og System",
"settings.server.webServer.storage.cleanMonitoring": "Rens overvåking",
"settings.server.webServer.storage.cleanAll": "Rens alt",
"settings.profile.title": "Konto",
"settings.profile.description": "Endre detaljene for profilen din her.",
"settings.profile.email": "Epost",
"settings.profile.password": "Passord",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Utseende",
"settings.appearance.description": "Tilpass temaet for dashbordet ditt.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Velg et tema for dashbordet ditt",
"settings.appearance.themes.light": "Lys",
"settings.appearance.themes.dark": "Mørk",
"settings.appearance.themes.system": "System",
"settings.appearance.language": "Språk",
"settings.appearance.languageDescription": "Velg et språk for dashbordet ditt"
}

View File

@@ -1,54 +1 @@
{
"settings.common.save": "Zapisz",
"settings.common.enterTerminal": "Otwórz terminal",
"settings.server.domain.title": "Domena",
"settings.server.domain.description": "Dodaj domenę do aplikacji",
"settings.server.domain.form.domain": "Domena",
"settings.server.domain.form.letsEncryptEmail": "Email Let's Encrypt",
"settings.server.domain.form.certificate.label": "Certyfikat",
"settings.server.domain.form.certificate.placeholder": "Wybierz certyfikat",
"settings.server.domain.form.certificateOptions.none": "Brak",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Domyślny)",
"settings.server.webServer.title": "Serwer",
"settings.server.webServer.description": "Przeładuj lub wyczyść serwer",
"settings.server.webServer.actions": "Akcje",
"settings.server.webServer.reload": "Przeładuj",
"settings.server.webServer.watchLogs": "Obserwuj logi",
"settings.server.webServer.updateServerIp": "Zaktualizuj IP serwera",
"settings.server.webServer.server.label": "Serwer",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Zmodyfikuj środowisko",
"settings.server.webServer.traefik.managePorts": "Dodatkowe mapowania portów",
"settings.server.webServer.traefik.managePortsDescription": "Dodaj lub usuń dodatkowe porty dla Traefik",
"settings.server.webServer.traefik.targetPort": "Port docelowy",
"settings.server.webServer.traefik.publishedPort": "Port opublikowany",
"settings.server.webServer.traefik.addPort": "Dodaj port",
"settings.server.webServer.traefik.portsUpdated": "Porty zaktualizowane pomyślnie",
"settings.server.webServer.traefik.portsUpdateError": "Nie udało się zaktualizować portów",
"settings.server.webServer.traefik.publishMode": "Tryb publikacji",
"settings.server.webServer.storage.label": "Przestrzeń",
"settings.server.webServer.storage.cleanUnusedImages": "Wyczyść nieużywane obrazy",
"settings.server.webServer.storage.cleanUnusedVolumes": "Wyczyść nieużywane wolumeny",
"settings.server.webServer.storage.cleanStoppedContainers": "Wyczyść zatrzymane kontenery",
"settings.server.webServer.storage.cleanDockerBuilder": "Wyczyść Docker Builder i System",
"settings.server.webServer.storage.cleanMonitoring": "Wyczyść monitorowanie",
"settings.server.webServer.storage.cleanAll": "Wyczyść wszystko",
"settings.profile.title": "Konto",
"settings.profile.description": "Zmień szczegóły swojego profilu",
"settings.profile.email": "Email",
"settings.profile.password": "Hasło",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Wygląd",
"settings.appearance.description": "Dostosuj motyw swojego pulpitu",
"settings.appearance.theme": "Motyw",
"settings.appearance.themeDescription": "Wybierz motyw swojego pulpitu",
"settings.appearance.themes.light": "Jasny",
"settings.appearance.themes.dark": "Ciemny",
"settings.appearance.themes.system": "System",
"settings.appearance.language": "Język",
"settings.appearance.languageDescription": "Wybierz język swojego pulpitu",
"settings.terminal.connectionSettings": "Ustawienia połączenia",
"settings.terminal.ipAddress": "Adres IP",
"settings.terminal.port": "Port",
"settings.terminal.username": "Nazwa użytkownika"
}
{}

View File

@@ -0,0 +1,58 @@
{
"settings.common.save": "Zapisz",
"settings.common.enterTerminal": "Otwórz terminal",
"settings.server.domain.title": "Domena",
"settings.server.domain.description": "Dodaj domenę do aplikacji",
"settings.server.domain.form.domain": "Domena",
"settings.server.domain.form.letsEncryptEmail": "Email Let's Encrypt",
"settings.server.domain.form.certificate.label": "Certyfikat",
"settings.server.domain.form.certificate.placeholder": "Wybierz certyfikat",
"settings.server.domain.form.certificateOptions.none": "Brak",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Domyślny)",
"settings.server.webServer.title": "Serwer",
"settings.server.webServer.description": "Przeładuj lub wyczyść serwer",
"settings.server.webServer.actions": "Akcje",
"settings.server.webServer.reload": "Przeładuj",
"settings.server.webServer.watchLogs": "Obserwuj logi",
"settings.server.webServer.updateServerIp": "Zaktualizuj IP serwera",
"settings.server.webServer.server.label": "Serwer",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Zmodyfikuj środowisko",
"settings.server.webServer.traefik.managePorts": "Dodatkowe mapowania portów",
"settings.server.webServer.traefik.managePortsDescription": "Dodaj lub usuń dodatkowe porty dla Traefik",
"settings.server.webServer.traefik.targetPort": "Port docelowy",
"settings.server.webServer.traefik.publishedPort": "Port opublikowany",
"settings.server.webServer.traefik.addPort": "Dodaj port",
"settings.server.webServer.traefik.portsUpdated": "Porty zaktualizowane pomyślnie",
"settings.server.webServer.traefik.portsUpdateError": "Nie udało się zaktualizować portów",
"settings.server.webServer.traefik.publishMode": "Tryb publikacji",
"settings.server.webServer.storage.label": "Przestrzeń",
"settings.server.webServer.storage.cleanUnusedImages": "Wyczyść nieużywane obrazy",
"settings.server.webServer.storage.cleanUnusedVolumes": "Wyczyść nieużywane wolumeny",
"settings.server.webServer.storage.cleanStoppedContainers": "Wyczyść zatrzymane kontenery",
"settings.server.webServer.storage.cleanDockerBuilder": "Wyczyść Docker Builder i System",
"settings.server.webServer.storage.cleanMonitoring": "Wyczyść monitorowanie",
"settings.server.webServer.storage.cleanAll": "Wyczyść wszystko",
"settings.profile.title": "Konto",
"settings.profile.description": "Zmień szczegóły swojego profilu",
"settings.profile.email": "Email",
"settings.profile.password": "Hasło",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Wygląd",
"settings.appearance.description": "Dostosuj motyw swojego pulpitu",
"settings.appearance.theme": "Motyw",
"settings.appearance.themeDescription": "Wybierz motyw swojego pulpitu",
"settings.appearance.themes.light": "Jasny",
"settings.appearance.themes.dark": "Ciemny",
"settings.appearance.themes.system": "System",
"settings.appearance.language": "Język",
"settings.appearance.languageDescription": "Wybierz język swojego pulpitu",
"settings.terminal.connectionSettings": "Ustawienia połączenia",
"settings.terminal.ipAddress": "Adres IP",
"settings.terminal.port": "Port",
"settings.terminal.username": "Nazwa użytkownika"
}

View File

@@ -1,41 +1 @@
{
"settings.common.save": "Salvar",
"settings.server.domain.title": "Domínio do Servidor",
"settings.server.domain.description": "Configure o domínio do servidor",
"settings.server.domain.form.domain": "Domínio",
"settings.server.domain.form.letsEncryptEmail": "Email do Let's Encrypt",
"settings.server.domain.form.certificate.label": "Certificado",
"settings.server.domain.form.certificate.placeholder": "Selecione um Certificado",
"settings.server.domain.form.certificateOptions.none": "Nenhum",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Padrão)",
"settings.server.webServer.title": "Servidor web",
"settings.server.webServer.description": "Limpar e recarregar servidor web.",
"settings.server.webServer.actions": "Ações",
"settings.server.webServer.reload": "Recarregar",
"settings.server.webServer.watchLogs": "Ver logs",
"settings.server.webServer.updateServerIp": "Atualizar IP do Servidor",
"settings.server.webServer.server.label": "Servidor",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Alterar Env",
"settings.server.webServer.storage.label": "Armazenamento",
"settings.server.webServer.storage.cleanUnusedImages": "Limpar imagens não utilizadas",
"settings.server.webServer.storage.cleanUnusedVolumes": "Limpar volumes não utilizados",
"settings.server.webServer.storage.cleanStoppedContainers": "Limpar containers parados",
"settings.server.webServer.storage.cleanDockerBuilder": "Limpar Docker Builder & System",
"settings.server.webServer.storage.cleanMonitoring": "Limpar Monitoramento",
"settings.server.webServer.storage.cleanAll": "Limpar Tudo",
"settings.profile.title": "Conta",
"settings.profile.description": "Altere os detalhes do seu perfil aqui.",
"settings.profile.email": "Email",
"settings.profile.password": "Senha",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Aparencia",
"settings.appearance.description": "Personalize o tema do seu dashboard.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Selecione um tema para o dashboard",
"settings.appearance.themes.light": "Claro",
"settings.appearance.themes.dark": "Escuro",
"settings.appearance.themes.system": "Automático",
"settings.appearance.language": "Linguagem",
"settings.appearance.languageDescription": "Selecione o idioma do dashboard"
}
{}

View File

@@ -0,0 +1,44 @@
{
"settings.common.save": "Salvar",
"settings.server.domain.title": "Domínio do Servidor",
"settings.server.domain.description": "Configure o domínio do servidor",
"settings.server.domain.form.domain": "Domínio",
"settings.server.domain.form.letsEncryptEmail": "Email do Let's Encrypt",
"settings.server.domain.form.certificate.label": "Certificado",
"settings.server.domain.form.certificate.placeholder": "Selecione um Certificado",
"settings.server.domain.form.certificateOptions.none": "Nenhum",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Padrão)",
"settings.server.webServer.title": "Servidor web",
"settings.server.webServer.description": "Limpar e recarregar servidor web.",
"settings.server.webServer.actions": "Ações",
"settings.server.webServer.reload": "Recarregar",
"settings.server.webServer.watchLogs": "Ver logs",
"settings.server.webServer.updateServerIp": "Atualizar IP do Servidor",
"settings.server.webServer.server.label": "Servidor",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Alterar Env",
"settings.server.webServer.storage.label": "Armazenamento",
"settings.server.webServer.storage.cleanUnusedImages": "Limpar imagens não utilizadas",
"settings.server.webServer.storage.cleanUnusedVolumes": "Limpar volumes não utilizados",
"settings.server.webServer.storage.cleanStoppedContainers": "Limpar containers parados",
"settings.server.webServer.storage.cleanDockerBuilder": "Limpar Docker Builder & System",
"settings.server.webServer.storage.cleanMonitoring": "Limpar Monitoramento",
"settings.server.webServer.storage.cleanAll": "Limpar Tudo",
"settings.profile.title": "Conta",
"settings.profile.description": "Altere os detalhes do seu perfil aqui.",
"settings.profile.email": "Email",
"settings.profile.password": "Senha",
"settings.profile.avatar": "Avatar",
"settings.appearance.title": "Aparencia",
"settings.appearance.description": "Personalize o tema do seu dashboard.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Selecione um tema para o dashboard",
"settings.appearance.themes.light": "Claro",
"settings.appearance.themes.dark": "Escuro",
"settings.appearance.themes.system": "Automático",
"settings.appearance.language": "Linguagem",
"settings.appearance.languageDescription": "Selecione o idioma do dashboard"
}

View File

@@ -1,54 +1 @@
{
"settings.common.save": "Сохранить",
"settings.common.enterTerminal": "Открыть терминал",
"settings.server.domain.title": "Домен сервера",
"settings.server.domain.description": "Установите домен для вашего серверного приложения Dokploy.",
"settings.server.domain.form.domain": "Домен",
"settings.server.domain.form.letsEncryptEmail": "Email для Let's Encrypt",
"settings.server.domain.form.certificate.label": "Сертификат",
"settings.server.domain.form.certificate.placeholder": "Выберите сертификат",
"settings.server.domain.form.certificateOptions.none": "Нет",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Веб-сервер",
"settings.server.webServer.description": "Перезагрузка или очистка веб-сервера.",
"settings.server.webServer.actions": "Действия",
"settings.server.webServer.reload": "Перезагрузить",
"settings.server.webServer.watchLogs": "Просмотр логов",
"settings.server.webServer.updateServerIp": "Изменить IP адрес",
"settings.server.webServer.server.label": "Сервер",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Изменить переменные окружения",
"settings.server.webServer.traefik.managePorts": "Назначение портов",
"settings.server.webServer.traefik.managePortsDescription": "Добавить или удалить дополнительные порты для Traefik",
"settings.server.webServer.traefik.targetPort": "Внутренний порт",
"settings.server.webServer.traefik.publishedPort": "Внешний порт",
"settings.server.webServer.traefik.addPort": "Добавить порт",
"settings.server.webServer.traefik.portsUpdated": "Порты успешно обновлены",
"settings.server.webServer.traefik.portsUpdateError": "Не удалось обновить порты",
"settings.server.webServer.traefik.publishMode": "Режим сопоставления",
"settings.server.webServer.storage.label": "Дисковое пространство",
"settings.server.webServer.storage.cleanUnusedImages": "Очистить неиспользуемые образы",
"settings.server.webServer.storage.cleanUnusedVolumes": "Очистить неиспользуемые тома",
"settings.server.webServer.storage.cleanStoppedContainers": "Очистить остановленные контейнеры",
"settings.server.webServer.storage.cleanDockerBuilder": "Очистить Docker Builder и систему",
"settings.server.webServer.storage.cleanMonitoring": "Очистить мониторинг",
"settings.server.webServer.storage.cleanAll": "Очистить все",
"settings.profile.title": "Аккаунт",
"settings.profile.description": "Измените данные вашего профиля.",
"settings.profile.email": "Email",
"settings.profile.password": "Пароль",
"settings.profile.avatar": "Аватар",
"settings.appearance.title": "Внешний вид",
"settings.appearance.description": "Настройте тему Dokploy.",
"settings.appearance.theme": "Тема",
"settings.appearance.themeDescription": "Выберите тему системной панели",
"settings.appearance.themes.light": "Светлая",
"settings.appearance.themes.dark": "Темная",
"settings.appearance.themes.system": "Системная",
"settings.appearance.language": "Язык",
"settings.appearance.languageDescription": "Выберите язык для панели управления",
"settings.terminal.connectionSettings": "Настройки подключения",
"settings.terminal.ipAddress": "IP адрес",
"settings.terminal.port": "Порт",
"settings.terminal.username": "Имя пользователя"
}
{}

View File

@@ -0,0 +1,58 @@
{
"settings.common.save": "Сохранить",
"settings.common.enterTerminal": "Открыть терминал",
"settings.server.domain.title": "Домен сервера",
"settings.server.domain.description": "Установите домен для вашего серверного приложения Dokploy.",
"settings.server.domain.form.domain": "Домен",
"settings.server.domain.form.letsEncryptEmail": "Email для Let's Encrypt",
"settings.server.domain.form.certificate.label": "Сертификат",
"settings.server.domain.form.certificate.placeholder": "Выберите сертификат",
"settings.server.domain.form.certificateOptions.none": "Нет",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Веб-сервер",
"settings.server.webServer.description": "Перезагрузка или очистка веб-сервера.",
"settings.server.webServer.actions": "Действия",
"settings.server.webServer.reload": "Перезагрузить",
"settings.server.webServer.watchLogs": "Просмотр логов",
"settings.server.webServer.updateServerIp": "Изменить IP адрес",
"settings.server.webServer.server.label": "Сервер",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Изменить переменные окружения",
"settings.server.webServer.traefik.managePorts": "Назначение портов",
"settings.server.webServer.traefik.managePortsDescription": "Добавить или удалить дополнительные порты для Traefik",
"settings.server.webServer.traefik.targetPort": "Внутренний порт",
"settings.server.webServer.traefik.publishedPort": "Внешний порт",
"settings.server.webServer.traefik.addPort": "Добавить порт",
"settings.server.webServer.traefik.portsUpdated": "Порты успешно обновлены",
"settings.server.webServer.traefik.portsUpdateError": "Не удалось обновить порты",
"settings.server.webServer.traefik.publishMode": "Режим сопоставления",
"settings.server.webServer.storage.label": "Дисковое пространство",
"settings.server.webServer.storage.cleanUnusedImages": "Очистить неиспользуемые образы",
"settings.server.webServer.storage.cleanUnusedVolumes": "Очистить неиспользуемые тома",
"settings.server.webServer.storage.cleanStoppedContainers": "Очистить остановленные контейнеры",
"settings.server.webServer.storage.cleanDockerBuilder": "Очистить Docker Builder и систему",
"settings.server.webServer.storage.cleanMonitoring": "Очистить мониторинг",
"settings.server.webServer.storage.cleanAll": "Очистить все",
"settings.profile.title": "Аккаунт",
"settings.profile.description": "Измените данные вашего профиля.",
"settings.profile.email": "Email",
"settings.profile.password": "Пароль",
"settings.profile.avatar": "Аватар",
"settings.appearance.title": "Внешний вид",
"settings.appearance.description": "Настройте тему Dokploy.",
"settings.appearance.theme": "Тема",
"settings.appearance.themeDescription": "Выберите тему системной панели",
"settings.appearance.themes.light": "Светлая",
"settings.appearance.themes.dark": "Темная",
"settings.appearance.themes.system": "Системная",
"settings.appearance.language": "Язык",
"settings.appearance.languageDescription": "Выберите язык для панели управления",
"settings.terminal.connectionSettings": "Настройки подключения",
"settings.terminal.ipAddress": "IP адрес",
"settings.terminal.port": "Порт",
"settings.terminal.username": "Имя пользователя"
}

View File

@@ -1,41 +1 @@
{
"settings.common.save": "Kaydet",
"settings.server.domain.title": "Sunucu Alanı",
"settings.server.domain.description": "Sunucu uygulamanıza bir alan adı ekleyin.",
"settings.server.domain.form.domain": "Alan Adı",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt E-postası",
"settings.server.domain.form.certificate.label": "Sertifika",
"settings.server.domain.form.certificate.placeholder": "Bir sertifika seçin",
"settings.server.domain.form.certificateOptions.none": "Hiçbiri",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Varsayılan)",
"settings.server.webServer.title": "Web Sunucusu",
"settings.server.webServer.description": "Web sunucusunu yeniden yükleyin veya temizleyin.",
"settings.server.webServer.actions": "İşlemler",
"settings.server.webServer.reload": "Yeniden Yükle",
"settings.server.webServer.watchLogs": "Günlükleri İzle",
"settings.server.webServer.updateServerIp": "Sunucu IP'sini Güncelle",
"settings.server.webServer.server.label": "Sunucu",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Env Değiştir",
"settings.server.webServer.storage.label": "Alan",
"settings.server.webServer.storage.cleanUnusedImages": "Kullanılmayan görüntüleri temizle",
"settings.server.webServer.storage.cleanUnusedVolumes": "Kullanılmayan birimleri temizle",
"settings.server.webServer.storage.cleanStoppedContainers": "Durmuş konteynerleri temizle",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker Builder ve Sistemi Temizle",
"settings.server.webServer.storage.cleanMonitoring": "İzlemeyi Temizle",
"settings.server.webServer.storage.cleanAll": "Hepsini temizle",
"settings.profile.title": "Hesap",
"settings.profile.description": "Profil detaylarınızı buradan değiştirebilirsiniz.",
"settings.profile.email": "E-posta",
"settings.profile.password": "Şifre",
"settings.profile.avatar": "Profil Resmi",
"settings.appearance.title": "Görünüm",
"settings.appearance.description": "Kontrol panelinin temasını özelleştirin.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Kontrol paneli için bir tema seçin",
"settings.appearance.themes.light": "Açık",
"settings.appearance.themes.dark": "Koyu",
"settings.appearance.themes.system": "Sistem",
"settings.appearance.language": "Dil",
"settings.appearance.languageDescription": "Kontrol paneli için bir dil seçin"
}
{}

View File

@@ -0,0 +1,44 @@
{
"settings.common.save": "Kaydet",
"settings.server.domain.title": "Sunucu Alanı",
"settings.server.domain.description": "Sunucu uygulamanıza bir alan adı ekleyin.",
"settings.server.domain.form.domain": "Alan Adı",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt E-postası",
"settings.server.domain.form.certificate.label": "Sertifika",
"settings.server.domain.form.certificate.placeholder": "Bir sertifika seçin",
"settings.server.domain.form.certificateOptions.none": "Hiçbiri",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (Varsayılan)",
"settings.server.webServer.title": "Web Sunucusu",
"settings.server.webServer.description": "Web sunucusunu yeniden yükleyin veya temizleyin.",
"settings.server.webServer.actions": "İşlemler",
"settings.server.webServer.reload": "Yeniden Yükle",
"settings.server.webServer.watchLogs": "Günlükleri İzle",
"settings.server.webServer.updateServerIp": "Sunucu IP'sini Güncelle",
"settings.server.webServer.server.label": "Sunucu",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Env Değiştir",
"settings.server.webServer.storage.label": "Alan",
"settings.server.webServer.storage.cleanUnusedImages": "Kullanılmayan görüntüleri temizle",
"settings.server.webServer.storage.cleanUnusedVolumes": "Kullanılmayan birimleri temizle",
"settings.server.webServer.storage.cleanStoppedContainers": "Durmuş konteynerleri temizle",
"settings.server.webServer.storage.cleanDockerBuilder": "Docker Builder ve Sistemi Temizle",
"settings.server.webServer.storage.cleanMonitoring": "İzlemeyi Temizle",
"settings.server.webServer.storage.cleanAll": "Hepsini temizle",
"settings.profile.title": "Hesap",
"settings.profile.description": "Profil detaylarınızı buradan değiştirebilirsiniz.",
"settings.profile.email": "E-posta",
"settings.profile.password": "Şifre",
"settings.profile.avatar": "Profil Resmi",
"settings.appearance.title": "Görünüm",
"settings.appearance.description": "Kontrol panelinin temasını özelleştirin.",
"settings.appearance.theme": "Tema",
"settings.appearance.themeDescription": "Kontrol paneli için bir tema seçin",
"settings.appearance.themes.light": "Açık",
"settings.appearance.themes.dark": "Koyu",
"settings.appearance.themes.system": "Sistem",
"settings.appearance.language": "Dil",
"settings.appearance.languageDescription": "Kontrol paneli için bir dil seçin"
}

View File

@@ -1,54 +1 @@
{
"settings.common.save": "Зберегти",
"settings.common.enterTerminal": "Увійти в термінал",
"settings.server.domain.title": "Домен сервера",
"settings.server.domain.description": "Додайте домен до вашого серверного застосунку.",
"settings.server.domain.form.domain": "Домен",
"settings.server.domain.form.letsEncryptEmail": "Електронна пошта для Let's Encrypt",
"settings.server.domain.form.certificate.label": "Постачальник сертифікатів",
"settings.server.domain.form.certificate.placeholder": "Оберіть сертифікат",
"settings.server.domain.form.certificateOptions.none": "Відсутній",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Веб-сервер",
"settings.server.webServer.description": "Перезавантажте або очистьте веб-сервер.",
"settings.server.webServer.actions": "Дії",
"settings.server.webServer.reload": "Перезавантажити",
"settings.server.webServer.watchLogs": "Перегляд логів",
"settings.server.webServer.updateServerIp": "Оновити IP-адресу сервера",
"settings.server.webServer.server.label": "Сервер",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Змінити середовище",
"settings.server.webServer.traefik.managePorts": "Додаткові порти",
"settings.server.webServer.traefik.managePortsDescription": "Додайте або видаліть порти для Traefik",
"settings.server.webServer.traefik.targetPort": "Цільовий порт",
"settings.server.webServer.traefik.publishedPort": "Опублікований порт",
"settings.server.webServer.traefik.addPort": "Додати порт",
"settings.server.webServer.traefik.portsUpdated": "Порти успішно оновлено",
"settings.server.webServer.traefik.portsUpdateError": "Не вдалося оновити порти",
"settings.server.webServer.traefik.publishMode": "Режим публікації",
"settings.server.webServer.storage.label": "Дисковий простір",
"settings.server.webServer.storage.cleanUnusedImages": "Очистити невикористані образи",
"settings.server.webServer.storage.cleanUnusedVolumes": "Очистити невикористані томи",
"settings.server.webServer.storage.cleanStoppedContainers": "Очистити зупинені контейнери",
"settings.server.webServer.storage.cleanDockerBuilder": "Очистити Docker Builder і систему",
"settings.server.webServer.storage.cleanMonitoring": "Очистити моніторинг",
"settings.server.webServer.storage.cleanAll": "Очистити все",
"settings.profile.title": "Обліковий запис",
"settings.profile.description": "Змініть дані вашого профілю.",
"settings.profile.email": "Електронна пошта",
"settings.profile.password": "Пароль",
"settings.profile.avatar": "Аватар",
"settings.appearance.title": "Зовнішній вигляд",
"settings.appearance.description": "Налаштуйте тему вашої панелі керування.",
"settings.appearance.theme": "Тема",
"settings.appearance.themeDescription": "Оберіть тему для вашої панелі керування",
"settings.appearance.themes.light": "Світла",
"settings.appearance.themes.dark": "Темна",
"settings.appearance.themes.system": "Системна",
"settings.appearance.language": "Мова",
"settings.appearance.languageDescription": "Оберіть мову для вашої панелі керування",
"settings.terminal.connectionSettings": "Налаштування з'єднання",
"settings.terminal.ipAddress": "IP-адреса",
"settings.terminal.port": "Порт",
"settings.terminal.username": "Ім'я користувача"
}
{}

View File

@@ -0,0 +1,58 @@
{
"settings.common.save": "Зберегти",
"settings.common.enterTerminal": "Увійти в термінал",
"settings.server.domain.title": "Домен сервера",
"settings.server.domain.description": "Додайте домен до вашого серверного застосунку.",
"settings.server.domain.form.domain": "Домен",
"settings.server.domain.form.letsEncryptEmail": "Електронна пошта для Let's Encrypt",
"settings.server.domain.form.certificate.label": "Постачальник сертифікатів",
"settings.server.domain.form.certificate.placeholder": "Оберіть сертифікат",
"settings.server.domain.form.certificateOptions.none": "Відсутній",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "Веб-сервер",
"settings.server.webServer.description": "Перезавантажте або очистьте веб-сервер.",
"settings.server.webServer.actions": "Дії",
"settings.server.webServer.reload": "Перезавантажити",
"settings.server.webServer.watchLogs": "Перегляд логів",
"settings.server.webServer.updateServerIp": "Оновити IP-адресу сервера",
"settings.server.webServer.server.label": "Сервер",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "Змінити середовище",
"settings.server.webServer.traefik.managePorts": "Додаткові порти",
"settings.server.webServer.traefik.managePortsDescription": "Додайте або видаліть порти для Traefik",
"settings.server.webServer.traefik.targetPort": "Цільовий порт",
"settings.server.webServer.traefik.publishedPort": "Опублікований порт",
"settings.server.webServer.traefik.addPort": "Додати порт",
"settings.server.webServer.traefik.portsUpdated": "Порти успішно оновлено",
"settings.server.webServer.traefik.portsUpdateError": "Не вдалося оновити порти",
"settings.server.webServer.traefik.publishMode": "Режим публікації",
"settings.server.webServer.storage.label": "Дисковий простір",
"settings.server.webServer.storage.cleanUnusedImages": "Очистити невикористані образи",
"settings.server.webServer.storage.cleanUnusedVolumes": "Очистити невикористані томи",
"settings.server.webServer.storage.cleanStoppedContainers": "Очистити зупинені контейнери",
"settings.server.webServer.storage.cleanDockerBuilder": "Очистити Docker Builder і систему",
"settings.server.webServer.storage.cleanMonitoring": "Очистити моніторинг",
"settings.server.webServer.storage.cleanAll": "Очистити все",
"settings.profile.title": "Обліковий запис",
"settings.profile.description": "Змініть дані вашого профілю.",
"settings.profile.email": "Електронна пошта",
"settings.profile.password": "Пароль",
"settings.profile.avatar": "Аватар",
"settings.appearance.title": "Зовнішній вигляд",
"settings.appearance.description": "Налаштуйте тему вашої панелі керування.",
"settings.appearance.theme": "Тема",
"settings.appearance.themeDescription": "Оберіть тему для вашої панелі керування",
"settings.appearance.themes.light": "Світла",
"settings.appearance.themes.dark": "Темна",
"settings.appearance.themes.system": "Системна",
"settings.appearance.language": "Мова",
"settings.appearance.languageDescription": "Оберіть мову для вашої панелі керування",
"settings.terminal.connectionSettings": "Налаштування з'єднання",
"settings.terminal.ipAddress": "IP-адреса",
"settings.terminal.port": "Порт",
"settings.terminal.username": "Ім'я користувача"
}

View File

@@ -1,231 +1 @@
{
"auth.signIn": "登录",
"auth.signInDescription": "请输入您的邮箱和密码登录",
"auth.signInWithGoogle": "使用 Google 登录",
"auth.signInWithGithub": "使用 GitHub 登录",
"auth.email": "邮箱",
"auth.password": "密码",
"auth.password.placeholder": "请输入密码",
"auth.login": "登录",
"auth.forgetPassword": "忘记密码?",
"auth.createAccount": "创建账号",
"auth.twoFactorCode": "两步认证",
"auth.twoFactorCodeDescription": "请输入您的认证器应用中的6位数字验证码",
"auth.lostAuthenticator": "无法访问认证器应用?",
"auth.back": "返回",
"auth.verify": "验证",
"auth.enterBackupCode": "输入备用码",
"auth.enterBackupCodeDescription": "输入备用码以访问您的账户",
"auth.backupCode": "备用码",
"auth.backupCode.placeholder": "请输入您的备用码",
"auth.backupCodeDescription": "输入您在设置两步认证时收到的备用码",
"auth.cancel": "取消",
"auth.invalidTwoFactorCode": "请输入有效的6位数字验证码",
"auth.twoFactorVerificationError": "验证两步认证码时发生错误",
"auth.invalidBackupCode": "请输入有效的备用码",
"auth.backupCodeVerificationError": "验证备用码时发生错误",
"auth.githubSignInError": "使用 GitHub 登录时发生错误",
"auth.googleSignInError": "使用 Google 登录时发生错误",
"auth.unknownError": "未知错误",
"common.side.home": "主页",
"common.side.settings": "设置",
"common.side.extra": "其他",
"common.side.projects": "项目",
"common.side.monitoring": "监控",
"common.side.traefik": "Traefik",
"common.side.docker": "Docker",
"common.side.swarm": "Swarm",
"common.side.requests": "请求",
"common.side.web-server": "本地服务器",
"common.side.profile": "个人资料",
"common.side.remote-servers": "远程服务器",
"common.side.users": "用户",
"common.side.ssh-keys": "SSH 密钥",
"common.side.ai": "AI",
"common.side.git": "Git 集成",
"common.side.registry": "注册表",
"common.side.s3-destinations": "S3 存储",
"common.side.certificates": "证书",
"common.side.cluster": "集群",
"common.side.notifications": "通知",
"common.side.billing": "账单",
"common.side.documentation": "文档",
"common.side.support": "支持",
"common.side.sponsor": "赞助",
"common.side.invitations.pending-invitations": "待处理邀请",
"common.side.invitations.no-pending-invitations": "没有待处理的邀请",
"common.side.invitations.accept-invitation": "接受邀请",
"common.side.invitations.confirm-accept-invitation": "您确定要接受此邀请吗?",
"common.side.invitations.error-accepting-invitation": "接受邀请时出错",
"common.side.invitations.invitation-accepted": "邀请已成功接受",
"common.side.invitations.expires": "有效期:{{expireDate}}",
"common.side.invitations.role": "角色:{{role}}",
"common.side.organizations": "组织",
"common.side.organizations.select-organization": "选择组织",
"common.side.organizations.delete-organization": "删除组织",
"common.side.organizations.confirm-delete-organization": "您确定要删除此组织吗?",
"common.side.organizations.organization-deleted": "组织已成功删除",
"common.side.organizations.error-deleting-organization": "删除组织时出错",
"common.side.organizations.createOrganization": "创建组织",
"common.side.organizations.updateOrganization": "更新组织",
"common.side.organizations.createOrganizationDescription": "创建一个新组织来管理您的项目。",
"common.side.organizations.updateOrganizationDescription": "更新组织名称和标志",
"common.side.organizations.name": "名称",
"common.side.organizations.name.placeholder": "请输入组织名称",
"common.side.organizations.logoURL": "Logo 图片地址",
"common.side.organizations.createSuccess": "组织创建成功",
"common.side.organizations.updateSuccess": "组织更新成功",
"common.side.organizations.createFailed": "创建组织失败",
"common.side.organizations.updateFailed": "更新组织失败",
"common.account": "账户",
"common.account.mine": "我的账户",
"common.account.logout": "注销",
"common.account.selectLanguage": "选择语言",
"home.projects.title": "项目",
"home.projects.description": "创建和管理您的项目",
"settings.common.save": "保存",
"settings.common.enterTerminal": "进入终端",
"settings.server.domain.title": "域名设置",
"settings.server.domain.description": "添加域名到服务器",
"settings.server.domain.form.domain": "域名",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt 邮箱",
"settings.server.domain.form.certificate.label": "证书",
"settings.server.domain.form.certificate.placeholder": "选择一个证书",
"settings.server.domain.form.certificateOptions.none": "无",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "服务器设置",
"settings.server.webServer.description": "管理服务器",
"settings.server.webServer.actions": "操作",
"settings.server.webServer.reload": "重新加载",
"settings.server.webServer.watchLogs": "查看日志",
"settings.server.webServer.updateServerIp": "更新服务器 IP",
"settings.server.webServer.server.label": "服务器",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "修改环境变量",
"settings.server.webServer.traefik.managePorts": "端口转发",
"settings.server.webServer.traefik.managePortsDescription": "添加或删除 Traefik 的其他端口",
"settings.server.webServer.traefik.targetPort": "目标端口",
"settings.server.webServer.traefik.publishedPort": "对外端口",
"settings.server.webServer.traefik.addPort": "添加端口",
"settings.server.webServer.traefik.portsUpdated": "端口更新成功",
"settings.server.webServer.traefik.portsUpdateError": "端口更新失败",
"settings.server.webServer.traefik.publishMode": "端口映射",
"settings.server.webServer.storage.label": "存储空间",
"settings.server.webServer.storage.cleanUnusedImages": "清理未使用的镜像",
"settings.server.webServer.storage.cleanUnusedVolumes": "清理未使用的卷",
"settings.server.webServer.storage.cleanStoppedContainers": "清理已停止的容器",
"settings.server.webServer.storage.cleanDockerBuilder": "清理 Docker Builder 与 系统缓存",
"settings.server.webServer.storage.cleanMonitoring": "清理监控数据",
"settings.server.webServer.storage.cleanAll": "清理所有内容",
"settings.profile.title": "账户",
"settings.profile.description": "更改您的个人资料",
"settings.profile.email": "邮箱",
"settings.profile.oldPassword": "旧密码",
"settings.profile.newPassword": "新密码",
"settings.profile.password": "密码",
"settings.profile.avatar": "头像",
"settings.2fa.enable2fa": "启用 2FA",
"settings.2fa.title": "2FA 设置",
"settings.2fa.enterPassword": "输入您的密码以开始 2FA 设置",
"settings.2fa.scanQrCodeAndVerify": "扫描二维码并使用您的身份验证器应用程序进行验证",
"settings.2fa.password": "密码",
"settings.2fa.enterPasswordPlaceholder": "输入您的密码",
"settings.2fa.enterPasswordDescription": "输入您的密码以启用 2FA",
"settings.2fa.continue": "继续",
"settings.2fa.scanQrCode": "使用您的身份验证器应用程序扫描此二维码",
"settings.2fa.qrCodeAlt": "2FA 二维码",
"settings.2fa.cantScanQrCode": "无法扫描二维码?",
"settings.2fa.backupCodes": "备份代码",
"settings.2fa.saveBackupCodes": "将这些备份代码保存在安全的地方。如果您丢失了身份验证设备,可以使用它们访问您的帐户。",
"settings.2fa.verificationCode": "验证码",
"settings.2fa.enterVerificationCode": "输入您的身份验证器应用程序中的 6 位数代码",
"settings.2fa.errorSettingUp": "设置 2FA 时出错",
"settings.2fa.errorVerifyingPassword": "验证密码时出错",
"settings.2fa.invalidCode": "无效的代码。请再试一次。",
"settings.2fa.invalidVerificationCode": "无效的验证码",
"settings.2fa.success": "2FA 配置成功",
"settings.2fa.connectionError": "连接错误。请检查您的互联网连接。",
"settings.2fa.errorVerifyingCode": "验证代码时出错",
"settings.2fa.errorVerifying2faCode": "验证 2FA 代码时出错",
"settings.appearance.title": "外观",
"settings.appearance.description": "自定义面板主题",
"settings.appearance.theme": "主题",
"settings.appearance.themeDescription": "选择面板主题",
"settings.appearance.themes.light": "明亮",
"settings.appearance.themes.dark": "黑暗",
"settings.appearance.themes.system": "系统主题",
"settings.appearance.language": "语言",
"settings.appearance.languageDescription": "选择面板语言",
"settings.terminal.connectionSettings": "终端设置",
"settings.terminal.ipAddress": "IP",
"settings.terminal.port": "端口",
"settings.terminal.username": "用户名",
"settings.api.apiCliKeys": "API/CLI 密钥",
"settings.api.generateAndManageKeys": "生成和管理 API 密钥以访问 API/CLI",
"settings.api.swaggerApi": "Swagger API:",
"settings.api.view": "查看",
"settings.api.created": "创建于",
"settings.api.ago": "前",
"settings.api.expiresIn": "过期于",
"settings.api.deleteApiKey": "删除 API 密钥",
"settings.api.deleteApiKeyDescription": "您确定要删除此 API 密钥吗?此操作无法撤销。",
"settings.api.apiKeyDeleted": "API 密钥删除成功",
"settings.api.errorDeletingApiKey": "删除 API 密钥时出错",
"settings.api.noApiKeysFound": "未找到 API 密钥",
"settings.api.errorGeneratingApiKey": "生成 API 密钥失败",
"settings.api.generateNewKey": "生成新密钥",
"settings.api.generateApiKey": "生成 API 密钥",
"settings.api.createNewApiKeyDescription": "创建一个新的 API 密钥以访问 API。您可以设置过期日期和自定义前缀以便更好地组织。",
"settings.api.name": "名称",
"settings.api.namePlaceholder": "我的 API 密钥",
"settings.api.prefix": "前缀",
"settings.api.prefixPlaceholder": "我的应用",
"settings.api.expiration": "过期时间",
"settings.api.selectExpirationTime": "选择过期时间",
"settings.api.expirationOptions.Never": "从不过期",
"settings.api.expirationOptions.1 day": "1 天",
"settings.api.expirationOptions.7 days": "7 天",
"settings.api.expirationOptions.30 days": "30 天",
"settings.api.expirationOptions.90 days": "90 天",
"settings.api.expirationOptions.1 year": "1 年",
"settings.api.organization": "组织",
"settings.api.selectOrganization": "选择组织",
"settings.api.rateLimiting": "速率限制",
"settings.api.enableRateLimiting": "启用速率限制",
"settings.api.limitRequestsDescription": "限制在时间窗口内的请求数量",
"settings.api.timeWindow": "时间窗口",
"settings.api.selectTimeWindow": "选择时间窗口",
"settings.api.timeWindowOptions.1 minute": "1 分钟",
"settings.api.timeWindowOptions.5 minutes": "5 分钟",
"settings.api.timeWindowOptions.15 minutes": "15 分钟",
"settings.api.timeWindowOptions.30 minutes": "30 分钟",
"settings.api.timeWindowOptions.1 hour": "1 小时",
"settings.api.timeWindowOptions.1 day": "1 天",
"settings.api.timeWindowDescription": "请求计数的持续时间",
"settings.api.maxRequests": "最大请求数",
"settings.api.maxRequestsPlaceholder": "100",
"settings.api.maxRequestsDescription": "时间窗口内允许的最大请求数",
"settings.api.requestLimiting": "请求限制",
"settings.api.totalRequestLimit": "总请求限制",
"settings.api.totalRequestLimitPlaceholder": "留空表示无限制",
"settings.api.totalRequestLimitDescription": "允许的总请求数(留空表示无限制)",
"settings.api.refillAmount": "补充数量",
"settings.api.refillAmountPlaceholder": "补充数量",
"settings.api.refillAmountDescription": "每次补充时添加的请求数量",
"settings.api.refillInterval": "补充间隔",
"settings.api.selectRefillInterval": "选择补充间隔",
"settings.api.refillIntervalOptions.1 hour": "1 小时",
"settings.api.refillIntervalOptions.6 hours": "6 小时",
"settings.api.refillIntervalOptions.12 hours": "12 小时",
"settings.api.refillIntervalOptions.1 day": "1 天",
"settings.api.refillIntervalOptions.7 days": "7 天",
"settings.api.refillIntervalOptions.30 days": "30 天",
"settings.api.refillIntervalDescription": "请求限制的补充频率",
"settings.api.cancel": "取消",
"settings.api.generate": "生成",
"settings.api.apiKeyGeneratedSuccessfully": "API 密钥生成成功",
"settings.api.copyApiKeyNow": "请立即复制您的 API 密钥。您将无法再次查看它!",
"settings.api.apiKeyCopied": "API 密钥已复制到剪贴板",
"settings.api.copyToClipboard": "复制到剪贴板",
"settings.api.close": "关闭"
}
{}

View File

@@ -0,0 +1,58 @@
{
"settings.common.save": "保存",
"settings.common.enterTerminal": "进入终端",
"settings.server.domain.title": "域名设置",
"settings.server.domain.description": "添加域名到服务器",
"settings.server.domain.form.domain": "域名",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt 邮箱",
"settings.server.domain.form.certificate.label": "证书",
"settings.server.domain.form.certificate.placeholder": "选择一个证书",
"settings.server.domain.form.certificateOptions.none": "无",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "服务器设置",
"settings.server.webServer.description": "管理服务器",
"settings.server.webServer.actions": "操作",
"settings.server.webServer.reload": "重新加载",
"settings.server.webServer.watchLogs": "查看日志",
"settings.server.webServer.updateServerIp": "更新服务器 IP",
"settings.server.webServer.server.label": "服务器",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "修改环境变量",
"settings.server.webServer.traefik.managePorts": "端口转发",
"settings.server.webServer.traefik.managePortsDescription": "添加或删除 Traefik 的其他端口",
"settings.server.webServer.traefik.targetPort": "目标端口",
"settings.server.webServer.traefik.publishedPort": "对外端口",
"settings.server.webServer.traefik.addPort": "添加端口",
"settings.server.webServer.traefik.portsUpdated": "端口更新成功",
"settings.server.webServer.traefik.portsUpdateError": "端口更新失败",
"settings.server.webServer.traefik.publishMode": "端口映射",
"settings.server.webServer.storage.label": "存储空间",
"settings.server.webServer.storage.cleanUnusedImages": "清理未使用的镜像",
"settings.server.webServer.storage.cleanUnusedVolumes": "清理未使用的卷",
"settings.server.webServer.storage.cleanStoppedContainers": "清理已停止的容器",
"settings.server.webServer.storage.cleanDockerBuilder": "清理 Docker Builder 与 系统缓存",
"settings.server.webServer.storage.cleanMonitoring": "清理监控数据",
"settings.server.webServer.storage.cleanAll": "清理所有内容",
"settings.profile.title": "账户",
"settings.profile.description": "更改您的个人资料",
"settings.profile.email": "邮箱",
"settings.profile.password": "密码",
"settings.profile.avatar": "头像",
"settings.appearance.title": "外观",
"settings.appearance.description": "自定义面板主题",
"settings.appearance.theme": "主题",
"settings.appearance.themeDescription": "选择面板主题",
"settings.appearance.themes.light": "明亮",
"settings.appearance.themes.dark": "黑暗",
"settings.appearance.themes.system": "系统主题",
"settings.appearance.language": "语言",
"settings.appearance.languageDescription": "选择面板语言",
"settings.terminal.connectionSettings": "终端设置",
"settings.terminal.ipAddress": "IP",
"settings.terminal.port": "端口",
"settings.terminal.username": "用户名"
}

View File

@@ -1,54 +1 @@
{
"settings.common.save": "儲存",
"settings.common.enterTerminal": "進入終端機",
"settings.server.domain.title": "網域設定",
"settings.server.domain.description": "新增網域至伺服器",
"settings.server.domain.form.domain": "網域",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt 信箱",
"settings.server.domain.form.certificate.label": "憑證",
"settings.server.domain.form.certificate.placeholder": "選擇一個憑證",
"settings.server.domain.form.certificateOptions.none": "無",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "伺服器設定",
"settings.server.webServer.description": "管理伺服器",
"settings.server.webServer.actions": "操作",
"settings.server.webServer.reload": "重新載入",
"settings.server.webServer.watchLogs": "查看日誌",
"settings.server.webServer.updateServerIp": "更新伺服器 IP",
"settings.server.webServer.server.label": "伺服器",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "修改環境變數",
"settings.server.webServer.traefik.managePorts": "埠轉發",
"settings.server.webServer.traefik.managePortsDescription": "新增或移除 Traefik 的其他埠",
"settings.server.webServer.traefik.targetPort": "目標埠",
"settings.server.webServer.traefik.publishedPort": "對外埠",
"settings.server.webServer.traefik.addPort": "新增埠",
"settings.server.webServer.traefik.portsUpdated": "埠更新成功",
"settings.server.webServer.traefik.portsUpdateError": "埠更新失敗",
"settings.server.webServer.traefik.publishMode": "埠對應模式",
"settings.server.webServer.storage.label": "儲存空間",
"settings.server.webServer.storage.cleanUnusedImages": "清理未使用的映像檔",
"settings.server.webServer.storage.cleanUnusedVolumes": "清理未使用的卷",
"settings.server.webServer.storage.cleanStoppedContainers": "清理已停止的容器",
"settings.server.webServer.storage.cleanDockerBuilder": "清理 Docker Builder 和系統快取",
"settings.server.webServer.storage.cleanMonitoring": "清理監控數據",
"settings.server.webServer.storage.cleanAll": "清理所有內容",
"settings.profile.title": "帳戶",
"settings.profile.description": "更改您的個人資料",
"settings.profile.email": "信箱",
"settings.profile.password": "密碼",
"settings.profile.avatar": "頭像",
"settings.appearance.title": "外觀",
"settings.appearance.description": "自訂面板主題",
"settings.appearance.theme": "主題",
"settings.appearance.themeDescription": "選擇面板主題",
"settings.appearance.themes.light": "明亮",
"settings.appearance.themes.dark": "黑暗",
"settings.appearance.themes.system": "系統",
"settings.appearance.language": "語言",
"settings.appearance.languageDescription": "選擇面板語言",
"settings.terminal.connectionSettings": "終端機設定",
"settings.terminal.ipAddress": "IP 位址",
"settings.terminal.port": "埠",
"settings.terminal.username": "使用者名稱"
}
{}

View File

@@ -0,0 +1,58 @@
{
"settings.common.save": "儲存",
"settings.common.enterTerminal": "進入終端機",
"settings.server.domain.title": "網域設定",
"settings.server.domain.description": "新增網域至伺服器",
"settings.server.domain.form.domain": "網域",
"settings.server.domain.form.letsEncryptEmail": "Let's Encrypt 信箱",
"settings.server.domain.form.certificate.label": "憑證",
"settings.server.domain.form.certificate.placeholder": "選擇一個憑證",
"settings.server.domain.form.certificateOptions.none": "無",
"settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt",
"settings.server.webServer.title": "伺服器設定",
"settings.server.webServer.description": "管理伺服器",
"settings.server.webServer.actions": "操作",
"settings.server.webServer.reload": "重新載入",
"settings.server.webServer.watchLogs": "查看日誌",
"settings.server.webServer.updateServerIp": "更新伺服器 IP",
"settings.server.webServer.server.label": "伺服器",
"settings.server.webServer.traefik.label": "Traefik",
"settings.server.webServer.traefik.modifyEnv": "修改環境變數",
"settings.server.webServer.traefik.managePorts": "埠轉發",
"settings.server.webServer.traefik.managePortsDescription": "新增或移除 Traefik 的其他埠",
"settings.server.webServer.traefik.targetPort": "目標埠",
"settings.server.webServer.traefik.publishedPort": "對外埠",
"settings.server.webServer.traefik.addPort": "新增埠",
"settings.server.webServer.traefik.portsUpdated": "埠更新成功",
"settings.server.webServer.traefik.portsUpdateError": "埠更新失敗",
"settings.server.webServer.traefik.publishMode": "埠對應模式",
"settings.server.webServer.storage.label": "儲存空間",
"settings.server.webServer.storage.cleanUnusedImages": "清理未使用的映像檔",
"settings.server.webServer.storage.cleanUnusedVolumes": "清理未使用的卷",
"settings.server.webServer.storage.cleanStoppedContainers": "清理已停止的容器",
"settings.server.webServer.storage.cleanDockerBuilder": "清理 Docker Builder 和系統快取",
"settings.server.webServer.storage.cleanMonitoring": "清理監控數據",
"settings.server.webServer.storage.cleanAll": "清理所有內容",
"settings.profile.title": "帳戶",
"settings.profile.description": "更改您的個人資料",
"settings.profile.email": "信箱",
"settings.profile.password": "密碼",
"settings.profile.avatar": "頭像",
"settings.appearance.title": "外觀",
"settings.appearance.description": "自訂面板主題",
"settings.appearance.theme": "主題",
"settings.appearance.themeDescription": "選擇面板主題",
"settings.appearance.themes.light": "明亮",
"settings.appearance.themes.dark": "黑暗",
"settings.appearance.themes.system": "系統",
"settings.appearance.language": "語言",
"settings.appearance.languageDescription": "選擇面板語言",
"settings.terminal.connectionSettings": "終端機設定",
"settings.terminal.ipAddress": "IP 位址",
"settings.terminal.port": "埠",
"settings.terminal.username": "使用者名稱"
}

View File

@@ -8,8 +8,11 @@ export function getLocale(cookies: NextApiRequestCookies) {
import { Languages } from "@/lib/languages";
import { serverSideTranslations as originalServerSideTranslations } from "next-i18next/serverSideTranslations";
export const serverSideTranslations = (locale: string) =>
originalServerSideTranslations(locale, ["common"], {
export const serverSideTranslations = (
locale: string,
namespaces = ["common"],
) =>
originalServerSideTranslations(locale, namespaces, {
fallbackLng: "en",
keySeparator: false,
i18n: {
@@ -17,5 +20,4 @@ export const serverSideTranslations = (locale: string) =>
locales: Object.values(Languages).map((language) => language.code),
localeDetection: false,
},
reloadOnPrerender: process.env.NODE_ENV === "development",
});

View File

@@ -54,7 +54,7 @@
"date-fns": "3.6.0",
"dockerode": "4.0.2",
"dotenv": "16.4.5",
"drizzle-orm": "^0.39.1",
"drizzle-orm": "^0.39.1",
"drizzle-zod": "0.5.1",
"hi-base32": "^0.5.1",
"js-yaml": "4.1.0",