Compare commits

...
Author SHA1 Message Date
Releases Homarr 1fa0fc50c5 chore(release): 1.0.0-beta.8 [skip ci] 2024-12-25 14:19:38 +00:00
homarr-releases[bot] e9a1dae857 chore(release): automatic release v1.0.0 2024-12-25 14:18:45 +00:00
Meier Lukas e37279fe80 fix: oldmarr import user casing wrong (#1784) 2024-12-25 15:17:51 +01:00
homarr-renovate[bot] 82c6ce7b77 fix(deps): update dependency drizzle-orm to ^0.38.3 (#1783)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-25 12:25:14 +00:00
homarr-renovate[bot] 555212e2dc fix(deps): update dependency drizzle-zod to ^0.6.1 (#1782)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-25 10:53:06 +00:00
homarr-crowdin[bot] c831539772 chore(lang): updated translations from crowdin
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2024-12-25 00:43:00 +00:00
homarr-renovate[bot] 3e2ffbd7bf fix(deps): update dependency @ctrl/transmission to ^7.2.0 (#1777)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-24 20:33:01 +00:00
Thomas Camlong 22d7f676eb chore(lang): updated translations from crowdin (#1774)
* New translations en.json (Hebrew)

* New translations en.json (Hebrew)
2024-12-24 21:26:29 +01:00
homarr-crowdin[bot] 23bf262f4e chore(lang): updated translations from crowdin
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2024-12-24 20:26:03 +00:00
homarr-renovate[bot] ecae80d741 fix(deps): update dependency @ctrl/deluge to ^7.1.0 (#1776)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-24 20:16:58 +00:00
Releases Homarr 162e8adf4c chore(release): 1.0.0-beta.7 [skip ci] 2024-12-24 13:34:42 +00:00
homarr-releases[bot] 620ec0315f chore(release): automatic release v1.0.0 2024-12-24 13:33:47 +00:00
Meier Lukas 8df398c3c7 feat(apps): remove url variables (#1771) 2024-12-24 14:16:24 +01:00
Meier Lukas 425359be02 fix(board): item background and border overridden by mantine card styles (#1769) 2024-12-24 14:16:11 +01:00
Meier Lukas 8893b72fe3 fix(board): tiles order not respected on firefox (#1770) 2024-12-24 14:15:58 +01:00
Meier Lukas b9483379dd fix(onboard): missing admin permission assignment for external group (#1764) 2024-12-24 14:15:46 +01:00
Meier Lukas 0336803550 fix(auth): oidc redirect does not respect https protocol (#1763) 2024-12-24 14:15:34 +01:00
Meier Lukas e220087e96 fix(icons): local icon repository does not work with medias (#1765) 2024-12-24 14:15:18 +01:00
Manuel f127c9325c config: update issue templates (#1751) 2024-12-24 13:05:59 +00:00
homarr-renovate[bot] c410b06a15 fix(deps): update tanstack-query monorepo to ^5.62.10 (#1772)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-24 12:25:11 +00:00
Thomas Camlong ce755efe4d chore(lang): updated translations from crowdin (#1760)
* New translations en.json (Hungarian)

* New translations en.json (Hebrew)

* New translations en.json (Hebrew)

* New translations en.json (Hebrew)

* New translations en.json (Hungarian)

* New translations en.json (Hebrew)
2024-12-24 11:01:14 +01:00
homarr-renovate[bot] 8b416a6dd3 fix(deps): update dependency @ctrl/qbittorrent to ^9.2.0 (#1768)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-24 04:18:59 +00:00
homarr-renovate[bot] fe95334aa7 fix(deps): update dependency eslint-plugin-react to ^7.37.3 (#1767)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-24 03:02:21 +00:00
homarr-crowdin[bot] b0facfd77a chore(lang): updated translations from crowdin
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2024-12-24 00:44:22 +00:00
homarr-renovate[bot] 01db27c34f fix(deps): update dependency react-error-boundary to v5 (#1748)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-23 20:17:53 +01:00
homarr-renovate[bot] 999cf58625 chore(deps): update dependency dotenv-cli to v8 (#1741)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-23 20:14:01 +01:00
homarr-renovate[bot] 9223dd06ee fix(deps): update dependency typescript-eslint to ^8.18.2 (#1762)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-23 17:34:06 +00:00
homarr-renovate[bot] 42da2b9b06 fix(deps): update tanstack-query monorepo to ^5.62.9 (#1761)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-23 17:15:12 +00:00
Thomas CamlongandMeier Lukas a73eed63eb chore(lang): updated translations from crowdin (#1754)
* New translations en.json (Italian)

* New translations en.json (Hungarian)

* New translations en.json (Hungarian)

---------

Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2024-12-23 12:01:12 +01:00
homarr-crowdin[bot] 44dcc72d43 chore(lang): updated translations from crowdin
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2024-12-23 10:51:54 +00:00
homarr-renovate[bot] d02ded5511 fix(deps): update dependency mysql2 to v3.12.0 (#1758)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-23 10:38:45 +00:00
homarr-renovate[bot] dfacb08dbd fix(deps): update mantine monorepo to ^7.15.2 (#1757)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-23 10:17:37 +00:00
homarr-renovate[bot] 4e85bbbad0 fix(deps): update dependency jotai to ^2.11.0 (#1756)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2024-12-23 06:21:05 +00:00
ManuelandMeier Lukas d78c6ed529 fix: copy media link (#1750)
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2024-12-22 20:20:33 +01:00
Thomas CamlongandMeier Lukas 210ce3669f chore(lang): updated translations from crowdin (#1747)
* New translations en.json (German)

* New translations en.json (German)

* New translations en.json (German)

---------

Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2024-12-22 18:39:19 +01:00
homarr-crowdin[bot] 44e5346d75 chore(lang): updated translations from crowdin
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2024-12-22 17:25:57 +00:00
Meier Lukas d34d665229 docs: update crowdin badge to new translation project (#1745) 2024-12-22 15:40:57 +01:00
Thomas CamlongandMeier Lukas b6dc38483d chore(lang): updated translations from crowdin (#1738)
* New translations en.json (Turkish)

* New translations en.json (Turkish)

* New translations en.json (German)

* New translations en.json (Turkish)

* New translations en.json (German)

* New translations en.json (Hebrew)

* New translations en.json (Chinese Simplified)

* New translations en.json (Hebrew)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Simplified)

---------

Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2024-12-21 12:13:42 +01:00
homarr-crowdin[bot] a7e387e54c chore(lang): updated translations from crowdin
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2024-12-21 11:10:45 +00:00
homarr-crowdin[bot] 189f35f3cb chore(lang): updated translations from crowdin
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2024-12-21 11:05:13 +00:00
56 changed files with 2799 additions and 2013 deletions

No files matched your search

+58 -17
View File
@@ -1,37 +1,78 @@
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: "
labels: ["🐞❔ unconfirmed bug"]
labels: ["needs triage"]
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
attributes:
label: Describe the bug
description: A clear and concise description of the bug, as well as what you expected to happen when encountering it.
validations:
required: true
- type: input
- type: textarea
attributes:
label: Link to reproduction
description: Please provide a link to a reproduction of the bug. Issues without a reproduction repo may be ignored.
label: Steps to reproduce
description: Describe how to reproduce your bug. Steps, code snippets, reproduction repos etc.
validations:
required: true
- type: textarea
attributes:
label: To reproduce
description: Describe how to reproduce your bug. Steps, code snippets, reproduction repos etc.
label: Impact
description: How big is the impact of this bug? Does it make Homarr unusable? Is there any workaround that you're aware of?
validations:
required: true
- type: textarea
attributes:
label: Additional information
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
+2 -12
View File
@@ -2,26 +2,16 @@
# See here: https://github.com/vercel/next.js/blob/canary/.github/ISSUE_TEMPLATE/3.feature_request.yml
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: "
labels: ["✨ enhancement"]
labels: ["needs triage"]
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
attributes:
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.
validations:
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
attributes:
label: Additional information
+40
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
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
@@ -149,7 +149,7 @@ jobs:
with:
platforms: linux/amd64,linux/arm64
context: .
push: ${{ env.PUSH_IMAGE}}
push: ${{ env.PUSH_IMAGE }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
network: host
+34
View File
@@ -1,3 +1,37 @@
## [1.0.0-beta.8](https://github.com/homarr-labs/homarr/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2024-12-25)
### Bug Fixes
* **deps:** update dependency @ctrl/deluge to ^7.1.0 ([#1776](https://github.com/homarr-labs/homarr/issues/1776)) ([ecae80d](https://github.com/homarr-labs/homarr/commit/ecae80d741213f12ff08f87992cc4d906cbe0085))
* **deps:** update dependency @ctrl/transmission to ^7.2.0 ([#1777](https://github.com/homarr-labs/homarr/issues/1777)) ([3e2ffbd](https://github.com/homarr-labs/homarr/commit/3e2ffbd7bf2793ff58136ed75b38e0d96b4a5ca8))
* **deps:** update dependency drizzle-orm to ^0.38.3 ([#1783](https://github.com/homarr-labs/homarr/issues/1783)) ([82c6ce7](https://github.com/homarr-labs/homarr/commit/82c6ce7b77023881bd4c74fb43437e777f9b219e))
* **deps:** update dependency drizzle-zod to ^0.6.1 ([#1782](https://github.com/homarr-labs/homarr/issues/1782)) ([555212e](https://github.com/homarr-labs/homarr/commit/555212e2dc82c4b71b8c25a5f20964b3441b5ab9))
* oldmarr import user casing wrong ([#1784](https://github.com/homarr-labs/homarr/issues/1784)) ([e37279f](https://github.com/homarr-labs/homarr/commit/e37279fe8071773f1a9773e3233bc81cbb336798))
## [1.0.0-beta.7](https://github.com/homarr-labs/homarr/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2024-12-24)
### Features
* **apps:** remove url variables ([#1771](https://github.com/homarr-labs/homarr/issues/1771)) ([8df398c](https://github.com/homarr-labs/homarr/commit/8df398c3c706369f6990719603a357c161606f81))
### Bug Fixes
* **auth:** oidc redirect does not respect https protocol ([#1763](https://github.com/homarr-labs/homarr/issues/1763)) ([0336803](https://github.com/homarr-labs/homarr/commit/033680355044b1ebfa5d8fe07b59929bbcfcb3a0))
* **board:** item background and border overridden by mantine card styles ([#1769](https://github.com/homarr-labs/homarr/issues/1769)) ([425359b](https://github.com/homarr-labs/homarr/commit/425359be02f66242f7db0dc77bed0355495e21d5))
* **board:** tiles order not respected on firefox ([#1770](https://github.com/homarr-labs/homarr/issues/1770)) ([8893b72](https://github.com/homarr-labs/homarr/commit/8893b72fe363691b91b6aca75d4ad37f4b8e9f6a))
* copy media link ([#1750](https://github.com/homarr-labs/homarr/issues/1750)) ([d78c6ed](https://github.com/homarr-labs/homarr/commit/d78c6ed5299e1f975c2e85ec3ecad38e00457677))
* **deps:** update dependency @ctrl/qbittorrent to ^9.2.0 ([#1768](https://github.com/homarr-labs/homarr/issues/1768)) ([8b416a6](https://github.com/homarr-labs/homarr/commit/8b416a6dd354b22a3e4f527b793dde2c538b1e6a))
* **deps:** update dependency eslint-plugin-react to ^7.37.3 ([#1767](https://github.com/homarr-labs/homarr/issues/1767)) ([fe95334](https://github.com/homarr-labs/homarr/commit/fe95334aa70c95faefcf904591fa9d33159b0905))
* **deps:** update dependency jotai to ^2.11.0 ([#1756](https://github.com/homarr-labs/homarr/issues/1756)) ([4e85bbb](https://github.com/homarr-labs/homarr/commit/4e85bbbad034f08ab84e331d376b7a9c6f54e507))
* **deps:** update dependency mysql2 to v3.12.0 ([#1758](https://github.com/homarr-labs/homarr/issues/1758)) ([d02ded5](https://github.com/homarr-labs/homarr/commit/d02ded5511aa2d54307db0ac7f4e0a5dee5a707d))
* **deps:** update dependency react-error-boundary to v5 ([#1748](https://github.com/homarr-labs/homarr/issues/1748)) ([01db27c](https://github.com/homarr-labs/homarr/commit/01db27c34f3daf6e67e35bbd357df31dcb154b41))
* **deps:** update dependency typescript-eslint to ^8.18.2 ([#1762](https://github.com/homarr-labs/homarr/issues/1762)) ([9223dd0](https://github.com/homarr-labs/homarr/commit/9223dd06ee0c2b51e036f607d7b3252c61ab77ea))
* **deps:** update mantine monorepo to ^7.15.2 ([#1757](https://github.com/homarr-labs/homarr/issues/1757)) ([dfacb08](https://github.com/homarr-labs/homarr/commit/dfacb08dbddb6864646ece2fca6978207f0c58ac))
* **deps:** update tanstack-query monorepo to ^5.62.10 ([#1772](https://github.com/homarr-labs/homarr/issues/1772)) ([c410b06](https://github.com/homarr-labs/homarr/commit/c410b06a15ed5426931ad764cc861f66f11a40da))
* **deps:** update tanstack-query monorepo to ^5.62.9 ([#1761](https://github.com/homarr-labs/homarr/issues/1761)) ([42da2b9](https://github.com/homarr-labs/homarr/commit/42da2b9b062bd8a08c37e45ab129953e8b0e3624))
* **icons:** local icon repository does not work with medias ([#1765](https://github.com/homarr-labs/homarr/issues/1765)) ([e220087](https://github.com/homarr-labs/homarr/commit/e220087e96c7096303b1d245ccf3941118e692f3))
* **onboard:** missing admin permission assignment for external group ([#1764](https://github.com/homarr-labs/homarr/issues/1764)) ([b948337](https://github.com/homarr-labs/homarr/commit/b9483379dd56a8dab2b9b636b66b970da4cf9d83))
## [1.0.0-beta.6](https://github.com/homarr-labs/homarr/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2024-12-20)
### Bug Fixes
+11 -11
View File
@@ -38,18 +38,18 @@
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@homarr/widgets": "workspace:^0.1.0",
"@mantine/colors-generator": "^7.15.1",
"@mantine/core": "^7.15.1",
"@mantine/dropzone": "^7.15.1",
"@mantine/hooks": "^7.15.1",
"@mantine/modals": "^7.15.1",
"@mantine/tiptap": "^7.15.1",
"@mantine/colors-generator": "^7.15.2",
"@mantine/core": "^7.15.2",
"@mantine/dropzone": "^7.15.2",
"@mantine/hooks": "^7.15.2",
"@mantine/modals": "^7.15.2",
"@mantine/tiptap": "^7.15.2",
"@million/lint": "1.0.14",
"@t3-oss/env-nextjs": "^0.11.1",
"@tabler/icons-react": "^3.26.0",
"@tanstack/react-query": "^5.62.8",
"@tanstack/react-query-devtools": "^5.62.8",
"@tanstack/react-query-next-experimental": "5.62.8",
"@tanstack/react-query": "^5.62.10",
"@tanstack/react-query-devtools": "^5.62.10",
"@tanstack/react-query-next-experimental": "5.62.10",
"@trpc/client": "next",
"@trpc/next": "next",
"@trpc/react-query": "next",
@@ -63,14 +63,14 @@
"dotenv": "^16.4.7",
"flag-icons": "^7.2.3",
"glob": "^11.0.0",
"jotai": "^2.10.4",
"jotai": "^2.11.0",
"mantine-react-table": "2.0.0-beta.7",
"next": "^14.2.21",
"postcss-preset-mantine": "^1.17.0",
"prismjs": "^1.29.0",
"react": "^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",
"sass": "^1.83.0",
"superjson": "2.2.2",
@@ -6,7 +6,6 @@ import { IconBox, IconPencil } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api";
import { api } from "@homarr/api/server";
import { auth } from "@homarr/auth/next";
import { parseAppHrefWithVariablesServer } from "@homarr/common/server";
import { getI18n, getScopedI18n } from "@homarr/translation/server";
import { ManageContainer } from "~/components/manage/manage-container";
@@ -82,8 +81,8 @@ const AppCard = async ({ app }: AppCardProps) => {
</Text>
)}
{app.href && (
<Anchor href={parseAppHrefWithVariablesServer(app.href)} lineClamp={1} size="sm" w="min-content">
{parseAppHrefWithVariablesServer(app.href)}
<Anchor href={app.href} lineClamp={1} size="sm" w="min-content">
{app.href}
</Anchor>
)}
</Stack>
@@ -13,10 +13,7 @@ interface CopyMediaProps {
export const CopyMedia = ({ media }: CopyMediaProps) => {
const t = useI18n();
const url =
typeof window !== "undefined"
? `${window.location.protocol}://${window.location.hostname}:${window.location.port}/api/user-medias/${media.id}`
: "";
const url = typeof window !== "undefined" ? `${window.location.origin}/api/user-medias/${media.id}` : "";
return (
<CopyButton value={url}>
@@ -10,6 +10,12 @@ import { useSectionContext } from "./section-context";
export const SectionContent = () => {
const { section, innerSections, refs } = useSectionContext();
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(() => {
return [
...section.items.map((item) => ({ ...item, type: "item" as const })),
@@ -19,7 +25,7 @@ export const SectionContent = () => {
return itemA.xOffset - itemB.xOffset;
}
return itemA.yOffset - itemB.xOffset;
return itemA.yOffset - itemB.yOffset;
});
}, [section.items, innerSections]);
@@ -7,6 +7,6 @@
--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));
}
background-color: var(--background-color);
border-color: var(--border-color);
background-color: var(--background-color) !important;
border-color: var(--border-color) !important;
}
+1 -1
View File
@@ -45,7 +45,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/node": "^22.10.2",
"dotenv-cli": "^7.4.4",
"dotenv-cli": "^8.0.0",
"eslint": "^9.17.0",
"prettier": "^3.4.2",
"tsx": "4.19.2",
+2 -2
View File
@@ -10,8 +10,8 @@
<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">
</a>
<a href=https://translate.homarr.dev/>
<img title="Translations" src="https://badges.crowdin.net/homarr/localized.svg" />
<a href="https://crowdin.com/project/homarr_labs">
<img title="Translations" src="https://badges.crowdin.net/homarr_labs/localized.svg" />
</a>
<a href="https://discord.gg/aCsmEV5RgA">
  <img title="Discord" src="https://discordapp.com/api/guilds/972958686051962910/widget.png?style=shield">
+1 -1
View File
@@ -21,7 +21,7 @@ http {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
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;
}
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "homarr",
"version": "1.0.0-beta.6",
"version": "1.0.0-beta.8",
"private": true,
"scripts": {
"build": "cross-env CI=true turbo build",
+1
View File
@@ -27,6 +27,7 @@
"@homarr/cron-jobs": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/icons": "workspace:^0.1.0",
"@homarr/integrations": "workspace:^0.1.0",
"@homarr/log": "workspace:^",
"@homarr/old-import": "workspace:^0.1.0",
+7 -1
View File
@@ -152,11 +152,17 @@ export const groupRouter = createTRPCRouter({
.mutation(async ({ input, ctx }) => {
await checkSimilarNameAndThrowAsync(ctx.db, input.name);
const groupId = createId();
await ctx.db.insert(groups).values({
id: createId(),
id: groupId,
name: input.name,
});
await ctx.db.insert(groupPermissions).values({
groupId,
permission: "admin",
});
await nextOnboardingStepAsync(ctx.db, undefined);
}),
createGroup: permissionRequiredProcedure
+22 -2
View File
@@ -1,7 +1,9 @@
import { TRPCError } from "@trpc/server";
import type { InferInsertModel } 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 { createTRPCRouter, permissionRequiredProcedure, protectedProcedure } from "../../trpc";
@@ -52,13 +54,29 @@ export const mediaRouter = createTRPCRouter({
.mutation(async ({ ctx, input }) => {
const content = Buffer.from(await input.file.arrayBuffer());
const id = createId();
await ctx.db.insert(medias).values({
const media = {
id,
creatorId: ctx.session.user.id,
content,
size: input.file.size,
contentType: input.file.type,
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;
@@ -67,6 +85,7 @@ export const mediaRouter = createTRPCRouter({
const dbMedia = await ctx.db.query.medias.findFirst({
where: eq(medias.id, input.id),
columns: {
id: 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(icons).where(eq(icons.url, createLocalImageUrl(input.id)));
}),
});
@@ -23,7 +23,8 @@ export const OidcProvider = (headers: ReadonlyHeaders | null): OIDCConfig<Profil
authorization: {
params: {
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) {
+6 -2
View File
@@ -8,12 +8,16 @@ import { extractBaseUrlFromHeaders } from "@homarr/common";
* @param pathname
* @returns
*/
export const createRedirectUri = (headers: ReadonlyHeaders | null, pathname: string) => {
export const createRedirectUri = (
headers: ReadonlyHeaders | null,
pathname: string,
fallbackProtocol: "http" | "https" = "http",
) => {
if (!headers) {
return pathname;
}
const baseUrl = extractBaseUrlFromHeaders(headers);
const baseUrl = extractBaseUrlFromHeaders(headers, fallbackProtocol);
const path = pathname.startsWith("/") ? pathname : `/${pathname}`;
+1 -2
View File
@@ -28,8 +28,7 @@
"@homarr/log": "workspace:^0.1.0",
"dayjs": "^1.11.13",
"next": "^14.2.21",
"react": "^19.0.0",
"tldts": "^6.1.69"
"react": "^19.0.0"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
-23
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;
};
-6
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);
};
-8
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()));
};
-1
View File
@@ -1,2 +1 @@
export * from "./app-url/client";
export * from "./revalidate-path-action";
-1
View File
@@ -1,3 +1,2 @@
export * from "./app-url/server";
export * from "./security";
export * from "./encryption";
+10 -2
View File
@@ -4,8 +4,16 @@ export const removeTrailingSlash = (path: string) => {
return path.at(-1) === "/" ? path.substring(0, path.length - 1) : path;
};
export const extractBaseUrlFromHeaders = (headers: ReadonlyHeaders): `${string}://${string}` => {
let protocol = headers.get("x-forwarded-proto") ?? "http";
export const extractBaseUrlFromHeaders = (
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
if (protocol.includes(",")) {
+4 -4
View File
@@ -48,16 +48,16 @@
"better-sqlite3": "^11.7.0",
"dotenv": "^16.4.7",
"drizzle-kit": "^0.30.1",
"drizzle-orm": "^0.38.2",
"drizzle-zod": "^0.6.0",
"mysql2": "3.11.5"
"drizzle-orm": "^0.38.3",
"drizzle-zod": "^0.6.1",
"mysql2": "3.12.0"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/better-sqlite3": "7.6.12",
"dotenv-cli": "^7.4.4",
"dotenv-cli": "^8.0.0",
"eslint": "^9.17.0",
"prettier": "^3.4.2",
"tsx": "4.19.2",
+1 -1
View File
@@ -26,7 +26,7 @@
"@homarr/common": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/form": "^7.15.1"
"@mantine/form": "^7.15.2"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
+2 -1
View File
@@ -5,7 +5,8 @@
"license": "MIT",
"type": "module",
"exports": {
".": "./index.ts"
".": "./index.ts",
"./local": "./src/local.ts"
},
"typesVersions": {
"*": {
+1
View File
@@ -0,0 +1 @@
export { createLocalImageUrl, mapMediaToIcon, LOCAL_ICON_REPOSITORY_SLUG } from "./repositories/local.icon-repository";
@@ -1,26 +1,36 @@
import { createHash } from "crypto";
import type { InferSelectModel } 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";
export const LOCAL_ICON_REPOSITORY_SLUG = "local";
export class LocalIconRepository extends IconRepository {
constructor() {
super("Local", "local", undefined, undefined, undefined, undefined);
super("Local", LOCAL_ICON_REPOSITORY_SLUG, undefined, undefined, undefined, undefined);
}
protected async getAllIconsInternalAsync(): Promise<RepositoryIconGroup> {
const medias = await db.query.medias.findMany();
return {
success: true,
icons: medias.map((media) => ({
local: true,
fileNameWithExtension: media.name,
imageUrl: `/api/user-medias/${media.id}`,
checksum: createHash("md5").update(media.content).digest("hex"),
sizeInBytes: media.size,
})),
slug: "local",
icons: medias.map(mapMediaToIcon),
slug: LOCAL_ICON_REPOSITORY_SLUG,
};
}
}
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,
});
+3 -3
View File
@@ -24,9 +24,9 @@
},
"prettier": "@homarr/prettier-config",
"dependencies": {
"@ctrl/deluge": "^7.0.0",
"@ctrl/qbittorrent": "^9.1.0",
"@ctrl/transmission": "^7.1.0",
"@ctrl/deluge": "^7.1.0",
"@ctrl/qbittorrent": "^9.2.0",
"@ctrl/transmission": "^7.2.0",
"@homarr/common": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
+1 -1
View File
@@ -32,7 +32,7 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "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",
"dayjs": "^1.11.13",
"next": "^14.2.21",
+2 -2
View File
@@ -24,8 +24,8 @@
"dependencies": {
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^7.15.1",
"@mantine/hooks": "^7.15.1",
"@mantine/core": "^7.15.2",
"@mantine/hooks": "^7.15.2",
"react": "^19.0.0"
},
"devDependencies": {
+1 -1
View File
@@ -24,7 +24,7 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/ui": "workspace:^0.1.0",
"@mantine/notifications": "^7.15.1",
"@mantine/notifications": "^7.15.2",
"@tabler/icons-react": "^3.26.0"
},
"devDependencies": {
+2 -2
View File
@@ -37,8 +37,8 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^7.15.1",
"@mantine/hooks": "^7.15.1",
"@mantine/core": "^7.15.2",
"@mantine/hooks": "^7.15.2",
"adm-zip": "0.5.16",
"next": "^14.2.21",
"react": "^19.0.0",
@@ -23,6 +23,7 @@ export const mapAndDecryptUsers = (importUsers: OldmarrImportUser[], encryptionT
...user,
oldId: id,
id: createId(),
name: user.name.toLowerCase(),
colorScheme: settings?.colorScheme === "environment" ? undefined : settings?.colorScheme,
firstDayOfWeek: settings?.firstDayOfWeek === "sunday" ? 0 : settings?.firstDayOfWeek === "monday" ? 1 : 6,
provider: "credentials",
+4 -4
View File
@@ -32,11 +32,11 @@
"@homarr/modals-collection": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^7.15.1",
"@mantine/hooks": "^7.15.1",
"@mantine/spotlight": "^7.15.1",
"@mantine/core": "^7.15.2",
"@mantine/hooks": "^7.15.2",
"@mantine/spotlight": "^7.15.2",
"@tabler/icons-react": "^3.26.0",
"jotai": "^2.10.4",
"jotai": "^2.11.0",
"next": "^14.2.21",
"react": "^19.0.0",
"use-deep-compare-effect": "^1.8.1"
+235 -235
View File
@@ -2,130 +2,130 @@
"init": {
"step": {
"start": {
"title": "",
"subtitle": "",
"description": "",
"title": "欢迎使用 Homarr",
"subtitle": "让我们开始设置您的 Homarr 实例。",
"description": "首先,请选择您想要如何设置您的 Homarr 实例。",
"action": {
"scratch": "",
"importOldmarr": ""
"scratch": "从头开始",
"importOldmarr": "从 1.0 之前的 Homarr 导入"
}
},
"import": {
"title": "",
"subtitle": "",
"title": "导入数据",
"subtitle": "您可以从已有的 Homarr 实例导入数据。",
"dropzone": {
"title": "",
"description": ""
"title": "将 zip 文件拖到此处或单击浏览",
"description": "上传的压缩包将被处理,您可以选择要导入的内容"
},
"fileInfo": {
"action": {
"change": ""
"change": "更改文件"
}
},
"importSettings": {
"title": "",
"description": ""
"title": "导入设置",
"description": "配置导入方式"
},
"boardSelection": {
"title": "",
"description": "",
"title": "找到 {count} 个面板",
"description": "选择您想要导入的所有面板",
"action": {
"selectAll": "",
"unselectAll": ""
"selectAll": "选择全部",
"unselectAll": "取消全选"
}
},
"summary": {
"title": "",
"description": "",
"title": "导入概况",
"description": "在下面的概况中,您可以看到将要导入的内容",
"action": {
"import": ""
"import": "确认导入并继续"
},
"entities": {
"apps": "应用",
"boards": "面板",
"integrations": "",
"credentialUsers": ""
"integrations": "组件",
"credentialUsers": "凭证用户"
}
},
"tokenModal": {
"title": "",
"title": "输入导入密钥",
"field": {
"token": {
"label": "Token",
"description": ""
"label": "令牌",
"description": "输入您之前的 homarr 实例中显示的导入秘钥"
}
},
"notification": {
"error": {
"title": "",
"message": ""
"title": "无效秘钥",
"message": "您输入的秘钥无效"
}
}
}
},
"user": {
"title": "",
"subtitle": "",
"title": "管理员用户",
"subtitle": "指定您的管理员用户的凭据。",
"notification": {
"success": {
"title": "",
"message": ""
"title": "创建用户",
"message": "用户已成功创建"
},
"error": {
"title": ""
"title": "用户创建失败"
}
}
},
"group": {
"title": "",
"subtitle": "",
"title": "外部组",
"subtitle": "指定应该用于外部用户的组。",
"form": {
"name": {
"label": "",
"description": ""
"label": "组名称",
"description": "名称必须与外部提供商的管理组匹配"
}
}
},
"settings": {
"title": "设置",
"subtitle": ""
"subtitle": "配置服务器的设置"
},
"finish": {
"title": "",
"subtitle": "",
"description": "",
"title": "完成设置",
"subtitle": "你已设置完成!",
"description": "您已成功完成设置过程。现在您可以开始使用 Homarr 了。选择下一步操作:",
"action": {
"goToBoard": "",
"createBoard": "",
"inviteUser": "",
"docs": ""
"goToBoard": "转到 {name} 面板",
"createBoard": "创建您的第一个面板",
"inviteUser": "邀请其他用户",
"docs": "阅读文档"
}
}
},
"backToStart": ""
"backToStart": "返回起点"
},
"user": {
"title": "用户",
"name": "用户",
"page": {
"login": {
"title": "",
"subtitle": ""
"title": "登录你的账户",
"subtitle": "欢迎回来!请输入您的凭据"
},
"invite": {
"title": "",
"subtitle": "",
"description": ""
"title": "加入 Homarr",
"subtitle": "欢迎来到 Homarr!请创建您的账户",
"description": "您受到了 {username} 的邀请。"
},
"init": {
"title": "",
"subtitle": ""
"title": "新建Homarr 安装",
"subtitle": "请创建初始管理员用户"
}
},
"field": {
"email": {
"label": "邮箱",
"verified": ""
"verified": "已验证"
},
"username": {
"label": "用户名"
@@ -133,46 +133,46 @@
"password": {
"label": "密码",
"requirement": {
"length": "",
"length": "包含至少8个字符",
"lowercase": "包括小写字母",
"uppercase": "包含大写字母",
"number": "包含数字",
"special": ""
"special": "包含特殊符号"
}
},
"passwordConfirm": {
"label": "确认密码"
},
"previousPassword": {
"label": ""
"label": "先前的密码"
},
"homeBoard": {
"label": ""
"label": "首页"
},
"pingIconsEnabled": {
"label": ""
"label": "用于ping的图标"
}
},
"error": {
"usernameTaken": ""
"usernameTaken": "用户名称已被占用"
},
"action": {
"login": {
"label": "登录",
"labelWith": "",
"labelWith": "使用 {provider} 登录",
"notification": {
"success": {
"title": "",
"message": ""
"title": "登录成功",
"message": "您已登录"
},
"error": {
"title": "",
"message": ""
"title": "登录失败",
"message": "您登录失败"
}
},
"forgotPassword": {
"label": "",
"description": ""
"label": "忘记密码?",
"description": "管理员可以使用以下命令重置您的密码:"
}
},
"register": {
@@ -180,81 +180,81 @@
"notification": {
"success": {
"title": "账号已创建",
"message": ""
"message": "请登录以继续"
},
"error": {
"title": "",
"message": ""
"title": "创建账户失败",
"message": "无法创建您的帐户"
}
}
},
"create": "创建用户",
"changePassword": {
"label": "",
"label": "修改密码",
"notification": {
"success": {
"message": ""
"message": "密码修改成功"
},
"error": {
"message": ""
"message": "无法修改密码"
}
}
},
"changeHomeBoard": {
"notification": {
"success": {
"message": ""
"message": "主页面修改成功"
},
"error": {
"message": ""
"message": "无法修改主面板"
}
}
},
"changeFirstDayOfWeek": {
"notification": {
"success": {
"message": ""
"message": "成功修改一周的第一天"
},
"error": {
"message": ""
"message": "无法修改一周的第一天"
}
}
},
"changePingIconsEnabled": {
"notification": {
"success": {
"message": ""
"message": "Ping 图标切换成功"
},
"error": {
"message": ""
"message": "无法切换 ping 图标"
}
}
},
"manageAvatar": {
"changeImage": {
"label": "",
"label": "更改图像",
"notification": {
"success": {
"message": ""
"message": "图像修改成功"
},
"error": {
"message": ""
"message": "无法更改图像"
},
"toLarge": {
"title": "",
"message": ""
"title": "图片太大",
"message": "最大图像尺寸为 {size}"
}
}
},
"removeImage": {
"label": "",
"confirm": "",
"label": "删除图像",
"confirm": "确定要移除这张图片吗?",
"notification": {
"success": {
"message": ""
"message": "图像删除成功"
},
"error": {
"message": ""
"message": "无法删除图像"
}
}
}
@@ -262,42 +262,42 @@
"editProfile": {
"notification": {
"success": {
"message": ""
"message": "资料更新成功"
},
"error": {
"message": ""
"message": "资料更新失败"
}
}
},
"delete": {
"label": "",
"description": "",
"confirm": ""
"label": "永久删除用户",
"description": "删除此用户及其偏好设置。这将不会删除任何看板。用户将不会收到通知。",
"confirm": "您确定要删除用户 {username} 及其偏好设置吗?"
},
"select": {
"label": "",
"notFound": ""
"label": "选择用户",
"notFound": "找不到用户"
},
"transfer": {
"label": ""
"label": "选择新的所有者"
}
}
},
"group": {
"title": "",
"name": "",
"search": "",
"title": "组",
"name": "组",
"search": "查找组",
"field": {
"name": "名称",
"members": ""
"members": "成员列表"
},
"permission": {
"admin": {
"title": "管理员",
"item": {
"admin": {
"label": "",
"description": ""
"label": "管理员",
"description": "拥有此权限的成员可完全访问所有功能和设置"
}
}
},
@@ -305,20 +305,20 @@
"title": "应用",
"item": {
"create": {
"label": "",
"description": ""
"label": "创建应用",
"description": "允许成员创建应用"
},
"use-all": {
"label": "",
"description": ""
"label": "使用全部应用",
"description": "允许成员将任何应用添加到他们的看板"
},
"modify-all": {
"label": "",
"description": ""
"label": "修改全部应用",
"description": "允许成员修改全部应用"
},
"full-all": {
"label": "",
"description": ""
"label": "完整应用访问权限",
"description": "允许成员管理、使用和删除全部应用"
}
}
},
@@ -326,165 +326,165 @@
"title": "面板",
"item": {
"create": {
"label": "",
"description": ""
"label": "创建面板",
"description": "允许成员创建看板"
},
"view-all": {
"label": "",
"description": ""
"label": "查看全部面板",
"description": "允许成员查看全部看板"
},
"modify-all": {
"label": "",
"description": ""
"label": "修改全部看板",
"description": "允许成员修改全部看板 (不包括访问控制和危险区)"
},
"full-all": {
"label": "",
"description": ""
"label": "完整的看板访问权限",
"description": "允许成员查看、修改和删除全部看板 (包括访问控制和危险区)"
}
}
},
"integration": {
"title": "",
"title": "组件",
"item": {
"create": {
"label": "",
"description": ""
"label": "创建组件",
"description": "允许成员创建组件"
},
"use-all": {
"label": "",
"description": ""
"label": "使用全部组件",
"description": "允许成员将任何组件添加到他们的看板"
},
"interact-all": {
"label": "",
"description": ""
"label": "与任何组件互动",
"description": "允许成员与任何组件互动"
},
"full-all": {
"label": "",
"description": ""
"label": "完全的组件访问权限",
"description": "允许成员管理、使用并与任何组件交互"
}
}
},
"media": {
"title": "",
"title": "媒体",
"item": {
"upload": {
"label": "",
"description": ""
"label": "上传媒体",
"description": "允许成员上传媒体"
},
"view-all": {
"label": "",
"description": ""
"label": "查看全部媒体",
"description": "允许成员查看全部媒体"
},
"full-all": {
"label": "",
"description": ""
"label": "完全的媒体访问权限",
"description": "允许成员管理和删除任何媒体"
}
}
},
"other": {
"title": "",
"title": "其它",
"item": {
"view-logs": {
"label": "",
"description": ""
"label": "查看日志",
"description": "允许成员查看日志"
}
}
},
"search-engine": {
"title": "",
"title": "搜索引擎",
"item": {
"create": {
"label": "",
"description": ""
"label": "创建搜索引擎",
"description": "允许成员创建搜索引擎"
},
"modify-all": {
"label": "",
"description": ""
"label": "修改全部搜索引擎",
"description": "允许成员修改全部搜索引擎"
},
"full-all": {
"label": "",
"description": ""
"label": "完整的搜索引擎访问权限",
"description": "允许成员管理和删除任何搜索引擎"
}
}
}
},
"memberNotice": {
"mixed": "",
"external": ""
"mixed": "部分成员来自外部提供者,无法在此处管理",
"external": "所有成员都来自外部提供者,无法在此处管理"
},
"reservedNotice": {
"message": ""
"message": "此用户组保留供系统使用并限制部分操作 <checkoutDocs></checkoutDocs>"
},
"action": {
"create": {
"label": "",
"label": "新建用户组",
"notification": {
"success": {
"message": ""
"message": "用户组已成功创建"
},
"error": {
"message": ""
"message": "无法创建用户组"
}
}
},
"transfer": {
"label": "",
"description": "",
"confirm": "",
"label": "转移所有权",
"description": "将此用户组的所有权转移给另一个用户。",
"confirm": "确定将用户组 {name} 的所有权转移给 {username} 吗?",
"notification": {
"success": {
"message": ""
"message": "成功将用户组 {group} 的所有权转移给 {user}"
},
"error": {
"message": ""
"message": "无法转移所有权"
}
}
},
"addMember": {
"label": ""
"label": "添加成员"
},
"removeMember": {
"label": "",
"confirm": ""
"label": "删除成员",
"confirm": "确定将 {user} 从此用户组移除吗?"
},
"delete": {
"label": "",
"description": "",
"confirm": "",
"label": "删除用户组",
"description": "用户组一旦删除就无法恢复. 请谨慎操作.",
"confirm": "确认删除用户组 {name} 吗?",
"notification": {
"success": {
"message": ""
"message": "成功删除用户组 {name}"
},
"error": {
"message": ""
"message": "无法删除用户组 {name}"
}
}
},
"changePermissions": {
"notification": {
"success": {
"title": "",
"message": ""
"title": "权限已保存",
"message": "权限保存成功"
},
"error": {
"title": "",
"message": ""
"title": "权限未保存",
"message": "权限尚未保存"
}
}
},
"update": {
"notification": {
"success": {
"message": ""
"message": "用户组 {name} 保存成功"
},
"error": {
"message": ""
"message": "无法保存用户组 {name}"
}
}
},
"select": {
"label": "",
"notFound": ""
"label": "选择用户组",
"notFound": "未找到用户组"
}
}
},
@@ -493,47 +493,47 @@
"list": {
"title": "应用",
"noResults": {
"title": "",
"action": ""
"title": "尚无应用",
"action": "创建您的第一个应用"
}
},
"create": {
"title": "",
"title": "新建应用",
"notification": {
"success": {
"title": "",
"message": ""
"title": "创建成功",
"message": "应用已成功创建"
},
"error": {
"title": "",
"message": ""
"title": "创建失败",
"message": "无法创建此应用"
}
}
},
"edit": {
"title": "",
"title": "编辑应用",
"notification": {
"success": {
"title": "",
"message": ""
"title": "更改应用成功",
"message": "应用保存成功"
},
"error": {
"title": "",
"message": ""
"title": "无法应用更改",
"message": "无法保存此应用"
}
}
},
"delete": {
"title": "",
"message": "",
"title": "删除应用",
"message": "确认删除应用 {name} 吗?",
"notification": {
"success": {
"title": "",
"message": ""
"title": "成功删除",
"message": "应用已成功删除"
},
"error": {
"title": "",
"message": ""
"title": "删除失败",
"message": "无法删除应用"
}
}
}
@@ -543,65 +543,65 @@
"label": "名称"
},
"description": {
"label": ""
"label": "描述"
},
"url": {
"label": ""
"label": "Url"
}
},
"action": {
"select": {
"label": "",
"notFound": ""
"label": "选择应用",
"notFound": "未找到应用"
}
}
},
"integration": {
"page": {
"list": {
"title": "",
"search": "",
"title": "组件",
"search": "搜索组件",
"noResults": {
"title": ""
"title": "尚无组件"
}
},
"create": {
"title": "",
"title": "新的组件 {name}",
"notification": {
"success": {
"title": "",
"message": ""
"title": "创建成功",
"message": "组件已成功创建"
},
"error": {
"title": "",
"message": ""
"title": "创建失败",
"message": "无法创建组件"
}
}
},
"edit": {
"title": "",
"title": "编辑组件 {name}",
"notification": {
"success": {
"title": "",
"message": ""
"title": "更改应用成功",
"message": "组件已成功保存"
},
"error": {
"title": "",
"message": ""
"title": "无法应用更改",
"message": "无法保存此组件"
}
}
},
"delete": {
"title": "",
"message": "",
"title": "删除组件",
"message": "确认删除组件 {name} 吗?",
"notification": {
"success": {
"title": "",
"message": ""
"title": "成功删除",
"message": "组件已成功删除"
},
"error": {
"title": "",
"message": ""
"title": "删除失败",
"message": "无法删除组件"
}
}
}
@@ -611,21 +611,21 @@
"label": "名称"
},
"url": {
"label": ""
"label": "Url"
}
},
"action": {
"create": ""
"create": "新建组件"
},
"testConnection": {
"action": {
"create": "",
"edit": ""
"create": "测试连接并创建",
"edit": "测试连接并保存"
},
"alertNotice": "",
"alertNotice": "成功建立连接后保存按钮将启用",
"notification": {
"success": {
"title": "",
"title": "连接成功",
"message": ""
},
"invalidUrl": {
@@ -978,7 +978,7 @@
},
"field": {
"integrations": {
"label": ""
"label": "组件"
},
"customCssClasses": {
"label": ""
@@ -1213,7 +1213,7 @@
}
},
"iframe": {
"name": "iFrame",
"name": "",
"description": "嵌入互联网上的任何内容。某些网站可能限制访问。",
"option": {
"embedUrl": {
@@ -1981,15 +1981,15 @@
},
"error": {
"noBoard": {
"title": "",
"title": "欢迎使用 Homarr",
"description": "",
"link": "",
"link": "创建您的第一个面板",
"notice": ""
},
"notFound": {
"title": "",
"description": "",
"link": "",
"link": "查看全部面板",
"notice": ""
},
"homeBoard": {
@@ -2028,7 +2028,7 @@
"home": "首页",
"boards": "面板",
"apps": "应用",
"integrations": "",
"integrations": "组件",
"searchEngies": "",
"medias": "",
"users": {
@@ -2042,9 +2042,9 @@
"tools": {
"label": "工具",
"items": {
"docker": "Docker",
"docker": "",
"logs": "",
"api": "API",
"api": "",
"tasks": ""
}
},
@@ -2067,7 +2067,7 @@
"board": "面板",
"user": "用户",
"invite": "邀请",
"integration": "",
"integration": "组件",
"app": "应用",
"group": ""
},
@@ -2168,10 +2168,10 @@
"label": ""
},
"completed": {
"title": ""
"title": "创建用户"
},
"error": {
"title": ""
"title": "用户创建失败"
}
},
"action": {
@@ -2199,7 +2199,7 @@
},
"field": {
"id": {
"label": "ID"
"label": ""
},
"creator": {
"label": "创建者"
@@ -2208,7 +2208,7 @@
"label": "过期时间"
},
"token": {
"label": "Token"
"label": ""
}
}
}
@@ -2370,7 +2370,7 @@
}
},
"api": {
"title": "API",
"title": "",
"modal": {
"createApiToken": {
"title": "",
@@ -2390,7 +2390,7 @@
},
"table": {
"header": {
"id": "ID",
"id": "",
"createdBy": ""
}
}
@@ -2555,7 +2555,7 @@
"label": "面板"
},
"integrations": {
"label": "",
"label": "组件",
"edit": {
"label": "编辑"
},
@@ -2602,7 +2602,7 @@
"tools": {
"label": "工具",
"docker": {
"label": "Docker"
"label": ""
},
"logs": {
"label": ""
@@ -2662,7 +2662,7 @@
}
},
"integration": {
"title": ""
"title": "组件"
}
}
},
@@ -2749,7 +2749,7 @@
"description": ""
},
"torrent": {
"name": "Torrents",
"name": "",
"description": ""
},
"youTube": {
+8 -8
View File
@@ -27,7 +27,7 @@
"description": "Konfigurovat chování importu"
},
"boardSelection": {
"title": "",
"title": "Nalezeno {count} ploch",
"description": "Vyberte všechny plochy s velikostmi, které chcete importovat",
"action": {
"selectAll": "Vybrat vše",
@@ -38,33 +38,33 @@
"title": "Přehled importu",
"description": "",
"action": {
"import": ""
"import": "Potvrdit import a pokračovat"
},
"entities": {
"apps": "Aplikace",
"boards": "Plochy",
"integrations": "",
"integrations": "Integrace",
"credentialUsers": ""
}
},
"tokenModal": {
"title": "",
"title": "Zadejte token pro import",
"field": {
"token": {
"label": "",
"label": "Token",
"description": ""
}
},
"notification": {
"error": {
"title": "",
"message": ""
"title": "Neplatný token",
"message": "Token, který jste zadali je neplatný"
}
}
}
},
"user": {
"title": "",
"title": "Správce",
"subtitle": "",
"notification": {
"success": {
+89 -89
View File
@@ -893,11 +893,11 @@
"dynamic": {
"action": {
"create": "Neuer dynamischer Abschnitt",
"remove": ""
"remove": "Dynamischen Abschnitt entfernen"
},
"remove": {
"title": "",
"message": ""
"title": "Dynamischen Abschnitt entfernen",
"message": "Möchten Sie diesen dynamischen Abschnitt wirklich entfernen? Die Elemente werden an die gleiche Position im übergeordneten Abschnitt verschoben."
}
},
"category": {
@@ -907,29 +907,29 @@
}
},
"action": {
"create": "",
"edit": "",
"remove": "",
"create": "Neue Kategorie",
"edit": "Kategorie umbenennen",
"remove": "Kategorie entfernen",
"moveUp": "Nach oben bewegen",
"moveDown": "Nach unten bewegen",
"createAbove": "",
"createBelow": ""
"createAbove": "Neue Kategorie oben",
"createBelow": "Neue Kategorie unten"
},
"create": {
"title": "",
"submit": ""
"title": "Neue Kategorie",
"submit": "Kategorie hinzufügen"
},
"remove": {
"title": "",
"message": ""
"title": "Kategorie entfernen",
"message": "Möchten Sie die Kategorie {name} wirklich entfernen?"
},
"edit": {
"title": "",
"submit": ""
"title": "Kategorie umbenennen",
"submit": "Kategorie umbenennen"
},
"menu": {
"label": {
"create": "",
"create": "Neue Kategorie",
"changePosition": "Position wechseln"
}
}
@@ -937,12 +937,12 @@
},
"item": {
"action": {
"create": "",
"import": "",
"edit": "",
"moveResize": "",
"duplicate": "",
"remove": ""
"create": "Neues Element",
"import": "Element importieren",
"edit": "Element bearbeiten",
"moveResize": "Element verschieben/Größe ändern",
"duplicate": "Element duplizieren",
"remove": "Element löschen"
},
"menu": {
"label": {
@@ -950,11 +950,11 @@
}
},
"create": {
"title": "",
"addToBoard": ""
"title": "Wählen Sie das hinzuzufügende Element aus",
"addToBoard": "Zum Board hinzufügen"
},
"moveResize": {
"title": "",
"title": "Element verschieben/Größe ändern",
"field": {
"width": {
"label": "Breite"
@@ -963,67 +963,67 @@
"label": "Höhe"
},
"xOffset": {
"label": ""
"label": "X Versatz"
},
"yOffset": {
"label": ""
"label": "Y Versatz"
}
}
},
"edit": {
"title": "",
"title": "Element bearbeiten",
"advancedOptions": {
"label": "",
"title": ""
"label": "Erweiterte Optionen",
"title": "Erweiterte Element Optionen"
},
"field": {
"integrations": {
"label": ""
"label": "Integrationen"
},
"customCssClasses": {
"label": ""
"label": "Benutzerdefinierte CSS Klassen"
}
}
},
"remove": {
"title": "",
"message": ""
"title": "Element löschen",
"message": "Soll dieses Element wirklich entfernt werden?"
}
},
"widget": {
"app": {
"name": "",
"description": "",
"description": "Bettet eine App in das Board ein.",
"option": {
"appId": {
"label": ""
"label": "App auswählen"
},
"openInNewTab": {
"label": "In neuem Tab öffnen"
},
"showTitle": {
"label": ""
"label": "App Namen anzeigen"
},
"showDescriptionTooltip": {
"label": ""
"label": "Beschreibungs Tooltip anzeigen"
},
"pingEnabled": {
"label": ""
"label": "Einfachen Ping aktivieren"
}
},
"error": {
"notFound": {
"label": "",
"tooltip": ""
"label": "Keine App",
"tooltip": "Sie haben keine gültige App ausgewählt"
}
}
},
"bookmarks": {
"name": "",
"description": "",
"name": "Lesezeichen",
"description": "Zeigt mehrere App Links an",
"option": {
"title": {
"label": ""
"label": "Titel"
},
"layout": {
"label": "Ansicht",
@@ -1040,7 +1040,7 @@
}
},
"items": {
"label": "",
"label": "Lesezeichen",
"add": ""
}
}
@@ -1376,16 +1376,16 @@
}
},
"popover": {
"information": "",
"processor": "",
"memory": "",
"memoryAvailable": "",
"information": "Informationen",
"processor": "Prozessor: {cpuModelName}",
"memory": "Speicher: {memory}GiB",
"memoryAvailable": "Verfügbar: {memoryAvailable} GiB ({percent}%)",
"version": "",
"uptime": "",
"loadAverage": "",
"minute": "",
"minutes": "",
"used": "",
"uptime": "Betriebszeit: {days} Tage, {hours} Stunden, {minutes} Minuten",
"loadAverage": "Durchschnittliche Last:",
"minute": "1 Minute",
"minutes": "{count} Minuten",
"used": "Belegt",
"available": "Verfügbar",
"lastSeen": ""
},
@@ -1422,7 +1422,7 @@
"description": ""
},
"app": {
"noData": "",
"noData": "Keine App gefunden",
"description": ""
},
"error": {
@@ -1735,11 +1735,11 @@
"edit": {
"notification": {
"success": {
"title": "",
"title": "Änderungen erfolgreich angewendet",
"message": ""
},
"error": {
"title": "",
"title": "Änderungen konnten nicht angewendet werden",
"message": ""
}
},
@@ -1981,15 +1981,15 @@
},
"error": {
"noBoard": {
"title": "",
"title": "Willkommen bei Homarr",
"description": "",
"link": "",
"link": "Erstellen Sie Ihr erstes Board",
"notice": ""
},
"notFound": {
"title": "",
"description": "",
"link": "",
"link": "Alle Boards anzeigen",
"notice": ""
},
"homeBoard": {
@@ -2013,7 +2013,7 @@
}
},
"management": {
"metaTitle": "",
"metaTitle": "Verwaltung",
"title": {
"morning": "",
"afternoon": "",
@@ -2028,15 +2028,15 @@
"home": "Startseite",
"boards": "",
"apps": "",
"integrations": "",
"searchEngies": "",
"medias": "",
"integrations": "Integrationen",
"searchEngies": "Suchmaschinen",
"medias": "Medien",
"users": {
"label": "Benutzer",
"items": {
"manage": "Verwalten",
"invites": "Einladungen",
"groups": ""
"groups": "Gruppen"
}
},
"tools": {
@@ -2067,9 +2067,9 @@
"board": "",
"user": "Benutzer",
"invite": "Einladungen",
"integration": "",
"integration": "Integrationen",
"app": "",
"group": ""
"group": "Gruppen"
},
"statisticLabel": {
"boards": "",
@@ -2160,7 +2160,7 @@
"label": "Sicherheit"
},
"groups": {
"label": "",
"label": "Gruppen",
"title": "",
"description": ""
},
@@ -2168,10 +2168,10 @@
"label": ""
},
"completed": {
"title": ""
"title": "Benutzer erstellt"
},
"error": {
"title": ""
"title": "Benutzer anlegen fehlgeschlagen"
}
},
"action": {
@@ -2223,7 +2223,7 @@
"ownerOfGroupDeleted": ""
},
"members": {
"title": "",
"title": "Mitglieder",
"search": "",
"notFound": ""
},
@@ -2297,8 +2297,8 @@
"defaultColorScheme": {
"label": "",
"options": {
"light": "",
"dark": ""
"light": "Hell",
"dark": "Dunkel"
}
}
},
@@ -2529,7 +2529,7 @@
},
"tab": {
"user": "Benutzer",
"group": "",
"group": "Gruppen",
"inherited": ""
},
"field": {
@@ -2537,7 +2537,7 @@
"label": "Benutzer"
},
"group": {
"label": ""
"label": "Gruppe"
},
"permission": {
"label": ""
@@ -2555,7 +2555,7 @@
"label": ""
},
"integrations": {
"label": "",
"label": "Integrationen",
"edit": {
"label": "Bearbeiten"
},
@@ -2564,7 +2564,7 @@
}
},
"search-engines": {
"label": "",
"label": "Suchmaschinen",
"new": {
"label": ""
},
@@ -2573,7 +2573,7 @@
}
},
"medias": {
"label": ""
"label": "Medien"
},
"apps": {
"label": "",
@@ -2593,7 +2593,7 @@
"security": "Sicherheit",
"board": "",
"groups": {
"label": ""
"label": "Gruppen"
},
"invites": {
"label": "Einladungen"
@@ -2634,7 +2634,7 @@
"label": ""
},
"edit": {
"label": ""
"label": "App bearbeiten"
}
},
"detail": {
@@ -2662,7 +2662,7 @@
}
},
"integration": {
"title": ""
"title": "Integrationen"
}
}
},
@@ -2676,8 +2676,8 @@
"title": "",
"option": {
"colorScheme": {
"light": "",
"dark": ""
"light": "Zum hellen Design wechseln",
"dark": "Zum dunklen Design wechseln"
},
"language": {
"label": "",
@@ -2721,7 +2721,7 @@
"help": "",
"group": {
"searchEngine": {
"title": "",
"title": "Suchmaschinen",
"children": {
"action": {
"search": {
@@ -2828,7 +2828,7 @@
"label": ""
},
"manageLog": {
"label": ""
"label": "Logs anzeigen"
},
"manageTask": {
"label": ""
@@ -2866,7 +2866,7 @@
}
},
"group": {
"title": "",
"title": "Gruppen",
"children": {
"action": {
"detail": {
@@ -2900,12 +2900,12 @@
"label": ""
},
"description": {
"label": ""
"label": "Beschreibung"
}
},
"page": {
"list": {
"title": "",
"title": "Suchmaschinen",
"noResults": {
"title": "",
"action": ""
@@ -2929,11 +2929,11 @@
"title": "",
"notification": {
"success": {
"title": "",
"title": "Änderungen erfolgreich angewendet",
"message": ""
},
"error": {
"title": "",
"title": "Änderungen konnten nicht angewendet werden",
"message": ""
}
},
+104 -104
View File
@@ -52,7 +52,7 @@
"field": {
"token": {
"label": "Jeton",
"description": ""
"description": "Entrez le jeton d'importation de votre instance précédente"
}
},
"notification": {
@@ -65,7 +65,7 @@
},
"user": {
"title": "Administrateur",
"subtitle": "",
"subtitle": "Spécifiez les informations d'identification pour votre compte d'administrateur.",
"notification": {
"success": {
"title": "Utilisateur créé",
@@ -97,7 +97,7 @@
"action": {
"goToBoard": "",
"createBoard": "",
"inviteUser": "",
"inviteUser": "Inviter d'autres utilisateurs",
"docs": "Lire la documentation"
}
}
@@ -144,7 +144,7 @@
"label": "Confirmation du mot de passe"
},
"previousPassword": {
"label": ""
"label": "Ancien mot de passe"
},
"homeBoard": {
"label": ""
@@ -166,13 +166,13 @@
"message": "Vous êtes maintenant connecté"
},
"error": {
"title": "",
"title": "Échec de la connexion",
"message": ""
}
},
"forgotPassword": {
"label": "Mot de passe oublié?",
"description": ""
"description": "Un administrateur peut utiliser la commande suivante pour réinitialiser votre mot de passe :"
}
},
"register": {
@@ -184,7 +184,7 @@
},
"error": {
"title": "",
"message": ""
"message": "Votre compte n'a pas pu être créé"
}
}
},
@@ -196,7 +196,7 @@
"message": "Mot de passe modifié avec succès"
},
"error": {
"message": ""
"message": "Modification du mot de passe impossible"
}
}
},
@@ -232,17 +232,17 @@
},
"manageAvatar": {
"changeImage": {
"label": "",
"label": "Modifier l’image",
"notification": {
"success": {
"message": ""
"message": "L'image a été modifiée avec succès"
},
"error": {
"message": "Impossible de modifier l'image"
},
"toLarge": {
"title": "L'image est trop volumineuse",
"message": ""
"message": "La taille maximale de l'image est {size}"
}
}
},
@@ -271,8 +271,8 @@
},
"delete": {
"label": "Supprimer définitivement l'utilisateur",
"description": "",
"confirm": ""
"description": "Supprime cet utilisateur ainsi que ses préférences. Ne supprimera aucun tableau. L'utilisateur ne sera pas averti.",
"confirm": "Êtes-vous sûr de vouloir supprimer l'utilisateur {username} ainsi que ses préférences ?"
},
"select": {
"label": "Sélectionner l'utilisateur",
@@ -297,7 +297,7 @@
"item": {
"admin": {
"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"
},
"use-all": {
"label": "",
"label": "Utiliser toutes les apps",
"description": ""
},
"modify-all": {
"label": "",
"label": "Modifier toutes les apps",
"description": ""
},
"full-all": {
@@ -344,11 +344,11 @@
}
},
"integration": {
"title": "",
"title": "Intégrations",
"item": {
"create": {
"label": "",
"description": ""
"label": "Créer des intégrations",
"description": "Autoriser les membres à créer des intégrations"
},
"use-all": {
"label": "",
@@ -365,37 +365,37 @@
}
},
"media": {
"title": "",
"title": "Médias",
"item": {
"upload": {
"label": "",
"description": ""
"label": "Téléverser des médias",
"description": "Autoriser les membres à téléverser des médias"
},
"view-all": {
"label": "",
"description": ""
"label": "Voir tous les médias",
"description": "Autoriser les membres à voir tous les médias"
},
"full-all": {
"label": "",
"description": ""
"label": "Accès complet aux médias",
"description": "Autoriser les membres à gérer et supprimer les médias"
}
}
},
"other": {
"title": "",
"title": "Autre",
"item": {
"view-logs": {
"label": "",
"description": ""
"label": "Voir les logs",
"description": "Autoriser les membres à voir les logs"
}
}
},
"search-engine": {
"title": "",
"title": "Moteurs de recherche",
"item": {
"create": {
"label": "",
"description": ""
"label": "Créer des moteurs de recherche",
"description": "Autoriser les membres à créer des moteurs de recherche"
},
"modify-all": {
"label": "",
@@ -413,62 +413,62 @@
"external": ""
},
"reservedNotice": {
"message": ""
"message": "Ce groupe est réservé pour l'utilisation du système et restreint certaines actions. <checkoutDocs></checkoutDocs>"
},
"action": {
"create": {
"label": "",
"label": "Nouveau groupe",
"notification": {
"success": {
"message": ""
"message": "Le groupe a été créé avec succès"
},
"error": {
"message": ""
"message": "Le groupe n'a pas pu être créé"
}
}
},
"transfer": {
"label": "",
"description": "",
"confirm": "",
"label": "Changer le propriétaire",
"description": "Transférer la propriété de ce groupe à un autre utilisateur.",
"confirm": "Êtes-vous sûr de vouloir transférer la propriété du groupe {name} à {username}?",
"notification": {
"success": {
"message": ""
"message": "Le groupe {group} a été transféré avec succès à {user}"
},
"error": {
"message": ""
"message": "Impossible de transférer la propriété"
}
}
},
"addMember": {
"label": ""
"label": "Ajouter un membre"
},
"removeMember": {
"label": "",
"confirm": ""
"label": "Retirer un membre",
"confirm": "Êtes-vous sûr de vouloir retirer {user} de ce groupe ?"
},
"delete": {
"label": "",
"description": "",
"confirm": "",
"label": "Supprimer le groupe",
"description": "Une fois que vous supprimez un groupe, il n'y a pas de retour en arrière possible. Soyez certain.",
"confirm": "Êtes-vous sûr de vouloir supprimer le groupe {name}?",
"notification": {
"success": {
"message": ""
"message": "Groupe {name} supprimé avec succès"
},
"error": {
"message": ""
"message": "Impossible de supprimer le groupe {name}"
}
}
},
"changePermissions": {
"notification": {
"success": {
"title": "",
"message": ""
"title": "Permissions sauvegardées",
"message": "Les permissions ont été sauvegardées avec succès"
},
"error": {
"title": "",
"message": ""
"title": "Permissions non sauvegardées",
"message": "Les permissions n'ont pas été sauvegardées"
}
}
},
@@ -483,8 +483,8 @@
}
},
"select": {
"label": "",
"notFound": ""
"label": "Sélectionner un groupe",
"notFound": "Aucun groupe trouvé"
}
}
},
@@ -493,16 +493,16 @@
"list": {
"title": "Applications",
"noResults": {
"title": "",
"action": ""
"title": "Il n'y a pas encore d'apps",
"action": "Créer votre première app"
}
},
"create": {
"title": "",
"title": "Nouvelle app",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Créé avec succès",
"message": "L'application a bien été créée"
},
"error": {
"title": "",
@@ -518,17 +518,17 @@
"message": ""
},
"error": {
"title": "",
"title": "Impossible d'appliquer les changements",
"message": ""
}
}
},
"delete": {
"title": "",
"message": "",
"title": "Supprimer l'app",
"message": "Êtes-vous sûr de vouloir supprimer l'app {name}?",
"notification": {
"success": {
"title": "",
"title": "Suppression effectuée avec succès",
"message": ""
},
"error": {
@@ -543,23 +543,23 @@
"label": "Nom"
},
"description": {
"label": ""
"label": "Description"
},
"url": {
"label": ""
"label": "Url"
}
},
"action": {
"select": {
"label": "",
"notFound": ""
"label": "Sélectionner l'app",
"notFound": "Aucune app trouvée"
}
}
},
"integration": {
"page": {
"list": {
"title": "",
"title": "Intégrations",
"search": "",
"noResults": {
"title": ""
@@ -569,7 +569,7 @@
"title": "",
"notification": {
"success": {
"title": "",
"title": "Créé avec succès",
"message": ""
},
"error": {
@@ -611,37 +611,37 @@
"label": "Nom"
},
"url": {
"label": ""
"label": "Url"
}
},
"action": {
"create": ""
"create": "Nouvelle intégration"
},
"testConnection": {
"action": {
"create": "",
"edit": ""
"create": "Tester la connexion et créer",
"edit": "Tester la connexion et enregistrer"
},
"alertNotice": "",
"alertNotice": "Le bouton Enregistrer est activé une fois qu'une connexion est établie avec succès",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Connexion réussie",
"message": "La connexion a été établie avec succès"
},
"invalidUrl": {
"title": "URL invalide",
"message": ""
"message": "L'URL est invalide."
},
"secretNotDefined": {
"title": "",
"message": ""
"title": "Identifiants manquants",
"message": "Les informations d'identification n'ont pas toutes été fournies"
},
"invalidCredentials": {
"title": "",
"message": ""
"title": "Informations d'identification incorrectes.",
"message": "Les informations d'identification ne sont pas valides"
},
"commonError": {
"title": "",
"title": "Échec de la connexion",
"message": ""
},
"badRequest": {
@@ -709,11 +709,11 @@
"kind": {
"username": {
"label": "Nom d'utilisateur",
"newLabel": ""
"newLabel": "Nouveau nom d'utilisateur"
},
"apiKey": {
"label": "",
"newLabel": ""
"label": "Clé API",
"newLabel": "Nouvelle clé API"
},
"password": {
"label": "Mot de passe",
@@ -761,12 +761,12 @@
}
},
"copy": {
"label": ""
"label": "Copier l'URL"
}
}
},
"common": {
"beta": "",
"beta": "Bêta",
"error": "Erreur",
"action": {
"add": "Ajouter",
@@ -774,7 +774,7 @@
"backToOverview": "",
"create": "Créer",
"edit": "Modifier",
"import": "",
"import": "Importer",
"insert": "Insérer",
"remove": "Supprimer",
"save": "Sauvegarder",
@@ -783,31 +783,31 @@
"delete": "Supprimer",
"discard": "",
"confirm": "Confirmer",
"continue": "",
"continue": "Continuer",
"previous": "Précédent",
"next": "Suivant",
"checkoutDocs": "",
"checkLogs": "",
"checkoutDocs": "Voir la documentation",
"checkLogs": "Vérifiez les logs pour plus de détails",
"tryAgain": "Réessayer",
"loading": ""
"loading": "Chargement"
},
"here": "",
"here": "ici",
"iconPicker": {
"label": "",
"header": ""
},
"colorScheme": {
"options": {
"light": "",
"dark": ""
"light": "Clair",
"dark": "Sombre"
}
},
"information": {
"min": "",
"max": "",
"days": "",
"min": "Min",
"max": "Max",
"days": "Jours",
"hours": "Heures",
"minutes": ""
"minutes": "Minutes"
},
"notification": {
"create": {
@@ -832,7 +832,7 @@
},
"multiText": {
"placeholder": "",
"addLabel": ""
"addLabel": "Ajouter {value}"
},
"select": {
"placeholder": "",
@@ -844,9 +844,9 @@
"menu": {
"switchToDarkMode": "Activer le mode sombre",
"switchToLightMode": "Activer le mode clair",
"management": "",
"management": "Administration",
"preferences": "Vos préférences",
"logout": "",
"logout": "Se déconnecter",
"login": "Connexion",
"homeBoard": "",
"loggedOut": "",
@@ -992,7 +992,7 @@
},
"widget": {
"app": {
"name": "",
"name": "App",
"description": "",
"option": {
"appId": {
+212 -212
View File
@@ -93,39 +93,39 @@
"finish": {
"title": "סיים את ההגדרה",
"subtitle": "",
"description": "",
"description": "השלמת בהצלחה את תהליך ההגדרה. כעת תוכל להתחיל להשתמש ב-Homarr. בחר את הפעולה הבאה שלך:",
"action": {
"goToBoard": "",
"createBoard": "",
"inviteUser": "",
"docs": ""
"goToBoard": "עבור ללוח {name}",
"createBoard": "צור את הלוח הראשון שלך",
"inviteUser": "הזמן משתמשים אחרים",
"docs": "קרא את הדוקומנטציה"
}
}
},
"backToStart": ""
"backToStart": "חזרה להתחלה"
},
"user": {
"title": "משתמשים",
"name": "משתמש",
"page": {
"login": {
"title": "",
"subtitle": ""
"title": "היכנס לחשבון שלך",
"subtitle": "ברוך שובך! אנא הזן את שם המשתמש והסיסמה שלך"
},
"invite": {
"title": "",
"subtitle": "",
"description": ""
"title": "הצטרף ל- Homarr",
"subtitle": "ברוכים הבאים ל- Homarr! נא ליצור את החשבון שלך",
"description": "הוזמנת על ידי {username}"
},
"init": {
"title": "",
"subtitle": ""
"title": "התקנת Homarr חדשה",
"subtitle": "נא ליצור את משתמש המנהל הראשוני"
}
},
"field": {
"email": {
"label": "אימייל",
"verified": ""
"verified": "מאומת"
},
"username": {
"label": "שם משתמש"
@@ -133,46 +133,46 @@
"password": {
"label": "סיסמה",
"requirement": {
"length": "",
"length": "כולל לפחות 8 תווים",
"lowercase": "אפשר אותיות קטנות",
"uppercase": "אפשר אותיות גדולות",
"number": "אפשר מספרים",
"special": ""
"special": "כולל סמל מיוחד"
}
},
"passwordConfirm": {
"label": "אימות סיסמא"
},
"previousPassword": {
"label": ""
"label": "סיסמה קודמת"
},
"homeBoard": {
"label": ""
"label": "לוח בית"
},
"pingIconsEnabled": {
"label": ""
"label": "השתמש בסמלים עבור פינגים"
}
},
"error": {
"usernameTaken": ""
"usernameTaken": "שם המשתמש תפוס"
},
"action": {
"login": {
"label": "התחבר/י",
"labelWith": "",
"labelWith": "התחבר עם {provider}",
"notification": {
"success": {
"title": "",
"message": ""
"title": "התחברת בהצלחה",
"message": "אתה כעת מחובר"
},
"error": {
"title": "",
"message": ""
"title": "התחברות נכשלה",
"message": "הכניסה נכשלה"
}
},
"forgotPassword": {
"label": "",
"description": ""
"label": "שכחת את הסיסמה שלך?",
"description": "מנהל מערכת יכול להשתמש בפקודה הבאה כדי לאפס את הסיסמה שלך:"
}
},
"register": {
@@ -180,81 +180,81 @@
"notification": {
"success": {
"title": "החשבון נוצר",
"message": ""
"message": "אנא היכנס כדי להמשיך"
},
"error": {
"title": "",
"message": ""
"title": "יצירת החשבון נכשלה",
"message": "לא ניתן ליצור את החשבון שלך"
}
}
},
"create": "צור משתמש",
"changePassword": {
"label": "",
"label": "שינוי סיסמה",
"notification": {
"success": {
"message": ""
"message": "הסיסמה שונתה בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן לשנות סיסמה"
}
}
},
"changeHomeBoard": {
"notification": {
"success": {
"message": ""
"message": "לוח הבית השתנה בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן לשנות לוח בית"
}
}
},
"changeFirstDayOfWeek": {
"notification": {
"success": {
"message": ""
"message": "היום הראשון בשבוע השתנה בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן לשנות את היום הראשון בשבוע"
}
}
},
"changePingIconsEnabled": {
"notification": {
"success": {
"message": ""
"message": "סמלי פינג הוחלפו בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן לשנות את סמלי הפינג"
}
}
},
"manageAvatar": {
"changeImage": {
"label": "",
"label": "שנה תמונה",
"notification": {
"success": {
"message": ""
"message": "התמונה השתנתה בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן לשנות תמונה"
},
"toLarge": {
"title": "",
"message": ""
"title": "התמונה גדולה מדי",
"message": "גודל התמונה המרבי הוא {size}"
}
}
},
"removeImage": {
"label": "",
"confirm": "",
"label": "הסר תמונה",
"confirm": "האם אתה בטוח שברצונך להסיר את התמונה?",
"notification": {
"success": {
"message": ""
"message": "התמונה הוסרה בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן להסיר תמונה"
}
}
}
@@ -262,42 +262,42 @@
"editProfile": {
"notification": {
"success": {
"message": ""
"message": "הפרופיל עודכן בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן לעדכן את הפרופיל"
}
}
},
"delete": {
"label": "",
"description": "",
"confirm": ""
"label": "מחק משתמש לצמיתות",
"description": "מוחק משתמש זה כולל העדפותיו. לא ימחק אף לוח. המשתמש לא יקבל הודעה.",
"confirm": "האם אתה בטוח שאתה רוצה למחוק את המשתמש {username} עם ההעדפות שלו?"
},
"select": {
"label": "",
"notFound": ""
"label": "בחר משתמש",
"notFound": "לא נמצא משתמש"
},
"transfer": {
"label": ""
"label": "בחר בעלים חדש"
}
}
},
"group": {
"title": "",
"name": "",
"search": "",
"title": "קבוצות",
"name": "קבוצה",
"search": "מצא קבוצה",
"field": {
"name": "שם",
"members": ""
"members": "חברים"
},
"permission": {
"admin": {
"title": "מנהל מערכת",
"item": {
"admin": {
"label": "",
"description": ""
"label": "מנהל",
"description": "לחברים עם הרשאה זו יש גישה מלאה לכל התכונות וההגדרות"
}
}
},
@@ -305,20 +305,20 @@
"title": "אפליקציות",
"item": {
"create": {
"label": "",
"description": ""
"label": "יצירת אפליקציות",
"description": "מאפשר לחברים ליצור אפליקציות"
},
"use-all": {
"label": "",
"description": ""
"label": "שימוש בכל האפליקציות",
"description": "מאפשר לחברים להוסיף כל אפליקציות ללוחות שלהם"
},
"modify-all": {
"label": "",
"description": ""
"label": "משנה את כל האפליקציות",
"description": "מאפשר לחברים לשנות את כל האפליקציות"
},
"full-all": {
"label": "",
"description": ""
"label": "גישה מלאה לאפליקציה",
"description": "מאפשר לחברים לנהל, להשתמש ולמחוק כל אפליקציה"
}
}
},
@@ -326,20 +326,20 @@
"title": "לוחות",
"item": {
"create": {
"label": "",
"description": ""
"label": "יצירת לוחות",
"description": "מאפשר לחברים ליצור לוחות"
},
"view-all": {
"label": "",
"description": ""
"label": "הצגת כל הלוחות",
"description": "מאפשר לחברים לצפות בכל הלוחות"
},
"modify-all": {
"label": "",
"description": ""
"label": "משנה את כל הלוחות",
"description": "מאפשר לחברים לשנות את כל הלוחות (לא כולל בקרת גישה ואזור סכנה)"
},
"full-all": {
"label": "",
"description": ""
"label": "גישה מלאה ללוח",
"description": "אפשר לחברים להציג, לשנות ולמחוק את כל הלוחות (כולל בקרת גישה ואזור סכנה)"
}
}
},
@@ -347,144 +347,144 @@
"title": "אינטגרציות",
"item": {
"create": {
"label": "",
"description": ""
"label": "יצירת אינטגרציות",
"description": "אפשר לחברים ליצור אינטגרציות"
},
"use-all": {
"label": "",
"description": ""
"label": "שימוש בכל האינטגרציות",
"description": "מאפשר לחברים להוסיף כל אינטגרציה ללוחות שלהם"
},
"interact-all": {
"label": "",
"description": ""
"label": "אינטראקציה עם כל אינטגרציה",
"description": "אפשר לחברים לקיים אינטראקציה עם כל אינטגרציה"
},
"full-all": {
"label": "",
"description": ""
"label": "גישת אינטגרציה מלאה",
"description": "אפשר לחברים לנהל, להשתמש ולקיים אינטראקציה עם כל אינטגרציה"
}
}
},
"media": {
"title": "",
"title": "מדיה",
"item": {
"upload": {
"label": "",
"description": ""
"label": "העלה מדיה",
"description": "אפשר לחברים להעלות מדיה"
},
"view-all": {
"label": "",
"description": ""
"label": "הצג את כל המדיה",
"description": "אפשר לחברים להציג את כל המדיה"
},
"full-all": {
"label": "",
"description": ""
"label": "גישה מלאה למדיה",
"description": "אפשר לחברים לנהל ולמחוק כל מדיה"
}
}
},
"other": {
"title": "",
"title": "אחר",
"item": {
"view-logs": {
"label": "",
"description": ""
"label": "הצג לוגים",
"description": "אפשר לחברים לצפות בלוגים"
}
}
},
"search-engine": {
"title": "",
"title": "מנועי חיפוש",
"item": {
"create": {
"label": "",
"description": ""
"label": "צור מנועי חיפוש",
"description": "אפשר לחברים ליצור מנועי חיפוש"
},
"modify-all": {
"label": "",
"description": ""
"label": "שנה את כל מנועי החיפוש",
"description": "אפשר לחברים לשנות את כל מנועי החיפוש"
},
"full-all": {
"label": "",
"description": ""
"label": "גישה מלאה למנועי חיפוש",
"description": "אפשר לחברים לנהל ולמחוק כל מנוע חיפוש"
}
}
}
},
"memberNotice": {
"mixed": "",
"external": ""
"mixed": "חלק מהחברים הם מספקים חיצוניים ולא ניתן לנהל אותם כאן",
"external": "כל החברים הם מספקים חיצוניים ולא ניתן לנהל אותם כאן"
},
"reservedNotice": {
"message": ""
"message": "קבוצה זו שמורה לשימוש במערכת ומגבילה חלק מהפעולות. <checkoutDocs></checkoutDocs>"
},
"action": {
"create": {
"label": "",
"label": "קבוצה חדשה",
"notification": {
"success": {
"message": ""
"message": "הקבוצה נוצרה בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן ליצור את הקבוצה"
}
}
},
"transfer": {
"label": "",
"description": "",
"confirm": "",
"label": "העברת בעלות",
"description": "העבר את הבעלות על הקבוצה הזו למשתמש אחר.",
"confirm": "האם אתה בטוח שברצונך להעביר בעלות על הקבוצה {name} ל- {username}?",
"notification": {
"success": {
"message": ""
"message": "הקבוצה {group} הועברה בהצלחה ל {user}"
},
"error": {
"message": ""
"message": "לא ניתן להעביר בעלות"
}
}
},
"addMember": {
"label": ""
"label": "הוסף חבר"
},
"removeMember": {
"label": "",
"confirm": ""
"label": "הסר חבר",
"confirm": "האם אתה בטוח שברצונך להסיר את {user} מהקבוצה הזו?"
},
"delete": {
"label": "",
"label": "מחק קבוצה",
"description": "",
"confirm": "",
"confirm": "האם אתה בטוח שברצונך למחוק את הקבוצה {name}?",
"notification": {
"success": {
"message": ""
"message": "הקבוצה {name} נמחקה בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן למחוק את הקבוצה {name}"
}
}
},
"changePermissions": {
"notification": {
"success": {
"title": "",
"message": ""
"title": "ההרשאות נשמרו",
"message": "ההרשאות נשמרו בהצלחה"
},
"error": {
"title": "",
"message": ""
"title": "ההרשאות לא נשמרו",
"message": "ההרשאות לא נשמרו"
}
}
},
"update": {
"notification": {
"success": {
"message": ""
"message": "הקבוצה {name} נשמרה בהצלחה"
},
"error": {
"message": ""
"message": "לא ניתן לשמור את הקבוצה {name}"
}
}
},
"select": {
"label": "",
"notFound": ""
"label": "בחר קבוצה",
"notFound": "לא נמצאה קבוצה"
}
}
},
@@ -493,47 +493,47 @@
"list": {
"title": "אפליקציות",
"noResults": {
"title": "",
"action": ""
"title": "עדיין אין אפליקציות",
"action": "צור את האפליקציה הראשונה שלך"
}
},
"create": {
"title": "",
"title": "אפליקציה חדשה",
"notification": {
"success": {
"title": "",
"message": ""
"title": "היצירה הצליחה",
"message": "האפליקציה נוצרה בהצלחה"
},
"error": {
"title": "",
"message": ""
"title": "היצירה נכשלה",
"message": "לא ניתן ליצור את האפליקציה"
}
}
},
"edit": {
"title": "",
"title": "ערוך אפליקציה",
"notification": {
"success": {
"title": "",
"message": ""
"title": "השינויים הוחלו בהצלחה",
"message": "האפליקציה נשמרה בהצלחה"
},
"error": {
"title": "",
"message": ""
"title": "לא ניתן להחיל שינויים",
"message": "לא ניתן היה לשמור את האפליקציה"
}
}
},
"delete": {
"title": "",
"message": "",
"title": "מחק אפליקציה",
"message": "האם אתה בטוח שברצונך למחוק את האפליקציה {name}?",
"notification": {
"success": {
"title": "",
"message": ""
"title": "המחיקה הצליחה",
"message": "האפליקציה נמחקה בהצלחה"
},
"error": {
"title": "",
"message": ""
"title": "המחיקה נכשלה",
"message": "לא ניתן למחוק את האפליקציה"
}
}
}
@@ -543,16 +543,16 @@
"label": "שם"
},
"description": {
"label": ""
"label": "תיאור"
},
"url": {
"label": ""
"label": "כתובת אתר"
}
},
"action": {
"select": {
"label": "",
"notFound": ""
"label": "בחר אפליקציה",
"notFound": "לא נמצאה אפליקציה"
}
}
},
@@ -560,48 +560,48 @@
"page": {
"list": {
"title": "אינטגרציות",
"search": "",
"search": "חיפוש אינטגרציות",
"noResults": {
"title": ""
"title": "עדיין אין אינטגרציות"
}
},
"create": {
"title": "",
"title": "אינטגרציה {name} חדשה",
"notification": {
"success": {
"title": "",
"message": ""
"title": "היצירה הצליחה",
"message": "האינטגרציה נוצרה בהצלחה"
},
"error": {
"title": "",
"message": ""
"title": "היצירה נכשלה",
"message": "לא ניתן ליצור את האינטגרציה"
}
}
},
"edit": {
"title": "",
"title": "ערוך אינטגרציה {name}",
"notification": {
"success": {
"title": "",
"message": ""
"title": "השינויים הוחלו בהצלחה",
"message": "האינטגרציה נשמרה בהצלחה"
},
"error": {
"title": "",
"message": ""
"title": "לא ניתן להחיל שינויים",
"message": "לא ניתן היה לשמור את האינטגרציה"
}
}
},
"delete": {
"title": "",
"message": "",
"title": "מחק אינטגרציה",
"message": "האם אתה בטוח שברצונך למחוק את האינטגרציה {name}?",
"notification": {
"success": {
"title": "",
"message": ""
"title": "המחיקה הצליחה",
"message": "האינטגרציה נמחקה בהצלחה"
},
"error": {
"title": "",
"message": ""
"title": "המחיקה נכשלה",
"message": "לא ניתן למחוק את האינטגרציה"
}
}
}
@@ -611,29 +611,29 @@
"label": "שם"
},
"url": {
"label": ""
"label": "כתובת אתר"
}
},
"action": {
"create": ""
"create": "אינטגרציה חדשה"
},
"testConnection": {
"action": {
"create": "",
"edit": ""
"create": "בדוק חיבור וצור",
"edit": "בדוק את החיבור ושמור"
},
"alertNotice": "",
"alertNotice": "הלחצן שמור מופעל לאחר יצירת חיבור מוצלח",
"notification": {
"success": {
"title": "",
"message": ""
"title": "החיבור הצליח",
"message": "החיבור נוצר בהצלחה"
},
"invalidUrl": {
"title": "קישור לא תקין",
"message": ""
"message": "כתובת האתר אינה חוקית"
},
"secretNotDefined": {
"title": "",
"title": "חסרים פרטי התחברות",
"message": ""
},
"invalidCredentials": {
@@ -724,11 +724,11 @@
"permission": {
"use": "",
"interact": "",
"full": ""
"full": "גישת אינטגרציה מלאה"
}
},
"media": {
"plural": "",
"plural": "מדיה",
"search": "",
"field": {
"name": "שם",
@@ -811,16 +811,16 @@
},
"notification": {
"create": {
"success": "",
"error": ""
"success": "היצירה הצליחה",
"error": "היצירה נכשלה"
},
"delete": {
"success": "",
"error": ""
"success": "המחיקה הצליחה",
"error": "המחיקה נכשלה"
},
"update": {
"success": "",
"error": ""
"success": "השינויים הוחלו בהצלחה",
"error": "לא ניתן להחיל שינויים"
},
"transfer": {
"success": "",
@@ -1422,7 +1422,7 @@
"description": ""
},
"app": {
"noData": "",
"noData": "לא נמצאה אפליקציה",
"description": ""
},
"error": {
@@ -1735,11 +1735,11 @@
"edit": {
"notification": {
"success": {
"title": "",
"title": "השינויים הוחלו בהצלחה",
"message": ""
},
"error": {
"title": "",
"title": "לא ניתן להחיל שינויים",
"message": ""
}
},
@@ -1983,13 +1983,13 @@
"noBoard": {
"title": "ברוכים הבאים ל- Homarr",
"description": "",
"link": "",
"link": "צור את הלוח הראשון שלך",
"notice": ""
},
"notFound": {
"title": "",
"description": "",
"link": "",
"link": "הצגת כל הלוחות",
"notice": ""
},
"homeBoard": {
@@ -2029,14 +2029,14 @@
"boards": "לוחות",
"apps": "אפליקציות",
"integrations": "אינטגרציות",
"searchEngies": "",
"medias": "",
"searchEngies": "מנועי חיפוש",
"medias": "מדיה",
"users": {
"label": "משתמשים",
"items": {
"manage": "ניהול",
"invites": "הזמנות",
"groups": ""
"groups": "קבוצות"
}
},
"tools": {
@@ -2069,7 +2069,7 @@
"invite": "הזמנות",
"integration": "אינטגרציות",
"app": "אפליקציות",
"group": ""
"group": "קבוצות"
},
"statisticLabel": {
"boards": "לוחות",
@@ -2130,7 +2130,7 @@
"title": "כללי",
"item": {
"language": "",
"board": "",
"board": "לוח בית",
"firstDayOfWeek": "היום הראשון בשבוע",
"accessibility": "נגישות"
}
@@ -2160,7 +2160,7 @@
"label": "אבטחה"
},
"groups": {
"label": "",
"label": "קבוצות",
"title": "",
"description": ""
},
@@ -2223,7 +2223,7 @@
"ownerOfGroupDeleted": ""
},
"members": {
"title": "",
"title": "חברים",
"search": "",
"notFound": ""
},
@@ -2529,7 +2529,7 @@
},
"tab": {
"user": "משתמשים",
"group": "",
"group": "קבוצות",
"inherited": ""
},
"field": {
@@ -2537,7 +2537,7 @@
"label": "משתמש"
},
"group": {
"label": ""
"label": "קבוצה"
},
"permission": {
"label": ""
@@ -2564,7 +2564,7 @@
}
},
"search-engines": {
"label": "",
"label": "מנועי חיפוש",
"new": {
"label": ""
},
@@ -2573,7 +2573,7 @@
}
},
"medias": {
"label": ""
"label": "מדיה"
},
"apps": {
"label": "אפליקציות",
@@ -2593,7 +2593,7 @@
"security": "אבטחה",
"board": "לוחות",
"groups": {
"label": ""
"label": "קבוצות"
},
"invites": {
"label": "הזמנות"
@@ -2634,7 +2634,7 @@
"label": ""
},
"edit": {
"label": ""
"label": "ערוך אפליקציה"
}
},
"detail": {
@@ -2721,7 +2721,7 @@
"help": "",
"group": {
"searchEngine": {
"title": "",
"title": "מנועי חיפוש",
"children": {
"action": {
"search": {
@@ -2828,7 +2828,7 @@
"label": ""
},
"manageLog": {
"label": ""
"label": "הצג לוגים"
},
"manageTask": {
"label": ""
@@ -2840,7 +2840,7 @@
"label": "אודות"
},
"homeBoard": {
"label": ""
"label": "לוח בית"
},
"preferences": {
"label": "העדפות שלך"
@@ -2866,7 +2866,7 @@
}
},
"group": {
"title": "",
"title": "קבוצות",
"children": {
"action": {
"detail": {
@@ -2900,12 +2900,12 @@
"label": ""
},
"description": {
"label": ""
"label": "תיאור"
}
},
"page": {
"list": {
"title": "",
"title": "מנועי חיפוש",
"noResults": {
"title": "",
"action": ""
@@ -2929,11 +2929,11 @@
"title": "",
"notification": {
"success": {
"title": "",
"title": "השינויים הוחלו בהצלחה",
"message": ""
},
"error": {
"title": "",
"title": "לא ניתן להחיל שינויים",
"message": ""
}
},
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+166 -166
View File
@@ -2093,7 +2093,7 @@
"setHomeBoard": {
"label": "Сделать домашней панелью",
"badge": {
"label": "Домашняя",
"label": "Главная",
"tooltip": "Эта панель будет показываться как ваша домашняя панель"
}
},
@@ -2312,70 +2312,70 @@
},
"tool": {
"tasks": {
"title": "",
"title": "Задачи",
"status": {
"idle": "",
"running": "Работает",
"idle": "Ожидание",
"running": "Выполняется",
"error": "Ошибка"
},
"job": {
"iconsUpdater": {
"label": ""
"label": "Обновление иконок"
},
"analytics": {
"label": ""
"label": "Аналитика"
},
"smartHomeEntityState": {
"label": ""
"label": "Состояние объектов умного дома"
},
"ping": {
"label": ""
"label": "Проверка доступности"
},
"mediaServer": {
"label": "Медиасервер"
},
"mediaOrganizer": {
"label": ""
"label": "Организация медиафайлов"
},
"downloads": {
"label": ""
"label": "Загрузки"
},
"mediaRequestStats": {
"label": ""
"label": "Статистика запросов медиаконтента"
},
"mediaRequestList": {
"label": ""
"label": "Список запросов медиаконтента"
},
"rssFeeds": {
"label": ""
"label": "RSS-ленты"
},
"indexerManager": {
"label": ""
"label": "Управление индексаторами"
},
"healthMonitoring": {
"label": ""
"label": "Мониторинг состояния"
},
"dnsHole": {
"label": ""
"label": "Данные DNS-фильтра"
},
"sessionCleanup": {
"label": ""
"label": "Очистка сессий"
},
"updateChecker": {
"label": ""
"label": "Проверка обновлений"
},
"mediaTranscoding": {
"label": ""
"label": "Перекодирование медиафайлов"
}
}
},
"api": {
"title": "",
"title": "API",
"modal": {
"createApiToken": {
"title": "",
"description": "",
"button": ""
"title": "API-токен создан",
"description": "API-токен создан. Этот токен зашифрован в базе данных и будет показан только один раз. После закрытия окна его нельзя будет восстановить.",
"button": "Копировать и закрыть"
}
},
"tab": {
@@ -2383,15 +2383,15 @@
"label": "Документация"
},
"apiKey": {
"label": "",
"title": "",
"label": "Аутентификация",
"title": "API-ключи",
"button": {
"createApiToken": ""
"createApiToken": "Создать API-токен"
},
"table": {
"header": {
"id": "",
"createdBy": ""
"id": "ID",
"createdBy": "Создан пользователем"
}
}
}
@@ -2399,20 +2399,20 @@
}
},
"about": {
"version": "",
"text": "",
"version": "Версия {version}",
"text": "Homarr — это проект с открытым исходным кодом, поддерживаемый сообществом и развиваемый добровольцами. Благодаря этим людям Homarr остаётся растущим проектом с 2021 года. Наша команда работает над Homarr полностью удалённо из разных стран в своё свободное время без какой-либо компенсации.",
"accordion": {
"contributors": {
"title": "",
"subtitle": ""
"title": "Участники проекта",
"subtitle": "{count} поддерживают код и Homarr"
},
"translators": {
"title": "",
"subtitle": ""
"title": "Переводчики",
"subtitle": "{count} помогают с переводами на разные языки"
},
"libraries": {
"title": "",
"subtitle": ""
"title": "Библиотеки",
"subtitle": "{count} используются в коде Homarr"
}
}
}
@@ -2421,9 +2421,9 @@
"docker": {
"title": "Контейнеры",
"table": {
"updated": "",
"search": "",
"selected": ""
"updated": "Обновлено {when}",
"search": "Поиск среди {count} контейнеров",
"selected": "Выбрано {selectCount} из {totalCount} контейнеров"
},
"field": {
"name": {
@@ -2434,11 +2434,11 @@
"option": {
"created": "Создан",
"running": "Работает",
"paused": "Приостановлено",
"restarting": "Перезапуск",
"exited": "",
"removing": "Удаление",
"dead": ""
"paused": "Приостановлен",
"restarting": "Перезапускается",
"exited": "Остановлен",
"removing": "Удаляется",
"dead": "Нерабочий"
}
},
"containerImage": {
@@ -2453,12 +2453,12 @@
"label": "Запустить",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Контейнеры запущены",
"message": "Контейнеры успешно запущены"
},
"error": {
"title": "",
"message": ""
"title": "Не удалось запустить контейнеры",
"message": "Не удалось запустить контейнеры"
}
}
},
@@ -2466,12 +2466,12 @@
"label": "Остановить",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Контейнеры остановлены",
"message": "Контейнеры успешно остановлены"
},
"error": {
"title": "",
"message": ""
"title": "Не удалось остановить контейнеры",
"message": "Не удалось остановить контейнеры"
}
}
},
@@ -2479,12 +2479,12 @@
"label": "Перезапустить",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Контейнеры перезапущены",
"message": "Контейнеры успешно перезапущены"
},
"error": {
"title": "",
"message": ""
"title": "Не удалось перезапустить контейнеры",
"message": "Не удалось перезапустить контейнеры"
}
}
},
@@ -2492,45 +2492,45 @@
"label": "Удалить",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Контейнеры удалены",
"message": "Контейнеры успешно удалены"
},
"error": {
"title": "",
"message": ""
"title": "Не удалось удалить контейнеры",
"message": "Не удалось удалить контейнеры"
}
}
},
"refresh": {
"label": "",
"label": "Обновить",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Контейнеры обновлены",
"message": "Отображаются актуальные данные"
},
"error": {
"title": "",
"message": ""
"title": "Не удалось обновить контейнеры",
"message": "Произошла ошибка при обновлении данных о контейнерах"
}
}
}
},
"error": {
"internalServerError": ""
"internalServerError": "Произошла ошибка при обновлении данных о контейнерах"
}
},
"permission": {
"title": "",
"title": "Права доступа",
"userSelect": {
"title": ""
"title": "Добавить права для пользователя"
},
"groupSelect": {
"title": ""
"title": "Добавить права для группы"
},
"tab": {
"user": "Пользователи",
"group": "Группы",
"inherited": ""
"inherited": "Унаследованные группы"
},
"field": {
"user": {
@@ -2540,12 +2540,12 @@
"label": "Группа"
},
"permission": {
"label": ""
"label": "Права доступа"
}
},
"action": {
"saveUser": "",
"saveGroup": ""
"saveUser": "Сохранить права пользователя",
"saveGroup": "Сохранить права группы"
}
},
"navigationStructure": {
@@ -2560,13 +2560,13 @@
"label": "Редактировать"
},
"new": {
"label": ""
"label": "Новая"
}
},
"search-engines": {
"label": "Поисковые системы",
"new": {
"label": ""
"label": "Новая"
},
"edit": {
"label": "Редактировать"
@@ -2578,7 +2578,7 @@
"apps": {
"label": "Приложения",
"new": {
"label": ""
"label": "Новое"
},
"edit": {
"label": "Редактировать"
@@ -2589,7 +2589,7 @@
"create": {
"label": "Создать"
},
"general": "Основное",
"general": "Общие",
"security": "Безопасность",
"board": "Панели",
"groups": {
@@ -2602,10 +2602,10 @@
"tools": {
"label": "Инструменты",
"docker": {
"label": ""
"label": "Docker"
},
"logs": {
"label": ""
"label": "Логи"
}
},
"settings": {
@@ -2617,28 +2617,28 @@
}
},
"search": {
"placeholder": "",
"nothingFound": "",
"placeholder": "Найдётся все",
"nothingFound": "Ничего не найдено",
"error": {
"fetch": ""
"fetch": "Произошла ошибка при получении данных"
},
"mode": {
"appIntegrationBoard": {
"help": "",
"help": "Поиск приложений, интеграций или панелей",
"group": {
"app": {
"title": "Приложения",
"children": {
"action": {
"open": {
"label": ""
"label": "Открыть URL приложения"
},
"edit": {
"label": "Редактирование приложения"
"label": "Редактировать приложение"
}
},
"detail": {
"title": ""
"title": "Выберите действие для приложения"
}
}
},
@@ -2647,17 +2647,17 @@
"children": {
"action": {
"open": {
"label": ""
"label": "Открыть панель"
},
"homeBoard": {
"label": ""
"label": "Сделать домашней панелью"
},
"settings": {
"label": ""
"label": "Открыть настройки"
}
},
"detail": {
"title": ""
"title": "Выберите действие для панели"
}
}
},
@@ -2667,94 +2667,94 @@
}
},
"command": {
"help": "",
"help": "Активировать режим команд",
"group": {
"localCommand": {
"title": ""
"title": "Локальные команды"
},
"globalCommand": {
"title": "",
"title": "Глобальные команды",
"option": {
"colorScheme": {
"light": "",
"dark": ""
"light": "Переключить на светлую тему",
"dark": "Переключить на тёмную тему"
},
"language": {
"label": "",
"label": "Изменить язык",
"children": {
"detail": {
"title": ""
"title": "Выберите предпочитаемый язык"
}
}
},
"newBoard": {
"label": ""
"label": "Создать новую панель"
},
"importBoard": {
"label": ""
"label": "Импортировать панель"
},
"newApp": {
"label": ""
"label": "Создать новое приложение"
},
"newIntegration": {
"label": "",
"label": "Создать новую интеграцию",
"children": {
"detail": {
"title": ""
"title": "Выберите тип интеграции для создания"
}
}
},
"newUser": {
"label": ""
"label": "Создать нового пользователя"
},
"newInvite": {
"label": ""
"label": "Создать новое приглашение"
},
"newGroup": {
"label": ""
"label": "Создать новую группу"
}
}
}
}
},
"external": {
"help": "",
"help": "Использовать внешнюю поисковую систему",
"group": {
"searchEngine": {
"title": "Поисковые системы",
"children": {
"action": {
"search": {
"label": ""
"label": "Искать через {name}"
}
},
"detail": {
"title": ""
"title": "Выберите действие для поисковой системы"
},
"searchResults": {
"title": ""
"title": "Выберите результат поиска для действий"
}
},
"option": {
"google": {
"name": "",
"description": ""
"name": "Google",
"description": "Поиск в интернете через Google"
},
"bing": {
"name": "",
"description": ""
"name": "Bing",
"description": "Поиск в интернете через Bing"
},
"duckduckgo": {
"name": "",
"description": ""
"name": "DuckDuckGo",
"description": "Поиск в интернете через DuckDuckGo"
},
"torrent": {
"name": "Торренты",
"description": ""
"description": "Поиск торрентов на torrentdownloads.pro"
},
"youTube": {
"name": "",
"description": ""
"name": "YouTube",
"description": "Поиск видео на YouTube"
}
}
}
@@ -2763,7 +2763,7 @@
"help": {
"group": {
"mode": {
"title": ""
"title": "Режимы"
},
"help": {
"title": "Справка",
@@ -2772,7 +2772,7 @@
"label": "Документация"
},
"submitIssue": {
"label": ""
"label": "Сообщить о проблеме"
},
"discord": {
"label": "Сообщество Discord"
@@ -2784,57 +2784,57 @@
"home": {
"group": {
"local": {
"title": ""
"title": "Локальные результаты"
}
}
},
"page": {
"help": "",
"help": "Поиск по страницам",
"group": {
"page": {
"title": "",
"title": "Страницы",
"option": {
"manageHome": {
"label": ""
"label": "Управление главной страницей"
},
"manageBoard": {
"label": ""
"label": "Управление панелями"
},
"manageApp": {
"label": ""
"label": "Управление приложениями"
},
"manageIntegration": {
"label": ""
"label": "Управление интеграциями"
},
"manageSearchEngine": {
"label": ""
"label": "Управление поисковыми системами"
},
"manageMedia": {
"label": ""
"label": "Управление медиафайлами"
},
"manageUser": {
"label": "Управление пользователями"
},
"manageInvite": {
"label": ""
"label": "Управление приглашениями"
},
"manageGroup": {
"label": ""
"label": "Управление группами"
},
"manageDocker": {
"label": ""
"label": "Управление Docker"
},
"manageApi": {
"label": ""
"label": "Swagger API"
},
"manageLog": {
"label": "Просмотр журналов"
"label": "Просмотр логов"
},
"manageTask": {
"label": ""
"label": "Управление задачами"
},
"manageSettings": {
"label": ""
"label": "Глобальные настройки"
},
"about": {
"label": "О программе"
@@ -2850,18 +2850,18 @@
}
},
"userGroup": {
"help": "",
"help": "Поиск пользователей или групп",
"group": {
"user": {
"title": "Пользователи",
"children": {
"action": {
"detail": {
"label": ""
"label": "Показать сведения о пользователе"
}
},
"detail": {
"title": ""
"title": "Выберите действие для пользователя"
}
}
},
@@ -2870,17 +2870,17 @@
"children": {
"action": {
"detail": {
"label": ""
"label": "Показать сведения о группе"
},
"manageMember": {
"label": ""
"label": "Управление участниками"
},
"managePermission": {
"label": ""
"label": "Управление разрешениями"
}
},
"detail": {
"title": ""
"title": "Выберите действие для группы"
}
}
}
@@ -2888,16 +2888,16 @@
}
},
"engine": {
"search": "",
"search": "Найти поисковую систему",
"field": {
"name": {
"label": "Название"
},
"short": {
"label": ""
"label": "Краткое название"
},
"urlTemplate": {
"label": ""
"label": "Шаблон URL поиска"
},
"description": {
"label": "Описание"
@@ -2907,53 +2907,53 @@
"list": {
"title": "Поисковые системы",
"noResults": {
"title": "",
"action": ""
"title": "Поисковые системы пока отсутствуют",
"action": "Создать первую поисковую систему"
},
"interactive": ""
"interactive": "Интерактивная, использует интеграцию"
},
"create": {
"title": "",
"title": "Новая поисковая система",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Поисковая система создана",
"message": "Поисковая система успешно создана"
},
"error": {
"title": "",
"message": ""
"title": "Не удалось создать",
"message": "Не удалось создать поисковую систему"
}
}
},
"edit": {
"title": "",
"title": "Редактирование поисковой системы",
"notification": {
"success": {
"title": "Изменения сохранены",
"message": ""
"message": "Поисковая система успешно сохранена"
},
"error": {
"title": "Не удалось сохранить",
"message": ""
"message": "Не удалось сохранить поисковую систему"
}
},
"configControl": "",
"configControl": "Настройка",
"searchEngineType": {
"generic": "",
"fromIntegration": ""
"generic": "Обычная",
"fromIntegration": "Из интеграции"
}
},
"delete": {
"title": "",
"message": "",
"title": "Удаление поисковой системы",
"message": "Вы уверены, что хотите удалить поисковую систему '{name}'?",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Поисковая система удалена",
"message": "Поисковая система успешно удалена"
},
"error": {
"title": "",
"message": ""
"title": "Не удалось удалить",
"message": "Не удалось удалить поисковую систему"
}
}
}
+24 -24
View File
@@ -51,7 +51,7 @@
"title": "Zadajte token importu",
"field": {
"token": {
"label": "",
"label": "Token",
"description": "Zadajte zobrazený token importu z predchádzajúcej inštancie homarr"
}
},
@@ -546,7 +546,7 @@
"label": "Popis"
},
"url": {
"label": ""
"label": "Url"
}
},
"action": {
@@ -611,7 +611,7 @@
"label": "Názov"
},
"url": {
"label": ""
"label": "Url"
}
},
"action": {
@@ -766,7 +766,7 @@
}
},
"common": {
"beta": "",
"beta": "Beta",
"error": "Chyba",
"action": {
"add": "Pridať",
@@ -803,8 +803,8 @@
}
},
"information": {
"min": "",
"max": "",
"min": "Min",
"max": "Max",
"days": "Dni",
"hours": "Hodiny",
"minutes": "Minúty"
@@ -963,10 +963,10 @@
"label": "Výška"
},
"xOffset": {
"label": ""
"label": "X offset"
},
"yOffset": {
"label": ""
"label": "Y offset"
}
}
},
@@ -1213,7 +1213,7 @@
}
},
"iframe": {
"name": "",
"name": "iFrame",
"description": "Vložte akýkoľvek obsah z internetu. Niektoré webové stránky môžu obmedziť prístup.",
"option": {
"embedUrl": {
@@ -1515,11 +1515,11 @@
"detailsTitle": "Rýchlosť sťahovania"
},
"index": {
"columnTitle": "",
"columnTitle": "#",
"detailsTitle": "Aktuálny index v rámci klienta"
},
"id": {
"columnTitle": ""
"columnTitle": "Id"
},
"integration": {
"columnTitle": "Integrácia"
@@ -1619,7 +1619,7 @@
"partiallyAvailable": "Čiastočný",
"available": "K dispozícii"
},
"toBeDetermined": ""
"toBeDetermined": "TBD"
},
"mediaRequests-requestStats": {
"name": "Štatistiky mediálnych žiadostí",
@@ -2042,9 +2042,9 @@
"tools": {
"label": "Nástroje",
"items": {
"docker": "",
"docker": "Docker",
"logs": "Záznamy",
"api": "",
"api": "API",
"tasks": "Úlohy"
}
},
@@ -2199,7 +2199,7 @@
},
"field": {
"id": {
"label": ""
"label": "ID"
},
"creator": {
"label": "Autor"
@@ -2208,7 +2208,7 @@
"label": "Dátum vypršania"
},
"token": {
"label": ""
"label": "Token"
}
}
}
@@ -2370,7 +2370,7 @@
}
},
"api": {
"title": "",
"title": "API",
"modal": {
"createApiToken": {
"title": "Vytvorený token API",
@@ -2390,7 +2390,7 @@
},
"table": {
"header": {
"id": "",
"id": "ID",
"createdBy": "Vytvoril/a"
}
}
@@ -2602,7 +2602,7 @@
"tools": {
"label": "Nástroje",
"docker": {
"label": ""
"label": "Docker"
},
"logs": {
"label": "Záznamy"
@@ -2737,15 +2737,15 @@
},
"option": {
"google": {
"name": "",
"name": "Google",
"description": "Hľadajte na webe pomocou Google"
},
"bing": {
"name": "",
"name": "Bing",
"description": "Vyhľadávajte na webe pomocou Bingu"
},
"duckduckgo": {
"name": "",
"name": "DuckDuckGo",
"description": "Vyhľadávajte na webe pomocou DuckDuckGo"
},
"torrent": {
@@ -2753,7 +2753,7 @@
"description": "Vyhľadajte torrenty na torrentdownloads.pro"
},
"youTube": {
"name": "",
"name": "YouTube",
"description": "Hľadajte videá na YouTube"
}
}
@@ -2825,7 +2825,7 @@
"label": "Spravovať docker"
},
"manageApi": {
"label": ""
"label": "Swagger API"
},
"manageLog": {
"label": "Zobraziť denníky"
+105 -105
View File
@@ -6,59 +6,59 @@
"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.",
"action": {
"scratch": "Sıfırdan başlayın",
"importOldmarr": "Homarr 1.0'dan önceki yedeğinizi içe aktarın"
"scratch": "Sıfırdan Başla",
"importOldmarr": "Homarr 1.0'dan Önceki Yedeğinizi İçe Aktarın"
}
},
"import": {
"title": "Verileri içe aktar",
"subtitle": "Mevcut bir Homarr örneğinden alınan verileri içe aktarabilirsiniz.",
"title": "Verileri İçe Aktar",
"subtitle": "Mevcut Homarr Örneğinden Alınan Verileri İçe Aktarabilirsiniz.",
"dropzone": {
"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"
},
"fileInfo": {
"action": {
"change": "Dosyayı değiştir"
"change": "Dosyayı Değiştir"
}
},
"importSettings": {
"title": "İçe aktarma ayarları",
"description": "İçe aktarma işlevlerini yapılandırın"
"title": "İçe Aktarma Ayarları",
"description": "İçe Aktarma İşlevlerini Yapılandırın"
},
"boardSelection": {
"title": "{count} panel bulundu",
"description": "İçe aktarılacak tüm panellerin boyutlarını seçin",
"title": "{count} Panel Bulundu",
"description": "İçe Aktarılacak Tüm Panellerin Boyutlarını Seçin",
"action": {
"selectAll": "Tümünü seç",
"unselectAll": "Tüm seçimi kaldır"
"selectAll": "Tümünü Seç",
"unselectAll": "Tüm Seçimi Kaldır"
}
},
"summary": {
"title": "İçe aktarma özeti",
"description": "Aşağıdaki özeti kontrol ederek içe aktarılacak işlevleri görebilirsiniz",
"title": "İçe Aktarma Özeti",
"description": "Aşağıdaki Özeti Kontrol Ederek İçe Aktarılacak İşlevleri Görebilirsiniz",
"action": {
"import": "İçe aktarmayı onayla ve devam et"
"import": "İçe Aktarmayı Onayla ve Devam Et"
},
"entities": {
"apps": "Uygulamalar",
"boards": "Paneller",
"integrations": "Entegrasyonlar",
"credentialUsers": "Kullanıcı kimlik Bilgileri"
"credentialUsers": "Kullanıcı Kimlik Bilgileri"
}
},
"tokenModal": {
"title": "İçe aktarma token'ını girin",
"title": "İçe Aktarma Token'ını Girin",
"field": {
"token": {
"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": {
"error": {
"title": "Geçersiz token",
"message": "Girdiğiniz token geçersiz"
"title": "Geçersiz Token",
"message": "Girdiğiniz Token Geçersiz"
}
}
}
@@ -92,24 +92,24 @@
},
"finish": {
"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:",
"action": {
"goToBoard": "{name} paneline git",
"createBoard": "İlk panelinizi oluşturun",
"inviteUser": "Yeni kullanıcı davet et",
"docs": "Dökümanları okuyun"
"goToBoard": "{name} Paneline Git",
"createBoard": "İlk Panelinizi Oluşturun",
"inviteUser": "Yeni Kullanıcı Davet Et",
"docs": "Dökümanları Oku"
}
}
},
"backToStart": "Başlangıca geri dön"
"backToStart": "Başlangıca Geri Dön"
},
"user": {
"title": "Kullanıcılar",
"name": "Kullanıcı",
"page": {
"login": {
"title": "Hesabınıza giriş yapın",
"title": "Hesabınıza Giriş Yapın",
"subtitle": "Tekrar hoş geldiniz! Lütfen kimlik bilgilerinizi girin"
},
"invite": {
@@ -118,7 +118,7 @@
"description": "{username} tarafından davet edildiniz"
},
"init": {
"title": "Yeni Homarr kurulumu",
"title": "Yeni Homarr Kurulumu",
"subtitle": "Lütfen yönetici kullanıcısını oluşturun"
}
},
@@ -141,20 +141,20 @@
}
},
"passwordConfirm": {
"label": "Şifreyi onayla"
"label": "Şifreyi Onayla"
},
"previousPassword": {
"label": "Eski Şifre"
},
"homeBoard": {
"label": "Varsayılan panel"
"label": "Varsayılan Panel"
},
"pingIconsEnabled": {
"label": "Pingler için simgeler kullanın"
"label": "Pingler İçin Simgeler Kullanın"
}
},
"error": {
"usernameTaken": "Kullanıcı adı önceden alındı"
"usernameTaken": "Kullanıcı Adı Önceden Alındı"
},
"action": {
"login": {
@@ -391,7 +391,7 @@
}
},
"search-engine": {
"title": "Arama motorları",
"title": "Arama Motorları",
"item": {
"create": {
"label": "Arama motorları oluşturun",
@@ -546,7 +546,7 @@
"label": "Tanım"
},
"url": {
"label": ""
"label": "Url"
}
},
"action": {
@@ -611,7 +611,7 @@
"label": "İsim"
},
"url": {
"label": ""
"label": "Url"
}
},
"action": {
@@ -703,7 +703,7 @@
"message": "Gizli anahtarı sıfırlamak istediğinizden emin misiniz?"
},
"noSecretsRequired": {
"segmentTitle": "Hiçbir Gizli anahtar yok",
"segmentTitle": "Hiçbir Gizli Anahtar Bulunamadı",
"text": "Bu entegrasyon için gizli anahtar gerekmiyor"
},
"kind": {
@@ -766,7 +766,7 @@
}
},
"common": {
"beta": "",
"beta": "Test",
"error": "Hata",
"action": {
"add": "Ekle",
@@ -791,7 +791,7 @@
"tryAgain": "Tekrar Deneyin",
"loading": "Yükleniyor"
},
"here": "burada",
"here": "buraya",
"iconPicker": {
"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."
@@ -803,8 +803,8 @@
}
},
"information": {
"min": "Asgari",
"max": "Azami",
"min": "En Düşük",
"max": "En Yüksek",
"days": "Gün",
"hours": "Saat",
"minutes": "Dakika"
@@ -856,8 +856,8 @@
"dangerZone": "Tehlikeli bölge",
"noResults": "Sonuç bulunamadı",
"preview": {
"show": "Önizlemeyi göster",
"hide": "Önizlemeyi Gizle"
"show": "Ara Renkleri Göster",
"hide": "Ara Renkleri Gizle"
},
"zod": {
"errors": {
@@ -866,16 +866,16 @@
"string": {
"startsWith": "Bu alan {startsWith} ile başlamalıdır",
"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"
},
"tooSmall": {
"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": {
"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": {
"passwordsDoNotMatch": "Parolalar uyuşmuyor",
@@ -1013,7 +1013,7 @@
},
"error": {
"notFound": {
"label": "Uygulama yok",
"label": "Uygulama Eklenmedi",
"tooltip": "Geçerli bir uygulama seçmediniz"
}
}
@@ -1069,7 +1069,7 @@
},
"error": {
"internalServerError": "DNS Çözümleyici Özeti alınamadı",
"integrationsDisconnected": "Veri yok, tüm entegrasyonların bağlantısı kesildi"
"integrationsDisconnected": "Veri Bulunamadı, Tüm Entegrasyonların Bağlantısı Kesildi"
},
"data": {
"adsBlockedToday": "Bugün engellenenler",
@@ -1110,7 +1110,7 @@
"set": "Ayarla",
"enabled": "Etkin",
"disabled": "Pasif",
"processing": "İşleniyor",
"processing": "İşlemde",
"disconnected": "Bağlantısı kesildi",
"hours": "Saat",
"minutes": "Dakika",
@@ -1185,7 +1185,7 @@
"decreaseIndent": "Girintiyi Azalt",
"link": "Bağlantı",
"unlink": "Bağlantıyı kaldır",
"image": "Resim Göm",
"image": "Görsel Göm",
"addTable": "Tablo ekle",
"deleteTable": "Tablo Sil",
"colorCell": "Renk Hücresi",
@@ -1213,7 +1213,7 @@
}
},
"iframe": {
"name": "",
"name": "iFrame",
"description": "İnternetten herhangi bir içeriği yerleştirin. Bazı web siteleri erişimi kısıtlayabilir.",
"option": {
"embedUrl": {
@@ -1295,10 +1295,10 @@
}
},
"filterPastMonths": {
"label": "Başla"
"label": "Başlangıç"
},
"filterFutureMonths": {
"label": "Bitir"
"label": "Bitiş"
}
}
},
@@ -1379,14 +1379,14 @@
"information": "Bilgi",
"processor": "İşlemci: {cpuModelName}",
"memory": "Bellek: {memory}GiB",
"memoryAvailable": "Mevcut: {memoryAvailable}GiB ({percent}%)",
"memoryAvailable": "Kullanılabilir: {memoryAvailable} GiB ({percent}%)",
"version": "Sürüm: {version}",
"uptime": "Çalışma Süresi: {days} Gün, {hours} Saat, {minutes} Dakika",
"loadAverage": "Ortalama yük:",
"minute": "1 dakika",
"minutes": "{count} dakika",
"used": "Kullanılan",
"available": "Mevcut",
"available": "Kullanılabilir",
"lastSeen": "Son durum güncellemesi: {lastSeen}"
},
"memory": {},
@@ -1419,11 +1419,11 @@
},
"integration": {
"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": {
"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": {
"noIntegration": "Hiçbir entegrasyon seçilmedi",
@@ -1503,7 +1503,7 @@
"columnTitle": "Kontroller"
},
"added": {
"columnTitle": "Eklendi",
"columnTitle": "Ekleme",
"detailsTitle": "Ekleme Tarihi"
},
"category": {
@@ -1515,7 +1515,7 @@
"detailsTitle": "İndirme Hızı"
},
"index": {
"columnTitle": "",
"columnTitle": "#",
"detailsTitle": "İstemci içindeki mevcut endeks"
},
"id": {
@@ -1532,7 +1532,7 @@
"detailsTitle": "İndirme İlerlemesi"
},
"ratio": {
"columnTitle": "",
"columnTitle": "Oran",
"detailsTitle": "Torrent oranı (alınan/gönderilen)"
},
"received": {
@@ -1570,7 +1570,7 @@
"paused": "Duraklatıldı",
"completed": "Tamamlanan",
"failed": "Başarısız",
"processing": "İşleniyor",
"processing": "İşlemde",
"leeching": "Leechleme",
"stalled": "Durduruldu",
"unknown": "Bilinmeyen",
@@ -1593,7 +1593,7 @@
"title": "Öğeyi Sil",
"modalTitle": "Bu işi silmek istediğinizden emin misiniz?",
"entry": "Girdiyi sil",
"entryAndFiles": "Girişi ve dosyayı sil"
"entryAndFiles": "Girdiyi ve dosyaları sil"
}
}
},
@@ -1615,7 +1615,7 @@
"availability": {
"unknown": "Bilinmeyen",
"pending": "Bekleyen",
"processing": "İşleniyor",
"processing": "İşlemde",
"partiallyAvailable": "Kısmi",
"available": "Mevcut"
},
@@ -1631,8 +1631,8 @@
"approved": "Onaylanan",
"pending": "Onay bekleyen",
"processing": "İşleniyor",
"declined": "Zaten reddedildi",
"available": "Zaten Mevcut",
"declined": "Reddedilen",
"available": "Mevcut",
"tv": "Dizi talepleri",
"movie": "Film talepleri",
"total": "Toplam"
@@ -1651,7 +1651,7 @@
"label": "Varsayılan görünüm"
},
"queuePageSize": {
"label": "Sıra sayfa boyutu"
"label": "Kuyruk Sayfa Boyutu"
}
},
"tab": {
@@ -1713,10 +1713,10 @@
"label": "RTL'yi etkinleştir"
},
"textLinesClamp": {
"label": "Açıklamalar satır sınırı"
"label": "Açıklamalarda satır sınırı"
},
"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ığı"
},
"logoImageUrl": {
"label": "Logo görseli URL'si"
"label": "Logo görsel URL'si"
},
"faviconImageUrl": {
"label": "Favicon görsel URL'si"
@@ -1822,10 +1822,10 @@
"label": "Arkaplan görsel URL'si"
},
"backgroundImageAttachment": {
"label": "Arkaplan resim ekle",
"label": "Arkaplan görsel yerleştirme",
"option": {
"fixed": {
"label": "Düzeltildi",
"label": "Sabit",
"description": "Arka plan aynı pozisyonda kalır."
},
"scroll": {
@@ -1839,11 +1839,11 @@
"option": {
"repeat": {
"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": {
"label": "Tekrarlama yok",
"description": "Resim tekrarlanmaz ve tüm alanı doldurmayabilir."
"label": "Tekrarlama Yok",
"description": "Görsel tekrarlanmaz ve tüm alanı doldurmayabilir."
},
"repeat-x": {
"label": "Y tekrarla",
@@ -1856,7 +1856,7 @@
}
},
"backgroundImageSize": {
"label": "Arkaplan resim boyutu",
"label": "Arkaplan görsel boyutu",
"option": {
"cover": {
"label": "Kapak",
@@ -1879,7 +1879,7 @@
},
"customCss": {
"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": {
"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."
@@ -1993,7 +1993,7 @@
"notice": "Bağlantıyı kontrol edin veya erişilebilir olması gerektiğini düşünüyorsanız bir yöneticiyle iletişime geçin"
},
"homeBoard": {
"title": "Ana panel yok",
"title": "Varsayılan Panel Yapılandırılmadı",
"admin": {
"description": "Sunucu için henüz bir ana sayfa paneli belirlemediniz.",
"link": "Sunucu geneli için ana panel yapılandırın",
@@ -2001,13 +2001,13 @@
},
"user": {
"description": "Henüz bir ev paneli belirlemediniz.",
"link": "Varsayılan paneli yapılandır",
"notice": "Bu sayfanın kaybolmasını sağlamak için tercihlerden varsayılan panel seçin"
"link": "Varsayılan Paneli Yapılandır",
"notice": "Bu Sayfanın Kaybolmasını Sağlamak İçin Tercihlerden Varsayılan Panel Atayın"
},
"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",
"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": {
"items": {
"home": "Ana sayfa",
"home": "Ana Sayfa",
"boards": "Paneller",
"apps": "Uygulamalar",
"integrations": "Entegrasyonlar",
"searchEngies": "Arama motorları",
"searchEngies": "Arama Motorları",
"medias": "Medyalar",
"users": {
"label": "Kullanıcılar",
@@ -2042,9 +2042,9 @@
"tools": {
"label": "Araçlar",
"items": {
"docker": "",
"docker": "Docker",
"logs": "Günlükler",
"api": "",
"api": "API",
"tasks": "Görevler"
}
},
@@ -2091,9 +2091,9 @@
"label": "Ayarlar"
},
"setHomeBoard": {
"label": "Varsayılan panel olarak ayarlayın",
"label": "Varsayılan Panel Olarak Ata",
"badge": {
"label": "Ana sayfa",
"label": "Ana Sayfa",
"tooltip": "Bu panel sizin varsayılan paneliniz olarak görüntülenecektir"
}
},
@@ -2120,7 +2120,7 @@
}
},
"media": {
"includeFromAllUsers": "Tüm kullanıcıların medyasına dahil edin"
"includeFromAllUsers": "Tüm kullanıcıların medyalarını dahil et"
},
"user": {
"back": "Kullanıcılara geri dön",
@@ -2130,7 +2130,7 @@
"title": "Genel",
"item": {
"language": "Dil & Bölge",
"board": "Varsayılan panel",
"board": "Varsayılan Panel",
"firstDayOfWeek": "Haftanın ilk günü",
"accessibility": "Erişilebilirlik"
}
@@ -2180,7 +2180,7 @@
}
},
"invite": {
"title": "Kullanıcı davetlerini yönet",
"title": "Kullanıcı Davetlerini Yönet",
"action": {
"new": {
"title": "Yeni davet",
@@ -2269,7 +2269,7 @@
"title": "Tarama ve Dizinleme",
"warning": "Burada herhangi bir ayarı etkinleştirmek veya devre dışı bırakmak, arama motorlarının sayfanızı nasıl dizine ekleyeceğini ve tarayacağını ciddi şekilde etkileyecektir. Herhangi bir ayar bir istektir ve bu ayarları uygulamak tarayıcıya bağlıdır. Herhangi bir değişikliğin uygulanması birkaç gün veya hafta sürebilir. Bazı ayarlar arama motoruna özgü olabilir.",
"noIndex": {
"title": "İndeks yok",
"title": "İndeks bulunamadı",
"text": "Web sitesini arama motorlarında indekslemeyin ve hiçbir arama sonucunda göstermeyin"
},
"noFollow": {
@@ -2281,14 +2281,14 @@
"text": "Site dilinin kullanıcının okumak isteyeceği bir dil olmaması durumunda Google, arama sonuçlarında bir çeviri bağlantısı gösterecektir"
},
"noSiteLinksSearchBox": {
"title": "Site bağlantıları arama kutusu yok",
"title": "Site bağlantıları arama kutusu yapılandırılmadı",
"text": "Google, taranan bağlantıların yanı sıra diğer doğrudan bağlantılarla bir arama kutusu oluşturacaktır. Bunu etkinleştirmek Google'dan bu kutuyu devre dışı bırakmasını isteyecektir."
}
},
"board": {
"title": "Paneller",
"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"
}
},
@@ -2370,7 +2370,7 @@
}
},
"api": {
"title": "",
"title": "API",
"modal": {
"createApiToken": {
"title": "API token'ı oluşturuldu",
@@ -2602,7 +2602,7 @@
"tools": {
"label": "Araçlar",
"docker": {
"label": ""
"label": "Docker"
},
"logs": {
"label": "Günlükler"
@@ -2617,7 +2617,7 @@
}
},
"search": {
"placeholder": "Aramak için yaz",
"placeholder": "Ara",
"nothingFound": "Hiçbir şey bulunamadı",
"error": {
"fetch": "Veriler alınırken bir hata oluştu"
@@ -2650,7 +2650,7 @@
"label": "Panel'i aç"
},
"homeBoard": {
"label": "Varsayılan panel olarak ayarla"
"label": "Varsayılan Panel Olarak Ata"
},
"settings": {
"label": "Ayarları aç"
@@ -2737,15 +2737,15 @@
},
"option": {
"google": {
"name": "",
"name": "Google",
"description": "Google ile web'de arama yapın"
},
"bing": {
"name": "",
"name": "Bing",
"description": "Bing ile web'de arama yapın"
},
"duckduckgo": {
"name": "",
"name": "DuckDuckGo",
"description": "DuckDuckGo ile web'de arama yapın"
},
"torrent": {
@@ -2753,7 +2753,7 @@
"description": "Torrentdownloads.pro'da torrentleri arayın"
},
"youTube": {
"name": "",
"name": "YouTube",
"description": "YouTube'da video arayın"
}
}
@@ -2795,7 +2795,7 @@
"title": "Sayfalar",
"option": {
"manageHome": {
"label": "Ana sayfayı yönet"
"label": "Ana Sayfayı Yönet"
},
"manageBoard": {
"label": "Panelleri yönet"
@@ -2825,7 +2825,7 @@
"label": "Docker'ı yönet"
},
"manageApi": {
"label": ""
"label": "Swagger API'si"
},
"manageLog": {
"label": "Günlükleri görüntüle"
@@ -2840,7 +2840,7 @@
"label": "Hakkında"
},
"homeBoard": {
"label": "Varsayılan panel"
"label": "Varsayılan Panel"
},
"preferences": {
"label": "Tercihleriniz"
@@ -2894,7 +2894,7 @@
"label": "İsim"
},
"short": {
"label": "Kısa"
"label": "Kısa Yol"
},
"urlTemplate": {
"label": "URL arama şablonu"
@@ -2905,9 +2905,9 @@
},
"page": {
"list": {
"title": "Arama motorları",
"title": "Arama Motorları",
"noResults": {
"title": "Henüz bir arama motoru yok",
"title": "Henüz bir arama motoru yapılandırılmadı",
"action": "İlk arama motorunuzu oluşturun"
},
"interactive": "Etkileşimli, entegrasyon kullanır"
+3 -3
View File
@@ -29,9 +29,9 @@
"@homarr/log": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^7.15.1",
"@mantine/dates": "^7.15.1",
"@mantine/hooks": "^7.15.1",
"@mantine/core": "^7.15.2",
"@mantine/dates": "^7.15.2",
"@mantine/hooks": "^7.15.2",
"@tabler/icons-react": "^3.26.0",
"mantine-react-table": "2.0.0-beta.7",
"next": "^14.2.21",
+2 -2
View File
@@ -41,8 +41,8 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^7.15.1",
"@mantine/hooks": "^7.15.1",
"@mantine/core": "^7.15.2",
"@mantine/hooks": "^7.15.2",
"@tabler/icons-react": "^3.26.0",
"@tiptap/extension-color": "2.10.4",
"@tiptap/extension-highlight": "2.10.4",
+20 -17
View File
@@ -7,7 +7,6 @@ import { IconLoader } from "@tabler/icons-react";
import combineClasses from "clsx";
import { clientApi } from "@homarr/api/client";
import { parseAppHrefWithVariablesClient } from "@homarr/common/client";
import { useRegisterSpotlightContextResults } from "@homarr/spotlight";
import { useI18n } from "@homarr/translation/client";
@@ -31,26 +30,30 @@ export default function AppWidget({ options, isEditMode }: WidgetComponentProps<
);
useRegisterSpotlightContextResults(
`app-${app.id}`,
[
{
id: app.id,
name: app.name,
icon: app.iconUrl,
interaction() {
return {
type: "link",
href: parseAppHrefWithVariablesClient(app.href ?? ""),
newTab: options.openInNewTab,
};
},
},
],
app.href
? [
{
id: app.id,
name: app.name,
icon: app.iconUrl,
interaction() {
return {
type: "link",
// 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],
);
return (
<AppLink
href={parseAppHrefWithVariablesClient(app.href ?? "")}
href={app.href ?? undefined}
openInNewTab={options.openInNewTab}
enabled={Boolean(app.href) && !isEditMode}
>
@@ -88,7 +91,7 @@ export default function AppWidget({ options, isEditMode }: WidgetComponentProps<
}
interface AppLinkProps {
href: string;
href: string | undefined;
openInNewTab: boolean;
enabled: boolean;
}
@@ -3,7 +3,6 @@ import { IconCheck, IconX } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client";
import { parseAppHrefWithVariablesClient } from "@homarr/common/client";
import { PingDot } from "./ping-dot";
@@ -14,7 +13,7 @@ interface PingIndicatorProps {
export const PingIndicator = ({ href }: PingIndicatorProps) => {
const [ping] = clientApi.widget.app.ping.useSuspenseQuery(
{
url: parseAppHrefWithVariablesClient(href),
url: href,
},
{
refetchOnMount: false,
@@ -25,7 +24,7 @@ export const PingIndicator = ({ href }: PingIndicatorProps) => {
const [pingResult, setPingResult] = useState<RouterOutputs["widget"]["app"]["ping"]>(ping);
clientApi.widget.app.updatedPing.useSubscription(
{ url: parseAppHrefWithVariablesClient(href) },
{ url: href },
{
onData(data) {
setPingResult(data);
+16 -13
View File
@@ -4,7 +4,6 @@ import { Anchor, Box, Card, Divider, Flex, Group, Stack, Text, Title, UnstyledBu
import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client";
import { parseAppHrefWithVariablesClient } from "@homarr/common/client";
import { useRegisterSpotlightContextResults } from "@homarr/spotlight";
import type { WidgetComponentProps } from "../definition";
@@ -19,18 +18,22 @@ export default function BookmarksWidget({ options, width, height, itemId }: Widg
useRegisterSpotlightContextResults(
`bookmark-${itemId}`,
data.map((app) => ({
id: app.id,
name: app.name,
icon: app.iconUrl,
interaction() {
return {
type: "link",
href: parseAppHrefWithVariablesClient(app.href ?? ""),
newTab: false,
};
},
})),
data
.filter((app) => app.href !== null)
.map((app) => ({
id: app.id,
name: app.name,
icon: app.iconUrl,
interaction() {
return {
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],
);
+968 -337
View File
File diff suppressed because it is too large. Load diff
+2 -2
View File
@@ -22,9 +22,9 @@
"eslint-config-turbo": "^2.3.3",
"eslint-plugin-import": "^2.31.0",
"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",
"typescript-eslint": "^8.18.1"
"typescript-eslint": "^8.18.2"
},
"devDependencies": {
"@homarr/prettier-config": "workspace:^0.1.0",