chore(release): automatic release v1.0.0

This commit is contained in:
homarr-releases[bot]
2024-12-24 13:33:47 +00:00
committed by GitHub
53 changed files with 2684 additions and 1929 deletions

View File

@@ -1,37 +1,78 @@
name: 🐞 Bug Report name: 🐞 Bug Report
description: Create a bug report to help us improve description: Report that something is broken, not working as intended or causes side-effects
title: "bug: " title: "bug: "
labels: ["🐞❔ unconfirmed bug"] labels: ["needs triage"]
body: body:
- type: textarea
attributes:
label: Provide environment information
description: |
Run this command in your project root and paste the results in a code block:
```bash
npx envinfo --system --binaries
```
validations:
required: true
- type: textarea - type: textarea
attributes: attributes:
label: Describe the bug label: Describe the bug
description: A clear and concise description of the bug, as well as what you expected to happen when encountering it. description: A clear and concise description of the bug, as well as what you expected to happen when encountering it.
validations: validations:
required: true required: true
- type: input - type: textarea
attributes: attributes:
label: Link to reproduction label: Steps to reproduce
description: Please provide a link to a reproduction of the bug. Issues without a reproduction repo may be ignored. description: Describe how to reproduce your bug. Steps, code snippets, reproduction repos etc.
validations: validations:
required: true required: true
- type: textarea - type: textarea
attributes: attributes:
label: To reproduce label: Impact
description: Describe how to reproduce your bug. Steps, code snippets, reproduction repos etc. description: How big is the impact of this bug? Does it make Homarr unusable? Is there any workaround that you're aware of?
validations: validations:
required: true required: true
- type: textarea - type: textarea
attributes: attributes:
label: Additional information label: Additional information
description: Add any other information related to the bug here, screenshots if applicable. description: Add any other information related to the bug here, screenshots if applicable.
- type: dropdown
id: version
attributes:
label: Version
description: What version of Homarr are you running?
options:
- 1.0.0-beta
- Other (describe in "additional information")
default: 0
validations:
required: true
- type: dropdown
id: installationMethod
attributes:
label: Installation method
description: How do you run Homarr? Post docker-compose, configs or screenshots if applicable.
options:
- Docker Run
- Docker Compose
- Portainer
- Helm
- QNAP
- Saltbox
- EasyPanel
- Unraid Apps
- TrueNAS Apps
- Synology
- HomeAssistant Addon
- From Source
- Other (describe in "additional information")
default: 0
validations:
required: true
- type: dropdown
id: browser
attributes:
label: Browser
description: If relevant, what browser do you use?
options:
- Firefox
- Edge (Chromium)
- Edge (Proprietary)
- Chrome
- Safari
- Vivaldi
- Brave
- Samsung Internet
- Other (describe in "additional information")
default: 0
validations:
required: false

View File

@@ -2,26 +2,16 @@
# See here: https://github.com/vercel/next.js/blob/canary/.github/ISSUE_TEMPLATE/3.feature_request.yml # See here: https://github.com/vercel/next.js/blob/canary/.github/ISSUE_TEMPLATE/3.feature_request.yml
name: 🛠 Feature Request name: 🛠 Feature Request
description: Create a feature request for the core packages description: Request a new feature that you would like to have implemented
title: "feat: " title: "feat: "
labels: ["✨ enhancement"] labels: ["needs triage"]
body: body:
- type: markdown
attributes:
value: |
Thank you for taking the time to file a feature request. Please fill out this form as completely as possible.
- type: textarea - type: textarea
attributes: attributes:
label: Describe the feature you'd like to request label: Describe the feature you'd like to request
description: Please describe the feature as clear and concise as possible. Remember to add context as to why you believe this feature is needed. description: Please describe the feature as clear and concise as possible. Remember to add context as to why you believe this feature is needed.
validations: validations:
required: true required: true
- type: textarea
attributes:
label: Describe the solution you'd like to see
description: Please describe the solution you would like to see. Adding example usage is a good way to provide context.
validations:
required: true
- type: textarea - type: textarea
attributes: attributes:
label: Additional information label: Additional information

40
.github/ISSUE_TEMPLATE/integration.yml vendored Normal file
View File

@@ -0,0 +1,40 @@
name: 🛠 Integration request
description: Request support for a new integration (eg. Sonarr, Radarr)
title: "feat: "
labels: ["needs triage"]
body:
- type: input
attributes:
label: Project Website
description: Post the link to the website of the application. Paste the official link.
placeholder: ex. https://sonarr.tv/
validations:
required: true
- type: textarea
attributes:
label: Describe what data should be consumed by Homarr
description: Please describe what data Homarr should fetch from the integration. Specify in what interval data should be fetched and whether the user can also perform write operations (eg. deleting a movie or adding a user).
validations:
required: true
- type: textarea
attributes:
label: Additional information
description: Add any other information related to the integration.
- type: dropdown
attributes:
label: Public API available?
description: Is there a public API available, that we can consume in Homarr?
options:
- Yes, available on a website
- Yes, available in the application itself
- No
validations:
required: true
- type: dropdown
attributes:
label: Are you willing to contribute this yourself?
options:
- Yes
- No
validations:
required: true

30
.github/ISSUE_TEMPLATE/widget.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
name: 🛠 Widget request
description: Request a new widget (eg. Clock, Calendar, ...)
title: "feat: "
labels: ["needs triage"]
body:
- type: input
attributes:
label: Compatible integrations
description: Post a list of the integrations that should be compatible with this widget. Divide using comma. Leave empty if no integration is needed.
placeholder: ex. Sonarr, Radarr, Lidarr, Readarr, Nextcloud
validations:
required: false
- type: textarea
attributes:
label: Describe what data should be displayed
description: Please describe what data Homarr should display. Describe how elements should be intractable and what actions the user can perform.
validations:
required: true
- type: textarea
attributes:
label: Additional information
description: Add any other information related to the widget.
- type: dropdown
attributes:
label: Are you willing to contribute this yourself?
options:
- Yes
- No
validations:
required: true

View File

@@ -149,7 +149,7 @@ jobs:
with: with:
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
context: . context: .
push: ${{ env.PUSH_IMAGE}} push: ${{ env.PUSH_IMAGE }}
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
network: host network: host

View File

@@ -38,18 +38,18 @@
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@homarr/widgets": "workspace:^0.1.0", "@homarr/widgets": "workspace:^0.1.0",
"@mantine/colors-generator": "^7.15.1", "@mantine/colors-generator": "^7.15.2",
"@mantine/core": "^7.15.1", "@mantine/core": "^7.15.2",
"@mantine/dropzone": "^7.15.1", "@mantine/dropzone": "^7.15.2",
"@mantine/hooks": "^7.15.1", "@mantine/hooks": "^7.15.2",
"@mantine/modals": "^7.15.1", "@mantine/modals": "^7.15.2",
"@mantine/tiptap": "^7.15.1", "@mantine/tiptap": "^7.15.2",
"@million/lint": "1.0.14", "@million/lint": "1.0.14",
"@t3-oss/env-nextjs": "^0.11.1", "@t3-oss/env-nextjs": "^0.11.1",
"@tabler/icons-react": "^3.26.0", "@tabler/icons-react": "^3.26.0",
"@tanstack/react-query": "^5.62.8", "@tanstack/react-query": "^5.62.10",
"@tanstack/react-query-devtools": "^5.62.8", "@tanstack/react-query-devtools": "^5.62.10",
"@tanstack/react-query-next-experimental": "5.62.8", "@tanstack/react-query-next-experimental": "5.62.10",
"@trpc/client": "next", "@trpc/client": "next",
"@trpc/next": "next", "@trpc/next": "next",
"@trpc/react-query": "next", "@trpc/react-query": "next",
@@ -63,14 +63,14 @@
"dotenv": "^16.4.7", "dotenv": "^16.4.7",
"flag-icons": "^7.2.3", "flag-icons": "^7.2.3",
"glob": "^11.0.0", "glob": "^11.0.0",
"jotai": "^2.10.4", "jotai": "^2.11.0",
"mantine-react-table": "2.0.0-beta.7", "mantine-react-table": "2.0.0-beta.7",
"next": "^14.2.21", "next": "^14.2.21",
"postcss-preset-mantine": "^1.17.0", "postcss-preset-mantine": "^1.17.0",
"prismjs": "^1.29.0", "prismjs": "^1.29.0",
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
"react-error-boundary": "^4.1.2", "react-error-boundary": "^5.0.0",
"react-simple-code-editor": "^0.14.1", "react-simple-code-editor": "^0.14.1",
"sass": "^1.83.0", "sass": "^1.83.0",
"superjson": "2.2.2", "superjson": "2.2.2",

View File

@@ -6,7 +6,6 @@ import { IconBox, IconPencil } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api"; import type { RouterOutputs } from "@homarr/api";
import { api } from "@homarr/api/server"; import { api } from "@homarr/api/server";
import { auth } from "@homarr/auth/next"; import { auth } from "@homarr/auth/next";
import { parseAppHrefWithVariablesServer } from "@homarr/common/server";
import { getI18n, getScopedI18n } from "@homarr/translation/server"; import { getI18n, getScopedI18n } from "@homarr/translation/server";
import { ManageContainer } from "~/components/manage/manage-container"; import { ManageContainer } from "~/components/manage/manage-container";
@@ -82,8 +81,8 @@ const AppCard = async ({ app }: AppCardProps) => {
</Text> </Text>
)} )}
{app.href && ( {app.href && (
<Anchor href={parseAppHrefWithVariablesServer(app.href)} lineClamp={1} size="sm" w="min-content"> <Anchor href={app.href} lineClamp={1} size="sm" w="min-content">
{parseAppHrefWithVariablesServer(app.href)} {app.href}
</Anchor> </Anchor>
)} )}
</Stack> </Stack>

View File

@@ -13,10 +13,7 @@ interface CopyMediaProps {
export const CopyMedia = ({ media }: CopyMediaProps) => { export const CopyMedia = ({ media }: CopyMediaProps) => {
const t = useI18n(); const t = useI18n();
const url = const url = typeof window !== "undefined" ? `${window.location.origin}/api/user-medias/${media.id}` : "";
typeof window !== "undefined"
? `${window.location.protocol}://${window.location.hostname}:${window.location.port}/api/user-medias/${media.id}`
: "";
return ( return (
<CopyButton value={url}> <CopyButton value={url}>

View File

@@ -10,6 +10,12 @@ import { useSectionContext } from "./section-context";
export const SectionContent = () => { export const SectionContent = () => {
const { section, innerSections, refs } = useSectionContext(); const { section, innerSections, refs } = useSectionContext();
const board = useRequiredBoard(); const board = useRequiredBoard();
/**
* IMPORTANT: THE ORDER OF THE BELOW ITEMS HAS TO MATCH THE ORDER OF
* THE ITEMS RENDERED WITH GRIDSTACK, OTHERWISE THE ITEMS WILL BE MIXED UP
* @see https://github.com/homarr-labs/homarr/pull/1770
*/
const sortedItems = useMemo(() => { const sortedItems = useMemo(() => {
return [ return [
...section.items.map((item) => ({ ...item, type: "item" as const })), ...section.items.map((item) => ({ ...item, type: "item" as const })),
@@ -19,7 +25,7 @@ export const SectionContent = () => {
return itemA.xOffset - itemB.xOffset; return itemA.xOffset - itemB.xOffset;
} }
return itemA.yOffset - itemB.xOffset; return itemA.yOffset - itemB.yOffset;
}); });
}, [section.items, innerSections]); }, [section.items, innerSections]);

View File

@@ -7,6 +7,6 @@
--background-color: rgb(from var(--mantine-color-white) r g b / var(--opacity)); --background-color: rgb(from var(--mantine-color-white) r g b / var(--opacity));
--border-color: rgb(from var(--mantine-color-gray-3) r g b / var(--opacity)); --border-color: rgb(from var(--mantine-color-gray-3) r g b / var(--opacity));
} }
background-color: var(--background-color); background-color: var(--background-color) !important;
border-color: var(--border-color); border-color: var(--border-color) !important;
} }

View File

@@ -45,7 +45,7 @@
"@homarr/prettier-config": "workspace:^0.1.0", "@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0",
"@types/node": "^22.10.2", "@types/node": "^22.10.2",
"dotenv-cli": "^7.4.4", "dotenv-cli": "^8.0.0",
"eslint": "^9.17.0", "eslint": "^9.17.0",
"prettier": "^3.4.2", "prettier": "^3.4.2",
"tsx": "4.19.2", "tsx": "4.19.2",

View File

@@ -10,8 +10,8 @@
<a href="https://github.com/homarr-labs/homarr/actions/workflows/deployment-docker-image.yml"> <a href="https://github.com/homarr-labs/homarr/actions/workflows/deployment-docker-image.yml">
  <img title="Docker CI Status" src="https://github.com/homarr-labs/homarr/actions/workflows/deployment-docker-image.yml/badge.svg" alt="CI Status">   <img title="Docker CI Status" src="https://github.com/homarr-labs/homarr/actions/workflows/deployment-docker-image.yml/badge.svg" alt="CI Status">
</a> </a>
<a href=https://translate.homarr.dev/> <a href="https://crowdin.com/project/homarr_labs">
<img title="Translations" src="https://badges.crowdin.net/homarr/localized.svg" /> <img title="Translations" src="https://badges.crowdin.net/homarr_labs/localized.svg" />
</a> </a>
<a href="https://discord.gg/aCsmEV5RgA"> <a href="https://discord.gg/aCsmEV5RgA">
  <img title="Discord" src="https://discordapp.com/api/guilds/972958686051962910/widget.png?style=shield">   <img title="Discord" src="https://discordapp.com/api/guilds/972958686051962910/widget.png?style=shield">

View File

@@ -21,7 +21,7 @@ http {
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
} }
} }
} }

View File

@@ -27,6 +27,7 @@
"@homarr/cron-jobs": "workspace:^0.1.0", "@homarr/cron-jobs": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0",
"@homarr/icons": "workspace:^0.1.0",
"@homarr/integrations": "workspace:^0.1.0", "@homarr/integrations": "workspace:^0.1.0",
"@homarr/log": "workspace:^", "@homarr/log": "workspace:^",
"@homarr/old-import": "workspace:^0.1.0", "@homarr/old-import": "workspace:^0.1.0",

View File

@@ -152,11 +152,17 @@ export const groupRouter = createTRPCRouter({
.mutation(async ({ input, ctx }) => { .mutation(async ({ input, ctx }) => {
await checkSimilarNameAndThrowAsync(ctx.db, input.name); await checkSimilarNameAndThrowAsync(ctx.db, input.name);
const groupId = createId();
await ctx.db.insert(groups).values({ await ctx.db.insert(groups).values({
id: createId(), id: groupId,
name: input.name, name: input.name,
}); });
await ctx.db.insert(groupPermissions).values({
groupId,
permission: "admin",
});
await nextOnboardingStepAsync(ctx.db, undefined); await nextOnboardingStepAsync(ctx.db, undefined);
}), }),
createGroup: permissionRequiredProcedure createGroup: permissionRequiredProcedure

View File

@@ -1,7 +1,9 @@
import { TRPCError } from "@trpc/server"; import { TRPCError } from "@trpc/server";
import type { InferInsertModel } from "@homarr/db";
import { and, createId, desc, eq, like } from "@homarr/db"; import { and, createId, desc, eq, like } from "@homarr/db";
import { medias } from "@homarr/db/schema"; import { iconRepositories, icons, medias } from "@homarr/db/schema";
import { createLocalImageUrl, LOCAL_ICON_REPOSITORY_SLUG, mapMediaToIcon } from "@homarr/icons/local";
import { validation, z } from "@homarr/validation"; import { validation, z } from "@homarr/validation";
import { createTRPCRouter, permissionRequiredProcedure, protectedProcedure } from "../../trpc"; import { createTRPCRouter, permissionRequiredProcedure, protectedProcedure } from "../../trpc";
@@ -52,13 +54,29 @@ export const mediaRouter = createTRPCRouter({
.mutation(async ({ ctx, input }) => { .mutation(async ({ ctx, input }) => {
const content = Buffer.from(await input.file.arrayBuffer()); const content = Buffer.from(await input.file.arrayBuffer());
const id = createId(); const id = createId();
await ctx.db.insert(medias).values({ const media = {
id, id,
creatorId: ctx.session.user.id, creatorId: ctx.session.user.id,
content, content,
size: input.file.size, size: input.file.size,
contentType: input.file.type, contentType: input.file.type,
name: input.file.name, name: input.file.name,
} satisfies InferInsertModel<typeof medias>;
await ctx.db.insert(medias).values(media);
const localIconRepository = await ctx.db.query.iconRepositories.findFirst({
where: eq(iconRepositories.slug, LOCAL_ICON_REPOSITORY_SLUG),
});
if (!localIconRepository) return id;
const icon = mapMediaToIcon(media);
await ctx.db.insert(icons).values({
id: createId(),
checksum: icon.checksum,
name: icon.fileNameWithExtension,
url: icon.imageUrl,
iconRepositoryId: localIconRepository.id,
}); });
return id; return id;
@@ -67,6 +85,7 @@ export const mediaRouter = createTRPCRouter({
const dbMedia = await ctx.db.query.medias.findFirst({ const dbMedia = await ctx.db.query.medias.findFirst({
where: eq(medias.id, input.id), where: eq(medias.id, input.id),
columns: { columns: {
id: true,
creatorId: true, creatorId: true,
}, },
}); });
@@ -87,5 +106,6 @@ export const mediaRouter = createTRPCRouter({
} }
await ctx.db.delete(medias).where(eq(medias.id, input.id)); await ctx.db.delete(medias).where(eq(medias.id, input.id));
await ctx.db.delete(icons).where(eq(icons.url, createLocalImageUrl(input.id)));
}), }),
}); });

View File

@@ -23,7 +23,8 @@ export const OidcProvider = (headers: ReadonlyHeaders | null): OIDCConfig<Profil
authorization: { authorization: {
params: { params: {
scope: env.AUTH_OIDC_SCOPE_OVERWRITE, scope: env.AUTH_OIDC_SCOPE_OVERWRITE,
redirect_uri: createRedirectUri(headers, "/api/auth/callback/oidc"), // We fallback to https as generally oidc providers require https
redirect_uri: createRedirectUri(headers, "/api/auth/callback/oidc", "https"),
}, },
}, },
profile(profile) { profile(profile) {

View File

@@ -8,12 +8,16 @@ import { extractBaseUrlFromHeaders } from "@homarr/common";
* @param pathname * @param pathname
* @returns * @returns
*/ */
export const createRedirectUri = (headers: ReadonlyHeaders | null, pathname: string) => { export const createRedirectUri = (
headers: ReadonlyHeaders | null,
pathname: string,
fallbackProtocol: "http" | "https" = "http",
) => {
if (!headers) { if (!headers) {
return pathname; return pathname;
} }
const baseUrl = extractBaseUrlFromHeaders(headers); const baseUrl = extractBaseUrlFromHeaders(headers, fallbackProtocol);
const path = pathname.startsWith("/") ? pathname : `/${pathname}`; const path = pathname.startsWith("/") ? pathname : `/${pathname}`;

View File

@@ -28,8 +28,7 @@
"@homarr/log": "workspace:^0.1.0", "@homarr/log": "workspace:^0.1.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"next": "^14.2.21", "next": "^14.2.21",
"react": "^19.0.0", "react": "^19.0.0"
"tldts": "^6.1.69"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",

View File

@@ -1,23 +0,0 @@
import * as tldts from "tldts";
const safeParseTldts = (url: string) => {
try {
return tldts.parse(url);
} catch {
return null;
}
};
export const parseAppHrefWithVariables = <TInput extends string | null>(url: TInput, currentHref: string): TInput => {
if (!url || url.length === 0) return url;
const tldtsResult = safeParseTldts(currentHref);
const urlObject = new URL(currentHref);
return url
.replaceAll("[homarr_base]", `${urlObject.protocol}//${urlObject.hostname}`)
.replaceAll("[homarr_hostname]", tldtsResult?.hostname ?? "")
.replaceAll("[homarr_domain]", tldtsResult?.domain ?? "")
.replaceAll("[homarr_protocol]", urlObject.protocol.replace(":", "")) as TInput;
};

View File

@@ -1,6 +0,0 @@
import { parseAppHrefWithVariables } from "./base";
export const parseAppHrefWithVariablesClient = <TInput extends string | null>(url: TInput): TInput => {
if (typeof window === "undefined") return url;
return parseAppHrefWithVariables(url, window.location.href);
};

View File

@@ -1,8 +0,0 @@
import { headers } from "next/headers";
import { extractBaseUrlFromHeaders } from "../url";
import { parseAppHrefWithVariables } from "./base";
export const parseAppHrefWithVariablesServer = <TInput extends string | null>(url: TInput): TInput => {
return parseAppHrefWithVariables(url, extractBaseUrlFromHeaders(headers()));
};

View File

@@ -1,2 +1 @@
export * from "./app-url/client";
export * from "./revalidate-path-action"; export * from "./revalidate-path-action";

View File

@@ -1,3 +1,2 @@
export * from "./app-url/server";
export * from "./security"; export * from "./security";
export * from "./encryption"; export * from "./encryption";

View File

@@ -4,8 +4,16 @@ export const removeTrailingSlash = (path: string) => {
return path.at(-1) === "/" ? path.substring(0, path.length - 1) : path; return path.at(-1) === "/" ? path.substring(0, path.length - 1) : path;
}; };
export const extractBaseUrlFromHeaders = (headers: ReadonlyHeaders): `${string}://${string}` => { export const extractBaseUrlFromHeaders = (
let protocol = headers.get("x-forwarded-proto") ?? "http"; headers: ReadonlyHeaders,
fallbackProtocol: "http" | "https" = "http",
): `${string}://${string}` => {
let protocol = headers.get("x-forwarded-proto");
// If the protocol is not set or an empty string
if (!protocol) {
protocol = fallbackProtocol;
}
// @see https://support.glitch.com/t/x-forwarded-proto-contains-multiple-protocols/17219 // @see https://support.glitch.com/t/x-forwarded-proto-contains-multiple-protocols/17219
if (protocol.includes(",")) { if (protocol.includes(",")) {

View File

@@ -50,14 +50,14 @@
"drizzle-kit": "^0.30.1", "drizzle-kit": "^0.30.1",
"drizzle-orm": "^0.38.2", "drizzle-orm": "^0.38.2",
"drizzle-zod": "^0.6.0", "drizzle-zod": "^0.6.0",
"mysql2": "3.11.5" "mysql2": "3.12.0"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0", "@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0",
"@types/better-sqlite3": "7.6.12", "@types/better-sqlite3": "7.6.12",
"dotenv-cli": "^7.4.4", "dotenv-cli": "^8.0.0",
"eslint": "^9.17.0", "eslint": "^9.17.0",
"prettier": "^3.4.2", "prettier": "^3.4.2",
"tsx": "4.19.2", "tsx": "4.19.2",

View File

@@ -26,7 +26,7 @@
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/form": "^7.15.1" "@mantine/form": "^7.15.2"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",

View File

@@ -5,7 +5,8 @@
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"exports": { "exports": {
".": "./index.ts" ".": "./index.ts",
"./local": "./src/local.ts"
}, },
"typesVersions": { "typesVersions": {
"*": { "*": {

View File

@@ -0,0 +1 @@
export { createLocalImageUrl, mapMediaToIcon, LOCAL_ICON_REPOSITORY_SLUG } from "./repositories/local.icon-repository";

View File

@@ -1,26 +1,36 @@
import { createHash } from "crypto"; import { createHash } from "crypto";
import type { InferSelectModel } from "@homarr/db";
import { db } from "@homarr/db"; import { db } from "@homarr/db";
import type { medias } from "@homarr/db/schema";
import type { RepositoryIconGroup } from "../types"; import type { RepositoryIcon, RepositoryIconGroup } from "../types";
import { IconRepository } from "./icon-repository"; import { IconRepository } from "./icon-repository";
export const LOCAL_ICON_REPOSITORY_SLUG = "local";
export class LocalIconRepository extends IconRepository { export class LocalIconRepository extends IconRepository {
constructor() { constructor() {
super("Local", "local", undefined, undefined, undefined, undefined); super("Local", LOCAL_ICON_REPOSITORY_SLUG, undefined, undefined, undefined, undefined);
} }
protected async getAllIconsInternalAsync(): Promise<RepositoryIconGroup> { protected async getAllIconsInternalAsync(): Promise<RepositoryIconGroup> {
const medias = await db.query.medias.findMany(); const medias = await db.query.medias.findMany();
return { return {
success: true, success: true,
icons: medias.map((media) => ({ icons: medias.map(mapMediaToIcon),
local: true, slug: LOCAL_ICON_REPOSITORY_SLUG,
fileNameWithExtension: media.name,
imageUrl: `/api/user-medias/${media.id}`,
checksum: createHash("md5").update(media.content).digest("hex"),
sizeInBytes: media.size,
})),
slug: "local",
}; };
} }
} }
export const createLocalImageUrl = (id: string) => `/api/user-medias/${id}`;
export const mapMediaToIcon = (
media: Pick<InferSelectModel<typeof medias>, "name" | "id" | "content" | "size">,
): RepositoryIcon => ({
local: true,
fileNameWithExtension: media.name,
imageUrl: createLocalImageUrl(media.id),
checksum: createHash("md5").update(media.content).digest("hex"),
sizeInBytes: media.size,
});

View File

@@ -25,7 +25,7 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@ctrl/deluge": "^7.0.0", "@ctrl/deluge": "^7.0.0",
"@ctrl/qbittorrent": "^9.1.0", "@ctrl/qbittorrent": "^9.2.0",
"@ctrl/transmission": "^7.1.0", "@ctrl/transmission": "^7.1.0",
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0",

View File

@@ -32,7 +32,7 @@
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^7.15.1", "@mantine/core": "^7.15.2",
"@tabler/icons-react": "^3.26.0", "@tabler/icons-react": "^3.26.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"next": "^14.2.21", "next": "^14.2.21",

View File

@@ -24,8 +24,8 @@
"dependencies": { "dependencies": {
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^7.15.1", "@mantine/core": "^7.15.2",
"@mantine/hooks": "^7.15.1", "@mantine/hooks": "^7.15.2",
"react": "^19.0.0" "react": "^19.0.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -24,7 +24,7 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@mantine/notifications": "^7.15.1", "@mantine/notifications": "^7.15.2",
"@tabler/icons-react": "^3.26.0" "@tabler/icons-react": "^3.26.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -37,8 +37,8 @@
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^7.15.1", "@mantine/core": "^7.15.2",
"@mantine/hooks": "^7.15.1", "@mantine/hooks": "^7.15.2",
"adm-zip": "0.5.16", "adm-zip": "0.5.16",
"next": "^14.2.21", "next": "^14.2.21",
"react": "^19.0.0", "react": "^19.0.0",

View File

@@ -32,11 +32,11 @@
"@homarr/modals-collection": "workspace:^0.1.0", "@homarr/modals-collection": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^7.15.1", "@mantine/core": "^7.15.2",
"@mantine/hooks": "^7.15.1", "@mantine/hooks": "^7.15.2",
"@mantine/spotlight": "^7.15.1", "@mantine/spotlight": "^7.15.2",
"@tabler/icons-react": "^3.26.0", "@tabler/icons-react": "^3.26.0",
"jotai": "^2.10.4", "jotai": "^2.11.0",
"next": "^14.2.21", "next": "^14.2.21",
"react": "^19.0.0", "react": "^19.0.0",
"use-deep-compare-effect": "^1.8.1" "use-deep-compare-effect": "^1.8.1"

View File

@@ -2,130 +2,130 @@
"init": { "init": {
"step": { "step": {
"start": { "start": {
"title": "", "title": "欢迎使用 Homarr",
"subtitle": "", "subtitle": "让我们开始设置您的 Homarr 实例。",
"description": "", "description": "首先,请选择您想要如何设置您的 Homarr 实例。",
"action": { "action": {
"scratch": "", "scratch": "从头开始",
"importOldmarr": "" "importOldmarr": "从 1.0 之前的 Homarr 导入"
} }
}, },
"import": { "import": {
"title": "", "title": "导入数据",
"subtitle": "", "subtitle": "您可以从已有的 Homarr 实例导入数据。",
"dropzone": { "dropzone": {
"title": "", "title": "将 zip 文件拖到此处或单击浏览",
"description": "" "description": "上传的压缩包将被处理,您可以选择要导入的内容"
}, },
"fileInfo": { "fileInfo": {
"action": { "action": {
"change": "" "change": "更改文件"
} }
}, },
"importSettings": { "importSettings": {
"title": "", "title": "导入设置",
"description": "" "description": "配置导入方式"
}, },
"boardSelection": { "boardSelection": {
"title": "", "title": "找到 {count} 个面板",
"description": "", "description": "选择您想要导入的所有面板",
"action": { "action": {
"selectAll": "", "selectAll": "选择全部",
"unselectAll": "" "unselectAll": "取消全选"
} }
}, },
"summary": { "summary": {
"title": "", "title": "导入概况",
"description": "", "description": "在下面的概况中,您可以看到将要导入的内容",
"action": { "action": {
"import": "" "import": "确认导入并继续"
}, },
"entities": { "entities": {
"apps": "应用", "apps": "应用",
"boards": "面板", "boards": "面板",
"integrations": "", "integrations": "组件",
"credentialUsers": "" "credentialUsers": "凭证用户"
} }
}, },
"tokenModal": { "tokenModal": {
"title": "", "title": "输入导入密钥",
"field": { "field": {
"token": { "token": {
"label": "Token", "label": "令牌",
"description": "" "description": "输入您之前的 homarr 实例中显示的导入秘钥"
} }
}, },
"notification": { "notification": {
"error": { "error": {
"title": "", "title": "无效秘钥",
"message": "" "message": "您输入的秘钥无效"
} }
} }
} }
}, },
"user": { "user": {
"title": "", "title": "管理员用户",
"subtitle": "", "subtitle": "指定您的管理员用户的凭据。",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "创建用户",
"message": "" "message": "用户已成功创建"
}, },
"error": { "error": {
"title": "" "title": "用户创建失败"
} }
} }
}, },
"group": { "group": {
"title": "", "title": "外部组",
"subtitle": "", "subtitle": "指定应该用于外部用户的组。",
"form": { "form": {
"name": { "name": {
"label": "", "label": "组名称",
"description": "" "description": "名称必须与外部提供商的管理组匹配"
} }
} }
}, },
"settings": { "settings": {
"title": "设置", "title": "设置",
"subtitle": "" "subtitle": "配置服务器的设置"
}, },
"finish": { "finish": {
"title": "", "title": "完成设置",
"subtitle": "", "subtitle": "你已设置完成!",
"description": "", "description": "您已成功完成设置过程。现在您可以开始使用 Homarr 了。选择下一步操作:",
"action": { "action": {
"goToBoard": "", "goToBoard": "转到 {name} 面板",
"createBoard": "", "createBoard": "创建您的第一个面板",
"inviteUser": "", "inviteUser": "邀请其他用户",
"docs": "" "docs": "阅读文档"
} }
} }
}, },
"backToStart": "" "backToStart": "返回起点"
}, },
"user": { "user": {
"title": "用户", "title": "用户",
"name": "用户", "name": "用户",
"page": { "page": {
"login": { "login": {
"title": "", "title": "登录你的账户",
"subtitle": "" "subtitle": "欢迎回来!请输入您的凭据"
}, },
"invite": { "invite": {
"title": "", "title": "加入 Homarr",
"subtitle": "", "subtitle": "欢迎来到 Homarr请创建您的账户",
"description": "" "description": "您受到了 {username} 的邀请。"
}, },
"init": { "init": {
"title": "", "title": "新建Homarr 安装",
"subtitle": "" "subtitle": "请创建初始管理员用户"
} }
}, },
"field": { "field": {
"email": { "email": {
"label": "邮箱", "label": "邮箱",
"verified": "" "verified": "已验证"
}, },
"username": { "username": {
"label": "用户名" "label": "用户名"
@@ -133,46 +133,46 @@
"password": { "password": {
"label": "密码", "label": "密码",
"requirement": { "requirement": {
"length": "", "length": "包含至少8个字符",
"lowercase": "包括小写字母", "lowercase": "包括小写字母",
"uppercase": "包含大写字母", "uppercase": "包含大写字母",
"number": "包含数字", "number": "包含数字",
"special": "" "special": "包含特殊符号"
} }
}, },
"passwordConfirm": { "passwordConfirm": {
"label": "确认密码" "label": "确认密码"
}, },
"previousPassword": { "previousPassword": {
"label": "" "label": "先前的密码"
}, },
"homeBoard": { "homeBoard": {
"label": "" "label": "首页"
}, },
"pingIconsEnabled": { "pingIconsEnabled": {
"label": "" "label": "用于ping的图标"
} }
}, },
"error": { "error": {
"usernameTaken": "" "usernameTaken": "用户名称已被占用"
}, },
"action": { "action": {
"login": { "login": {
"label": "登录", "label": "登录",
"labelWith": "", "labelWith": "使用 {provider} 登录",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "登录成功",
"message": "" "message": "您已登录"
}, },
"error": { "error": {
"title": "", "title": "登录失败",
"message": "" "message": "您登录失败"
} }
}, },
"forgotPassword": { "forgotPassword": {
"label": "", "label": "忘记密码?",
"description": "" "description": "管理员可以使用以下命令重置您的密码:"
} }
}, },
"register": { "register": {
@@ -180,81 +180,81 @@
"notification": { "notification": {
"success": { "success": {
"title": "账号已创建", "title": "账号已创建",
"message": "" "message": "请登录以继续"
}, },
"error": { "error": {
"title": "", "title": "创建账户失败",
"message": "" "message": "无法创建您的帐户"
} }
} }
}, },
"create": "创建用户", "create": "创建用户",
"changePassword": { "changePassword": {
"label": "", "label": "修改密码",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "密码修改成功"
}, },
"error": { "error": {
"message": "" "message": "无法修改密码"
} }
} }
}, },
"changeHomeBoard": { "changeHomeBoard": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "主页面修改成功"
}, },
"error": { "error": {
"message": "" "message": "无法修改主面板"
} }
} }
}, },
"changeFirstDayOfWeek": { "changeFirstDayOfWeek": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "成功修改一周的第一天"
}, },
"error": { "error": {
"message": "" "message": "无法修改一周的第一天"
} }
} }
}, },
"changePingIconsEnabled": { "changePingIconsEnabled": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "Ping 图标切换成功"
}, },
"error": { "error": {
"message": "" "message": "无法切换 ping 图标"
} }
} }
}, },
"manageAvatar": { "manageAvatar": {
"changeImage": { "changeImage": {
"label": "", "label": "更改图像",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "图像修改成功"
}, },
"error": { "error": {
"message": "" "message": "无法更改图像"
}, },
"toLarge": { "toLarge": {
"title": "", "title": "图片太大",
"message": "" "message": "最大图像尺寸为 {size}"
} }
} }
}, },
"removeImage": { "removeImage": {
"label": "", "label": "删除图像",
"confirm": "", "confirm": "确定要移除这张图片吗?",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "图像删除成功"
}, },
"error": { "error": {
"message": "" "message": "无法删除图像"
} }
} }
} }
@@ -262,42 +262,42 @@
"editProfile": { "editProfile": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "资料更新成功"
}, },
"error": { "error": {
"message": "" "message": "资料更新失败"
} }
} }
}, },
"delete": { "delete": {
"label": "", "label": "永久删除用户",
"description": "", "description": "删除此用户及其偏好设置。这将不会删除任何看板。用户将不会收到通知。",
"confirm": "" "confirm": "您确定要删除用户 {username} 及其偏好设置吗?"
}, },
"select": { "select": {
"label": "", "label": "选择用户",
"notFound": "" "notFound": "找不到用户"
}, },
"transfer": { "transfer": {
"label": "" "label": "选择新的所有者"
} }
} }
}, },
"group": { "group": {
"title": "", "title": "",
"name": "", "name": "",
"search": "", "search": "查找组",
"field": { "field": {
"name": "名称", "name": "名称",
"members": "" "members": "成员列表"
}, },
"permission": { "permission": {
"admin": { "admin": {
"title": "管理员", "title": "管理员",
"item": { "item": {
"admin": { "admin": {
"label": "", "label": "管理员",
"description": "" "description": "拥有此权限的成员可完全访问所有功能和设置"
} }
} }
}, },
@@ -305,20 +305,20 @@
"title": "应用", "title": "应用",
"item": { "item": {
"create": { "create": {
"label": "", "label": "创建应用",
"description": "" "description": "允许成员创建应用"
}, },
"use-all": { "use-all": {
"label": "", "label": "使用全部应用",
"description": "" "description": "允许成员将任何应用添加到他们的看板"
}, },
"modify-all": { "modify-all": {
"label": "", "label": "修改全部应用",
"description": "" "description": "允许成员修改全部应用"
}, },
"full-all": { "full-all": {
"label": "", "label": "完整应用访问权限",
"description": "" "description": "允许成员管理、使用和删除全部应用"
} }
} }
}, },
@@ -326,165 +326,165 @@
"title": "面板", "title": "面板",
"item": { "item": {
"create": { "create": {
"label": "", "label": "创建面板",
"description": "" "description": "允许成员创建看板"
}, },
"view-all": { "view-all": {
"label": "", "label": "查看全部面板",
"description": "" "description": "允许成员查看全部看板"
}, },
"modify-all": { "modify-all": {
"label": "", "label": "修改全部看板",
"description": "" "description": "允许成员修改全部看板 (不包括访问控制和危险区)"
}, },
"full-all": { "full-all": {
"label": "", "label": "完整的看板访问权限",
"description": "" "description": "允许成员查看、修改和删除全部看板 (包括访问控制和危险区)"
} }
} }
}, },
"integration": { "integration": {
"title": "", "title": "组件",
"item": { "item": {
"create": { "create": {
"label": "", "label": "创建组件",
"description": "" "description": "允许成员创建组件"
}, },
"use-all": { "use-all": {
"label": "", "label": "使用全部组件",
"description": "" "description": "允许成员将任何组件添加到他们的看板"
}, },
"interact-all": { "interact-all": {
"label": "", "label": "与任何组件互动",
"description": "" "description": "允许成员与任何组件互动"
}, },
"full-all": { "full-all": {
"label": "", "label": "完全的组件访问权限",
"description": "" "description": "允许成员管理、使用并与任何组件交互"
} }
} }
}, },
"media": { "media": {
"title": "", "title": "媒体",
"item": { "item": {
"upload": { "upload": {
"label": "", "label": "上传媒体",
"description": "" "description": "允许成员上传媒体"
}, },
"view-all": { "view-all": {
"label": "", "label": "查看全部媒体",
"description": "" "description": "允许成员查看全部媒体"
}, },
"full-all": { "full-all": {
"label": "", "label": "完全的媒体访问权限",
"description": "" "description": "允许成员管理和删除任何媒体"
} }
} }
}, },
"other": { "other": {
"title": "", "title": "其它",
"item": { "item": {
"view-logs": { "view-logs": {
"label": "", "label": "查看日志",
"description": "" "description": "允许成员查看日志"
} }
} }
}, },
"search-engine": { "search-engine": {
"title": "", "title": "搜索引擎",
"item": { "item": {
"create": { "create": {
"label": "", "label": "创建搜索引擎",
"description": "" "description": "允许成员创建搜索引擎"
}, },
"modify-all": { "modify-all": {
"label": "", "label": "修改全部搜索引擎",
"description": "" "description": "允许成员修改全部搜索引擎"
}, },
"full-all": { "full-all": {
"label": "", "label": "完整的搜索引擎访问权限",
"description": "" "description": "允许成员管理和删除任何搜索引擎"
} }
} }
} }
}, },
"memberNotice": { "memberNotice": {
"mixed": "", "mixed": "部分成员来自外部提供者,无法在此处管理",
"external": "" "external": "所有成员都来自外部提供者,无法在此处管理"
}, },
"reservedNotice": { "reservedNotice": {
"message": "" "message": "此用户组保留供系统使用并限制部分操作 <checkoutDocs></checkoutDocs>"
}, },
"action": { "action": {
"create": { "create": {
"label": "", "label": "新建用户组",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "用户组已成功创建"
}, },
"error": { "error": {
"message": "" "message": "无法创建用户组"
} }
} }
}, },
"transfer": { "transfer": {
"label": "", "label": "转移所有权",
"description": "", "description": "将此用户组的所有权转移给另一个用户。",
"confirm": "", "confirm": "确定将用户组 {name} 的所有权转移给 {username} 吗?",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "成功将用户组 {group} 的所有权转移给 {user}"
}, },
"error": { "error": {
"message": "" "message": "无法转移所有权"
} }
} }
}, },
"addMember": { "addMember": {
"label": "" "label": "添加成员"
}, },
"removeMember": { "removeMember": {
"label": "", "label": "删除成员",
"confirm": "" "confirm": "确定将 {user} 从此用户组移除吗?"
}, },
"delete": { "delete": {
"label": "", "label": "删除用户组",
"description": "", "description": "用户组一旦删除就无法恢复. 请谨慎操作.",
"confirm": "", "confirm": "确认删除用户组 {name} 吗?",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "成功删除用户组 {name}"
}, },
"error": { "error": {
"message": "" "message": "无法删除用户组 {name}"
} }
} }
}, },
"changePermissions": { "changePermissions": {
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "权限已保存",
"message": "" "message": "权限保存成功"
}, },
"error": { "error": {
"title": "", "title": "权限未保存",
"message": "" "message": "权限尚未保存"
} }
} }
}, },
"update": { "update": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "用户组 {name} 保存成功"
}, },
"error": { "error": {
"message": "" "message": "无法保存用户组 {name}"
} }
} }
}, },
"select": { "select": {
"label": "", "label": "选择用户组",
"notFound": "" "notFound": "未找到用户组"
} }
} }
}, },
@@ -493,47 +493,47 @@
"list": { "list": {
"title": "应用", "title": "应用",
"noResults": { "noResults": {
"title": "", "title": "尚无应用",
"action": "" "action": "创建您的第一个应用"
} }
}, },
"create": { "create": {
"title": "", "title": "新建应用",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "创建成功",
"message": "" "message": "应用已成功创建"
}, },
"error": { "error": {
"title": "", "title": "创建失败",
"message": "" "message": "无法创建此应用"
} }
} }
}, },
"edit": { "edit": {
"title": "", "title": "编辑应用",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "更改应用成功",
"message": "" "message": "应用保存成功"
}, },
"error": { "error": {
"title": "", "title": "无法应用更改",
"message": "" "message": "无法保存此应用"
} }
} }
}, },
"delete": { "delete": {
"title": "", "title": "删除应用",
"message": "", "message": "确认删除应用 {name} 吗?",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "成功删除",
"message": "" "message": "应用已成功删除"
}, },
"error": { "error": {
"title": "", "title": "删除失败",
"message": "" "message": "无法删除应用"
} }
} }
} }
@@ -543,65 +543,65 @@
"label": "名称" "label": "名称"
}, },
"description": { "description": {
"label": "" "label": "描述"
}, },
"url": { "url": {
"label": "" "label": "Url"
} }
}, },
"action": { "action": {
"select": { "select": {
"label": "", "label": "选择应用",
"notFound": "" "notFound": "未找到应用"
} }
} }
}, },
"integration": { "integration": {
"page": { "page": {
"list": { "list": {
"title": "", "title": "组件",
"search": "", "search": "搜索组件",
"noResults": { "noResults": {
"title": "" "title": "尚无组件"
} }
}, },
"create": { "create": {
"title": "", "title": "新的组件 {name}",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "创建成功",
"message": "" "message": "组件已成功创建"
}, },
"error": { "error": {
"title": "", "title": "创建失败",
"message": "" "message": "无法创建组件"
} }
} }
}, },
"edit": { "edit": {
"title": "", "title": "编辑组件 {name}",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "更改应用成功",
"message": "" "message": "组件已成功保存"
}, },
"error": { "error": {
"title": "", "title": "无法应用更改",
"message": "" "message": "无法保存此组件"
} }
} }
}, },
"delete": { "delete": {
"title": "", "title": "删除组件",
"message": "", "message": "确认删除组件 {name} 吗?",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "成功删除",
"message": "" "message": "组件已成功删除"
}, },
"error": { "error": {
"title": "", "title": "删除失败",
"message": "" "message": "无法删除组件"
} }
} }
} }
@@ -611,21 +611,21 @@
"label": "名称" "label": "名称"
}, },
"url": { "url": {
"label": "" "label": "Url"
} }
}, },
"action": { "action": {
"create": "" "create": "新建组件"
}, },
"testConnection": { "testConnection": {
"action": { "action": {
"create": "", "create": "测试连接并创建",
"edit": "" "edit": "测试连接并保存"
}, },
"alertNotice": "", "alertNotice": "成功建立连接后保存按钮将启用",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "连接成功",
"message": "" "message": ""
}, },
"invalidUrl": { "invalidUrl": {
@@ -978,7 +978,7 @@
}, },
"field": { "field": {
"integrations": { "integrations": {
"label": "" "label": "组件"
}, },
"customCssClasses": { "customCssClasses": {
"label": "" "label": ""
@@ -1213,7 +1213,7 @@
} }
}, },
"iframe": { "iframe": {
"name": "iFrame", "name": "",
"description": "嵌入互联网上的任何内容。某些网站可能限制访问。", "description": "嵌入互联网上的任何内容。某些网站可能限制访问。",
"option": { "option": {
"embedUrl": { "embedUrl": {
@@ -1981,15 +1981,15 @@
}, },
"error": { "error": {
"noBoard": { "noBoard": {
"title": "", "title": "欢迎使用 Homarr",
"description": "", "description": "",
"link": "", "link": "创建您的第一个面板",
"notice": "" "notice": ""
}, },
"notFound": { "notFound": {
"title": "", "title": "",
"description": "", "description": "",
"link": "", "link": "查看全部面板",
"notice": "" "notice": ""
}, },
"homeBoard": { "homeBoard": {
@@ -2028,7 +2028,7 @@
"home": "首页", "home": "首页",
"boards": "面板", "boards": "面板",
"apps": "应用", "apps": "应用",
"integrations": "", "integrations": "组件",
"searchEngies": "", "searchEngies": "",
"medias": "", "medias": "",
"users": { "users": {
@@ -2042,9 +2042,9 @@
"tools": { "tools": {
"label": "工具", "label": "工具",
"items": { "items": {
"docker": "Docker", "docker": "",
"logs": "", "logs": "",
"api": "API", "api": "",
"tasks": "" "tasks": ""
} }
}, },
@@ -2067,7 +2067,7 @@
"board": "面板", "board": "面板",
"user": "用户", "user": "用户",
"invite": "邀请", "invite": "邀请",
"integration": "", "integration": "组件",
"app": "应用", "app": "应用",
"group": "" "group": ""
}, },
@@ -2168,10 +2168,10 @@
"label": "" "label": ""
}, },
"completed": { "completed": {
"title": "" "title": "创建用户"
}, },
"error": { "error": {
"title": "" "title": "用户创建失败"
} }
}, },
"action": { "action": {
@@ -2199,7 +2199,7 @@
}, },
"field": { "field": {
"id": { "id": {
"label": "ID" "label": ""
}, },
"creator": { "creator": {
"label": "创建者" "label": "创建者"
@@ -2208,7 +2208,7 @@
"label": "过期时间" "label": "过期时间"
}, },
"token": { "token": {
"label": "Token" "label": ""
} }
} }
} }
@@ -2370,7 +2370,7 @@
} }
}, },
"api": { "api": {
"title": "API", "title": "",
"modal": { "modal": {
"createApiToken": { "createApiToken": {
"title": "", "title": "",
@@ -2390,7 +2390,7 @@
}, },
"table": { "table": {
"header": { "header": {
"id": "ID", "id": "",
"createdBy": "" "createdBy": ""
} }
} }
@@ -2555,7 +2555,7 @@
"label": "面板" "label": "面板"
}, },
"integrations": { "integrations": {
"label": "", "label": "组件",
"edit": { "edit": {
"label": "编辑" "label": "编辑"
}, },
@@ -2602,7 +2602,7 @@
"tools": { "tools": {
"label": "工具", "label": "工具",
"docker": { "docker": {
"label": "Docker" "label": ""
}, },
"logs": { "logs": {
"label": "" "label": ""
@@ -2662,7 +2662,7 @@
} }
}, },
"integration": { "integration": {
"title": "" "title": "组件"
} }
} }
}, },
@@ -2749,7 +2749,7 @@
"description": "" "description": ""
}, },
"torrent": { "torrent": {
"name": "Torrents", "name": "",
"description": "" "description": ""
}, },
"youTube": { "youTube": {

View File

@@ -27,7 +27,7 @@
"description": "Konfigurovat chování importu" "description": "Konfigurovat chování importu"
}, },
"boardSelection": { "boardSelection": {
"title": "", "title": "Nalezeno {count} ploch",
"description": "Vyberte všechny plochy s velikostmi, které chcete importovat", "description": "Vyberte všechny plochy s velikostmi, které chcete importovat",
"action": { "action": {
"selectAll": "Vybrat vše", "selectAll": "Vybrat vše",
@@ -38,33 +38,33 @@
"title": "Přehled importu", "title": "Přehled importu",
"description": "", "description": "",
"action": { "action": {
"import": "" "import": "Potvrdit import a pokračovat"
}, },
"entities": { "entities": {
"apps": "Aplikace", "apps": "Aplikace",
"boards": "Plochy", "boards": "Plochy",
"integrations": "", "integrations": "Integrace",
"credentialUsers": "" "credentialUsers": ""
} }
}, },
"tokenModal": { "tokenModal": {
"title": "", "title": "Zadejte token pro import",
"field": { "field": {
"token": { "token": {
"label": "", "label": "Token",
"description": "" "description": ""
} }
}, },
"notification": { "notification": {
"error": { "error": {
"title": "", "title": "Neplatný token",
"message": "" "message": "Token, který jste zadali je neplatný"
} }
} }
} }
}, },
"user": { "user": {
"title": "", "title": "Správce",
"subtitle": "", "subtitle": "",
"notification": { "notification": {
"success": { "success": {

View File

@@ -893,11 +893,11 @@
"dynamic": { "dynamic": {
"action": { "action": {
"create": "Neuer dynamischer Abschnitt", "create": "Neuer dynamischer Abschnitt",
"remove": "" "remove": "Dynamischen Abschnitt entfernen"
}, },
"remove": { "remove": {
"title": "", "title": "Dynamischen Abschnitt entfernen",
"message": "" "message": "Möchten Sie diesen dynamischen Abschnitt wirklich entfernen? Die Elemente werden an die gleiche Position im übergeordneten Abschnitt verschoben."
} }
}, },
"category": { "category": {
@@ -907,29 +907,29 @@
} }
}, },
"action": { "action": {
"create": "", "create": "Neue Kategorie",
"edit": "", "edit": "Kategorie umbenennen",
"remove": "", "remove": "Kategorie entfernen",
"moveUp": "Nach oben bewegen", "moveUp": "Nach oben bewegen",
"moveDown": "Nach unten bewegen", "moveDown": "Nach unten bewegen",
"createAbove": "", "createAbove": "Neue Kategorie oben",
"createBelow": "" "createBelow": "Neue Kategorie unten"
}, },
"create": { "create": {
"title": "", "title": "Neue Kategorie",
"submit": "" "submit": "Kategorie hinzufügen"
}, },
"remove": { "remove": {
"title": "", "title": "Kategorie entfernen",
"message": "" "message": "Möchten Sie die Kategorie {name} wirklich entfernen?"
}, },
"edit": { "edit": {
"title": "", "title": "Kategorie umbenennen",
"submit": "" "submit": "Kategorie umbenennen"
}, },
"menu": { "menu": {
"label": { "label": {
"create": "", "create": "Neue Kategorie",
"changePosition": "Position wechseln" "changePosition": "Position wechseln"
} }
} }
@@ -937,12 +937,12 @@
}, },
"item": { "item": {
"action": { "action": {
"create": "", "create": "Neues Element",
"import": "", "import": "Element importieren",
"edit": "", "edit": "Element bearbeiten",
"moveResize": "", "moveResize": "Element verschieben/Größe ändern",
"duplicate": "", "duplicate": "Element duplizieren",
"remove": "" "remove": "Element löschen"
}, },
"menu": { "menu": {
"label": { "label": {
@@ -950,11 +950,11 @@
} }
}, },
"create": { "create": {
"title": "", "title": "Wählen Sie das hinzuzufügende Element aus",
"addToBoard": "" "addToBoard": "Zum Board hinzufügen"
}, },
"moveResize": { "moveResize": {
"title": "", "title": "Element verschieben/Größe ändern",
"field": { "field": {
"width": { "width": {
"label": "Breite" "label": "Breite"
@@ -963,67 +963,67 @@
"label": "Höhe" "label": "Höhe"
}, },
"xOffset": { "xOffset": {
"label": "" "label": "X Versatz"
}, },
"yOffset": { "yOffset": {
"label": "" "label": "Y Versatz"
} }
} }
}, },
"edit": { "edit": {
"title": "", "title": "Element bearbeiten",
"advancedOptions": { "advancedOptions": {
"label": "", "label": "Erweiterte Optionen",
"title": "" "title": "Erweiterte Element Optionen"
}, },
"field": { "field": {
"integrations": { "integrations": {
"label": "" "label": "Integrationen"
}, },
"customCssClasses": { "customCssClasses": {
"label": "" "label": "Benutzerdefinierte CSS Klassen"
} }
} }
}, },
"remove": { "remove": {
"title": "", "title": "Element löschen",
"message": "" "message": "Soll dieses Element wirklich entfernt werden?"
} }
}, },
"widget": { "widget": {
"app": { "app": {
"name": "", "name": "",
"description": "", "description": "Bettet eine App in das Board ein.",
"option": { "option": {
"appId": { "appId": {
"label": "" "label": "App auswählen"
}, },
"openInNewTab": { "openInNewTab": {
"label": "In neuem Tab öffnen" "label": "In neuem Tab öffnen"
}, },
"showTitle": { "showTitle": {
"label": "" "label": "App Namen anzeigen"
}, },
"showDescriptionTooltip": { "showDescriptionTooltip": {
"label": "" "label": "Beschreibungs Tooltip anzeigen"
}, },
"pingEnabled": { "pingEnabled": {
"label": "" "label": "Einfachen Ping aktivieren"
} }
}, },
"error": { "error": {
"notFound": { "notFound": {
"label": "", "label": "Keine App",
"tooltip": "" "tooltip": "Sie haben keine gültige App ausgewählt"
} }
} }
}, },
"bookmarks": { "bookmarks": {
"name": "", "name": "Lesezeichen",
"description": "", "description": "Zeigt mehrere App Links an",
"option": { "option": {
"title": { "title": {
"label": "" "label": "Titel"
}, },
"layout": { "layout": {
"label": "Ansicht", "label": "Ansicht",
@@ -1040,7 +1040,7 @@
} }
}, },
"items": { "items": {
"label": "", "label": "Lesezeichen",
"add": "" "add": ""
} }
} }
@@ -1376,16 +1376,16 @@
} }
}, },
"popover": { "popover": {
"information": "", "information": "Informationen",
"processor": "", "processor": "Prozessor: {cpuModelName}",
"memory": "", "memory": "Speicher: {memory}GiB",
"memoryAvailable": "", "memoryAvailable": "Verfügbar: {memoryAvailable} GiB ({percent}%)",
"version": "", "version": "",
"uptime": "", "uptime": "Betriebszeit: {days} Tage, {hours} Stunden, {minutes} Minuten",
"loadAverage": "", "loadAverage": "Durchschnittliche Last:",
"minute": "", "minute": "1 Minute",
"minutes": "", "minutes": "{count} Minuten",
"used": "", "used": "Belegt",
"available": "Verfügbar", "available": "Verfügbar",
"lastSeen": "" "lastSeen": ""
}, },
@@ -1422,7 +1422,7 @@
"description": "" "description": ""
}, },
"app": { "app": {
"noData": "", "noData": "Keine App gefunden",
"description": "" "description": ""
}, },
"error": { "error": {
@@ -1735,11 +1735,11 @@
"edit": { "edit": {
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Änderungen erfolgreich angewendet",
"message": "" "message": ""
}, },
"error": { "error": {
"title": "", "title": "Änderungen konnten nicht angewendet werden",
"message": "" "message": ""
} }
}, },
@@ -1981,15 +1981,15 @@
}, },
"error": { "error": {
"noBoard": { "noBoard": {
"title": "", "title": "Willkommen bei Homarr",
"description": "", "description": "",
"link": "", "link": "Erstellen Sie Ihr erstes Board",
"notice": "" "notice": ""
}, },
"notFound": { "notFound": {
"title": "", "title": "",
"description": "", "description": "",
"link": "", "link": "Alle Boards anzeigen",
"notice": "" "notice": ""
}, },
"homeBoard": { "homeBoard": {
@@ -2013,7 +2013,7 @@
} }
}, },
"management": { "management": {
"metaTitle": "", "metaTitle": "Verwaltung",
"title": { "title": {
"morning": "", "morning": "",
"afternoon": "", "afternoon": "",
@@ -2028,15 +2028,15 @@
"home": "Startseite", "home": "Startseite",
"boards": "", "boards": "",
"apps": "", "apps": "",
"integrations": "", "integrations": "Integrationen",
"searchEngies": "", "searchEngies": "Suchmaschinen",
"medias": "", "medias": "Medien",
"users": { "users": {
"label": "Benutzer", "label": "Benutzer",
"items": { "items": {
"manage": "Verwalten", "manage": "Verwalten",
"invites": "Einladungen", "invites": "Einladungen",
"groups": "" "groups": "Gruppen"
} }
}, },
"tools": { "tools": {
@@ -2067,9 +2067,9 @@
"board": "", "board": "",
"user": "Benutzer", "user": "Benutzer",
"invite": "Einladungen", "invite": "Einladungen",
"integration": "", "integration": "Integrationen",
"app": "", "app": "",
"group": "" "group": "Gruppen"
}, },
"statisticLabel": { "statisticLabel": {
"boards": "", "boards": "",
@@ -2160,7 +2160,7 @@
"label": "Sicherheit" "label": "Sicherheit"
}, },
"groups": { "groups": {
"label": "", "label": "Gruppen",
"title": "", "title": "",
"description": "" "description": ""
}, },
@@ -2168,10 +2168,10 @@
"label": "" "label": ""
}, },
"completed": { "completed": {
"title": "" "title": "Benutzer erstellt"
}, },
"error": { "error": {
"title": "" "title": "Benutzer anlegen fehlgeschlagen"
} }
}, },
"action": { "action": {
@@ -2223,7 +2223,7 @@
"ownerOfGroupDeleted": "" "ownerOfGroupDeleted": ""
}, },
"members": { "members": {
"title": "", "title": "Mitglieder",
"search": "", "search": "",
"notFound": "" "notFound": ""
}, },
@@ -2297,8 +2297,8 @@
"defaultColorScheme": { "defaultColorScheme": {
"label": "", "label": "",
"options": { "options": {
"light": "", "light": "Hell",
"dark": "" "dark": "Dunkel"
} }
} }
}, },
@@ -2529,7 +2529,7 @@
}, },
"tab": { "tab": {
"user": "Benutzer", "user": "Benutzer",
"group": "", "group": "Gruppen",
"inherited": "" "inherited": ""
}, },
"field": { "field": {
@@ -2537,7 +2537,7 @@
"label": "Benutzer" "label": "Benutzer"
}, },
"group": { "group": {
"label": "" "label": "Gruppe"
}, },
"permission": { "permission": {
"label": "" "label": ""
@@ -2555,7 +2555,7 @@
"label": "" "label": ""
}, },
"integrations": { "integrations": {
"label": "", "label": "Integrationen",
"edit": { "edit": {
"label": "Bearbeiten" "label": "Bearbeiten"
}, },
@@ -2564,7 +2564,7 @@
} }
}, },
"search-engines": { "search-engines": {
"label": "", "label": "Suchmaschinen",
"new": { "new": {
"label": "" "label": ""
}, },
@@ -2573,7 +2573,7 @@
} }
}, },
"medias": { "medias": {
"label": "" "label": "Medien"
}, },
"apps": { "apps": {
"label": "", "label": "",
@@ -2593,7 +2593,7 @@
"security": "Sicherheit", "security": "Sicherheit",
"board": "", "board": "",
"groups": { "groups": {
"label": "" "label": "Gruppen"
}, },
"invites": { "invites": {
"label": "Einladungen" "label": "Einladungen"
@@ -2634,7 +2634,7 @@
"label": "" "label": ""
}, },
"edit": { "edit": {
"label": "" "label": "App bearbeiten"
} }
}, },
"detail": { "detail": {
@@ -2662,7 +2662,7 @@
} }
}, },
"integration": { "integration": {
"title": "" "title": "Integrationen"
} }
} }
}, },
@@ -2676,8 +2676,8 @@
"title": "", "title": "",
"option": { "option": {
"colorScheme": { "colorScheme": {
"light": "", "light": "Zum hellen Design wechseln",
"dark": "" "dark": "Zum dunklen Design wechseln"
}, },
"language": { "language": {
"label": "", "label": "",
@@ -2721,7 +2721,7 @@
"help": "", "help": "",
"group": { "group": {
"searchEngine": { "searchEngine": {
"title": "", "title": "Suchmaschinen",
"children": { "children": {
"action": { "action": {
"search": { "search": {
@@ -2828,7 +2828,7 @@
"label": "" "label": ""
}, },
"manageLog": { "manageLog": {
"label": "" "label": "Logs anzeigen"
}, },
"manageTask": { "manageTask": {
"label": "" "label": ""
@@ -2866,7 +2866,7 @@
} }
}, },
"group": { "group": {
"title": "", "title": "Gruppen",
"children": { "children": {
"action": { "action": {
"detail": { "detail": {
@@ -2900,12 +2900,12 @@
"label": "" "label": ""
}, },
"description": { "description": {
"label": "" "label": "Beschreibung"
} }
}, },
"page": { "page": {
"list": { "list": {
"title": "", "title": "Suchmaschinen",
"noResults": { "noResults": {
"title": "", "title": "",
"action": "" "action": ""
@@ -2929,11 +2929,11 @@
"title": "", "title": "",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Änderungen erfolgreich angewendet",
"message": "" "message": ""
}, },
"error": { "error": {
"title": "", "title": "Änderungen konnten nicht angewendet werden",
"message": "" "message": ""
} }
}, },

View File

@@ -52,7 +52,7 @@
"field": { "field": {
"token": { "token": {
"label": "Jeton", "label": "Jeton",
"description": "" "description": "Entrez le jeton d'importation de votre instance précédente"
} }
}, },
"notification": { "notification": {
@@ -65,7 +65,7 @@
}, },
"user": { "user": {
"title": "Administrateur", "title": "Administrateur",
"subtitle": "", "subtitle": "Spécifiez les informations d'identification pour votre compte d'administrateur.",
"notification": { "notification": {
"success": { "success": {
"title": "Utilisateur créé", "title": "Utilisateur créé",
@@ -97,7 +97,7 @@
"action": { "action": {
"goToBoard": "", "goToBoard": "",
"createBoard": "", "createBoard": "",
"inviteUser": "", "inviteUser": "Inviter d'autres utilisateurs",
"docs": "Lire la documentation" "docs": "Lire la documentation"
} }
} }
@@ -144,7 +144,7 @@
"label": "Confirmation du mot de passe" "label": "Confirmation du mot de passe"
}, },
"previousPassword": { "previousPassword": {
"label": "" "label": "Ancien mot de passe"
}, },
"homeBoard": { "homeBoard": {
"label": "" "label": ""
@@ -166,13 +166,13 @@
"message": "Vous êtes maintenant connecté" "message": "Vous êtes maintenant connecté"
}, },
"error": { "error": {
"title": "", "title": "Échec de la connexion",
"message": "" "message": ""
} }
}, },
"forgotPassword": { "forgotPassword": {
"label": "Mot de passe oublié?", "label": "Mot de passe oublié?",
"description": "" "description": "Un administrateur peut utiliser la commande suivante pour réinitialiser votre mot de passe :"
} }
}, },
"register": { "register": {
@@ -184,7 +184,7 @@
}, },
"error": { "error": {
"title": "", "title": "",
"message": "" "message": "Votre compte n'a pas pu être créé"
} }
} }
}, },
@@ -196,7 +196,7 @@
"message": "Mot de passe modifié avec succès" "message": "Mot de passe modifié avec succès"
}, },
"error": { "error": {
"message": "" "message": "Modification du mot de passe impossible"
} }
} }
}, },
@@ -232,17 +232,17 @@
}, },
"manageAvatar": { "manageAvatar": {
"changeImage": { "changeImage": {
"label": "", "label": "Modifier limage",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "L'image a été modifiée avec succès"
}, },
"error": { "error": {
"message": "Impossible de modifier l'image" "message": "Impossible de modifier l'image"
}, },
"toLarge": { "toLarge": {
"title": "L'image est trop volumineuse", "title": "L'image est trop volumineuse",
"message": "" "message": "La taille maximale de l'image est {size}"
} }
} }
}, },
@@ -271,8 +271,8 @@
}, },
"delete": { "delete": {
"label": "Supprimer définitivement l'utilisateur", "label": "Supprimer définitivement l'utilisateur",
"description": "", "description": "Supprime cet utilisateur ainsi que ses préférences. Ne supprimera aucun tableau. L'utilisateur ne sera pas averti.",
"confirm": "" "confirm": "Êtes-vous sûr de vouloir supprimer l'utilisateur {username} ainsi que ses préférences ?"
}, },
"select": { "select": {
"label": "Sélectionner l'utilisateur", "label": "Sélectionner l'utilisateur",
@@ -297,7 +297,7 @@
"item": { "item": {
"admin": { "admin": {
"label": "Administrateur", "label": "Administrateur",
"description": "" "description": "Les membres avec cette permission ont un accès complet à toutes les fonctionnalités et paramètres"
} }
} }
}, },
@@ -309,11 +309,11 @@
"description": "Autoriser les membres à créer des apps" "description": "Autoriser les membres à créer des apps"
}, },
"use-all": { "use-all": {
"label": "", "label": "Utiliser toutes les apps",
"description": "" "description": ""
}, },
"modify-all": { "modify-all": {
"label": "", "label": "Modifier toutes les apps",
"description": "" "description": ""
}, },
"full-all": { "full-all": {
@@ -344,11 +344,11 @@
} }
}, },
"integration": { "integration": {
"title": "", "title": "Intégrations",
"item": { "item": {
"create": { "create": {
"label": "", "label": "Créer des intégrations",
"description": "" "description": "Autoriser les membres à créer des intégrations"
}, },
"use-all": { "use-all": {
"label": "", "label": "",
@@ -365,37 +365,37 @@
} }
}, },
"media": { "media": {
"title": "", "title": "Médias",
"item": { "item": {
"upload": { "upload": {
"label": "", "label": "Téléverser des médias",
"description": "" "description": "Autoriser les membres à téléverser des médias"
}, },
"view-all": { "view-all": {
"label": "", "label": "Voir tous les médias",
"description": "" "description": "Autoriser les membres à voir tous les médias"
}, },
"full-all": { "full-all": {
"label": "", "label": "Accès complet aux médias",
"description": "" "description": "Autoriser les membres à gérer et supprimer les médias"
} }
} }
}, },
"other": { "other": {
"title": "", "title": "Autre",
"item": { "item": {
"view-logs": { "view-logs": {
"label": "", "label": "Voir les logs",
"description": "" "description": "Autoriser les membres à voir les logs"
} }
} }
}, },
"search-engine": { "search-engine": {
"title": "", "title": "Moteurs de recherche",
"item": { "item": {
"create": { "create": {
"label": "", "label": "Créer des moteurs de recherche",
"description": "" "description": "Autoriser les membres à créer des moteurs de recherche"
}, },
"modify-all": { "modify-all": {
"label": "", "label": "",
@@ -413,62 +413,62 @@
"external": "" "external": ""
}, },
"reservedNotice": { "reservedNotice": {
"message": "" "message": "Ce groupe est réservé pour l'utilisation du système et restreint certaines actions. <checkoutDocs></checkoutDocs>"
}, },
"action": { "action": {
"create": { "create": {
"label": "", "label": "Nouveau groupe",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "Le groupe a été créé avec succès"
}, },
"error": { "error": {
"message": "" "message": "Le groupe n'a pas pu être créé"
} }
} }
}, },
"transfer": { "transfer": {
"label": "", "label": "Changer le propriétaire",
"description": "", "description": "Transférer la propriété de ce groupe à un autre utilisateur.",
"confirm": "", "confirm": "Êtes-vous sûr de vouloir transférer la propriété du groupe {name} à {username}?",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "Le groupe {group} a été transféré avec succès à {user}"
}, },
"error": { "error": {
"message": "" "message": "Impossible de transférer la propriété"
} }
} }
}, },
"addMember": { "addMember": {
"label": "" "label": "Ajouter un membre"
}, },
"removeMember": { "removeMember": {
"label": "", "label": "Retirer un membre",
"confirm": "" "confirm": "Êtes-vous sûr de vouloir retirer {user} de ce groupe ?"
}, },
"delete": { "delete": {
"label": "", "label": "Supprimer le groupe",
"description": "", "description": "Une fois que vous supprimez un groupe, il n'y a pas de retour en arrière possible. Soyez certain.",
"confirm": "", "confirm": "Êtes-vous sûr de vouloir supprimer le groupe {name}?",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "Groupe {name} supprimé avec succès"
}, },
"error": { "error": {
"message": "" "message": "Impossible de supprimer le groupe {name}"
} }
} }
}, },
"changePermissions": { "changePermissions": {
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Permissions sauvegardées",
"message": "" "message": "Les permissions ont été sauvegardées avec succès"
}, },
"error": { "error": {
"title": "", "title": "Permissions non sauvegardées",
"message": "" "message": "Les permissions n'ont pas été sauvegardées"
} }
} }
}, },
@@ -483,8 +483,8 @@
} }
}, },
"select": { "select": {
"label": "", "label": "Sélectionner un groupe",
"notFound": "" "notFound": "Aucun groupe trouvé"
} }
} }
}, },
@@ -493,16 +493,16 @@
"list": { "list": {
"title": "Applications", "title": "Applications",
"noResults": { "noResults": {
"title": "", "title": "Il n'y a pas encore d'apps",
"action": "" "action": "Créer votre première app"
} }
}, },
"create": { "create": {
"title": "", "title": "Nouvelle app",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Créé avec succès",
"message": "" "message": "L'application a bien été créée"
}, },
"error": { "error": {
"title": "", "title": "",
@@ -518,17 +518,17 @@
"message": "" "message": ""
}, },
"error": { "error": {
"title": "", "title": "Impossible d'appliquer les changements",
"message": "" "message": ""
} }
} }
}, },
"delete": { "delete": {
"title": "", "title": "Supprimer l'app",
"message": "", "message": "Êtes-vous sûr de vouloir supprimer l'app {name}?",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Suppression effectuée avec succès",
"message": "" "message": ""
}, },
"error": { "error": {
@@ -543,23 +543,23 @@
"label": "Nom" "label": "Nom"
}, },
"description": { "description": {
"label": "" "label": "Description"
}, },
"url": { "url": {
"label": "" "label": "Url"
} }
}, },
"action": { "action": {
"select": { "select": {
"label": "", "label": "Sélectionner l'app",
"notFound": "" "notFound": "Aucune app trouvée"
} }
} }
}, },
"integration": { "integration": {
"page": { "page": {
"list": { "list": {
"title": "", "title": "Intégrations",
"search": "", "search": "",
"noResults": { "noResults": {
"title": "" "title": ""
@@ -569,7 +569,7 @@
"title": "", "title": "",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Créé avec succès",
"message": "" "message": ""
}, },
"error": { "error": {
@@ -611,37 +611,37 @@
"label": "Nom" "label": "Nom"
}, },
"url": { "url": {
"label": "" "label": "Url"
} }
}, },
"action": { "action": {
"create": "" "create": "Nouvelle intégration"
}, },
"testConnection": { "testConnection": {
"action": { "action": {
"create": "", "create": "Tester la connexion et créer",
"edit": "" "edit": "Tester la connexion et enregistrer"
}, },
"alertNotice": "", "alertNotice": "Le bouton Enregistrer est activé une fois qu'une connexion est établie avec succès",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Connexion réussie",
"message": "" "message": "La connexion a été établie avec succès"
}, },
"invalidUrl": { "invalidUrl": {
"title": "URL invalide", "title": "URL invalide",
"message": "" "message": "L'URL est invalide."
}, },
"secretNotDefined": { "secretNotDefined": {
"title": "", "title": "Identifiants manquants",
"message": "" "message": "Les informations d'identification n'ont pas toutes été fournies"
}, },
"invalidCredentials": { "invalidCredentials": {
"title": "", "title": "Informations d'identification incorrectes.",
"message": "" "message": "Les informations d'identification ne sont pas valides"
}, },
"commonError": { "commonError": {
"title": "", "title": "Échec de la connexion",
"message": "" "message": ""
}, },
"badRequest": { "badRequest": {
@@ -709,11 +709,11 @@
"kind": { "kind": {
"username": { "username": {
"label": "Nom d'utilisateur", "label": "Nom d'utilisateur",
"newLabel": "" "newLabel": "Nouveau nom d'utilisateur"
}, },
"apiKey": { "apiKey": {
"label": "", "label": "Clé API",
"newLabel": "" "newLabel": "Nouvelle clé API"
}, },
"password": { "password": {
"label": "Mot de passe", "label": "Mot de passe",
@@ -761,12 +761,12 @@
} }
}, },
"copy": { "copy": {
"label": "" "label": "Copier l'URL"
} }
} }
}, },
"common": { "common": {
"beta": "", "beta": "Bêta",
"error": "Erreur", "error": "Erreur",
"action": { "action": {
"add": "Ajouter", "add": "Ajouter",
@@ -774,7 +774,7 @@
"backToOverview": "", "backToOverview": "",
"create": "Créer", "create": "Créer",
"edit": "Modifier", "edit": "Modifier",
"import": "", "import": "Importer",
"insert": "Insérer", "insert": "Insérer",
"remove": "Supprimer", "remove": "Supprimer",
"save": "Sauvegarder", "save": "Sauvegarder",
@@ -783,31 +783,31 @@
"delete": "Supprimer", "delete": "Supprimer",
"discard": "", "discard": "",
"confirm": "Confirmer", "confirm": "Confirmer",
"continue": "", "continue": "Continuer",
"previous": "Précédent", "previous": "Précédent",
"next": "Suivant", "next": "Suivant",
"checkoutDocs": "", "checkoutDocs": "Voir la documentation",
"checkLogs": "", "checkLogs": "Vérifiez les logs pour plus de détails",
"tryAgain": "Réessayer", "tryAgain": "Réessayer",
"loading": "" "loading": "Chargement"
}, },
"here": "", "here": "ici",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "" "header": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
"light": "", "light": "Clair",
"dark": "" "dark": "Sombre"
} }
}, },
"information": { "information": {
"min": "", "min": "Min",
"max": "", "max": "Max",
"days": "", "days": "Jours",
"hours": "Heures", "hours": "Heures",
"minutes": "" "minutes": "Minutes"
}, },
"notification": { "notification": {
"create": { "create": {
@@ -832,7 +832,7 @@
}, },
"multiText": { "multiText": {
"placeholder": "", "placeholder": "",
"addLabel": "" "addLabel": "Ajouter {value}"
}, },
"select": { "select": {
"placeholder": "", "placeholder": "",
@@ -844,9 +844,9 @@
"menu": { "menu": {
"switchToDarkMode": "Activer le mode sombre", "switchToDarkMode": "Activer le mode sombre",
"switchToLightMode": "Activer le mode clair", "switchToLightMode": "Activer le mode clair",
"management": "", "management": "Administration",
"preferences": "Vos préférences", "preferences": "Vos préférences",
"logout": "", "logout": "Se déconnecter",
"login": "Connexion", "login": "Connexion",
"homeBoard": "", "homeBoard": "",
"loggedOut": "", "loggedOut": "",
@@ -992,7 +992,7 @@
}, },
"widget": { "widget": {
"app": { "app": {
"name": "", "name": "App",
"description": "", "description": "",
"option": { "option": {
"appId": { "appId": {

View File

@@ -93,39 +93,39 @@
"finish": { "finish": {
"title": "סיים את ההגדרה", "title": "סיים את ההגדרה",
"subtitle": "", "subtitle": "",
"description": "", "description": "השלמת בהצלחה את תהליך ההגדרה. כעת תוכל להתחיל להשתמש ב-Homarr. בחר את הפעולה הבאה שלך:",
"action": { "action": {
"goToBoard": "", "goToBoard": "עבור ללוח {name}",
"createBoard": "", "createBoard": "צור את הלוח הראשון שלך",
"inviteUser": "", "inviteUser": "הזמן משתמשים אחרים",
"docs": "" "docs": "קרא את הדוקומנטציה"
} }
} }
}, },
"backToStart": "" "backToStart": "חזרה להתחלה"
}, },
"user": { "user": {
"title": "משתמשים", "title": "משתמשים",
"name": "משתמש", "name": "משתמש",
"page": { "page": {
"login": { "login": {
"title": "", "title": "היכנס לחשבון שלך",
"subtitle": "" "subtitle": "ברוך שובך! אנא הזן את שם המשתמש והסיסמה שלך"
}, },
"invite": { "invite": {
"title": "", "title": "הצטרף ל- Homarr",
"subtitle": "", "subtitle": "ברוכים הבאים ל- Homarr! נא ליצור את החשבון שלך",
"description": "" "description": "הוזמנת על ידי {username}"
}, },
"init": { "init": {
"title": "", "title": "התקנת Homarr חדשה",
"subtitle": "" "subtitle": "נא ליצור את משתמש המנהל הראשוני"
} }
}, },
"field": { "field": {
"email": { "email": {
"label": "אימייל", "label": "אימייל",
"verified": "" "verified": "מאומת"
}, },
"username": { "username": {
"label": "שם משתמש" "label": "שם משתמש"
@@ -133,46 +133,46 @@
"password": { "password": {
"label": "סיסמה", "label": "סיסמה",
"requirement": { "requirement": {
"length": "", "length": "כולל לפחות 8 תווים",
"lowercase": "אפשר אותיות קטנות", "lowercase": "אפשר אותיות קטנות",
"uppercase": "אפשר אותיות גדולות", "uppercase": "אפשר אותיות גדולות",
"number": "אפשר מספרים", "number": "אפשר מספרים",
"special": "" "special": "כולל סמל מיוחד"
} }
}, },
"passwordConfirm": { "passwordConfirm": {
"label": "אימות סיסמא" "label": "אימות סיסמא"
}, },
"previousPassword": { "previousPassword": {
"label": "" "label": "סיסמה קודמת"
}, },
"homeBoard": { "homeBoard": {
"label": "" "label": "לוח בית"
}, },
"pingIconsEnabled": { "pingIconsEnabled": {
"label": "" "label": "השתמש בסמלים עבור פינגים"
} }
}, },
"error": { "error": {
"usernameTaken": "" "usernameTaken": "שם המשתמש תפוס"
}, },
"action": { "action": {
"login": { "login": {
"label": "התחבר/י", "label": "התחבר/י",
"labelWith": "", "labelWith": "התחבר עם {provider}",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "התחברת בהצלחה",
"message": "" "message": "אתה כעת מחובר"
}, },
"error": { "error": {
"title": "", "title": "התחברות נכשלה",
"message": "" "message": "הכניסה נכשלה"
} }
}, },
"forgotPassword": { "forgotPassword": {
"label": "", "label": "שכחת את הסיסמה שלך?",
"description": "" "description": "מנהל מערכת יכול להשתמש בפקודה הבאה כדי לאפס את הסיסמה שלך:"
} }
}, },
"register": { "register": {
@@ -180,81 +180,81 @@
"notification": { "notification": {
"success": { "success": {
"title": "החשבון נוצר", "title": "החשבון נוצר",
"message": "" "message": "אנא היכנס כדי להמשיך"
}, },
"error": { "error": {
"title": "", "title": "יצירת החשבון נכשלה",
"message": "" "message": "לא ניתן ליצור את החשבון שלך"
} }
} }
}, },
"create": "צור משתמש", "create": "צור משתמש",
"changePassword": { "changePassword": {
"label": "", "label": "שינוי סיסמה",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "הסיסמה שונתה בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן לשנות סיסמה"
} }
} }
}, },
"changeHomeBoard": { "changeHomeBoard": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "לוח הבית השתנה בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן לשנות לוח בית"
} }
} }
}, },
"changeFirstDayOfWeek": { "changeFirstDayOfWeek": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "היום הראשון בשבוע השתנה בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן לשנות את היום הראשון בשבוע"
} }
} }
}, },
"changePingIconsEnabled": { "changePingIconsEnabled": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "סמלי פינג הוחלפו בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן לשנות את סמלי הפינג"
} }
} }
}, },
"manageAvatar": { "manageAvatar": {
"changeImage": { "changeImage": {
"label": "", "label": "שנה תמונה",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "התמונה השתנתה בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן לשנות תמונה"
}, },
"toLarge": { "toLarge": {
"title": "", "title": "התמונה גדולה מדי",
"message": "" "message": "גודל התמונה המרבי הוא {size}"
} }
} }
}, },
"removeImage": { "removeImage": {
"label": "", "label": "הסר תמונה",
"confirm": "", "confirm": "האם אתה בטוח שברצונך להסיר את התמונה?",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "התמונה הוסרה בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן להסיר תמונה"
} }
} }
} }
@@ -262,42 +262,42 @@
"editProfile": { "editProfile": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "הפרופיל עודכן בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן לעדכן את הפרופיל"
} }
} }
}, },
"delete": { "delete": {
"label": "", "label": "מחק משתמש לצמיתות",
"description": "", "description": "מוחק משתמש זה כולל העדפותיו. לא ימחק אף לוח. המשתמש לא יקבל הודעה.",
"confirm": "" "confirm": "האם אתה בטוח שאתה רוצה למחוק את המשתמש {username} עם ההעדפות שלו?"
}, },
"select": { "select": {
"label": "", "label": "בחר משתמש",
"notFound": "" "notFound": "לא נמצא משתמש"
}, },
"transfer": { "transfer": {
"label": "" "label": "בחר בעלים חדש"
} }
} }
}, },
"group": { "group": {
"title": "", "title": "קבוצות",
"name": "", "name": "קבוצה",
"search": "", "search": "מצא קבוצה",
"field": { "field": {
"name": "שם", "name": "שם",
"members": "" "members": "חברים"
}, },
"permission": { "permission": {
"admin": { "admin": {
"title": "מנהל מערכת", "title": "מנהל מערכת",
"item": { "item": {
"admin": { "admin": {
"label": "", "label": "מנהל",
"description": "" "description": "לחברים עם הרשאה זו יש גישה מלאה לכל התכונות וההגדרות"
} }
} }
}, },
@@ -305,20 +305,20 @@
"title": "אפליקציות", "title": "אפליקציות",
"item": { "item": {
"create": { "create": {
"label": "", "label": "יצירת אפליקציות",
"description": "" "description": "מאפשר לחברים ליצור אפליקציות"
}, },
"use-all": { "use-all": {
"label": "", "label": "שימוש בכל האפליקציות",
"description": "" "description": "מאפשר לחברים להוסיף כל אפליקציות ללוחות שלהם"
}, },
"modify-all": { "modify-all": {
"label": "", "label": "משנה את כל האפליקציות",
"description": "" "description": "מאפשר לחברים לשנות את כל האפליקציות"
}, },
"full-all": { "full-all": {
"label": "", "label": "גישה מלאה לאפליקציה",
"description": "" "description": "מאפשר לחברים לנהל, להשתמש ולמחוק כל אפליקציה"
} }
} }
}, },
@@ -326,20 +326,20 @@
"title": "לוחות", "title": "לוחות",
"item": { "item": {
"create": { "create": {
"label": "", "label": "יצירת לוחות",
"description": "" "description": "מאפשר לחברים ליצור לוחות"
}, },
"view-all": { "view-all": {
"label": "", "label": "הצגת כל הלוחות",
"description": "" "description": "מאפשר לחברים לצפות בכל הלוחות"
}, },
"modify-all": { "modify-all": {
"label": "", "label": "משנה את כל הלוחות",
"description": "" "description": "מאפשר לחברים לשנות את כל הלוחות (לא כולל בקרת גישה ואזור סכנה)"
}, },
"full-all": { "full-all": {
"label": "", "label": "גישה מלאה ללוח",
"description": "" "description": "אפשר לחברים להציג, לשנות ולמחוק את כל הלוחות (כולל בקרת גישה ואזור סכנה)"
} }
} }
}, },
@@ -347,144 +347,144 @@
"title": "אינטגרציות", "title": "אינטגרציות",
"item": { "item": {
"create": { "create": {
"label": "", "label": "יצירת אינטגרציות",
"description": "" "description": "אפשר לחברים ליצור אינטגרציות"
}, },
"use-all": { "use-all": {
"label": "", "label": "שימוש בכל האינטגרציות",
"description": "" "description": "מאפשר לחברים להוסיף כל אינטגרציה ללוחות שלהם"
}, },
"interact-all": { "interact-all": {
"label": "", "label": "אינטראקציה עם כל אינטגרציה",
"description": "" "description": "אפשר לחברים לקיים אינטראקציה עם כל אינטגרציה"
}, },
"full-all": { "full-all": {
"label": "", "label": "גישת אינטגרציה מלאה",
"description": "" "description": "אפשר לחברים לנהל, להשתמש ולקיים אינטראקציה עם כל אינטגרציה"
} }
} }
}, },
"media": { "media": {
"title": "", "title": "מדיה",
"item": { "item": {
"upload": { "upload": {
"label": "", "label": "העלה מדיה",
"description": "" "description": "אפשר לחברים להעלות מדיה"
}, },
"view-all": { "view-all": {
"label": "", "label": "הצג את כל המדיה",
"description": "" "description": "אפשר לחברים להציג את כל המדיה"
}, },
"full-all": { "full-all": {
"label": "", "label": "גישה מלאה למדיה",
"description": "" "description": "אפשר לחברים לנהל ולמחוק כל מדיה"
} }
} }
}, },
"other": { "other": {
"title": "", "title": "אחר",
"item": { "item": {
"view-logs": { "view-logs": {
"label": "", "label": "הצג לוגים",
"description": "" "description": "אפשר לחברים לצפות בלוגים"
} }
} }
}, },
"search-engine": { "search-engine": {
"title": "", "title": "מנועי חיפוש",
"item": { "item": {
"create": { "create": {
"label": "", "label": "צור מנועי חיפוש",
"description": "" "description": "אפשר לחברים ליצור מנועי חיפוש"
}, },
"modify-all": { "modify-all": {
"label": "", "label": "שנה את כל מנועי החיפוש",
"description": "" "description": "אפשר לחברים לשנות את כל מנועי החיפוש"
}, },
"full-all": { "full-all": {
"label": "", "label": "גישה מלאה למנועי חיפוש",
"description": "" "description": "אפשר לחברים לנהל ולמחוק כל מנוע חיפוש"
} }
} }
} }
}, },
"memberNotice": { "memberNotice": {
"mixed": "", "mixed": "חלק מהחברים הם מספקים חיצוניים ולא ניתן לנהל אותם כאן",
"external": "" "external": "כל החברים הם מספקים חיצוניים ולא ניתן לנהל אותם כאן"
}, },
"reservedNotice": { "reservedNotice": {
"message": "" "message": "קבוצה זו שמורה לשימוש במערכת ומגבילה חלק מהפעולות. <checkoutDocs></checkoutDocs>"
}, },
"action": { "action": {
"create": { "create": {
"label": "", "label": "קבוצה חדשה",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "הקבוצה נוצרה בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן ליצור את הקבוצה"
} }
} }
}, },
"transfer": { "transfer": {
"label": "", "label": "העברת בעלות",
"description": "", "description": "העבר את הבעלות על הקבוצה הזו למשתמש אחר.",
"confirm": "", "confirm": "האם אתה בטוח שברצונך להעביר בעלות על הקבוצה {name} ל- {username}?",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "הקבוצה {group} הועברה בהצלחה ל {user}"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן להעביר בעלות"
} }
} }
}, },
"addMember": { "addMember": {
"label": "" "label": "הוסף חבר"
}, },
"removeMember": { "removeMember": {
"label": "", "label": "הסר חבר",
"confirm": "" "confirm": "האם אתה בטוח שברצונך להסיר את {user} מהקבוצה הזו?"
}, },
"delete": { "delete": {
"label": "", "label": "מחק קבוצה",
"description": "", "description": "",
"confirm": "", "confirm": "האם אתה בטוח שברצונך למחוק את הקבוצה {name}?",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "הקבוצה {name} נמחקה בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן למחוק את הקבוצה {name}"
} }
} }
}, },
"changePermissions": { "changePermissions": {
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "ההרשאות נשמרו",
"message": "" "message": "ההרשאות נשמרו בהצלחה"
}, },
"error": { "error": {
"title": "", "title": "ההרשאות לא נשמרו",
"message": "" "message": "ההרשאות לא נשמרו"
} }
} }
}, },
"update": { "update": {
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "הקבוצה {name} נשמרה בהצלחה"
}, },
"error": { "error": {
"message": "" "message": "לא ניתן לשמור את הקבוצה {name}"
} }
} }
}, },
"select": { "select": {
"label": "", "label": "בחר קבוצה",
"notFound": "" "notFound": "לא נמצאה קבוצה"
} }
} }
}, },
@@ -493,47 +493,47 @@
"list": { "list": {
"title": "אפליקציות", "title": "אפליקציות",
"noResults": { "noResults": {
"title": "", "title": "עדיין אין אפליקציות",
"action": "" "action": "צור את האפליקציה הראשונה שלך"
} }
}, },
"create": { "create": {
"title": "", "title": "אפליקציה חדשה",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "היצירה הצליחה",
"message": "" "message": "האפליקציה נוצרה בהצלחה"
}, },
"error": { "error": {
"title": "", "title": "היצירה נכשלה",
"message": "" "message": "לא ניתן ליצור את האפליקציה"
} }
} }
}, },
"edit": { "edit": {
"title": "", "title": "ערוך אפליקציה",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "השינויים הוחלו בהצלחה",
"message": "" "message": "האפליקציה נשמרה בהצלחה"
}, },
"error": { "error": {
"title": "", "title": "לא ניתן להחיל שינויים",
"message": "" "message": "לא ניתן היה לשמור את האפליקציה"
} }
} }
}, },
"delete": { "delete": {
"title": "", "title": "מחק אפליקציה",
"message": "", "message": "האם אתה בטוח שברצונך למחוק את האפליקציה {name}?",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "המחיקה הצליחה",
"message": "" "message": "האפליקציה נמחקה בהצלחה"
}, },
"error": { "error": {
"title": "", "title": "המחיקה נכשלה",
"message": "" "message": "לא ניתן למחוק את האפליקציה"
} }
} }
} }
@@ -543,16 +543,16 @@
"label": "שם" "label": "שם"
}, },
"description": { "description": {
"label": "" "label": "תיאור"
}, },
"url": { "url": {
"label": "" "label": "כתובת אתר"
} }
}, },
"action": { "action": {
"select": { "select": {
"label": "", "label": "בחר אפליקציה",
"notFound": "" "notFound": "לא נמצאה אפליקציה"
} }
} }
}, },
@@ -560,48 +560,48 @@
"page": { "page": {
"list": { "list": {
"title": "אינטגרציות", "title": "אינטגרציות",
"search": "", "search": "חיפוש אינטגרציות",
"noResults": { "noResults": {
"title": "" "title": "עדיין אין אינטגרציות"
} }
}, },
"create": { "create": {
"title": "", "title": "אינטגרציה {name} חדשה",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "היצירה הצליחה",
"message": "" "message": "האינטגרציה נוצרה בהצלחה"
}, },
"error": { "error": {
"title": "", "title": "היצירה נכשלה",
"message": "" "message": "לא ניתן ליצור את האינטגרציה"
} }
} }
}, },
"edit": { "edit": {
"title": "", "title": "ערוך אינטגרציה {name}",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "השינויים הוחלו בהצלחה",
"message": "" "message": "האינטגרציה נשמרה בהצלחה"
}, },
"error": { "error": {
"title": "", "title": "לא ניתן להחיל שינויים",
"message": "" "message": "לא ניתן היה לשמור את האינטגרציה"
} }
} }
}, },
"delete": { "delete": {
"title": "", "title": "מחק אינטגרציה",
"message": "", "message": "האם אתה בטוח שברצונך למחוק את האינטגרציה {name}?",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "המחיקה הצליחה",
"message": "" "message": "האינטגרציה נמחקה בהצלחה"
}, },
"error": { "error": {
"title": "", "title": "המחיקה נכשלה",
"message": "" "message": "לא ניתן למחוק את האינטגרציה"
} }
} }
} }
@@ -611,29 +611,29 @@
"label": "שם" "label": "שם"
}, },
"url": { "url": {
"label": "" "label": "כתובת אתר"
} }
}, },
"action": { "action": {
"create": "" "create": "אינטגרציה חדשה"
}, },
"testConnection": { "testConnection": {
"action": { "action": {
"create": "", "create": "בדוק חיבור וצור",
"edit": "" "edit": "בדוק את החיבור ושמור"
}, },
"alertNotice": "", "alertNotice": "הלחצן שמור מופעל לאחר יצירת חיבור מוצלח",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "החיבור הצליח",
"message": "" "message": "החיבור נוצר בהצלחה"
}, },
"invalidUrl": { "invalidUrl": {
"title": "קישור לא תקין", "title": "קישור לא תקין",
"message": "" "message": "כתובת האתר אינה חוקית"
}, },
"secretNotDefined": { "secretNotDefined": {
"title": "", "title": "חסרים פרטי התחברות",
"message": "" "message": ""
}, },
"invalidCredentials": { "invalidCredentials": {
@@ -724,11 +724,11 @@
"permission": { "permission": {
"use": "", "use": "",
"interact": "", "interact": "",
"full": "" "full": "גישת אינטגרציה מלאה"
} }
}, },
"media": { "media": {
"plural": "", "plural": "מדיה",
"search": "", "search": "",
"field": { "field": {
"name": "שם", "name": "שם",
@@ -811,16 +811,16 @@
}, },
"notification": { "notification": {
"create": { "create": {
"success": "", "success": "היצירה הצליחה",
"error": "" "error": "היצירה נכשלה"
}, },
"delete": { "delete": {
"success": "", "success": "המחיקה הצליחה",
"error": "" "error": "המחיקה נכשלה"
}, },
"update": { "update": {
"success": "", "success": "השינויים הוחלו בהצלחה",
"error": "" "error": "לא ניתן להחיל שינויים"
}, },
"transfer": { "transfer": {
"success": "", "success": "",
@@ -1213,7 +1213,7 @@
} }
}, },
"iframe": { "iframe": {
"name": "", "name": "iFrame",
"description": "הטמע כל תוכן מהאינטרנט. חלק מהאתרים עשויים להגביל את הגישה.", "description": "הטמע כל תוכן מהאינטרנט. חלק מהאתרים עשויים להגביל את הגישה.",
"option": { "option": {
"embedUrl": { "embedUrl": {
@@ -1422,7 +1422,7 @@
"description": "" "description": ""
}, },
"app": { "app": {
"noData": "", "noData": "לא נמצאה אפליקציה",
"description": "" "description": ""
}, },
"error": { "error": {
@@ -1735,11 +1735,11 @@
"edit": { "edit": {
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "השינויים הוחלו בהצלחה",
"message": "" "message": ""
}, },
"error": { "error": {
"title": "", "title": "לא ניתן להחיל שינויים",
"message": "" "message": ""
} }
}, },
@@ -1983,13 +1983,13 @@
"noBoard": { "noBoard": {
"title": "ברוכים הבאים ל- Homarr", "title": "ברוכים הבאים ל- Homarr",
"description": "", "description": "",
"link": "", "link": "צור את הלוח הראשון שלך",
"notice": "" "notice": ""
}, },
"notFound": { "notFound": {
"title": "", "title": "",
"description": "", "description": "",
"link": "", "link": "הצגת כל הלוחות",
"notice": "" "notice": ""
}, },
"homeBoard": { "homeBoard": {
@@ -2029,14 +2029,14 @@
"boards": "לוחות", "boards": "לוחות",
"apps": "אפליקציות", "apps": "אפליקציות",
"integrations": "אינטגרציות", "integrations": "אינטגרציות",
"searchEngies": "", "searchEngies": "מנועי חיפוש",
"medias": "", "medias": "מדיה",
"users": { "users": {
"label": "משתמשים", "label": "משתמשים",
"items": { "items": {
"manage": "ניהול", "manage": "ניהול",
"invites": "הזמנות", "invites": "הזמנות",
"groups": "" "groups": "קבוצות"
} }
}, },
"tools": { "tools": {
@@ -2069,7 +2069,7 @@
"invite": "הזמנות", "invite": "הזמנות",
"integration": "אינטגרציות", "integration": "אינטגרציות",
"app": "אפליקציות", "app": "אפליקציות",
"group": "" "group": "קבוצות"
}, },
"statisticLabel": { "statisticLabel": {
"boards": "לוחות", "boards": "לוחות",
@@ -2130,7 +2130,7 @@
"title": "כללי", "title": "כללי",
"item": { "item": {
"language": "", "language": "",
"board": "", "board": "לוח בית",
"firstDayOfWeek": "היום הראשון בשבוע", "firstDayOfWeek": "היום הראשון בשבוע",
"accessibility": "נגישות" "accessibility": "נגישות"
} }
@@ -2160,7 +2160,7 @@
"label": "אבטחה" "label": "אבטחה"
}, },
"groups": { "groups": {
"label": "", "label": "קבוצות",
"title": "", "title": "",
"description": "" "description": ""
}, },
@@ -2223,7 +2223,7 @@
"ownerOfGroupDeleted": "" "ownerOfGroupDeleted": ""
}, },
"members": { "members": {
"title": "", "title": "חברים",
"search": "", "search": "",
"notFound": "" "notFound": ""
}, },
@@ -2529,7 +2529,7 @@
}, },
"tab": { "tab": {
"user": "משתמשים", "user": "משתמשים",
"group": "", "group": "קבוצות",
"inherited": "" "inherited": ""
}, },
"field": { "field": {
@@ -2537,7 +2537,7 @@
"label": "משתמש" "label": "משתמש"
}, },
"group": { "group": {
"label": "" "label": "קבוצה"
}, },
"permission": { "permission": {
"label": "" "label": ""
@@ -2564,7 +2564,7 @@
} }
}, },
"search-engines": { "search-engines": {
"label": "", "label": "מנועי חיפוש",
"new": { "new": {
"label": "" "label": ""
}, },
@@ -2573,7 +2573,7 @@
} }
}, },
"medias": { "medias": {
"label": "" "label": "מדיה"
}, },
"apps": { "apps": {
"label": "אפליקציות", "label": "אפליקציות",
@@ -2593,7 +2593,7 @@
"security": "אבטחה", "security": "אבטחה",
"board": "לוחות", "board": "לוחות",
"groups": { "groups": {
"label": "" "label": "קבוצות"
}, },
"invites": { "invites": {
"label": "הזמנות" "label": "הזמנות"
@@ -2634,7 +2634,7 @@
"label": "" "label": ""
}, },
"edit": { "edit": {
"label": "" "label": "ערוך אפליקציה"
} }
}, },
"detail": { "detail": {
@@ -2721,7 +2721,7 @@
"help": "", "help": "",
"group": { "group": {
"searchEngine": { "searchEngine": {
"title": "", "title": "מנועי חיפוש",
"children": { "children": {
"action": { "action": {
"search": { "search": {
@@ -2828,7 +2828,7 @@
"label": "" "label": ""
}, },
"manageLog": { "manageLog": {
"label": "" "label": "הצג לוגים"
}, },
"manageTask": { "manageTask": {
"label": "" "label": ""
@@ -2840,7 +2840,7 @@
"label": "אודות" "label": "אודות"
}, },
"homeBoard": { "homeBoard": {
"label": "" "label": "לוח בית"
}, },
"preferences": { "preferences": {
"label": "העדפות שלך" "label": "העדפות שלך"
@@ -2866,7 +2866,7 @@
} }
}, },
"group": { "group": {
"title": "", "title": "קבוצות",
"children": { "children": {
"action": { "action": {
"detail": { "detail": {
@@ -2900,12 +2900,12 @@
"label": "" "label": ""
}, },
"description": { "description": {
"label": "" "label": "תיאור"
} }
}, },
"page": { "page": {
"list": { "list": {
"title": "", "title": "מנועי חיפוש",
"noResults": { "noResults": {
"title": "", "title": "",
"action": "" "action": ""
@@ -2929,11 +2929,11 @@
"title": "", "title": "",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "השינויים הוחלו בהצלחה",
"message": "" "message": ""
}, },
"error": { "error": {
"title": "", "title": "לא ניתן להחיל שינויים",
"message": "" "message": ""
} }
}, },

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -2093,7 +2093,7 @@
"setHomeBoard": { "setHomeBoard": {
"label": "Сделать домашней панелью", "label": "Сделать домашней панелью",
"badge": { "badge": {
"label": "Домашняя", "label": "Главная",
"tooltip": "Эта панель будет показываться как ваша домашняя панель" "tooltip": "Эта панель будет показываться как ваша домашняя панель"
} }
}, },
@@ -2312,70 +2312,70 @@
}, },
"tool": { "tool": {
"tasks": { "tasks": {
"title": "", "title": "Задачи",
"status": { "status": {
"idle": "", "idle": "Ожидание",
"running": "Работает", "running": "Выполняется",
"error": "Ошибка" "error": "Ошибка"
}, },
"job": { "job": {
"iconsUpdater": { "iconsUpdater": {
"label": "" "label": "Обновление иконок"
}, },
"analytics": { "analytics": {
"label": "" "label": "Аналитика"
}, },
"smartHomeEntityState": { "smartHomeEntityState": {
"label": "" "label": "Состояние объектов умного дома"
}, },
"ping": { "ping": {
"label": "" "label": "Проверка доступности"
}, },
"mediaServer": { "mediaServer": {
"label": "Медиасервер" "label": "Медиасервер"
}, },
"mediaOrganizer": { "mediaOrganizer": {
"label": "" "label": "Организация медиафайлов"
}, },
"downloads": { "downloads": {
"label": "" "label": "Загрузки"
}, },
"mediaRequestStats": { "mediaRequestStats": {
"label": "" "label": "Статистика запросов медиаконтента"
}, },
"mediaRequestList": { "mediaRequestList": {
"label": "" "label": "Список запросов медиаконтента"
}, },
"rssFeeds": { "rssFeeds": {
"label": "" "label": "RSS-ленты"
}, },
"indexerManager": { "indexerManager": {
"label": "" "label": "Управление индексаторами"
}, },
"healthMonitoring": { "healthMonitoring": {
"label": "" "label": "Мониторинг состояния"
}, },
"dnsHole": { "dnsHole": {
"label": "" "label": "Данные DNS-фильтра"
}, },
"sessionCleanup": { "sessionCleanup": {
"label": "" "label": "Очистка сессий"
}, },
"updateChecker": { "updateChecker": {
"label": "" "label": "Проверка обновлений"
}, },
"mediaTranscoding": { "mediaTranscoding": {
"label": "" "label": "Перекодирование медиафайлов"
} }
} }
}, },
"api": { "api": {
"title": "", "title": "API",
"modal": { "modal": {
"createApiToken": { "createApiToken": {
"title": "", "title": "API-токен создан",
"description": "", "description": "API-токен создан. Этот токен зашифрован в базе данных и будет показан только один раз. После закрытия окна его нельзя будет восстановить.",
"button": "" "button": "Копировать и закрыть"
} }
}, },
"tab": { "tab": {
@@ -2383,15 +2383,15 @@
"label": "Документация" "label": "Документация"
}, },
"apiKey": { "apiKey": {
"label": "", "label": "Аутентификация",
"title": "", "title": "API-ключи",
"button": { "button": {
"createApiToken": "" "createApiToken": "Создать API-токен"
}, },
"table": { "table": {
"header": { "header": {
"id": "", "id": "ID",
"createdBy": "" "createdBy": "Создан пользователем"
} }
} }
} }
@@ -2399,20 +2399,20 @@
} }
}, },
"about": { "about": {
"version": "", "version": "Версия {version}",
"text": "", "text": "Homarr — это проект с открытым исходным кодом, поддерживаемый сообществом и развиваемый добровольцами. Благодаря этим людям Homarr остаётся растущим проектом с 2021 года. Наша команда работает над Homarr полностью удалённо из разных стран в своё свободное время без какой-либо компенсации.",
"accordion": { "accordion": {
"contributors": { "contributors": {
"title": "", "title": "Участники проекта",
"subtitle": "" "subtitle": "{count} поддерживают код и Homarr"
}, },
"translators": { "translators": {
"title": "", "title": "Переводчики",
"subtitle": "" "subtitle": "{count} помогают с переводами на разные языки"
}, },
"libraries": { "libraries": {
"title": "", "title": "Библиотеки",
"subtitle": "" "subtitle": "{count} используются в коде Homarr"
} }
} }
} }
@@ -2421,9 +2421,9 @@
"docker": { "docker": {
"title": "Контейнеры", "title": "Контейнеры",
"table": { "table": {
"updated": "", "updated": "Обновлено {when}",
"search": "", "search": "Поиск среди {count} контейнеров",
"selected": "" "selected": "Выбрано {selectCount} из {totalCount} контейнеров"
}, },
"field": { "field": {
"name": { "name": {
@@ -2434,11 +2434,11 @@
"option": { "option": {
"created": "Создан", "created": "Создан",
"running": "Работает", "running": "Работает",
"paused": "Приостановлено", "paused": "Приостановлен",
"restarting": "Перезапуск", "restarting": "Перезапускается",
"exited": "", "exited": "Остановлен",
"removing": "Удаление", "removing": "Удаляется",
"dead": "" "dead": "Нерабочий"
} }
}, },
"containerImage": { "containerImage": {
@@ -2453,12 +2453,12 @@
"label": "Запустить", "label": "Запустить",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Контейнеры запущены",
"message": "" "message": "Контейнеры успешно запущены"
}, },
"error": { "error": {
"title": "", "title": "Не удалось запустить контейнеры",
"message": "" "message": "Не удалось запустить контейнеры"
} }
} }
}, },
@@ -2466,12 +2466,12 @@
"label": "Остановить", "label": "Остановить",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Контейнеры остановлены",
"message": "" "message": "Контейнеры успешно остановлены"
}, },
"error": { "error": {
"title": "", "title": "Не удалось остановить контейнеры",
"message": "" "message": "Не удалось остановить контейнеры"
} }
} }
}, },
@@ -2479,12 +2479,12 @@
"label": "Перезапустить", "label": "Перезапустить",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Контейнеры перезапущены",
"message": "" "message": "Контейнеры успешно перезапущены"
}, },
"error": { "error": {
"title": "", "title": "Не удалось перезапустить контейнеры",
"message": "" "message": "Не удалось перезапустить контейнеры"
} }
} }
}, },
@@ -2492,45 +2492,45 @@
"label": "Удалить", "label": "Удалить",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Контейнеры удалены",
"message": "" "message": "Контейнеры успешно удалены"
}, },
"error": { "error": {
"title": "", "title": "Не удалось удалить контейнеры",
"message": "" "message": "Не удалось удалить контейнеры"
} }
} }
}, },
"refresh": { "refresh": {
"label": "", "label": "Обновить",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Контейнеры обновлены",
"message": "" "message": "Отображаются актуальные данные"
}, },
"error": { "error": {
"title": "", "title": "Не удалось обновить контейнеры",
"message": "" "message": "Произошла ошибка при обновлении данных о контейнерах"
} }
} }
} }
}, },
"error": { "error": {
"internalServerError": "" "internalServerError": "Произошла ошибка при обновлении данных о контейнерах"
} }
}, },
"permission": { "permission": {
"title": "", "title": "Права доступа",
"userSelect": { "userSelect": {
"title": "" "title": "Добавить права для пользователя"
}, },
"groupSelect": { "groupSelect": {
"title": "" "title": "Добавить права для группы"
}, },
"tab": { "tab": {
"user": "Пользователи", "user": "Пользователи",
"group": "Группы", "group": "Группы",
"inherited": "" "inherited": "Унаследованные группы"
}, },
"field": { "field": {
"user": { "user": {
@@ -2540,12 +2540,12 @@
"label": "Группа" "label": "Группа"
}, },
"permission": { "permission": {
"label": "" "label": "Права доступа"
} }
}, },
"action": { "action": {
"saveUser": "", "saveUser": "Сохранить права пользователя",
"saveGroup": "" "saveGroup": "Сохранить права группы"
} }
}, },
"navigationStructure": { "navigationStructure": {
@@ -2560,13 +2560,13 @@
"label": "Редактировать" "label": "Редактировать"
}, },
"new": { "new": {
"label": "" "label": "Новая"
} }
}, },
"search-engines": { "search-engines": {
"label": "Поисковые системы", "label": "Поисковые системы",
"new": { "new": {
"label": "" "label": "Новая"
}, },
"edit": { "edit": {
"label": "Редактировать" "label": "Редактировать"
@@ -2578,7 +2578,7 @@
"apps": { "apps": {
"label": "Приложения", "label": "Приложения",
"new": { "new": {
"label": "" "label": "Новое"
}, },
"edit": { "edit": {
"label": "Редактировать" "label": "Редактировать"
@@ -2589,7 +2589,7 @@
"create": { "create": {
"label": "Создать" "label": "Создать"
}, },
"general": "Основное", "general": "Общие",
"security": "Безопасность", "security": "Безопасность",
"board": "Панели", "board": "Панели",
"groups": { "groups": {
@@ -2602,10 +2602,10 @@
"tools": { "tools": {
"label": "Инструменты", "label": "Инструменты",
"docker": { "docker": {
"label": "" "label": "Docker"
}, },
"logs": { "logs": {
"label": "" "label": "Логи"
} }
}, },
"settings": { "settings": {
@@ -2617,28 +2617,28 @@
} }
}, },
"search": { "search": {
"placeholder": "", "placeholder": "Найдётся все",
"nothingFound": "", "nothingFound": "Ничего не найдено",
"error": { "error": {
"fetch": "" "fetch": "Произошла ошибка при получении данных"
}, },
"mode": { "mode": {
"appIntegrationBoard": { "appIntegrationBoard": {
"help": "", "help": "Поиск приложений, интеграций или панелей",
"group": { "group": {
"app": { "app": {
"title": "Приложения", "title": "Приложения",
"children": { "children": {
"action": { "action": {
"open": { "open": {
"label": "" "label": "Открыть URL приложения"
}, },
"edit": { "edit": {
"label": "Редактирование приложения" "label": "Редактировать приложение"
} }
}, },
"detail": { "detail": {
"title": "" "title": "Выберите действие для приложения"
} }
} }
}, },
@@ -2647,17 +2647,17 @@
"children": { "children": {
"action": { "action": {
"open": { "open": {
"label": "" "label": "Открыть панель"
}, },
"homeBoard": { "homeBoard": {
"label": "" "label": "Сделать домашней панелью"
}, },
"settings": { "settings": {
"label": "" "label": "Открыть настройки"
} }
}, },
"detail": { "detail": {
"title": "" "title": "Выберите действие для панели"
} }
} }
}, },
@@ -2667,94 +2667,94 @@
} }
}, },
"command": { "command": {
"help": "", "help": "Активировать режим команд",
"group": { "group": {
"localCommand": { "localCommand": {
"title": "" "title": "Локальные команды"
}, },
"globalCommand": { "globalCommand": {
"title": "", "title": "Глобальные команды",
"option": { "option": {
"colorScheme": { "colorScheme": {
"light": "", "light": "Переключить на светлую тему",
"dark": "" "dark": "Переключить на тёмную тему"
}, },
"language": { "language": {
"label": "", "label": "Изменить язык",
"children": { "children": {
"detail": { "detail": {
"title": "" "title": "Выберите предпочитаемый язык"
} }
} }
}, },
"newBoard": { "newBoard": {
"label": "" "label": "Создать новую панель"
}, },
"importBoard": { "importBoard": {
"label": "" "label": "Импортировать панель"
}, },
"newApp": { "newApp": {
"label": "" "label": "Создать новое приложение"
}, },
"newIntegration": { "newIntegration": {
"label": "", "label": "Создать новую интеграцию",
"children": { "children": {
"detail": { "detail": {
"title": "" "title": "Выберите тип интеграции для создания"
} }
} }
}, },
"newUser": { "newUser": {
"label": "" "label": "Создать нового пользователя"
}, },
"newInvite": { "newInvite": {
"label": "" "label": "Создать новое приглашение"
}, },
"newGroup": { "newGroup": {
"label": "" "label": "Создать новую группу"
} }
} }
} }
} }
}, },
"external": { "external": {
"help": "", "help": "Использовать внешнюю поисковую систему",
"group": { "group": {
"searchEngine": { "searchEngine": {
"title": "Поисковые системы", "title": "Поисковые системы",
"children": { "children": {
"action": { "action": {
"search": { "search": {
"label": "" "label": "Искать через {name}"
} }
}, },
"detail": { "detail": {
"title": "" "title": "Выберите действие для поисковой системы"
}, },
"searchResults": { "searchResults": {
"title": "" "title": "Выберите результат поиска для действий"
} }
}, },
"option": { "option": {
"google": { "google": {
"name": "", "name": "Google",
"description": "" "description": "Поиск в интернете через Google"
}, },
"bing": { "bing": {
"name": "", "name": "Bing",
"description": "" "description": "Поиск в интернете через Bing"
}, },
"duckduckgo": { "duckduckgo": {
"name": "", "name": "DuckDuckGo",
"description": "" "description": "Поиск в интернете через DuckDuckGo"
}, },
"torrent": { "torrent": {
"name": "Торренты", "name": "Торренты",
"description": "" "description": "Поиск торрентов на torrentdownloads.pro"
}, },
"youTube": { "youTube": {
"name": "", "name": "YouTube",
"description": "" "description": "Поиск видео на YouTube"
} }
} }
} }
@@ -2763,7 +2763,7 @@
"help": { "help": {
"group": { "group": {
"mode": { "mode": {
"title": "" "title": "Режимы"
}, },
"help": { "help": {
"title": "Справка", "title": "Справка",
@@ -2772,7 +2772,7 @@
"label": "Документация" "label": "Документация"
}, },
"submitIssue": { "submitIssue": {
"label": "" "label": "Сообщить о проблеме"
}, },
"discord": { "discord": {
"label": "Сообщество Discord" "label": "Сообщество Discord"
@@ -2784,57 +2784,57 @@
"home": { "home": {
"group": { "group": {
"local": { "local": {
"title": "" "title": "Локальные результаты"
} }
} }
}, },
"page": { "page": {
"help": "", "help": "Поиск по страницам",
"group": { "group": {
"page": { "page": {
"title": "", "title": "Страницы",
"option": { "option": {
"manageHome": { "manageHome": {
"label": "" "label": "Управление главной страницей"
}, },
"manageBoard": { "manageBoard": {
"label": "" "label": "Управление панелями"
}, },
"manageApp": { "manageApp": {
"label": "" "label": "Управление приложениями"
}, },
"manageIntegration": { "manageIntegration": {
"label": "" "label": "Управление интеграциями"
}, },
"manageSearchEngine": { "manageSearchEngine": {
"label": "" "label": "Управление поисковыми системами"
}, },
"manageMedia": { "manageMedia": {
"label": "" "label": "Управление медиафайлами"
}, },
"manageUser": { "manageUser": {
"label": "Управление пользователями" "label": "Управление пользователями"
}, },
"manageInvite": { "manageInvite": {
"label": "" "label": "Управление приглашениями"
}, },
"manageGroup": { "manageGroup": {
"label": "" "label": "Управление группами"
}, },
"manageDocker": { "manageDocker": {
"label": "" "label": "Управление Docker"
}, },
"manageApi": { "manageApi": {
"label": "" "label": "Swagger API"
}, },
"manageLog": { "manageLog": {
"label": "Просмотр журналов" "label": "Просмотр логов"
}, },
"manageTask": { "manageTask": {
"label": "" "label": "Управление задачами"
}, },
"manageSettings": { "manageSettings": {
"label": "" "label": "Глобальные настройки"
}, },
"about": { "about": {
"label": "О программе" "label": "О программе"
@@ -2850,18 +2850,18 @@
} }
}, },
"userGroup": { "userGroup": {
"help": "", "help": "Поиск пользователей или групп",
"group": { "group": {
"user": { "user": {
"title": "Пользователи", "title": "Пользователи",
"children": { "children": {
"action": { "action": {
"detail": { "detail": {
"label": "" "label": "Показать сведения о пользователе"
} }
}, },
"detail": { "detail": {
"title": "" "title": "Выберите действие для пользователя"
} }
} }
}, },
@@ -2870,17 +2870,17 @@
"children": { "children": {
"action": { "action": {
"detail": { "detail": {
"label": "" "label": "Показать сведения о группе"
}, },
"manageMember": { "manageMember": {
"label": "" "label": "Управление участниками"
}, },
"managePermission": { "managePermission": {
"label": "" "label": "Управление разрешениями"
} }
}, },
"detail": { "detail": {
"title": "" "title": "Выберите действие для группы"
} }
} }
} }
@@ -2888,16 +2888,16 @@
} }
}, },
"engine": { "engine": {
"search": "", "search": "Найти поисковую систему",
"field": { "field": {
"name": { "name": {
"label": "Название" "label": "Название"
}, },
"short": { "short": {
"label": "" "label": "Краткое название"
}, },
"urlTemplate": { "urlTemplate": {
"label": "" "label": "Шаблон URL поиска"
}, },
"description": { "description": {
"label": "Описание" "label": "Описание"
@@ -2907,53 +2907,53 @@
"list": { "list": {
"title": "Поисковые системы", "title": "Поисковые системы",
"noResults": { "noResults": {
"title": "", "title": "Поисковые системы пока отсутствуют",
"action": "" "action": "Создать первую поисковую систему"
}, },
"interactive": "" "interactive": "Интерактивная, использует интеграцию"
}, },
"create": { "create": {
"title": "", "title": "Новая поисковая система",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Поисковая система создана",
"message": "" "message": "Поисковая система успешно создана"
}, },
"error": { "error": {
"title": "", "title": "Не удалось создать",
"message": "" "message": "Не удалось создать поисковую систему"
} }
} }
}, },
"edit": { "edit": {
"title": "", "title": "Редактирование поисковой системы",
"notification": { "notification": {
"success": { "success": {
"title": "Изменения сохранены", "title": "Изменения сохранены",
"message": "" "message": "Поисковая система успешно сохранена"
}, },
"error": { "error": {
"title": "Не удалось сохранить", "title": "Не удалось сохранить",
"message": "" "message": "Не удалось сохранить поисковую систему"
} }
}, },
"configControl": "", "configControl": "Настройка",
"searchEngineType": { "searchEngineType": {
"generic": "", "generic": "Обычная",
"fromIntegration": "" "fromIntegration": "Из интеграции"
} }
}, },
"delete": { "delete": {
"title": "", "title": "Удаление поисковой системы",
"message": "", "message": "Вы уверены, что хотите удалить поисковую систему '{name}'?",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Поисковая система удалена",
"message": "" "message": "Поисковая система успешно удалена"
}, },
"error": { "error": {
"title": "", "title": "Не удалось удалить",
"message": "" "message": "Не удалось удалить поисковую систему"
} }
} }
} }

View File

@@ -51,7 +51,7 @@
"title": "Zadajte token importu", "title": "Zadajte token importu",
"field": { "field": {
"token": { "token": {
"label": "", "label": "Token",
"description": "Zadajte zobrazený token importu z predchádzajúcej inštancie homarr" "description": "Zadajte zobrazený token importu z predchádzajúcej inštancie homarr"
} }
}, },
@@ -546,7 +546,7 @@
"label": "Popis" "label": "Popis"
}, },
"url": { "url": {
"label": "" "label": "Url"
} }
}, },
"action": { "action": {
@@ -611,7 +611,7 @@
"label": "Názov" "label": "Názov"
}, },
"url": { "url": {
"label": "" "label": "Url"
} }
}, },
"action": { "action": {
@@ -766,7 +766,7 @@
} }
}, },
"common": { "common": {
"beta": "", "beta": "Beta",
"error": "Chyba", "error": "Chyba",
"action": { "action": {
"add": "Pridať", "add": "Pridať",
@@ -803,8 +803,8 @@
} }
}, },
"information": { "information": {
"min": "", "min": "Min",
"max": "", "max": "Max",
"days": "Dni", "days": "Dni",
"hours": "Hodiny", "hours": "Hodiny",
"minutes": "Minúty" "minutes": "Minúty"
@@ -963,10 +963,10 @@
"label": "Výška" "label": "Výška"
}, },
"xOffset": { "xOffset": {
"label": "" "label": "X offset"
}, },
"yOffset": { "yOffset": {
"label": "" "label": "Y offset"
} }
} }
}, },
@@ -1213,7 +1213,7 @@
} }
}, },
"iframe": { "iframe": {
"name": "", "name": "iFrame",
"description": "Vložte akýkoľvek obsah z internetu. Niektoré webové stránky môžu obmedziť prístup.", "description": "Vložte akýkoľvek obsah z internetu. Niektoré webové stránky môžu obmedziť prístup.",
"option": { "option": {
"embedUrl": { "embedUrl": {
@@ -1515,11 +1515,11 @@
"detailsTitle": "Rýchlosť sťahovania" "detailsTitle": "Rýchlosť sťahovania"
}, },
"index": { "index": {
"columnTitle": "", "columnTitle": "#",
"detailsTitle": "Aktuálny index v rámci klienta" "detailsTitle": "Aktuálny index v rámci klienta"
}, },
"id": { "id": {
"columnTitle": "" "columnTitle": "Id"
}, },
"integration": { "integration": {
"columnTitle": "Integrácia" "columnTitle": "Integrácia"
@@ -1619,7 +1619,7 @@
"partiallyAvailable": "Čiastočný", "partiallyAvailable": "Čiastočný",
"available": "K dispozícii" "available": "K dispozícii"
}, },
"toBeDetermined": "" "toBeDetermined": "TBD"
}, },
"mediaRequests-requestStats": { "mediaRequests-requestStats": {
"name": "Štatistiky mediálnych žiadostí", "name": "Štatistiky mediálnych žiadostí",
@@ -2042,9 +2042,9 @@
"tools": { "tools": {
"label": "Nástroje", "label": "Nástroje",
"items": { "items": {
"docker": "", "docker": "Docker",
"logs": "Záznamy", "logs": "Záznamy",
"api": "", "api": "API",
"tasks": "Úlohy" "tasks": "Úlohy"
} }
}, },
@@ -2199,7 +2199,7 @@
}, },
"field": { "field": {
"id": { "id": {
"label": "" "label": "ID"
}, },
"creator": { "creator": {
"label": "Autor" "label": "Autor"
@@ -2208,7 +2208,7 @@
"label": "Dátum vypršania" "label": "Dátum vypršania"
}, },
"token": { "token": {
"label": "" "label": "Token"
} }
} }
} }
@@ -2370,7 +2370,7 @@
} }
}, },
"api": { "api": {
"title": "", "title": "API",
"modal": { "modal": {
"createApiToken": { "createApiToken": {
"title": "Vytvorený token API", "title": "Vytvorený token API",
@@ -2390,7 +2390,7 @@
}, },
"table": { "table": {
"header": { "header": {
"id": "", "id": "ID",
"createdBy": "Vytvoril/a" "createdBy": "Vytvoril/a"
} }
} }
@@ -2602,7 +2602,7 @@
"tools": { "tools": {
"label": "Nástroje", "label": "Nástroje",
"docker": { "docker": {
"label": "" "label": "Docker"
}, },
"logs": { "logs": {
"label": "Záznamy" "label": "Záznamy"
@@ -2737,15 +2737,15 @@
}, },
"option": { "option": {
"google": { "google": {
"name": "", "name": "Google",
"description": "Hľadajte na webe pomocou Google" "description": "Hľadajte na webe pomocou Google"
}, },
"bing": { "bing": {
"name": "", "name": "Bing",
"description": "Vyhľadávajte na webe pomocou Bingu" "description": "Vyhľadávajte na webe pomocou Bingu"
}, },
"duckduckgo": { "duckduckgo": {
"name": "", "name": "DuckDuckGo",
"description": "Vyhľadávajte na webe pomocou DuckDuckGo" "description": "Vyhľadávajte na webe pomocou DuckDuckGo"
}, },
"torrent": { "torrent": {
@@ -2753,7 +2753,7 @@
"description": "Vyhľadajte torrenty na torrentdownloads.pro" "description": "Vyhľadajte torrenty na torrentdownloads.pro"
}, },
"youTube": { "youTube": {
"name": "", "name": "YouTube",
"description": "Hľadajte videá na YouTube" "description": "Hľadajte videá na YouTube"
} }
} }
@@ -2825,7 +2825,7 @@
"label": "Spravovať docker" "label": "Spravovať docker"
}, },
"manageApi": { "manageApi": {
"label": "" "label": "Swagger API"
}, },
"manageLog": { "manageLog": {
"label": "Zobraziť denníky" "label": "Zobraziť denníky"

View File

@@ -6,59 +6,59 @@
"subtitle": "Homarr örneğinizi kurmaya başlayalım.", "subtitle": "Homarr örneğinizi kurmaya başlayalım.",
"description": "Başlamak için lütfen Homarr örneğinizi nasıl kurmak istediğinizi seçin.", "description": "Başlamak için lütfen Homarr örneğinizi nasıl kurmak istediğinizi seçin.",
"action": { "action": {
"scratch": "Sıfırdan başlayın", "scratch": "Sıfırdan Başla",
"importOldmarr": "Homarr 1.0'dan önceki yedeğinizi içe aktarın" "importOldmarr": "Homarr 1.0'dan Önceki Yedeğinizi İçe Aktarın"
} }
}, },
"import": { "import": {
"title": "Verileri içe aktar", "title": "Verileri İçe Aktar",
"subtitle": "Mevcut bir Homarr örneğinden alınan verileri içe aktarabilirsiniz.", "subtitle": "Mevcut Homarr Örneğinden Alınan Verileri İçe Aktarabilirsiniz.",
"dropzone": { "dropzone": {
"title": "Zip dosyasını buraya sürükleyin veya göz atmak için tıklayın", "title": "Zip dosyasını buraya sürükleyin veya göz atmak için tıklayın",
"description": "Seçtiğiniz zip işlenecek ve içe aktarmak istediğiniz verileri seçebileceksiniz" "description": "Seçtiğiniz zip işlenecek ve içe aktarmak istediğiniz verileri seçebileceksiniz"
}, },
"fileInfo": { "fileInfo": {
"action": { "action": {
"change": "Dosyayı değiştir" "change": "Dosyayı Değiştir"
} }
}, },
"importSettings": { "importSettings": {
"title": "İçe aktarma ayarları", "title": "İçe Aktarma Ayarları",
"description": "İçe aktarma işlevlerini yapılandırın" "description": "İçe Aktarma İşlevlerini Yapılandırın"
}, },
"boardSelection": { "boardSelection": {
"title": "{count} panel bulundu", "title": "{count} Panel Bulundu",
"description": "İçe aktarılacak tüm panellerin boyutlarını seçin", "description": "İçe Aktarılacak Tüm Panellerin Boyutlarını Seçin",
"action": { "action": {
"selectAll": "Tümünü seç", "selectAll": "Tümünü Seç",
"unselectAll": "Tüm seçimi kaldır" "unselectAll": "Tüm Seçimi Kaldır"
} }
}, },
"summary": { "summary": {
"title": "İçe aktarma özeti", "title": "İçe Aktarma Özeti",
"description": "Aşağıdaki özeti kontrol ederek içe aktarılacak işlevleri görebilirsiniz", "description": "Aşağıdaki Özeti Kontrol Ederek İçe Aktarılacak İşlevleri Görebilirsiniz",
"action": { "action": {
"import": "İçe aktarmayı onayla ve devam et" "import": "İçe Aktarmayı Onayla ve Devam Et"
}, },
"entities": { "entities": {
"apps": "Uygulamalar", "apps": "Uygulamalar",
"boards": "Paneller", "boards": "Paneller",
"integrations": "Entegrasyonlar", "integrations": "Entegrasyonlar",
"credentialUsers": "Kullanıcı kimlik Bilgileri" "credentialUsers": "Kullanıcı Kimlik Bilgileri"
} }
}, },
"tokenModal": { "tokenModal": {
"title": "İçe aktarma token'ını girin", "title": "İçe Aktarma Token'ını Girin",
"field": { "field": {
"token": { "token": {
"label": "Erişim Anahtarı", "label": "Erişim Anahtarı",
"description": "Önceki homarr örneğinizden aldığınız içe aktarma Token'ını girin" "description": "Önceki Homarr Örneğinizden Aldığınız İçe Aktarma Token'ını girin"
} }
}, },
"notification": { "notification": {
"error": { "error": {
"title": "Geçersiz token", "title": "Geçersiz Token",
"message": "Girdiğiniz token geçersiz" "message": "Girdiğiniz Token Geçersiz"
} }
} }
} }
@@ -92,24 +92,24 @@
}, },
"finish": { "finish": {
"title": "Kurulumu Bitir", "title": "Kurulumu Bitir",
"subtitle": "Başlamaya hazırsınız!", "subtitle": "Başlamaya Hazırsınız!",
"description": "Kurulum sürecini başarıyla tamamladınız. Artık Homarr'ı kullanmaya başlayabilirsiniz. Sonraki eyleminizi seçin:", "description": "Kurulum sürecini başarıyla tamamladınız. Artık Homarr'ı kullanmaya başlayabilirsiniz. Sonraki eyleminizi seçin:",
"action": { "action": {
"goToBoard": "{name} paneline git", "goToBoard": "{name} Paneline Git",
"createBoard": "İlk panelinizi oluşturun", "createBoard": "İlk Panelinizi Oluşturun",
"inviteUser": "Yeni kullanıcı davet et", "inviteUser": "Yeni Kullanıcı Davet Et",
"docs": "Dökümanları okuyun" "docs": "Dökümanları Oku"
} }
} }
}, },
"backToStart": "Başlangıca geri dön" "backToStart": "Başlangıca Geri Dön"
}, },
"user": { "user": {
"title": "Kullanıcılar", "title": "Kullanıcılar",
"name": "Kullanıcı", "name": "Kullanıcı",
"page": { "page": {
"login": { "login": {
"title": "Hesabınıza giriş yapın", "title": "Hesabınıza Giriş Yapın",
"subtitle": "Tekrar hoş geldiniz! Lütfen kimlik bilgilerinizi girin" "subtitle": "Tekrar hoş geldiniz! Lütfen kimlik bilgilerinizi girin"
}, },
"invite": { "invite": {
@@ -118,7 +118,7 @@
"description": "{username} tarafından davet edildiniz" "description": "{username} tarafından davet edildiniz"
}, },
"init": { "init": {
"title": "Yeni Homarr kurulumu", "title": "Yeni Homarr Kurulumu",
"subtitle": "Lütfen yönetici kullanıcısını oluşturun" "subtitle": "Lütfen yönetici kullanıcısını oluşturun"
} }
}, },
@@ -141,20 +141,20 @@
} }
}, },
"passwordConfirm": { "passwordConfirm": {
"label": "Şifreyi onayla" "label": "Şifreyi Onayla"
}, },
"previousPassword": { "previousPassword": {
"label": "Eski Şifre" "label": "Eski Şifre"
}, },
"homeBoard": { "homeBoard": {
"label": "Varsayılan panel" "label": "Varsayılan Panel"
}, },
"pingIconsEnabled": { "pingIconsEnabled": {
"label": "Pingler için simgeler kullanın" "label": "Pingler İçin Simgeler Kullanın"
} }
}, },
"error": { "error": {
"usernameTaken": "Kullanıcı adı önceden alındı" "usernameTaken": "Kullanıcı Adı Önceden Alındı"
}, },
"action": { "action": {
"login": { "login": {
@@ -391,7 +391,7 @@
} }
}, },
"search-engine": { "search-engine": {
"title": "Arama motorları", "title": "Arama Motorları",
"item": { "item": {
"create": { "create": {
"label": "Arama motorları oluşturun", "label": "Arama motorları oluşturun",
@@ -546,7 +546,7 @@
"label": "Tanım" "label": "Tanım"
}, },
"url": { "url": {
"label": "" "label": "Url"
} }
}, },
"action": { "action": {
@@ -611,7 +611,7 @@
"label": "İsim" "label": "İsim"
}, },
"url": { "url": {
"label": "" "label": "Url"
} }
}, },
"action": { "action": {
@@ -766,7 +766,7 @@
} }
}, },
"common": { "common": {
"beta": "", "beta": "Test",
"error": "Hata", "error": "Hata",
"action": { "action": {
"add": "Ekle", "add": "Ekle",
@@ -791,7 +791,7 @@
"tryAgain": "Tekrar Deneyin", "tryAgain": "Tekrar Deneyin",
"loading": "Yükleniyor" "loading": "Yükleniyor"
}, },
"here": "burada", "here": "buraya",
"iconPicker": { "iconPicker": {
"label": "Simge URL'si", "label": "Simge URL'si",
"header": "Simgeleri filtrelemek için isim veya nesne yazın... Homarr sizin için {countIcons} simge arasında arama yapacaktır." "header": "Simgeleri filtrelemek için isim veya nesne yazın... Homarr sizin için {countIcons} simge arasında arama yapacaktır."
@@ -803,8 +803,8 @@
} }
}, },
"information": { "information": {
"min": "Asgari", "min": "En Düşük",
"max": "Azami", "max": "En Yüksek",
"days": "Gün", "days": "Gün",
"hours": "Saat", "hours": "Saat",
"minutes": "Dakika" "minutes": "Dakika"
@@ -856,8 +856,8 @@
"dangerZone": "Tehlikeli bölge", "dangerZone": "Tehlikeli bölge",
"noResults": "Sonuç bulunamadı", "noResults": "Sonuç bulunamadı",
"preview": { "preview": {
"show": "Önizlemeyi göster", "show": "Ara Renkleri Göster",
"hide": "Önizlemeyi Gizle" "hide": "Ara Renkleri Gizle"
}, },
"zod": { "zod": {
"errors": { "errors": {
@@ -866,16 +866,16 @@
"string": { "string": {
"startsWith": "Bu alan {startsWith} ile başlamalıdır", "startsWith": "Bu alan {startsWith} ile başlamalıdır",
"endsWith": "Bu alan {endsWith} ile bitmelidir", "endsWith": "Bu alan {endsWith} ile bitmelidir",
"includes": "Bu alan {includes} adresini içermelidir", "includes": "Bu alan {includes} içermelidir",
"invalidEmail": "Bu alanda geçerli bir e-posta olmalıdır" "invalidEmail": "Bu alanda geçerli bir e-posta olmalıdır"
}, },
"tooSmall": { "tooSmall": {
"string": "Bu alan en az {minimum} karakter uzunluğunda olmalıdır", "string": "Bu alan en az {minimum} karakter uzunluğunda olmalıdır",
"number": "Bu alan {minimum} adresinden uzun veya eşit olmalıdır" "number": "Bu alan {minimum} değerinden uzun veya eşit olmalıdır"
}, },
"tooBig": { "tooBig": {
"string": "Bu alan en fazla {maximum} karakter uzunluğunda olmalıdır", "string": "Bu alan en fazla {maximum} karakter uzunluğunda olmalıdır",
"number": "Bu alan {maximum} adresinden kısa veya eşit olmalıdır" "number": "Bu alan {maximum} değerinden kısa veya eşit olmalıdır"
}, },
"custom": { "custom": {
"passwordsDoNotMatch": "Parolalar uyuşmuyor", "passwordsDoNotMatch": "Parolalar uyuşmuyor",
@@ -1110,7 +1110,7 @@
"set": "Ayarla", "set": "Ayarla",
"enabled": "Etkin", "enabled": "Etkin",
"disabled": "Pasif", "disabled": "Pasif",
"processing": "İşleniyor", "processing": "İşlemde",
"disconnected": "Bağlantısı kesildi", "disconnected": "Bağlantısı kesildi",
"hours": "Saat", "hours": "Saat",
"minutes": "Dakika", "minutes": "Dakika",
@@ -1185,7 +1185,7 @@
"decreaseIndent": "Girintiyi Azalt", "decreaseIndent": "Girintiyi Azalt",
"link": "Bağlantı", "link": "Bağlantı",
"unlink": "Bağlantıyı kaldır", "unlink": "Bağlantıyı kaldır",
"image": "Resim Göm", "image": "Görsel Göm",
"addTable": "Tablo ekle", "addTable": "Tablo ekle",
"deleteTable": "Tablo Sil", "deleteTable": "Tablo Sil",
"colorCell": "Renk Hücresi", "colorCell": "Renk Hücresi",
@@ -1213,7 +1213,7 @@
} }
}, },
"iframe": { "iframe": {
"name": "", "name": "iFrame",
"description": "İnternetten herhangi bir içeriği yerleştirin. Bazı web siteleri erişimi kısıtlayabilir.", "description": "İnternetten herhangi bir içeriği yerleştirin. Bazı web siteleri erişimi kısıtlayabilir.",
"option": { "option": {
"embedUrl": { "embedUrl": {
@@ -1295,10 +1295,10 @@
} }
}, },
"filterPastMonths": { "filterPastMonths": {
"label": "Başla" "label": "Başlangıç"
}, },
"filterFutureMonths": { "filterFutureMonths": {
"label": "Bitir" "label": "Bitiş"
} }
} }
}, },
@@ -1419,11 +1419,11 @@
}, },
"integration": { "integration": {
"noData": "Hiçbir entegrasyon bulunamadı", "noData": "Hiçbir entegrasyon bulunamadı",
"description": "Yeni bir entegrasyon oluşturmak için <here></here> öğesine tıklayın" "description": "Yeni bir entegrasyon oluşturmak için <here></here> tıklayın"
}, },
"app": { "app": {
"noData": "Uygulama bulunamadı", "noData": "Uygulama bulunamadı",
"description": "Yeni bir uygulama oluşturmak için <here></here> öğesine tıklayın" "description": "Yeni bir uygulama oluşturmak için <here></here> tıklayın"
}, },
"error": { "error": {
"noIntegration": "Hiçbir entegrasyon seçilmedi", "noIntegration": "Hiçbir entegrasyon seçilmedi",
@@ -1503,7 +1503,7 @@
"columnTitle": "Kontroller" "columnTitle": "Kontroller"
}, },
"added": { "added": {
"columnTitle": "Eklendi", "columnTitle": "Ekleme",
"detailsTitle": "Ekleme Tarihi" "detailsTitle": "Ekleme Tarihi"
}, },
"category": { "category": {
@@ -1515,7 +1515,7 @@
"detailsTitle": "İndirme Hızı" "detailsTitle": "İndirme Hızı"
}, },
"index": { "index": {
"columnTitle": "", "columnTitle": "#",
"detailsTitle": "İstemci içindeki mevcut endeks" "detailsTitle": "İstemci içindeki mevcut endeks"
}, },
"id": { "id": {
@@ -1532,7 +1532,7 @@
"detailsTitle": "İndirme İlerlemesi" "detailsTitle": "İndirme İlerlemesi"
}, },
"ratio": { "ratio": {
"columnTitle": "", "columnTitle": "Oran",
"detailsTitle": "Torrent oranı (alınan/gönderilen)" "detailsTitle": "Torrent oranı (alınan/gönderilen)"
}, },
"received": { "received": {
@@ -1570,7 +1570,7 @@
"paused": "Duraklatıldı", "paused": "Duraklatıldı",
"completed": "Tamamlanan", "completed": "Tamamlanan",
"failed": "Başarısız", "failed": "Başarısız",
"processing": "İşleniyor", "processing": "İşlemde",
"leeching": "Leechleme", "leeching": "Leechleme",
"stalled": "Durduruldu", "stalled": "Durduruldu",
"unknown": "Bilinmeyen", "unknown": "Bilinmeyen",
@@ -1593,7 +1593,7 @@
"title": "Öğeyi Sil", "title": "Öğeyi Sil",
"modalTitle": "Bu işi silmek istediğinizden emin misiniz?", "modalTitle": "Bu işi silmek istediğinizden emin misiniz?",
"entry": "Girdiyi sil", "entry": "Girdiyi sil",
"entryAndFiles": "Giri ve dosyayı sil" "entryAndFiles": "Girdiyi ve dosyaları sil"
} }
} }
}, },
@@ -1615,7 +1615,7 @@
"availability": { "availability": {
"unknown": "Bilinmeyen", "unknown": "Bilinmeyen",
"pending": "Bekleyen", "pending": "Bekleyen",
"processing": "İşleniyor", "processing": "İşlemde",
"partiallyAvailable": "Kısmi", "partiallyAvailable": "Kısmi",
"available": "Mevcut" "available": "Mevcut"
}, },
@@ -1631,8 +1631,8 @@
"approved": "Onaylanan", "approved": "Onaylanan",
"pending": "Onay bekleyen", "pending": "Onay bekleyen",
"processing": "İşleniyor", "processing": "İşleniyor",
"declined": "Zaten reddedildi", "declined": "Reddedilen",
"available": "Zaten Mevcut", "available": "Mevcut",
"tv": "Dizi talepleri", "tv": "Dizi talepleri",
"movie": "Film talepleri", "movie": "Film talepleri",
"total": "Toplam" "total": "Toplam"
@@ -1713,10 +1713,10 @@
"label": "RTL'yi etkinleştir" "label": "RTL'yi etkinleştir"
}, },
"textLinesClamp": { "textLinesClamp": {
"label": "Açıklamalar satır sınırı" "label": "Açıklamalarda satır sınırı"
}, },
"maximumAmountPosts": { "maximumAmountPosts": {
"label": "Gönderi değer sınırı" "label": "Gönderi sayısı sınırı"
} }
} }
} }
@@ -1813,7 +1813,7 @@
"label": "Meta başlığı" "label": "Meta başlığı"
}, },
"logoImageUrl": { "logoImageUrl": {
"label": "Logo görseli URL'si" "label": "Logo görsel URL'si"
}, },
"faviconImageUrl": { "faviconImageUrl": {
"label": "Favicon görsel URL'si" "label": "Favicon görsel URL'si"
@@ -1822,10 +1822,10 @@
"label": "Arkaplan görsel URL'si" "label": "Arkaplan görsel URL'si"
}, },
"backgroundImageAttachment": { "backgroundImageAttachment": {
"label": "Arkaplan resim ekle", "label": "Arkaplan görsel yerleştirme",
"option": { "option": {
"fixed": { "fixed": {
"label": "Düzeltildi", "label": "Sabit",
"description": "Arka plan aynı pozisyonda kalır." "description": "Arka plan aynı pozisyonda kalır."
}, },
"scroll": { "scroll": {
@@ -1839,11 +1839,11 @@
"option": { "option": {
"repeat": { "repeat": {
"label": "Tekrarla", "label": "Tekrarla",
"description": "Resim, tüm arka plan alanını kaplayacak kadar tekrarlanır." "description": "Görsel, tüm arka plan alanını kaplayacak kadar tekrarlanır."
}, },
"no-repeat": { "no-repeat": {
"label": "Tekrarlama yok", "label": "Tekrarlama yok",
"description": "Resim tekrarlanmaz ve tüm alanı doldurmayabilir." "description": "Görsel tekrarlanmaz ve tüm alanı doldurmayabilir."
}, },
"repeat-x": { "repeat-x": {
"label": "Y tekrarla", "label": "Y tekrarla",
@@ -1856,7 +1856,7 @@
} }
}, },
"backgroundImageSize": { "backgroundImageSize": {
"label": "Arkaplan resim boyutu", "label": "Arkaplan görsel boyutu",
"option": { "option": {
"cover": { "cover": {
"label": "Kapak", "label": "Kapak",
@@ -1879,7 +1879,7 @@
}, },
"customCss": { "customCss": {
"label": "Bu panel için özel css", "label": "Bu panel için özel css",
"description": "Ayrıca, yalnızca deneyimli kullanıcılar için önerilen CSS kullanarak kontrol panelinizi özelleştirin", "description": "Kontrol panelinizi yalnızca deneyimli kullanıcılar için önerilen CSS kullanarak özelleştirin",
"customClassesAlert": { "customClassesAlert": {
"title": "Özel sınıflar", "title": "Özel sınıflar",
"description": "Her öğenin gelişmiş seçeneklerinde panel örneklerinize özel sınıflar ekleyebilir ve bunları yukarıdaki özel CSS'de kullanabilirsiniz." "description": "Her öğenin gelişmiş seçeneklerinde panel örneklerinize özel sınıflar ekleyebilir ve bunları yukarıdaki özel CSS'de kullanabilirsiniz."
@@ -2001,13 +2001,13 @@
}, },
"user": { "user": {
"description": "Henüz bir ev paneli belirlemediniz.", "description": "Henüz bir ev paneli belirlemediniz.",
"link": "Varsayılan paneli yapılandır", "link": "Varsayılan Paneli Yapılandır",
"notice": "Bu sayfanın kaybolmasını sağlamak için tercihlerden varsayılan panel seçin" "notice": "Bu Sayfanın Kaybolmasını Sağlamak İçin Tercihlerden Varsayılan Panel Atayın"
}, },
"anonymous": { "anonymous": {
"description": "Sunucu yöneticiniz henüz bir varsayılan panel belirlemedi.", "description": "Sunucu Yöneticiniz Henüz Bir Varsayılan Panel Atamadı.",
"link": "Herkese açık panelleri görüntüle", "link": "Herkese açık panelleri görüntüle",
"notice": "Bu sayfanın kaybolmasını sağlamak için sunucu yöneticisinden varsayılan panel ayarlamasını isteyin" "notice": "Bu Sayfanın Kaybolmasını Sağlamak İçin Sunucu Yöneticisinden Varsayılan Panel Atamasını isteyin"
} }
} }
} }
@@ -2025,11 +2025,11 @@
}, },
"navbar": { "navbar": {
"items": { "items": {
"home": "Ana sayfa", "home": "Ana Sayfa",
"boards": "Paneller", "boards": "Paneller",
"apps": "Uygulamalar", "apps": "Uygulamalar",
"integrations": "Entegrasyonlar", "integrations": "Entegrasyonlar",
"searchEngies": "Arama motorları", "searchEngies": "Arama Motorları",
"medias": "Medyalar", "medias": "Medyalar",
"users": { "users": {
"label": "Kullanıcılar", "label": "Kullanıcılar",
@@ -2042,9 +2042,9 @@
"tools": { "tools": {
"label": "Araçlar", "label": "Araçlar",
"items": { "items": {
"docker": "", "docker": "Docker",
"logs": "Günlükler", "logs": "Günlükler",
"api": "", "api": "API",
"tasks": "Görevler" "tasks": "Görevler"
} }
}, },
@@ -2091,9 +2091,9 @@
"label": "Ayarlar" "label": "Ayarlar"
}, },
"setHomeBoard": { "setHomeBoard": {
"label": "Varsayılan panel olarak ayarlayın", "label": "Varsayılan Panel Olarak Ata",
"badge": { "badge": {
"label": "Ana sayfa", "label": "Ana Sayfa",
"tooltip": "Bu panel sizin varsayılan paneliniz olarak görüntülenecektir" "tooltip": "Bu panel sizin varsayılan paneliniz olarak görüntülenecektir"
} }
}, },
@@ -2120,7 +2120,7 @@
} }
}, },
"media": { "media": {
"includeFromAllUsers": "Tüm kullanıcıların medyasına dahil edin" "includeFromAllUsers": "Tüm kullanıcıların medyalarını dahil et"
}, },
"user": { "user": {
"back": "Kullanıcılara geri dön", "back": "Kullanıcılara geri dön",
@@ -2130,7 +2130,7 @@
"title": "Genel", "title": "Genel",
"item": { "item": {
"language": "Dil & Bölge", "language": "Dil & Bölge",
"board": "Varsayılan panel", "board": "Varsayılan Panel",
"firstDayOfWeek": "Haftanın ilk günü", "firstDayOfWeek": "Haftanın ilk günü",
"accessibility": "Erişilebilirlik" "accessibility": "Erişilebilirlik"
} }
@@ -2180,7 +2180,7 @@
} }
}, },
"invite": { "invite": {
"title": "Kullanıcı davetlerini yönet", "title": "Kullanıcı Davetlerini Yönet",
"action": { "action": {
"new": { "new": {
"title": "Yeni davet", "title": "Yeni davet",
@@ -2288,7 +2288,7 @@
"board": { "board": {
"title": "Paneller", "title": "Paneller",
"homeBoard": { "homeBoard": {
"label": "Küresel ana sayfa paneli", "label": "Genel Varsayılan Panel",
"description": "Seçim için yalnızca herkese açık paneller kullanılabilir" "description": "Seçim için yalnızca herkese açık paneller kullanılabilir"
} }
}, },
@@ -2370,7 +2370,7 @@
} }
}, },
"api": { "api": {
"title": "", "title": "API",
"modal": { "modal": {
"createApiToken": { "createApiToken": {
"title": "API token'ı oluşturuldu", "title": "API token'ı oluşturuldu",
@@ -2602,7 +2602,7 @@
"tools": { "tools": {
"label": "Araçlar", "label": "Araçlar",
"docker": { "docker": {
"label": "" "label": "Docker"
}, },
"logs": { "logs": {
"label": "Günlükler" "label": "Günlükler"
@@ -2617,7 +2617,7 @@
} }
}, },
"search": { "search": {
"placeholder": "Aramak için yaz", "placeholder": "Ara",
"nothingFound": "Hiçbir şey bulunamadı", "nothingFound": "Hiçbir şey bulunamadı",
"error": { "error": {
"fetch": "Veriler alınırken bir hata oluştu" "fetch": "Veriler alınırken bir hata oluştu"
@@ -2650,7 +2650,7 @@
"label": "Panel'i aç" "label": "Panel'i aç"
}, },
"homeBoard": { "homeBoard": {
"label": "Varsayılan panel olarak ayarla" "label": "Varsayılan Panel Olarak Ata"
}, },
"settings": { "settings": {
"label": "Ayarları aç" "label": "Ayarları aç"
@@ -2737,15 +2737,15 @@
}, },
"option": { "option": {
"google": { "google": {
"name": "", "name": "Google",
"description": "Google ile web'de arama yapın" "description": "Google ile web'de arama yapın"
}, },
"bing": { "bing": {
"name": "", "name": "Bing",
"description": "Bing ile web'de arama yapın" "description": "Bing ile web'de arama yapın"
}, },
"duckduckgo": { "duckduckgo": {
"name": "", "name": "DuckDuckGo",
"description": "DuckDuckGo ile web'de arama yapın" "description": "DuckDuckGo ile web'de arama yapın"
}, },
"torrent": { "torrent": {
@@ -2753,7 +2753,7 @@
"description": "Torrentdownloads.pro'da torrentleri arayın" "description": "Torrentdownloads.pro'da torrentleri arayın"
}, },
"youTube": { "youTube": {
"name": "", "name": "YouTube",
"description": "YouTube'da video arayın" "description": "YouTube'da video arayın"
} }
} }
@@ -2795,7 +2795,7 @@
"title": "Sayfalar", "title": "Sayfalar",
"option": { "option": {
"manageHome": { "manageHome": {
"label": "Ana sayfayı yönet" "label": "Ana Sayfayı Yönet"
}, },
"manageBoard": { "manageBoard": {
"label": "Panelleri yönet" "label": "Panelleri yönet"
@@ -2825,7 +2825,7 @@
"label": "Docker'ı yönet" "label": "Docker'ı yönet"
}, },
"manageApi": { "manageApi": {
"label": "" "label": "Swagger API'si"
}, },
"manageLog": { "manageLog": {
"label": "Günlükleri görüntüle" "label": "Günlükleri görüntüle"
@@ -2840,7 +2840,7 @@
"label": "Hakkında" "label": "Hakkında"
}, },
"homeBoard": { "homeBoard": {
"label": "Varsayılan panel" "label": "Varsayılan Panel"
}, },
"preferences": { "preferences": {
"label": "Tercihleriniz" "label": "Tercihleriniz"
@@ -2894,7 +2894,7 @@
"label": "İsim" "label": "İsim"
}, },
"short": { "short": {
"label": "Kısa" "label": "Kısa Ad"
}, },
"urlTemplate": { "urlTemplate": {
"label": "URL arama şablonu" "label": "URL arama şablonu"
@@ -2905,7 +2905,7 @@
}, },
"page": { "page": {
"list": { "list": {
"title": "Arama motorları", "title": "Arama Motorları",
"noResults": { "noResults": {
"title": "Henüz bir arama motoru yok", "title": "Henüz bir arama motoru yok",
"action": "İlk arama motorunuzu oluşturun" "action": "İlk arama motorunuzu oluşturun"

View File

@@ -29,9 +29,9 @@
"@homarr/log": "workspace:^0.1.0", "@homarr/log": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^7.15.1", "@mantine/core": "^7.15.2",
"@mantine/dates": "^7.15.1", "@mantine/dates": "^7.15.2",
"@mantine/hooks": "^7.15.1", "@mantine/hooks": "^7.15.2",
"@tabler/icons-react": "^3.26.0", "@tabler/icons-react": "^3.26.0",
"mantine-react-table": "2.0.0-beta.7", "mantine-react-table": "2.0.0-beta.7",
"next": "^14.2.21", "next": "^14.2.21",

View File

@@ -41,8 +41,8 @@
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^7.15.1", "@mantine/core": "^7.15.2",
"@mantine/hooks": "^7.15.1", "@mantine/hooks": "^7.15.2",
"@tabler/icons-react": "^3.26.0", "@tabler/icons-react": "^3.26.0",
"@tiptap/extension-color": "2.10.4", "@tiptap/extension-color": "2.10.4",
"@tiptap/extension-highlight": "2.10.4", "@tiptap/extension-highlight": "2.10.4",

View File

@@ -7,7 +7,6 @@ import { IconLoader } from "@tabler/icons-react";
import combineClasses from "clsx"; import combineClasses from "clsx";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { parseAppHrefWithVariablesClient } from "@homarr/common/client";
import { useRegisterSpotlightContextResults } from "@homarr/spotlight"; import { useRegisterSpotlightContextResults } from "@homarr/spotlight";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
@@ -31,26 +30,30 @@ export default function AppWidget({ options, isEditMode }: WidgetComponentProps<
); );
useRegisterSpotlightContextResults( useRegisterSpotlightContextResults(
`app-${app.id}`, `app-${app.id}`,
[ app.href
{ ? [
id: app.id, {
name: app.name, id: app.id,
icon: app.iconUrl, name: app.name,
interaction() { icon: app.iconUrl,
return { interaction() {
type: "link", return {
href: parseAppHrefWithVariablesClient(app.href ?? ""), type: "link",
newTab: options.openInNewTab, // We checked above that app.href is defined
}; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
}, href: app.href!,
}, newTab: options.openInNewTab,
], };
},
},
]
: [],
[app, options.openInNewTab], [app, options.openInNewTab],
); );
return ( return (
<AppLink <AppLink
href={parseAppHrefWithVariablesClient(app.href ?? "")} href={app.href ?? undefined}
openInNewTab={options.openInNewTab} openInNewTab={options.openInNewTab}
enabled={Boolean(app.href) && !isEditMode} enabled={Boolean(app.href) && !isEditMode}
> >
@@ -88,7 +91,7 @@ export default function AppWidget({ options, isEditMode }: WidgetComponentProps<
} }
interface AppLinkProps { interface AppLinkProps {
href: string; href: string | undefined;
openInNewTab: boolean; openInNewTab: boolean;
enabled: boolean; enabled: boolean;
} }

View File

@@ -3,7 +3,6 @@ import { IconCheck, IconX } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api"; import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { parseAppHrefWithVariablesClient } from "@homarr/common/client";
import { PingDot } from "./ping-dot"; import { PingDot } from "./ping-dot";
@@ -14,7 +13,7 @@ interface PingIndicatorProps {
export const PingIndicator = ({ href }: PingIndicatorProps) => { export const PingIndicator = ({ href }: PingIndicatorProps) => {
const [ping] = clientApi.widget.app.ping.useSuspenseQuery( const [ping] = clientApi.widget.app.ping.useSuspenseQuery(
{ {
url: parseAppHrefWithVariablesClient(href), url: href,
}, },
{ {
refetchOnMount: false, refetchOnMount: false,
@@ -25,7 +24,7 @@ export const PingIndicator = ({ href }: PingIndicatorProps) => {
const [pingResult, setPingResult] = useState<RouterOutputs["widget"]["app"]["ping"]>(ping); const [pingResult, setPingResult] = useState<RouterOutputs["widget"]["app"]["ping"]>(ping);
clientApi.widget.app.updatedPing.useSubscription( clientApi.widget.app.updatedPing.useSubscription(
{ url: parseAppHrefWithVariablesClient(href) }, { url: href },
{ {
onData(data) { onData(data) {
setPingResult(data); setPingResult(data);

View File

@@ -4,7 +4,6 @@ import { Anchor, Box, Card, Divider, Flex, Group, Stack, Text, Title, UnstyledBu
import type { RouterOutputs } from "@homarr/api"; import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { parseAppHrefWithVariablesClient } from "@homarr/common/client";
import { useRegisterSpotlightContextResults } from "@homarr/spotlight"; import { useRegisterSpotlightContextResults } from "@homarr/spotlight";
import type { WidgetComponentProps } from "../definition"; import type { WidgetComponentProps } from "../definition";
@@ -19,18 +18,22 @@ export default function BookmarksWidget({ options, width, height, itemId }: Widg
useRegisterSpotlightContextResults( useRegisterSpotlightContextResults(
`bookmark-${itemId}`, `bookmark-${itemId}`,
data.map((app) => ({ data
id: app.id, .filter((app) => app.href !== null)
name: app.name, .map((app) => ({
icon: app.iconUrl, id: app.id,
interaction() { name: app.name,
return { icon: app.iconUrl,
type: "link", interaction() {
href: parseAppHrefWithVariablesClient(app.href ?? ""), return {
newTab: false, type: "link",
}; // We checked above that app.href is defined
}, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
})), href: app.href!,
newTab: false,
};
},
})),
[data], [data],
); );

1261
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -22,9 +22,9 @@
"eslint-config-turbo": "^2.3.3", "eslint-config-turbo": "^2.3.3",
"eslint-plugin-import": "^2.31.0", "eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.2", "eslint-plugin-react": "^7.37.3",
"eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-hooks": "^5.1.0",
"typescript-eslint": "^8.18.1" "typescript-eslint": "^8.18.2"
}, },
"devDependencies": { "devDependencies": {
"@homarr/prettier-config": "workspace:^0.1.0", "@homarr/prettier-config": "workspace:^0.1.0",