Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81db5f9708 |
@@ -1,10 +0,0 @@
|
||||
version = 1
|
||||
|
||||
[[analyzers]]
|
||||
name = "javascript"
|
||||
|
||||
[analyzers.meta]
|
||||
plugins = ["react"]
|
||||
|
||||
[[transformers]]
|
||||
name = "prettier"
|
||||
8
.editorconfig
Normal file
@@ -0,0 +1,8 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
2
.eslintignore
Normal file
@@ -0,0 +1,2 @@
|
||||
*.js
|
||||
nodes_modules/
|
||||
32
.eslintrc.js
Normal file
@@ -0,0 +1,32 @@
|
||||
module.exports = {
|
||||
extends: [
|
||||
'mantine',
|
||||
'plugin:@next/next/recommended',
|
||||
'plugin:jest/recommended',
|
||||
'eslint:recommended',
|
||||
'plugin:@typescript-eslint/eslint-recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
],
|
||||
plugins: ['testing-library', 'jest', 'react-hooks', 'react', 'unused-imports'],
|
||||
overrides: [
|
||||
{
|
||||
files: ['**/?(*.)+(spec|test).[jt]s?(x)'],
|
||||
extends: ['plugin:testing-library/react'],
|
||||
},
|
||||
],
|
||||
parserOptions: {
|
||||
project: './tsconfig.json',
|
||||
},
|
||||
rules: {
|
||||
'react/react-in-jsx-scope': 'off',
|
||||
'react/no-children-prop': 'off',
|
||||
'unused-imports/no-unused-imports': 'warn',
|
||||
'@typescript-eslint/no-unused-vars': 'off',
|
||||
'@typescript-eslint/no-unused-imports': 'off',
|
||||
'@typescript-eslint/no-unused-expressions': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/no-shadow': 'off',
|
||||
'@typescript-eslint/no-use-before-define': 'off',
|
||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||
},
|
||||
};
|
||||
19
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -32,15 +32,8 @@ body:
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Logs
|
||||
description: Provide your Homarr logs so we can investigate what's going on
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: context
|
||||
attributes:
|
||||
label: Context
|
||||
description: Screenshots? More info?
|
||||
label: Additional info
|
||||
description: Logs? Screenshots? More info?
|
||||
validations:
|
||||
required: false
|
||||
- type: checkboxes
|
||||
@@ -49,11 +42,9 @@ body:
|
||||
label: Please tick the boxes
|
||||
description: Before submitting, please ensure that
|
||||
options:
|
||||
- label: I confirm that I attached the proper logs
|
||||
- label: You've read the [docs](https://github.com/ajnart/homarr#readme)
|
||||
required: true
|
||||
- label: I've read the [docs](https://github.com/ajnart/homarr#readme)
|
||||
- label: You've checked for [duplicate issues](https://github.com/ajnart/homarr/issues)
|
||||
required: true
|
||||
- label: I've checked for [duplicate issues](https://github.com/ajnart/homarr/issues)
|
||||
required: true
|
||||
- label: I've tried to debug myself
|
||||
- label: You've tried to debug yourself
|
||||
required: true
|
||||
|
||||
7
.github/workflows/docker.yml
vendored
@@ -19,9 +19,6 @@ env:
|
||||
REGISTRY: ghcr.io
|
||||
# github.repository as <account>/<repo>
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
||||
|
||||
|
||||
jobs:
|
||||
# Push image to GitHub Packages.
|
||||
@@ -52,7 +49,7 @@ jobs:
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Restore NextJS cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
# See here for caching with `yarn` https://github.com/actions/cache/blob/main/examples.md#node---yarn or you can leverage caching with actions/setup-node https://github.com/actions/setup-node
|
||||
path: |
|
||||
@@ -92,7 +89,7 @@ jobs:
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
context: .
|
||||
|
||||
43
.github/workflows/docker_dev.yml
vendored
@@ -1,5 +1,8 @@
|
||||
name: Development CI
|
||||
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
on:
|
||||
push:
|
||||
branches: [dev]
|
||||
@@ -16,27 +19,16 @@ on:
|
||||
required: true
|
||||
description: 'Tag to deploy to'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./
|
||||
|
||||
env:
|
||||
# Use docker.io for Docker Hub if empty
|
||||
REGISTRY: ghcr.io
|
||||
# github.repository as <account>/<repo>
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
||||
|
||||
permissions:
|
||||
contents: read # for checkout repository
|
||||
actions: read # for fetching base branch bundle stats
|
||||
pull-requests: write # for comments
|
||||
|
||||
jobs:
|
||||
# Push image to GitHub Packages.
|
||||
# See also https://docs.docker.com/docker-hub/builds/
|
||||
yarn_install_and_build_dev:
|
||||
yarn_install_and_build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
packages: write
|
||||
@@ -61,20 +53,21 @@ jobs:
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Restore next build
|
||||
uses: actions/cache@v3
|
||||
id: restore-build-cache
|
||||
env:
|
||||
cache-name: cache-next-build
|
||||
- name: Restore NextJS cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: .next/cache
|
||||
key: ${{ runner.os }}-build-${{ env.cache-name }}
|
||||
# See here for caching with `yarn` https://github.com/actions/cache/blob/main/examples.md#node---yarn or you can leverage caching with actions/setup-node https://github.com/actions/setup-node
|
||||
path: |
|
||||
${{ github.workspace }}/.next/cache
|
||||
# Generate a new cache whenever packages or source files change.
|
||||
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
|
||||
# If source files changed but packages didn't, rebuild from a prior cache.
|
||||
restore-keys: |
|
||||
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
|
||||
|
||||
- run: yarn install --immutable
|
||||
|
||||
- run: yarn turbo build
|
||||
|
||||
- run: yarn test:run
|
||||
- run: yarn build
|
||||
|
||||
- name: Docker meta
|
||||
if: github.event_name != 'pull_request'
|
||||
@@ -86,7 +79,7 @@ jobs:
|
||||
# generate Docker tags based on the following events/attributes
|
||||
tags: |
|
||||
type=ref,event=pr
|
||||
type=raw,value=${{ github.event.inputs.tag }},enable=${{ github.event.inputs.tag != '' }}
|
||||
type=raw,value=${{ github.event.inputs.tag }}, prefix=test-,enable=${{ github.event.inputs.tag != '' }}
|
||||
tpye=raw,value=dev,priority=1,enable=${{ github.event.inputs.tag == '' }}
|
||||
|
||||
- name: Set up QEMU
|
||||
@@ -105,7 +98,7 @@ jobs:
|
||||
|
||||
- name: Build and push
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
context: .
|
||||
|
||||
11
.gitignore
vendored
@@ -25,7 +25,6 @@ yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# local env files
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
@@ -33,7 +32,6 @@ yarn-error.log*
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
.turbo
|
||||
*.tsbuildinfo
|
||||
|
||||
# storybook
|
||||
@@ -48,11 +46,4 @@ data/configs
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
|
||||
#envfiles
|
||||
.env
|
||||
|
||||
#Languages other than 'en'
|
||||
public/locales/*
|
||||
!public/locales/en
|
||||
!.yarn/versions
|
||||
9
.prettierrc
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"printWidth": 100,
|
||||
"tabWidth": 2,
|
||||
"parser": "typescript",
|
||||
"singleQuote": true,
|
||||
"trailingComma": "es5",
|
||||
"useTabs": false,
|
||||
"endOfLine": "lf"
|
||||
}
|
||||
786
.yarn/releases/yarn-3.2.1.cjs
vendored
Normal file
874
.yarn/releases/yarn-3.6.0.cjs
vendored
5
.yarnrc
Normal file
@@ -0,0 +1,5 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
yarn-path ".yarn/releases/yarn-1.22.19.cjs"
|
||||
@@ -1,3 +1,3 @@
|
||||
nodeLinker: node-modules
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.6.0.cjs
|
||||
yarnPath: .yarn/releases/yarn-3.2.1.cjs
|
||||
|
||||
@@ -104,11 +104,3 @@ Enhancement suggestions are tracked as [GitHub issues](https://github.com/ajnart
|
||||
Homarr uses [GitMoji](https://gitmoji.dev/).
|
||||
We would appreciate it if everyone keeps their commit messages withing these rulings.
|
||||
|
||||
### Tests
|
||||
|
||||
> Components should be tested using unit tests. A unit is the smallest isolated part of the component. Unit tests must not have any dependencies and must be isolated.
|
||||
|
||||
- Place testfiles directly at the root of the unit
|
||||
- Only test a single unit of work inside a unit test
|
||||
- You may test multiple units inside one test file
|
||||
- Testnames do not begin with ``should`` or the unit name
|
||||
@@ -1,15 +1,15 @@
|
||||
FROM node:20-alpine
|
||||
FROM node:16-alpine
|
||||
WORKDIR /app
|
||||
|
||||
ENV NEXT_TELEMETRY_DISABLED 1
|
||||
|
||||
ENV NODE_ENV production
|
||||
ENV NODE_OPTIONS '--no-experimental-fetch'
|
||||
|
||||
COPY next.config.js ./
|
||||
COPY public ./public
|
||||
COPY package.json ./package.json
|
||||
|
||||
# Automatically leverage output traces to reduce image size
|
||||
# Automatically leverage output traces to reduce image size
|
||||
# https://nextjs.org/docs/advanced-features/output-file-tracing
|
||||
COPY .next/standalone ./
|
||||
COPY .next/static ./.next/static
|
||||
|
||||
238
README.md
@@ -1,125 +1,203 @@
|
||||
|
||||
<!-- Project Title -->
|
||||

|
||||
<h1 align="center">Homarr</h1>
|
||||
|
||||
<!-- Badges -->
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/github/stars/ajnart/homarr?label=%E2%AD%90%20Stars&style=flat-square?branch=master&kill_cache=1%22">
|
||||
<a href="https://github.com/ajnart/homarr/releases/latest">
|
||||
<img alt="Latest Release (Semver)" src="https://img.shields.io/github/v/release/ajnart/homarr?label=%F0%9F%9A%80%20Release">
|
||||
<img alt="Latest Release (Semver)" src="https://img.shields.io/github/v/release/ajnart/homarr?label=%F0%9F%9A%80%20Release">
|
||||
</a>
|
||||
<a href="https://github.com/ajnart/homarr/actions/workflows/docker.yml">
|
||||
<img title="Docker CI Status" src="https://github.com/ajnart/homarr/actions/workflows/docker.yml/badge.svg" alt="CI Status">
|
||||
<img title="Docker CI Status" src="https://github.com/ajnart/homarr/actions/workflows/docker.yml/badge.svg" alt="CI Status">
|
||||
</a>
|
||||
<a href=https://crowdin.com/project/homarr>
|
||||
<img title="Translations" src="https://badges.crowdin.net/homarr/localized.svg" />
|
||||
</a>
|
||||
<a href="https://discord.gg/aCsmEV5RgA">
|
||||
<img title="Discord" src="https://discordapp.com/api/guilds/972958686051962910/widget.png?style=shield">
|
||||
<img title="Discord" src="https://discordapp.com/api/guilds/972958686051962910/widget.png?style=shield">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<!-- Links -->
|
||||
<p align="center">
|
||||
<a href="https://demo.homarr.dev/">
|
||||
<strong>Demo ✨</strong>
|
||||
</a>
|
||||
•
|
||||
<a href="https://homarr.dev/docs/introduction/installation">
|
||||
<strong>Install 💻</strong>
|
||||
</a> •
|
||||
<a href="https://crowdin.com/project/homarr">
|
||||
<strong>Translations 🈺</strong>
|
||||
</a> •
|
||||
<a href="https://discord.com/invite/aCsmEV5RgA">
|
||||
<strong>Discord 👋</strong>
|
||||
</a>
|
||||
<i>Join the discord! — Don't forget to star the repo if you are enjoying the project!</i>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://homarr.ajnart.fr/"><strong> Demo ↗️ </strong></a> • <a href="https://homarr.vercel.app/docs/introduction/installation"><strong> Install ➡️ </strong></a> • <a href="https://homarr.vercel.app/docs/about"><strong> Read the Docs 📄 </strong></a>
|
||||
</p>
|
||||
|
||||
Simplify the management of your server with Homarr - a sleek, modern dashboard that puts all of your apps and services at your fingertips. With Homarr, you can access and control everything in one convenient location. Homarr seamlessly integrates with the apps you've added, providing you with valuable information and giving you complete control. Installation is a breeze, and Homarr supports a wide range of deployment methods.
|
||||
---
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<!-- Homarr Description -->
|
||||
<img align="right" width=150 src="public/imgs/logo/logo-color.svg" />
|
||||
|
||||

|
||||
Homarr is a simple and lightweight homepage for your server, that helps you easily access all of your services in one place.
|
||||
|
||||
- 🖌️ Highly customizable with an extensive drag and drop grid system
|
||||
- ✨ Integrates seamlessly with your favorite self-hosted applications
|
||||
- 📌 Easy and fast app management - no YAML involved
|
||||
- 🙊 Advanced secrets' management system for enhanced security
|
||||
- 📄 Detailed documentation and active community
|
||||
- 🔍 Search through the web or supported integrations in an instant
|
||||
- 🏴 Monitor your application with a built-in status system
|
||||
- 🦞 Comprehensive built-in icon picker with over 7000 icons
|
||||
- 🐳 Easy deployment with Docker, unRAID, and Synology
|
||||
- 🚀 Compatible with any major consumer hardware (x86, Raspberry Pi, old laptops, ...)
|
||||
- 💵 Free and Open-Source - your data stays on your device. No telemetry data.
|
||||
It integrates with the services you use to display information on the homepage (E.g. Show upcoming Sonarr/Radarr releases).
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
For a full list of integrations, [head over to our documentation](https://homarr.vercel.app/docs/advanced-configuration/integrations).
|
||||
|
||||

|
||||
If you have any questions about Homarr or want to share information with us, please go to one of the following places:
|
||||
|
||||
Homarr has a [built-in collection of widgets and integrations](https://homarr.dev/docs/integrations/), that connect to your applications and enable you to control them directly from the dashboard.
|
||||
Each widget and integration has a comprehensive documentation for your comfort.
|
||||
Homarr will integrate with the following applications of yours:
|
||||
- [Github Discussions](https://github.com/ajnart/homarr/discussions)
|
||||
- [Discord Server](https://discord.gg/aCsmEV5RgA)
|
||||
|
||||
- 📥 Torrent clients
|
||||
- [Deluge](https://homarr.dev/docs/integrations/#deluge)
|
||||
- [Transmission](https://homarr.dev/docs/integrations/#transmission)
|
||||
- [qBittorent](https://homarr.dev/docs/integrations/#qbittorrent-integration)
|
||||
- 📥 Usenet clients
|
||||
- [SABnzbd](https://homarr.dev/docs/integrations/#sabnzbd)
|
||||
- [NZBGet](https://homarr.dev/docs/integrations/#nzbget)
|
||||
- 📚 Media collection managers
|
||||
- [Sonarr](https://homarr.dev/docs/integrations/#sonarr)
|
||||
- [Radarr](https://homarr.dev/docs/integrations/#radarr)
|
||||
- [Lidarr](https://homarr.dev/docs/integrations/#lidarr)
|
||||
- [Readarr](https://homarr.dev/docs/integrations/#readarr)
|
||||
- 🎞️ Media request managers
|
||||
- [Overseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr)
|
||||
- [Jellyseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr)
|
||||
- 🔌 [Dash.](https://homarr.dev/docs/integrations/#dash)
|
||||
- 🐳 [Docker](https://homarr.dev/docs/integrations/#docker)
|
||||
*Before you file an [issue](https://github.com/ajnart/homarr/issues/new/choose), make sure you have read the [known issues](#-known-issues) section.*
|
||||
|
||||
We're constantly adding new integrations and widgets, which will enhance your experience even further.
|
||||
**For more information, [read the documentation!](https://homarr.vercel.app/docs/about)**
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<details>
|
||||
<summary><b>Table of Contents</b></summary>
|
||||
<p>
|
||||
|
||||

|
||||
- [✨ Features](#-features)
|
||||
- [👀 Preview](#-preview)
|
||||
- [💥 Known Issues](#-known-issues)
|
||||
- [🚀 Installation](#-installation)
|
||||
- [🐳 Deploying from Docker Image](#-deploying-from-docker-image)
|
||||
- [🛠️ Building from Source](#️-building-from-source)
|
||||
- [💖 Contributing](#-contributing)
|
||||
- [📜 License](#-license)
|
||||
|
||||
https://user-images.githubusercontent.com/30572287/217098893-5880e7de-13d0-42c5-b505-f7921593396f.mp4
|
||||
</p>
|
||||
</details>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
---
|
||||
|
||||

|
||||
## ✨ Features
|
||||
- Integrates with services you use.
|
||||
- Search the web directly from your homepage.
|
||||
- Real-time status indicator for every service.
|
||||
- Automatically finds icons while you type the name of a service.
|
||||
- Widgets that can display all types of information.
|
||||
- Easy deployment with Docker.
|
||||
- Very light-weight and fast.
|
||||
- Free and Open-Source.
|
||||
- And more...
|
||||
|
||||
Since we are updating Homarr very frequently, we recommend reading our official installation guides:
|
||||
**[⤴️ Back to Top](#homarr)**
|
||||
|
||||
<a href="https://homarr.dev/docs/introduction/installation">
|
||||
<img src="docs/installation-button.png" width="200" />
|
||||
</a>
|
||||
---
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
## 👀 Preview
|
||||
<img alt="Homarr Preview" align="center" width="100%" src="https://user-images.githubusercontent.com/71191962/169860380-856634fb-4f41-47cb-ba54-6a9e7b3b9c81.gif" />
|
||||
|
||||

|
||||
Homarr is maintained by motivated developers in their free-time.
|
||||
We work for fun and learning on this project.
|
||||
**[⤴️ Back to Top](#homarr)**
|
||||
|
||||
Hence, we're glad for all the help and support we can get.
|
||||
Although a donation is appreciated, there are other ways you can support us.
|
||||
---
|
||||
|
||||
<a href="https://ko-fi.com/ajnart">
|
||||
<img src="https://cdn.ko-fi.com/cdn/kofi3.png?v=3" width="200" />
|
||||
</a>
|
||||
## 💥 Known Issues
|
||||
- Posters on the Calendar get blocked by adblockers. (IMDb posters)
|
||||
|
||||
You can also support us by helping with [translating the entire project](https://homarr.dev/docs/community/translations) to as many language as possible or contributing directly to the code or documentation.
|
||||
**[⤴️ Back to Top](#homarr)**
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Installation
|
||||
### 🐳 Deploying from Docker Image
|
||||
> Supported architectures: x86-64, ARM, ARM64
|
||||
|
||||
_Requirements_:
|
||||
- [Docker](https://docs.docker.com/get-docker/)
|
||||
|
||||
**Standard Docker Install**
|
||||
```bash
|
||||
docker run \
|
||||
--name homarr \
|
||||
--restart unless-stopped \
|
||||
-p 7575:7575 \
|
||||
-v ./homarr/configs:/app/data/configs \
|
||||
-v ./homarr/icons:/app/public/icons \
|
||||
-d ghcr.io/ajnart/homarr:latest
|
||||
```
|
||||
|
||||
**Docker Compose**
|
||||
```yml
|
||||
version: '3'
|
||||
#---------------------------------------------------------------------#
|
||||
# Homarr - A homepage for your server. #
|
||||
#---------------------------------------------------------------------#
|
||||
services:
|
||||
homarr:
|
||||
container_name: homarr
|
||||
image: ghcr.io/ajnart/homarr:latest
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./homarr/configs:/app/data/configs
|
||||
- ./homarr/icons:/app/public/icons
|
||||
ports:
|
||||
- '7575:7575'
|
||||
```
|
||||
|
||||
```sh
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
*Getting EACCESS errors in the logs? Try running `sudo chmod 777 /directory-you-mounted-to`!*
|
||||
|
||||
**[⤴️ Back to Top](#homarr)**
|
||||
|
||||
### 🛠️ Building from Source
|
||||
|
||||
_Requirements_:
|
||||
- [Git](https://git-scm.com/downloads)
|
||||
- [NodeJS](https://nodejs.org/en/) _(Latest or LTS)_
|
||||
- [Yarn](https://yarnpkg.com/)
|
||||
|
||||
**Installing**
|
||||
|
||||
- Clone the GitHub repo: `git clone https://github.com/ajnart/homarr.git` & `cd homarr`
|
||||
- Install all dependencies: `yarn install`
|
||||
- Build the source: `yarn build`
|
||||
- Start the NextJS web server: ``yarn start``
|
||||
- *Note: If you want to update the code in real time, launch with ``yarn dev``*
|
||||
|
||||
**[⤴️ Back to Top](#homarr)**
|
||||
|
||||
---
|
||||
|
||||
## 💖 Contributing
|
||||
**Please read our [Contribution Guidelines](/CONTRIBUTING.md)**
|
||||
|
||||
All contributions, regardless of their size or scope, are welcome and highly appreciated! Thank you ❤️
|
||||
All contributions are highly appreciated.
|
||||
|
||||

|
||||
**[⤴️ Back to Top](#homarr)**
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 📜 License
|
||||
Homarr is Licensed under [MIT](https://en.wikipedia.org/wiki/MIT_License)
|
||||
|
||||
```txt
|
||||
Copyright © 2022 Thomas "ajnart" Camlong
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
```
|
||||
|
||||
**[⤴️ Back to Top](#homarr)**
|
||||
|
||||
---
|
||||
|
||||
<p align="center">
|
||||
<i>Thank you for visiting! <b>For more information <a href="https://homarr.vercel.app/docs/about">read the documentation!</a></b></i>
|
||||
<br/>
|
||||
<br/>
|
||||
</p>
|
||||
|
||||
18
SECURITY.md
@@ -1,18 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
Only the following versions will receive updates, that include improvements to the security:
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 0.13 | :white_check_mark: |
|
||||
| <=0.12 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
We take security issues very seriously.
|
||||
When you found a security issue, please ask yourself the following question:
|
||||
|
||||
**Would this be publicly disclosed, could it cause any problems or harm to any Homarr instances or individuals?**
|
||||
|
||||
If the answer to that question is yes, please contact us immideatly using [this link](https://homarr.dev/docs/community/get-in-touch). E-Mail is preferred, but you can write ``manicraft1001`` or ``ajnart`` on Discord as well.
|
||||
If the answer is no, please create a public visible issue: [Vulnerability](https://github.com/ajnart/homarr/issues/new?assignees=&labels=%F0%9F%90%9B+Bug&projects=&template=bug.yml&title=)
|
||||
@@ -1,510 +1,20 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"configProperties": {
|
||||
"name": "default"
|
||||
},
|
||||
"categories": [],
|
||||
"wrappers": [
|
||||
"name": "default",
|
||||
"services": [
|
||||
{
|
||||
"id": "default",
|
||||
"position": 0
|
||||
}
|
||||
],
|
||||
"apps": [
|
||||
{
|
||||
"id": "5df743d9-5cb1-457c-85d2-64ff86855652",
|
||||
"name": "Documentation",
|
||||
"url": "https://homarr.dev",
|
||||
"behaviour": {
|
||||
"onClickUrl": "https://homarr.dev",
|
||||
"externalUrl": "https://homarr.dev",
|
||||
"isOpeningNewTab": true
|
||||
},
|
||||
"network": {
|
||||
"enabledStatusChecker": false,
|
||||
"statusCodes": [
|
||||
"200"
|
||||
]
|
||||
},
|
||||
"appearance": {
|
||||
"iconUrl": "/imgs/logo/logo.png",
|
||||
"appNameStatus": "normal",
|
||||
"positionAppName": "column",
|
||||
"lineClampAppName": 1
|
||||
},
|
||||
"integration": {
|
||||
"type": null,
|
||||
"properties": []
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
"properties": {
|
||||
"id": "default"
|
||||
}
|
||||
},
|
||||
"shape": {
|
||||
"md": {
|
||||
"location": {
|
||||
"x": 5,
|
||||
"y": 1
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"sm": {
|
||||
"location": {
|
||||
"x": 0,
|
||||
"y": 1
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 2
|
||||
}
|
||||
},
|
||||
"lg": {
|
||||
"location": {
|
||||
"x": 6,
|
||||
"y": 1
|
||||
},
|
||||
"size": {
|
||||
"width": 2,
|
||||
"height": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a337",
|
||||
"name": "Discord",
|
||||
"url": "https://discord.com/invite/aCsmEV5RgA",
|
||||
"behaviour": {
|
||||
"onClickUrl": "https://discord.com/invite/aCsmEV5RgA",
|
||||
"isOpeningNewTab": true,
|
||||
"externalUrl": "https://discord.com/invite/aCsmEV5RgA",
|
||||
"tooltipDescription": "Join our Discord server! We're waiting for your ideas and feedback. "
|
||||
},
|
||||
"network": {
|
||||
"enabledStatusChecker": false,
|
||||
"statusCodes": [
|
||||
"200"
|
||||
]
|
||||
},
|
||||
"appearance": {
|
||||
"iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/discord.png",
|
||||
"appNameStatus": "normal",
|
||||
"positionAppName": "row-reverse",
|
||||
"lineClampAppName": 1
|
||||
},
|
||||
"integration": {
|
||||
"type": null,
|
||||
"properties": []
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
"properties": {
|
||||
"id": "default"
|
||||
}
|
||||
},
|
||||
"shape": {
|
||||
"md": {
|
||||
"location": {
|
||||
"x": 3,
|
||||
"y": 1
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"sm": {
|
||||
"location": {
|
||||
"x": 1,
|
||||
"y": 4
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"lg": {
|
||||
"location": {
|
||||
"x": 4,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 2,
|
||||
"height": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a330",
|
||||
"name": "Contribute",
|
||||
"url": "https://github.com/ajnart/homarr",
|
||||
"behaviour": {
|
||||
"onClickUrl": "https://github.com/ajnart/homarr",
|
||||
"externalUrl": "https://github.com/ajnart/homarr",
|
||||
"isOpeningNewTab": true,
|
||||
"tooltipDescription": ""
|
||||
},
|
||||
"network": {
|
||||
"enabledStatusChecker": false,
|
||||
"statusCodes": []
|
||||
},
|
||||
"appearance": {
|
||||
"iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/github.png",
|
||||
"appNameStatus": "normal",
|
||||
"positionAppName": "row-reverse",
|
||||
"lineClampAppName": 2
|
||||
},
|
||||
"integration": {
|
||||
"type": null,
|
||||
"properties": []
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
"properties": {
|
||||
"id": "default"
|
||||
}
|
||||
},
|
||||
"shape": {
|
||||
"md": {
|
||||
"location": {
|
||||
"x": 3,
|
||||
"y": 2
|
||||
},
|
||||
"size": {
|
||||
"width": 2,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"sm": {
|
||||
"location": {
|
||||
"x": 1,
|
||||
"y": 3
|
||||
},
|
||||
"size": {
|
||||
"width": 2,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"lg": {
|
||||
"location": {
|
||||
"x": 2,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 2,
|
||||
"height": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a990",
|
||||
"name": "Donate",
|
||||
"url": "https://ko-fi.com/ajnart",
|
||||
"behaviour": {
|
||||
"onClickUrl": "https://ko-fi.com/ajnart",
|
||||
"externalUrl": "https://ko-fi.com/ajnart",
|
||||
"isOpeningNewTab": true,
|
||||
"tooltipDescription": "Please consider making a donation"
|
||||
},
|
||||
"network": {
|
||||
"enabledStatusChecker": false,
|
||||
"statusCodes": [
|
||||
"200"
|
||||
]
|
||||
},
|
||||
"appearance": {
|
||||
"iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/ko-fi.png",
|
||||
"appNameStatus": "normal",
|
||||
"positionAppName": "row-reverse",
|
||||
"lineClampAppName": 1
|
||||
},
|
||||
"integration": {
|
||||
"type": null,
|
||||
"properties": []
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
"properties": {
|
||||
"id": "default"
|
||||
}
|
||||
},
|
||||
"shape": {
|
||||
"md": {
|
||||
"location": {
|
||||
"x": 4,
|
||||
"y": 1
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"sm": {
|
||||
"location": {
|
||||
"x": 2,
|
||||
"y": 4
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"lg": {
|
||||
"location": {
|
||||
"x": 6,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 2,
|
||||
"height": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"widgets": [
|
||||
{
|
||||
"id": "86b1921f-efa7-410f-92dd-79553bf3264d",
|
||||
"type": "notebook",
|
||||
"properties": {
|
||||
"showToolbar": true,
|
||||
"content": "<h2><strong>Homarr's</strong> notebook</h2><p>Use it as your Todo list, ideas to think about, as a \"getting-started\" guide for your users or even as your secret journal to confess your crushes, it stays private our your <strong>Homarr</strong> instance.</p><p>The <code>notebook</code> widget focuses on usability and is designed to be as simple as possible to bring a familiar editing experience to regular users. It is based on <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://tiptap.dev/\">Tiptap.dev</a> and supports all of its features:</p><ul><li><p>General text formatting: <strong>bold</strong>, <em>italic</em>, underline, <s>strike-through</s></p></li><li><p>Headings (h1-h6)</p></li><li><p>Sub and super scripts (<sup /> and <sub /> tags)</p></li><li><p>Ordered and bullet lists</p></li><li><p>Text align</p></li></ul>"
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
"properties": {
|
||||
"id": "default"
|
||||
}
|
||||
},
|
||||
"shape": {
|
||||
"sm": {
|
||||
"location": {
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 3,
|
||||
"height": 2
|
||||
}
|
||||
},
|
||||
"md": {
|
||||
"location": {
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 3,
|
||||
"height": 4
|
||||
}
|
||||
},
|
||||
"lg": {
|
||||
"location": {
|
||||
"x": 0,
|
||||
"y": 1
|
||||
},
|
||||
"size": {
|
||||
"width": 6,
|
||||
"height": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "e3004052-6b83-480e-b458-56e8ccdca5f0",
|
||||
"type": "weather",
|
||||
"properties": {
|
||||
"displayInFahrenheit": false,
|
||||
"location": {
|
||||
"name": "Paris",
|
||||
"latitude": 48.85341,
|
||||
"longitude": 2.3488
|
||||
},
|
||||
"displayCityName": true
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
"properties": {
|
||||
"id": "default"
|
||||
}
|
||||
},
|
||||
"shape": {
|
||||
"md": {
|
||||
"location": {
|
||||
"x": 5,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"sm": {
|
||||
"location": {
|
||||
"x": 2,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"lg": {
|
||||
"location": {
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 2,
|
||||
"height": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "971aa859-8570-49a1-8d34-dd5c7b3638d1",
|
||||
"type": "date",
|
||||
"properties": {
|
||||
"display24HourFormat": true,
|
||||
"dateFormat": "hide",
|
||||
"enableTimezone": false,
|
||||
"timezoneLocation": {
|
||||
"name": "Paris",
|
||||
"latitude": 48.85341,
|
||||
"longitude": 2.3488
|
||||
},
|
||||
"titleState": "city"
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
"properties": {
|
||||
"id": "default"
|
||||
}
|
||||
},
|
||||
"shape": {
|
||||
"sm": {
|
||||
"location": {
|
||||
"x": 1,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"md": {
|
||||
"location": {
|
||||
"x": 4,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"lg": {
|
||||
"location": {
|
||||
"x": 8,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 2,
|
||||
"height": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f252768d-9e69-491b-b6b4-8cad04fa30e8",
|
||||
"type": "date",
|
||||
"properties": {
|
||||
"display24HourFormat": true,
|
||||
"dateFormat": "hide",
|
||||
"enableTimezone": true,
|
||||
"timezoneLocation": {
|
||||
"name": "Tokyo",
|
||||
"latitude": 35.6895,
|
||||
"longitude": 139.69171
|
||||
},
|
||||
"titleState": "city"
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
"properties": {
|
||||
"id": "default"
|
||||
}
|
||||
},
|
||||
"shape": {
|
||||
"sm": {
|
||||
"location": {
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"md": {
|
||||
"location": {
|
||||
"x": 3,
|
||||
"y": 0
|
||||
},
|
||||
"size": {
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
},
|
||||
"lg": {
|
||||
"location": {
|
||||
"x": 8,
|
||||
"y": 1
|
||||
},
|
||||
"size": {
|
||||
"width": 2,
|
||||
"height": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
"name": "example",
|
||||
"id": "09c45847-8afc-4c1a-9697-f03192de948a",
|
||||
"type": "Other",
|
||||
"icon": "https://c.tenor.com/o656qFKDzeUAAAAC/rick-astley-never-gonna-give-you-up.gif",
|
||||
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"common": {
|
||||
"searchEngine": {
|
||||
"type": "google",
|
||||
"properties": {}
|
||||
}
|
||||
},
|
||||
"customization": {
|
||||
"layout": {
|
||||
"enabledLeftSidebar": false,
|
||||
"enabledRightSidebar": false,
|
||||
"enabledDocker": false,
|
||||
"enabledPing": false,
|
||||
"enabledSearchbar": true
|
||||
},
|
||||
"pageTitle": "Homarr ⭐️",
|
||||
"logoImageUrl": "/imgs/logo/logo.png",
|
||||
"faviconUrl": "/imgs/favicon/favicon-squared.png",
|
||||
"backgroundImageUrl": "",
|
||||
"customCss": "",
|
||||
"colors": {
|
||||
"primary": "red",
|
||||
"secondary": "yellow",
|
||||
"shade": 7
|
||||
},
|
||||
"appOpacity": 100,
|
||||
"gridstack": {
|
||||
"columnCountSmall": 3,
|
||||
"columnCountMedium": 6,
|
||||
"columnCountLarge": 10
|
||||
}
|
||||
"searchUrl": "https://google.com/search?q="
|
||||
},
|
||||
"modules": {
|
||||
"Search Bar": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +1,2 @@
|
||||
export const REPO_URL = 'ajnart/homarr';
|
||||
export const ICON_PICKER_SLICE_LIMIT = 36;
|
||||
export const CURRENT_VERSION = 'v0.10.6';
|
||||
|
||||
BIN
docs/banner.png
|
Before Width: | Height: | Size: 48 KiB |
BIN
docs/banner.xcf
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 33 KiB |
1
next-env.d.ts
vendored
@@ -1,6 +1,5 @@
|
||||
/// <reference types="next" />
|
||||
/// <reference types="next/image-types/global" />
|
||||
/// <reference types="next/navigation-types/compat/navigation" />
|
||||
|
||||
// NOTE: This file should not be edited
|
||||
// see https://nextjs.org/docs/basic-features/typescript for more information.
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
const path = require('path');
|
||||
|
||||
module.exports = {
|
||||
// https://www.i18next.com/overview/configuration-options#logging
|
||||
i18n: {
|
||||
@@ -24,20 +22,10 @@ module.exports = {
|
||||
'vi',
|
||||
'uk',
|
||||
'zh',
|
||||
'el',
|
||||
'sk',
|
||||
'no',
|
||||
'tr',
|
||||
'lv',
|
||||
'hu',
|
||||
'hr'
|
||||
],
|
||||
|
||||
fallbackLng: 'en',
|
||||
localeDetection: true,
|
||||
returnEmptyString: false,
|
||||
},
|
||||
returnEmptyString: false,
|
||||
appendNamespaceToCIMode: true,
|
||||
reloadOnPrerender: process.env.NODE_ENV === 'development',
|
||||
fallbackLng: 'en',
|
||||
localePath: path.resolve('./public/locales'),
|
||||
};
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
const { env } = require('process');
|
||||
|
||||
const { i18n } = require('./next-i18next.config');
|
||||
|
||||
const withBundleAnalyzer = require('@next/bundle-analyzer')({
|
||||
@@ -8,8 +10,7 @@ module.exports = withBundleAnalyzer({
|
||||
images: {
|
||||
domains: ['cdn.jsdelivr.net'],
|
||||
},
|
||||
reactStrictMode: true,
|
||||
reactStrictMode: false,
|
||||
output: 'standalone',
|
||||
i18n,
|
||||
transpilePackages: ['@jellyfin/sdk'],
|
||||
});
|
||||
|
||||
253
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "homarr",
|
||||
"version": "0.13.3",
|
||||
"version": "0.10.6",
|
||||
"description": "Homarr - A homepage for your server.",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
@@ -11,221 +11,92 @@
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"analyze": "ANALYZE=true next build",
|
||||
"turbo": "turbo run build",
|
||||
"start": "next start",
|
||||
"typecheck": "tsc --noEmit",
|
||||
"export": "next build && next export",
|
||||
"lint": "next lint",
|
||||
"jest": "jest",
|
||||
"jest:watch": "jest --watch",
|
||||
"prettier:check": "prettier --check \"**/*.{ts,tsx}\"",
|
||||
"prettier:write": "prettier --write \"**/*.{ts,tsx}\"",
|
||||
"test": "vitest",
|
||||
"test:ui": "vitest --ui",
|
||||
"test:run": "vitest run",
|
||||
"test:coverage": "vitest run --coverage",
|
||||
"docker:build": "turbo build && docker build . -t homarr:dev",
|
||||
"docker:start": "docker run --env-file ./.env -p 7575:7575 homarr:dev "
|
||||
"test": "npm run prettier:check && npm run lint && npm run typecheck && npm run jest",
|
||||
"ci": "yarn test && yarn lint --fix && yarn typecheck && yarn prettier:write"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ctrl/deluge": "^4.1.0",
|
||||
"@ctrl/qbittorrent": "^6.0.0",
|
||||
"@ctrl/qbittorrent": "^4.1.0",
|
||||
"@ctrl/shared-torrent": "^4.1.1",
|
||||
"@ctrl/transmission": "^4.1.1",
|
||||
"@emotion/react": "^11.10.6",
|
||||
"@dnd-kit/core": "^6.0.5",
|
||||
"@dnd-kit/sortable": "^7.0.1",
|
||||
"@dnd-kit/utilities": "^3.2.0",
|
||||
"@emotion/react": "^11.10.5",
|
||||
"@emotion/server": "^11.10.0",
|
||||
"@jellyfin/sdk": "^0.8.0",
|
||||
"@mantine/core": "^6.0.0",
|
||||
"@mantine/dates": "^6.0.0",
|
||||
"@mantine/dropzone": "^6.0.0",
|
||||
"@mantine/form": "^6.0.0",
|
||||
"@mantine/hooks": "^6.0.0",
|
||||
"@mantine/modals": "^6.0.0",
|
||||
"@mantine/next": "^6.0.0",
|
||||
"@mantine/notifications": "^6.0.0",
|
||||
"@mantine/tiptap": "^6.0.17",
|
||||
"@nivo/core": "^0.83.0",
|
||||
"@nivo/line": "^0.83.0",
|
||||
"@react-native-async-storage/async-storage": "^1.18.1",
|
||||
"@tabler/icons-react": "^2.20.0",
|
||||
"@tanstack/query-async-storage-persister": "^4.27.1",
|
||||
"@tanstack/query-sync-storage-persister": "^4.27.1",
|
||||
"@mantine/carousel": "^5.1.0",
|
||||
"@mantine/core": "^5.7.2",
|
||||
"@mantine/dates": "^5.7.2",
|
||||
"@mantine/dropzone": "^5.7.2",
|
||||
"@mantine/form": "^5.7.2",
|
||||
"@mantine/hooks": "^5.7.2",
|
||||
"@mantine/modals": "^5.7.2",
|
||||
"@mantine/next": "^5.2.3",
|
||||
"@mantine/notifications": "^5.7.2",
|
||||
"@mantine/prism": "^5.0.0",
|
||||
"@nivo/core": "^0.79.0",
|
||||
"@nivo/line": "^0.79.1",
|
||||
"@tabler/icons": "^1.78.0",
|
||||
"@tanstack/react-query": "^4.2.1",
|
||||
"@tanstack/react-query-devtools": "^4.24.4",
|
||||
"@tanstack/react-query-persist-client": "^4.28.0",
|
||||
"@tiptap/extension-link": "^2.0.4",
|
||||
"@tiptap/pm": "^2.0.4",
|
||||
"@tiptap/react": "^2.0.4",
|
||||
"@tiptap/starter-kit": "^2.0.4",
|
||||
"@trpc/client": "^10.29.1",
|
||||
"@trpc/next": "^10.29.1",
|
||||
"@trpc/react-query": "^10.29.1",
|
||||
"@trpc/server": "^10.29.1",
|
||||
"@vitejs/plugin-react": "^4.0.0",
|
||||
"axios": "^1.0.0",
|
||||
"browser-geo-tz": "^0.0.4",
|
||||
"consola": "^3.0.0",
|
||||
"add": "^2.0.6",
|
||||
"axios": "^0.27.2",
|
||||
"consola": "^2.15.3",
|
||||
"cookies-next": "^2.1.1",
|
||||
"dayjs": "^1.11.7",
|
||||
"dayjs": "^1.11.6",
|
||||
"dockerode": "^3.3.2",
|
||||
"fily-publish-gridstack": "^0.0.13",
|
||||
"framer-motion": "^10.0.0",
|
||||
"html-entities": "^2.3.3",
|
||||
"i18next": "^22.5.1",
|
||||
"immer": "^10.0.2",
|
||||
"embla-carousel-react": "^7.0.0",
|
||||
"framer-motion": "^6.5.1",
|
||||
"i18next": "^21.9.1",
|
||||
"i18next-browser-languagedetector": "^6.1.5",
|
||||
"i18next-http-backend": "^1.4.1",
|
||||
"js-file-download": "^0.4.12",
|
||||
"next": "13.4.19",
|
||||
"next-i18next": "^13.0.0",
|
||||
"next": "12.2.0",
|
||||
"next-i18next": "^11.3.0",
|
||||
"nzbget-api": "^0.0.3",
|
||||
"prismjs": "^1.29.0",
|
||||
"prism-react-renderer": "^1.3.5",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-i18next": "^12.3.1",
|
||||
"react-simple-code-editor": "^0.13.1",
|
||||
"rss-parser": "^3.12.0",
|
||||
"sabnzbd-api": "^1.5.0",
|
||||
"uuid": "^9.0.0",
|
||||
"xml-js": "^1.6.11",
|
||||
"xss": "^1.0.14",
|
||||
"zod": "^3.21.4",
|
||||
"zustand": "^4.3.7"
|
||||
"sharp": "^0.30.7",
|
||||
"systeminformation": "^5.12.1",
|
||||
"uuid": "^8.3.2",
|
||||
"yarn": "^1.22.19"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@next/bundle-analyzer": "^13.0.0",
|
||||
"@next/eslint-plugin-next": "^13.4.5",
|
||||
"@testing-library/jest-dom": "^5.16.5",
|
||||
"@testing-library/react": "^14.0.0",
|
||||
"@trivago/prettier-plugin-sort-imports": "^4.2.0",
|
||||
"@next/bundle-analyzer": "^12.1.4",
|
||||
"@next/eslint-plugin-next": "^12.1.4",
|
||||
"@types/dockerode": "^3.3.9",
|
||||
"@types/node": "18.17.8",
|
||||
"@types/prismjs": "^1.26.0",
|
||||
"@types/react": "^18.2.11",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"@types/video.js": "^7.3.51",
|
||||
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
||||
"@typescript-eslint/parser": "^6.0.0",
|
||||
"@vitest/coverage-c8": "^0.33.0",
|
||||
"@vitest/ui": "^0.33.0",
|
||||
"eslint": "^8.0.1",
|
||||
"eslint-config-next": "^13.4.5",
|
||||
"eslint-plugin-promise": "^6.0.0",
|
||||
"eslint-plugin-react": "latest",
|
||||
"@types/node": "17.0.1",
|
||||
"@types/react": "17.0.1",
|
||||
"@types/uuid": "^8.3.4",
|
||||
"@typescript-eslint/eslint-plugin": "^5.30.7",
|
||||
"@typescript-eslint/parser": "^5.30.7",
|
||||
"eslint": "^8.20.0",
|
||||
"eslint-config-airbnb": "^19.0.4",
|
||||
"eslint-config-airbnb-typescript": "^17.0.0",
|
||||
"eslint-config-mantine": "^2.0.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-jest": "^26.6.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.6.1",
|
||||
"eslint-plugin-react": "^7.30.1",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"eslint-plugin-testing-library": "^5.5.1",
|
||||
"eslint-plugin-unused-imports": "^3.0.0",
|
||||
"eslint-plugin-vitest": "^0.2.0",
|
||||
"happy-dom": "^10.0.0",
|
||||
"node-mocks-http": "^1.12.2",
|
||||
"prettier": "^3.0.0",
|
||||
"sass": "^1.56.1",
|
||||
"ts-node": "latest",
|
||||
"turbo": "latest",
|
||||
"typescript": "^5.1.0",
|
||||
"video.js": "^8.0.3",
|
||||
"vite-tsconfig-paths": "^4.2.0",
|
||||
"vitest": "^0.33.0",
|
||||
"vitest-fetch-mock": "^0.2.2"
|
||||
"eslint-plugin-unused-imports": "^2.0.0",
|
||||
"jest": "^28.1.3",
|
||||
"prettier": "^2.7.1",
|
||||
"typescript": "^4.7.4"
|
||||
},
|
||||
"nextBundleAnalysis": {
|
||||
"budget": null,
|
||||
"budgetPercentIncreaseRed": 20,
|
||||
"minimumChangeThreshold": 0,
|
||||
"showDetails": true
|
||||
"resolutions": {
|
||||
"@types/react": "17.0.2",
|
||||
"@types/react-dom": "17.0.2"
|
||||
},
|
||||
"renovate": {
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:base"
|
||||
],
|
||||
"commitMessagePrefix": "⬆️",
|
||||
"lockFileMaintenance": {
|
||||
"automerge": true
|
||||
},
|
||||
"minor": {
|
||||
"automerge": true
|
||||
},
|
||||
"patch": {
|
||||
"automerge": true
|
||||
},
|
||||
"pin": {
|
||||
"automerge": true
|
||||
}
|
||||
},
|
||||
"prettier": {
|
||||
"printWidth": 100,
|
||||
"tabWidth": 2,
|
||||
"parser": "typescript",
|
||||
"singleQuote": true,
|
||||
"trailingComma": "es5",
|
||||
"useTabs": false,
|
||||
"endOfLine": "lf",
|
||||
"importOrder": [
|
||||
"^@core/(.*)$",
|
||||
"^@server/(.*)$",
|
||||
"^@ui/(.*)$",
|
||||
"^[./]"
|
||||
],
|
||||
"importOrderSeparation": true,
|
||||
"plugins": [
|
||||
"@trivago/prettier-plugin-sort-imports"
|
||||
],
|
||||
"importOrderSortSpecifiers": true
|
||||
},
|
||||
"eslintConfig": {
|
||||
"ignoreDuringBuilds": true,
|
||||
"extends": [
|
||||
"next",
|
||||
"eslint:recommended",
|
||||
"plugin:@next/next/recommended",
|
||||
"plugin:react-hooks/recommended",
|
||||
"plugin:react/recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:vitest/recommended"
|
||||
],
|
||||
"plugins": [
|
||||
"testing-library",
|
||||
"unused-imports",
|
||||
"react",
|
||||
"vitest"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"**/?(*.)+(spec|test).[jt]s?(x)"
|
||||
],
|
||||
"extends": [
|
||||
"plugin:testing-library/react"
|
||||
]
|
||||
}
|
||||
],
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"parserOptions": {
|
||||
"project": "./tsconfig.json"
|
||||
},
|
||||
"rules": {
|
||||
"import/no-cycle": "off",
|
||||
"react/react-in-jsx-scope": "off",
|
||||
"react/no-children-prop": "off",
|
||||
"@typescript-eslint/no-unused-vars": "off",
|
||||
"@typescript-eslint/no-unused-imports": "off",
|
||||
"@typescript-eslint/no-unused-expressions": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-shadow": "off",
|
||||
"@typescript-eslint/no-use-before-define": "off",
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"no-continue": "off",
|
||||
"linebreak-style": 0,
|
||||
"import/extensions": "off",
|
||||
"vitest/max-nested-describe": [
|
||||
"error",
|
||||
{
|
||||
"max": 3
|
||||
}
|
||||
],
|
||||
"testing-library/no-node-access": [
|
||||
"error",
|
||||
{
|
||||
"allowContainerFirstChild": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
"packageManager": "yarn@3.2.1"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 26 KiB |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"title": "Velkommen tilbage!",
|
||||
"text": "Indtast venligst din adgangskode",
|
||||
"text": "Angiv venligst adgangskoden",
|
||||
"form": {
|
||||
"fields": {
|
||||
"password": {
|
||||
@@ -18,10 +18,10 @@
|
||||
"message": "Din adgangskode er ved at blive tjekket..."
|
||||
},
|
||||
"correct": {
|
||||
"title": "Log ind vellykket, omdirigerer..."
|
||||
"title": "Adgangskode korrekt, omdirigerer dig..."
|
||||
},
|
||||
"wrong": {
|
||||
"title": "Kodeordet du tastede ind, var forkert. Prøv venligst igen."
|
||||
"title": "Adgangskoden er forkert, prøv venligst igen."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,40 +1,11 @@
|
||||
{
|
||||
"save": "Gem",
|
||||
"about": "Om",
|
||||
"cancel": "Annuller",
|
||||
"close": "Luk",
|
||||
"delete": "Slet",
|
||||
"ok": "OK",
|
||||
"edit": "Rediger",
|
||||
"enabled": "Aktiveret",
|
||||
"disabled": "Deaktiveret",
|
||||
"enableAll": "Aktiver alle",
|
||||
"disableAll": "Deaktiver alle",
|
||||
"version": "Version",
|
||||
"changePosition": "Ændre placering",
|
||||
"remove": "Fjern",
|
||||
"removeConfirm": "Er du sikker på, at du ønsker at fjerne {{item}}?",
|
||||
"createItem": "+ opret {{item}}",
|
||||
"sections": {
|
||||
"settings": "Indstillinger",
|
||||
"dangerZone": "Farezone"
|
||||
},
|
||||
"secrets": {
|
||||
"apiKey": "API nøgle",
|
||||
"username": "Brugernavn",
|
||||
"password": "Adgangskode"
|
||||
"actions": {
|
||||
"save": "Gem"
|
||||
},
|
||||
"tip": "Tip: ",
|
||||
"time": {
|
||||
"seconds": "sekunder",
|
||||
"minutes": "minutter",
|
||||
"hours": "timer"
|
||||
},
|
||||
"loading": "Indlæser...",
|
||||
"breakPoints": {
|
||||
"small": "lille",
|
||||
"medium": "mellem",
|
||||
"large": "stor"
|
||||
},
|
||||
"seeMore": "Se mere..."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,6 +113,12 @@
|
||||
"advancedOptions": {
|
||||
"title": "Avancerede indstillinger",
|
||||
"form": {
|
||||
"httpStatusCodes": {
|
||||
"label": "HTTP status kode",
|
||||
"placeholder": "Vælg gyldige statuskoder",
|
||||
"clearButtonLabel": "Ryd valgte",
|
||||
"nothingFound": "Intet fundet"
|
||||
},
|
||||
"openServiceInNewTab": {
|
||||
"label": "Åbn tjeneste i ny fane"
|
||||
},
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"modals": {
|
||||
"blockedPopups": {
|
||||
"title": "Popups blokeret",
|
||||
"text": "Din browser har blokeret Homarr fra at få adgang til dens API. Dette er oftest forårsaget af AdBlockers eller nægtede tilladelser. Homarr kan ikke anmode om tilladelser automatisk.",
|
||||
"list": {
|
||||
"browserPermission": "Klik på ikonet ved siden af URL'en, og tjek tilladelserne. Tillad popups og vinduer",
|
||||
"adBlockers": "Deaktiver annonceblokkere og sikkerhedsværktøjer i din browser",
|
||||
"otherBrowser": "Prøv en anden browser"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"category": {
|
||||
"openAllInNewTab": "Åbn alle i nye faneblade"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"moveUp": "Flyt op",
|
||||
"moveDown": "Flyt ned",
|
||||
"addCategory": "Tilføj kategori {{location}}",
|
||||
"addAbove": "over",
|
||||
"addBelow": "under"
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"modal": {
|
||||
"title": "Tilføj et nyt felt",
|
||||
"text": "Felter er det vigtigste element i Homarr. De bruges til at vise dine apps og andre oplysninger. Du kan tilføje så mange felter, som du ønsker."
|
||||
},
|
||||
"widgetDescription": "Widgets interagerer med dine apps for at give dig mere kontrol over dine programmer. De kræver normalt nogle få konfigurationer, før de kan bruges.",
|
||||
"goBack": "Gå tilbage til det forrige trin",
|
||||
"actionIcon": {
|
||||
"tooltip": "Tilføj et felt"
|
||||
},
|
||||
"apps": "Apps",
|
||||
"app": {
|
||||
"defaultName": "Din app"
|
||||
},
|
||||
"widgets": "Widgets",
|
||||
"categories": "Kategorier",
|
||||
"category": {
|
||||
"newName": "Navn på ny kategori",
|
||||
"defaultName": "Ny kategori",
|
||||
"created": {
|
||||
"title": "Kategorien er oprettet",
|
||||
"message": "Kategorien \"{{name}}\" er blevet oprettet"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"title": "Siden blev ikke fundet",
|
||||
"text": "Denne side kunne ikke findes. URL'en til denne side kan være udløbet, URL'en er ugyldig, eller du har ikke de nødvendige tilladelser til at få adgang til denne ressource.",
|
||||
"button": "Gå til startsiden"
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"description": "I redigeringstilstand kan du justere felter og konfigurere apps. Ændringerne gemmes først, når du forlader redigeringstilstand.",
|
||||
"button": {
|
||||
"disabled": "Gå i redigeringstilstand",
|
||||
"enabled": "Afslut og gem"
|
||||
},
|
||||
"popover": {
|
||||
"title": "Redigeringstilstand er aktiveret for <1>{{size}}</1> størrelse",
|
||||
"text": "Du kan justere og konfigurere dine apps nu. Ændringer er <strong>ikke gemt</strong> indtil du forlader redigeringstilstanden"
|
||||
},
|
||||
"unloadEvent": "Afslut redigeringstilstanden for at gemme dine ændringer"
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"title": "{{position}} sidebjælke"
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"description": "Homarr er et <strong>elegant</strong>, <strong>moderne</strong> dashboard, der giver dig alle dine apps og tjenester lige ved hånden. Med Homarr kan du få adgang til og styre alt på ét praktisk sted. Homarr integrerer problemfrit med de apps, du har tilføjet, og giver dig værdifulde oplysninger og fuld kontrol. Installationen er en leg, og Homarr understøtter en lang række implementeringsmetoder.",
|
||||
"contact": "Har du problemer eller spørgsmål? Kontakt os!",
|
||||
"addToDashboard": "Tilføj til dashboard",
|
||||
"tip": "Mod henviser til din modificeringstast, det er Ctrl og Command/Super/Windows-tasten",
|
||||
"key": "Genvejstast",
|
||||
"action": "Handling",
|
||||
"keybinds": "Genvejstaster",
|
||||
"documentation": "Dokumentation",
|
||||
"actions": {
|
||||
"toggleTheme": "Slå lys/mørk tilstand til/fra",
|
||||
"focusSearchBar": "Fokusér på søgebjælken",
|
||||
"openDocker": "Åbn docker-widget",
|
||||
"toggleEdit": "Skift redigeringstilstand"
|
||||
},
|
||||
"metrics": {
|
||||
"configurationSchemaVersion": "Konfigurationsskema version",
|
||||
"configurationsCount": "Tilgængelige konfigurationer",
|
||||
"version": "Version",
|
||||
"nodeEnvironment": "Node miljø",
|
||||
"i18n": "Indlæste I18n-oversættelsesnavneområder",
|
||||
"locales": "Konfigurerede I18n landestandarder",
|
||||
"experimental_disableEditMode": "<b>EKSPERIMENTAL</b>: Deaktivér redigeringstilstand"
|
||||
},
|
||||
"version": {
|
||||
"new": "Ny: {{newVersion}}",
|
||||
"dropdown": "Version {{newVersion}} er tilgængelig! Den nuværende version er {{currentVersion}}"
|
||||
}
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
{
|
||||
"tabs": {
|
||||
"general": "Generelt",
|
||||
"behaviour": "Adfærd",
|
||||
"network": "Netværk",
|
||||
"appearance": "Udseende",
|
||||
"integration": "Integration"
|
||||
},
|
||||
"general": {
|
||||
"appname": {
|
||||
"label": "App navn",
|
||||
"description": "Bruges til visning af appen på dashboardet."
|
||||
},
|
||||
"internalAddress": {
|
||||
"label": "Intern adresse",
|
||||
"description": "Appens interne IP."
|
||||
},
|
||||
"externalAddress": {
|
||||
"label": "Ekstern adresse",
|
||||
"description": "URL-adresse, der åbnes, når du klikker på appen."
|
||||
}
|
||||
},
|
||||
"behaviour": {
|
||||
"isOpeningNewTab": {
|
||||
"label": "Åbn i nyt faneblad",
|
||||
"description": "Åbn appen i en ny fane i stedet for den aktuelle fane."
|
||||
},
|
||||
"tooltipDescription": {
|
||||
"label": "Applikationsbeskrivelse",
|
||||
"description": "Den tekst, du indtaster, vises, når du holder musen over din app.\nBrug den til at give brugerne flere detaljer om din app, eller lad den stå tom, hvis du ikke vil have noget."
|
||||
},
|
||||
"customProtocolWarning": "Brug af en ikke-standardiseret protokol. Dette kan kræve forudinstallerede programmer og kan medføre sikkerhedsrisici. Sørg for, at din adresse er sikker og pålidelig."
|
||||
},
|
||||
"network": {
|
||||
"statusChecker": {
|
||||
"label": "Statuskontrol",
|
||||
"description": "Kontrollerer, om din app er online ved hjælp af en simpel HTTP(S)-anmodning."
|
||||
},
|
||||
"statusCodes": {
|
||||
"label": "HTTP statuskoder",
|
||||
"description": "De HTTP-statuskoder, der betragtes som online."
|
||||
}
|
||||
},
|
||||
"appearance": {
|
||||
"icon": {
|
||||
"label": "App Ikon",
|
||||
"description": "Begynd at skrive for at finde et ikon. Du kan også indsætte en billed-URL for at bruge et brugerdefineret ikon.",
|
||||
"autocomplete": {
|
||||
"title": "Ingen resultater fundet",
|
||||
"text": "Prøv at bruge et mere specifikt søgeord. Hvis du ikke kan finde det ønskede ikon, kan du indsætte billedets URL ovenfor for at få et brugerdefineret ikon"
|
||||
},
|
||||
"noItems": {
|
||||
"title": "Indlæser eksterne ikoner",
|
||||
"text": "Dette kan tage nogle sekunder"
|
||||
}
|
||||
},
|
||||
"appNameFontSize": {
|
||||
"label": "Appnavn Skriftstørrelse",
|
||||
"description": "Indstil skriftstørrelsen, når appens navn vises på flisen."
|
||||
},
|
||||
"appNameStatus": {
|
||||
"label": "App Navn Status",
|
||||
"description": "Vælg, hvor du vil have titlen vist, hvis den overhovedet skal vises.",
|
||||
"dropdown": {
|
||||
"normal": "Vis kun titel på flise",
|
||||
"hover": "Vis kun titel på tooltip hover",
|
||||
"hidden": "Vis slet ikke"
|
||||
}
|
||||
},
|
||||
"positionAppName": {
|
||||
"label": "App Navn Position",
|
||||
"description": "Placering af appens navn i forhold til ikonet.",
|
||||
"dropdown": {
|
||||
"top": "Top",
|
||||
"right": "Højre",
|
||||
"bottom": "Bund",
|
||||
"left": "Venstre"
|
||||
}
|
||||
},
|
||||
"lineClampAppName": {
|
||||
"label": "App Navn Linje Klemme",
|
||||
"description": "Definerer hvor mange linjer din titel skal passe til det maksimale. Sæt 0 for ubegrænset."
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"type": {
|
||||
"label": "Konfiguration af integration",
|
||||
"description": "Den integrationskonfiguration, der skal bruges til at oprette forbindelse til din app.",
|
||||
"placeholder": "Vælg en integration",
|
||||
"defined": "Defineret",
|
||||
"undefined": "Udefineret",
|
||||
"public": "Offentlig",
|
||||
"private": "Privat",
|
||||
"explanationPrivate": "En privat hemmelighed sendes kun én gang til serveren. Når din browser har opdateret siden, vil den aldrig blive sendt igen.",
|
||||
"explanationPublic": "En offentlig hemmelighed vil altid blive sendt til klienten og er tilgængelig via API'en. Den bør ikke indeholde fortrolige værdier som f. eks. brugernavne, adgangskoder, tokens, certifikater og lignende!"
|
||||
},
|
||||
"secrets": {
|
||||
"description": "Hvis du vil opdatere en hemmelighed, skal du indtaste en værdi og klikke på knappen Gem. Hvis du vil fjerne en hemmelighed, skal du bruge knappen \"clear\".",
|
||||
"warning": "Dine legitimationsoplysninger fungerer som adgang til dine integrationer, og du bør <strong>aldrig</strong> dele dem med andre. Det officielle Homarr-team vil aldrig bede om legitimationsoplysninger. Sørg for at <strong>opbevare og administrere dine hemmeligheder sikkert</strong>.",
|
||||
"clear": "Ryd hemmelighed",
|
||||
"save": "Gem hemmelighed",
|
||||
"update": "Opdater hemmelighed"
|
||||
}
|
||||
},
|
||||
"validation": {
|
||||
"popover": "Din formular indeholder ugyldige data. Derfor kan den ikke gemmes. Løs alle problemer og klik på denne knap igen for at gemme dine ændringer",
|
||||
"name": "Navn er obligatorisk",
|
||||
"noUrl": "Url er obligatorisk",
|
||||
"invalidUrl": "Værdien er ikke en gyldig url",
|
||||
"noIconUrl": "Dette felt er påkrævet",
|
||||
"noExternalUri": "Ekstern URI er påkrævet",
|
||||
"invalidExternalUri": "Ekstern URI er ikke en gyldig uri"
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"xPosition": "X akse position",
|
||||
"width": "Bredde",
|
||||
"height": "Højde",
|
||||
"yPosition": "Y akse position",
|
||||
"zeroOrHigher": "0 eller højere",
|
||||
"betweenXandY": "Mellem {{min}} og {{max}}"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"iconPicker": {
|
||||
"textInputPlaceholder": "Søger efter noget...",
|
||||
"searchLimitationTitle": "Begrænset til 30 resultater",
|
||||
"searchLimitationMessage": "Søgeresultaterne blev begrænset til 30, fordi der var for mange matchende resultater"
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"popover": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
},
|
||||
"sizes": {
|
||||
"small": "lille",
|
||||
"medium": "mellem",
|
||||
"large": "stor"
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"fallback": {
|
||||
"title": "Du har i øjeblikket ingen værktøjer"
|
||||
},
|
||||
"iconPicker": {
|
||||
"textInputPlaceholder": "Søg efter ikoner...",
|
||||
"searchLimitationTitle": "Søgningen er begrænset til {{max}} ikoner",
|
||||
"searchLimitationMessage": "For at holde det hele hurtigt og hurtigt er søgningen begrænset til {{max}} ikoner. Brug søgefeltet til at finde flere ikoner"
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Bogmærke",
|
||||
"description": "Viser en statisk liste over strenge eller links",
|
||||
"settings": {
|
||||
"title": "Bogmærke indstillinger",
|
||||
"name": {
|
||||
"label": "Widgettitel",
|
||||
"info": "Efterlad blank for at holde titlen skjult."
|
||||
},
|
||||
"items": {
|
||||
"label": "Elementer"
|
||||
},
|
||||
"layout": {
|
||||
"label": "Layout",
|
||||
"data": {
|
||||
"autoGrid": "Automatisk gitter",
|
||||
"horizontal": "Horisontal",
|
||||
"vertical": "Vertikal"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"noneFound": {
|
||||
"title": "Bogmærkelisten er tom",
|
||||
"text": "Tilføj nye elementer til denne liste i redigeringstilstand"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"validation": {
|
||||
"length": "Længden skal være mellem {{shortest}} og {{longest}}",
|
||||
"invalidLink": "Ikke et gyldigt link",
|
||||
"errorMsg": "Gemte ikke, fordi der var valideringsfejl. Korriger venligst dine indtastninger"
|
||||
},
|
||||
"name": "Navn",
|
||||
"url": "URL",
|
||||
"newTab": "Åbn i nyt faneblad",
|
||||
"hideHostname": "Skjul værtsnavn",
|
||||
"hideIcon": "Skjul ikon",
|
||||
"delete": "Slet"
|
||||
}
|
||||
}
|
||||
@@ -1,35 +1,10 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Kalender",
|
||||
"description": "Viser en kalender med kommende udgivelser fra understøttede integrationer.",
|
||||
"description": "Et kalendermodul til visning af kommende udgivelser. Det interagerer med Sonarr- og Radarr-API'erne.",
|
||||
"settings": {
|
||||
"title": "Indstillinger for kalender widget",
|
||||
"useSonarrv4": {
|
||||
"label": "Brug Sonarr v4 API"
|
||||
},
|
||||
"sundayStart": {
|
||||
"label": "Søndag første ugedag"
|
||||
},
|
||||
"radarrReleaseType": {
|
||||
"label": "Radarr udgivelsestype",
|
||||
"data": {
|
||||
"inCinemas": "I Biografen",
|
||||
"physicalRelease": "Fysisk",
|
||||
"digitalRelease": "Digital"
|
||||
}
|
||||
},
|
||||
"hideWeekDays": {
|
||||
"label": "Skjul ugedage"
|
||||
},
|
||||
"fontSize": {
|
||||
"label": "Skriftstørrelse",
|
||||
"data": {
|
||||
"xs": "Ekstra lille",
|
||||
"sm": "Lille",
|
||||
"md": "Mellem",
|
||||
"lg": "Stor",
|
||||
"xl": "Ekstra stor"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
{
|
||||
"settings": {
|
||||
"label": "Indstillinger"
|
||||
},
|
||||
"errors": {
|
||||
"unmappedOptions": {
|
||||
"text": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,83 +1,22 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Dash.",
|
||||
"description": "Viser graferne for en ekstern Dash. instans i Homarr.",
|
||||
"description": "Et modul til visning af graferne for din kørende Dash. instans.",
|
||||
"settings": {
|
||||
"title": "Indstillinger for Dash. widget",
|
||||
"dashName": {
|
||||
"label": "Dash. Navn"
|
||||
"cpuMultiView": {
|
||||
"label": "CPU Multikerne Visning"
|
||||
},
|
||||
"storageMultiView": {
|
||||
"label": "Multidrevet Lagervisning"
|
||||
},
|
||||
"useCompactView": {
|
||||
"label": "Brug kompakt tilstand"
|
||||
},
|
||||
"graphs": {
|
||||
"label": "Grafer"
|
||||
},
|
||||
"url": {
|
||||
"label": "Dash. URL"
|
||||
},
|
||||
"usePercentages": {
|
||||
"label": "Vis procentdele"
|
||||
},
|
||||
"columns": {
|
||||
"label": "Vis kolonner"
|
||||
},
|
||||
"graphHeight": {
|
||||
"label": "Højde af grafer"
|
||||
},
|
||||
"graphsOrder": {
|
||||
"label": "Grafer (rækkefølge)",
|
||||
"storage": {
|
||||
"label": "Lager",
|
||||
"enabled": {
|
||||
"label": "Vis i widget"
|
||||
},
|
||||
"span": {
|
||||
"label": "Kolonne spændvidde"
|
||||
},
|
||||
"compactView": {
|
||||
"label": "Vis som tekst (kompakt)"
|
||||
},
|
||||
"multiView": {
|
||||
"label": "Vis som multi-drevvisning"
|
||||
}
|
||||
},
|
||||
"network": {
|
||||
"label": "Netværk",
|
||||
"enabled": {
|
||||
"label": "Vis i widget"
|
||||
},
|
||||
"span": {
|
||||
"label": "Kolonne spændvidde"
|
||||
},
|
||||
"compactView": {
|
||||
"label": "Vis som tekst (kompakt)"
|
||||
}
|
||||
},
|
||||
"cpu": {
|
||||
"label": "CPU",
|
||||
"enabled": {
|
||||
"label": "Vis i widget"
|
||||
},
|
||||
"span": {
|
||||
"label": "Kolonne spændvidde"
|
||||
},
|
||||
"multiView": {
|
||||
"label": "Vis som multi-core-visning"
|
||||
}
|
||||
},
|
||||
"ram": {
|
||||
"label": "RAM",
|
||||
"enabled": {
|
||||
"label": "Vis i widget"
|
||||
},
|
||||
"span": {
|
||||
"label": "Kolonne spændvidde"
|
||||
}
|
||||
},
|
||||
"gpu": {
|
||||
"label": "GPU",
|
||||
"enabled": {
|
||||
"label": "Vis i widget"
|
||||
},
|
||||
"span": {
|
||||
"label": "Kolonne spændvidde"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -85,11 +24,7 @@
|
||||
"title": "Dash.",
|
||||
"errors": {
|
||||
"noService": "Ingen Dash. service fundet. Tilføj venligst en til dit Homarr-dashboard eller indstil en Dash. URL i modulindstillingerne",
|
||||
"noInformation": "Kan ikke hente information fra dash. - kører du den nyeste version?",
|
||||
"protocolDowngrade": {
|
||||
"title": "Registreret protokolnedgradering",
|
||||
"text": "Forbindelsen til din Dash.-instans bruger HTTP. Dette er en sikkerhedsrisiko, fordi HTTP er ukrypteret, og angribere kan misbruge denne forbindelse. Sørg for, at Dash. bruger HTTPS, eller nedgrader Homarr til HTTP (anbefales ikke)."
|
||||
}
|
||||
"noInformation": "Kan ikke hente information fra dash. - kører du den nyeste version?"
|
||||
},
|
||||
"graphs": {
|
||||
"storage": {
|
||||
@@ -107,7 +42,7 @@
|
||||
"cpu": {
|
||||
"title": "CPU"
|
||||
},
|
||||
"ram": {
|
||||
"memory": {
|
||||
"title": "RAM"
|
||||
},
|
||||
"gpu": {
|
||||
@@ -115,4 +50,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,33 +1,11 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Dato og tid",
|
||||
"description": "Viser aktuel dag og klokkeslæt.",
|
||||
"name": "Dato",
|
||||
"description": "Vis det aktuelle klokkeslæt og den aktuelle dato på et kort",
|
||||
"settings": {
|
||||
"title": "Indstillinger for dato og tid widget",
|
||||
"display24HourFormat": {
|
||||
"label": "Vis fuld tid (24-timer)"
|
||||
},
|
||||
"dateFormat": {
|
||||
"label": "Formatering af dato",
|
||||
"data": {
|
||||
"hide": "Skjul dato"
|
||||
}
|
||||
},
|
||||
"enableTimezone": {
|
||||
"label": "Vis en brugerdefineret tidszone"
|
||||
},
|
||||
"timezoneLocation": {
|
||||
"label": "Tidszone Lokation"
|
||||
},
|
||||
"titleState": {
|
||||
"label": "Byens titel",
|
||||
"info": "Hvis du aktiverer indstillingen Tidszone, kan du få vist navnet på byen og tidszonekoden.<br/>Du kan også vise byen alene eller slet ikke vise noget.",
|
||||
"data": {
|
||||
"both": "By og tidszone",
|
||||
"city": "Kun by",
|
||||
"none": "Intet"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Download hastighed",
|
||||
"description": "Viser download- og uploadhastigheden for understøttede integrationer."
|
||||
"description": "Vis den aktuelle downloadhastighed for understøttede tjenester"
|
||||
},
|
||||
"card": {
|
||||
"table": {
|
||||
@@ -18,7 +18,7 @@
|
||||
}
|
||||
},
|
||||
"lineChart": {
|
||||
"title": "Nuværende netværkstrafik",
|
||||
"title": "Nuværende downloadhastighed",
|
||||
"download": "Download: {{download}}",
|
||||
"upload": "Upload: {{upload}}",
|
||||
"timeSpan": "{{seconds}} sekunder siden",
|
||||
@@ -32,4 +32,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "DNS hole kontrol",
|
||||
"description": "Kontroller PiHole eller AdGuard fra dit dashboard"
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "DNS hole oversigt",
|
||||
"description": "Viser vigtige data fra PiHole eller AdGuard",
|
||||
"settings": {
|
||||
"title": "Indstillinger for DNS Hole oversigt",
|
||||
"usePiHoleColors": {
|
||||
"label": "Brug farver fra PiHole"
|
||||
},
|
||||
"layout": {
|
||||
"label": "Layout",
|
||||
"data": {
|
||||
"grid": "2 gange 2",
|
||||
"row": "Horisontal",
|
||||
"column": "Vertikal"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"metrics": {
|
||||
"domainsOnAdlist": "Domæner på adlister",
|
||||
"queriesToday": "Forespørgsler i dag",
|
||||
"queriesBlockedTodayPercentage": "blokeret i dag",
|
||||
"queriesBlockedToday": "blokeret i dag"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Docker",
|
||||
"description": "Giver dig mulighed for nemt at se og administrere alle dine Docker Containers."
|
||||
"description": "Tillader dig nemt at administrere dine docker containere"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "Søg efter container- eller imagenavn"
|
||||
@@ -25,8 +25,8 @@
|
||||
},
|
||||
"actionBar": {
|
||||
"addService": {
|
||||
"title": "Tilføj app",
|
||||
"message": "Tilføj app til Homarr"
|
||||
"title": "Tilføj tjeneste",
|
||||
"message": "Tilføj tjeneste til Homarr"
|
||||
},
|
||||
"restart": {
|
||||
"title": "Genstart"
|
||||
@@ -68,16 +68,16 @@
|
||||
"errors": {
|
||||
"integrationFailed": {
|
||||
"title": "Docker integration mislykkedes",
|
||||
"message": "Har du glemt at mounte docker socket?"
|
||||
"message": "Har du glemt at montere docker socket ?"
|
||||
},
|
||||
"unknownError": {
|
||||
"title": "Der opstod en fejl"
|
||||
},
|
||||
"oneServiceAtATime": {
|
||||
"title": "Tilføj kun én app eller tjeneste ad gangen!"
|
||||
"title": "Du må kun tilføje én tjeneste ad gangen!"
|
||||
}
|
||||
},
|
||||
"actionIcon": {
|
||||
"tooltip": "Docker"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "indlejret dokument (iframe)",
|
||||
"description": "Indlejr ethvert indhold fra internettet. Nogle websteder kan begrænse adgang.",
|
||||
"settings": {
|
||||
"title": "iFrame indstillinger",
|
||||
"embedUrl": {
|
||||
"label": "Indlejr URL"
|
||||
},
|
||||
"allowFullScreen": {
|
||||
"label": "Tillad fuld skærm"
|
||||
},
|
||||
"allowTransparency": {
|
||||
"label": "Tillad gennemsigtighed"
|
||||
},
|
||||
"allowScrolling": {
|
||||
"label": "Tillad rulning"
|
||||
},
|
||||
"allowPayment": {
|
||||
"label": "Tillad betaling"
|
||||
},
|
||||
"allowAutoPlay": {
|
||||
"label": "Tillad automatisk afspilning"
|
||||
},
|
||||
"allowMicrophone": {
|
||||
"label": "Tillad mikrofon"
|
||||
},
|
||||
"allowCamera": {
|
||||
"label": "Tillad kamera"
|
||||
},
|
||||
"allowGeolocation": {
|
||||
"label": "Tillad geolokalisering"
|
||||
}
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"errors": {
|
||||
"noUrl": {
|
||||
"title": "Ugyldig URL",
|
||||
"text": "Sørg for, at du har indtastet en gyldig adresse i konfigurationen af din widget"
|
||||
},
|
||||
"browserSupport": "Din browser understøtter ikke iframes. Opdater venligst din browser."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Medieforespørgsler",
|
||||
"description": "Se en liste over alle medieforespørgsler fra din Overseerr eller Jellyseerr instans",
|
||||
"settings": {
|
||||
"title": "Liste over medieforespørgsler",
|
||||
"replaceLinksWithExternalHost": {
|
||||
"label": "Udskift links med ekstern vært"
|
||||
},
|
||||
"openInNewTab": {
|
||||
"label": "Åbn links i ny fane"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noRequests": "Ingen anmodninger fundet. Kontroller, at du har konfigureret dine apps korrekt.",
|
||||
"pending": "Der er {{countPendingApproval}} anmodninger, der venter på godkendelse.",
|
||||
"nonePending": "Der er i øjeblikket ingen godkendelser, der er under behandling. Du er i mål!",
|
||||
"state": {
|
||||
"approved": "Godkendt",
|
||||
"pendingApproval": "Afventer godkendelse",
|
||||
"declined": "Afvist"
|
||||
},
|
||||
"tooltips": {
|
||||
"approve": "Godkend anmodninger",
|
||||
"decline": "Afvis alle anmodninger",
|
||||
"approving": "Godkender anmodning..."
|
||||
},
|
||||
"mutation": {
|
||||
"approving": "Godkender",
|
||||
"declining": "Afviser",
|
||||
"request": "anmod...",
|
||||
"approved": "Anmodning blev godkendt!",
|
||||
"declined": "Anmodningen blev afvist!"
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Statistik for medieanmodning",
|
||||
"description": "Statistik over dine medieanmodninger",
|
||||
"settings": {
|
||||
"title": "Statistikker over medieanmodninger",
|
||||
"replaceLinksWithExternalHost": {
|
||||
"label": "Udskift links med ekstern vært"
|
||||
},
|
||||
"openInNewTab": {
|
||||
"label": "Åbn links i ny fane"
|
||||
}
|
||||
}
|
||||
},
|
||||
"mediaStats": {
|
||||
"title": "Mediestatistik",
|
||||
"pending": "Afventer godkendelse",
|
||||
"tvRequests": "TV-anmodninger",
|
||||
"movieRequests": "Film anmodninger",
|
||||
"approved": "Allerede godkendt",
|
||||
"totalRequests": "Total"
|
||||
},
|
||||
"userStats": {
|
||||
"title": "Topbrugere",
|
||||
"requests": "Anmodninger: {{number}}"
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Medieserver",
|
||||
"description": "Interagere med din Jellyfin- eller Plex-medieserver",
|
||||
"settings": {
|
||||
"title": "Indstillinger for medieserver widget"
|
||||
}
|
||||
},
|
||||
"loading": "Indlæser streams",
|
||||
"card": {
|
||||
"table": {
|
||||
"header": {
|
||||
"session": "Session",
|
||||
"user": "Bruger",
|
||||
"currentlyPlaying": "Afspiller i øjeblikket"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"general": {
|
||||
"title": "Kunne ikke indlæse indholdet",
|
||||
"text": "Det er ikke muligt at hente oplysninger fra serveren. Se venligst logfilerne for at få flere oplysninger"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Notesbog",
|
||||
"description": "En markdown-baseret interaktiv widget, hvor du kan skrive dine noter ned!",
|
||||
"settings": {
|
||||
"title": "Indstillinger for notebook-widget",
|
||||
"showToolbar": {
|
||||
"label": "Vis værktøjslinjen, der hjælper dig med at skrive markdown"
|
||||
},
|
||||
"content": {
|
||||
"label": "Indholdet af notesbogen"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Overseerr",
|
||||
"description": "Giver dig mulighed for at søge og tilføje medier fra Overseerr eller Jellyseerr."
|
||||
"description": "Giver dig mulighed for at søge og tilføje medier fra Overseerr/Jellyseerr"
|
||||
},
|
||||
"popup": {
|
||||
"item": {
|
||||
@@ -27,4 +27,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Ping",
|
||||
"description": "Viser en statusindikator afhængigt af HTTP-svarkoden for en given URL."
|
||||
"description": "Giver dig mulighed for at kontrollere, om tjenesten er oppe eller returnerer en bestemt HTTP-statuskode."
|
||||
},
|
||||
"states": {
|
||||
"online": "Online {{response}}",
|
||||
"offline": "Offline {{response}}",
|
||||
"loading": "Indlæser..."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "RSS Widget",
|
||||
"description": "",
|
||||
"settings": {
|
||||
"title": "Indstillinger for RSS-widget",
|
||||
"rssFeedUrl": {
|
||||
"label": "RSS-feed URL'er",
|
||||
"description": "URL'erne for de RSS-feeds, du vil vise fra."
|
||||
},
|
||||
"refreshInterval": {
|
||||
"label": "Opdateringsinterval (i minutter)"
|
||||
},
|
||||
"dangerousAllowSanitizedItemContent": {
|
||||
"label": "Tillad HTML-formatering (Farligt)",
|
||||
"info": "Det kan være farligt at tillade HTML-formatering udefra.<br/>Sørg for, at feedet kommer fra en pålidelig kilde."
|
||||
},
|
||||
"textLinesClamp": {
|
||||
"label": "Klemme til tekstlinjer"
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"errors": {
|
||||
"general": {
|
||||
"title": "Det er ikke muligt at hente RSS-feed",
|
||||
"text": "Der var et problem med at hente RSS-feedet. Sørg for, at du har konfigureret RSS-feedet korrekt ved hjælp af en gyldig URL. URL'er skal stemme overens med den officielle specifikation. Når du har opdateret feed'et, skal du muligvis opdatere dashboardet."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Søgebjælke",
|
||||
"description": "En søgelinje, der giver dig mulighed for at søge i din brugerdefinerede søgemaskine, YouTube og understøttede integrationer."
|
||||
"description": "Søgebjælke til at søge på nettet, Youtube, Torrents eller Overseerr"
|
||||
},
|
||||
"input": {
|
||||
"placeholder": "Søg på nettet..."
|
||||
@@ -10,7 +10,7 @@
|
||||
"searchEngines": {
|
||||
"search": {
|
||||
"name": "Web",
|
||||
"description": "Søg..."
|
||||
"description": "Søg ved hjælp af din søgemaskine (defineret i indstillinger)"
|
||||
},
|
||||
"youtube": {
|
||||
"name": "YouTube",
|
||||
@@ -22,9 +22,9 @@
|
||||
},
|
||||
"overseerr": {
|
||||
"name": "Overseerr",
|
||||
"description": "Søg efter film og tv-udsendelser på Overseerr"
|
||||
"description": "Søg efter film og tv-serier ved hjælp af Overseerr (modul skal være aktiveret)"
|
||||
}
|
||||
},
|
||||
"tip": "Du kan vælge søgefeltet med genvejen ",
|
||||
"switchedSearchEngine": "Skiftede til søgning med {{searchEngine}}"
|
||||
}
|
||||
}
|
||||
@@ -1,32 +1,14 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Torrent",
|
||||
"description": "Viser en liste over torrents fra understøttede Torrent-klienter.",
|
||||
"description": "Vis den aktuelle downloadhastighed for understøttede tjenester",
|
||||
"settings": {
|
||||
"title": "Indstillinger for Torrent-widget",
|
||||
"refreshInterval": {
|
||||
"label": "Opdateringsinterval (i sekunder)"
|
||||
},
|
||||
"displayCompletedTorrents": {
|
||||
"label": "Vis fuldførte torrents"
|
||||
},
|
||||
"displayStaleTorrents": {
|
||||
"label": "Vis torrents uden aktivitet"
|
||||
},
|
||||
"labelFilterIsWhitelist": {
|
||||
"label": "Etiketlisten er en whitelist (i stedet for en blackliste)"
|
||||
},
|
||||
"labelFilter": {
|
||||
"label": "Etiket liste",
|
||||
"description": "Når \"er whitelist\" er markeret, fungerer dette som en whitelist. Hvis det ikke er markeret, er det en blackliste. Gør ikke noget, hvis den er tom"
|
||||
"hideComplete": {
|
||||
"label": "Skjul fuldførte torrents"
|
||||
}
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"footer": {
|
||||
"error": "Fejl",
|
||||
"lastUpdated": "Sidst opdateret {{time}} siden"
|
||||
},
|
||||
"table": {
|
||||
"header": {
|
||||
"name": "Navn",
|
||||
@@ -36,16 +18,12 @@
|
||||
"estimatedTimeOfArrival": "ETA",
|
||||
"progress": "Fremskridt"
|
||||
},
|
||||
"item": {
|
||||
"text": "Administreret af {{appName}}, {{ratio}} ratio"
|
||||
},
|
||||
"body": {
|
||||
"nothingFound": "Ingen torrents fundet",
|
||||
"filterHidingItems": "{{count}} poster er skjult af dine filtre"
|
||||
"nothingFound": "Ingen torrents fundet"
|
||||
}
|
||||
},
|
||||
"lineChart": {
|
||||
"title": "Nuværende netværkstrafik",
|
||||
"title": "Nuværende downloadhastighed",
|
||||
"download": "Download: {{download}}",
|
||||
"upload": "Upload: {{upload}}",
|
||||
"timeSpan": "{{seconds}} sekunder siden",
|
||||
@@ -54,28 +32,9 @@
|
||||
},
|
||||
"errors": {
|
||||
"noDownloadClients": {
|
||||
"title": "Ingen understøttede Torrent-klienter fundet!",
|
||||
"text": "Tilføj en understøttet Torrent-klient for at se dine aktuelle downloads"
|
||||
},
|
||||
"generic": {
|
||||
"title": "Der opstod en uventet fejl",
|
||||
"text": "Kan ikke kommunikere med dine Torrent-klienter. Tjek venligst din konfiguration"
|
||||
}
|
||||
},
|
||||
"loading": {
|
||||
"title": "Indlæser",
|
||||
"description": "Etablerer en forbindelse"
|
||||
},
|
||||
"popover": {
|
||||
"introductionPrefix": "Administreret af",
|
||||
"metrics": {
|
||||
"queuePosition": "Placering i køen - {{position}}",
|
||||
"progress": "Fremskridt - {{progress}}%",
|
||||
"totalSelectedSize": "I alt - {{totalSize}}",
|
||||
"state": "Status - {{state}}",
|
||||
"ratio": "Ratio -",
|
||||
"completed": "Fuldført"
|
||||
"title": "Ingen understøttede downloadklienter fundet!",
|
||||
"text": "Tilføj en downloadtjeneste for at se dine aktuelle downloads"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Usenet",
|
||||
"description": "Tillader dig at se og administrere din Usenet instans."
|
||||
"description": "Tillader dig at se din usenet (Sabnzbd eller NZBGet) kø og historie, pause og genoptage downloads"
|
||||
},
|
||||
"card": {
|
||||
"errors": {
|
||||
"noDownloadClients": {
|
||||
"title": "Ingen understøttede downloadklienter fundet!",
|
||||
"text": "Tilføj en understøttet Usenet Download Client for at se dine aktuelle downloads"
|
||||
"text": "Tilføj en downloadtjeneste for at se dine aktuelle downloads"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -46,4 +46,4 @@
|
||||
},
|
||||
"paused": "På pause"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Video Stream",
|
||||
"description": "Indlejr en video stream eller video fra et kamera eller et website",
|
||||
"settings": {
|
||||
"title": "Indstillinger for video stream widget",
|
||||
"FeedUrl": {
|
||||
"label": "Feed URL"
|
||||
},
|
||||
"autoPlay": {
|
||||
"label": "Auto-afspilning"
|
||||
},
|
||||
"muted": {
|
||||
"label": "Slå lyden fra"
|
||||
},
|
||||
"controls": {
|
||||
"label": "Video afspilnings kontrol"
|
||||
}
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"invalidStream": "Ugyldig stream"
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,11 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Vejr",
|
||||
"description": "Viser de aktuelle vejroplysninger for en bestemt placering.",
|
||||
"description": "Se det aktuelle vejr på din placering",
|
||||
"settings": {
|
||||
"title": "Indstillinger for vejr widget",
|
||||
"displayInFahrenheit": {
|
||||
"label": "Vis i Fahrenheit"
|
||||
},
|
||||
"displayCityName": {
|
||||
"label": "Vis bynavn"
|
||||
},
|
||||
"location": {
|
||||
"label": "Vejr lokation"
|
||||
}
|
||||
@@ -32,6 +28,5 @@
|
||||
"thunderstormWithHail": "Tordenvejr med hagl",
|
||||
"unknown": "Ukendt"
|
||||
}
|
||||
},
|
||||
"error": "Der er opstået en fejl"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,30 +9,6 @@
|
||||
"configTip": "Upload din konfigurationsfil ved at trække og slippe den på siden!"
|
||||
},
|
||||
"credits": {
|
||||
"madeWithLove": "Lavet med ❤️ af @",
|
||||
"thirdPartyContent": "Se indhold fra tredjepart",
|
||||
"thirdPartyContentTable": {
|
||||
"dependencyName": "Afhængighed",
|
||||
"dependencyVersion": "Version"
|
||||
}
|
||||
},
|
||||
"grow": "Forøg gitteret (udnyt al pladsen)",
|
||||
"layout": {
|
||||
"preview": {
|
||||
"title": "Forhåndsvisning",
|
||||
"subtitle": "Ændringer vil blive gemt automatisk"
|
||||
},
|
||||
"divider": "Layout indstillinger",
|
||||
"main": "Primær",
|
||||
"sidebar": "Sidepanel",
|
||||
"cannotturnoff": "Kan ikke slås fra",
|
||||
"dashboardlayout": "Dashboard layout",
|
||||
"enablersidebar": "Aktivér højre sidepanel",
|
||||
"enablelsidebar": "Aktiver venstre sidebar",
|
||||
"enablesearchbar": "Aktiver søgelinje",
|
||||
"enabledocker": "Aktiver integration af docker",
|
||||
"enableping": "Aktiver pings",
|
||||
"enablelsidebardesc": "Valgfrit. Kan kun bruges til apps og integrationer",
|
||||
"enablersidebardesc": "Valgfrit. Kan kun bruges til apps og integrationer"
|
||||
"madeWithLove": "Lavet med ❤️ af @"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"disablePulse": {
|
||||
"label": "Deaktiver ping-puls",
|
||||
"description": "Som standard vil ping-indikatorerne i Homarr pulsere. Det kan være irriterende. Denne skyder vil deaktivere animationen"
|
||||
},
|
||||
"replaceIconsWithDots": {
|
||||
"label": "Udskift ping-prikker med ikoner",
|
||||
"description": "For farveblinde brugere kan ping-prikker være uigenkendelige. Dette vil erstatte indikatorer med ikoner"
|
||||
},
|
||||
"alert": "Mangler du noget? Vi vil med glæde udvide tilgængeligheden af Homarr"
|
||||
}
|
||||
@@ -1,6 +1,3 @@
|
||||
{
|
||||
"colors": "Farver",
|
||||
"suffix": "{{color}} farve",
|
||||
"primary": "Primær",
|
||||
"secondary": "Sekundær"
|
||||
"suffix": "{{color}} farve"
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"text": "Tilpasninger giver dig mulighed for at konfigurere og justere din oplevelse med Homarr til dine præferencer.",
|
||||
"accordeon": {
|
||||
"layout": {
|
||||
"name": "Layout",
|
||||
"description": "Aktiver og deaktiver elementer på din header og dashboard felter"
|
||||
},
|
||||
"gridstack": {
|
||||
"name": "Gridstack",
|
||||
"description": "Tilpas adfærd og kolonner i dit dashboardområde"
|
||||
},
|
||||
"pageMetadata": {
|
||||
"name": "Metadata om siden",
|
||||
"description": "Juster titler, logo og PWA"
|
||||
},
|
||||
"appereance": {
|
||||
"name": "Udseende",
|
||||
"description": "Tilpas baggrunden, farverne og appenes udseende"
|
||||
},
|
||||
"accessibility": {
|
||||
"name": "Hjælpefunktioner",
|
||||
"description": "Konfigurer Homarr for deaktiverede og handicappede brugere"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"columnsCount": {
|
||||
"labelPreset": "Kolonner i {{size}} størrelse",
|
||||
"descriptionPreset": "Antal kolonner, når skærmen er mindre end {{pixels}} pixel bred",
|
||||
"descriptionExceedsPreset": "Antal kolonner, når skærmstørrelsen er større end {{pixels}} pixels"
|
||||
},
|
||||
"unsavedChanges": "Du har ændringer, der ikke er gemt. Klik på knappen Anvend ændringer nedenfor for at anvende og gemme.",
|
||||
"applyChanges": "Anvend ændringer",
|
||||
"defaultValues": "Standardværdier"
|
||||
}
|
||||
@@ -1,28 +1,20 @@
|
||||
{
|
||||
"pageTitle": {
|
||||
"label": "Sidetitel",
|
||||
"description": "Dashboardets titel øverst til venstre"
|
||||
},
|
||||
"metaTitle": {
|
||||
"label": "Metatitel",
|
||||
"description": "Den titel, der vises i fanen i din browser"
|
||||
"placeholder": "Homarr 🦞"
|
||||
},
|
||||
"logo": {
|
||||
"label": "Logo",
|
||||
"description": "Logoet, der vises øverst til venstre"
|
||||
"label": "Logo"
|
||||
},
|
||||
"favicon": {
|
||||
"label": "Favicon",
|
||||
"description": "Det ikon, der vises i fanen i din browser"
|
||||
"label": "Favicon"
|
||||
},
|
||||
"background": {
|
||||
"label": "Baggrund"
|
||||
},
|
||||
"customCSS": {
|
||||
"label": "Tilpasset CSS",
|
||||
"description": "Yderligere, tilpasse dit dashboard ved hjælp af CSS, anbefales kun til erfarne brugere",
|
||||
"placeholder": "Brugerdefineret CSS vil blive anvendt sidst",
|
||||
"applying": "Anvender CSS..."
|
||||
"placeholder": "Brugerdefineret CSS vil blive eksekveret som det sidste"
|
||||
},
|
||||
"buttons": {
|
||||
"submit": "Indsend"
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"title": "Rengøring af cache",
|
||||
"selector": {
|
||||
"label": "Vælg den eller de cacher, der skal ryddes",
|
||||
"data": {
|
||||
"ping": "Ping-forespørgsler",
|
||||
"repositoryIcons": "Fjern/Lokale ikoner",
|
||||
"calendar&medias": "Medier fra kalenderen",
|
||||
"weather": "Vejrdata"
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"notificationTitle": "Cache ryddet",
|
||||
"clearAll": {
|
||||
"text": "Tøm alle caches",
|
||||
"notificationMessage": "Alle cach er blevet ryddet"
|
||||
},
|
||||
"clearSelect": {
|
||||
"text": "Ryd valgte forespørgsler",
|
||||
"notificationMessageSingle": "Cache for {{value}} er blevet tømt",
|
||||
"notificationMessageMulti": "Cache for {{values}} er blevet ryddet"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,45 +1,20 @@
|
||||
{
|
||||
"configSelect": {
|
||||
"label": "Konfigurationsskifter",
|
||||
"description": "{{configCount}} konfigurationer er tilgængelige",
|
||||
"loadingNew": "Indlæser din konfiguration...",
|
||||
"pleaseWait": "Vent venligst, indtil din nye konfiguration er indlæst!"
|
||||
"label": "Konfigurations indlæser"
|
||||
},
|
||||
"modal": {
|
||||
"copy": {
|
||||
"title": "Vælg navnet på din nye konfiguration",
|
||||
"form": {
|
||||
"configName": {
|
||||
"label": "Konfigurationens navn",
|
||||
"validation": {
|
||||
"required": "Konfigurationsnavn er påkrævet",
|
||||
"notUnique": "Konfigurationsnavnet er allerede i brug"
|
||||
},
|
||||
"placeholder": "Dit nye konfigurationsnavn"
|
||||
},
|
||||
"submitButton": "Bekræft"
|
||||
"title": "Vælg navnet på din nye konfiguration",
|
||||
"form": {
|
||||
"configName": {
|
||||
"label": "Konfigurationens navn",
|
||||
"placeholder": "Dit nye konfigurationsnavn"
|
||||
},
|
||||
"events": {
|
||||
"configSaved": {
|
||||
"title": "Konfigurationen gemt",
|
||||
"message": "Konfigurationen gemt som {{configName}}"
|
||||
},
|
||||
"configCopied": {
|
||||
"title": "Konfigurationen kopieret",
|
||||
"message": "Konfigurationen kopieret som {{configName}}"
|
||||
},
|
||||
"configNotCopied": {
|
||||
"title": "Kan ikke kopiere konfigurationen",
|
||||
"message": "Din konfiguration blev ikke kopieret som {{configName}}"
|
||||
}
|
||||
}
|
||||
"submitButton": "Bekræft"
|
||||
},
|
||||
"confirmDeletion": {
|
||||
"title": "Bekræft sletning af din konfiguration",
|
||||
"warningText": "Du er ved at slette '<b>{{configName}}</b>'",
|
||||
"text": "Bemærk venligst, at sletningen ikke kan fortrydes, og at dine data vil gå tabt permanent. Når du klikker på denne knap, slettes filen permanent fra din disk. Sørg for at oprette en passende sikkerhedskopi af din konfiguration.",
|
||||
"buttons": {
|
||||
"confirm": "Ja, slet '<b>{{configName}}</b>'"
|
||||
"events": {
|
||||
"configSaved": {
|
||||
"title": "Konfigurationen gemt",
|
||||
"message": "Konfigurationen gemt som {{configName}}"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -55,10 +30,6 @@
|
||||
"deleteFailed": {
|
||||
"title": "Sletning af konfiguration mislykkedes",
|
||||
"message": "Sletning af konfiguration mislykkedes"
|
||||
},
|
||||
"deleteFailedDefaultConfig": {
|
||||
"title": "Standardkonfiguration kan ikke slettes",
|
||||
"message": "Konfigurationen blev ikke slettet fra filsystemet"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -75,12 +46,10 @@
|
||||
}
|
||||
},
|
||||
"accept": {
|
||||
"title": "Upload af konfiguration",
|
||||
"text": "Træk filer hertil for at uploade en konfiguration. Kun understøttelse af JSON."
|
||||
},
|
||||
"reject": {
|
||||
"title": "Træk og slip Upload afvist",
|
||||
"text": "Dette filformat understøttes ikke. Upload venligst kun JSON."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"menu": {
|
||||
"toggle": "Skift redigeringstilstand",
|
||||
"enable": "Aktiver redigeringstilstand",
|
||||
"disable": "Deaktiver redigeringstilstand"
|
||||
},
|
||||
"form": {
|
||||
"label": "Redigér adgangskode",
|
||||
"message": "For at skifte til redigeringstilstand skal du indtaste den adgangskode, du indtastede i miljøvariablen med navnet <Code>EDIT_MODE_PASSWORD</Code> . Hvis den ikke er angivet, kan du ikke slå redigeringstilstand til og fra.",
|
||||
"submit": "Indsend"
|
||||
},
|
||||
"notification": {
|
||||
"success": {
|
||||
"title": "Succes",
|
||||
"message": "Det lykkedes at skifte redigeringstilstand og genindlæser siden..."
|
||||
},
|
||||
"error": {
|
||||
"title": "Fejl",
|
||||
"message": "Kunne ikke skifte til redigeringstilstand, prøv venligst igen."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +1,3 @@
|
||||
{}
|
||||
{
|
||||
"title": "Modul aktivator"
|
||||
}
|
||||
@@ -1,20 +1,14 @@
|
||||
{
|
||||
"title": "Søgemaskine",
|
||||
"configurationName": "Konfiguration af søgemaskiner",
|
||||
"custom": "Brugerdefineret",
|
||||
"tips": {
|
||||
"generalTip": "Der er flere præfikser, du kan bruge! Hvis du tilføjer disse foran din forespørgsel, filtreres resultaterne. !s (Web), !t (Torrents), !y (YouTube) og !m (Media).",
|
||||
"generalTip": "Brug præfikserne !yt og !t foran din forespørgsel for at søge på YouTube eller efter en Torrent.",
|
||||
"placeholderTip": "%s kan bruges som en pladsholder for forespørgslen."
|
||||
},
|
||||
"customEngine": {
|
||||
"title": "Brugerdefineret søgemaskine",
|
||||
"label": "Forespørgsels URL",
|
||||
"placeholder": "Brugerdefineret forespørgsels URL"
|
||||
},
|
||||
"searchNewTab": {
|
||||
"label": "Åben søgeresultater i en ny fane"
|
||||
},
|
||||
"searchEnabled": {
|
||||
"label": "Søgning aktiveret"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"label": "Placer widgets til venstre"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"noEntries": {
|
||||
"title": "Ingen poster",
|
||||
"text": "Brug knapperne nedenfor til at tilføje flere elementer"
|
||||
},
|
||||
"buttonAdd": "Tilføj"
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"card": {
|
||||
"title": "Ups, der opstod en fejl!",
|
||||
"buttons": {
|
||||
"details": "Detaljer",
|
||||
"tryAgain": "Prøv igen"
|
||||
}
|
||||
},
|
||||
"modal": {
|
||||
"text": "",
|
||||
"label": "Din fejl",
|
||||
"reportButton": "Rapportér denne fejl"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"title": "Willkommen zurück!",
|
||||
"text": "Bitte geben Sie Ihr Kennwort ein",
|
||||
"text": "Bitte geben Sie das Passwort ein",
|
||||
"form": {
|
||||
"fields": {
|
||||
"password": {
|
||||
@@ -18,10 +18,10 @@
|
||||
"message": "Ihr Passwort wird geprüft..."
|
||||
},
|
||||
"correct": {
|
||||
"title": "Anmeldung erfolgreich, Weiterleitung..."
|
||||
"title": "Passwort korrekt, sie werden weitergeleitet..."
|
||||
},
|
||||
"wrong": {
|
||||
"title": "Das von dir eingegebene Passwort ist nicht korrekt. Bitte versuche es noch mal."
|
||||
"title": "Das Passwort ist falsch, bitte versuchen Sie es erneut."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,40 +1,11 @@
|
||||
{
|
||||
"save": "Speichern",
|
||||
"about": "Über",
|
||||
"cancel": "Abbrechen",
|
||||
"close": "Schließen",
|
||||
"delete": "Löschen",
|
||||
"ok": "OK",
|
||||
"edit": "Bearbeiten",
|
||||
"enabled": "Aktiviert",
|
||||
"disabled": "Deaktiviert",
|
||||
"enableAll": "Alle aktivieren",
|
||||
"disableAll": "Alles deaktivieren",
|
||||
"version": "Version",
|
||||
"changePosition": "Position wechseln",
|
||||
"remove": "Entfernen",
|
||||
"removeConfirm": "Sind Sie sicher, dass Sie {{item}} entfernen möchten?",
|
||||
"createItem": "+ Erstelle {{item}}",
|
||||
"sections": {
|
||||
"settings": "Einstellungen",
|
||||
"dangerZone": "Gefahrenzone"
|
||||
},
|
||||
"secrets": {
|
||||
"apiKey": "API Schlüssel",
|
||||
"username": "Benutzername",
|
||||
"password": "Passwort"
|
||||
"actions": {
|
||||
"save": "Speichern"
|
||||
},
|
||||
"tip": "Tipp: ",
|
||||
"time": {
|
||||
"seconds": "Sekunden",
|
||||
"minutes": "Minuten",
|
||||
"hours": "Stunden"
|
||||
},
|
||||
"loading": "Wird geladen...",
|
||||
"breakPoints": {
|
||||
"small": "Klein",
|
||||
"medium": "Mittel",
|
||||
"large": "Groß"
|
||||
},
|
||||
"seeMore": "Mehr Informationen..."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,6 +113,12 @@
|
||||
"advancedOptions": {
|
||||
"title": "Erweiterte Optionen",
|
||||
"form": {
|
||||
"httpStatusCodes": {
|
||||
"label": "HTTP Status Nummern",
|
||||
"placeholder": "Gültige Statuscodes auswählen",
|
||||
"clearButtonLabel": "Auswahl löschen",
|
||||
"nothingFound": "Nichts gefunden"
|
||||
},
|
||||
"openServiceInNewTab": {
|
||||
"label": "Service in einem neuen Tab öffnen"
|
||||
},
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"modals": {
|
||||
"blockedPopups": {
|
||||
"title": "Popups blockiert",
|
||||
"text": "Ihr Browser hat Homarr den Zugriff auf die API blockiert. Dies wurde wahrscheinlich durch einen AdBlocker oder nicht zugelassene Berechtigungen ausgelöst. Homarr kann die Berechtigungen nicht automatisch anfragen.",
|
||||
"list": {
|
||||
"browserPermission": "Klicken Sie auf das Icon neben der URL und prüfen Sie die Berechtigungen: Popups und Windows zulassen",
|
||||
"adBlockers": "Deaktivieren Sie Werbeblocker und Sicherheitstools in Ihrem Browser",
|
||||
"otherBrowser": "Versuchen Sie es mit einem anderen Browser"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"category": {
|
||||
"openAllInNewTab": "Alle in einem neuen Tab öffnen"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"moveUp": "Nach oben bewegen",
|
||||
"moveDown": "Nach unten bewegen",
|
||||
"addCategory": "Kategorie {{location}} hinzufügen",
|
||||
"addAbove": "oben",
|
||||
"addBelow": "unten"
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"modal": {
|
||||
"title": "Neue Kachel hinzufügen",
|
||||
"text": "Kacheln sind das Hauptelement von Homarr. Sie werden verwendet, um Ihre Anwendungen und andere Informationen anzuzeigen. Sie können so viele Kacheln hinzufügen, wie Sie möchten."
|
||||
},
|
||||
"widgetDescription": "Widgets interagieren mit Ihren Anwendungen, um Ihnen mehr Kontrolle über sie zu geben. Sie erfordern in der Regel eine zusätzliche Konfiguration vor der Verwendung.",
|
||||
"goBack": "Zurück auf die vorherige Seite",
|
||||
"actionIcon": {
|
||||
"tooltip": "Kachel hinzufügen"
|
||||
},
|
||||
"apps": "Apps",
|
||||
"app": {
|
||||
"defaultName": "Ihre Apps"
|
||||
},
|
||||
"widgets": "Widgets",
|
||||
"categories": "Kategorien",
|
||||
"category": {
|
||||
"newName": "Name der Kategorie",
|
||||
"defaultName": "Neue Kategorie",
|
||||
"created": {
|
||||
"title": "Kategorie erstellt",
|
||||
"message": "Die Kategorie \"{{name}}\" wurde erstellt"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"title": "Seite nicht gefunden",
|
||||
"text": "Diese Seite konnte nicht gefunden werden. Die URL für diese Seite ist möglicherweise abgelaufen, die URL ist ungültig oder Sie verfügen nicht über die erforderlichen Berechtigungen für den Zugriff auf diese Ressource.",
|
||||
"button": "Gehe zu Home"
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"description": "Im Bearbeitungsmodus können Sie Kacheln anpassen und Anwendungen konfigurieren. Die Änderungen werden erst gespeichert, wenn Sie den Bearbeitungsmodus verlassen.",
|
||||
"button": {
|
||||
"disabled": "Bearbeitungsmodus aktivieren",
|
||||
"enabled": "Speichern und Beenden"
|
||||
},
|
||||
"popover": {
|
||||
"title": "Der Bearbeitungsmodus ist für die Kategorie <1>{{size}}</1> aktiviert",
|
||||
"text": "Sie können Ihre Apps jetzt anpassen und konfigurieren. Änderungen werden <strong>nicht gespeichert</strong> bis Sie den Bearbeitungsmodus verlassen"
|
||||
},
|
||||
"unloadEvent": "Verlassen Sie den Bearbeitungsmodus, um Ihre Änderungen zu speichern"
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"title": "{{position}} Seitenleiste"
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"description": "Homarr ist ein <strong>schlankes</strong> und <strong>modernes</strong> Dashboard, das alle Ihre Apps und Dienste auf Knopfdruck zur Verfügung stellt. Mittels Homarr können Sie von einem einzigen Ort aus auf alles zugreifen und steuern. Es lässt sich nahtlos in die von Ihnen bevorzugten Apps integrieren und versorgt Sie mit wertvollen Informationen und der vollständige Kontrolle. Die Installation ist ein Kinderspiel, und es werden eine breite Palette von Konfigurations unterstützt.",
|
||||
"contact": "Haben Sie Probleme oder Fragen? Nehmen Sie Kontakt mit uns auf!",
|
||||
"addToDashboard": "Zum Dashboard hinzufügen",
|
||||
"tip": "Mod bezieht sich auf die Modifikator Taste, d. h. Strg und Befehl/Super/Windows-Taste",
|
||||
"key": "Kurzbefehl Taste",
|
||||
"action": "Aktion",
|
||||
"keybinds": "Tastenbelegung",
|
||||
"documentation": "Dokumentation",
|
||||
"actions": {
|
||||
"toggleTheme": "Umschalten zwischen Hell- und Dunkelmodus",
|
||||
"focusSearchBar": "Suchleiste fokussieren",
|
||||
"openDocker": "Docker Widget öffnen",
|
||||
"toggleEdit": "Bearbeitungsmodus umschalten"
|
||||
},
|
||||
"metrics": {
|
||||
"configurationSchemaVersion": "Version des Konfigurationsschemas",
|
||||
"configurationsCount": "Verfügbare Konfigurationen",
|
||||
"version": "Version",
|
||||
"nodeEnvironment": "Node-Umgebung",
|
||||
"i18n": "Geladene I18n Übersetzungs Namensräume",
|
||||
"locales": "Konfigurierte I18n Sprachumgebungen",
|
||||
"experimental_disableEditMode": "<b>EXPERIMENTAL</b>: Bearbeitungsmodus deaktivieren"
|
||||
},
|
||||
"version": {
|
||||
"new": "Neu: {{newVersion}}",
|
||||
"dropdown": "Version {{newVersion}} ist verfügbar! Aktuelle Version ist {{currentVersion}}"
|
||||
}
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
{
|
||||
"tabs": {
|
||||
"general": "Allgemein",
|
||||
"behaviour": "Verhalten",
|
||||
"network": "Netzwerk",
|
||||
"appearance": "Aussehen",
|
||||
"integration": "Integration"
|
||||
},
|
||||
"general": {
|
||||
"appname": {
|
||||
"label": "Anwendungsname",
|
||||
"description": "Wird für die Anzeige der App auf dem Dashboard verwendet."
|
||||
},
|
||||
"internalAddress": {
|
||||
"label": "Interne Adresse",
|
||||
"description": "Interne IP-Adresse der Anwendung."
|
||||
},
|
||||
"externalAddress": {
|
||||
"label": "Externe Adresse",
|
||||
"description": "URL, die beim Anklicken der App geöffnet wird."
|
||||
}
|
||||
},
|
||||
"behaviour": {
|
||||
"isOpeningNewTab": {
|
||||
"label": "In neuem Tab öffnen",
|
||||
"description": "Öffnen Sie die App in einer neuen Registerkarte, anstatt in der aktuellen Registerkarte."
|
||||
},
|
||||
"tooltipDescription": {
|
||||
"label": "Beschreibung der Anwendung",
|
||||
"description": "Dieser von Ihnen eingegebene Text wird angezeigt, wenn Sie den Mauszeiger über Ihre App bewegen.\nVerwenden Sie diesen Text, um den Nutzern mehr Informationen über Ihre App zu geben, oder lassen Sie ihn leer, um nichts anzuzeigen."
|
||||
},
|
||||
"customProtocolWarning": "Verwendung eines nicht standardmäßigen Protokolls. Dies kann vorinstallierte Anwendungen erfordern und Sicherheitsrisiken einbringen. Stellen Sie sicher, dass Ihre Adresse sicher und vertrauenswürdig ist."
|
||||
},
|
||||
"network": {
|
||||
"statusChecker": {
|
||||
"label": "Statusprüfer",
|
||||
"description": "Prüft, ob Ihre Anwendung mittels einer einfachen HTTP(S)-Anfrage erreichbar ist."
|
||||
},
|
||||
"statusCodes": {
|
||||
"label": "HTTP Statuscodes",
|
||||
"description": "Die HTTP-Statuscodes, die als online angesehen werden."
|
||||
}
|
||||
},
|
||||
"appearance": {
|
||||
"icon": {
|
||||
"label": "App Symbol",
|
||||
"description": "Beginnen Sie zu tippen, um ein Symbol zu finden. Sie können auch eine Bild-URL einfügen, um ein benutzerdefiniertes Symbol zu verwenden.",
|
||||
"autocomplete": {
|
||||
"title": "Die Suche ergab keine Treffer",
|
||||
"text": "Versuchen Sie, einen spezifischeren Suchbegriff zu verwenden. Wenn Sie das gewünschte Symbol nicht finden können, fügen Sie die obige Bild-URL für ein benutzerdefiniertes Symbol ein"
|
||||
},
|
||||
"noItems": {
|
||||
"title": "Lade externe Icons",
|
||||
"text": "Dies kann einige Sekunden dauern…"
|
||||
}
|
||||
},
|
||||
"appNameFontSize": {
|
||||
"label": "Schriftgröße für App Namen",
|
||||
"description": "Legen Sie die Schriftgröße für die Anzeige des App-Namens auf der Kachel fest."
|
||||
},
|
||||
"appNameStatus": {
|
||||
"label": "App-Namensstatus",
|
||||
"description": "Wählen Sie, wo der Titel angezeigt werden soll, wenn überhaupt.",
|
||||
"dropdown": {
|
||||
"normal": "Titel nur auf Kachel anzeigen",
|
||||
"hover": "Titel nur bei Halten des Mauszeigers über den Tooltip anzeigen",
|
||||
"hidden": "Nicht anzeigen"
|
||||
}
|
||||
},
|
||||
"positionAppName": {
|
||||
"label": "Position des App-Namen",
|
||||
"description": "Position des App-Namens in Relation zum Symbol.",
|
||||
"dropdown": {
|
||||
"top": "Oben",
|
||||
"right": "Rechts",
|
||||
"bottom": "Unten",
|
||||
"left": "Links"
|
||||
}
|
||||
},
|
||||
"lineClampAppName": {
|
||||
"label": "App-Namen Linienumbruch",
|
||||
"description": "Legt fest, auf wie viele Zeilen Ihr Titel maximal passen soll. Setzen Sie 0 für unbegrenzt."
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"type": {
|
||||
"label": "Integrations-Konfiguration",
|
||||
"description": "Die Integrationskonfiguration, die für die Verbindung mit Ihrer Anwendung verwendet wird.",
|
||||
"placeholder": "Integration auswählen",
|
||||
"defined": "Definiert",
|
||||
"undefined": "Nicht definiert",
|
||||
"public": "Öffentlich sichtbar",
|
||||
"private": "Privat",
|
||||
"explanationPrivate": "Ein private Phrase wird nur einmal an den Server gesendet. Sobald Ihr Browser die Seite aktualisiert hat, wird es nie wieder gesendet.",
|
||||
"explanationPublic": "Ein öffentliche Phrase wird immer an den Client gesendet und ist über die API zugänglich. Es sollte keine vertraulichen Werte wie Benutzernamen, Passwörter, Token, Zertifikate und ähnliches enthalten!"
|
||||
},
|
||||
"secrets": {
|
||||
"description": "Um eine geheime Phrase zu aktualisieren, geben Sie einen Wert ein und klicken Sie auf Speichern. Um eine geheime Phrase zu entfernen, klicken Sie auf die Schaltfläche Löschen.",
|
||||
"warning": "Ihre Anmeldedaten dienen als Zugang für Homarr und sie sollten diese <strong>niemals</strong> an andere Personen weitergeben. Das Homarr-Team wird Sie niemals nach Ihren Zugangsdaten fragen. Stellen Sie sicher, dass sie ihre <strong>Zugangsdaten sicher aufbewahren und verwalten</strong>.",
|
||||
"clear": "Geheime Phrase löschen",
|
||||
"save": "Geheime Phrase speichern",
|
||||
"update": "Geheime Phrase ändern"
|
||||
}
|
||||
},
|
||||
"validation": {
|
||||
"popover": "Ihr Formular enthält ungültige Angaben, daher konnte es nicht gespeichert werden. Bitte beseitigen Sie diese ungültigen Angaben und klicken Sie erneut auf diesen Button, um Ihre Änderungen zu speichern",
|
||||
"name": "Der Name ist erforderlich",
|
||||
"noUrl": "URL erforderlich",
|
||||
"invalidUrl": "Der Wert ist keine gültige URL",
|
||||
"noIconUrl": "Dieses Feld ist erforderlich",
|
||||
"noExternalUri": "Externe URL ist erforderlich",
|
||||
"invalidExternalUri": "Externe URL ist keine gültige URL"
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"xPosition": "Position der X-Achse",
|
||||
"width": "Breite",
|
||||
"height": "Höhe",
|
||||
"yPosition": "Position der Y-Achse",
|
||||
"zeroOrHigher": "0 oder höher",
|
||||
"betweenXandY": "Zwischen {{min}} und {{max}}"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"iconPicker": {
|
||||
"textInputPlaceholder": "Nach etwas suchen...",
|
||||
"searchLimitationTitle": "Begrenzt auf 30 Ergebnisse",
|
||||
"searchLimitationMessage": "Die Suchergebnisse wurden auf 30 begrenzt, da es zu viele Treffer gab"
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"popover": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
},
|
||||
"sizes": {
|
||||
"small": "Klein",
|
||||
"medium": "Mittel",
|
||||
"large": "Groß"
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"fallback": {
|
||||
"title": "Sie haben derzeit keine Werkzeuge"
|
||||
},
|
||||
"iconPicker": {
|
||||
"textInputPlaceholder": "Suche nach Symbolen...",
|
||||
"searchLimitationTitle": "Die Suche ist auf {{max}} Symbole beschränkt",
|
||||
"searchLimitationMessage": "Um die Suche schnell und effizient zu halten, ist die Suche auf {{max}} Symbole beschränkt. Verwenden Sie die Suche, um weitere Symbole zu finden"
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Lesezeichen",
|
||||
"description": "Zeigt eine statische Liste von Zeichenfolgen oder Links an",
|
||||
"settings": {
|
||||
"title": "Lesezeichen-Einstellungen",
|
||||
"name": {
|
||||
"label": "Widget Titel",
|
||||
"info": "Leer lassen, damit der Titel nicht angezeigt wird."
|
||||
},
|
||||
"items": {
|
||||
"label": "Elemente"
|
||||
},
|
||||
"layout": {
|
||||
"label": "Ansicht",
|
||||
"data": {
|
||||
"autoGrid": "Auto-Raster",
|
||||
"horizontal": "Horizontal",
|
||||
"vertical": "Vertikal"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"noneFound": {
|
||||
"title": "Lesezeichenliste leer",
|
||||
"text": "Neue Elemente im Bearbeitungsmodus zu dieser Liste hinzufügen"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"validation": {
|
||||
"length": "Die Länge muss zwischen {{shortest}} und {{longest}} liegen",
|
||||
"invalidLink": "Kein gültiger Link",
|
||||
"errorMsg": "Konnte nicht gespeichert werden, da Validierungsfehler aufgetreten sind. Bitte beachten Sie Ihre Eingaben"
|
||||
},
|
||||
"name": "Name",
|
||||
"url": "URL",
|
||||
"newTab": "In neuem Tab öffnen",
|
||||
"hideHostname": "Hostname ausblenden",
|
||||
"hideIcon": "Icon verbergen",
|
||||
"delete": "Löschen"
|
||||
}
|
||||
}
|
||||
@@ -1,35 +1,10 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Kalender",
|
||||
"description": "Zeigt einen Kalender mit anstehenden Veröffentlichungen von unterstützten Widgets an.",
|
||||
"description": "Ein Kalendermodul für die Anzeige der kommenden Veröffentlichungen. Es interagiert mit der Sonarr- und Radarr-API.",
|
||||
"settings": {
|
||||
"title": "Kalender Widget Einstellungen",
|
||||
"useSonarrv4": {
|
||||
"label": "Sonarr v4 API verwenden"
|
||||
},
|
||||
"sundayStart": {
|
||||
"label": "Wochenbeginn am Sonntag"
|
||||
},
|
||||
"radarrReleaseType": {
|
||||
"label": "Radarr Veröffentlichungs Typ",
|
||||
"data": {
|
||||
"inCinemas": "In Kinos",
|
||||
"physicalRelease": "Physisch",
|
||||
"digitalRelease": "Digital"
|
||||
}
|
||||
},
|
||||
"hideWeekDays": {
|
||||
"label": "Wochentage ausblenden"
|
||||
},
|
||||
"fontSize": {
|
||||
"label": "Schriftgröße",
|
||||
"data": {
|
||||
"xs": "Sehr Klein",
|
||||
"sm": "Klein",
|
||||
"md": "Mittel",
|
||||
"lg": "Groß",
|
||||
"xl": "Sehr Groß"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"buttons": {
|
||||
"play": "Wiedergabe",
|
||||
"request": "Anfrage"
|
||||
"play": "Abspielen",
|
||||
"request": "Anfragen"
|
||||
}
|
||||
}
|
||||