mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
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:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
)}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
)}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -52,7 +52,7 @@ interface Props {
|
||||
}
|
||||
|
||||
const LocalServerConfig = ({ onSave }: Props) => {
|
||||
const { t } = useTranslation();
|
||||
const { t } = useTranslation("settings");
|
||||
|
||||
const form = useForm<Schema>({
|
||||
defaultValues: getLocalServerData(),
|
||||
|
||||
@@ -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>({
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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) => (
|
||||
|
||||
@@ -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"];
|
||||
|
||||
@@ -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: {},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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: {},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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: {},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ export async function getServerSideProps(
|
||||
return {
|
||||
props: {
|
||||
trpcState: helpers.dehydrate(),
|
||||
...(await serverSideTranslations(locale)),
|
||||
...(await serverSideTranslations(locale, ["settings"])),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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: {},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ export async function getServerSideProps(
|
||||
return {
|
||||
props: {
|
||||
trpcState: helpers.dehydrate(),
|
||||
...(await serverSideTranslations(locale)),
|
||||
...(await serverSideTranslations(locale, ["settings"])),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ export async function getServerSideProps(
|
||||
return {
|
||||
props: {
|
||||
trpcState: helpers.dehydrate(),
|
||||
...(await serverSideTranslations(locale)),
|
||||
...(await serverSideTranslations(locale, ["settings"])),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ export async function getServerSideProps(
|
||||
return {
|
||||
props: {
|
||||
trpcState: helpers.dehydrate(),
|
||||
...(await serverSideTranslations(locale)),
|
||||
...(await serverSideTranslations(locale, ["settings"])),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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: {},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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: {},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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: {},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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ı"
|
||||
}
|
||||
{}
|
||||
|
||||
58
apps/dokploy/public/locales/az/settings.json
Normal file
58
apps/dokploy/public/locales/az/settings.json
Normal 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ı"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
44
apps/dokploy/public/locales/de/settings.json
Normal file
44
apps/dokploy/public/locales/de/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
58
apps/dokploy/public/locales/en/settings.json
Normal file
58
apps/dokploy/public/locales/en/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
52
apps/dokploy/public/locales/es/settings.json
Normal file
52
apps/dokploy/public/locales/es/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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": "یک زبان برای داشبورد خود انتخاب کنید"
|
||||
}
|
||||
{}
|
||||
|
||||
44
apps/dokploy/public/locales/fa/settings.json
Normal file
44
apps/dokploy/public/locales/fa/settings.json
Normal 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": "یک زبان برای داشبورد خود انتخاب کنید"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
44
apps/dokploy/public/locales/fr/settings.json
Normal file
44
apps/dokploy/public/locales/fr/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
58
apps/dokploy/public/locales/id/settings.json
Normal file
58
apps/dokploy/public/locales/id/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
44
apps/dokploy/public/locales/it/settings.json
Normal file
44
apps/dokploy/public/locales/it/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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": "ダッシュボードの言語を選択してください"
|
||||
}
|
||||
{}
|
||||
|
||||
44
apps/dokploy/public/locales/ja/settings.json
Normal file
44
apps/dokploy/public/locales/ja/settings.json
Normal 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": "ダッシュボードの言語を選択してください"
|
||||
}
|
||||
@@ -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": "대시보드에서 사용할 언어 선택"
|
||||
}
|
||||
{}
|
||||
|
||||
44
apps/dokploy/public/locales/ko/settings.json
Normal file
44
apps/dokploy/public/locales/ko/settings.json
Normal 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": "대시보드에서 사용할 언어 선택"
|
||||
}
|
||||
@@ -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": "Жүйе тақтасының тілің таңдаңыз"
|
||||
}
|
||||
{}
|
||||
|
||||
41
apps/dokploy/public/locales/kz/settings.json
Normal file
41
apps/dokploy/public/locales/kz/settings.json
Normal 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": "Жүйе тақтасының тілің таңдаңыз"
|
||||
}
|
||||
@@ -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": "ഉപയോക്തൃനാമം"
|
||||
}
|
||||
{}
|
||||
|
||||
58
apps/dokploy/public/locales/ml/settings.json
Normal file
58
apps/dokploy/public/locales/ml/settings.json
Normal 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": "ഉപയോക്തൃനാമം"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
52
apps/dokploy/public/locales/no/settings.json
Normal file
52
apps/dokploy/public/locales/no/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
58
apps/dokploy/public/locales/pl/settings.json
Normal file
58
apps/dokploy/public/locales/pl/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
44
apps/dokploy/public/locales/pt-br/settings.json
Normal file
44
apps/dokploy/public/locales/pt-br/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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": "Имя пользователя"
|
||||
}
|
||||
{}
|
||||
|
||||
58
apps/dokploy/public/locales/ru/settings.json
Normal file
58
apps/dokploy/public/locales/ru/settings.json
Normal 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": "Имя пользователя"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
{}
|
||||
|
||||
44
apps/dokploy/public/locales/tr/settings.json
Normal file
44
apps/dokploy/public/locales/tr/settings.json
Normal 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"
|
||||
}
|
||||
@@ -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": "Ім'я користувача"
|
||||
}
|
||||
{}
|
||||
|
||||
58
apps/dokploy/public/locales/uk/settings.json
Normal file
58
apps/dokploy/public/locales/uk/settings.json
Normal 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": "Ім'я користувача"
|
||||
}
|
||||
@@ -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": "关闭"
|
||||
}
|
||||
{}
|
||||
|
||||
58
apps/dokploy/public/locales/zh-Hans/settings.json
Normal file
58
apps/dokploy/public/locales/zh-Hans/settings.json
Normal 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": "用户名"
|
||||
}
|
||||
@@ -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": "使用者名稱"
|
||||
}
|
||||
{}
|
||||
|
||||
58
apps/dokploy/public/locales/zh-Hant/settings.json
Normal file
58
apps/dokploy/public/locales/zh-Hant/settings.json
Normal 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": "使用者名稱"
|
||||
}
|
||||
@@ -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",
|
||||
});
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user