diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e41e2f3c0..0d8b33a33 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -33,6 +33,7 @@ body: options: # The below comment is used to insert a new version with on-release.yml #NEXT_VERSION# + - 1.73.0 - 1.72.0 - 1.71.0 - 1.70.0 diff --git a/AGENTS.md b/AGENTS.md index be1afe9fb..6c3d36da4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -46,6 +46,8 @@ homarr/ ├── tooling/ │ ├── typescript/ # Base tsconfig │ └── github/ # CI setup action +├── tools/ +│ └── homarr-dev/ # Go CLI for local and PR Docker images ├── development/ # Dev docker-compose (Redis, MySQL, PostgreSQL) ├── e2e/ # E2E test specs └── Dockerfile # Multi-stage production build @@ -68,6 +70,9 @@ When modifying user-facing code, you MUST also update the corresponding document ## Monorepo Commands - `pnpm dev` — Next.js app only +- `pnpm dev:cli -- dev` — run the developer CLI without installing a global binary +- `pnpm db:seed` — seed default database data explicitly +- `pnpm docker:dev:up` — start the Redis development service in the background - `pnpm dev:docs` — Docusaurus docs site only - `pnpm turbo build` — build all packages - `pnpm turbo build --filter=@homarr/docs` — build docs only @@ -81,3 +86,7 @@ When modifying user-facing code, you MUST also update the corresponding document - UI: Mantine (not Tailwind) — Tailwind is only used in docs app - Icons: @tabler/icons-react - Docs app can import from `@homarr/definitions` for shared types +- Run `pnpm dev:cli -- dev` to browse local `homarr:*` images and remote PR images. +- Run `pnpm dev:cli -- build ` from a Homarr checkout to build `homarr:` with rebuild provenance. +- Run `pnpm dev:cli -- build --pr ` to build a PR locally from a temporary checkout. +- Run Go checks from `tools/homarr-dev` with `go test ./...` and `go vet ./...`. diff --git a/apps/docs/docs/advanced/command-line/development/index.mdx b/apps/docs/docs/advanced/command-line/development/index.mdx new file mode 100644 index 000000000..cdbffc29a --- /dev/null +++ b/apps/docs/docs/advanced/command-line/development/index.mdx @@ -0,0 +1,41 @@ +# Developer Docker CLI + +The host-side developer CLI builds and runs local Homarr images and pull-request previews. Run it directly from a checkout with `pnpm dev:cli -- ...`; no shell-specific setup script is required. It is separate from the recovery CLI included in production images. + +To install an optional `homarr` binary, run `pnpm dev:cli:install` and make your Go bin directory available on `PATH`. GitHub CLI authentication is only needed for pull-request features. + +## Browse development images + +```bash +pnpm dev:cli -- +``` + +The main screen combines local `homarr:*` images with open pull requests and their GHCR preview status. Select an image to start or stop it, use `R` to build a remote pull request locally in the background or rebuild a local image, or use `p` to force a remote preview pull. Press `d` to switch to the instance dashboard and `d` again to return without losing the browser state. The explicit `dev` and `dash` subcommands start on either screen. + +A locally built PR image is folded into its remote PR row only when its recorded revision exactly matches the current GitHub head SHA. The row is marked `◆ local`, and starting it prefers that local image without a registry pull. Outdated local builds remain separate rows. Navigation and dashboard switching remain available during background builds. + +## Build images + +```bash +pnpm dev:cli -- build +pnpm dev:cli -- build --pr [name] +``` + +The first command builds the current checkout as `homarr:`. The pull-request form uses a depth-one clone in a temporary directory and defaults to `homarr:pr-` when `name` is omitted. + +## Rebuild images + +```bash +pnpm dev:cli -- rebuild +``` + +Images built by this CLI record their source checkout, revision, and optional pull-request number. Rebuild uses that provenance to select the original checkout or create a fresh temporary pull-request checkout. + +## Run images + +```bash +homarr run +homarr run --pr +``` + +Add `--detach` to run in the background, `--demo` to enable demo data, or repeat `--env KEY=VALUE` to provide additional environment variables. diff --git a/apps/docs/docs/advanced/development/getting-started.mdx b/apps/docs/docs/advanced/development/getting-started.mdx index 7c16813ba..e8f68ea6d 100644 --- a/apps/docs/docs/advanced/development/getting-started.mdx +++ b/apps/docs/docs/advanced/development/getting-started.mdx @@ -17,8 +17,9 @@ This guide will help you set up your development environment to start contributi - **Node.js (lts)**: You can download it from the [official website](https://nodejs.org/). - **pnpm (latest)**: You can install it by running `npm install -g pnpm`. - **Git**: You can download it from the [official website](https://git-scm.com/). -- **Docker or Docker Desktop**: You can download it from the [official website](https://www.docker.com/). -- **A GitHub account**: You can create one on the [official website](https://github.com/). +- **Docker or Docker Desktop**: Required for the Redis service and the developer Docker CLI. +- **Go 1.25+**: Required only for the developer Docker CLI. You can download it from the [official website](https://go.dev/). +- **GitHub CLI**: Required only for pull-request image features. Install it from the [official website](https://cli.github.com/), then authenticate with `gh auth login`. ### Setting up the project @@ -34,11 +35,11 @@ This guide will help you set up your development environment to start contributi 4. Install the dependencies with `pnpm install`. -5. Start redis by running `pnpm run docker:dev`. This will run a docker-compose file with a redis service. +5. Create `.env` from `.env.example`. In a POSIX shell, run `cp .env.example .env`; in PowerShell, run `Copy-Item .env.example .env`. Set `DB_URL` to an absolute path for your SQLite file. -6. Copy the `.env.example` file to `.env` and replace `DB_URL` with the full path you want to use for the sqlite database file. For example `DB_URL='C:\\Dev\\homarr\\packages\\db\\db.sqlite'` +6. Start Redis in the background with `pnpm docker:dev:up` if your development workflow needs it. -7. Run the migrations to create the sqlite db file with `pnpm run db:migration:sqlite:run`. +7. Create or update the database with `pnpm db:migration:sqlite:run`. This also seeds the default data. To run the seed explicitly later, use `pnpm db:seed`. 8. Start the development server with `pnpm dev` and wait for a message that says `✓ Ready in 10.7s` @@ -49,8 +50,15 @@ This guide will help you set up your development environment to start contributi #### During development - `pnpm dev`: Start the development server. +- `pnpm dev:cli -- dev`: Browse and run local images and remote pull-request images. +- `pnpm dev:cli -- build `: Build the current checkout as `homarr:`. +- `pnpm dev:cli -- build --pr `: Build a pull request locally from a temporary checkout. +- `pnpm dev:cli -- rebuild `: Rebuild a local image from its recorded checkout or pull request. +- `pnpm dev:cli:install`: Optionally install the developer CLI as a `homarr` binary. - `pnpm cli`: Run cli commands. - `pnpm db:migration:sqlite:run`: Run the migrations to create or update the sqlite db file. +- `pnpm db:seed`: Explicitly seed the default database data. +- `pnpm docker:dev:up`: Start the Redis development service in the background. - `pnpm db:migration:sqlite:generate`: Generate a new migration file for the sqlite db. Also works with `mysql`. - `pnpm db:studio`: Open a visual studio for the database. - `pnpm package:new`: Create a new package in the monorepo. @@ -63,6 +71,7 @@ This guide will help you set up your development environment to start contributi - `pnpm typecheck`: Run the typescript type checker. #### Building the project + - `pnpm build`: Build the project for production. -- `docker build -t homarr .`: Build a docker image for the project. -- `docker run -p 7575:7575 -e SECRET_ENCRYPTION_KEY='your_64_character_hex_string' homarr:latest`: Run the created docker image. \ No newline at end of file +- `pnpm dev:cli -- build `: Build a `homarr:` image and record its checkout for later rebuilds. +- `docker run -p 7575:7575 -e SECRET_ENCRYPTION_KEY='your_64_character_hex_string' homarr:`: Run the created docker image. diff --git a/apps/docs/docs/advanced/icons/index.mdx b/apps/docs/docs/advanced/icons/index.mdx index 2876559ac..b73d49e02 100644 --- a/apps/docs/docs/advanced/icons/index.mdx +++ b/apps/docs/docs/advanced/icons/index.mdx @@ -31,4 +31,4 @@ Icons that are high quality and printable ([SVG](https://wikipedia.org/wiki/Scal ### Using external icons If you don't find the icon you're looking for on Dashboard Icons or wish to use a different source, you can simply enter a URL that points to an icon. -It is important that the URL directly points to the file without any advertisements or elements around it. +Direct HTTP(S) image URLs are used as entered instead of being searched in the built-in repositories. It is important that the URL directly points to the file without any advertisements or elements around it. diff --git a/apps/docs/docs/getting-started/installation/helm.md b/apps/docs/docs/getting-started/installation/helm.md index 0d897ffa9..051c38955 100644 --- a/apps/docs/docs/getting-started/installation/helm.md +++ b/apps/docs/docs/getting-started/installation/helm.md @@ -2,9 +2,9 @@ homarr logo -![Version: 8.24.0](https://img.shields.io/badge/Version-8.24.0-informational?style=flat) +![Version: 8.25.0](https://img.shields.io/badge/Version-8.25.0-informational?style=flat) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat) -![AppVersion: v1.72.0](https://img.shields.io/badge/AppVersion-v1.72.0-informational?style=flat) +![AppVersion: v1.73.0](https://img.shields.io/badge/AppVersion-v1.73.0-informational?style=flat) A Helm chart to deploy homarr for Kubernetes @@ -429,7 +429,7 @@ All available values are listed on the [artifacthub](https://artifacthub.io/pack | httproute.rules[0].matches[0].path.value | string | `"/"` | Path value to match | | image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | | image.repository | string | `"ghcr.io/homarr-labs/homarr"` | Image repository | -| image.tag | string | `"v1.72.0"` | Overrides the image tag whose default is the chart appVersion | +| image.tag | string | `"v1.73.0"` | Overrides the image tag whose default is the chart appVersion | | imagePullSecrets | list | `[]` | Secrets for Docker registry | | ingress.annotations | object | `{}` | Ingress annotations | | ingress.enabled | bool | `false` | Enable ingress | diff --git a/apps/docs/docs/management/apps/index.mdx b/apps/docs/docs/management/apps/index.mdx index c5c0a2ad7..7c84df588 100644 --- a/apps/docs/docs/management/apps/index.mdx +++ b/apps/docs/docs/management/apps/index.mdx @@ -7,8 +7,8 @@ tags: - Ping --- -Apps are the building blocks of your Homarr board. -Most of the time they are a simple link to a website, but used on your board they also support a simple ping to check if your service is up. +Apps are the building blocks of your Homarr board. +Most of the time they are a simple link to a website, but used on your board they also support a simple ping to check if your service is up. Apps are used in the bookmark and app widget. ## Create an app @@ -27,8 +27,8 @@ The name must be at least one character long and can be chosen freely. ### Icon URL -This is the URL to the icon that will be displayed on the app widget. -It can be a url to an image in the internet, one from the included icon repositories or a local file uploaded through the upload button. +This is the URL to the icon that will be displayed on the app widget. +You can paste a direct HTTP(S) URL to an image, search the included icon repositories by name, or upload a local file through the upload button. Direct image URLs are used as entered and are not searched in the icon repositories. ![Icon URL](./img/app-icon-url.png) @@ -40,14 +40,17 @@ An optional description that can be shown as tooltip on the app widget. The URL to the website you want to link to. Clicking on the app widget or bookmark will open this URL. +You can also use custom URI schemes such as `vscode://file/path`, `microsoft-edge:https://example.com`, or `myapp://open` to link to local applications or third-party programs. We trust that you know what you are doing — only `javascript:` URIs are blocked for security reasons. + ### Ping URL -When you want to use another url for the simple status check you can set it here. +When you want to use another url for the simple status check you can set it here. This will allow you to set a different URL for the ping than the URL that is opened when clicking on the app widget. It's useful when you want to ping the service internally for example with a custom ip but open the website externally. +Note that the ping URL only accepts `http://` and `https://` URLs — custom URI schemes are not supported for pings. ## List of apps On the apps management page you find all apps that exist in your Homarr instance. You can edit and delete them. -![Apps list](./img/app-list.png) \ No newline at end of file +![Apps list](./img/app-list.png) diff --git a/apps/docs/docs/management/settings/index.mdx b/apps/docs/docs/management/settings/index.mdx index d7705e61a..016d56d10 100644 --- a/apps/docs/docs/management/settings/index.mdx +++ b/apps/docs/docs/management/settings/index.mdx @@ -9,97 +9,125 @@ tags: --- # Settings -The settings page has a few options that will be applied to the entire Homarr application. -They may require a full page reload for changes to apply. + +The settings page applies options to the whole Homarr application. +Some changes need a full page reload before they take effect. ## Analytics -By default, Homarr is collecting anonymous analytics to identify issues and prioritize bugfixes and improvements. -The data is never shared with any third-parties and is fully GDPR & CCPA compliant. -The software being used is [Umami Analytics](https://umami.is/) which is fully open source. -The main server software can be found [here](https://github.com/umami-software/umami) and [this node library](https://github.com/umami-software/node) to perform server side calls to the API. -A full list of the collected data by default can be found here: https://umami.is/docs/metric-definitions. +Homarr uses [PostHog](https://posthog.com/) to collect anonymous usage data. +We collect this data to see what features people ACTUALLY use. +We use this data to decide where we spend our development time. -We understand that you might not want Homarr to communicate with our services. -By unchecking the ``Send anonymous analytics`` checkbox and reloading the full page, all communication by Umami will be disabled and no data will be collected. -If you are paranoid, you can permanently block ``umami.homarr.dev`` from your DNS / firewall. +We do not sell the data. We do not share the data with third parties. +The data does not contain personal information and does not identify you or your installation. -Additionally, you opt in to more data collection to help us provide more useful data. +Homarr sends the data to our own PostHog server at `https://hog.homarr.dev`. +The server sends the data once a week and when the server starts. -### Integration data -Enabling this optional data will send the types of integrations (e.g. SABnzbd, Sonarr, ...) and how many you have configured of them. -This will not include any URLs, names, secrets, errors and others. This is disabled by default. +### What we collect -### Widget data -Enabling this optional data will send the types of widgets (e.g. downloads, media streams, iframe, ...) and how many you have configured of them. -This will not include any URLs, names, secrets, errors and others. This is disabled by default. +Homarr collects technical data about your installation: -### Users data -Enabling this optional data will send the count of users and whether you activated SSO. -This will not include any usernames, passwords, emails, URLs, authentication flows or client IDs. -This is disabled by default. +- Your Homarr version +- Your database type (SQLite, MySQL, or PostgreSQL) +- Whether Docker or Kubernetes is enabled +- Your enabled authentication providers +- Your operating system and CPU architecture +- Your default language +- The number of boards, apps, sections, layouts, users, groups, search engines, icon repositories, cron jobs, API keys, invites, sessions, and accounts +- The integration types you use and how many you have of each (for example, Sonarr or SABnzbd) +- The widget types you use and how many you have of each + +Homarr does NOT collect: + +- URLs +- Names +- Usernames, emails, or passwords +- Integration secrets or API keys +- Error messages or logs +- Any data that can identify you + +Each installation gets a random ID. We use this ID only to count unique installations. We cannot use this ID to identify you. + +Homarr does not use cookies for analytics. Homarr does not track page views automatically. Homarr only sends the data listed above. + +### Disable analytics + +Analytics are enabled by default. To disable analytics: + +1. Open the Settings page. +2. Uncheck the "Help us improve Homarr" checkbox. +3. Reload the full page. + +When analytics are disabled, Homarr does not send any data to PostHog. + +You can also set the `NO_EXTERNAL_CONNECTION` environment variable to `true`. This stops all external requests, including analytics. See the [environment variables](/docs/advanced/environment-variables) page for more information. + +You can block `hog.homarr.dev` in your DNS or firewall. Homarr cannot send data when this address is blocked. ## Search Engine Optimization (SEO) -Big companies [like Google, Microsoft, Baidu and Yandex](https://de.wikipedia.org/wiki/Web-Index) will use [web crawlers](https://de.wikipedia.org/wiki/Webcrawler) to index the Internet for new websites & pages. -This is desirable in many cases (for example when selling products in an online shop) but can lead to unwanted traffic and attention to your personal dashboard. -Homarr is requesting the crawlers to not index Homarr instances by default for this reason. -If you use Homarr as a public website and want it to be searchable on these search engines, you can disable these settings. -Please note that Homarr doesn't have control over what the crawlers do; it is a mere request to them to not perform these actions but will not guarantee that your website doesn't land on some index. + +Search engines use web crawlers to index websites. This can cause unwanted traffic to your dashboard. +Homarr asks crawlers to not index your instance by default. Use these settings to change this request. + +Homarr cannot control what the crawlers do. A crawler can ignore the request. Your website can still appear in an index. ### No index -This will ask crawlers to not index your Homarr instance on any indexes. -It is up to the crawler to properly respect this request. -By default, this setting is enabled. Disabling it will allow indexing. + +This setting asks crawlers to not index your instance. +This setting is enabled by default. Disable this setting to allow indexing. ### No follow -If indexing is allowed, crawlers will also attempt to follow any links on your page to further "discover" new parts of the Internet and on your website. -By default, this setting is enabled and will ask crawlers to not follow any links. -Crawler of different companies may behave differently when indexing is prohibited and following is allowed. + +Crawlers follow links to discover new pages. +This setting asks crawlers to not follow links. This setting is enabled by default. +Crawler behavior can differ between search engines. ### No translate -Google and Chrome on Android will prompt users to translate pages that are not in their device language. -This can lead to some shifting and can be undesired in some cases. By enabling this, -you ask crawlers to never translate and never prompt users for translation. -It should be noted that some browsers will ignore this and translate regardless. + +Some browsers offer to translate pages. +This setting asks crawlers to not offer translation. Some browsers ignore this setting. ### No site links search box -This setting is exclusive to Google. -[Google will create a box below your domain](https://developers.google.com/search/docs/appearance/structured-data/sitelinks-searchbox) that lists the paths that were discovered by the "folowing". -The user can search them directly in Google. -You can ask the crawlers to not allow searches by enabling this setting. -This setting is disabled by default. + +This setting applies to Google only. +Google can show a search box below your domain. +This setting asks Google to not show this box. This setting is disabled by default. ## Boards ### Global home board -You can set a global home board that will be used for all users that have not set a home board themselves. -It will also be used for anonymous users. -Note that the board must be public to be used as a global home board. + +You can set a global home board. +This board is the fallback for users without their own home board. It is also the fallback for anonymous users. +The board must be public. ### Global mobile board -You can set a global mobile board. It will be shown instead of the global home board on mobile devices that can be detected by Homarr. (Using the User-Agent header). -It will similar to the global home board be as fallback for normal users and for any anonymous users. -It also has to be public. +You can set a global mobile board. +Homarr shows this board on mobile devices instead of the global home board. +Homarr detects mobile devices with the User-Agent header. +The board must be public. ### App status #### Enable status by default -You can decide if the app status should be enabled by default when adding a new app to the board. +You can decide if app status is enabled when you add a new app. #### Force disable status -You can decide if the app status should be disabled for all boards. - -### +You can decide if app status is disabled on all boards. ## Appearance ### Default color scheme -You can set the default color scheme for all users that have not set a color scheme themselves. + +You can set the default color scheme for users without their own color scheme. ## Culture ### Default language -You can set the default language for all users that have not set a language themselves. \ No newline at end of file + +You can set the default language for users without their own language. diff --git a/apps/docs/docs/widgets/beszel-system-table/index.mdx b/apps/docs/docs/widgets/beszel-system-table/index.mdx index df68fcc1b..163d14a2f 100644 --- a/apps/docs/docs/widgets/beszel-system-table/index.mdx +++ b/apps/docs/docs/widgets/beszel-system-table/index.mdx @@ -17,10 +17,17 @@ import { beszelIntegration } from '@site/docs/integrations/beszel'; categories={['System Monitoring']} /> -This widget displays all your Beszel-monitored systems in a sortable data table. Each row shows system metrics like CPU, memory, disk, network, temperature, and more. Columns can be toggled on or off, and the table supports sorting by any column. When Beszel reports extra filesystems, the disk column adds a hover breakdown for each mount alongside the root disk. +This widget displays all your Beszel-monitored systems in a sortable data table. Each row shows system metrics like CPU, memory, disk, network, temperature, and more. Columns can be toggled on or off, dragged into a different order, and resized from their headers. Column order and widths are saved automatically for each widget. When Beszel reports extra filesystems, the disk column adds a hover breakdown for each mount alongside the root disk. Select a system row to open the complete statistics view, including system, filesystem, Docker, historical, and realtime charts. +### Interactions + +- **Reorder columns** by hovering a header to reveal its grab handle, then dragging it +- **Resize columns** by dragging a header's right edge +- **Sort systems** by selecting a sortable column header +- **Open system statistics** by selecting a row + ### Supported Integrations + +### Configuration + + diff --git a/apps/docs/docs/widgets/docker-containers/index.ts b/apps/docs/docs/widgets/docker-containers/index.ts index 3e4a17ab6..0517938d3 100644 --- a/apps/docs/docs/widgets/docker-containers/index.ts +++ b/apps/docs/docs/widgets/docker-containers/index.ts @@ -8,6 +8,12 @@ export const dockerContainersWidget: WidgetDefinition = { path: "../../widgets/docker-containers", configuration: { items: [ + { + name: "Columns to show", + description: "Select which columns are visible in the table", + values: "Name, State, Host, CPU usage, Memory usage, and Actions", + defaultValue: "All columns", + }, { name: "Enable items sorting", description: "Allows to sort containers by clicking on the column headers", diff --git a/apps/docs/docs/widgets/downloads/index.mdx b/apps/docs/docs/widgets/downloads/index.mdx index 000fd066b..d73ad02bb 100644 --- a/apps/docs/docs/widgets/downloads/index.mdx +++ b/apps/docs/docs/widgets/downloads/index.mdx @@ -44,7 +44,7 @@ import contextMenuImg from './img/context-menu.png'; - **Responsive table** — columns automatically adapt to widget width, hiding less important columns at smaller sizes - **Sortable columns** — click any column header to sort ascending/descending -- **Column customization** — choose which columns to display via the widget options panel +- **Column customization** — choose which columns to display, then hover a header to reveal its grab handle for reordering or drag its edge to resize it; layouts save automatically per widget - **Right-click context menu** — pause, resume, delete downloads, or copy download names directly from the context menu - **Row expansion** — click any row to see full details inline without opening a separate modal - **Hover tooltips** — hover a download name to see size, speeds, ETA, ratio, and category diff --git a/package.json b/package.json index 42736863f..705cae439 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,15 @@ "db:migration:postgresql:run": "pnpm -F db migration:postgresql:run", "db:migration:sqlite:generate": "pnpm -F db migration:sqlite:generate", "db:migration:sqlite:run": "pnpm -F db migration:sqlite:run", + "db:seed": "pnpm -F db seed", "db:push": "pnpm -F db push:sqlite", "db:studio": "pnpm -F db studio", "dev": "pnpm -F nextjs dev", + "dev:cli": "go -C tools/homarr-dev run .", + "dev:cli:install": "go -C tools/homarr-dev install .", "dev:docs": "pnpm -F @homarr/docs dev", "docker:dev": "docker compose -f ./development/development.docker-compose.yml up", + "docker:dev:up": "docker compose -f ./development/development.docker-compose.yml up -d redis", "format": "turbo format --continue -- --check", "format:fix": "turbo format --continue", "lint": "turbo lint --continue", diff --git a/packages/api/src/router/app.ts b/packages/api/src/router/app.ts index 3d0285689..3c623b55a 100644 --- a/packages/api/src/router/app.ts +++ b/packages/api/src/router/app.ts @@ -173,7 +173,7 @@ export const appRouter = createTRPCRouter({ mcp: { enabled: true, description: - "Create a new app (bookmark/shortcut to a service). REQUIRED: name (string), iconUrl (icon URL string), href (app URL, http/https or blank). OPTIONAL: description (string or null), pingUrl (URL to check reachability, or empty string)", + "Create a new app (bookmark/shortcut to a service). REQUIRED: name (string), iconUrl (icon URL string), href (app URL or custom URI scheme such as vscode://, or blank). OPTIONAL: description (string or null), pingUrl (URL to check reachability, or empty string)", }, }) .mutation(async ({ ctx, input }) => { diff --git a/packages/definitions/src/docs/homarr-docs-sitemap.ts b/packages/definitions/src/docs/homarr-docs-sitemap.ts index 22bc5f75b..7185a2fdd 100644 --- a/packages/definitions/src/docs/homarr-docs-sitemap.ts +++ b/packages/definitions/src/docs/homarr-docs-sitemap.ts @@ -119,6 +119,7 @@ export type HomarrDocumentationPath = | "/docs/tags/variables" | "/docs/tags/widgets" | "/docs/advanced/command-line" + | "/docs/advanced/command-line/development" | "/docs/advanced/command-line/fix-usernames" | "/docs/advanced/command-line/integrations" | "/docs/advanced/command-line/password-recovery" diff --git a/packages/definitions/src/integration.ts b/packages/definitions/src/integration.ts index 88c6a7088..e2772fb94 100644 --- a/packages/definitions/src/integration.ts +++ b/packages/definitions/src/integration.ts @@ -442,7 +442,7 @@ export const integrationDefs = { name: "Beszel", secretKinds: [["username", "password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/beszel.svg", - category: ["healthMonitoring"], + category: ["beszel"], documentationUrl: createDocumentationLink("/docs/integrations/beszel"), defaultPort: 8090, }, @@ -565,6 +565,7 @@ export const integrationCategories = [ "smartHomeServer", "indexerManager", "healthMonitoring", + "beszel", "search", "mediaTranscoding", "networkController", diff --git a/packages/forms-collection/src/icon-picker/icon-picker.spec.ts b/packages/forms-collection/src/icon-picker/icon-picker.spec.ts new file mode 100644 index 000000000..1046b341a --- /dev/null +++ b/packages/forms-collection/src/icon-picker/icon-picker.spec.ts @@ -0,0 +1,109 @@ +import { act, createElement } from "react"; +import { createRoot } from "react-dom/client"; +import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; +import { MantineProvider } from "@mantine/core"; + +import type { Root } from "react-dom/client"; + +const { findIconsQuery } = vi.hoisted(() => ({ + findIconsQuery: vi.fn((_query: { searchText: string }) => ({ + data: { icons: [], countIcons: 0 }, + isLoading: false, + isError: false, + refetch: vi.fn(), + })), +})); + +vi.mock("@homarr/api/client", () => ({ + clientApi: { icon: { findIcons: { useQuery: findIconsQuery } } }, +})); +vi.mock("@homarr/auth/client", () => ({ + useSession: () => ({ data: { user: { permissions: [] } } }), +})); +vi.mock("@homarr/translation", () => ({ supportedLanguages: [] })); +vi.mock("@homarr/translation/client", () => ({ + useScopedI18n: () => (key: string) => key, +})); +vi.mock("../upload-media/upload-media", () => ({ UploadMedia: () => null })); + +import { IconPicker } from "./icon-picker"; + +const directIconUrl = "https://cdn.example.com/shopify.svg"; + +const setInputValue = (input: HTMLInputElement, value: string) => { + const setter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set; + if (!setter) throw new Error("Input value setter was not found"); + setter.call(input, value); + input.dispatchEvent(new Event("input", { bubbles: true })); +}; + +describe("IconPicker", () => { + let container: HTMLDivElement; + let root: Root; + + beforeAll(() => { + Object.defineProperty(globalThis, "IS_REACT_ACT_ENVIRONMENT", { value: true, writable: true }); + Object.defineProperty(window, "matchMedia", { + writable: true, + value: (query: string) => ({ + matches: false, + media: query, + onchange: null, + addListener: () => undefined, + removeListener: () => undefined, + addEventListener: () => undefined, + removeEventListener: () => undefined, + dispatchEvent: () => false, + }), + }); + }); + + beforeEach(() => { + findIconsQuery.mockClear(); + }); + + afterEach(() => { + root.unmount(); + container.remove(); + }); + + const renderPicker = async (onChange: (value: string) => void) => { + container = document.createElement("div"); + document.body.appendChild(container); + root = createRoot(container); + await act(async () => { + root.render(createElement(MantineProvider, null, createElement(IconPicker, { value: "", onChange }))); + }); + const input = container.querySelector("input"); + if (!input) throw new Error("Icon picker input was not rendered"); + return input; + }; + + test("keeps a direct URL visible without searching the icon repositories", async () => { + const onChange = vi.fn(); + const input = await renderPicker(onChange); + + await act(async () => { + setInputValue(input, directIconUrl); + await new Promise((resolve) => setTimeout(resolve, 150)); + }); + + expect(onChange).toHaveBeenCalledWith(directIconUrl); + expect(input.value).toBe(directIconUrl); + expect(findIconsQuery.mock.calls.some(([query]) => query.searchText === directIconUrl)).toBe(false); + }); + + test("keeps icon names in repository search mode", async () => { + const onChange = vi.fn(); + const input = await renderPicker(onChange); + + await act(async () => { + setInputValue(input, "shopify"); + await new Promise((resolve) => setTimeout(resolve, 150)); + }); + + expect(onChange).not.toHaveBeenCalled(); + expect(input.value).toBe("shopify"); + expect(findIconsQuery.mock.calls.some(([query]) => query.searchText === "shopify")).toBe(true); + }); +}); diff --git a/packages/forms-collection/src/icon-picker/icon-picker.tsx b/packages/forms-collection/src/icon-picker/icon-picker.tsx index 058e75bd0..e3e31c5be 100644 --- a/packages/forms-collection/src/icon-picker/icon-picker.tsx +++ b/packages/forms-collection/src/icon-picker/icon-picker.tsx @@ -63,7 +63,7 @@ export const IconPicker = ({ const tCommon = useScopedI18n("common"); const [debouncedQuery] = useDebouncedValue(query, 100); - const searchText = (debouncedQuery !== (value ?? "") && debouncedQuery) || ""; + const searchText = !isDirectIconUrl(debouncedQuery) && debouncedQuery !== (value ?? "") ? debouncedQuery : ""; const { data, isLoading, isError, refetch } = clientApi.icon.findIcons.useQuery( { searchText }, @@ -165,8 +165,15 @@ export const IconPicker = ({ leftSection={leftSection} value={inputValue} onChange={(event) => { - combobox.openDropdown(); - setQuery(event.currentTarget.value); + const nextValue = event.currentTarget.value; + const trimmedValue = nextValue.trim(); + setQuery(nextValue); + if (isDirectIconUrl(trimmedValue)) { + setValue(trimmedValue); + combobox.closeDropdown(); + } else { + combobox.openDropdown(); + } }} onClick={() => combobox.openDropdown()} onFocus={(event) => { @@ -220,3 +227,12 @@ const shouldShowPreview = (value: string | null | undefined): value is string => if (!value) return false; return !localizationPathRegex.test(value); }; + +const isDirectIconUrl = (value: string) => { + try { + const url = new URL(value.trim()); + return (url.protocol === "http:" || url.protocol === "https:") && Boolean(url.hostname); + } catch { + return false; + } +}; diff --git a/packages/integrations/src/interfaces/media-server/media-server-types.ts b/packages/integrations/src/interfaces/media-server/media-server-types.ts index 5390a2d5d..c9a287155 100644 --- a/packages/integrations/src/interfaces/media-server/media-server-types.ts +++ b/packages/integrations/src/interfaces/media-server/media-server-types.ts @@ -41,7 +41,11 @@ export interface StreamSession { audioCodec: string | null; videoCodec: string | null; }; + isVideoDirect: boolean; + isAudioDirect: boolean; + containerChanged: boolean; }; + bitrateKbps: number | null; } | null; } | null; } diff --git a/packages/integrations/src/jellyfin/jellyfin-integration.ts b/packages/integrations/src/jellyfin/jellyfin-integration.ts index 4c3370020..a7be2d409 100644 --- a/packages/integrations/src/jellyfin/jellyfin-integration.ts +++ b/packages/integrations/src/jellyfin/jellyfin-integration.ts @@ -56,6 +56,9 @@ export class JellyfinIntegration extends Integration implements IMediaServerInte if (sessionInfo.NowPlayingItem) { const positionMs = ticksToMs(sessionInfo.PlayState?.PositionTicks); const durationMs = ticksToMs(sessionInfo.NowPlayingItem.RunTimeTicks); + const bitrateBps = + sessionInfo.TranscodingInfo?.Bitrate ?? sessionInfo.NowPlayingItem.MediaSources?.[0]?.Bitrate ?? null; + const bitrateKbps = bitrateBps !== null ? Math.round(bitrateBps / 1000) : null; currentlyPlaying = { type: convertJellyfinType(sessionInfo.NowPlayingItem.Type), @@ -98,7 +101,11 @@ export class JellyfinIntegration extends Integration implements IMediaServerInte videoCodec: sessionInfo.TranscodingInfo?.VideoCodec ?? null, }, container: sessionInfo.TranscodingInfo?.Container ?? null, + isVideoDirect: sessionInfo.TranscodingInfo?.IsVideoDirect ?? true, + isAudioDirect: sessionInfo.TranscodingInfo?.IsAudioDirect ?? true, + containerChanged: sessionInfo.PlayState?.PlayMethod === "DirectStream", }, + bitrateKbps, }, }; } diff --git a/packages/integrations/src/navidrome/test/navidrome-integration.spec.ts b/packages/integrations/src/navidrome/test/navidrome-integration.spec.ts index 08c66ad2a..662292a70 100644 --- a/packages/integrations/src/navidrome/test/navidrome-integration.spec.ts +++ b/packages/integrations/src/navidrome/test/navidrome-integration.spec.ts @@ -259,7 +259,7 @@ describe("NavidromeIntegration.getCurrentSessionsAsync", () => { expect(result).toEqual([]); }); - test("throws on subsonic auth failure", async () => { + test("normalizes subsonic auth failures", async () => { mockFetch.mockImplementation((url) => { const urlStr = toUrlString(url); diff --git a/packages/integrations/src/overseerr/overseerr-integration.ts b/packages/integrations/src/overseerr/overseerr-integration.ts index 9de482008..10aa73114 100644 --- a/packages/integrations/src/overseerr/overseerr-integration.ts +++ b/packages/integrations/src/overseerr/overseerr-integration.ts @@ -185,9 +185,15 @@ export class OverseerrIntegration }), ); - return settled + const fulfilled = settled .filter((result): result is PromiseFulfilledResult => result.status === "fulfilled") .map((result) => result.value); + + if (fulfilled.length === 0) { + throw new Error("Failed to resolve any media request information"); + } + + return fulfilled; } protected mapRequestStatus(status: UpstreamMediaRequestStatus): MediaRequestStatus { diff --git a/packages/integrations/src/plex/plex-integration.ts b/packages/integrations/src/plex/plex-integration.ts index 9f8439828..6b772a589 100644 --- a/packages/integrations/src/plex/plex-integration.ts +++ b/packages/integrations/src/plex/plex-integration.ts @@ -43,6 +43,12 @@ function parseResolution( return parsedWidth !== null && parsedHeight !== null ? { width: parsedWidth, height: parsedHeight } : null; } +function isStreamDirect(decision: string | undefined): boolean { + // Plex reports "transcode" when a stream is re-encoded. "copy" (remuxed + // without re-encoding) and an absent decision both count as direct. + return decision !== "transcode"; +} + export class PlexIntegration extends Integration implements IMediaServerIntegration, IMediaReleasesIntegration { public async getCurrentSessionsAsync(_options: CurrentSessionsInput): Promise { const token = super.getSecretValue("apiKey"); @@ -87,6 +93,16 @@ export class PlexIntegration extends Integration implements IMediaServerIntegrat const videoStream = streams.find((stream) => stream.$.streamType === "1"); const audioStream = streams.find((stream) => stream.$.streamType === "2"); + const isVideoDirect = isStreamDirect(transcodeElement?.$.videoDecision); + const isAudioDirect = isStreamDirect(transcodeElement?.$.audioDecision); + const containerChanged = Boolean( + transcodeElement?.$.container && + mediaInfoElement?.$.container && + transcodeElement.$.container !== mediaInfoElement.$.container, + ); + const bitrateKbps = + parseOptionalNumber(sessionElement?.$.bandwidth) ?? parseOptionalNumber(mediaInfoElement?.$.bitrate); + return { sessionId: sessionElement?.$.id ?? "unknown", sessionName: `${playerElement.$.product} (${playerElement.$.title})`, @@ -124,7 +140,11 @@ export class PlexIntegration extends Integration implements IMediaServerIntegrat audioCodec: transcodeElement?.$.audioCodec ?? null, videoCodec: transcodeElement?.$.videoCodec ?? null, }, + isVideoDirect, + isAudioDirect, + containerChanged, }, + bitrateKbps, }, }, }; diff --git a/packages/old-import/src/widgets/options.ts b/packages/old-import/src/widgets/options.ts index 0cf84b493..b2ed298a7 100644 --- a/packages/old-import/src/widgets/options.ts +++ b/packages/old-import/src/widgets/options.ts @@ -148,6 +148,8 @@ const optionMapping: OptionMapping = { }, mediaServer: { showOnlyPlaying: () => undefined, + showBitrate: () => undefined, + showLocation: () => undefined, }, indexerManager: { openIndexerSiteInNewTab: (oldOptions) => oldOptions.openIndexerSiteInNewTab, diff --git a/packages/translation/src/lang/ca.json b/packages/translation/src/lang/ca.json index 7de3c05c5..191706c23 100644 --- a/packages/translation/src/lang/ca.json +++ b/packages/translation/src/lang/ca.json @@ -578,11 +578,11 @@ "notification": { "success": { "title": "Configuració guardada", - "message": "" + "message": "La configuració del tauler s'ha desat correctament" }, "error": { - "title": "", - "message": "" + "title": "No s'ha pogut desar la configuració", + "message": "No s'ha pogut desar la configuració del tauler" } } } @@ -590,31 +590,31 @@ "changePosition": { "notification": { "success": { - "message": "" + "message": "La posició s'ha canviat correctament" }, "error": { - "message": "" + "message": "No s'ha pogut canviar la posició" } } } }, "defaultGroup": { - "name": "", - "description": "" + "name": "Grup per defecte", + "description": "{name} - Tots els usuaris connectats" } }, "app": { - "search": "", + "search": "Troba una aplicació", "page": { "list": { - "title": "", + "title": "Aplicacions", "noResults": { - "title": "", - "action": "" + "title": "Encara no hi ha cap aplicació", + "action": "Creeu la vostra primera aplicació" } }, "create": { - "title": "", + "title": "Nova aplicació", "notification": { "success": { "title": "Creació correcta", @@ -666,8 +666,8 @@ }, "useDifferentUrlForPing": { "checkbox": { - "label": "", - "description": "" + "label": "Utilitza una URL diferent per al ping", + "description": "Útil si Homarr pot accedir directament utilitzant un nom d'amfitrió intern o xarxa per evitar l'ús d'ample de banda del ISP" } } }, @@ -980,8 +980,8 @@ "sectionTitle": "" }, "createApp": { - "label": "", - "description": "" + "label": "Crear aplicació", + "description": "Crea una aplicació amb el mateix nom i icona que la integració. Deixa el camp d'entrada següent buit per crear l'aplicació amb l'URL de la integració." }, "appHref": { "placeholder": "" @@ -1171,60 +1171,60 @@ "message": "L'adreça URL no és vàlida" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "Falten credencials", + "message": "No s'han proporcionat totes les credencials" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "Credencials no vàlides", + "message": "Les credencials no són vàlides" }, "commonError": { - "title": "", - "message": "" + "title": "Connexió fallida", + "message": "No s'ha pogut establir la connexió" }, "badRequest": { - "title": "", - "message": "" + "title": "Sol·licitud incorrecta", + "message": "La sol·licitud estava mal formada" }, "unauthorized": { - "title": "", - "message": "" + "title": "No autoritzat", + "message": "Probablement les credencials són incorrectes" }, "forbidden": { - "title": "", - "message": "" + "title": "Prohibit", + "message": "Probablement falten permisos" }, "notFound": { - "title": "", - "message": "" + "title": "No trobat", + "message": "Probablement l'url o la ruta és incorrecta" }, "internalServerError": { - "title": "", - "message": "" + "title": "Error intern del servidor", + "message": "El servidor ha trobat un error" }, "serviceUnavailable": { - "title": "", - "message": "" + "title": "Servei no disponible", + "message": "El servidor no està disponible actualment" }, "connectionAborted": { - "title": "", - "message": "" + "title": "Connexió avortada", + "message": "La connexió s'ha avortat" }, "domainNotFound": { - "title": "", - "message": "" + "title": "Domini no trobat", + "message": "No s'ha pogut trobar el domini" }, "connectionRefused": { - "title": "", - "message": "" + "title": "Connexió rebutjada", + "message": "La connexió ha estat rebutjada" }, "invalidJson": { - "title": "", - "message": "" + "title": "JSON no vàlid", + "message": "La resposta no era un JSON vàlid" }, "wrongPath": { - "title": "", - "message": "" + "title": "Ruta incorrecta", + "message": "Probablement la ruta no és correcta" }, "tooManyRequests": { "title": "", @@ -1233,41 +1233,41 @@ } }, "secrets": { - "title": "", - "lastUpdated": "", + "title": "Secrets", + "lastUpdated": "Última actualització {date}", "notSet": { - "label": "", - "tooltip": "" + "label": "Sense valor establert", + "tooltip": "Aquest secret obligatori encara no s'ha establert" }, - "secureNotice": "", + "secureNotice": "Aquest secret no es pot recuperar després de la creació", "reset": { - "title": "", - "message": "" + "title": "Restablir secret", + "message": "Esteu segur que voleu restablir aquest secret?" }, "noSecretsRequired": { - "segmentTitle": "", - "text": "" + "segmentTitle": "Sense secrets", + "text": "No es requereixen secrets per a aquesta integració" }, "kind": { "username": { - "label": "", - "newLabel": "" + "label": "Nom d'usuari", + "newLabel": "Nou nom d'usuari" }, "apiKey": { - "label": "", - "newLabel": "" + "label": "Clau API", + "newLabel": "Nova clau API" }, "password": { - "label": "", - "newLabel": "" + "label": "Contrasenya", + "newLabel": "Nova contrasenya" }, "tokenId": { - "label": "", - "newLabel": "" + "label": "ID del token", + "newLabel": "Nou ID de token" }, "realm": { - "label": "", - "newLabel": "" + "label": "Realm", + "newLabel": "Nou realm" }, "personalAccessToken": { "label": "", @@ -1316,9 +1316,9 @@ } }, "permission": { - "use": "", - "interact": "", - "full": "" + "use": "Seleccioneu integracions als elements", + "interact": "Interactuar amb integracions", + "full": "Accés total a les integracions" }, "audiobookshelf": { "name": "", @@ -1358,43 +1358,43 @@ } }, "media": { - "plural": "", - "search": "", + "plural": "Multimèdia", + "search": "Cerca un element multimèdia", "field": { - "name": "", - "size": "", - "creator": "" + "name": "Nom", + "size": "Mida", + "creator": "Creador" }, "action": { "upload": { - "label": "", - "file": "", + "label": "Penja multimèdia", + "file": "Selecciona un fitxer", "notification": { "success": { - "message": "" + "message": "L'element multimèdia s'ha penjat correctament" }, "error": { - "message": "" + "message": "No s'ha pogut penjar l'element multimèdia" } } }, "delete": { - "label": "", - "description": "", + "label": "Elimina l'element multimèdia", + "description": "Esteu segur que voleu eliminar l'element multimèdia ?", "notification": { "success": { - "message": "" + "message": "L'element multimèdia s'ha eliminat correctament" }, "error": { - "message": "" + "message": "No s'ha pogut eliminar l'element multimèdia" } } }, "copy": { - "label": "" + "label": "Copia l'URL" }, "open": { - "label": "" + "label": "Obrir mitjà" } }, "noResults": { @@ -1403,41 +1403,41 @@ }, "common": { "success": "", - "beta": "", - "error": "", + "beta": "Beta", + "error": "Error", "action": { - "add": "", - "apply": "", - "backToOverview": "", + "add": "Afegeix", + "apply": "Aplica", + "backToOverview": "Torna a la visió general", "skip": "", "change": "", - "create": "", - "createAnother": "", - "edit": "", - "import": "", - "insert": "", - "remove": "", - "save": "", - "saveChanges": "", - "cancel": "", - "delete": "", - "discard": "", + "create": "Crea", + "createAnother": "Crear i començar de nou", + "edit": "Edita", + "import": "Importa", + "insert": "Insereix", + "remove": "Elimina", + "save": "Desa", + "saveChanges": "Desa els canvis", + "cancel": "Cancel·la", + "delete": "Elimina", + "discard": "Descarta", "close": "", - "confirm": "", - "continue": "", - "previous": "", - "next": "", - "checkoutDocs": "", - "checkLogs": "", - "tryAgain": "", - "loading": "", + "confirm": "Confirma", + "continue": "Continua", + "previous": "Anterior", + "next": "Següent", + "checkoutDocs": "Consulteu la documentació", + "checkLogs": "Consulteu els registres per a més detalls", + "tryAgain": "Torna-ho a provar", + "loading": "Carregant", "show": "", "hide": "" }, - "here": "", + "here": "aquí", "iconPicker": { - "label": "", - "header": "", + "label": "URL de la icona", + "header": "Escriviu un nom o objectes per filtrar icones... Homarr cercarà entre {countIcons} icones per a vosaltres.", "headerLoading": "", "noResults": "", "error": "" @@ -1445,99 +1445,99 @@ "colorScheme": { "options": { "auto": "", - "light": "", - "dark": "" + "light": "Clar", + "dark": "Fosc" } }, "information": { - "min": "", - "max": "", - "days": "", - "hours": "", - "minutes": "" + "min": "Mín", + "max": "Màx", + "days": "Dies", + "hours": "Hores", + "minutes": "Minuts" }, "notification": { "create": { - "success": "", - "error": "" + "success": "Creació correcta", + "error": "Creació fallida" }, "delete": { - "success": "", - "error": "" + "success": "Eliminació correcta", + "error": "Eliminació fallida" }, "update": { - "success": "", - "error": "" + "success": "Els canvis s'han aplicat correctament", + "error": "No s'han pogut aplicar els canvis" }, "transfer": { - "success": "", - "error": "" + "success": "Transferència correcta", + "error": "Transferència fallida" } }, "multiSelect": { - "placeholder": "" + "placeholder": "Selecciona un o més valors" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "Afegeix més valors", + "addLabel": "Afegeix {value}" }, "select": { - "placeholder": "", + "placeholder": "Selecciona un valor", "badge": { - "recommended": "" + "recommended": "Recomanat" } }, "userAvatar": { "menu": { - "switchToDarkMode": "", - "switchToLightMode": "", - "management": "", + "switchToDarkMode": "Canvia al mode fosc", + "switchToLightMode": "Canvia al mode clar", + "management": "Gestió", "docker": "", - "preferences": "", - "logout": "", - "login": "", - "homeBoard": "", - "loggedOut": "", - "updateAvailable": "" + "preferences": "Les vostres preferències", + "logout": "Tanca la sessió", + "login": "Inicia la sessió", + "homeBoard": "El vostre panell d'inici", + "loggedOut": "Sessió tancada", + "updateAvailable": "{countUpdates} actualitzacions disponibles: {tag}" } }, - "dangerZone": "", - "noResults": "", - "unsavedChanges": "", + "dangerZone": "Zona de perill", + "noResults": "No s'han trobat resultats", + "unsavedChanges": "Tens canvis sense desar!", "servers": "", "applications": "", "services": "", "preview": { - "show": "", - "hide": "" + "show": "Mostra la previsualització", + "hide": "Amaga la previsualització" }, "zod": { "errors": { - "default": "", - "required": "", + "default": "Aquest camp no és vàlid", + "required": "Aquest camp és obligatori", "string": { - "startsWith": "", - "endsWith": "", - "includes": "", - "invalidEmail": "" + "startsWith": "Aquest camp ha de començar amb {startsWith}", + "endsWith": "Aquest camp ha d'acabar amb {endsWith}", + "includes": "Aquest camp ha d'incloure {includes}", + "invalidEmail": "Aquest camp ha de ser un correu electrònic vàlid" }, "tooSmall": { - "string": "", - "number": "" + "string": "Aquest camp ha de tenir almenys {minimum} caràcters", + "number": "Aquest camp ha de ser major o igual a {minimum}" }, "tooBig": { - "string": "", - "number": "" + "string": "Aquest camp ha de tenir com a màxim {maximum} caràcters", + "number": "Aquest camp ha de ser menor o igual a {maximum}" }, "custom": { - "passwordsDoNotMatch": "", - "passwordRequirements": "", - "boardAlreadyExists": "", - "invalidFileType": "", - "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", - "groupNameTaken": "" + "passwordsDoNotMatch": "Les contrasenyes no coincideixen", + "passwordRequirements": "La contrasenya no compleix els requisits", + "boardAlreadyExists": "Ja existeix un tauler amb aquest nom", + "invalidFileType": "Tipus de fitxer no vàlid, s'esperava {expected}", + "invalidFileName": "Nom de fitxer no vàlid", + "fileTooLarge": "El fitxer és massa gran, la mida màxima és {maxSize}", + "invalidConfiguration": "Configuració no vàlida", + "groupNameTaken": "El nom del grup ja està en ús" } } }, @@ -1551,8 +1551,8 @@ "section": { "dynamic": { "action": { - "create": "", - "remove": "" + "create": "Nova secció dinàmica", + "remove": "Elimina la secció dinàmica" }, "option": { "title": { @@ -1562,67 +1562,67 @@ "label": "" }, "borderColor": { - "label": "" + "label": "Color de la vora" } }, "remove": { - "title": "", - "message": "" + "title": "Elimina la secció dinàmica", + "message": "Esteu segur que voleu eliminar aquesta secció dinàmica? Els elements es mouran a la mateixa ubicació dins la secció pare." } }, "category": { "field": { "name": { - "label": "" + "label": "Nom" } }, "action": { - "create": "", - "edit": "", - "remove": "", - "moveUp": "", - "moveDown": "", - "createAbove": "", - "createBelow": "", - "openAllInNewTabs": "" + "create": "Nova categoria", + "edit": "Canvia el nom de la categoria", + "remove": "Elimina la categoria", + "moveUp": "Mou cap amunt", + "moveDown": "Mou cap avall", + "createAbove": "Nova categoria a sobre", + "createBelow": "Nova categoria a sota", + "openAllInNewTabs": "Obrir-ho tot en pestanyes" }, "create": { - "title": "", - "submit": "" + "title": "Nova categoria", + "submit": "Afegeix categoria" }, "remove": { - "title": "", - "message": "" + "title": "Elimina la categoria", + "message": "Esteu segur que voleu eliminar la categoria {name}?" }, "edit": { - "title": "", - "submit": "" + "title": "Canvia el nom de la categoria", + "submit": "Canvia el nom de la categoria" }, "menu": { "label": { - "create": "", - "changePosition": "", + "create": "Nova categoria", + "changePosition": "Canvia la posició", "settings": "" } }, "openAllInNewTabs": { - "title": "", - "text": "" + "title": "Obrir-ho tot en pestanyes", + "text": "Alguns navegadors poden bloquejar l'obertura massiva de pestanyes per motius de seguretat. Homarr no ha pogut obrir totes les finestres perquè el teu navegador ha bloquejat aquesta acció. Si us plau, permet \"Obrir finestres emergents\" i torna-ho a intentar." } } }, "item": { "action": { - "create": "", - "import": "", - "edit": "", - "moveResize": "", - "duplicate": "", - "remove": "" + "create": "Nou element", + "import": "Importa element", + "edit": "Edita element", + "moveResize": "Mou / redimensiona element", + "duplicate": "Duplica element", + "remove": "Elimina element" }, "menu": { "label": { - "settings": "", + "settings": "Configuració", "refresh": "", "options": "", "actions": "" @@ -1635,29 +1635,29 @@ } }, "create": { - "title": "", - "search": "", - "addToBoard": "" + "title": "Trieu l'element a afegir", + "search": "Filtrar elements", + "addToBoard": "Afegeix al tauler" }, "moveResize": { - "title": "", + "title": "Mou / redimensiona element", "field": { "width": { - "label": "" + "label": "Amplada" }, "height": { - "label": "" + "label": "Alçada" }, "xOffset": { - "label": "" + "label": "Desplaçament X" }, "yOffset": { - "label": "" + "label": "Desplaçament Y" } } }, "edit": { - "title": "", + "title": "Edita element", "tab": { "widget": "", "app": "" @@ -1666,27 +1666,27 @@ "propagationNotice": "" }, "advancedOptions": { - "label": "", - "title": "" + "label": "Opcions avançades", + "title": "Opcions avançades de l'element" }, "field": { "integrations": { - "label": "" + "label": "Integracions" }, "title": { "label": "" }, "customCssClasses": { - "label": "" + "label": "Classes css personalitzades" }, "borderColor": { - "label": "" + "label": "Color de la vora" } } }, "remove": { - "title": "", - "message": "" + "title": "Elimina element", + "message": "Esteu segur que voleu eliminar aquest element?" } }, "widget": { @@ -1698,20 +1698,20 @@ "loadError": "" }, "app": { - "name": "", - "description": "", + "name": "Aplicació", + "description": "Incrusta una aplicació al tauler.", "option": { "appId": { - "label": "" + "label": "Trieu l'aplicació" }, "openInNewTab": { - "label": "" + "label": "Obre en una pestanya nova" }, "showTitle": { - "label": "" + "label": "Mostra el nom de l'aplicació" }, "pingEnabled": { - "label": "" + "label": "Activar comprovació d'estat" }, "layout": { "label": "", @@ -1734,53 +1734,53 @@ }, "error": { "notFound": { - "label": "", - "tooltip": "" + "label": "Sense aplicació", + "tooltip": "No teniu cap aplicació vàlida seleccionada" } } }, "bookmarks": { - "name": "", - "description": "", + "name": "Adreces d'interès", + "description": "Mostra diversos enllaços d'aplicacions", "option": { "title": { - "label": "" + "label": "Títol" }, "layout": { - "label": "", + "label": "Disposició", "option": { "row": { - "label": "" + "label": "Horitzontal" }, "column": { - "label": "" + "label": "Vertical" }, "grid": { - "label": "" + "label": "Quadrícula" }, "gridHorizontal": { - "label": "" + "label": "Quadrícula horitzontal" } } }, "hideTitle": { - "label": "" + "label": "Amaga títol" }, "hideIcon": { - "label": "" + "label": "Amaga icones" }, "hideHostname": { - "label": "" + "label": "Amaga noms d'amfitrió" }, "openNewTab": { - "label": "" + "label": "Obrir en una pestanya nova" }, "withBorder": { "label": "" }, "items": { - "label": "", - "add": "" + "label": "Adreces d'interès", + "add": "Afegeix una adreça d'interès" } } }, @@ -1794,117 +1794,117 @@ } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "Resum del forat DNS", + "description": "Mostra el resum del vostre forat DNS", "option": { "layout": { - "label": "", + "label": "Disposició", "option": { "row": { - "label": "" + "label": "Horitzontal" }, "column": { - "label": "" + "label": "Vertical" }, "grid": { - "label": "" + "label": "Quadrícula" } } }, "usePiHoleColors": { - "label": "" + "label": "Utilitza els colors de Pi-Hole" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "No s'ha pogut obtenir el resum del forat DNS", + "integrationsDisconnected": "No hi ha dades disponibles, totes les integracions estan desconnectades" }, "data": { - "adsBlockedToday": "", - "adsBlockedTodayPercentage": "", - "dnsQueriesToday": "", - "domainsBeingBlocked": "" + "adsBlockedToday": "Bloquejats avui", + "adsBlockedTodayPercentage": "Bloquejats avui", + "dnsQueriesToday": "Consultes d'avui", + "domainsBeingBlocked": "Dominis a la llista de bloqueig" }, - "domainsTooltip": "" + "domainsTooltip": "A causa de múltiples integracions, Homarr no pot calcular el nombre exacte de dominis bloquejats" }, "dnsHoleControls": { - "name": "", - "description": "", + "name": "Controls del forat DNS", + "description": "Controleu PiHole o AdGuard des del vostre tauler", "option": { "layout": { - "label": "", + "label": "Disposició", "option": { "row": { - "label": "" + "label": "Horitzontal" }, "column": { - "label": "" + "label": "Vertical" }, "grid": { - "label": "" + "label": "Quadrícula" } } }, "showToggleAllButtons": { - "label": "" + "label": "Mostra els botons per activar/desactivar tot" } }, "error": { - "internalServerError": "" + "internalServerError": "No s'ha pogut controlar el forat DNS" }, "controls": { - "enableAll": "", - "disableAll": "", - "setTimer": "", - "set": "", - "enabled": "", - "disabled": "", - "processing": "", - "disconnected": "", - "hours": "", - "minutes": "", - "unlimited": "" + "enableAll": "Activa-ho tot", + "disableAll": "Desactiva-ho tot", + "setTimer": "Estableix un temporitzador", + "set": "Estableix", + "enabled": "Activat", + "disabled": "Desactivat", + "processing": "Processant", + "disconnected": "Desconnectat", + "hours": "Hores", + "minutes": "Minuts", + "unlimited": "Deixeu-ho en blanc per il·limitat" } }, "clock": { - "name": "", - "description": "", + "name": "Data i hora", + "description": "Mostra la data i l'hora actuals.", "option": { "customTitleToggle": { - "label": "", - "description": "" + "label": "Mostra un títol o ciutat personalitzat", + "description": "Mostra un títol personalitzat o el nom de la ciutat/país a sobre del rellotge." }, "customTitle": { - "label": "" + "label": "Títol" }, "is24HourFormat": { - "label": "", - "description": "" + "label": "Format de 24 hores", + "description": "Utilitza el format de 24 hores en lloc del de 12 hores" }, "showSeconds": { - "label": "" + "label": "Mostra els segons" }, "useCustomTimezone": { - "label": "" + "label": "Utilitza una zona horària fixa" }, "timezone": { - "label": "", - "description": "" + "label": "Zona horària", + "description": "Trieu la zona horària seguint l'estàndard IANA" }, "showDate": { - "label": "" + "label": "Mostra la data" }, "dateFormat": { - "label": "", - "description": "" + "label": "Format de data", + "description": "Com s'ha de mostrar la data" }, "customTimeFormat": { - "label": "", - "description": "" + "label": "Format horari personalitzat", + "description": "Utilitza ISO 8601 per formatar l'hora (això anul·larà altres opcions)" }, "customDateFormat": { - "label": "", - "description": "" + "label": "Format de data personalitzat", + "description": "Utilitza ISO 8601 per formatar la data (això anul·larà altres opcions)" }, "showWeather": { "label": "", @@ -1919,22 +1919,22 @@ } }, "minecraftServerStatus": { - "name": "", - "description": "", + "name": "Estat del Servidor Minecraft", + "description": "Mostra l'estat d'un servidor Minecraft", "option": { "title": { - "label": "" + "label": "Títol" }, "domain": { - "label": "" + "label": "Adreça del servidor" }, "isBedrockServer": { - "label": "" + "label": "Servidor Bedrock" } }, "status": { - "online": "", - "offline": "" + "online": "En línia", + "offline": "Fora de línia" } }, "timetable": { @@ -1952,66 +1952,66 @@ } }, "notebook": { - "name": "", - "description": "", + "name": "Bloc de notes", + "description": "Un widget de bloc de notes simple que admet markdown", "option": { "showToolbar": { - "label": "" + "label": "Mostra la barra d'eines per ajudar-vos a escriure markdown" }, "allowReadOnlyCheck": { - "label": "" + "label": "Permetre la selecció en mode de només lectura" }, "content": { - "label": "" + "label": "El contingut del bloc de notes" } }, "controls": { - "bold": "", - "italic": "", - "strikethrough": "", - "underline": "", - "colorText": "", - "colorHighlight": "", - "code": "", - "clear": "", - "heading": "", - "align": "", + "bold": "Negreta", + "italic": "Cursiva", + "strikethrough": "Ratllat", + "underline": "Subratllat", + "colorText": "Text de color", + "colorHighlight": "Text ressaltat de color", + "code": "Codi", + "clear": "Esborra el format", + "heading": "Encapçalament {level}", + "align": "Alinea el text: {position}", "directionLtr": "", "directionRtl": "", - "blockquote": "", - "horizontalLine": "", - "bulletList": "", - "orderedList": "", - "checkList": "", - "increaseIndent": "", - "decreaseIndent": "", - "link": "", - "unlink": "", - "image": "", - "addTable": "", - "deleteTable": "", - "colorCell": "", - "mergeCell": "", - "addColumnLeft": "", - "addColumnRight": "", - "deleteColumn": "", - "addRowTop": "", - "addRowBelow": "", - "deleteRow": "" + "blockquote": "Citació", + "horizontalLine": "Línia horitzontal", + "bulletList": "Llista no ordenada", + "orderedList": "Llista ordenada", + "checkList": "Llista de verificació", + "increaseIndent": "Augmenta el sagnat", + "decreaseIndent": "Disminueix el sagnat", + "link": "Enllaç", + "unlink": "Elimina l'enllaç", + "image": "Incrusta una imatge", + "addTable": "Afegeix una taula", + "deleteTable": "Elimina la taula", + "colorCell": "Color de la cel·la", + "mergeCell": "Fusiona/desfusiona cel·les", + "addColumnLeft": "Afegeix una columna a l'esquerra", + "addColumnRight": "Afegeix una columna a la dreta", + "deleteColumn": "Elimina la columna", + "addRowTop": "Afegeix una fila a dalt", + "addRowBelow": "Afegeix una fila a baix", + "deleteRow": "Elimina la fila" }, "align": { - "left": "", - "center": "", - "right": "" + "left": "Esquerra", + "center": "Centre", + "right": "Dreta" }, "popover": { - "clearColor": "", - "source": "", - "widthPlaceholder": "", - "columns": "", - "rows": "", - "width": "", - "height": "" + "clearColor": "Esborra el color", + "source": "Font", + "widthPlaceholder": "Valor en % o píxels", + "columns": "Columnes", + "rows": "Files", + "width": "Amplada", + "height": "Alçada" }, "placeholder": "", "dismiss": { @@ -2052,77 +2052,77 @@ "saveFailed": "" }, "iframe": { - "name": "", - "description": "", + "name": "iFrame", + "description": "Incrusta qualsevol contingut d'internet. Alguns llocs web poden restringir l'accés.", "option": { "embedUrl": { - "label": "" + "label": "URL per incrustar" }, "allowFullScreen": { - "label": "" + "label": "Permet la pantalla completa" }, "allowTransparency": { - "label": "" + "label": "Permet la transparència" }, "allowScrolling": { - "label": "" + "label": "Permet el desplaçament" }, "allowPayment": { - "label": "" + "label": "Permet el pagament" }, "allowAutoPlay": { - "label": "" + "label": "Permet la reproducció automàtica" }, "allowMicrophone": { - "label": "" + "label": "Permet el micròfon" }, "allowCamera": { - "label": "" + "label": "Permet la càmera" }, "allowGeolocation": { - "label": "" + "label": "Permet la geolocalització" }, "allowModals": { "label": "" } }, "error": { - "noUrl": "", - "unsupportedProtocol": "", - "noBrowerSupport": "" + "noUrl": "No s'ha proporcionat cap URL per a l'iFrame", + "unsupportedProtocol": "L'URL proporcionat utilitza un protocol no compatible. Si us plau, utilitza un dels ({supportedProtocols})", + "noBrowerSupport": "El vostre navegador no admet iframes. Si us plau, actualitzeu el navegador." } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "Estat de l'entitat", + "description": "Mostra l'estat d'una entitat i, opcionalment, commuta-la", "option": { "entityId": { - "label": "" + "label": "ID de l'entitat" }, "displayName": { - "label": "" + "label": "Nom de visualització" }, "entityUnit": { - "label": "" + "label": "Unitat de l'entitat" }, "clickable": { - "label": "" + "label": "Clicable" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "Executa automatització", + "description": "Activa una automatització amb un sol clic", "option": { "displayName": { - "label": "" + "label": "Nom de visualització" }, "automationId": { - "label": "" + "label": "ID de l'automatització" } }, "spotlightAction": { - "run": "" + "run": "Executa {name}" } }, "stockPrice": { @@ -2202,121 +2202,121 @@ } }, "calendar": { - "name": "", - "description": "", + "name": "Calendari", + "description": "Mostra esdeveniments de les vostres integracions en una vista de calendari dins d'un període de temps relatiu determinat", "duration": { "allDay": "" }, "option": { "releaseType": { - "label": "", + "label": "Tipus de publicació de Radarr", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "Als cinemes", + "digitalRelease": "Publicació digital", + "physicalRelease": "Publicació física" } }, "filterPastMonths": { - "label": "" + "label": "Comença des de" }, "filterFutureMonths": { - "label": "" + "label": "Acaba a" }, "showUnmonitored": { - "label": "" + "label": "Mostrar no monitoritzat" } } }, "weather": { - "name": "", - "description": "", + "name": "Temps", + "description": "Mostra la informació meteorològica actual d'una ubicació determinada.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Temperatura en Fahrenheit" }, "disableTemperatureDecimals": { - "label": "" + "label": "Desactivar decimals de temperatura" }, "showCurrentWindSpeed": { - "label": "", - "description": "" + "label": "Mostrar velocitat actual del vent", + "description": "Només al temps actual" }, "useImperialSpeed": { "label": "" }, "location": { - "label": "" + "label": "Ubicació meteorològica" }, "showCity": { - "label": "" + "label": "Mostra la ciutat" }, "hasForecast": { - "label": "" + "label": "Mostra la previsió" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Quantitat de dies de previsió", + "description": "Quan el widget no és prou ample, es mostren menys dies" }, "dateFormat": { - "label": "", - "description": "" + "label": "Format de data", + "description": "Com s'ha de mostrar la data" } }, "currentWindSpeed": "", "dailyForecast": { - "sunrise": "", - "sunset": "", + "sunrise": "Sortida del sol", + "sunset": "Posta de sol", "maxWindSpeed": "", "maxWindGusts": "", "humidity": "" }, "kind": { - "clear": "", - "mainlyClear": "", - "fog": "", - "drizzle": "", - "freezingDrizzle": "", - "rain": "", - "freezingRain": "", - "snowFall": "", - "snowGrains": "", - "rainShowers": "", - "snowShowers": "", - "thunderstorm": "", - "thunderstormWithHail": "", - "unknown": "" + "clear": "Clar", + "mainlyClear": "Majoritàriament clar", + "fog": "Boira", + "drizzle": "Plugim", + "freezingDrizzle": "Plugim gelat", + "rain": "Pluja", + "freezingRain": "Pluja gelada", + "snowFall": "Nevada", + "snowGrains": "Grànuls de neu", + "rainShowers": "Ruixats de pluja", + "snowShowers": "Ruixats de neu", + "thunderstorm": "Tempesta", + "thunderstormWithHail": "Tempesta amb calamarsa", + "unknown": "Desconegut" } }, "indexerManager": { - "name": "", - "description": "", + "name": "Estat del gestor d'indexadors", + "description": "Estat dels vostres indexadors", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Obre el lloc de l'indexador en una pestanya nova" } }, - "title": "", - "testAll": "", + "title": "Gestor d'indexadors", + "testAll": "Prova-ho tot", "error": { - "internalServerError": "" + "internalServerError": "No s'ha pogut obtenir l'estat dels indexadors" } }, "healthMonitoring": { - "name": "", - "description": "", + "name": "Monitorització de la salut del sistema", + "description": "Mostra informació sobre la salut i l'estat dels vostres sistema(s).", "tab": { - "system": "", - "cluster": "" + "system": "Sistema", + "cluster": "Clúster" }, "option": { "fahrenheit": { - "label": "" + "label": "Temperatura de la CPU en Fahrenheit" }, "cpu": { - "label": "" + "label": "Mostra informació de la CPU" }, "memory": { - "label": "" + "label": "Mostra informació de la memòria" }, "gpu": { "label": "" @@ -2325,7 +2325,7 @@ "label": "" }, "fileSystem": { - "label": "" + "label": "Mostra informació del sistema de fitxers" }, "visibleStorageVolumes": { "label": "", @@ -2333,76 +2333,76 @@ "placeholder": "" }, "defaultTab": { - "label": "" + "label": "Pestanya predeterminada" }, "visibleClusterSections": { "label": "" }, "sectionIndicatorRequirement": { - "label": "" + "label": "Requisit de l'indicador de secció" } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", - "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", - "available": "", - "lastSeen": "" + "information": "Informació", + "processor": "Processador: {cpuModelName}", + "memory": "Memòria: {memory}GiB", + "memoryAvailable": "Disponible: {memoryAvailable}GiB ({percent}%)", + "version": "Versió: {version}", + "uptime": "Temps d'activitat: {months} Mesos, {days} Dies, {hours} Hores, {minutes} Minuts", + "loadAverage": "Càrrega mitjana:", + "minute": "1 minut", + "minutes": "{count} minuts", + "used": "Utilitzat", + "available": "Disponible", + "lastSeen": "Última actualització d'estat: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "No s'ha pogut obtenir l'estat de salut" }, "cluster": { "summary": { - "cpu": "", - "memory": "" + "cpu": "CPU", + "memory": "RAM" }, "resource": { "node": { - "name": "" + "name": "Nodes" }, "qemu": { - "name": "" + "name": "MV" }, "lxc": { - "name": "" + "name": "LXC" }, "storage": { - "name": "" + "name": "Emmagatzematge" } }, "popover": { "rightSection": { - "node": "", - "vmId": "", - "plugin": "" + "node": "Node", + "vmId": "ID de la MV", + "plugin": "Plugin" }, "detail": { - "cpu": "", - "memory": "", - "storage": "", - "uptime": "", - "haState": "", + "cpu": "Nuclis", + "memory": "Memòria", + "storage": "Emmagatzematge", + "uptime": "Temps d'activitat", + "haState": "Estat HA", "storageType": { - "local": "", - "shared": "" + "local": "Emmagatzematge local", + "shared": "Emmagatzematge compartit" } } }, "table": { "header": { - "name": "", - "cpu": "", - "memory": "", - "node": "" + "name": "Nom", + "cpu": "CPU", + "memory": "RAM", + "node": "Node" } } } @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2659,81 +2670,96 @@ }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", - "search": "", + "query": "Ciutat / Codi postal", + "latitude": "Latitud", + "longitude": "Longitud", + "disabledTooltip": "Introduïu una ciutat o codi postal", + "unknownLocation": "Ubicació desconeguda", + "search": "Cerca", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "Ciutat", + "country": "País", + "coordinates": "Coordenades", + "population": "Població" }, "action": { - "select": "" + "select": "Selecciona {city}, {countryCode}" }, "population": { - "fallback": "" + "fallback": "Desconegut" } } }, "integration": { - "noData": "", - "description": "" + "noData": "No s'ha trobat cap integració", + "description": "Feu clic a per crear una nova integració" }, "app": { - "noData": "", - "description": "", - "quickCreate": "" + "noData": "No s'ha trobat cap aplicació", + "description": "Feu clic a per crear una nova aplicació", + "quickCreate": "Crear aplicació al vol" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "No s'ha seleccionat cap integració", + "noData": "No hi ha dades d'integració disponibles" }, "option": {} }, "video": { - "name": "", - "description": "", + "name": "Transmissió de vídeo", + "description": "Incrusta un flux de vídeo d'una càmera o d'un lloc web", "option": { "feedUrl": { - "label": "" + "label": "URL del feed" }, "hasAutoPlay": { - "label": "", - "description": "" + "label": "Reproducció automàtica", + "description": "La reproducció automàtica només funciona amb el so silenciat a causa de les restriccions del navegador" }, "isMuted": { - "label": "" + "label": "Silenciat" }, "hasControls": { - "label": "" + "label": "Mostra els controls" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "No s'ha proporcionat cap URL de vídeo", + "forYoutubeUseIframe": "Per als vídeos de YouTube, utilitzeu l'opció iframe" } }, "mediaServer": { - "name": "", - "description": "", + "name": "Fluxos actuals del servidor multimèdia", + "description": "Mostra els fluxos actuals als vostres servidors multimèdia", "option": { "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { - "currentlyPlaying": "", - "user": "", - "name": "", - "id": "", + "currentlyPlaying": "S'està reproduint", + "user": "Usuari", + "name": "Nom", + "id": "ID", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3040,151 +3066,178 @@ "noPhotos": "" }, "downloads": { - "name": "", - "description": "", + "name": "Client de descàrregues", + "description": "Us permet veure i gestionar les vostres descàrregues tant des de clients Torrent com Usenet.", "option": { "columns": { - "label": "" + "label": "Columnes a mostrar" }, "enableRowSorting": { - "label": "" + "label": "Activa l'ordenació d'elements" }, "defaultSort": { - "label": "" + "label": "Columna utilitzada per ordenar per defecte" }, "descendingDefaultSort": { - "label": "" + "label": "Inverteix l'ordenació" }, "showCompletedUsenet": { - "label": "" + "label": "Mostra les entrades usenet marcades com a completades" }, "showCompletedTorrent": { - "label": "" + "label": "Mostra les entrades torrent marcades com a completades" }, "showCompletedHttp": { "label": "" }, "activeTorrentThreshold": { - "label": "" + "label": "Amaga els torrents completats sota aquest llindar (en kiB/s)" }, "categoryFilter": { - "label": "" + "label": "Categories/etiquetes per filtrar" }, "filterIsWhitelist": { - "label": "" + "label": "Filtra com a llista blanca" }, "applyFilterToRatio": { - "label": "" + "label": "Utilitza el filtre per calcular la ràtio" }, "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { - "noColumns": "", - "noCommunications": "" + "noColumns": "Seleccioneu columnes als elements", + "noCommunications": "No es poden carregar dades de la integració", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { - "columnTitle": "" + "columnTitle": "Controls" }, "added": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Afegit", + "detailsTitle": "Data d'addició" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Extres", + "detailsTitle": "Categories (o informació extra)" }, "downSpeed": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Baixada", + "detailsTitle": "Velocitat de descàrrega" }, "index": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "#", + "detailsTitle": "Índex actual dins del client" }, "id": { - "columnTitle": "" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { - "columnTitle": "" + "columnTitle": "Integració" }, "name": { - "columnTitle": "" + "columnTitle": "Nom de la feina" }, "progress": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Progrés", + "detailsTitle": "Progrés de la descàrrega" }, "ratio": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Ràtio", + "detailsTitle": "Ràtio del torrent (rebut/enviat)" }, "received": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Total baixat", + "detailsTitle": "Total descarregat" }, "sent": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Total pujat", + "detailsTitle": "Total penjat" }, "size": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Mida del fitxer", + "detailsTitle": "Mida total de la selecció/fitxers" }, "state": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Estat", + "detailsTitle": "Estat de la feina" }, "time": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Hora de finalització", + "detailsTitle": "Temps fins/des de la finalització", + "eta": "" }, "type": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Tipus", + "detailsTitle": "Tipus de client de descàrregues" }, "upSpeed": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Pujada", + "detailsTitle": "Velocitat de pujada" } }, "states": { - "downloading": "", - "queued": "", - "paused": "", - "completed": "", - "failed": "", - "processing": "", - "leeching": "", - "stalled": "", - "unknown": "", - "seeding": "" + "downloading": "Descarregant", + "queued": "En cua", + "paused": "En pausa", + "completed": "Completat", + "failed": "Fallat", + "processing": "Processant", + "leeching": "Leeching", + "stalled": "Estancat", + "unknown": "Desconegut", + "seeding": "Sembrant" }, "actions": { "clients": { - "modalTitle": "", - "pause": "", - "resume": "" + "modalTitle": "Llista de clients de descàrregues", + "pause": "Posa en pausa tots els clients/elements", + "resume": "Reprèn tots els clients/elements" }, "client": { - "pause": "", - "resume": "" + "pause": "Posa en pausa el client", + "resume": "Reprèn el client" }, "item": { - "pause": "", - "resume": "", + "pause": "Posa en pausa l'element", + "resume": "Reprèn l'element", "delete": { - "title": "", - "modalTitle": "", - "entry": "", - "entryAndFiles": "" + "title": "Elimina l'element", + "modalTitle": "Esteu segur que voleu eliminar aquesta feina?", + "entry": "Elimina l'entrada", + "entryAndFiles": "Elimina l'entrada i el(s) fitxer(s)" } } }, - "globalRatio": "" + "globalRatio": "Ràtio global", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3216,11 +3269,11 @@ } }, "mediaRequests-requestList": { - "name": "", - "description": "", + "name": "Llista de sol·licituds multimèdia", + "description": "Vegeu una llista de totes les sol·licituds multimèdia de la vostra instància Overseerr o Jellyseerr", "option": { "linksTargetNewTab": { - "label": "" + "label": "Obre els enllaços en una pestanya nova" }, "statusFilter": { "label": "" @@ -3230,106 +3283,106 @@ } }, "pending": { - "approve": "", - "approving": "", - "decline": "" + "approve": "Aprova la sol·licitud", + "approving": "Aprovant la sol·licitud...", + "decline": "Rebutja la sol·licitud" }, "availability": { - "unknown": "", - "pending": "", - "processing": "", + "unknown": "Desconegut", + "pending": "Pendent", + "processing": "Processant", "requested": "", - "partiallyAvailable": "", - "available": "", + "partiallyAvailable": "Parcial", + "available": "Disponible", "blacklisted": "", "deleted": "" }, "status": { - "pending": "", - "approved": "", - "declined": "", - "failed": "", + "pending": "Pendent", + "approved": "Aprovat", + "declined": "Rebutjat", + "failed": "Fallat", "completed": "" }, - "toBeDetermined": "" + "toBeDetermined": "Per determinar" }, "mediaRequests-requestStats": { - "name": "", - "description": "", + "name": "Estadístiques de sol·licituds multimèdia", + "description": "Estadístiques sobre les vostres sol·licituds multimèdia", "option": {}, "titles": { "stats": { - "main": "", - "approved": "", - "pending": "", - "processing": "", - "declined": "", - "available": "", - "tv": "", - "movie": "", - "total": "" + "main": "Estadístiques multimèdia", + "approved": "Ja aprovades", + "pending": "Aprovacions pendents", + "processing": "S'estan processant", + "declined": "Ja rebutjades", + "available": "Ja disponibles", + "tv": "Sol·licituds de TV", + "movie": "Sol·licituds de pel·lícules", + "total": "Total" }, "users": { - "main": "", - "requests": "" + "main": "Usuaris principals", + "requests": "Sol·licituds" } } }, "mediaTranscoding": { - "name": "", - "description": "", + "name": "Transcodificació multimèdia", + "description": "Estadístiques, cua actual i estat dels treballadors de la transcodificació multimèdia", "option": { "defaultView": { - "label": "" + "label": "Vista per defecte" }, "queuePageSize": { - "label": "" + "label": "Mida de pàgina de la cua" } }, "tab": { - "workers": "", - "queue": "", - "statistics": "" + "workers": "Treballadors", + "queue": "Cua", + "statistics": "Estadístiques" }, - "currentIndex": "", + "currentIndex": "{start}-{end} de {total}", "healthCheck": { - "title": "", - "queued": "", + "title": "Comprovació de salut", + "queued": "En cua", "status": { - "healthy": "", - "unhealthy": "" + "healthy": "Saludable", + "unhealthy": "No saludable" } }, "panel": { "statistics": { - "empty": "", - "transcodes": "", - "transcodesCount": "", - "healthChecksCount": "", - "filesCount": "", - "savedSpace": "", - "healthChecks": "", - "videoCodecs": "", - "videoContainers": "", - "videoResolutions": "" + "empty": "Buit", + "transcodes": "Transcodificacions", + "transcodesCount": "Transcodificacions", + "healthChecksCount": "Comprovacions de salut", + "filesCount": "Fitxers", + "savedSpace": "Espai estalviat", + "healthChecks": "Comprovacions de salut", + "videoCodecs": "Còdecs", + "videoContainers": "Contenidors", + "videoResolutions": "Resolucions" }, "workers": { - "empty": "", + "empty": "Buit", "table": { - "file": "", - "eta": "", - "progress": "", - "transcode": "", - "healthCheck": "" + "file": "Fitxer", + "eta": "ETA", + "progress": "Progrés", + "transcode": "Transcodifica", + "healthCheck": "Comprovació de salut" } }, "queue": { - "empty": "", + "empty": "Buit", "table": { - "file": "", - "size": "", - "transcode": "", - "healthCheck": "" + "file": "Fitxer", + "size": "Mida", + "transcode": "Transcodifica", + "healthCheck": "Comprovació de salut" } } } @@ -3364,20 +3417,20 @@ "timeLeft": "" }, "rssFeed": { - "name": "", - "description": "", + "name": "Fonts RSS", + "description": "Monitoritzeu i mostreu una o més fonts RSS, ATOM o JSON genèriques", "option": { "feedUrls": { - "label": "" + "label": "URLs de les fonts" }, "enableRtl": { - "label": "" + "label": "Activa RTL" }, "textLinesClamp": { - "label": "" + "label": "Límit de línies de la descripció" }, "maximumAmountPosts": { - "label": "" + "label": "Límit de quantitat de publicacions" }, "hideDescription": { "label": "" @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "", @@ -4128,96 +4175,96 @@ }, "widgetPreview": { "toggle": { - "enabled": "", - "disabled": "" + "enabled": "Mode d'edició activat", + "disabled": "Mode d'edició desactivat" }, "dimensions": { - "title": "" + "title": "Canvia les dimensions" } }, "board": { "action": { "duplicate": { - "title": "", - "message": "", + "title": "Duplicar tauler", + "message": "Això duplicarà el tauler {name} amb tot el seu contingut. Si els ginys fan referència a integracions que no tens permís per utilitzar, s'eliminaran.", "notification": { "success": { - "title": "", - "message": "" + "title": "Tauler duplicat", + "message": "El tauler s'ha duplicat correctament" }, "error": { - "title": "", - "message": "" + "title": "No s'ha pogut duplicar el tauler", + "message": "El tauler no s'ha pogut duplicar" } } }, "edit": { "notification": { "success": { - "title": "", - "message": "" + "title": "Els canvis s'han aplicat correctament", + "message": "El tauler s'ha desat correctament" }, "error": { - "title": "", - "message": "" + "title": "No s'han pogut aplicar els canvis", + "message": "No s'ha pogut desar el tauler" } }, "confirmLeave": { - "title": "", - "message": "" + "title": "Canvis no desats", + "message": "Teniu canvis sense desar, esteu segur que voleu sortir?" } }, "oldImport": { - "label": "", + "label": "Importa des d'Homarr anterior a la versió 1.0.0", "notification": { "success": { - "title": "", - "message": "" + "title": "Importació correcta", + "message": "El tauler s'ha importat correctament" }, "error": { - "title": "", - "message": "" + "title": "Importació fallida", + "message": "No s'ha pogut importar el tauler, comproveu els registres per a més detalls" } }, "form": { "file": { - "label": "", - "invalidError": "" + "label": "Selecciona un fitxer JSON", + "invalidError": "Fitxer de configuració no vàlid" }, "apps": { - "label": "", + "label": "Aplicacions", "avoidDuplicates": { - "label": "", - "description": "" + "label": "Evita duplicats", + "description": "Ignora les aplicacions on ja existeix una aplicació amb el mateix href" }, "onlyImportApps": { - "label": "", - "description": "" + "label": "Importa només les aplicacions", + "description": "Només afegeix les aplicacions, el tauler s'ha de tornar a crear manualment" } }, "name": { - "label": "" + "label": "Nom del tauler" }, "screenSize": { - "label": "", - "description": "", + "label": "Mida de la pantalla", + "description": "En versions anteriors a la 1.0 existien tres modes diferents, de manera que podíeu triar la quantitat de columnes per a cada mida de pantalla.", "option": { - "sm": "", - "md": "", - "lg": "" + "sm": "Petita", + "md": "Mitjana", + "lg": "Gran" } }, "sidebarBehavior": { - "label": "", - "description": "", + "label": "Comportament de la barra lateral", + "description": "Les barres laterals es van eliminar a la versió 1.0, podeu seleccionar què ha de passar amb els elements que contenen.", "option": { "lastSection": { - "label": "", - "description": "" + "label": "Última secció", + "description": "La barra lateral es mostrarà sota l'última secció" }, "removeItems": { - "label": "", - "description": "" + "label": "Elimina els elements", + "description": "Els elements continguts a la barra lateral s'eliminaran" } } } @@ -4225,26 +4272,26 @@ }, "quickCreateApp": { "modal": { - "title": "", - "createAndUse": "" + "title": "Crear aplicació al vol", + "createAndUse": "Crear i utilitzar" } } }, "field": { "pageTitle": { - "label": "" + "label": "Títol de la pàgina" }, "metaTitle": { - "label": "" + "label": "Títol meta" }, "logoImageUrl": { - "label": "" + "label": "URL de la imatge del logotip" }, "faviconImageUrl": { - "label": "" + "label": "URL de la icona favicon" }, "backgroundImageUrl": { - "label": "", + "label": "URL de la imatge de fons", "placeholder": "", "group": { "your": "", @@ -4252,187 +4299,187 @@ } }, "backgroundImageAttachment": { - "label": "", + "label": "Adjunció de la imatge de fons", "option": { "fixed": { - "label": "", - "description": "" + "label": "Fixa", + "description": "El fons es manté a la mateixa posició." }, "scroll": { - "label": "", - "description": "" + "label": "Desplaçament", + "description": "El fons es desplaça amb el ratolí." } } }, "backgroundImageRepeat": { - "label": "", + "label": "Repetició de la imatge de fons", "option": { "repeat": { - "label": "", - "description": "" + "label": "Repeteix", + "description": "La imatge es repeteix tantes vegades com calgui per cobrir tota l'àrea de pintura de la imatge de fons." }, "no-repeat": { - "label": "", - "description": "" + "label": "No repeteixis", + "description": "La imatge no es repeteix i pot no omplir tot l'espai." }, "repeat-x": { - "label": "", - "description": "" + "label": "Repeteix X", + "description": "Igual que 'Repeteix' però només a l'eix horitzontal." }, "repeat-y": { - "label": "", - "description": "" + "label": "Repeteix Y", + "description": "Igual que 'Repeteix' però només a l'eix vertical." } } }, "backgroundImageSize": { - "label": "", + "label": "Mida de la imatge de fons", "option": { "cover": { - "label": "", - "description": "" + "label": "Cobreix", + "description": "Escala la imatge tan petita com sigui possible per cobrir tota la finestra retallant l'espai sobrant." }, "contain": { - "label": "", - "description": "" + "label": "Conté", + "description": "Escala la imatge tan gran com sigui possible dins del seu contenidor sense retallar ni estirar la imatge." } } }, "primaryColor": { - "label": "" + "label": "Color primari" }, "secondaryColor": { - "label": "" + "label": "Color secundari" }, "opacity": { - "label": "" + "label": "Opacitat" }, "iconColor": { - "label": "" + "label": "Color de la icona" }, "clearColor": { "label": "" }, "customCss": { - "label": "", - "description": "", + "label": "css personalitzat per a aquest tauler", + "description": "Personalitzeu encara més el vostre tauler amb CSS, recomanat només per a usuaris experimentats", "customClassesAlert": { - "title": "", - "description": "" + "title": "Classes personalitzades", + "description": "Podeu afegir classes personalitzades als elements del tauler a les opcions avançades de cada element i utilitzar-les al CSS personalitzat anterior." } }, "disableStatus": { - "label": "", - "description": "" + "label": "Desactivar estat de l'aplicació", + "description": "Desactiva la comprovació d'estat per a totes les aplicacions d'aquest tauler" }, "columnCount": { - "label": "" + "label": "Nombre de columnes" }, "itemRadius": { - "label": "", - "description": "", + "label": "Radi de l'element", + "description": "Canvia l'arrodoniment de les rajoles del teu tauler", "option": { - "xs": "", - "sm": "", - "md": "", - "lg": "", - "xl": "" + "xs": "Molt petit", + "sm": "Petit", + "md": "Mitjà", + "lg": "Gran", + "xl": "Molt gran" } }, "name": { - "label": "" + "label": "Nom" }, "isPublic": { - "label": "", - "description": "" + "label": "Públic", + "description": "Els taulers públics són accessibles per a tothom, fins i tot sense compte." } }, "content": { - "metaTitle": "" + "metaTitle": "Tauler {boardName}" }, "setting": { - "title": "", + "title": "Configuració del tauler {boardName}", "section": { "general": { - "title": "", - "unrecognizedLink": "" + "title": "General", + "unrecognizedLink": "L'enllaç proporcionat no es reconeix i no es mostrarà una previsualització, però pot funcionar igualment." }, "layout": { - "title": "", + "title": "Disposició", "responsive": { - "title": "", + "title": "Disposicions responsives", "action": { - "add": "" + "add": "Afegir disposició" } } }, "background": { - "title": "" + "title": "Fons" }, "appearance": { - "title": "" + "title": "Aparença" }, "customCss": { - "title": "" + "title": "css personalitzat" }, "behavior": { - "title": "" + "title": "Comportament" }, "access": { - "title": "", + "title": "Control d'accés", "permission": { "item": { "view": { - "label": "" + "label": "Veure tauler" }, "modify": { - "label": "" + "label": "Modificar tauler" }, "full": { - "label": "" + "label": "Accés complet" } } } }, "dangerZone": { - "title": "", + "title": "Zona de perill", "action": { "rename": { - "label": "", - "description": "", - "button": "", + "label": "Canvia el nom del tauler", + "description": "Canviar el nom trencarà qualsevol enllaç a aquest tauler.", + "button": "Canvia el nom", "modal": { - "title": "" + "title": "Canvia el nom del tauler" } }, "visibility": { - "label": "", + "label": "Canvia la visibilitat del tauler", "description": { - "public": "", - "private": "" + "public": "Aquest tauler és actualment públic.", + "private": "Aquest tauler és actualment privat." }, "button": { - "public": "", - "private": "" + "public": "Fes-lo privat", + "private": "Fes-lo públic" }, "confirm": { "public": { - "title": "", - "description": "" + "title": "Fes privat el tauler", + "description": "Esteu segur que voleu fer privat aquest tauler? Això amagarà el tauler al públic. Els enllaços per a usuaris convidats es trencaran." }, "private": { - "title": "", - "description": "" + "title": "Fes públic el tauler", + "description": "Esteu segur que voleu fer públic aquest tauler? Això farà que el tauler sigui accessible per a tothom." } } }, "delete": { - "label": "", - "description": "", - "button": "", + "label": "Elimina aquest tauler", + "description": "Un cop elimineu un tauler, no el podreu recuperar. Estigueu-ne segurs.", + "button": "Elimina aquest tauler", "confirm": { - "title": "", - "description": "" + "title": "Elimina el tauler", + "description": "Esteu segur que voleu eliminar aquest tauler? Això suprimirà permanentment el tauler i tot el seu contingut." } } } @@ -4441,33 +4488,33 @@ }, "error": { "noBoard": { - "title": "", - "description": "", - "link": "", - "notice": "" + "title": "Benvingut a Homarr", + "description": "Un tauler elegant i modern que posa totes les aplicacions i serveis al vostre abast.", + "link": "Creeu el vostre primer tauler", + "notice": "Per fer desaparèixer aquesta pàgina, crea un tauler i estableix-lo com a tauler d'inici" }, "notFound": { - "title": "", - "description": "", - "link": "", - "notice": "" + "title": "Tauler no trobat", + "description": "El tauler especificat no s'ha trobat o no hi tens accés.", + "link": "Visualitzar tots els taulers", + "notice": "Comprova l'enllaç o contacta amb un administrador si creus que hauria de ser accessible" }, "homeBoard": { - "title": "", + "title": "Sense tauler d'inici", "admin": { - "description": "", - "link": "", - "notice": "" + "description": "Encara no has establert un tauler d'inici per al servidor.", + "link": "Configura el tauler d'inici de tot el servidor", + "notice": "Per fer desaparèixer aquesta pàgina per a tots els usuaris, estableix un tauler d'inici per al servidor" }, "user": { - "description": "", - "link": "", - "notice": "" + "description": "Encara no has establert un tauler d'inici.", + "link": "Configura el teu tauler d'inici", + "notice": "Per fer desaparèixer aquesta pàgina, especifica el tauler d'inici a les teves preferències" }, "anonymous": { - "description": "", - "link": "", - "notice": "" + "description": "L'administrador del servidor encara no ha establert un tauler d'inici.", + "link": "Visualitzar taulers públics", + "notice": "Per fer desaparèixer aquesta pàgina, demana a l'administrador del servidor que estableixi un tauler d'inici per al servidor" } } } @@ -4475,27 +4522,27 @@ "layout": { "field": { "name": { - "label": "" + "label": "Nom" }, "columnCount": { - "label": "" + "label": "Nombre de columnes" }, "breakpoint": { - "label": "", - "description": "" + "label": "Punt de ruptura", + "description": "La disposició s'utilitzarà en totes les pantalles més grans que aquest punt de ruptura fins al següent punt de ruptura més gran." } } }, "management": { - "metaTitle": "", + "metaTitle": "Gestió", "title": { - "morning": "", - "afternoon": "", - "evening": "" + "morning": "Bon dia, {username}", + "afternoon": "Bona tarda, {username}", + "evening": "Bon vespre, {username}" }, "notFound": { - "title": "", - "text": "" + "title": "No trobat", + "text": "No s'ha pogut trobar el recurs sol·licitat" }, "error": { "title": "", @@ -4504,63 +4551,63 @@ }, "navbar": { "items": { - "home": "", - "boards": "", - "apps": "", - "integrations": "", + "home": "Inici", + "boards": "Taulers", + "apps": "Aplicacions", + "integrations": "Integracions", "customWidgets": "", - "searchEngies": "", - "medias": "", + "searchEngies": "Motors de cerca", + "medias": "Multimèdia", "users": { - "label": "", + "label": "Usuaris", "items": { - "manage": "", - "invites": "", - "groups": "" + "manage": "Gestiona", + "invites": "Invitacions", + "groups": "Grups" } }, "tools": { - "label": "", + "label": "Eines", "items": { - "docker": "", - "kubernetes": "", - "logs": "", + "docker": "Docker", + "kubernetes": "Kubernetes", + "logs": "Registres", "api": "", - "certificates": "", - "tasks": "", + "certificates": "Certificats", + "tasks": "Tasques", "backup": "" } }, - "settings": "", + "settings": "Configuració", "help": { - "label": "", + "label": "Ajuda", "items": { - "documentation": "", - "submitIssue": "", - "discord": "", - "sourceCode": "" + "documentation": "Documentació", + "submitIssue": "Envieu un problema", + "discord": "Discord de la comunitat", + "sourceCode": "Codi font" } }, - "about": "" + "about": "Quant a" } }, "page": { "home": { "statistic": { - "board": "", - "user": "", - "invite": "", - "integration": "", - "app": "", - "group": "", + "board": "Taulers", + "user": "Usuaris", + "invite": "Invitacions", + "integration": "Integracions", + "app": "Aplicacions", + "group": "Grups", "searchEngine": "", "media": "" }, "statisticLabel": { - "boards": "", - "resources": "", - "authentication": "", - "authorization": "" + "boards": "Taulers", + "resources": "Recursos", + "authentication": "Autenticació", + "authorization": "Autorització" }, "heroBanner": { "title": "", @@ -4568,45 +4615,45 @@ } }, "board": { - "title": "", + "title": "Els vostres taulers", "action": { "new": { - "label": "" + "label": "Nou tauler" }, "open": { - "label": "" + "label": "Obre el tauler" }, "settings": { - "label": "" + "label": "Configuració" }, "setHomeBoard": { - "label": "", + "label": "Estableix com a tauler d'inici", "badge": { - "label": "", - "tooltip": "" + "label": "Inici", + "tooltip": "Aquest tauler es mostrarà com a tauler d'inici" } }, "setMobileHomeBoard": { - "label": "", + "label": "Establir com a tauler mòbil", "badge": { - "label": "", - "tooltip": "" + "label": "Mòbil", + "tooltip": "Aquest tauler es mostrarà com el teu tauler mòbil" } }, "duplicate": { - "label": "" + "label": "Duplicar tauler" }, "delete": { - "label": "", + "label": "Elimina permanentment", "confirm": { - "title": "", - "description": "" + "title": "Elimina el tauler", + "description": "Esteu segur que voleu eliminar el tauler {name}?" } } }, "visibility": { - "public": "", - "private": "" + "public": "Aquest tauler és públic", + "private": "Aquest tauler és privat" }, "noResults": { "title": "" @@ -4615,33 +4662,33 @@ "createBoard": { "field": { "name": { - "label": "" + "label": "Nom" } } } } }, "media": { - "includeFromAllUsers": "" + "includeFromAllUsers": "Inclou multimèdia de tots els usuaris" }, "user": { - "back": "", - "fieldsDisabledExternalProvider": "", + "back": "Torna als usuaris", + "fieldsDisabledExternalProvider": "Alguns camps estan desactivats perquè els gestiona un proveïdor d'autenticació extern.", "setting": { "general": { - "title": "", + "title": "General", "item": { - "language": "", + "language": "Idioma i regió", "board": { - "title": "", + "title": "Tauler d'inici", "type": { - "general": "", - "mobile": "" + "general": "General", + "mobile": "Mòbil" } }, - "search": "", - "firstDayOfWeek": "", - "accessibility": "", + "search": "Cerca", + "firstDayOfWeek": "Primer dia de la setmana", + "accessibility": "Accessibilitat", "onboardingTours": { "title": "", "description": "", @@ -4662,166 +4709,166 @@ } }, "security": { - "title": "" + "title": "Seguretat" }, "board": { - "title": "" + "title": "Taulers" } }, "list": { - "metaTitle": "", - "title": "" + "metaTitle": "Gestiona els usuaris", + "title": "Usuaris" }, "edit": { - "metaTitle": "" + "metaTitle": "Edita l'usuari {username}" }, "create": { - "metaTitle": "", - "title": "", + "metaTitle": "Crea un usuari", + "title": "Crea un usuari nou", "step": { "personalInformation": { - "label": "" + "label": "Informació personal" }, "security": { - "label": "" + "label": "Seguretat" }, "groups": { - "label": "", - "title": "", - "description": "" + "label": "Grups", + "title": "Seleccioneu tots els grups dels quals l'usuari ha de ser membre", + "description": "El grup {everyoneGroup} s'assigna a tots els usuaris i no es pot eliminar." }, "review": { - "label": "" + "label": "Revisió" }, "completed": { - "title": "" + "title": "Usuari creat" }, "error": { - "title": "" + "title": "Ha fallat la creació de l'usuari" } }, "action": { - "createAnother": "", - "back": "" + "createAnother": "Crea un altre usuari", + "back": "Torna a la llista d'usuaris" } }, "invite": { - "title": "", + "title": "Gestiona les invitacions d'usuari", "action": { "new": { - "title": "", - "description": "" + "title": "Nova invitació", + "description": "Després de l'expiració, una invitació ja no serà vàlida i el destinatari no podrà crear un compte." }, "copy": { - "title": "", - "description": "", - "link": "", - "button": "" + "title": "Copia la invitació", + "description": "S'ha generat la vostra invitació. Després de tancar aquesta finestra, ja no podreu copiar aquest enllaç. Si ja no voleu convidar aquesta persona, podeu eliminar la invitació en qualsevol moment.", + "link": "Enllaç d'invitació", + "button": "Copia i tanca" }, "delete": { - "title": "", - "description": "" + "title": "Elimina la invitació", + "description": "Esteu segur que voleu eliminar aquesta invitació? Els usuaris amb aquest enllaç ja no podran crear un compte amb ell." } }, "field": { "id": { - "label": "" + "label": "ID" }, "creator": { - "label": "" + "label": "Creador" }, "expirationDate": { - "label": "" + "label": "Data d'expiració" }, "token": { - "label": "" + "label": "Token" } } } }, "group": { - "back": "", + "back": "Torna als grups", "setting": { "general": { - "title": "", - "owner": "", - "ownerOfGroup": "", - "ownerOfGroupDeleted": "" + "title": "General", + "owner": "Propietari", + "ownerOfGroup": "Propietari d'aquest grup", + "ownerOfGroupDeleted": "El propietari d'aquest grup s'ha eliminat. Actualment no té propietari." }, "setting": { - "title": "", - "alert": "", + "title": "Configuració", + "alert": "La configuració del grup es prioritza per l'ordre dels grups a la llista. La configuració superior sobreescriu la inferior.", "board": { - "title": "" + "title": "Taulers" } }, "members": { - "title": "", - "search": "", - "notFound": "" + "title": "Membres", + "search": "Cerca un membre", + "notFound": "No s'ha trobat cap membre" }, "permissions": { - "title": "", + "title": "Permisos", "form": { - "unsavedChanges": "" + "unsavedChanges": "Teniu canvis no desats!" } } } }, "settings": { - "title": "", + "title": "Configuració", "notification": { "success": { - "message": "" + "message": "Configuració desada correctament" }, "error": { - "message": "" + "message": "No s'ha pogut desar la configuració" } }, "section": { "analytics": { - "title": "", + "title": "Analítica", "general": { "title": "", "text": "" } }, "crawlingAndIndexing": { - "title": "", - "warning": "", + "title": "Rastreig i indexació", + "warning": "Activar o desactivar qualsevol opció aquí afectarà severament com els motors de cerca indexaran i rastrejaran la vostra pàgina. Qualsevol configuració és una petició i depèn del rastrejador aplicar-la. Qualsevol modificació pot trigar fins a diversos dies o setmanes a aplicar-se. Algunes configuracions poden ser específiques de cada motor de cerca.", "noIndex": { - "title": "", - "text": "" + "title": "No indexar", + "text": "No indexis el lloc web als motors de cerca i no el mostris en cap resultat de cerca" }, "noFollow": { - "title": "", - "text": "" + "title": "No seguir", + "text": "No segueixis cap enllaç durant la indexació. Desactivar-ho farà que els rastrejadors intentin seguir tots els enllaços de Homarr." }, "noTranslate": { - "title": "", - "text": "" + "title": "No traduir", + "text": "Quan és probable que l'idioma del lloc no sigui el que l'usuari vulgui llegir, Google mostrarà un enllaç de traducció als resultats de cerca" }, "noSiteLinksSearchBox": { - "title": "", - "text": "" + "title": "Sense quadre de cerca d'enllaços del lloc", + "text": "Google crearà un quadre de cerca amb els enllaços rastrejats juntament amb altres enllaços directes. Activar-ho demanarà a Google que desactivi aquest quadre." } }, "board": { - "title": "", + "title": "Taulers", "homeBoard": { - "label": "", - "mobileLabel": "", - "description": "" + "label": "Tauler d'inici global", + "mobileLabel": "Tauler mòbil global", + "description": "Només hi ha taulers públics disponibles per seleccionar" }, "status": { - "title": "", + "title": "Estat de l'aplicació", "enableStatusByDefault": { - "label": "", - "description": "" + "label": "Activar estat per defecte", + "description": "En afegir un element d'aplicació, l'estat s'activarà per defecte" }, "forceDisableStatus": { - "label": "", - "description": "" + "label": "Forçar la desactivació de l'estat", + "description": "L'estat de les aplicacions es desactivarà per a tots els usuaris i no es podrà activar" } } }, @@ -4833,49 +4880,49 @@ } }, "search": { - "title": "", + "title": "Cerca", "defaultSearchEngine": { - "label": "", - "description": "" + "label": "Motor de cerca predeterminat global", + "description": "Els motors de cerca d'integració no es poden seleccionar aquí" } }, "appearance": { - "title": "", + "title": "Aparença", "defaultColorScheme": { - "label": "", + "label": "Esquema de color per defecte", "options": { "auto": "", - "light": "", - "dark": "" + "light": "Clar", + "dark": "Fosc" } } }, "culture": { - "title": "", + "title": "Cultura", "defaultLocale": { - "label": "" + "label": "Idioma per defecte" } } } }, "tool": { "tasks": { - "title": "", + "title": "Tasques", "status": { - "idle": "", - "running": "", - "error": "", + "idle": "Inactiu", + "running": "En execució", + "error": "Error", "disabled": "" }, "job": { "iconsUpdater": { - "label": "" + "label": "Actualitzador d'icones" }, "analytics": { - "label": "" + "label": "Analítica" }, "ping": { - "label": "" + "label": "Pings" } }, "interval": { @@ -4951,35 +4998,35 @@ } }, "api": { - "title": "", + "title": "API", "modal": { "createApiToken": { - "title": "", - "description": "", - "button": "" + "title": "Token d'API creat", + "description": "S'ha creat el token d'API. Aneu amb compte, aquest token està xifrat a la base de dades i mai se us transferirà de nou. Si perdeu aquest token, ja no podreu recuperar-lo.", + "button": "Copia i tanca" } }, "tab": { "documentation": { - "label": "" + "label": "Documentació" }, "apiKey": { - "label": "", - "title": "", + "label": "Autenticació", + "title": "Claus d'API", "button": { - "createApiToken": "" + "createApiToken": "Crea un token d'API" }, "modal": { "delete": { - "title": "", - "text": "" + "title": "Eliminar token d'API", + "text": "Això eliminarà permanentment el token d'API. Els clients d'API que utilitzin aquest token ja no podran autenticar-se ni realitzar sol·licituds d'API. Aquesta acció no es pot desfer." } }, "table": { "header": { - "id": "", - "createdBy": "", - "actions": "" + "id": "ID", + "createdBy": "Creat per", + "actions": "Accions" } } }, @@ -5195,24 +5242,24 @@ } }, "about": { - "version": "", - "text": "", + "version": "Versió {version}", + "text": "Homarr és un projecte de codi obert impulsat per la comunitat que és mantingut per voluntaris. Gràcies a aquestes persones, Homarr ha estat un projecte en creixement des del 2021. El nostre equip treballa completament en remot des de molts països diferents en Homarr durant el seu temps lliure sense compensació.", "accordion": { "contributors": { - "title": "", - "subtitle": "" + "title": "Col·laboradors", + "subtitle": "{count} mantenint el codi i Homarr" }, "translators": { - "title": "", - "subtitle": "" + "title": "Traductors", + "subtitle": "{count} contribuint amb traduccions en molts idiomes" }, "sponsors": { "title": "", "subtitle": "" }, "libraries": { - "title": "", - "subtitle": "" + "title": "Biblioteques", + "subtitle": "{count} utilitzades al codi de Homarr" }, "hotkeys": { "title": "", @@ -5234,32 +5281,32 @@ } }, "docker": { - "title": "", + "title": "Contenidors", "table": { - "updated": "", + "updated": "Actualitzat {when}", "refresh": { "lastUpdated": "" }, "search": "", - "selected": "", + "selected": "{selectCount} de {totalCount} contenidors seleccionats", "footer": "", "totalCpu": "", "totalMemory": "" }, "field": { "name": { - "label": "" + "label": "Nom" }, "state": { - "label": "", + "label": "Estat", "option": { - "created": "", - "running": "", - "paused": "", - "restarting": "", - "exited": "", - "removing": "", - "dead": "" + "created": "Creat", + "running": "En execució", + "paused": "En pausa", + "restarting": "Reiniciant", + "exited": "Aturat", + "removing": "Eliminant", + "dead": "Mort" } }, "stats": { @@ -5271,10 +5318,10 @@ } }, "containerImage": { - "label": "" + "label": "Imatge" }, "ports": { - "label": "" + "label": "Ports" }, "host": { "label": "" @@ -5289,395 +5336,396 @@ } }, "start": { - "label": "", + "label": "Inicia", "notification": { "success": { - "title": "", - "message": "" + "title": "Contenidors iniciats", + "message": "Els contenidors s'han iniciat correctament" }, "error": { - "title": "", - "message": "" + "title": "Contenidors no iniciats", + "message": "No s'han pogut iniciar els contenidors" } } }, "stop": { - "label": "", + "label": "Atura", "notification": { "success": { - "title": "", - "message": "" + "title": "Contenidors aturats", + "message": "Els contenidors s'han aturat correctament" }, "error": { - "title": "", - "message": "" + "title": "Contenidors no aturats", + "message": "No s'han pogut aturar els contenidors" } } }, "restart": { - "label": "", + "label": "Reinicia", "notification": { "success": { - "title": "", - "message": "" + "title": "Contenidors reiniciats", + "message": "Els contenidors s'han reiniciat correctament" }, "error": { - "title": "", - "message": "" + "title": "Contenidors no reiniciats", + "message": "No s'han pogut reiniciar els contenidors" } } }, "remove": { - "label": "", + "label": "Elimina", + "confirm": "", "notification": { "success": { - "title": "", - "message": "" + "title": "Contenidors eliminats", + "message": "Els contenidors s'han eliminat correctament" }, "error": { - "title": "", - "message": "" + "title": "Contenidors no eliminats", + "message": "No s'han pogut eliminar els contenidors" } } }, "refresh": { - "label": "", + "label": "Actualitza", "notification": { "success": { - "title": "", - "message": "" + "title": "Contenidors actualitzats", + "message": "Esteu veient les dades més recents" }, "error": { - "title": "", - "message": "" + "title": "Contenidors no actualitzats", + "message": "Alguna cosa ha anat malament en actualitzar els contenidors" } } }, "addToHomarr": { - "label": "", + "label": "Afegir a Homarr", "notification": { "success": { - "title": "", - "message": "" + "title": "Afegit a Homarr", + "message": "Les aplicacions seleccionades s'han afegit a Homarr" }, "error": { - "title": "", - "message": "" + "title": "No s'ha pogut afegir a Homarr", + "message": "Les aplicacions seleccionades no s'han pogut afegir a Homarr" } }, "modal": { - "title": "" + "title": "Afegir contenidor(s) Docker a Homarr" } } }, "error": { - "internalServerError": "", + "internalServerError": "No s'han pogut obtenir els contenidors Docker", "noColumns": "" } }, "kubernetes": { "cluster": { - "title": "", - "label": "", - "providers": "", - "version": "", - "architecture": "", + "title": "Tauler del Clúster", + "label": "Clúster", + "providers": "Proveïdors", + "version": "Versió", + "architecture": "Arquitectura", "capacity": { - "title": "", + "title": "Capacitat", "resource": { - "reserved": "", - "used": "" + "reserved": "Reservat", + "used": "Utilitzat" } }, "resources": { - "title": "", - "nodes": "", - "namespaces": "", - "ingresses": "", - "services": "", - "pods": "", - "configmaps": "", - "secrets": "", - "volumes": "" + "title": "Recursos", + "nodes": "Nodes", + "namespaces": "Espais de noms", + "ingresses": "Ingressos", + "services": "Serveis", + "pods": "Pods", + "configmaps": "ConfigMaps", + "secrets": "Secrets", + "volumes": "Volums" } }, "nodes": { - "label": "", + "label": "Nodes", "field": { "name": { - "label": "" + "label": "Nom" }, "state": { - "label": "", + "label": "Estat", "option": { - "ready": "", - "NotReady": "" + "ready": "Preparat", + "NotReady": "No preparat" } }, "cpu": { - "label": "" + "label": "CPU" }, "memory": { - "label": "" + "label": "RAM" }, "pods": { - "label": "" + "label": "Pods" }, "operatingSystem": { - "label": "" + "label": "SO" }, "architecture": { - "label": "" + "label": "Arquitectura" }, "kubernetesVersion": { - "label": "" + "label": "Versió de Kubernetes" }, "creationTimestamp": { - "label": "" + "label": "Creat" } }, "table": { - "search": "" + "search": "Cercar {count} nodes" } }, "namespaces": { - "label": "", + "label": "Espais de noms", "field": { "name": { - "label": "" + "label": "Nom" }, "state": { - "label": "", + "label": "Estat", "option": { - "active": "", - "terminating": "" + "active": "Actiu", + "terminating": "Finalitzant" } }, "creationTimestamp": { - "label": "" + "label": "Creat" } }, "table": { - "search": "" + "search": "Cercar {count} espais de noms" } }, "ingresses": { - "label": "", + "label": "Ingressos", "field": { "name": { - "label": "" + "label": "Nom" }, "namespace": { - "label": "" + "label": "Espai de noms" }, "className": { - "label": "" + "label": "Nom de la classe" }, "rulesAndPaths": { - "label": "" + "label": "Regles i rutes" }, "creationTimestamp": { - "label": "" + "label": "Creat" } }, "table": { - "search": "" + "search": "Cercar {count} ingressos" } }, "services": { - "label": "", + "label": "Serveis", "field": { "name": { - "label": "" + "label": "Nom" }, "namespace": { - "label": "" + "label": "Espai de noms" }, "type": { - "label": "" + "label": "Tipus" }, "ports": { - "label": "" + "label": "Ports" }, "targetPorts": { - "label": "" + "label": "Ports de destí" }, "clusterIP": { - "label": "" + "label": "IP del clúster" }, "creationTimestamp": { - "label": "" + "label": "Creat" } }, "table": { - "search": "" + "search": "Cercar {count} serveis" } }, "pods": { - "label": "", + "label": "Pods", "field": { "name": { - "label": "" + "label": "Nom" }, "namespace": { - "label": "" + "label": "Espai de noms" }, "image": { - "label": "" + "label": "Imatge" }, "applicationType": { - "label": "" + "label": "Tipus d'aplicació" }, "status": { - "label": "" + "label": "Estat" }, "creationTimestamp": { - "label": "" + "label": "Creat" } }, "table": { - "search": "" + "search": "Cercar {count} pods" } }, "secrets": { - "label": "", + "label": "Secrets", "field": { "name": { - "label": "" + "label": "Nom" }, "namespace": { - "label": "" + "label": "espai de noms" }, "type": { - "label": "" + "label": "tipus" }, "creationTimestamp": { - "label": "" + "label": "Creat" } }, "table": { - "search": "" + "search": "Cercar {count} secrets" } }, "configmaps": { - "label": "", + "label": "ConfigMaps", "field": { "name": { - "label": "" + "label": "Nom" }, "namespace": { - "label": "" + "label": "espai de noms" }, "creationTimestamp": { - "label": "" + "label": "Creat" } }, "table": { - "search": "" + "search": "Cercar {count} configMaps" } }, "volumes": { - "label": "", + "label": "Volums", "field": { "name": { - "label": "" + "label": "Nom" }, "namespace": { - "label": "" + "label": "Espai de noms" }, "accessModes": { - "label": "" + "label": "Modes d'accés" }, "storage": { - "label": "" + "label": "Emmagatzematge" }, "storageClassName": { - "label": "" + "label": "Nom de la classe d'emmagatzematge" }, "volumeMode": { - "label": "" + "label": "Mode de volum" }, "volumeName": { - "label": "" + "label": "Nom del volum" }, "status": { - "label": "" + "label": "Estat" }, "creationTimestamp": { - "label": "" + "label": "Creat" } }, "table": { - "search": "" + "search": "Cercar {count} volums" } }, "error": { - "internalServerError": "" + "internalServerError": "No s'han pogut obtenir les dades de Kubernetes" } }, "permission": { - "title": "", + "title": "Permisos", "userSelect": { - "title": "" + "title": "Afegeix permís d'usuari" }, "groupSelect": { - "title": "" + "title": "Afegeix permís de grup" }, "tab": { - "user": "", - "group": "", - "inherited": "" + "user": "Usuaris", + "group": "Grups", + "inherited": "Grups heretats" }, "field": { "user": { - "label": "" + "label": "Usuari" }, "group": { - "label": "" + "label": "Grup" }, "permission": { - "label": "" + "label": "Permís" } }, "action": { - "saveUser": "", - "saveGroup": "" + "saveUser": "Desa el permís d'usuari", + "saveGroup": "Desa el permís de grup" } }, "navigationStructure": { "manage": { - "label": "", + "label": "Gestiona", "boards": { - "label": "" + "label": "Taulers" }, "integrations": { - "label": "", + "label": "Integracions", "edit": { - "label": "" + "label": "Edita" }, "new": { - "label": "" + "label": "Nou" } }, "search-engines": { - "label": "", + "label": "Motors de cerca", "new": { - "label": "" + "label": "Nou" }, "edit": { - "label": "" + "label": "Edita" } }, "medias": { - "label": "" + "label": "Multimèdia" }, "apps": { - "label": "", + "label": "Aplicacions", "new": { - "label": "" + "label": "Nou" }, "edit": { - "label": "" + "label": "Edita" } }, "custom-widgets": { @@ -5693,176 +5741,176 @@ } }, "users": { - "label": "", + "label": "Usuaris", "create": { - "label": "" + "label": "Crea" }, - "general": "", - "security": "", - "board": "", + "general": "General", + "security": "Seguretat", + "board": "Taulers", "groups": { - "label": "" + "label": "Grups" }, "invites": { - "label": "" + "label": "Invitacions" } }, "tools": { - "label": "", + "label": "Eines", "tasks": { "label": "" }, "docker": { - "label": "", + "label": "Docker", "logs": { "label": "" } }, "kubernetes": { - "label": "", + "label": "Kubernetes", "nodes": { - "label": "" + "label": "Nodes" }, "namespaces": { - "label": "" + "label": "Espais de noms" }, "ingresses": { - "label": "" + "label": "Ingressos" }, "services": { - "label": "" + "label": "Serveis" }, "pods": { - "label": "" + "label": "pods" }, "configmaps": { - "label": "" + "label": "ConfigMaps" }, "secrets": { - "label": "" + "label": "Secrets" }, "volumes": { - "label": "" + "label": "Volums" } }, "logs": { - "label": "" + "label": "Registres" }, "certificates": { - "label": "", + "label": "Certificats", "hostnames": { "label": "" } } }, "settings": { - "label": "" + "label": "Configuració" }, "about": { - "label": "" + "label": "Quant a" } } }, "search": { - "placeholder": "", - "nothingFound": "", + "placeholder": "Cerca qualsevol cosa", + "nothingFound": "No s'ha trobat res", "error": { - "fetch": "" + "fetch": "S'ha produït un error en obtenir les dades" }, "mode": { "appIntegrationBoard": { - "help": "", + "help": "Cerca aplicacions, integracions o taulers", "group": { "app": { - "title": "", + "title": "Aplicacions", "children": { "action": { "open": { - "label": "" + "label": "Obre l'url de l'aplicació" }, "edit": { - "label": "" + "label": "Edita l'aplicació" } }, "detail": { - "title": "" + "title": "Seleccioneu una acció per a l'aplicació" } } }, "board": { - "title": "", + "title": "Taulers", "children": { "action": { "open": { - "label": "" + "label": "Obre el tauler" }, "homeBoard": { - "label": "" + "label": "Estableix com a tauler d'inici" }, "mobileBoard": { - "label": "" + "label": "Establir com a tauler mòbil" }, "settings": { - "label": "" + "label": "Obre la configuració" } }, "detail": { - "title": "" + "title": "Seleccioneu una acció per al tauler" } } }, "integration": { - "title": "" + "title": "Integracions" } } }, "command": { - "help": "", + "help": "Activa el mode d'ordres", "group": { "localCommand": { - "title": "" + "title": "Ordres locals" }, "globalCommand": { - "title": "", + "title": "Ordres globals", "option": { "colorScheme": { "auto": "", - "light": "", - "dark": "" + "light": "Canvia al mode clar", + "dark": "Canvia al mode fosc" }, "language": { - "label": "", + "label": "Canvia l'idioma", "children": { "detail": { - "title": "" + "title": "Seleccioneu l'idioma preferit" } } }, "newBoard": { - "label": "" + "label": "Crea un tauler nou" }, "importBoard": { - "label": "" + "label": "Importa un tauler" }, "newApp": { - "label": "" + "label": "Crea una aplicació nova" }, "newIntegration": { - "label": "", + "label": "Crea una integració nova", "children": { "detail": { - "title": "" + "title": "Seleccioneu el tipus d'integració que voleu crear" } } }, "newUser": { - "label": "" + "label": "Crea un usuari nou" }, "newInvite": { - "label": "" + "label": "Crea una invitació nova" }, "newGroup": { - "label": "" + "label": "Crea un grup nou" } } }, @@ -5985,9 +6033,9 @@ }, "media": { "help": "", - "requestMovie": "", - "requestSeries": "", - "openIn": "", + "requestMovie": "Sol·licitar pel·lícula", + "requestSeries": "Sol·licitar sèrie", + "openIn": "Obrir a {kind}", "group": { "title": "" }, @@ -6010,10 +6058,10 @@ } }, "external": { - "help": "", + "help": "Utilitza un motor de cerca extern", "group": { "searchEngine": { - "title": "", + "title": "Motors de cerca", "tipDdgBangs": "", "bang": { "searchWithQuery": "", @@ -6025,36 +6073,36 @@ "children": { "action": { "search": { - "label": "" + "label": "Cerca amb {name}" } }, "detail": { - "title": "" + "title": "Seleccioneu una acció per al motor de cerca" }, "searchResults": { - "title": "" + "title": "Seleccioneu un resultat de cerca per a accions" } }, "option": { "google": { - "name": "", - "description": "" + "name": "Google", + "description": "Cerca a la web amb Google" }, "bing": { - "name": "", - "description": "" + "name": "Bing", + "description": "Cerca a la web amb Bing" }, "duckduckgo": { - "name": "", - "description": "" + "name": "DuckDuckGo", + "description": "Cerca a la web amb DuckDuckGo" }, "torrent": { - "name": "", - "description": "" + "name": "Torrents", + "description": "Cerca torrents a torrentdownloads.pro" }, "youTube": { - "name": "", - "description": "" + "name": "YouTube", + "description": "Cerca vídeos a YouTube" } } } @@ -6063,19 +6111,19 @@ "help": { "group": { "mode": { - "title": "" + "title": "Modes" }, "help": { - "title": "", + "title": "Ajuda", "option": { "documentation": { - "label": "" + "label": "Documentació" }, "submitIssue": { - "label": "" + "label": "Envieu un problema" }, "discord": { - "label": "" + "label": "Discord de la comunitat" } } } @@ -6084,121 +6132,121 @@ "home": { "group": { "search": { - "title": "", + "title": "Cerca", "option": { "other": { - "label": "" + "label": "Cerca amb un altre motor de cerca" }, "no-default": { - "label": "", - "description": "" + "label": "Sense motor de cerca predeterminat", + "description": "Estableix un motor de cerca predeterminat a les preferències" }, "search": { - "label": "" + "label": "Cercar \"{query}\" amb {name}" }, "from-integration": { - "description": "" + "description": "Comença a escriure per cercar" } } }, "local": { - "title": "" + "title": "Resultats locals" } } }, "page": { - "help": "", + "help": "Cerca pàgines", "group": { "page": { - "title": "", + "title": "Pàgines", "option": { "manageHome": { - "label": "" + "label": "Gestiona la pàgina d'inici" }, "manageBoard": { - "label": "" + "label": "Gestiona els taulers" }, "manageApp": { - "label": "" + "label": "Gestiona les aplicacions" }, "manageIntegration": { - "label": "" + "label": "Gestiona les integracions" }, "manageSearchEngine": { - "label": "" + "label": "Gestiona els motors de cerca" }, "manageMedia": { - "label": "" + "label": "Gestiona la multimèdia" }, "manageUser": { - "label": "" + "label": "Gestiona els usuaris" }, "manageInvite": { - "label": "" + "label": "Gestiona les invitacions" }, "manageGroup": { - "label": "" + "label": "Gestiona els grups" }, "manageDocker": { - "label": "" + "label": "Gestiona Docker" }, "manageApi": { - "label": "" + "label": "API Swagger" }, "manageLog": { - "label": "" + "label": "Mostra els registres" }, "manageTask": { - "label": "" + "label": "Gestiona les tasques" }, "manageSettings": { - "label": "" + "label": "Configuració global" }, "about": { - "label": "" + "label": "Quant a" }, "homeBoard": { - "label": "" + "label": "Tauler d'inici" }, "preferences": { - "label": "" + "label": "Les vostres preferències" } } } } }, "userGroup": { - "help": "", + "help": "Cerca usuaris o grups", "group": { "user": { - "title": "", + "title": "Usuaris", "children": { "action": { "detail": { - "label": "" + "label": "Mostra els detalls de l'usuari" } }, "detail": { - "title": "" + "title": "Seleccioneu una acció per a l'usuari" } } }, "group": { - "title": "", + "title": "Grups", "children": { "action": { "detail": { - "label": "" + "label": "Mostra els detalls del grup" }, "manageMember": { - "label": "" + "label": "Gestiona els membres" }, "managePermission": { - "label": "" + "label": "Gestiona els permisos" } }, "detail": { - "title": "" + "title": "Seleccioneu una acció per al grup" } } } @@ -6206,72 +6254,72 @@ } }, "engine": { - "search": "", + "search": "Cerca un motor de cerca", "field": { "name": { - "label": "" + "label": "Nom" }, "short": { - "label": "" + "label": "Curt" }, "urlTemplate": { - "label": "" + "label": "Plantilla d'URL de cerca" }, "description": { - "label": "" + "label": "Descripció" } }, "page": { "list": { - "title": "", + "title": "Motors de cerca", "noResults": { - "title": "", - "action": "" + "title": "Encara no hi ha motors de cerca", + "action": "Creeu el vostre primer motor de cerca" }, - "interactive": "" + "interactive": "Interactiu, utilitza una integració" }, "create": { - "title": "", + "title": "Nou motor de cerca", "notification": { "success": { - "title": "", - "message": "" + "title": "Motor de cerca creat", + "message": "El motor de cerca s'ha creat correctament" }, "error": { - "title": "", - "message": "" + "title": "Motor de cerca no creat", + "message": "No s'ha pogut crear el motor de cerca" } } }, "edit": { - "title": "", + "title": "Edita el motor de cerca", "notification": { "success": { - "title": "", - "message": "" + "title": "Canvis aplicats correctament", + "message": "El motor de cerca s'ha desat correctament" }, "error": { - "title": "", - "message": "" + "title": "No s'han pogut aplicar els canvis", + "message": "No s'ha pogut desar el motor de cerca" } }, - "configControl": "", + "configControl": "Configuració", "searchEngineType": { - "generic": "", - "fromIntegration": "" + "generic": "Genèric", + "fromIntegration": "Des de la integració" } }, "delete": { - "title": "", - "message": "", + "title": "Elimina el motor de cerca", + "message": "Segur que desitges esborrar el motor de cerca {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Motor de cerca eliminat", + "message": "El motor de cerca s'ha eliminat correctament" }, "error": { - "title": "", - "message": "" + "title": "Motor de cerca no eliminat", + "message": "No s'ha pogut eliminar el motor de cerca" } } } @@ -6279,11 +6327,11 @@ "media": { "request": { "modal": { - "title": "", + "title": "Sol·licitar \"{name}\"", "table": { "header": { - "season": "", - "episodes": "", + "season": "Temporada", + "episodes": "Episodis", "status": "" }, "status": { @@ -6291,7 +6339,7 @@ } }, "button": { - "send": "" + "send": "Enviar sol·licitud" } } } @@ -6324,16 +6372,16 @@ }, "page": { "list": { - "title": "", - "description": "", + "title": "Certificats de confiança", + "description": "Utilitzat per Homarr per sol·licitar dades de les integracions.", "noResults": { - "title": "" + "title": "Encara no hi ha certificats" }, "invalid": { "title": "", "description": "" }, - "expires": "", + "expires": "Caduca {when}", "toHostnames": "" }, "hostnames": { @@ -6347,29 +6395,29 @@ }, "action": { "create": { - "label": "", + "label": "Afegir certificat", "notification": { "success": { - "title": "", - "message": "" + "title": "Certificat afegit", + "message": "El certificat s'ha afegit correctament" }, "error": { - "title": "", - "message": "" + "title": "No s'ha pogut afegir el certificat", + "message": "El certificat no s'ha pogut afegir" } } }, "remove": { - "label": "", - "confirm": "", + "label": "Eliminar certificat", + "confirm": "Esteu segur que voleu eliminar el certificat?", "notification": { "success": { - "title": "", - "message": "" + "title": "Certificat eliminat", + "message": "El certificat s'ha eliminat correctament" }, "error": { - "title": "", - "message": "" + "title": "Certificat no eliminat", + "message": "El certificat no s'ha pogut eliminar" } } }, diff --git a/packages/translation/src/lang/cn.json b/packages/translation/src/lang/cn.json index 4f29cda39..79145d7fd 100644 --- a/packages/translation/src/lang/cn.json +++ b/packages/translation/src/lang/cn.json @@ -8,9 +8,9 @@ "action": { "scratch": "从零开始", "importOldmarr": "从 1.0 之前的 Homarr 导入", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "从 SQLite 备份恢复", + "restoreSqliteDescription": "上传来自先前 Homarr 实例的完整 SQLite 数据库备份。这将恢复所有面板、用户、应用、集成和设置。", + "backToOptions": "← 返回设置选项" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "配置服务器的设置" }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "集成", + "subtitle": "选择您使用的服务。", + "description": "选择您要连接的集成。我们将自动为您设置带有匹配小部件的面板。", "action": { - "continue": "", - "skip": "" + "continue": "继续", + "skip": "暂时跳过" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} / {total}", + "skip": "跳过此集成", + "finishing": "正在设置您的面板……", "error": { - "title": "", - "message": "" + "title": "设置失败", + "message": "设置面板时出现问题。请重试。" }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "URL 帮助程序", + "description": "这些帮助程序尝试猜测服务的 URL。如果无效,只需手动输入地址。" } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "基础 URL", + "placeholder": "homelab.local 或 192.168.1.1", + "hint": "输入您的基础域或 IP 以自动填充集成 URL", + "warning": "立即设置基础 URL 将自动填充所有集成 URL,从而节省设置时间", + "preview": "例如 {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "子域名", + "hostPort": "主机:端口" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker 检测到 {count} 个服务", + "detectedBreakdown": "{integrations} 个集成 · {apps} 个应用", + "summary": "Homarr 检测到 {apps} 个应用,其中 {integrations} 个具有内置集成", + "appBadge": "应用", + "appSectionLabel": "要添加到面板的应用(已选择 {count} 个)", + "scanning": "正在扫描 Docker……", + "scanningDescription": "正在查找系统上运行的容器" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "密码", - "suggestionsTitle": "", + "suggestionsTitle": "密码建议", "suggestion": { "length": "至少包含 8 个字符", "lowercase": "包含小写字母", @@ -691,20 +691,20 @@ "customWidget": { "page": { "list": { - "title": "", - "noResults": "", - "loading": "" + "title": "自定义小部件", + "noResults": "暂无自定义小部件。创建您的第一个!", + "loading": "加载中……" }, "create": { - "title": "", - "subtitle": "" + "title": "创建自定义小部件", + "subtitle": "定义 API URL、身份验证以及如何显示响应数据。" }, "edit": { - "title": "" + "title": "编辑自定义小部件" } }, "action": { - "create": "", + "create": "创建", "import": "", "save": "", "delete": "", @@ -987,47 +987,47 @@ "placeholder": "自定义应用URL" }, "apiKeySettings": { - "label": "" + "label": "获取 API 密钥" } }, "action": { "create": "新建集成" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} 个小部件", + "noWidgets": "无小部件", + "detected": "通过 Docker 检测到" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "媒体", + "calendar": "日历", + "mediaSearch": "搜索", + "mediaRelease": "发布", + "mediaRequest": "请求", + "downloadClient": "下载", + "usenet": "Usenet", + "torrent": "种子", + "miscellaneous": "杂项", + "smartHomeServer": "智能家居", + "indexerManager": "索引器", + "healthMonitoring": "健康", + "search": "搜索", + "mediaTranscoding": "转码", + "networkController": "网络", + "releasesProvider": "发布", + "notifications": "通知", + "firewall": "防火墙", + "timetable": "时刻表", + "photoService": "照片", + "documents": "文档", + "notes": "笔记", + "mediaMonitoring": "监控", + "speedtest": "速度测试", + "analytics": "分析", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "媒体库", + "uptimeMonitoring": "运行时间监控" }, "testConnection": { "action": { @@ -1310,8 +1310,8 @@ "newLabel": "新建私钥" }, "slug": { - "label": "", - "newLabel": "" + "label": "状态页面标识", + "newLabel": "新的状态页面标识" } } }, @@ -1321,22 +1321,22 @@ "full": "完整的组件访问权限" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "自托管有声书和播客服务器" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "自托管音乐流媒体服务器,兼容 Subsonic API" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "自托管运行时间监控,带有公开状态页", "secret": { "slug": { - "description": "" + "description": "公开状态页的标识。如果未设置,默认为 \"default\"。" }, "apiKey": { - "description": "" + "description": "用于经过身份验证的 /metrics 访问的可选 API 密钥" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "用于归档和组织扫描文档的文档管理系统" }, "patchmon": { "name": "", @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "未上传媒体" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "添加", "apply": "应用", "backToOverview": "返回概览", - "skip": "", + "skip": "跳过", "change": "更改", "create": "创建", "createAnother": "创建并重新开始", @@ -1431,8 +1431,8 @@ "checkLogs": "检查日志获取更多详情", "tryAgain": "重试", "loading": "正在加载", - "show": "", - "hide": "" + "show": "显示", + "hide": "隐藏" }, "here": "这里", "iconPicker": { @@ -1602,7 +1602,7 @@ "label": { "create": "新建分类", "changePosition": "换位", - "settings": "" + "settings": "设置" } }, "openAllInNewTabs": { @@ -1659,11 +1659,11 @@ "edit": { "title": "编辑项目", "tab": { - "widget": "", - "app": "" + "widget": "编辑小部件", + "app": "编辑应用" }, "app": { - "propagationNotice": "" + "propagationNotice": "对此应用的更改将应用于所有面板中使用它的所有位置。" }, "advancedOptions": { "label": "高级选项", @@ -1776,7 +1776,7 @@ "label": "在新标签页中打开" }, "withBorder": { - "label": "" + "label": "显示边框" }, "items": { "label": "书签", @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "倒序" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "获取容器统计信息失败" + "internalServerError": "获取容器统计信息失败", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "通过 NUT 服务器监控 UPS 设备的状态", "option": { "showBattery": { - "label": "" + "label": "显示电池" }, "showLoad": { - "label": "" + "label": "显示负载" }, "showVoltage": { - "label": "" + "label": "显示电压" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "在线", + "onBattery": "使用电池", + "lowBattery": "电池电量低", + "charging": "充电中", + "unknown": "未知" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "运行时间", + "load": "负载", + "input": "输入", + "output": "输出" }, "error": { - "internalServerError": "" + "internalServerError": "获取 UPS 数据失败" } }, "tracearr": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "只显示当前正在播放", "description": "禁用此功能对plex不起作用" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "正在播放", "user": "用户", @@ -2734,6 +2757,9 @@ "id": "ID", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,48 +2784,48 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Paperless-ngx 文档存档概览", + "documentsTotal": "文档总数", + "documentsInbox": "收件箱", + "correspondents": "通讯员", + "tags": "标签", + "documentTypes": "文档类型", + "inboxRatio": "收件箱比率", + "inbox": "收件箱", + "total": "总计", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "显示收件箱比率", + "description": "在主要部分显示收件箱与总文档的比率" }, "showInboxRing": { - "label": "", - "description": "" + "label": "显示收件箱圆环", + "description": "在收件箱比率旁边显示进度圆环" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "显示文档总数", + "description": "显示存档中的文档总数" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "显示收件箱计数", + "description": "显示收件箱中未处理文档的数量" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "显示通讯员", + "description": "显示通讯员的总数" }, "showTags": { - "label": "", - "description": "" + "label": "显示标签", + "description": "显示标签的总数" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "显示文档类型", + "description": "显示文档类型的总数" } }, "error": { - "internalServerError": "" + "internalServerError": "获取 Paperless-ngx 数据失败" } }, "patchmon": { @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "限制每个集成的项目", "description": "这将限制每个集成显示的项目数量,而不是全局项目" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "在项目中选择列", - "noCommunications": "无法从集成中加载数据" + "noCommunications": "无法从集成中加载数据", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "客户端中的当前索引" }, "id": { - "columnTitle": "ID" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "集成" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "完成时间", - "detailsTitle": "完成时间" + "detailsTitle": "完成时间", + "eta": "" }, "type": { "columnTitle": "类型", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "全局比率" + "globalRatio": "全局比率", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "媒体发布", @@ -3652,43 +3705,43 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "监控来自 Uptime Kuma 状态页的运行时间统计信息", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "显示平均运行时间", + "description": "显示 24 小时平均运行时间百分比" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "显示运行时间圆环", + "description": "在平均运行时间值旁边显示进度圆环" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "显示监视器总数", + "description": "显示已配置的监视器总数" }, "showUpCount": { - "label": "", - "description": "" + "label": "显示正常数量", + "description": "显示当前正常的监视器数量" }, "showDownCount": { - "label": "", - "description": "" + "label": "显示故障数量", + "description": "显示当前故障的监视器数量" }, "showPausedCount": { - "label": "", - "description": "" + "label": "显示暂停数量", + "description": "显示当前暂停的监视器数量" } }, - "averageUptime": "", + "averageUptime": "平均运行时间(24 小时)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "监视器总数", + "upCount": "正常", + "downCount": "故障", + "pausedCount": "暂停" }, "error": { - "internalServerError": "" + "internalServerError": "获取运行时间数据失败" } }, "traefik": { @@ -3726,70 +3779,56 @@ } }, "audioStats": { - "name": "", - "description": "", + "name": "音频统计", + "description": "来自 Navidrome 或 Audiobookshelf 的库和播放统计信息", "option": { "showArtists": { - "label": "", - "description": "" + "label": "显示艺术家", + "description": "显示音乐库中艺术家的总数 (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "显示专辑", + "description": "显示音乐库中专辑的总数 (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "显示歌曲", + "description": "显示音乐库中歌曲的总数 (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "显示库数量", + "description": "显示实例中的库数量 (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "显示有声书", + "description": "显示所有库中的有声书总数 (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "显示播客", + "description": "显示所有库中的播客总数 (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "显示收听时间", + "description": "显示您的总收听时间 (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "显示活跃会话", + "description": "显示当前活跃的播放会话数量 (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "紧凑模式", + "description": "使用更密集的布局和较小的磁贴,适合小尺寸小部件" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "艺术家", + "albums": "专辑", + "songs": "歌曲", + "libraryCount": "库", + "audiobooks": "有声书", + "podcasts": "播客", + "listeningTime": "收听时长", + "activeSessions": "活跃会话", "error": { - "internalServerError": "" + "internalServerError": "获取音频统计数据失败" } }, "systemResources": { @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel 系统(表格)", + "description": "所有 Beszel 监控系统的表格视图,具有可排序列和状态指示器", "option": { "statusFilter": { - "label": "" + "label": "状态过滤器" }, "sortBy": { - "label": "" + "label": "排序方式" }, "sortDirection": { - "label": "" + "label": "排序方向" }, "showCpu": { - "label": "" + "label": "显示 CPU" }, "showMemory": { - "label": "" + "label": "显示内存" }, "showDisk": { - "label": "" + "label": "显示磁盘" }, "showGpu": { - "label": "" + "label": "显示 GPU" }, "showLoadAvg": { - "label": "" + "label": "显示平均负载" }, "showNet": { - "label": "" + "label": "显示网络" }, "showTemp": { - "label": "" + "label": "显示温度" }, "showBattery": { - "label": "" + "label": "显示电池" }, "showServices": { - "label": "" + "label": "显示服务" }, "showUptime": { - "label": "" + "label": "显示运行时间" }, "showAgent": { + "label": "显示代理版本" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "未找到系统", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "系统", + "cpu": "CPU", + "memory": "内存", + "disk": "磁盘", + "gpu": "GPU", + "loadAvg": "平均负载", + "net": "网络", + "temp": "温度", + "battery": "电池", + "services": "服务", + "uptime": "运行时间", + "agent": "代理" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel 系统(网格)", + "description": "所有 Beszel 监控系统的卡片网格视图,具有实时指标", "option": { "statusFilter": { - "label": "" + "label": "状态过滤器" }, "showCpu": { - "label": "" + "label": "显示 CPU" }, "showMemory": { - "label": "" + "label": "显示内存" }, "showDisk": { - "label": "" + "label": "显示磁盘" }, "showGpu": { - "label": "" + "label": "显示 GPU" }, "showLoadAvg": { - "label": "" + "label": "显示平均负载" }, "showNet": { - "label": "" + "label": "显示网络" }, "showTemp": { - "label": "" + "label": "显示温度" }, "showBattery": { - "label": "" + "label": "显示电池" }, "showServices": { - "label": "" + "label": "显示服务" }, "showUptime": { - "label": "" + "label": "显示运行时间" }, "showAgent": { - "label": "" + "label": "显示代理版本" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "内存", + "disk": "磁盘", + "gpu": "GPU", + "loadAvg": "平均负载", + "net": "网络", + "temp": "温度", + "battery": "电池", + "services": "服务", + "uptime": "运行时间", + "agent": "代理" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel 警报", + "description": "查看 Beszel 警报配置和历史记录", "option": { "showHistory": { - "label": "" + "label": "显示警报历史" }, "maxHistoryItems": { - "label": "" + "label": "最大历史记录条数" } }, - "empty": "", + "empty": "未配置警报", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "历史记录", + "resolved": "已解决", "status": { - "triggered": "", - "ok": "" + "triggered": "已触发", + "ok": "正常" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel 系统状态", + "description": "CPU、内存、磁盘、网络和 Docker 容器指标的时间序列图表", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "时间段" }, "showCpu": { - "label": "" + "label": "显示 CPU 图表" }, "showMemory": { - "label": "" + "label": "显示内存图表" }, "showDisk": { - "label": "" + "label": "显示磁盘图表" }, "showDiskIO": { - "label": "" + "label": "显示磁盘 I/O 图表" }, "showNetwork": { - "label": "" + "label": "显示网络图表" }, "showDockerCpu": { - "label": "" + "label": "显示 Docker CPU 图表" }, "showDockerMemory": { - "label": "" + "label": "显示 Docker 内存图表" }, "showDockerNetwork": { - "label": "" + "label": "显示 Docker 网络图表" } }, - "selectSystem": "", + "selectSystem": "选择系统", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU 使用率", + "subtitle": "平均系统 CPU 利用率", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "内存使用率", + "subtitle": "记录时的精确利用率", + "series": "已用", + "cache": "缓存/缓冲区" }, "disk": { - "title": "", + "title": "磁盘使用率", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "磁盘 I/O", + "subtitle": "根文件系统的吞吐量", + "read": "读取", + "write": "写入" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "带宽", + "subtitle": "公共接口的网络流量", + "sent": "已发送", + "recv": "已接收" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU 使用率", + "subtitle": "容器的平均 CPU 利用率" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker 内存使用率", + "subtitle": "Docker 容器的内存使用" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker 网络 I/O", + "subtitle": "Docker 容器的网络流量" } } } @@ -4528,7 +4575,7 @@ "api": "API", "certificates": "证书", "tasks": "任务", - "backup": "" + "backup": "备份" } }, "settings": "设置", @@ -4609,7 +4656,7 @@ "private": "此面板是私有的" }, "noResults": { - "title": "" + "title": "暂无面板" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "一周的第一天", "accessibility": "无障碍服务", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "入门指南", + "description": "重置入门指南,以便在下次访问管理中心或面板时再次看到它们。", + "reset": "重置入门指南", "resetSuccess": { - "title": "", - "message": "" + "title": "指南已重置", + "message": "入门指南将在您下次访问时再次显示" }, "status": { - "completed": "", - "notStarted": "" + "completed": "已完成", + "notStarted": "未开始" }, "name": { - "management": "", - "dashboard": "" + "management": "管理中心", + "dashboard": "面板" } } } @@ -4984,213 +5031,213 @@ } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "AI / MCP", + "title": "AI 集成", + "subtitle": "模型上下文协议 (MCP) 服务器", + "description": "将 AI 助手连接到您的 Homarr 实例,通过自然语言控制整个家庭实验室。在 Overseerr 上搜索和请求媒体,管理 Docker 容器,切换 Pi-hole,检查服务器健康状况,控制 Home Assistant 设备等——一切通过您的 AI 助手完成。", + "noApiKey": "您需要一个 API 密钥来与 MCP 服务器进行身份验证。", + "createApiKeyButton": "创建 API 密钥", "endpoint": { - "title": "" + "title": "MCP 端点" }, "authentication": { - "title": "", - "intro": "", + "title": "认证", + "intro": "您可以使用 API 密钥或 OAuth 与 MCP 服务器进行身份验证。两种方法授予相同的访问级别。", "apiKey": { - "title": "", - "description": "" + "title": "API 密钥 (手动)", + "description": "在 MCP 客户端配置中传递带有完整 API 密钥的 ApiKey 标头。" }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (浏览器登录)", + "description": "支持 OAuth 的客户端(如 Claude Code、opencode 或 Cursor)可以通过打开浏览器窗口进行身份验证。在客户端中运行 auth 命令,在浏览器中登录 Homarr,即可连接——API 密钥会自动创建。", + "hint": "OAuth 令牌在身份验证选项卡中显示为常规 API 密钥。您可以随时撤销它们。" }, - "permissions": "" + "permissions": "API 密钥决定了 AI 可用的权限——它与密钥所有者具有相同的访问级别。" }, "clientConfig": { - "title": "", + "title": "客户端配置", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "推荐", + "title": "可流式 HTTP", + "worksWith": "适用于: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", + "addToConfig": "添加到您的 MCP 客户端配置文件:", + "cursor": "{name}: 项目或全局设置中的 {file}", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} 或使用 {command}", + "vsCodeCopilot": "{name}: 工作区设置中的 {file}", + "replaceHint": "将占位符替换为您在创建时收到的 API 密钥。" }, "stdio": { - "title": "", - "description": "" + "title": "stdio (通过 mcp-remote 桥接的旧客户端)", + "description": "仅支持 stdio 传输的客户端。需要本地安装 {dependency} (Node.js):" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "测试您的连接", + "description": "在终端中运行此命令以验证端点是否可达以及 API 密钥是否有效:", + "hint": "成功响应将返回 MCP 服务器功能。如果出现错误,请检查 JSON 响应以获取提示。" }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "可用工具", + "description": "{count} 个工具可用。展开类别以查看各个工具及其描述。", + "columnType": "类型", + "columnName": "工具", + "columnDescription": "描述" }, "troubleshooting": { - "title": "", + "title": "故障排除", "missingHeader": { - "title": "", - "description": "" + "title": "\"缺少 ApiKey 标头\"", + "description": "您的客户端未发送 {header} 标头。验证 MCP 配置中的 {section} 部分是否正确。某些客户端在配置更改后需要重启。" }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"无效的 ApiKey 格式\"", + "description": "确保您复制了完整的 API 密钥,而不仅仅是部分。" }, "invalidKey": { - "title": "", - "description": "" + "title": "\"无效的 API 密钥\"", + "description": "找不到密钥 ID 或令牌错误。API 密钥仅在创建时可见一次。如果您丢失了它,请删除旧密钥并创建新密钥。" }, "connectionRefused": { - "title": "", - "description": "" + "title": "连接被拒绝 / 超时", + "description": "确保 URL 可从您的 AI 客户端访问。如果 Homarr 在反向代理或 Docker 后运行,请使用外部 URL (不是 {localhost})。验证端口是否正确 (默认: Docker 为 7575)。" }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "工具未出现", + "description": "某些工具需要配置特定的集成(例如 Docker、Overseerr)。工具列表取决于 Homarr 实例中的可用内容。" } }, - "copy": "", + "copy": "复制", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "一键安装", + "subtitle": "使用 OAuth — 首次使用时在浏览器中进行身份验证", + "vsCode": "在 VS Code 中安装", + "cursor": "在 Cursor 中安装", + "copyUrl": "复制 MCP URL", + "copied": "已复制!", + "copyHint": "适用于 ChatGPT、Claude Code 或任何 MCP 客户端", + "manualConfig": "手动配置" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "完整数据库备份", + "metaTitle": "备份与恢复", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "导出数据库", + "description": "下载包含所有设置、用户、面板和加密集成密钥的 SQLite 数据库的完整备份。备份打包为 ZIP 文件,附带加密密钥和元数据。", + "button": "下载备份", + "error": "导出失败", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "敏感数据导出", + "warningTitle": "此导出包含您的整个数据库。", + "warningBody": "备份包括所有用户、集成密钥(加密)、API 密钥、面板配置和应用数据。将导出的文件安全存储,不要分享。", + "typePrompt": "输入 \"{phrase}\" 以继续", + "submit": "导出数据库", + "cancel": "取消" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "恢复数据库", + "description": "上传先前导出的备份 ZIP 以恢复您的数据库。这将替换您的整个数据库。如果备份是使用不同的加密密钥创建的,密钥将自动重新加密。", + "warning": "恢复备份将完全替换您当前的数据库并重启应用程序。此操作无法撤销。", "dropzone": { - "title": "", - "description": "" + "title": "将备份 ZIP 拖到此处或点击浏览", + "description": "仅接受 Homarr SQLite 备份的 .zip 文件" }, - "changeFile": "", - "button": "", + "changeFile": "更改文件", + "button": "恢复数据库", "success": { - "title": "", - "message": "" + "title": "恢复完成", + "message": "数据库已成功恢复。应用程序正在重启……" }, - "error": "" + "error": "导入失败" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "备份内容", + "exported": "导出时间:{date}", + "loading": "正在分析备份文件……", + "errorTitle": "预览错误", + "entity": "实体", + "count": "数量", + "boards": "面板", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "面板", + "user": "用户", + "app": "应用", + "integration": "集成", + "item": "小部件", + "media": "媒体", + "search_engine": "搜索引擎" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "分析备份文件失败", + "invalidMissingMetadata": "无效备份:缺少 metadata.json", + "invalidMissingDb": "无效备份:缺少 db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "将备份 ZIP 拖到此处", + "description": "接受 Homarr SQLite 备份的 .zip 文件(最大 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "正在分析备份……", + "changeFile": "更改文件", + "continueToRestore": "继续恢复", + "tryAgain": "重试", + "analysisError": "分析错误", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "备份内容", + "exported": "导出时间:{date}", + "entity": "实体", + "count": "数量", + "boards": "面板", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "面板", + "user": "用户", + "app": "应用", + "integration": "集成", + "item": "小部件", + "media": "媒体", + "search_engine": "搜索引擎" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "已应用 {count} 个迁移", + "migrationsAppliedPlural": "已应用 {count} 个迁移", + "migrationsOlderVersion": "此备份来自较旧的 Homarr 版本。已应用 {count} 个架构迁移以使其更新。", + "migrationsOlderVersionPlural": "此备份来自较旧的 Homarr 版本。已应用 {count} 个架构迁移以使其更新。", + "migrationsUpToDate": "数据库架构已是最新(已应用 {count} 个迁移)", + "upToDate": "已更新", + "migrationsPending": "{count} 个待处理" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "正在应用迁移 ({current}/{total})", + "migrationLabel": "迁移 {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "破坏性操作", + "warningTitle": "这将永久替换您的整个数据库。", + "warningBody": "所有当前面板、用户、应用、集成、设置和会话都将丢失。此操作无法撤销。应用将在恢复后重启。", + "typePrompt": "输入 \"{phrase}\" 以继续", + "cancel": "取消", + "submit": "恢复数据库" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "正在恢复数据库……", + "extracting": "提取备份存档", + "migrating": "应用数据库迁移", + "encrypting": "重新加密集成密钥", + "swapping": "替换数据库文件", + "restarting": "重启服务器" }, "complete": { - "title": "", - "message": "" + "title": "恢复完成", + "message": "数据库已成功恢复。服务器正在重启——请几秒钟后刷新页面。" }, "failed": { - "title": "" + "title": "恢复失败" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "无效备份:缺少 metadata.json", + "invalidMissingDb": "无效备份:缺少 db.sqlite", + "analyzeError": "分析备份失败" } } }, @@ -5283,9 +5330,9 @@ "action": { "title": "操作", "logs": { - "label": "", + "label": "查看日志", "page": { - "title": "" + "title": "{name} 日志" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "删除", + "confirm": "", "notification": { "success": { "title": "容器已删除", @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "日志" } }, "kubernetes": { @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "偏好设置", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "选择要更改的偏好", + "backHint": "按 Backspace 或使用返回按钮返回", + "backAction": "返回" } }, "notification": { "error": { - "message": "" + "message": "无法更新偏好" } }, "option": { "preferences": { - "label": "" + "label": "打开偏好设置" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "已启用", + "disabled": "已禁用" }, "board": { - "none": "", - "unavailable": "" + "none": "无", + "unavailable": "当前选择(不可用)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "无", + "unavailable": "当前选择(不可用)" }, "colorScheme": { - "label": "", + "label": "配色方案", "children": { "detail": { - "title": "" + "title": "选择您的配色方案" } } }, "locale": { - "label": "", + "label": "语言", "children": { "detail": { - "title": "" + "title": "选择您的首选语言" } } }, "defaultSearchEngineId": { - "label": "", + "label": "默认搜索引擎", "children": { "detail": { - "title": "" + "title": "选择您的默认搜索引擎" } } }, "openSearchInNewTab": { - "label": "", + "label": "在新标签页中打开搜索结果", "children": { "detail": { - "title": "" + "title": "在新标签页中打开搜索结果" } } }, "ddgBangs": { - "label": "", + "label": "启用 DuckDuckGo bangs", "children": { "detail": { - "title": "" + "title": "启用 DuckDuckGo bangs" } } }, "firstDayOfWeek": { - "label": "", + "label": "一周的第一天", "children": { "detail": { - "title": "" + "title": "选择一周的第一天" } } }, "homeBoardId": { - "label": "", + "label": "主面板", "children": { "detail": { - "title": "" + "title": "选择您的主面板" } } }, "mobileHomeBoardId": { - "label": "", + "label": "移动端主面板", "children": { "detail": { - "title": "" + "title": "选择您的移动端主面板" } } }, "pingIconsEnabled": { - "label": "", + "label": "为 ping 使用图标", "children": { "detail": { - "title": "" + "title": "为 ping 使用图标" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "打开完整偏好设置页面" } } } } }, "media": { - "help": "", + "help": "搜索电影或节目以请求", "requestMovie": "请求电影", "requestSeries": "请求电视节目", "openIn": "在 {kind} 中打开", "group": { - "title": "" + "title": "电影和节目" }, "action": { "search": { - "label": "", - "description": "", + "label": "搜索电影或节目", + "description": "开始输入以搜索您的媒体请求集成", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "添加 Overseerr、Jellyseerr 或 Seerr 集成以启用媒体搜索。", + "scoped": "此小部件没有可访问的媒体请求集成。" } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "可用", + "partiallyAvailable": "部分可用", + "processing": "处理中", + "requested": "已请求", + "pending": "已请求" } }, "external": { @@ -6284,10 +6332,10 @@ "header": { "season": "季", "episodes": "集", - "status": "" + "status": "状态" }, "status": { - "requested": "" + "requested": "已请求" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "阅读文档", + "next": "下一步", + "prev": "上一步", + "done": "完成", + "skip": "跳过导览", "manage": { "welcome": { - "title": "", - "description": "" + "title": "欢迎使用 Homarr!", + "description": "这是您的控制中心。您可以在此管理面板、应用、集成、用户和服务器设置。让我们浏览每个部分。" }, "boardsList": { - "title": "", - "description": "" + "title": "您的面板", + "description": "这里是您的所有面板。每个面板都有自己的布局、背景和访问设置。您可以查看每个面板的创建者以及它是公开的还是私有的。" }, "boardsCreate": { - "title": "", - "description": "" + "title": "创建面板", + "description": "点击此处创建新面板或从以前的 Homarr 安装中导入。每个面板都有自己可共享的 URL。" }, "appsList": { - "title": "", - "description": "" + "title": "您的应用", + "description": "这些是您添加的所有应用——指向自托管服务的链接。每个应用都有图标、可选的健康检查和面板上的状态徽章。" }, "appsCreate": { - "title": "", - "description": "" + "title": "添加应用", + "description": "在此注册新服务。为其命名、URL 和图标——它将作为磁贴显示在您的面板上,并带有实时状态监控。" }, "integrationsList": { - "title": "", - "description": "" + "title": "您的集成", + "description": "这些是连接到 Homarr 的服务——Sonarr、Radarr、Plex、Jellyfin 及 50 多种其他服务。所有凭据在静态时均加密。" }, "integrationsCreate": { - "title": "", - "description": "" + "title": "添加集成", + "description": "在此连接新服务。选择类型,输入 URL 和 API 密钥——Homarr 在保存前会验证连接。" }, "usersList": { - "title": "", - "description": "" + "title": "您的用户", + "description": "查看所有有访问权限的人员。将用户组织到组中,并控制谁可以查看或编辑每个面板。" }, "usersCreate": { - "title": "", - "description": "" + "title": "创建用户", + "description": "在此添加新用户账户。您也可以使用邀请链接方便地引入。导览到此结束——您已准备就绪!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "这是您的面板", + "description": "一个拖放式面板,您可以在其中排列应用和小部件。随时按 Ctrl+K 搜索应用、面板和操作。" }, "editMode": { - "title": "", - "description": "" + "title": "编辑模式", + "description": "点击此处进入编辑模式。然后您可以添加小部件、应用和分区——拖放调整位置,用角手柄调整大小。再次点击保存更改。" }, "settings": { - "title": "", - "description": "" + "title": "面板设置", + "description": "更改此面板的名称、列数、背景、颜色以及访问权限。每个面板可以是公开或私有的。" }, "switcher": { - "title": "", - "description": "" + "title": "切换面板", + "description": "在面板间跳转。为不同目的创建独立的面板——媒体、网络、按用户或任何您喜欢的。" }, "userMenu": { - "title": "", - "description": "" + "title": "您的个人资料", + "description": "更改您的配色方案、语言、主面板和偏好。您也可以从此处跳转到管理中心。" } } } diff --git a/packages/translation/src/lang/cr.json b/packages/translation/src/lang/cr.json index 56b344fc6..a164a6354 100644 --- a/packages/translation/src/lang/cr.json +++ b/packages/translation/src/lang/cr.json @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "crwdns3820:0crwdne3820:0" + }, + "columnOrder": { + "label": "crwdns6155:0crwdne6155:0" + }, + "columnWidths": { + "label": "crwdns6157:0crwdne6157:0" } }, "error": { - "internalServerError": "crwdns3428:0crwdne3428:0" + "internalServerError": "crwdns3428:0crwdne3428:0", + "layoutSaveTitle": "crwdns6159:0crwdne6159:0", + "layoutSaveMessage": "crwdns6161:0crwdne6161:0" + }, + "empty": { + "noContainers": "crwdns6163:0crwdne6163:0" } }, "coolify": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "crwdns3176:0crwdne3176:0", "description": "crwdns3178:0crwdne3178:0" + }, + "showBitrate": { + "label": "crwdns6175:0crwdne6175:0", + "description": "crwdns6177:0crwdne6177:0" + }, + "showLocation": { + "label": "crwdns6179:0crwdne6179:0", + "description": "crwdns6181:0crwdne6181:0" } }, + "footer": { + "streams": "crwdns6183:0count={count}crwdne6183:0", + "totalBitrate": "crwdns6185:0{bitrate}crwdne6185:0" + }, "items": { "currentlyPlaying": "crwdns2847:0crwdne2847:0", "user": "crwdns2476:0crwdne2476:0", @@ -2734,6 +2757,9 @@ "id": "crwdns2480:0crwdne2480:0", "status": "crwdns6085:0crwdne6085:0", "directPlay": "crwdns6087:0crwdne6087:0", + "directStream": "crwdns6187:0crwdne6187:0", + "transcodeVideo": "crwdns6189:0crwdne6189:0", + "transcodeAudio": "crwdns6191:0crwdne6191:0", "transcoding": "crwdns6089:0crwdne6089:0", "paused": "crwdns6091:0crwdne6091:0", "remaining": "crwdns6093:0{minutes}crwdne6093:0", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "crwdns3442:0crwdne3442:0", "description": "crwdns3444:0crwdne3444:0" + }, + "columnOrder": { + "label": "crwdns6121:0crwdne6121:0" + }, + "columnWidths": { + "label": "crwdns6123:0crwdne6123:0" } }, "errors": { "noColumns": "crwdns1194:0crwdne1194:0", - "noCommunications": "crwdns1196:0crwdne1196:0" + "noCommunications": "crwdns1196:0crwdne1196:0", + "noItems": "crwdns6125:0crwdne6125:0", + "actionFailed": "crwdns6127:0crwdne6127:0", + "actionFailedMessage": "crwdns6129:0crwdne6129:0" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "crwdns1214:0crwdne1214:0" }, "id": { - "columnTitle": "crwdns1216:0crwdne1216:0" + "columnTitle": "crwdns1216:0crwdne1216:0", + "detailsTitle": "crwdns6131:0crwdne6131:0" }, "integration": { "columnTitle": "crwdns1218:0crwdne1218:0" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "crwdns1246:0crwdne1246:0", - "detailsTitle": "crwdns1248:0crwdne1248:0" + "detailsTitle": "crwdns1248:0crwdne1248:0", + "eta": "crwdns6133:0crwdne6133:0" }, "type": { "columnTitle": "crwdns1250:0crwdne1250:0", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "crwdns1300:0crwdne1300:0" + "globalRatio": "crwdns1300:0crwdne1300:0", + "contextMenu": { + "copyName": "crwdns6135:0crwdne6135:0", + "copyId": "crwdns6137:0crwdne6137:0", + "clearFilters": "crwdns6139:0crwdne6139:0" + }, + "footer": { + "filter": "crwdns6141:0crwdne6141:0" + }, + "stats": { + "show": "crwdns6143:0crwdne6143:0", + "hide": "crwdns6145:0crwdne6145:0", + "overallProgress": "crwdns6147:0crwdne6147:0", + "totalSize": "crwdns6149:0crwdne6149:0", + "clients": "crwdns6151:0count={count}crwdne6151:0" + }, + "disconnected": "crwdns6153:0crwdne6153:0" }, "mediaReleases": { "name": "crwdns3532:0crwdne3532:0", @@ -3741,18 +3794,6 @@ "label": "crwdns5109:0crwdne5109:0", "description": "crwdns5111:0crwdne5111:0" }, - "showNowPlaying": { - "label": "crwdns5113:0crwdne5113:0", - "description": "crwdns5115:0crwdne5115:0" - }, - "showNowPlayingList": { - "label": "crwdns5117:0crwdne5117:0", - "description": "crwdns5119:0crwdne5119:0" - }, - "maxNowPlayingItems": { - "label": "crwdns5121:0crwdne5121:0", - "description": "crwdns5123:0crwdne5123:0" - }, "showLibraryCount": { "label": "crwdns5125:0crwdne5125:0", "description": "crwdns5127:0crwdne5127:0" @@ -3786,8 +3827,6 @@ "podcasts": "crwdns5159:0crwdne5159:0", "listeningTime": "crwdns5161:0crwdne5161:0", "activeSessions": "crwdns5163:0crwdne5163:0", - "nowPlaying": "crwdns5165:0crwdne5165:0", - "nowPlayingCount": "crwdns5167:0count={count}crwdne5167:0", "error": { "internalServerError": "crwdns5169:0crwdne5169:0" } @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "crwdns4809:0crwdne4809:0" + }, + "columnOrder": { + "label": "crwdns6165:0crwdne6165:0" + }, + "columnWidths": { + "label": "crwdns6167:0crwdne6167:0" } }, "noRecords": "crwdns4811:0crwdne4811:0", "error": { - "internalServerError": "crwdns5651:0crwdne5651:0" + "internalServerError": "crwdns5651:0crwdne5651:0", + "layoutSaveTitle": "crwdns6169:0crwdne6169:0", + "layoutSaveMessage": "crwdns6171:0crwdne6171:0" }, "column": { "system": "crwdns4813:0crwdne4813:0", @@ -5329,6 +5376,7 @@ }, "remove": { "label": "crwdns1952:0crwdne1952:0", + "confirm": "crwdns6173:0crwdne6173:0", "notification": { "success": { "title": "crwdns1954:0crwdne1954:0", diff --git a/packages/translation/src/lang/cs.json b/packages/translation/src/lang/cs.json index e2d7a82fa..8e9a14e72 100644 --- a/packages/translation/src/lang/cs.json +++ b/packages/translation/src/lang/cs.json @@ -8,9 +8,9 @@ "action": { "scratch": "Začít od začátku", "importOldmarr": "Import z Homarru před verzí 1.0", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Obnovit ze zálohy SQLite", + "restoreSqliteDescription": "Nahrajte kompletní zálohu SQLite databáze z předchozí instance Homarru. Tím se obnoví všechny plochy, uživatelé, aplikace, integrace a nastavení.", + "backToOptions": "← Zpět na možnosti nastavení" } }, "import": { @@ -96,7 +96,7 @@ "integrations": { "title": "Integrace", "subtitle": "Vyberte služby, které používáte.", - "description": "Vyberte integrace, které chcete připojit. Automaticky nastavíme váš dashboard s odpovídajícími widgety.", + "description": "Vyberte integrace, které chcete připojit. Automaticky nastavíme vaši plochu s odpovídajícími widgety.", "action": { "continue": "Pokračovat", "skip": "Prozatím přeskočit" @@ -104,35 +104,35 @@ "configure": { "progress": "{current} z {total}", "skip": "Přeskočit tuto integraci", - "finishing": "", + "finishing": "Nastavování vaší plochy...", "error": { - "title": "", - "message": "" + "title": "Nastavení se nezdařilo", + "message": "Během nastavování vaší plochy se něco pokazilo. Zkuste to prosím znovu." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "Pomocníci s URL", + "description": "Tito pomocníci se pokusí uhodnout URL vašich služeb. Pokud to nefunguje, zadejte adresu ručně." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Základní URL", + "placeholder": "homelab.local nebo 192.168.1.1", + "hint": "Zadejte svou základní doménu nebo IP pro automatické vyplnění integračních URL", + "warning": "Nastavením základní URL nyní se automaticky vyplní všechna integrační URL, což vám ušetří čas během nastavování", + "preview": "např. {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Subdoména", + "hostPort": "Hostitel:Port" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker detekoval {count} služeb", + "detectedBreakdown": "{integrations} integrací · {apps} aplikací", + "summary": "Homarr detekoval {apps} aplikací, {integrations} z nich má vestavěné integrace", + "appBadge": "Aplikace", + "appSectionLabel": "Aplikace k přidání na plochu ({count} vybráno)", + "scanning": "Skenování Dockeru...", + "scanningDescription": "Hledání běžících kontejnerů ve vašem systému" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "Heslo", - "suggestionsTitle": "", + "suggestionsTitle": "Návrhy hesel", "suggestion": { "length": "Obsahuje alespoň 8 znaků", "lowercase": "Obsahuje malé písmeno", @@ -203,13 +203,13 @@ "description": "" }, "defaultSearchEngine": { - "label": "" + "label": "Výchozí vyhledávač" }, "openSearchInNewTab": { - "label": "" + "label": "Otevřít výsledky vyhledávání v nové kartě" }, "ddgBangs": { - "label": "" + "label": "Povolit DuckDuckGo bangs" } }, "error": { @@ -272,10 +272,10 @@ "changeSearchPreferences": { "notification": { "success": { - "message": "" + "message": "Hledané předvolby úspěšně změněny" }, "error": { - "message": "" + "message": "Nelze změnit předvolby vyhledávání" } } }, @@ -302,10 +302,10 @@ "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo bangs úspěšně přepnuty" }, "error": { - "message": "" + "message": "Nelze přepnout DuckDuckGo bangs" } } }, @@ -370,12 +370,12 @@ "name": "Název", "members": "Členové", "homeBoard": { - "label": "", - "description": "" + "label": "Domovský panel", + "description": "Mohou být vybrány pouze panely přístupné pro skupinu" }, "mobileBoard": { - "label": "", - "description": "" + "label": "Mobilní panel", + "description": "Mohou být vybrány pouze panely přístupné pro skupinu" } }, "permission": { @@ -577,12 +577,12 @@ "board": { "notification": { "success": { - "title": "", + "title": "Nastvení uloženo", "message": "" }, "error": { - "title": "", - "message": "" + "title": "Uložení nastavení selhalo", + "message": "Neporařilo se uložit nastavení panelu" } } } @@ -590,38 +590,38 @@ "changePosition": { "notification": { "success": { - "message": "" + "message": "Pozice úspěšně změněna" }, "error": { - "message": "" + "message": "Nepodařilo se změnit pozici" } } } }, "defaultGroup": { - "name": "", - "description": "" + "name": "Výchozí skupina", + "description": "{name} - Všichni přihlášení uživatelé" } }, "app": { - "search": "", + "search": "Najít aplikaci", "page": { "list": { "title": "Aplikace", "noResults": { - "title": "", - "action": "" + "title": "Zatím nejsou žádné aplikace", + "action": "Vytvořte svou první aplikaci" } }, "create": { - "title": "", + "title": "Nová aplikace", "notification": { "success": { - "title": "", - "message": "" + "title": "Vytvoření bylo úspěšné", + "message": "Aplikace byla úspěšně vytvořena" }, "error": { - "title": "", + "title": "Vytvoření selhalo", "message": "Aplikaci nelze vytvořit" } } @@ -666,7 +666,7 @@ }, "useDifferentUrlForPing": { "checkbox": { - "label": "", + "label": "Použít jinou URL pro ping", "description": "" } } @@ -674,18 +674,18 @@ "action": { "select": { "label": "Vybrat aplikaci", - "notFound": "", + "notFound": "Nenalezena žádná aplikace", "search": "", - "noResults": "", - "action": "", - "title": "" + "noResults": "Žádné výsledky", + "action": "Vybrat {app}", + "title": "Vyberte aplikaci, kterou chcete přidat do tohoto panelu" }, "create": { - "title": "", - "description": "", + "title": "Vytvořit novou aplikaci", + "description": "Vytvořit novou aplikaci ", "action": "" }, - "add": "" + "add": "Přidat aplikaci" } }, "customWidget": { @@ -693,7 +693,7 @@ "list": { "title": "", "noResults": "", - "loading": "" + "loading": "Načítání..." }, "create": { "title": "", @@ -704,34 +704,34 @@ } }, "action": { - "create": "", - "import": "", - "save": "", + "create": "Vytvořit", + "import": "Import", + "save": "Uložit", "delete": "", "deleteConfirm": "", - "export": "", + "export": "Export", "addMapping": "", "addColumn": "", - "edit": "", + "edit": "Upravit", "removeMapping": "", "removeColumn": "", - "addItem": "", - "removeItem": "", - "addBar": "", + "addItem": "Přidat položku", + "removeItem": "Odebrat položku", + "addBar": "Přidat lištu", "duplicate": "", "copyAiPrompt": "", - "enable": "", - "disable": "", - "menu": "" + "enable": "Povolit", + "disable": "Zakázat", + "menu": "Akce" }, "field": { - "name": "", - "description": "", - "iconUrl": "", - "url": "", - "authType": "", + "name": "Název", + "description": "Popis", + "iconUrl": "URL ikony", + "url": "URL", + "authType": "Typ ověření", "headerName": "", - "method": "", + "method": "Metoda", "requestBody": "", "displayType": "", "jsonPath": "", @@ -773,18 +773,18 @@ } }, "placeholder": { - "exampleLabel": "", - "exampleLabelShort": "", - "exampleHeader": "", - "exampleUnit": "", - "iconUrl": "", - "url": "", - "headerName": "", - "jsonPath": "", - "tablePath": "", - "columnJsonPath": "", - "valuePath": "", - "maxPath": "", + "exampleLabel": "Teplota CPU", + "exampleLabelShort": "Teplota CPU", + "exampleHeader": "Název", + "exampleUnit": "°C", + "iconUrl": "https://...", + "url": "https://api.example.com/api/v1/status", + "headerName": "X-API klíč", + "jsonPath": "$.data.value", + "tablePath": "$.data.items", + "columnJsonPath": "$.jméno", + "valuePath": "$.data.used", + "maxPath": "$.data.total", "goodValues": "", "color": "" }, @@ -798,18 +798,18 @@ "grid": "" }, "sizeOption": { - "sm": "", - "md": "", - "lg": "", - "xl": "" + "sm": "Malé", + "md": "Střední", + "lg": "Velké", + "xl": "Extra velké" }, "labelPositionOption": { - "above": "", - "below": "" + "above": "Nad", + "below": "Pod" }, "fieldset": { - "general": "", - "connection": "", + "general": "Obecné", + "connection": "API propojení", "display": "" }, "displayTypeDescription": { @@ -825,9 +825,9 @@ "customJsx": "" }, "method": { - "GET": "", - "POST": "", - "PUT": "", + "GET": "GET", + "POST": "POST", + "PUT": "PUT", "DELETE": "", "PATCH": "" }, @@ -835,8 +835,8 @@ "none": "", "bearer": "", "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "apiKeyHeader": "Klíč API (záhlaví)", + "apiKeyQuery": "Klíč API (dotazy)" }, "displayType": { "singleValue": "", @@ -852,13 +852,13 @@ }, "secret": { "apiKey": "", - "username": "", - "password": "", - "savedPlaceholder": "" + "username": "Uživatelské jméno", + "password": "Heslo", + "savedPlaceholder": "••••••• (uloženo, ponechte prázdné pro zachování)" }, "preview": { - "title": "", - "test": "", + "title": "Náhled", + "test": "Test", "hint": "", "rawResponse": "" }, @@ -886,7 +886,7 @@ }, "table": { "name": "", - "url": "", + "url": "URL", "display": "" }, "widget": { @@ -923,8 +923,8 @@ "new": { "title": "", "url": { - "label": "", - "description": "" + "label": "URL aplikace", + "description": "URL, kterou aplikace otevře při přístupu z panelu" } } } @@ -987,46 +987,46 @@ "placeholder": "" }, "apiKeySettings": { - "label": "" + "label": "Získat API klíč" } }, "action": { "create": "Nová integrace" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widgetů", + "noWidgets": "Žádné widgety", + "detected": "Detekováno přes Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", - "vpn": "", - "mediaLibrary": "", + "dnsHole": "DNS", + "mediaService": "Média", + "calendar": "Kalendář", + "mediaSearch": "Vyhledávání", + "mediaRelease": "Vydání", + "mediaRequest": "Žádosti", + "downloadClient": "Stahování", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Různé", + "smartHomeServer": "Chytrá domácnost", + "indexerManager": "Indexer", + "healthMonitoring": "Stav", + "search": "Vyhledávání", + "mediaTranscoding": "Překódování", + "networkController": "Síť", + "releasesProvider": "Vydání", + "notifications": "Oznámení", + "firewall": "Firewall", + "timetable": "Rozvrh", + "photoService": "Fotografie", + "documents": "Dokumenty", + "notes": "Poznámky", + "mediaMonitoring": "Monitorování", + "speedtest": "Test rychlosti", + "analytics": "Analytika", + "vpn": "VPN", + "mediaLibrary": "Knihovna médií", "uptimeMonitoring": "" }, "testConnection": { @@ -1041,7 +1041,7 @@ } }, "unknown": { - "title": "", + "title": "Neznámá chyba", "description": "" }, "parse": { @@ -1278,36 +1278,36 @@ "newLabel": "" }, "url": { - "label": "", - "newLabel": "" + "label": "Url", + "newLabel": "Nová url" }, "opnsenseApiKey": { - "label": "", - "newLabel": "" + "label": "API klíč (Key)", + "newLabel": "Nový API klíč (Key)" }, "opnsenseApiSecret": { - "label": "", - "newLabel": "" + "label": "API klíč (Secret)", + "newLabel": "Nový API klíč (Secret)" }, "patchmonApiKey": { - "label": "", - "newLabel": "" + "label": "API klíč", + "newLabel": "Nový API klíč" }, "patchmonApiSecret": { - "label": "", - "newLabel": "" + "label": "API Secret", + "newLabel": "Nový API Secret" }, "githubAppId": { - "label": "", - "newLabel": "" + "label": "ID aplikace", + "newLabel": "Nové ID aplikace" }, "githubInstallationId": { "label": "", "newLabel": "" }, "privateKey": { - "label": "", - "newLabel": "" + "label": "Soukromý klíč", + "newLabel": "Nový soukromý klíč" }, "slug": { "label": "", @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Nebyla nahrána žádná média" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Přidat", "apply": "Použít", "backToOverview": "Zpět na přehled", - "skip": "", + "skip": "Přeskočit", "change": "", "create": "Vytvořit", "createAnother": "", @@ -1431,8 +1431,8 @@ "checkLogs": "Pro více podrobností zkontrolujte logy", "tryAgain": "Zkusit znovu", "loading": "Načítání", - "show": "", - "hide": "" + "show": "Zobrazit", + "hide": "Skrýt" }, "here": "zde", "iconPicker": { @@ -1444,7 +1444,7 @@ }, "colorScheme": { "options": { - "auto": "", + "auto": "Automaticky", "light": "Světlý", "dark": "Tmavý" } @@ -1602,7 +1602,7 @@ "label": { "create": "Nová kategorie", "changePosition": "Změnit pozici", - "settings": "" + "settings": "Nastavení" } }, "openAllInNewTabs": { @@ -1659,11 +1659,11 @@ "edit": { "title": "", "tab": { - "widget": "", - "app": "" + "widget": "Upravit widget", + "app": "Upravit aplikaci" }, "app": { - "propagationNotice": "" + "propagationNotice": "Změny této aplikace se projeví všude, kde je použita na všech plochách." }, "advancedOptions": { "label": "Pokročilé možnosti", @@ -1776,7 +1776,7 @@ "label": "" }, "withBorder": { - "label": "" + "label": "Zobrazit okraj" }, "items": { "label": "", @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Monitorujte stav vašich UPS zařízení přes NUT server", "option": { "showBattery": { - "label": "" + "label": "Zobrazit baterii" }, "showLoad": { - "label": "" + "label": "Zobrazit zátěž" }, "showVoltage": { - "label": "" + "label": "Zobrazit napětí" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Online", + "onBattery": "Na baterii", + "lowBattery": "Nízká baterie", + "charging": "Nabíjení", + "unknown": "Neznámý" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Výdrž", + "load": "Zátěž", + "input": "Vstup", + "output": "Výstup" }, "error": { - "internalServerError": "" + "internalServerError": "Nepodařilo se načíst data UPS" } }, "tracearr": { @@ -2584,77 +2595,77 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Posledních 30 dní", + "month": "Tento měsíc", + "lastMonth": "Minulý měsíc" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Událost", + "description": "Zobrazit celkový počet výskytů konkrétní události", + "placeholder": "Vyberte událost", + "loading": "Načítání událostí...", + "noEvents": "Nebyly nalezeny žádné události", + "none": "Žádná událost", + "configureWebsiteFirst": "Nejprve vyberte web, aby se načetly události" }, "chartType": { - "label": "", - "description": "", + "label": "Typ grafu", + "description": "Styl zobrazení grafu", "option": { - "bar": "", - "sparkline": "" + "bar": "Sloupcový graf", + "sparkline": "Sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Styl grafu", + "description": "Jak zobrazit řady událostí v grafu", "option": { - "grouped": "", - "overlay": "" + "grouped": "Vedle sebe", + "overlay": "Překryv (podmnožina)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Zobrazení", + "description": "Co zobrazit v těle widgetu", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Graf", + "events": "Graf událostí", + "topPages": "Nejlepší stránky", + "topReferrers": "Nejlepší zdroje" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Události", + "description": "Vyberte jednu nebo více událostí pro graf", + "placeholder": "Vybrat události...", + "loading": "Načítání událostí...", + "noEvents": "Nebyly nalezeny žádné události", + "configureWebsiteFirst": "Nejprve vyberte web, aby se načetly události" }, "topCount": { - "label": "", - "description": "" + "label": "Počet zobrazených položek", + "description": "Počet nejlepších položek k zobrazení (max. 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "události", + "label": "události" }, "topPages": { - "direct": "" + "direct": "Přímé" }, "topReferrers": { - "direct": "" + "direct": "Přímé" }, "events": { - "selectPrompt": "" + "selectPrompt": "Vyberte události pro graf" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Není nakonfigurována integrace Umami", + "noWebsite": "Není nakonfigurován žádný web", + "noData": "Nejsou k dispozici žádná data", + "internalServerError": "Nepodařilo se načíst data Umami" } }, "common": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "Uživatel", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "", - "noCommunications": "" + "noCommunications": "", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { "columnTitle": "Integrace" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "", + "eta": "" }, "type": { "columnTitle": "", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "" + "globalRatio": "", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3803,10 +3842,10 @@ "label": "", "description": "", "option": { - "cpu": "", - "memory": "", - "gpu": "", - "network": "" + "cpu": "CPU", + "memory": "Paměť", + "gpu": "GPU", + "network": "Síť" } }, "labelDisplayMode": { @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Systémy Beszel (tabulka)", + "description": "Tabulkový přehled všech monitorovaných systémů Beszel s řaditelnými sloupci a indikátory stavu", "option": { "statusFilter": { - "label": "" + "label": "Filtr stavu" }, "sortBy": { - "label": "" + "label": "Řadit podle" }, "sortDirection": { - "label": "" + "label": "Směr řazení" }, "showCpu": { - "label": "" + "label": "Zobrazit CPU" }, "showMemory": { - "label": "" + "label": "Zobrazit paměť" }, "showDisk": { - "label": "" + "label": "Zobrazit disk" }, "showGpu": { - "label": "" + "label": "Zobrazit GPU" }, "showLoadAvg": { - "label": "" + "label": "Zobrazit průměrné zatížení" }, "showNet": { - "label": "" + "label": "Zobrazit síť" }, "showTemp": { - "label": "" + "label": "Zobrazit teplotu" }, "showBattery": { - "label": "" + "label": "Zobrazit baterii" }, "showServices": { - "label": "" + "label": "Zobrazit služby" }, "showUptime": { - "label": "" + "label": "Zobrazit dobu běhu" }, "showAgent": { + "label": "Zobrazit verzi agenta" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Nenalezeny žádné systémy", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Systém", + "cpu": "CPU", + "memory": "Paměť", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Prům. zátěž", + "net": "Síť", + "temp": "Teplota", + "battery": "Baterie", + "services": "Služby", + "uptime": "Doba běhu", + "agent": "Agent" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Systémy Beszel (mřížka)", + "description": "Kartový mřížkový přehled všech monitorovaných systémů Beszel s metrikami v reálném čase", "option": { "statusFilter": { - "label": "" + "label": "Filtr stavu" }, "showCpu": { - "label": "" + "label": "Zobrazit CPU" }, "showMemory": { - "label": "" + "label": "Zobrazit paměť" }, "showDisk": { - "label": "" + "label": "Zobrazit disk" }, "showGpu": { - "label": "" + "label": "Zobrazit GPU" }, "showLoadAvg": { - "label": "" + "label": "Zobrazit průměrné zatížení" }, "showNet": { - "label": "" + "label": "Zobrazit síť" }, "showTemp": { - "label": "" + "label": "Zobrazit teplotu" }, "showBattery": { - "label": "" + "label": "Zobrazit baterii" }, "showServices": { - "label": "" + "label": "Zobrazit služby" }, "showUptime": { - "label": "" + "label": "Zobrazit dobu běhu" }, "showAgent": { - "label": "" + "label": "Zobrazit verzi agenta" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Paměť", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Prům. zátěž", + "net": "Síť", + "temp": "Teplota", + "battery": "Baterie", + "services": "Služby", + "uptime": "Doba běhu", + "agent": "Agent" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel výstrahy", + "description": "Zobrazte konfigurace a historii výstrah Beszel", "option": { "showHistory": { - "label": "" + "label": "Zobrazit historii výstrah" }, "maxHistoryItems": { - "label": "" + "label": "Max. položek historie" } }, - "empty": "", + "empty": "Žádné nakonfigurované výstrahy", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Historie", + "resolved": "Vyřešeno", "status": { - "triggered": "", - "ok": "" + "triggered": "Spuštěno", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Statistiky systému Beszel", + "description": "Časové grafy pro CPU, paměť, disk, síť a metriky kontejnerů Docker", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Časové období" }, "showCpu": { - "label": "" + "label": "Zobrazit graf CPU" }, "showMemory": { - "label": "" + "label": "Zobrazit graf paměti" }, "showDisk": { - "label": "" + "label": "Zobrazit graf disku" }, "showDiskIO": { - "label": "" + "label": "Zobrazit graf I/O disku" }, "showNetwork": { - "label": "" + "label": "Zobrazit graf sítě" }, "showDockerCpu": { - "label": "" + "label": "Zobrazit graf CPU Dockeru" }, "showDockerMemory": { - "label": "" + "label": "Zobrazit graf paměti Dockeru" }, "showDockerNetwork": { - "label": "" + "label": "Zobrazit graf sítě Dockeru" } }, - "selectSystem": "", + "selectSystem": "Vyberte systém", "empty": { "noSystems": "" }, @@ -4079,13 +4126,13 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "Využití CPU", + "subtitle": "Průměrné využití CPU v celém systému", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", + "title": "Využití paměti", + "subtitle": "Přesné využití v zaznamenaném čase", "series": "", "cache": "" }, @@ -4442,7 +4489,7 @@ "error": { "noBoard": { "title": "Vítejte v Homarru", - "description": "", + "description": "Elegantní a moderní panel, který vám umožní mít všechny aplikace a služby na dosah ruky.", "link": "", "notice": "" }, @@ -4528,7 +4575,7 @@ "api": "", "certificates": "", "tasks": "", - "backup": "" + "backup": "Záloha" } }, "settings": "Nastavení", @@ -4558,7 +4605,7 @@ }, "statisticLabel": { "boards": "Plochy", - "resources": "", + "resources": "Zdroje", "authentication": "", "authorization": "" }, @@ -4609,7 +4656,7 @@ "private": "" }, "noResults": { - "title": "" + "title": "Zatím žádné plochy" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "První den v týdnu", "accessibility": "Přístupnost", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Průvodci nastavením", + "description": "Obnovte průvodce nastavením, abyste je viděli znovu při příští návštěvě správy nebo plochy.", + "reset": "Obnovit průvodce nastavením", "resetSuccess": { - "title": "", - "message": "" + "title": "Průvodci obnoveni", + "message": "Průvodci nastavením se zobrazí znovu při příští návštěvě" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Dokončeno", + "notStarted": "Nezahájeno" }, "name": { - "management": "", - "dashboard": "" + "management": "Správa", + "dashboard": "Plocha" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "", "options": { - "auto": "", + "auto": "Automaticky", "light": "", "dark": "" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Úplná záloha databáze", + "metaTitle": "Zálohování a obnovení", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Export databáze", + "description": "Stáhněte si úplnou zálohu vaší SQLite databáze včetně všech nastavení, uživatelů, ploch a šifrovaných integračních tajemství. Záloha je zabalena jako ZIP soubor s šifrovacím klíčem a metadaty.", + "button": "Stáhnout zálohu", + "error": "Export se nezdařil", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Export citlivých dat", + "warningTitle": "Tento export obsahuje celou vaši databázi.", + "warningBody": "Záloha zahrnuje všechny uživatele, integrační tajemství (šifrovaná), API klíče, konfigurace ploch a data aplikací. Exportovaný soubor uchovávejte bezpečně a nesdílejte jej.", + "typePrompt": "Napište \"{phrase}\" pro pokračování", + "submit": "Exportovat databázi", + "cancel": "Zrušit" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Obnovit databázi", + "description": "Nahrajte dříve exportovanou zálohu ZIP pro obnovení vaší databáze. Tím se nahradí celá vaše databáze. Pokud byla záloha vytvořena s jiným šifrovacím klíčem, tajemství budou automaticky znovu zašifrována.", + "warning": "Obnovením zálohy se zcela nahradí vaše současná databáze a restartuje se aplikace. Tuto akci nelze vrátit zpět.", "dropzone": { - "title": "", - "description": "" + "title": "Sem přetáhněte soubor ZIP se zálohou nebo klikněte pro procházení", + "description": "Přijímají se pouze soubory .zip ze zálohy Homarr SQLite" }, - "changeFile": "", - "button": "", + "changeFile": "Změnit soubor", + "button": "Obnovit databázi", "success": { - "title": "", - "message": "" + "title": "Obnovení dokončeno", + "message": "Databáze byla úspěšně obnovena. Aplikace se restartuje..." }, - "error": "" + "error": "Import se nezdařil" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Obsah zálohy", + "exported": "Exportováno {date}", + "loading": "Analýza záložního souboru...", + "errorTitle": "Chyba náhledu", + "entity": "Entita", + "count": "Počet", + "boards": "Plochy", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Plochy", + "user": "Uživatelé", + "app": "Aplikace", + "integration": "Integrace", + "item": "Widgety", + "media": "Média", + "search_engine": "Vyhledávače" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Nepodařilo se analyzovat záložní soubor", + "invalidMissingMetadata": "Neplatná záloha: chybí metadata.json", + "invalidMissingDb": "Neplatná záloha: chybí db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Sem přetáhněte ZIP se zálohou", + "description": "Přijímá soubory .zip ze zálohy Homarr SQLite (max. 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analýza zálohy...", + "changeFile": "Změnit soubor", + "continueToRestore": "Pokračovat k obnovení", + "tryAgain": "Zkusit znovu", + "analysisError": "Chyba analýzy", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Obsah zálohy", + "exported": "Exportováno {date}", + "entity": "Entita", + "count": "Počet", + "boards": "Plochy", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Plochy", + "user": "Uživatelé", + "app": "Aplikace", + "integration": "Integrace", + "item": "Widgety", + "media": "Média", + "search_engine": "Vyhledávače" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migrace použita", + "migrationsAppliedPlural": "{count} migrací použito", + "migrationsOlderVersion": "Tato záloha byla ze starší verze Homarr. {count} migrace schématu byla použita k aktualizaci.", + "migrationsOlderVersionPlural": "Tato záloha byla ze starší verze Homarr. {count} migrací schématu bylo použito k aktualizaci.", + "migrationsUpToDate": "Databázové schéma je aktuální ({count} migrací použito)", + "upToDate": "Aktuální", + "migrationsPending": "{count} čekajících" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Probíhá aplikace migrací ({current}/{total})", + "migrationLabel": "Migrace {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Destruktivní akce", + "warningTitle": "Tímto se trvale nahradí celá vaše databáze.", + "warningBody": "Všechny současné plochy, uživatelé, aplikace, integrace, nastavení a relace budou ztraceny. Tuto akci nelze vrátit zpět. Aplikace se po obnovení restartuje.", + "typePrompt": "Napište \"{phrase}\" pro pokračování", + "cancel": "Zrušit", + "submit": "Obnovit databázi" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Obnovování databáze...", + "extracting": "Rozbalování archivu zálohy", + "migrating": "Aplikace databázových migrací", + "encrypting": "Přešifrovávání integračních tajemství", + "swapping": "Nahrazování databázového souboru", + "restarting": "Restartování serveru" }, "complete": { - "title": "", - "message": "" + "title": "Obnovení dokončeno", + "message": "Databáze byla úspěšně obnovena. Server se restartuje — obnovte stránku za několik sekund." }, "failed": { - "title": "" + "title": "Obnovení selhalo" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Neplatná záloha: chybí metadata.json", + "invalidMissingDb": "Neplatná záloha: chybí db.sqlite", + "analyzeError": "Nepodařilo se analyzovat zálohu" } } }, @@ -5277,15 +5324,15 @@ "label": "Porty" }, "host": { - "label": "" + "label": "Hostitel" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Zobrazit logy", "page": { - "title": "" + "title": "Logy {name}" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Odstranit", + "confirm": "", "notification": { "success": { "title": "", @@ -5377,7 +5425,7 @@ }, "kubernetes": { "cluster": { - "title": "", + "title": "Panel clusteru", "label": "", "providers": "", "version": "", @@ -5390,7 +5438,7 @@ } }, "resources": { - "title": "", + "title": "Zdroje", "nodes": "", "namespaces": "", "ingresses": "", @@ -5715,7 +5763,7 @@ "docker": { "label": "", "logs": { - "label": "" + "label": "Logy" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Přepnout režim vzhledu", "light": "", "dark": "" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Předvolby", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Vyberte předvolbu ke změně", + "backHint": "Stiskněte Backspace nebo použijte tlačítko zpět pro návrat", + "backAction": "Jít zpět" } }, "notification": { "error": { - "message": "" + "message": "Nelze aktualizovat předvolbu" } }, "option": { "preferences": { - "label": "" + "label": "Otevřít předvolby" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Zapnuto", + "disabled": "Vypnuto" }, "board": { - "none": "", - "unavailable": "" + "none": "Žádná", + "unavailable": "Aktuálně vybraná (nedostupná)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Žádný", + "unavailable": "Aktuálně vybraný (nedostupný)" }, "colorScheme": { - "label": "", + "label": "Barevné schéma", "children": { "detail": { - "title": "" + "title": "Vyberte si barevné schéma" } } }, "locale": { - "label": "", + "label": "Jazyk", "children": { "detail": { - "title": "" + "title": "Vyberte si preferovaný jazyk" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Výchozí vyhledávač", "children": { "detail": { - "title": "" + "title": "Vyberte si výchozí vyhledávač" } } }, "openSearchInNewTab": { - "label": "", + "label": "Otevírat výsledky vyhledávání v nové kartě", "children": { "detail": { - "title": "" + "title": "Otevírat výsledky vyhledávání v nové kartě" } } }, "ddgBangs": { - "label": "", + "label": "Povolit DuckDuckGo bangs", "children": { "detail": { - "title": "" + "title": "Povolit DuckDuckGo bangs" } } }, "firstDayOfWeek": { - "label": "", + "label": "První den v týdnu", "children": { "detail": { - "title": "" + "title": "Vyberte první den v týdnu" } } }, "homeBoardId": { - "label": "", + "label": "Domovská plocha", "children": { "detail": { - "title": "" + "title": "Vyberte si domovskou plochu" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobilní domovská plocha", "children": { "detail": { - "title": "" + "title": "Vyberte si mobilní domovskou plochu" } } }, "pingIconsEnabled": { - "label": "", + "label": "Používat ikony pro pingy", "children": { "detail": { - "title": "" + "title": "Používat ikony pro pingy" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Otevřít stránku úplných předvoleb" } } } } }, "media": { - "help": "", + "help": "Vyhledejte filmy nebo seriály k vyžádání", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Filmy a seriály" }, "action": { "search": { - "label": "", - "description": "", + "label": "Vyhledat filmy nebo seriály", + "description": "Začněte psát pro vyhledávání ve vašich integracích pro vyžádání médií", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Přidejte integraci Overseerr, Jellyseerr nebo Seerr, abyste povolili vyhledávání médií.", + "scoped": "Tento widget nemá přístupnou integraci pro vyžádání médií." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "K dispozici", + "partiallyAvailable": "Částečně dostupné", + "processing": "Zpracovávání", + "requested": "Vyžádáno", + "pending": "Vyžádáno" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Tip: Zde můžete také používat DuckDuckGo bangs, např. !něco", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Vyhledat \"{query}\" pomocí {label}", + "pressEnterToOpen": "Stiskněte Enter pro otevření", + "engineSelected": "{label} vybráno (!{bang})", + "typeQueryToContinue": "Zadejte vyhledávací dotaz pro pokračování", + "emptyBangHint": "Napište bang, např. !yt, poté stiskněte mezerník pro výběr" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Stav" }, "status": { - "requested": "" + "requested": "Vyžádáno" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Přečtěte si dokumentaci", + "next": "Další", + "prev": "Zpět", + "done": "Hotovo", + "skip": "Přeskočit prohlídku", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Vítejte v Homarru!", + "description": "Toto je vaše řídicí centrum. Odtud spravujete plochy, aplikace, integrace, uživatele a nastavení serveru. Pojďme se podívat na jednotlivé sekce." }, "boardsList": { - "title": "", - "description": "" + "title": "Vaše plochy", + "description": "Zde jsou všechny vaše plochy. Každá plocha má své vlastní rozvržení, pozadí a nastavení přístupu. Vidíte, kdo je vytvořil a zda jsou veřejné nebo soukromé." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Vytvořit plochu", + "description": "Kliknutím sem vytvoříte novou plochu nebo importujete z předchozí instalace Homarru. Každá plocha získá svou vlastní URL, kterou můžete sdílet." }, "appsList": { - "title": "", - "description": "" + "title": "Vaše aplikace", + "description": "Toto jsou všechny aplikace, které jste přidali — odkazy na vaše self-hosted služby. Každá aplikace má ikonu, volitelnou kontrolu stavu a odznak stavu na ploše." }, "appsCreate": { - "title": "", - "description": "" + "title": "Přidat aplikaci", + "description": "Zde zaregistrujte novou službu. Dejte jí název, URL a ikonu — objeví se jako dlaždice na vaší ploše s živým monitorováním stavu." }, "integrationsList": { - "title": "", - "description": "" + "title": "Vaše integrace", + "description": "Toto jsou služby připojené k Homarru — Sonarr, Radarr, Plex, Jellyfin a více než 50 dalších. Všechny přihlašovací údaje jsou šifrované v klidu." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Přidat integraci", + "description": "Zde připojte novou službu. Vyberte typ, zadejte URL a API klíč — Homarr ověří připojení před uložením." }, "usersList": { - "title": "", - "description": "" + "title": "Vaši uživatelé", + "description": "Podívejte se na všechny, kdo mají přístup. Uspořádejte uživatele do skupin a kontrolujte, kdo může prohlížet nebo upravovat jednotlivé plochy." }, "usersCreate": { - "title": "", - "description": "" + "title": "Vytvořit uživatele", + "description": "Zde přidejte nový uživatelský účet. Můžete také použít zvací odkazy pro snadné zavedení. To je prohlídka — jste připraveni!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Toto je vaše plocha", + "description": "Plocha s přetahováním, kam uspořádáváte aplikace a widgety. Stiskněte Ctrl+K kdykoli pro vyhledávání aplikací, ploch a akcí." }, "editMode": { - "title": "", - "description": "" + "title": "Režim úprav", + "description": "Kliknutím sem vstoupíte do režimu úprav. Poté můžete přidávat widgety, aplikace a sekce — přetahováním přemísťovat, měnit velikost rohovým úchytem. Klikněte znovu pro uložení změn." }, "settings": { - "title": "", - "description": "" + "title": "Nastavení plochy", + "description": "Změňte název plochy, sloupce, pozadí, barvy a kdo k ní má přístup. Každá plocha může být veřejná nebo soukromá." }, "switcher": { - "title": "", - "description": "" + "title": "Přepínání ploch", + "description": "Přeskakujte mezi plochami. Vytvářejte samostatné plochy pro různé účely — média, sítě, pro uživatele nebo cokoli chcete." }, "userMenu": { - "title": "", - "description": "" + "title": "Váš profil", + "description": "Změňte barevné schéma, jazyk, domovskou plochu a předvolby. Můžete také odtud přejít do správy." } } } diff --git a/packages/translation/src/lang/da.json b/packages/translation/src/lang/da.json index cde0954e3..5f0de785b 100644 --- a/packages/translation/src/lang/da.json +++ b/packages/translation/src/lang/da.json @@ -102,37 +102,37 @@ "skip": "Spring over for nu" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} af {total}", + "skip": "Spring over denne integration", + "finishing": "Sætter dit dashboard op...", "error": { - "title": "", - "message": "" + "title": "Opsætning mislykkedes", + "message": "Der opstod en fejl under opsætningen af dit dashboard. Prøv igen." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "URL-hjælpere", + "description": "Disse hjælpere forsøger at gætte URL'en til dine tjenester. Hvis det ikke virker, skal du blot indtaste adressen manuelt." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Basis-URL", + "placeholder": "homelab.local eller 192.168.1.1", + "hint": "Indtast dit basisdomæne eller IP for automatisk at udfylde integrations-URL'er", + "warning": "Hvis du indstiller din basis-URL nu, udfyldes alle integrations-URL'er automatisk, hvilket sparer dig tid under opsætningen", + "preview": "f.eks. {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Subdomæne", + "hostPort": "Vært:Port" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker opdagede {count} tjenester", + "detectedBreakdown": "{integrations} integrationer · {apps} apps", + "summary": "Homarr opdagede {apps} apps, {integrations} heraf har indbyggede integrationer", + "appBadge": "App", + "appSectionLabel": "Apps der skal tilføjes til dashboard ({count} valgt)", + "scanning": "Scanner Docker...", + "scanningDescription": "Leder efter kørende containere på dit system" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "Adgangskode", - "suggestionsTitle": "", + "suggestionsTitle": "Adgangskodeforslag", "suggestion": { "length": "Inkluderer mindst 8 tegn", "lowercase": "Inkluderer små bogstaver", @@ -209,7 +209,7 @@ "label": "Åben søgeresultater i en ny fane" }, "ddgBangs": { - "label": "" + "label": "Aktivér DuckDuckGo-bangs" } }, "error": { @@ -302,10 +302,10 @@ "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo-bangs blev slået til/fra" }, "error": { - "message": "" + "message": "Kan ikke slå DuckDuckGo-bangs til/fra" } } }, @@ -987,47 +987,47 @@ "placeholder": "Brugerdefineret app URL" }, "apiKeySettings": { - "label": "" + "label": "Hent API-nøgle" } }, "action": { "create": "Ny integration" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widgets", + "noWidgets": "Ingen widgets", + "detected": "Opdaget via Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Medie", + "calendar": "Kalender", + "mediaSearch": "Søg", + "mediaRelease": "Udgivelser", + "mediaRequest": "Anmodninger", + "downloadClient": "Downloads", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Diverse", + "smartHomeServer": "Smart Home", + "indexerManager": "Indekserer", + "healthMonitoring": "Sundhed", + "search": "Søg", + "mediaTranscoding": "Transkodning", + "networkController": "Netværk", + "releasesProvider": "Udgivelser", + "notifications": "Notifikationer", + "firewall": "Firewall", + "timetable": "Tidsplan", + "photoService": "Billeder", + "documents": "Dokumenter", + "notes": "Noter", + "mediaMonitoring": "Overvågning", + "speedtest": "Hastighedstest", + "analytics": "Analyse", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Mediebibliotek", + "uptimeMonitoring": "Oppetidsovervågning" }, "testConnection": { "action": { @@ -1310,8 +1310,8 @@ "newLabel": "Ny privat nøgle" }, "slug": { - "label": "", - "newLabel": "" + "label": "Status side slug", + "newLabel": "Ny status side slug" } } }, @@ -1321,22 +1321,22 @@ "full": "Fuld integrationsadgang" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Selvhostet lydbogs- og podcastserver" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Selvhostet musikstreamingserver med Subsonic API-kompatibilitet" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Selvhostet oppetidsovervågning med offentlige statussider", "secret": { "slug": { - "description": "" + "description": "Slug'en for din offentlige statusside. Standard til \"default\", hvis ikke angivet." }, "apiKey": { - "description": "" + "description": "Valgfri API-nøgle til autentificeret /metrics-adgang" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Dokumenthåndteringssystem til arkivering og organisering af scannede dokumenter" }, "patchmon": { "name": "", @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Intet medie uploadet" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Tilføj", "apply": "Anvend", "backToOverview": "Tilbage til oversigt", - "skip": "", + "skip": "Spring over", "change": "Skift", "create": "Opret", "createAnother": "Opret og start forfra", @@ -1431,8 +1431,8 @@ "checkLogs": "Tjek logs for flere detaljer", "tryAgain": "Prøv igen", "loading": "Indlæser", - "show": "", - "hide": "" + "show": "Vis", + "hide": "Skjul" }, "here": "her", "iconPicker": { @@ -1444,7 +1444,7 @@ }, "colorScheme": { "options": { - "auto": "", + "auto": "Auto", "light": "Lys", "dark": "Mørk" } @@ -1602,7 +1602,7 @@ "label": { "create": "Ny kategori", "changePosition": "Ændre placering", - "settings": "" + "settings": "Indstillinger" } }, "openAllInNewTabs": { @@ -1659,11 +1659,11 @@ "edit": { "title": "Rediger element", "tab": { - "widget": "", - "app": "" + "widget": "Rediger widget", + "app": "Rediger app" }, "app": { - "propagationNotice": "" + "propagationNotice": "Ændringer til denne app vil blive anvendt overalt, hvor den bruges på tværs af alle dashboards." }, "advancedOptions": { "label": "Avancerede indstillinger", @@ -1776,7 +1776,7 @@ "label": "Åbn i nyt faneblad" }, "withBorder": { - "label": "" + "label": "Vis kant" }, "items": { "label": "Bogmærker", @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Inverter sortering" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "Kunne ikke hente containerstatistik" + "internalServerError": "Kunne ikke hente containerstatistik", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Overvåg status for dine UPS-enheder via en NUT-server", "option": { "showBattery": { - "label": "" + "label": "Vis batteri" }, "showLoad": { - "label": "" + "label": "Vis belastning" }, "showVoltage": { - "label": "" + "label": "Vis spænding" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Online", + "onBattery": "På batteri", + "lowBattery": "Lavt batteri", + "charging": "Oplader", + "unknown": "Ukendt" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Driftstid", + "load": "Belastning", + "input": "Input", + "output": "Output" }, "error": { - "internalServerError": "" + "internalServerError": "Kunne ikke hente UPS-data" } }, "tracearr": { @@ -2560,101 +2571,101 @@ } }, "umami": { - "name": "", - "description": "", - "visitors": "", - "active": "", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "name": "Umami Analyse", + "description": "Vis besøgsstatistik fra din Umami Analytics-instans", + "visitors": "besøgende", + "active": "aktiv", + "pageviews": "sidevisninger", + "visits": "besøg", + "bounceRate": "afvisning", + "avgDuration": "gns", "option": { "websiteId": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noWebsites": "", - "configureIntegrationFirst": "" + "label": "Websted", + "description": "Vælg et websted, der spores af din Umami-instans", + "placeholder": "Vælg et websted", + "loading": "Indlæser websteder...", + "noWebsites": "Ingen websteder fundet", + "configureIntegrationFirst": "Tilslut først en Umami-integration" }, "timeFrame": { - "label": "", - "description": "", + "label": "Tidsramme", + "description": "Den tidsramme, som besøgsdata skal vises for", "option": { - "today": "", - "24h": "", - "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "today": "I dag", + "24h": "Sidste 24 timer", + "7d": "Sidste 7 dage", + "30d": "Sidste 30 dage", + "month": "Denne måned", + "lastMonth": "Sidste måned" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Begivenhed", + "description": "Vis samlede forekomster af en specifik begivenhed", + "placeholder": "Vælg en begivenhed", + "loading": "Indlæser begivenheder...", + "noEvents": "Ingen begivenheder fundet", + "none": "Ingen begivenhed", + "configureWebsiteFirst": "Vælg først et websted for at indlæse begivenheder" }, "chartType": { - "label": "", - "description": "", + "label": "Diagramtype", + "description": "Visningsstil for diagrammet", "option": { - "bar": "", - "sparkline": "" + "bar": "Søjlediagram", + "sparkline": "Minigraf" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Diagramstil", + "description": "Hvordan begivenhedsserien vises i diagrammet", "option": { - "grouped": "", - "overlay": "" + "grouped": "Side om side", + "overlay": "Overlejring (delmængde)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Visning", + "description": "Hvad der skal vises i widget-brødteksten", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Diagram", + "events": "Begivenhedsdiagram", + "topPages": "Top sider", + "topReferrers": "Top henvisere" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Begivenheder", + "description": "Vælg en eller flere begivenheder til diagrammet", + "placeholder": "Vælg begivenheder...", + "loading": "Indlæser begivenheder...", + "noEvents": "Ingen begivenheder fundet", + "configureWebsiteFirst": "Vælg først et websted for at indlæse begivenheder" }, "topCount": { - "label": "", - "description": "" + "label": "Elementer der skal vises", + "description": "Antal topelementer der skal vises (maks 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "begivenheder", + "label": "begivenheder" }, "topPages": { - "direct": "" + "direct": "Direkte" }, "topReferrers": { - "direct": "" + "direct": "Direkte" }, "events": { - "selectPrompt": "" + "selectPrompt": "Vælg begivenheder til diagram" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Ingen Umami-integration konfigureret", + "noWebsite": "Intet websted konfigureret", + "noData": "Ingen data tilgængelig", + "internalServerError": "Kunne ikke hente Umami-data" } }, "common": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Vis kun hvad der aktuelt afspilles", "description": "Deaktivering af dette vil ikke virke for plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Afspiller lige nu", "user": "Bruger", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,48 +2784,48 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Oversigt over dit Paperless-ngx dokumentarkiv", + "documentsTotal": "Samlede dokumenter", + "documentsInbox": "Indbakke", + "correspondents": "Korrespondenter", + "tags": "Mærker", + "documentTypes": "Dokumenttyper", + "inboxRatio": "Indbakkeforhold", + "inbox": "indbakke", + "total": "I alt", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Vis indbakkeforhold", + "description": "Vis forholdet mellem indbakke og samlede dokumenter i heltesektionen" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Vis indbakke-ring", + "description": "Vis en fremskridtsring sammen med indbakkeforholdet" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Vis samlede dokumenter", + "description": "Vis det samlede antal dokumenter i dit arkiv" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Vis indbakkeantal", + "description": "Vis antallet af ubehandlede dokumenter i indbakken" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Vis korrespondenter", + "description": "Vis det samlede antal korrespondenter" }, "showTags": { - "label": "", - "description": "" + "label": "Vis tags", + "description": "Vis det samlede antal tags" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Vis dokumenttyper", + "description": "Vis det samlede antal dokumenttyper" } }, "error": { - "internalServerError": "" + "internalServerError": "Kunne ikke hente Paperless-ngx-data" } }, "patchmon": { @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Begræns elementer pr. integration", "description": "Dette vil begrænse antallet af elementer vist pr. integration, ikke globalt" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Vælg kolonner i elementer", - "noCommunications": "Kan ikke indlæse data fra integration" + "noCommunications": "Kan ikke indlæse data fra integration", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Nuværende indeks i klienten" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { "columnTitle": "Integration" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Slut tid", - "detailsTitle": "Tid siden/til færdiggørelse" + "detailsTitle": "Tid siden/til færdiggørelse", + "eta": "" }, "type": { "columnTitle": "Type", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Globalt Forhold" + "globalRatio": "Globalt Forhold", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Medieudgivelser", @@ -3652,15 +3705,15 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Overvåg oppetidsstatistik fra din Uptime Kuma-statusside", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Vis gennemsnitlig oppetid", + "description": "Vis den kombinerede gennemsnitlige oppetidsprocent over 24 timer" }, "showUptimeRing": { - "label": "", + "label": "Vis oppetidsring", "description": "" }, "showTotalMonitors": { @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel-systemer (tabel)", + "description": "Tabelvisning af alle Beszel-overvågede systemer med sorterbare kolonner og statusindikatorer", "option": { "statusFilter": { - "label": "" + "label": "Statusfilter" }, "sortBy": { - "label": "" + "label": "Sorter efter" }, "sortDirection": { - "label": "" + "label": "Sorteringsretning" }, "showCpu": { - "label": "" + "label": "Vis CPU" }, "showMemory": { - "label": "" + "label": "Vis hukommelse" }, "showDisk": { - "label": "" + "label": "Vis disk" }, "showGpu": { - "label": "" + "label": "Vis GPU" }, "showLoadAvg": { - "label": "" + "label": "Vis belastningsgennemsnit" }, "showNet": { - "label": "" + "label": "Vis netværk" }, "showTemp": { - "label": "" + "label": "Vis temperatur" }, "showBattery": { - "label": "" + "label": "Vis batteri" }, "showServices": { - "label": "" + "label": "Vis tjenester" }, "showUptime": { - "label": "" + "label": "Vis oppetid" }, "showAgent": { + "label": "Vis agentversion" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Ingen systemer fundet", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "System", + "cpu": "CPU", + "memory": "Hukommelse", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Belastningsgennemsnit", + "net": "Net", + "temp": "Temp", + "battery": "Bat", + "services": "Tjenester", + "uptime": "Oppetid", + "agent": "Agent" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel-systemer (gitter)", + "description": "Kortgittervisning af alle Beszel-overvågede systemer med realtidsmålinger", "option": { "statusFilter": { - "label": "" + "label": "Statusfilter" }, "showCpu": { - "label": "" + "label": "Vis CPU" }, "showMemory": { - "label": "" + "label": "Vis hukommelse" }, "showDisk": { - "label": "" + "label": "Vis disk" }, "showGpu": { - "label": "" + "label": "Vis GPU" }, "showLoadAvg": { - "label": "" + "label": "Vis belastningsgennemsnit" }, "showNet": { - "label": "" + "label": "Vis netværk" }, "showTemp": { - "label": "" + "label": "Vis temperatur" }, "showBattery": { - "label": "" + "label": "Vis batteri" }, "showServices": { - "label": "" + "label": "Vis tjenester" }, "showUptime": { - "label": "" + "label": "Vis oppetid" }, "showAgent": { - "label": "" + "label": "Vis agentversion" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Hukommelse", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Belastningsgennemsnit", + "net": "Net", + "temp": "Temp", + "battery": "Bat", + "services": "Tjenester", + "uptime": "Oppetid", + "agent": "Agent" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel-advarsler", + "description": "Se Beszel-advarselkonfigurationer og historik", "option": { "showHistory": { - "label": "" + "label": "Vis advarselshistorik" }, "maxHistoryItems": { - "label": "" + "label": "Maks historikelementer" } }, - "empty": "", + "empty": "Ingen advarsler konfigureret", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Historik", + "resolved": "Løst", "status": { - "triggered": "", - "ok": "" + "triggered": "Udløst", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel systemstatistik", + "description": "Tidsseriediagrammer for CPU, hukommelse, disk, netværk og Docker-container-målinger", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Tidsperiode" }, "showCpu": { - "label": "" + "label": "Vis CPU-diagram" }, "showMemory": { - "label": "" + "label": "Vis hukommelsesdiagram" }, "showDisk": { - "label": "" + "label": "Vis diskdiagram" }, "showDiskIO": { - "label": "" + "label": "Vis disk I/O-diagram" }, "showNetwork": { - "label": "" + "label": "Vis netværksdiagram" }, "showDockerCpu": { - "label": "" + "label": "Vis Docker CPU-diagram" }, "showDockerMemory": { - "label": "" + "label": "Vis Docker hukommelsesdiagram" }, "showDockerNetwork": { - "label": "" + "label": "Vis Docker netværksdiagram" } }, - "selectSystem": "", + "selectSystem": "Vælg system", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU-forbrug", + "subtitle": "Gennemsnitlig systemdækkende CPU-udnyttelse", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Hukommelsesforbrug", + "subtitle": "Præcis udnyttelse på det registrerede tidspunkt", + "series": "Brugt", + "cache": "Cache/buffere" }, "disk": { - "title": "", + "title": "Diskforbrug", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Disk I/O", + "subtitle": "Gennemstrømning af rodfilsystem", + "read": "Læst", + "write": "Skrevet" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Båndbredde", + "subtitle": "Netværkstrafik på offentlige grænseflader", + "sent": "Sendt", + "recv": "Modtaget" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU-forbrug", + "subtitle": "Gennemsnitlig CPU-udnyttelse af containere" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker hukommelsesforbrug", + "subtitle": "Hukommelsesforbrug af Docker-containere" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker netværks-I/O", + "subtitle": "Netværkstrafik af Docker-containere" } } } @@ -4528,7 +4575,7 @@ "api": "API", "certificates": "Certifikater", "tasks": "Opgaver", - "backup": "" + "backup": "Backup" } }, "settings": "Indstillinger", @@ -4609,7 +4656,7 @@ "private": "Denne tavle er privat" }, "noResults": { - "title": "" + "title": "Ingen tavler endnu" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Første ugedag", "accessibility": "Hjælpefunktioner", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Onboarding-ture", + "description": "Nulstil onboarding-turene for at se dem igen på dit næste besøg i administrationsområdet eller dashboardet.", + "reset": "Nulstil onboarding-ture", "resetSuccess": { - "title": "", - "message": "" + "title": "Ture nulstillet", + "message": "Onboarding-ture vises igen på dit næste besøg" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Fuldført", + "notStarted": "Ikke startet" }, "name": { - "management": "", - "dashboard": "" + "management": "Administration", + "dashboard": "Dashboard" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "Standard farvetema", "options": { - "auto": "", + "auto": "Auto", "light": "Lys", "dark": "Mørk" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Fuld databasebackup", + "metaTitle": "Backup & gendannelse", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Eksporter database", + "description": "Download en fuld backup af din SQLite-database inklusive alle indstillinger, brugere, tavler og krypterede integrationshemmeligheder. Backup'en pakkes som en ZIP-fil med krypteringsnøglen og metadata.", + "button": "Download backup", + "error": "Eksport mislykkedes", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Eksport af følsomme data", + "warningTitle": "Denne eksport indeholder hele din database.", + "warningBody": "Backup'en omfatter alle brugere, integrationshemmeligheder (krypterede), API-nøgler, tavlekonfigurationer og app-data. Opbevar den eksporterede fil sikkert, og del den ikke.", + "typePrompt": "Indtast \"{phrase}\" for at fortsætte", + "submit": "Eksporter database", + "cancel": "Annullér" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Gendan database", + "description": "Upload en tidligere eksporteret backup-ZIP for at gendanne din database. Dette erstatter hele din database. Hvis backup'en blev oprettet med en anden krypteringsnøgle, bliver hemmeligheder automatisk genkrypteret.", + "warning": "Gendannelse af en backup vil fuldstændigt erstatte din nuværende database og genstarte applikationen. Denne handling kan ikke fortrydes.", "dropzone": { - "title": "", - "description": "" + "title": "Slip din backup-ZIP her, eller klik for at gennemse", + "description": "Kun .zip-filer fra en Homarr SQLite-backup accepteres" }, - "changeFile": "", - "button": "", + "changeFile": "Skift fil", + "button": "Gendan database", "success": { - "title": "", - "message": "" + "title": "Gendannelse fuldført", + "message": "Databasen er blevet gendannet. Applikationen genstarter..." }, - "error": "" + "error": "Import mislykkedes" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Backup-indhold", + "exported": "Eksporteret {date}", + "loading": "Analyserer backup-fil...", + "errorTitle": "Forhåndsvisningsfejl", + "entity": "Entitet", + "count": "Antal", + "boards": "Tavler", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Tavler", + "user": "Brugere", + "app": "Apps", + "integration": "Integrationer", + "item": "Widgets", + "media": "Medie", + "search_engine": "Søgemaskiner" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Kunne ikke analysere backup-fil", + "invalidMissingMetadata": "Ugyldig backup: mangler metadata.json", + "invalidMissingDb": "Ugyldig backup: mangler db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Slip din backup-ZIP her", + "description": "Accepterer .zip-filer fra en Homarr SQLite-backup (maks 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analyserer backup...", + "changeFile": "Skift fil", + "continueToRestore": "Fortsæt til gendannelse", + "tryAgain": "Prøv igen", + "analysisError": "Analysefejl", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Backup-indhold", + "exported": "Eksporteret {date}", + "entity": "Entitet", + "count": "Antal", + "boards": "Tavler", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Tavler", + "user": "Brugere", + "app": "Apps", + "integration": "Integrationer", + "item": "Widgets", + "media": "Medie", + "search_engine": "Søgemaskiner" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migration anvendt", + "migrationsAppliedPlural": "{count} migrationer anvendt", + "migrationsOlderVersion": "Denne backup var fra en ældre Homarr-version. {count} skemamigration blev anvendt for at bringe den op til dato.", + "migrationsOlderVersionPlural": "Denne backup var fra en ældre Homarr-version. {count} skemamigrationer blev anvendt for at bringe den op til dato.", + "migrationsUpToDate": "Databaseskema er opdateret ({count} migrationer anvendt)", + "upToDate": "Opdateret", + "migrationsPending": "{count} ventende" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Udfører migrationer ({current}/{total})", + "migrationLabel": "Migration {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Destruktiv handling", + "warningTitle": "Dette vil permanent erstatte hele din database.", + "warningBody": "Alle nuværende tavler, brugere, apps, integrationer, indstillinger og sessioner vil gå tabt. Denne handling kan ikke fortrydes. Applikationen genstarter efter gendannelsen.", + "typePrompt": "Indtast \"{phrase}\" for at fortsætte", + "cancel": "Annullér", + "submit": "Gendan database" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Gendanner database...", + "extracting": "Udpakker backup-arkiv", + "migrating": "Anvender databasemigrationer", + "encrypting": "Genkrypterer integrationshemmeligheder", + "swapping": "Udskifter databasefil", + "restarting": "Genstarter server" }, "complete": { - "title": "", - "message": "" + "title": "Gendannelse fuldført", + "message": "Databasen blev gendannet. Serveren genstarter — opdater venligst siden om et par sekunder." }, "failed": { - "title": "" + "title": "Gendannelse mislykkedes" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Ugyldig backup: mangler metadata.json", + "invalidMissingDb": "Ugyldig backup: mangler db.sqlite", + "analyzeError": "Kunne ikke analysere backup" } } }, @@ -5207,8 +5254,8 @@ "subtitle": "{count} bidragende oversættere på mange sprog" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "Sponsorer", + "subtitle": "{count} støtter projektet økonomisk" }, "libraries": { "title": "Biblioteker", @@ -5277,15 +5324,15 @@ "label": "Porte" }, "host": { - "label": "" + "label": "Vært" } }, "action": { "title": "Handlinger", "logs": { - "label": "", + "label": "Vis logfiler", "page": { - "title": "" + "title": "{name} logfiler" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Fjern", + "confirm": "", "notification": { "success": { "title": "Containere fjernet", @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "Logfiler" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "Globale kommandoer", "option": { "colorScheme": { - "auto": "", + "auto": "Skift udseendetilstand", "light": "Skift til lys tilstand", "dark": "Skift til mørk tilstand" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Præferencer", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Vælg en præference at ændre", + "backHint": "Tryk på Backspace eller brug tilbage-knappen for at gå tilbage", + "backAction": "Gå tilbage" } }, "notification": { "error": { - "message": "" + "message": "Kan ikke opdatere præference" } }, "option": { "preferences": { - "label": "" + "label": "Åbn præferencer" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Aktiveret", + "disabled": "Deaktiveret" }, "board": { - "none": "", - "unavailable": "" + "none": "Ingen", + "unavailable": "Valgt i øjeblikket (utilgængelig)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Ingen", + "unavailable": "Valgt i øjeblikket (utilgængelig)" }, "colorScheme": { - "label": "", + "label": "Farveskema", "children": { "detail": { - "title": "" + "title": "Vælg dit farveskema" } } }, "locale": { - "label": "", + "label": "Sprog", "children": { "detail": { - "title": "" + "title": "Vælg dit foretrukne sprog" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Standardsøgemaskine", "children": { "detail": { - "title": "" + "title": "Vælg din standardsøgemaskine" } } }, "openSearchInNewTab": { - "label": "", + "label": "Åbn søgeresultater i ny fane", "children": { "detail": { - "title": "" + "title": "Åbn søgeresultater i ny fane" } } }, "ddgBangs": { - "label": "", + "label": "Aktivér DuckDuckGo-bangs", "children": { "detail": { - "title": "" + "title": "Aktivér DuckDuckGo-bangs" } } }, "firstDayOfWeek": { - "label": "", + "label": "Første ugedag", "children": { "detail": { - "title": "" + "title": "Vælg den første ugedag" } } }, "homeBoardId": { - "label": "", + "label": "Hjemmetavle", "children": { "detail": { - "title": "" + "title": "Vælg din hjemmetavle" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobil hjemmetavle", "children": { "detail": { - "title": "" + "title": "Vælg din mobile hjemmetavle" } } }, "pingIconsEnabled": { - "label": "", + "label": "Brug ikoner til pings", "children": { "detail": { - "title": "" + "title": "Brug ikoner til pings" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Åbn fuld præferenceside" } } } } }, "media": { - "help": "", + "help": "Søg efter film eller serier at anmode om", "requestMovie": "Anmod om film", "requestSeries": "Anmod om serie", "openIn": "Åbn i {kind}", "group": { - "title": "" + "title": "Film og serier" }, "action": { "search": { - "label": "", - "description": "", + "label": "Søg efter film eller serier", + "description": "Begynd at skrive for at søge i dine medieanmodningsintegrationer", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Tilføj en Overseerr-, Jellyseerr- eller Seerr-integration for at aktivere mediesøgning.", + "scoped": "Denne widget har ikke en tilgængelig medieanmodningsintegration." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Tilgængelig", + "partiallyAvailable": "Delvis", + "processing": "Behandler", + "requested": "Anmodet", + "pending": "Anmodet" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "Søgemaskiner", - "tipDdgBangs": "", + "tipDdgBangs": "Tip: Du kan også bruge DuckDuckGo-bangs her, f.eks. !noget", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Søg efter \"{query}\" med {label}", + "pressEnterToOpen": "Tryk på Enter for at åbne", + "engineSelected": "{label} valgt (!{bang})", + "typeQueryToContinue": "Indtast din søgeforespørgsel for at fortsætte", + "emptyBangHint": "Indtast en bang, f.eks. !yt, og tryk derefter på mellemrum for at vælge" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "Sæson", "episodes": "Episoder", - "status": "" + "status": "Status" }, "status": { - "requested": "" + "requested": "Anmodet" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Læs dokumentationen", + "next": "Næste", + "prev": "Tilbage", + "done": "Færdig", + "skip": "Spring over tur", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Velkommen til Homarr!", + "description": "Dette er dit kontrolcenter. Herfra administrerer du tavler, apps, integrationer, brugere og serverindstillinger. Lad os tage en tur gennem hver sektion." }, "boardsList": { - "title": "", - "description": "" + "title": "Dine tavler", + "description": "Her er alle dine dashboards. Hver tavle har sit eget layout, baggrund og adgangsindstillinger. Du kan se, hvem der har oprettet hver, og om den er offentlig eller privat." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Opret en tavle", + "description": "Klik her for at oprette et nyt dashboard eller importere et fra en tidligere Homarr-installation. Hver tavle får sin egen URL, du kan dele." }, "appsList": { - "title": "", - "description": "" + "title": "Dine apps", + "description": "Dette er alle de apps, du har tilføjet — links til dine selvhostede tjenester. Hver app har et ikon, valgfrit sundhedstjek og et statusmærke på dashboardet." }, "appsCreate": { - "title": "", - "description": "" + "title": "Tilføj en app", + "description": "Registrer en ny tjeneste her. Giv den et navn, URL og ikon — den vises som en flise på dine tavler med live statusovervågning." }, "integrationsList": { - "title": "", - "description": "" + "title": "Dine integrationer", + "description": "Dette er de tjenester, der er forbundet til Homarr — Sonarr, Radarr, Plex, Jellyfin og 50+ flere. Alle legitimationsoplysninger er krypterede i hvile." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Tilføj en integration", + "description": "Tilkobl en ny tjeneste her. Vælg typen, indtast URL og API-nøgle — Homarr validerer forbindelsen før lagring." }, "usersList": { - "title": "", - "description": "" + "title": "Dine brugere", + "description": "Se alle, der har adgang. Organiser brugere i grupper og styr, hvem der kan se eller redigere hver tavle." }, "usersCreate": { - "title": "", - "description": "" + "title": "Opret en bruger", + "description": "Tilføj en ny brugerkonto her. Du kan også bruge invitationslinks til nem onboarding. Det var turen — du er klar!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Dette er din tavle", + "description": "Et træk-og-slip-dashboard, hvor du arrangerer apps og widgets. Tryk Ctrl+K når som helst for at søge efter apps, tavler og handlinger." }, "editMode": { - "title": "", - "description": "" + "title": "Redigeringstilstand", + "description": "Klik her for at gå til redigeringstilstand. Du kan derefter tilføje widgets, apps og sektioner — træk for at flytte, ændr størrelse med hjørnehåndtaget. Klik igen for at gemme dine ændringer." }, "settings": { - "title": "", - "description": "" + "title": "Tavleindstillinger", + "description": "Ændr denne tavles navn, kolonner, baggrund, farver og hvem der kan få adgang. Hver tavle kan være offentlig eller privat." }, "switcher": { - "title": "", - "description": "" + "title": "Skift tavle", + "description": "Spring mellem tavler. Opret separate dashboards til forskellige formål — medier, netværk, pr. bruger eller hvad du kan lide." }, "userMenu": { - "title": "", - "description": "" + "title": "Din profil", + "description": "Skift dit farveskema, sprog, hjemmetavle og præferencer. Du kan også gå til administrationsområdet herfra." } } } diff --git a/packages/translation/src/lang/de-CH.json b/packages/translation/src/lang/de-CH.json index 7658ab286..c29ee7f19 100644 --- a/packages/translation/src/lang/de-CH.json +++ b/packages/translation/src/lang/de-CH.json @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Aktuelle Wiedergabe", "user": "Benutzer", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Spalten in Elementen auswählen", - "noCommunications": "Kann keine Daten von der Integration laden" + "noCommunications": "Kann keine Daten von der Integration laden", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Aktueller Index im Client" }, "id": { - "columnTitle": "ID" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Endzeit", - "detailsTitle": "Zeit danach/zur Fertigstellung" + "detailsTitle": "Zeit danach/zur Fertigstellung", + "eta": "" }, "type": { "columnTitle": "Typ", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Globales Verhältnis" + "globalRatio": "Globales Verhältnis", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "", @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Entfernen", + "confirm": "", "notification": { "success": { "title": "Container entfernt", diff --git a/packages/translation/src/lang/de.json b/packages/translation/src/lang/de.json index cda290b3c..3b4d0efa3 100644 --- a/packages/translation/src/lang/de.json +++ b/packages/translation/src/lang/de.json @@ -199,8 +199,8 @@ "label": "Symbole für Pings verwenden" }, "enableRightClickOnWidgets": { - "label": "", - "description": "" + "label": "Aktiviere Rechtsklick auf Widgets", + "description": "Zeigt Homarrs Kontextmenü, wenn mit der rechten Maustaste auf ein Widget geklickt wird. Deaktivieren, um das Standardmenü des Browsers zu verwenden (z.B. \"Link in neuem Tab öffnen\")." }, "defaultSearchEngine": { "label": "Standard Suchmaschine" @@ -1342,19 +1342,19 @@ }, "traefik": { "name": "Traefik", - "description": "" + "description": "Cloud-nativer Reverse-Proxy und Lastverteiler" }, "paperlessNgx": { "name": "Paperless-ngx", "description": "Dokumentenverwaltungssystem zum Archivieren und Organisieren gescannter Dokumente" }, "patchmon": { - "name": "", - "description": "" + "name": "PatchMon", + "description": "Patch-Verwaltung und Systemüberwachung für Linux-Hosts" }, "bazarr": { - "name": "", - "description": "" + "name": "Bazarr", + "description": "Schwesteranwendung zu Sonarr und Radarr, welche Untertitel und Downloads verwaltet" } }, "media": { @@ -1492,7 +1492,7 @@ "switchToDarkMode": "Zum dunklen Design wechseln", "switchToLightMode": "Zum hellen Design wechseln", "management": "Verwaltung", - "docker": "", + "docker": "Docker", "preferences": "Ihre Einstellungen", "logout": "Abmelden", "login": "Anmelden", @@ -1628,7 +1628,7 @@ "actions": "Aktionen" }, "status": { - "success": "", + "success": "Ok", "error": "Fehler", "loading": "Wird geladen", "idle": "Leerlauf" @@ -1907,14 +1907,14 @@ "description": "ISO 8601 Standard benutzen um das Datum zu formatieren (dies wird andere Optionen überschreiben)" }, "showWeather": { - "label": "", - "description": "" + "label": "Wetter anzeigen", + "description": "Zeigt ein kleines animiertes Wettersymbol und die Temperatur in der Ecke der Karte an" }, "weatherLocation": { - "label": "" + "label": "Ort für Wetterbericht" }, "isWeatherFormatFahrenheit": { - "label": "" + "label": "Fahrenheit verwenden" } } }, @@ -1944,7 +1944,7 @@ "noStation": "Keine Station ausgewählt", "option": { "baseUrl": { - "label": "" + "label": "Search.ch URL" }, "station": { "label": "Station" @@ -1976,8 +1976,8 @@ "clear": "Formatierung entfernen", "heading": "Überschrift {level}", "align": "Text ausrichten: {position}", - "directionLtr": "", - "directionRtl": "", + "directionLtr": "Setze Textausrichtung von links nach rechts", + "directionRtl": "Setze Textausrichtung von rechts nach links", "blockquote": "Blockzitat", "horizontalLine": "Horizontale Linie", "bulletList": "Aufzählung", @@ -2268,7 +2268,7 @@ "sunset": "Sonnenuntergang", "maxWindSpeed": "Maximale Windgeschwindigkeit: {maxWindSpeed} {unit}", "maxWindGusts": "Maximale Windböen: {maxWindGusts} {unit}", - "humidity": "" + "humidity": "Luftfeuchtigkeit: {humidity}%" }, "kind": { "clear": "Klar", @@ -2328,8 +2328,8 @@ "label": "Dateisystem Info anzeigen" }, "visibleStorageVolumes": { - "label": "", - "description": "", + "label": "Sichtbare Speichervolumes", + "description": "Nur verfügbar, wenn alle Integrationen Synology betreffen. Nicht ausfüllen, um alle erkannten Speichervolumes zu zeigen. ", "placeholder": "Speichervolumen auswählen" }, "defaultTab": { @@ -2412,7 +2412,7 @@ "description": "Statistiken Ihrer Container (Dieses Widget kann nur mit Administratorrechten hinzugefügt werden)", "option": { "columns": { - "label": "" + "label": "Anzuzeigende Spalten" }, "enableRowSorting": { "label": "Sortierung von Elementen aktivieren" @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Sortierung umkehren" + }, + "columnOrder": { + "label": "Spaltenordnung" + }, + "columnWidths": { + "label": "Spaltenbreite" } }, "error": { - "internalServerError": "Fehler beim Abrufen der Container Statistiken" + "internalServerError": "Fehler beim Abrufen der Container Statistiken", + "layoutSaveTitle": "Tabellenlayout nicht gespeichert", + "layoutSaveMessage": "Die Docker-Tabelle konnte nicht gespeichert werden. Versuche die Spalte zu verschieben oder eine andere Spaltengröße zu verwenden. " + }, + "empty": { + "noContainers": "Keine Docker-Container gefunden" } }, "coolify": { @@ -2468,7 +2479,7 @@ } }, "vpn": { - "name": "", + "name": "VPN", "description": "Übersicht deiner VPN-Verbindungen", "serviceUnavailable": "VPN nicht verfügbar", "option": {} @@ -2725,18 +2736,33 @@ "showOnlyPlaying": { "label": "Nur aktuelle Wiedergabe anzeigen", "description": "Diese Einstellung zu deaktivieren wird für Plex nicht funktionieren" + }, + "showBitrate": { + "label": "Zeigt die Bitrate an", + "description": "" + }, + "showLocation": { + "label": "", + "description": "Zeigt an, ob der Stream über das LAN oder WAN läuft" } }, + "footer": { + "streams": "", + "totalBitrate": "Gesamtbitrate: {bitrate}" + }, "items": { "currentlyPlaying": "Aktuelle Wiedergabe", "user": "Benutzer", "name": "Name", "id": "Id", "status": "Status", - "directPlay": "", - "transcoding": "", - "paused": "", - "remaining": "", + "directPlay": "Direkte Wiedergabe", + "directStream": "Direkter Stream", + "transcodeVideo": "", + "transcodeAudio": "", + "transcoding": "Transkodierung", + "paused": "Pausiert", + "remaining": "{minutes} Min. verbleibend", "metadata": { "title": "Statistiken für Nerds", "video": { @@ -2803,21 +2829,21 @@ } }, "patchmon": { - "name": "", + "name": "PatchMon", "description": "", - "title": "", - "totalHosts": "", - "hostsNeedingUpdates": "", - "securityUpdates": "", - "upToDateHosts": "", - "hostsWithSecurityUpdates": "", - "recentUpdates24h": "", - "totalOutdatedPackages": "", - "totalRepos": "", - "osDistribution": "", - "compliance": "", - "complianceRatio": "", - "lastUpdated": "", + "title": "PatchMon-Statistiken", + "totalHosts": "Hosts gesamt", + "hostsNeedingUpdates": "Update erforderlich", + "securityUpdates": "Sicherheits-Updates", + "upToDateHosts": "Aktualisierte Hosts", + "hostsWithSecurityUpdates": "Hosts mit Sicherheits-Updates", + "recentUpdates24h": "Updates (24h)", + "totalOutdatedPackages": "Veraltete Pakete", + "totalRepos": "Repositories", + "osDistribution": "Betriebssystem-Distribution", + "compliance": "Patch-Kompatibilität", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Zuletzt aktualisiert: {time}", "option": { "showTotalHosts": { "label": "Alle Hosts anzeigen", @@ -2832,31 +2858,31 @@ "description": "Gesamtzahl der verfügbaren Sicherheits-Updates anzeigen" }, "showUpToDateHosts": { - "label": "", - "description": "" + "label": "Zeige aktuelle Hosts", + "description": "Zeigt Hosts mit keinen veralteten Paketen an" }, "showHostsWithSecurityUpdates": { - "label": "", - "description": "" + "label": "Zeigt Hosts mit Sicherheitsupdates an", + "description": "Zeigt Hosts an, welche Sicherheitsupdates benötigen" }, "showRecentUpdates24h": { - "label": "", - "description": "" + "label": "Zeigt vergangene Updates in den letzten 24 Stunden an", + "description": "Zeigt die Anzahl der angewendeten Updates in den letzten 24 Stunden an" }, "showTotalOutdatedPackages": { - "label": "", - "description": "" + "label": "Zeigt veraltete Pakete an", + "description": "Zeigt die Gesamtanzahl der veralteten Pakete über mehrere Hosts verteilt an" }, "showTotalRepos": { - "label": "", - "description": "" + "label": "Zeigt Repositorys an", + "description": "Zeigt die Anzahl der zu überwachenden aktiven Repositorys an" }, "enableThresholdColors": { - "label": "", + "label": "Aktiviert die Schwellwert-Farben", "description": "" }, "useCustomThresholds": { - "label": "", + "label": "Erweiterte Schwellwerte", "description": "" }, "thresholdMode": { @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Elemente pro Integration begrenzen", "description": "Dies begrenzt die Anzahl der Elemente pro Integration, jedoch nicht global" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Spalten in Elementen auswählen", - "noCommunications": "Kann keine Daten von der Integration laden" + "noCommunications": "Kann keine Daten von der Integration laden", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Aktueller Index im Client" }, "id": { - "columnTitle": "ID" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "Integration" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Endzeit", - "detailsTitle": "Zeit danach/zur Fertigstellung" + "detailsTitle": "Zeit danach/zur Fertigstellung", + "eta": "" }, "type": { "columnTitle": "Typ", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Globales Verhältnis" + "globalRatio": "Globales Verhältnis", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Medien Veröffentlichungen", @@ -3741,18 +3794,6 @@ "label": "Songs anzeigen", "description": "Zeigt die Gesamtzahl der Titel in deiner Musikbibliothek an (Navidrome)" }, - "showNowPlaying": { - "label": "\"Sie hören\" anzeigen", - "description": "Zeige aktuell gespielte Titel an (Navidrome)" - }, - "showNowPlayingList": { - "label": "\"Sie hören jetzt\" Wiedergabeliste anzeigen", - "description": "Einzelne Tracks anstelle der aktiven Streamanzahl anzeigen (Navidrome)" - }, - "maxNowPlayingItems": { - "label": "Maximale jetzt abgespielte Elemente", - "description": "Maximale Anzahl an Titeln, die in der \"Sie hören jetzt\" Wiedergabeliste angezeigt werden (Navidrome)" - }, "showLibraryCount": { "label": "Anzahl der Bibliotheken anzeigen", "description": "Zeige die Anzahl der Bibliotheken in deiner Instanz (Hörbücherregal)" @@ -3786,8 +3827,6 @@ "podcasts": "Podcasts", "listeningTime": "Hördauer", "activeSessions": "Aktive Sitzungen", - "nowPlaying": "Aktuelle Wiedergabe", - "nowPlayingCount": "{count, plural, one {# stream} other {# streams}}", "error": { "internalServerError": "Fehler beim Abrufen der Audio-Statistikdaten" } @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "Agent-Version anzeigen" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "Keine Systeme gefunden", "error": { - "internalServerError": "Keine Verbindung zu Beszel. Überprüfen Sie Ihre Integrationseinstellungen." + "internalServerError": "Keine Verbindung zu Beszel. Überprüfen Sie Ihre Integrationseinstellungen.", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "System", @@ -5207,8 +5254,8 @@ "subtitle": "{count} tragen Übersetzungen in viele Sprachen bei" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "Sponsoren", + "subtitle": "{count} unterstützen das Projekt finanziell" }, "libraries": { "title": "Bibliotheken", @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Entfernen", + "confirm": "", "notification": { "success": { "title": "Container entfernt", diff --git a/packages/translation/src/lang/el.json b/packages/translation/src/lang/el.json index e77a47e8e..89b71379e 100644 --- a/packages/translation/src/lang/el.json +++ b/packages/translation/src/lang/el.json @@ -8,9 +8,9 @@ "action": { "scratch": "", "importOldmarr": "", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Επαναφορά από αντίγραφο ασφαλείας SQLite", + "restoreSqliteDescription": "Μεταφορτώστε ένα πλήρες αντίγραφο ασφαλείας βάσης δεδομένων SQLite από προηγούμενη εγκατάσταση Homarr. Αυτό θα επαναφέρει όλους τους πίνακες, χρήστες, εφαρμογές, ενσωματώσεις και ρυθμίσεις.", + "backToOptions": "← Επιστροφή στις επιλογές ρύθμισης" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "Διαμόρφωση ρυθμίσεων διακομιστή." }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Ενσωματώσεις", + "subtitle": "Επιλέξτε τις υπηρεσίες που χρησιμοποιείτε.", + "description": "Επιλέξτε τις ενσωματώσεις που θέλετε να συνδέσετε. Θα ρυθμίσουμε τον πίνακα σας με αντίστοιχα widgets αυτόματα.", "action": { "continue": "Συνέχεια", "skip": "Παράλειψη για τώρα" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} από {total}", + "skip": "Παράλειψη αυτής της ενσωμάτωσης", + "finishing": "Ρύθμιση του πίνακα σας...", "error": { - "title": "", - "message": "" + "title": "Αποτυχία ρύθμισης", + "message": "Κάτι πήγε στραβά κατά τη ρύθμιση του πίνακα σας. Παρακαλώ προσπαθήστε ξανά." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "Βοηθοί URL", + "description": "Αυτοί οι βοηθοί προσπαθούν να μαντέψουν το URL για τις υπηρεσίες σας. Αν δεν λειτουργήσει, απλά πληκτρολογήστε τη διεύθυνση χειροκίνητα." } }, "urlTemplate": { "label": "Βασικό URL", "placeholder": "homelab.local ή 192.168.1.1", - "hint": "", - "warning": "", - "preview": "", + "hint": "Εισαγάγετε το βασικό domain ή IP σας για αυτόματη συμπλήρωση των URL ενσωμάτωσης", + "warning": "Η ρύθμιση του βασικού URL τώρα θα συμπληρώσει αυτόματα όλα τα URL ενσωμάτωσης, εξοικονομώντας χρόνο κατά τη ρύθμιση", + "preview": "π.χ. {example}", "mode": { "subdomain": "Υποτομέας", - "hostPort": "" + "hostPort": "Διακομιστής:Θύρα" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", + "detected": "Ο Docker εντόπισε {count} υπηρεσίες", + "detectedBreakdown": "{integrations} ενσωματώσεις · {apps} εφαρμογές", + "summary": "Το Homarr εντόπισε {apps} εφαρμογές, {integrations} από τις οποίες έχουν ενσωματωμένες ενσωματώσεις", "appBadge": "Εφαρμογή", - "appSectionLabel": "", + "appSectionLabel": "Εφαρμογές προς προσθήκη στον πίνακα ({count} επιλεγμένες)", "scanning": "Σάρωση Docker...", - "scanningDescription": "" + "scanningDescription": "Αναζήτηση εκτελούμενων containers στο σύστημά σας" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "Κωδικός", - "suggestionsTitle": "", + "suggestionsTitle": "Προτάσεις κωδικού πρόσβασης", "suggestion": { "length": "Τουλάχιστον 8 χαρακτήρες", "lowercase": "Περιλαμβάνει πεζό γράμμα", @@ -209,7 +209,7 @@ "label": "" }, "ddgBangs": { - "label": "" + "label": "Ενεργοποίηση bangs DuckDuckGo" } }, "error": { @@ -302,10 +302,10 @@ "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "Εναλλαγή bangs DuckDuckGo επιτυχής" }, "error": { - "message": "" + "message": "Αδυναμία εναλλαγής bangs DuckDuckGo" } } }, @@ -691,75 +691,75 @@ "customWidget": { "page": { "list": { - "title": "", - "noResults": "", - "loading": "" + "title": "Προσαρμοσμένα Widgets", + "noResults": "Δεν υπάρχουν ακόμα προσαρμοσμένα widgets. Δημιουργήστε το πρώτο σας!", + "loading": "Φόρτωση..." }, "create": { - "title": "", - "subtitle": "" + "title": "Δημιουργία Προσαρμοσμένου Widget", + "subtitle": "Ορίστε μια διεύθυνση URL API, πιστοποίηση και τον τρόπο εμφάνισης των δεδομένων απόκρισης." }, "edit": { - "title": "" + "title": "Επεξεργασία Προσαρμοσμένου Widget" } }, "action": { - "create": "", - "import": "", - "save": "", - "delete": "", - "deleteConfirm": "", - "export": "", - "addMapping": "", - "addColumn": "", - "edit": "", - "removeMapping": "", - "removeColumn": "", - "addItem": "", - "removeItem": "", - "addBar": "", - "duplicate": "", - "copyAiPrompt": "", - "enable": "", - "disable": "", - "menu": "" + "create": "Δημιουργία", + "import": "Εισαγωγή", + "save": "Αποθήκευση", + "delete": "Διαγραφή Προσαρμοσμένου Widget", + "deleteConfirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το \"{name}\"; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", + "export": "Εξαγωγή", + "addMapping": "Προσθήκη Αντιστοίχισης", + "addColumn": "Προσθήκη Στήλης", + "edit": "Επεξεργασία", + "removeMapping": "Αφαίρεση αντιστοίχισης", + "removeColumn": "Αφαίρεση στήλης", + "addItem": "Προσθήκη Στοιχείου", + "removeItem": "Αφαίρεση στοιχείου", + "addBar": "Προσθήκη Μπάρας", + "duplicate": "Αντιγραφή", + "copyAiPrompt": "Αντιγραφή προτροπής AI", + "enable": "Ενεργοποίηση", + "disable": "Απενεργοποίηση", + "menu": "Ενέργειες" }, "field": { - "name": "", - "description": "", - "iconUrl": "", - "url": "", - "authType": "", - "headerName": "", - "method": "", - "requestBody": "", - "displayType": "", - "jsonPath": "", - "jsonPathHint": "", - "label": "", - "unit": "", - "mappings": "", - "tablePath": "", - "tablePathHint": "", - "columns": "", - "header": "", - "items": "", - "gridColumns": "", - "cardStyle": "", - "bars": "", - "valuePath": "", - "maxPath": "", - "showPercentage": "", - "barSize": "", - "goodValues": "", - "dotSize": "", - "valueSize": "", - "labelPosition": "", - "kvLayout": "", - "striped": "", - "compact": "", - "maxHeight": "", - "color": "", + "name": "Όνομα", + "description": "Περιγραφή", + "iconUrl": "URL Εικονιδίου", + "url": "URL", + "authType": "Τύπος Πιστοποίησης", + "headerName": "Όνομα Παραμέτρου Κεφαλίδας/Ερωτήματος", + "method": "Μέθοδος", + "requestBody": "Σώμα Αιτήματος", + "displayType": "Τύπος Εμφάνισης", + "jsonPath": "Διαδρομή JSON", + "jsonPathHint": "Χρησιμοποιήστε σύνταξη JSONPath για εξαγωγή τιμών, π.χ. $.data.temperature ή $.items[0].name", + "label": "Ετικέτα", + "unit": "Μονάδα", + "mappings": "Αντιστοιχίσεις", + "tablePath": "Διαδρομή JSON Πίνακα", + "tablePathHint": "Διαδρομή προς τον πίνακα στην απόκριση, π.χ. $.data.items", + "columns": "Στήλες", + "header": "Κεφαλίδα", + "items": "Στοιχεία", + "gridColumns": "Στήλες Πλέγματος", + "cardStyle": "Στυλ Κάρτας", + "bars": "Μπάρες", + "valuePath": "Διαδρομή JSON Τιμής", + "maxPath": "Διαδρομή JSON Μέγιστης Τιμής", + "showPercentage": "Εμφάνιση Ποσοστού", + "barSize": "Μέγεθος Μπάρας", + "goodValues": "Καλές Τιμές (διαχωρισμένες με κόμμα)", + "dotSize": "Μέγεθος Κουκκίδας", + "valueSize": "Μέγεθος Τιμής", + "labelPosition": "Θέση Ετικέτας", + "kvLayout": "Διάταξη", + "striped": "Ριγωτές Γραμμές", + "compact": "Συμπαγής Λειτουργία", + "maxHeight": "Μέγιστο Ύψος (px)", + "color": "Χρώμα", "buttonLabel": "", "buttonColor": "", "confirmText": "", @@ -987,47 +987,47 @@ "placeholder": "" }, "apiKeySettings": { - "label": "" + "label": "Λήψη κλειδιού API" } }, "action": { "create": "" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} γουίτζετ", + "noWidgets": "Κανένα widget", + "detected": "Εντοπίστηκε μέσω Docker" }, "category": { "dnsHole": "DNS", "mediaService": "Πολυμέσα", "calendar": "Ημερολόγιο", "mediaSearch": "Αναζήτηση", - "mediaRelease": "", + "mediaRelease": "Κυκλοφορίες", "mediaRequest": "Αιτήματα", "downloadClient": "Λήψεις", - "usenet": "", - "torrent": "", - "miscellaneous": "", + "usenet": "Usenet", + "torrent": "Τόρρεντ", + "miscellaneous": "Διάφορα", "smartHomeServer": "Έξυπνο Σπίτι", - "indexerManager": "", + "indexerManager": "Διαχειριστής ευρετηρίων", "healthMonitoring": "Υγεία", "search": "Αναζήτηση", - "mediaTranscoding": "", + "mediaTranscoding": "Μετακωδικοποίηση", "networkController": "Δίκτυο", - "releasesProvider": "", + "releasesProvider": "Κυκλοφορίες", "notifications": "Ειδοποιήσεις", "firewall": "Τείχος Προστασίας", - "timetable": "", + "timetable": "Χρονοδιάγραμμα", "photoService": "Φωτογραφίες", - "documents": "", + "documents": "Έγγραφα", "notes": "Σημειώσεις", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "mediaMonitoring": "Παρακολούθηση", + "speedtest": "Τεστ ταχύτητας", + "analytics": "Αναλυτικά", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Βιβλιοθήκη Πολυμέσων", + "uptimeMonitoring": "Παρακολούθηση Διαθεσιμότητας" }, "testConnection": { "action": { @@ -1310,8 +1310,8 @@ "newLabel": "Νέο ιδιωτικό κλειδί" }, "slug": { - "label": "", - "newLabel": "" + "label": "Slug σελίδας κατάστασης", + "newLabel": "Νέο slug σελίδας κατάστασης" } } }, @@ -1321,22 +1321,22 @@ "full": "" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Αυτο-φιλοξενούμενος διακομιστής ηχητικών βιβλίων και podcast" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Αυτο-φιλοξενούμενος διακομιστής ροής μουσικής με συμβατότητα Subsonic API" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Αυτο-φιλοξενούμενη παρακολούθηση διαθεσιμότητας με δημόσιες σελίδες κατάστασης", "secret": { "slug": { - "description": "" + "description": "Το slug της δημόσιας σελίδας κατάστασής σας. Προεπιλογή σε \"default\" αν δεν οριστεί." }, "apiKey": { - "description": "" + "description": "Προαιρετικό κλειδί API για πιστοποιημένη πρόσβαση /metrics" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Σύστημα διαχείρισης εγγράφων για αρχειοθέτηση και οργάνωση σαρωμένων εγγράφων" }, "patchmon": { "name": "", @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Δεν έχουν μεταφορτωθεί πολυμέσα" } }, "common": { @@ -1659,11 +1659,11 @@ "edit": { "title": "Επεξεργασία στοιχείου", "tab": { - "widget": "", + "widget": "Επεξεργασία widget", "app": "Επεξεργασία εφαρμογής" }, "app": { - "propagationNotice": "" + "propagationNotice": "Οι αλλαγές σε αυτήν την εφαρμογή θα εφαρμοστούν παντού όπου χρησιμοποιείται σε όλους τους πίνακες." }, "advancedOptions": { "label": "", @@ -1776,7 +1776,7 @@ "label": "" }, "withBorder": { - "label": "" + "label": "Εμφάνιση περιγράμματος" }, "items": { "label": "Σελιδοδείκτες", @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Παρακολούθηση της κατάστασης των συσκευών UPS μέσω ενός διακομιστή NUT", "option": { "showBattery": { - "label": "" + "label": "Εμφάνιση μπαταρίας" }, "showLoad": { - "label": "" + "label": "Εμφάνιση φορτίου" }, "showVoltage": { - "label": "" + "label": "Εμφάνιση τάσης" } }, "status": { - "online": "", + "online": "Σε σύνδεση", "onBattery": "Σε μπαταρία", "lowBattery": "Χαμηλή μπαταρία", - "charging": "", - "unknown": "" + "charging": "Φόρτιση", + "unknown": "Άγνωστο" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Χρόνος λειτουργίας", + "load": "Φορτίο", + "input": "Είσοδος", + "output": "Έξοδος" }, "error": { - "internalServerError": "" + "internalServerError": "Αποτυχία ανάκτησης δεδομένων UPS" } }, "tracearr": { @@ -2585,76 +2596,76 @@ "24h": "Τελευταίες 24 ώρες", "7d": "Τελευταίες 7 ημέρες", "30d": "Τελευταίες 30 ημέρες", - "month": "", - "lastMonth": "" + "month": "Αυτός ο μήνας", + "lastMonth": "Προηγούμενος μήνας" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Συμβάν", + "description": "Εμφάνιση συνολικών εμφανίσεων ενός συγκεκριμένου συμβάντος", + "placeholder": "Επιλέξτε ένα συμβάν", + "loading": "Φόρτωση συμβάντων...", + "noEvents": "Δεν βρέθηκαν συμβάντα", + "none": "Κανένα συμβάν", + "configureWebsiteFirst": "Επιλέξτε πρώτα έναν ιστότοπο για να φορτώσετε συμβάντα" }, "chartType": { - "label": "", - "description": "", + "label": "Τύπος γραφήματος", + "description": "Στυλ εμφάνισης για το γράφημα", "option": { - "bar": "", - "sparkline": "" + "bar": "Ραβδόγραμμα", + "sparkline": "Μικρογράφημα" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Στυλ γραφήματος", + "description": "Πώς να εμφανίζονται οι σειρές συμβάντων στο γράφημα", "option": { - "grouped": "", - "overlay": "" + "grouped": "Πλάι-πλάι", + "overlay": "Επικάλυψη (υποσύνολο)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Προβολή", + "description": "Τι να εμφανίζεται στο σώμα του widget", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Γράφημα", + "events": "Γράφημα συμβάντων", + "topPages": "Κορυφαίες σελίδες", + "topReferrers": "Κορυφαίοι παραπομποί" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Συμβάντα", + "description": "Επιλέξτε ένα ή περισσότερα συμβάντα για το γράφημα", + "placeholder": "Επιλέξτε συμβάντα...", + "loading": "Φόρτωση συμβάντων...", + "noEvents": "Δεν βρέθηκαν συμβάντα", + "configureWebsiteFirst": "Επιλέξτε πρώτα έναν ιστότοπο για να φορτώσετε συμβάντα" }, "topCount": { - "label": "", - "description": "" + "label": "Στοιχεία προς εμφάνιση", + "description": "Αριθμός κορυφαίων στοιχείων προς εμφάνιση (μέγιστο 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "συμβάντα", + "label": "συμβάντα" }, "topPages": { - "direct": "" + "direct": "Απευθείας" }, "topReferrers": { - "direct": "" + "direct": "Απευθείας" }, "events": { - "selectPrompt": "" + "selectPrompt": "Επιλέξτε συμβάντα για το γράφημα" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Δεν έχει ρυθμιστεί ενσωμάτωση Umami", + "noWebsite": "Δεν έχει ρυθμιστεί ιστότοπος", + "noData": "Δεν υπάρχουν διαθέσιμα δεδομένα", + "internalServerError": "Αποτυχία ανάκτησης δεδομένων Umami" } }, "common": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,48 +2784,48 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Επισκόπηση του αρχείου εγγράφων σας στο Paperless-ngx", + "documentsTotal": "Συνολικά Έγγραφα", + "documentsInbox": "Εισερχόμενα", + "correspondents": "Αλληλογράφοι", + "tags": "Ετικέτες", + "documentTypes": "Τύποι Εγγράφων", + "inboxRatio": "Αναλογία Εισερχομένων", + "inbox": "εισερχόμενα", + "total": "σύνολο", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Εμφάνιση αναλογίας εισερχομένων", + "description": "Εμφάνιση της αναλογίας εισερχομένων προς το σύνολο των εγγράφων στην ενότητα κορυφής" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Εμφάνιση δακτυλίου εισερχομένων", + "description": "Εμφάνιση δακτυλίου προόδου παράλληλα με την αναλογία εισερχομένων" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Εμφάνιση συνολικών εγγράφων", + "description": "Εμφάνιση του συνολικού αριθμού εγγράφων στο αρχείο σας" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Εμφάνιση πλήθους εισερχομένων", + "description": "Εμφάνιση του αριθμού των μη επεξεργασμένων εγγράφων στα εισερχόμενα" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Εμφάνιση αλληλογράφων", + "description": "Εμφάνιση του συνολικού αριθμού αλληλογράφων" }, "showTags": { - "label": "", - "description": "" + "label": "Εμφάνιση ετικετών", + "description": "Εμφάνιση του συνολικού αριθμού ετικετών" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Εμφάνιση τύπων εγγράφων", + "description": "Εμφάνιση του συνολικού αριθμού τύπων εγγράφων" } }, "error": { - "internalServerError": "" + "internalServerError": "Αποτυχία λήψης δεδομένων Paperless-ngx" } }, "patchmon": { @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "", - "noCommunications": "" + "noCommunications": "", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "" }, "id": { - "columnTitle": "" + "columnTitle": "", + "detailsTitle": "" }, "integration": { "columnTitle": "Ενσωμάτωση" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "", + "eta": "" }, "type": { "columnTitle": "", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "" + "globalRatio": "", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3652,43 +3705,43 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Παρακολούθηση στατιστικών διαθεσιμότητας από τη σελίδα κατάστασης Uptime Kuma", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Εμφάνιση μέσης διαθεσιμότητας", + "description": "Εμφάνιση του συνδυασμένου ποσοστού μέσης διαθεσιμότητας 24 ωρών" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Εμφάνιση δακτυλίου διαθεσιμότητας", + "description": "Εμφάνιση δακτυλίου προόδου παράλληλα με την τιμή μέσης διαθεσιμότητας" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Εμφάνιση συνόλου παρακολούθων", + "description": "Εμφάνιση του συνολικού αριθμού των διαμορφωμένων παρακολούθων" }, "showUpCount": { - "label": "", - "description": "" + "label": "Εμφάνιση αριθμού σε λειτουργία", + "description": "Εμφάνιση πόσοι παρακολουθούνται είναι αυτήν τη στιγμή ενεργοί" }, "showDownCount": { - "label": "", - "description": "" + "label": "Εμφάνιση αριθμού εκτός λειτουργίας", + "description": "Εμφάνιση πόσοι παρακολουθούνται είναι αυτήν τη στιγμή εκτός λειτουργίας" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Εμφάνιση αριθμού σε παύση", + "description": "Εμφάνιση πόσοι παρακολουθούνται είναι αυτήν τη στιγμή σε παύση" } }, - "averageUptime": "", + "averageUptime": "Μέση διαθεσιμότητα (24ωρο)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Σύνολο παρακολούθων", + "upCount": "Ενεργός", + "downCount": "Εκτός", + "pausedCount": "Σε παύση" }, "error": { - "internalServerError": "" + "internalServerError": "Αποτυχία λήψης δεδομένων διαθεσιμότητας" } }, "traefik": { @@ -3726,70 +3779,56 @@ } }, "audioStats": { - "name": "", - "description": "", + "name": "Στατιστικά Ήχου", + "description": "Στατιστικά βιβλιοθήκης και αναπαραγωγής από Navidrome ή Audiobookshelf", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Εμφάνιση καλλιτεχνών", + "description": "Εμφάνιση του συνολικού αριθμού καλλιτεχνών στη βιβλιοθήκη μουσικής σας (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Εμφάνιση άλμπουμ", + "description": "Εμφάνιση του συνολικού αριθμού άλμπουμ στη βιβλιοθήκη μουσικής σας (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "Εμφάνιση τραγουδιών", + "description": "Εμφάνιση του συνολικού αριθμού τραγουδιών στη βιβλιοθήκη μουσικής σας (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Εμφάνιση αριθμού βιβλιοθηκών", + "description": "Εμφάνιση του αριθμού βιβλιοθηκών στην εγκατάστασή σας (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Εμφάνιση ηχητικών βιβλίων", + "description": "Εμφάνιση του συνολικού αριθμού ηχητικών βιβλίων σε όλες τις βιβλιοθήκες (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Εμφάνιση podcast", + "description": "Εμφάνιση του συνολικού αριθμού podcast σε όλες τις βιβλιοθήκες (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "Εμφάνιση χρόνου ακρόασης", + "description": "Εμφάνιση του συνολικού χρόνου ακρόασής σας (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "Εμφάνιση ενεργών συνεδριών", + "description": "Εμφάνιση του αριθμού των ενεργών συνεδριών αναπαραγωγής (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "Συμπαγής λειτουργία", + "description": "Χρήση πυκνότερης διάταξης με μικρότερα πλακίδια, ιδανική για μικρά μεγέθη widget" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "Καλλιτέχνες", + "albums": "Άλμπουμ", + "songs": "Τραγούδια", + "libraryCount": "Βιβλιοθήκες", + "audiobooks": "Ηχητικά βιβλία", + "podcasts": "Ποντκαστ", + "listeningTime": "Χρόνος Ακρόασης", + "activeSessions": "Ενεργές Συνεδρίες", "error": { - "internalServerError": "" + "internalServerError": "Αποτυχία λήψης δεδομένων στατιστικών ήχου" } }, "systemResources": { @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel Συστήματα (Πίνακας)", + "description": "Προβολή πίνακα όλων των συστημάτων που παρακολουθούνται από το Beszel με ταξινομήσιμες στήλες και δείκτες κατάστασης", "option": { "statusFilter": { - "label": "" + "label": "Φίλτρο κατάστασης" }, "sortBy": { - "label": "" + "label": "Ταξινόμηση κατά" }, "sortDirection": { - "label": "" + "label": "Κατεύθυνση ταξινόμησης" }, "showCpu": { - "label": "" + "label": "Εμφάνιση CPU" }, "showMemory": { - "label": "" + "label": "Εμφάνιση μνήμης" }, "showDisk": { - "label": "" + "label": "Εμφάνιση δίσκου" }, "showGpu": { - "label": "" + "label": "Εμφάνιση GPU" }, "showLoadAvg": { - "label": "" + "label": "Εμφάνιση μέσου φόρτου" }, "showNet": { - "label": "" + "label": "Εμφάνιση δικτύου" }, "showTemp": { - "label": "" + "label": "Εμφάνιση θερμοκρασίας" }, "showBattery": { - "label": "" + "label": "Εμφάνιση μπαταρίας" }, "showServices": { - "label": "" + "label": "Εμφάνιση υπηρεσιών" }, "showUptime": { - "label": "" + "label": "Εμφάνιση χρόνου λειτουργίας" }, "showAgent": { + "label": "Εμφάνιση έκδοσης agent" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Δεν βρέθηκαν συστήματα", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Σύστημα", + "cpu": "CPU", + "memory": "Μνήμη", + "disk": "Δίσκος", + "gpu": "GPU", + "loadAvg": "Μέσος φόρτος", + "net": "Δίκτυο", + "temp": "Θερμοκρασία", + "battery": "Μπαταρία", + "services": "Υπηρεσίες", + "uptime": "Χρόνος λειτουργίας", + "agent": "Πράκτορας" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel Συστήματα (Πλέγμα)", + "description": "Προβολή πλέγματος καρτών όλων των συστημάτων που παρακολουθούνται από το Beszel με μετρήσεις σε πραγματικό χρόνο", "option": { "statusFilter": { - "label": "" + "label": "Φίλτρο κατάστασης" }, "showCpu": { - "label": "" + "label": "Εμφάνιση CPU" }, "showMemory": { - "label": "" + "label": "Εμφάνιση μνήμης" }, "showDisk": { - "label": "" + "label": "Εμφάνιση δίσκου" }, "showGpu": { - "label": "" + "label": "Εμφάνιση GPU" }, "showLoadAvg": { - "label": "" + "label": "Εμφάνιση μέσου φόρτου" }, "showNet": { - "label": "" + "label": "Εμφάνιση δικτύου" }, "showTemp": { - "label": "" + "label": "Εμφάνιση θερμοκρασίας" }, "showBattery": { - "label": "" + "label": "Εμφάνιση μπαταρίας" }, "showServices": { - "label": "" + "label": "Εμφάνιση υπηρεσιών" }, "showUptime": { - "label": "" + "label": "Εμφάνιση χρόνου λειτουργίας" }, "showAgent": { - "label": "" + "label": "Εμφάνιση έκδοσης agent" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Μνήμη", + "disk": "Δίσκος", + "gpu": "GPU", + "loadAvg": "Μέσος φόρτος", + "net": "Δίκτυο", + "temp": "Θερμοκρασία", + "battery": "Μπαταρία", + "services": "Υπηρεσίες", + "uptime": "Χρόνος λειτουργίας", + "agent": "Πράκτορας" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel Ειδοποιήσεις", + "description": "Προβολή διαμορφώσεων και ιστορικού ειδοποιήσεων Beszel", "option": { "showHistory": { - "label": "" + "label": "Εμφάνιση ιστορικού ειδοποιήσεων" }, "maxHistoryItems": { - "label": "" + "label": "Μέγιστος αριθμός στοιχείων ιστορικού" } }, - "empty": "", + "empty": "Δεν έχουν διαμορφωθεί ειδοποιήσεις", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Ιστορικό", + "resolved": "Επιλύθηκε", "status": { - "triggered": "", - "ok": "" + "triggered": "Ενεργοποιήθηκε", + "ok": "ΟΚ" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel Στατιστικά Συστήματος", + "description": "Γραφήματα χρονοσειρών για μετρήσεις CPU, μνήμης, δίσκου, δικτύου και Docker containers", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Χρονική περίοδος" }, "showCpu": { - "label": "" + "label": "Εμφάνιση γραφήματος CPU" }, "showMemory": { - "label": "" + "label": "Εμφάνιση γραφήματος μνήμης" }, "showDisk": { - "label": "" + "label": "Εμφάνιση γραφήματος δίσκου" }, "showDiskIO": { - "label": "" + "label": "Εμφάνιση γραφήματος I/O δίσκου" }, "showNetwork": { - "label": "" + "label": "Εμφάνιση γραφήματος δικτύου" }, "showDockerCpu": { - "label": "" + "label": "Εμφάνιση γραφήματος CPU Docker" }, "showDockerMemory": { - "label": "" + "label": "Εμφάνιση γραφήματος μνήμης Docker" }, "showDockerNetwork": { - "label": "" + "label": "Εμφάνιση γραφήματος δικτύου Docker" } }, - "selectSystem": "", + "selectSystem": "Επιλογή συστήματος", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "Χρήση CPU", + "subtitle": "Μέση χρήση CPU σε όλο το σύστημα", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Χρήση Μνήμης", + "subtitle": "Ακριβής χρήση τη στιγμή της καταγραφής", + "series": "Σε χρήση", + "cache": "Προσωρινή μνήμη/Προσωρινά αποθέματα" }, "disk": { - "title": "", + "title": "Χρήση Δίσκου", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "I/O Δίσκου", + "subtitle": "Διακίνηση δεδομένων του ριζικού συστήματος αρχείων", + "read": "Ανάγνωση", + "write": "Εγγραφή" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Εύρος Ζώνης", + "subtitle": "Κίνηση δικτύου των δημόσιων διεπαφών", + "sent": "Απεσταλμένα", + "recv": "Ληφθέντα" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Χρήση CPU Docker", + "subtitle": "Μέση χρήση CPU των containers" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Χρήση Μνήμης Docker", + "subtitle": "Χρήση μνήμης των docker containers" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "I/O Δικτύου Docker", + "subtitle": "Κίνηση δικτύου των docker containers" } } } @@ -4525,10 +4572,10 @@ "docker": "", "kubernetes": "", "logs": "", - "api": "", + "api": "API και MCP", "certificates": "", "tasks": "Διεργασίες", - "backup": "" + "backup": "Αντίγραφο ασφαλείας" } }, "settings": "Ρυθμίσεις", @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Πρώτη ημέρα της εβδομάδας", "accessibility": "Προσβασιμότητα", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Περιηγήσεις ενσωμάτωσης", + "description": "Επαναφέρετε τις περιηγήσεις ενσωμάτωσης για να τις δείτε ξανά στην επόμενη επίσκεψή σας στην περιοχή διαχείρισης ή στον πίνακα.", + "reset": "Επαναφορά περιηγήσεων ενσωμάτωσης", "resetSuccess": { - "title": "", - "message": "" + "title": "Οι περιηγήσεις επαναφέρθηκαν", + "message": "Οι περιηγήσεις ενσωμάτωσης θα εμφανιστούν ξανά στην επόμενη επίσκεψή σας" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Ολοκληρώθηκε", + "notStarted": "Δεν ξεκίνησε" }, "name": { - "management": "", - "dashboard": "" + "management": "Διαχείριση", + "dashboard": "Πίνακας" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "", "options": { - "auto": "", + "auto": "Αυτόματο", "light": "", "dark": "" } @@ -4984,213 +5031,213 @@ } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "AI / MCP", + "title": "Ενσωμάτωση AI", + "subtitle": "Διακομιστής Model Context Protocol (MCP)", + "description": "Συνδέστε βοηθούς AI στην εγκατάσταση Homarr σας και ελέγξτε ολόκληρο το εργαστήριό σας μέσω φυσικής γλώσσας. Αναζητήστε και ζητήστε πολυμέσα στο Overseerr, διαχειριστείτε Docker containers, ενεργοποιήστε/απενεργοποιήστε το Pi-hole, ελέγξτε την υγεία διακομιστών, ελέγξτε συσκευές Home Assistant και πολλά άλλα — όλα από τον βοηθό AI σας.", + "noApiKey": "Χρειάζεστε ένα κλειδί API για να πιστοποιηθείτε στον διακομιστή MCP.", + "createApiKeyButton": "Δημιουργία κλειδιού API", "endpoint": { - "title": "" + "title": "Τερματικό MCP" }, "authentication": { - "title": "", - "intro": "", + "title": "Πιστοποίηση", + "intro": "Μπορείτε να πιστοποιηθείτε στον διακομιστή MCP σας χρησιμοποιώντας είτε ένα κλειδί API είτε OAuth. Και οι δύο μέθοδοι παρέχουν το ίδιο επίπεδο πρόσβασης.", "apiKey": { - "title": "", - "description": "" + "title": "Κλειδί API (χειροκίνητα)", + "description": "Περάστε την κεφαλίδα ApiKey με το πλήρες κλειδί API σας στη διαμόρφωση του πελάτη MCP." }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (σύνδεση μέσω προγράμματος περιήγησης)", + "description": "Πελάτες που υποστηρίζουν OAuth (όπως Claude Code, opencode ή Cursor) μπορούν να πιστοποιηθούν ανοίγοντας ένα παράθυρο προγράμματος περιήγησης. Εκτελέστε την εντολή auth στον πελάτη σας, συνδεθείτε στο Homarr μέσω του προγράμματος περιήγησης και είστε συνδεδεμένοι — ένα κλειδί API δημιουργείται αυτόματα.", + "hint": "Τα tokens OAuth εμφανίζονται ως κανονικά κλειδιά API στην καρτέλα Πιστοποίηση. Μπορείτε να τα ανακαλέσετε οποιαδήποτε στιγμή." }, - "permissions": "" + "permissions": "Το κλειδί API καθορίζει τα δικαιώματα που είναι διαθέσιμα στο AI — λειτουργεί με το ίδιο επίπεδο πρόσβασης με τον κάτοχο του κλειδιού." }, "clientConfig": { - "title": "", + "title": "Διαμόρφωση Πελάτη", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "Προτεινόμενο", + "title": "Streamable HTTP", + "worksWith": "Λειτουργεί με: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", + "addToConfig": "Προσθέστε στο αρχείο διαμόρφωσης του πελάτη MCP σας:", + "cursor": "{name}: {file} στις ρυθμίσεις έργου ή καθολικές ρυθμίσεις σας", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} ή χρησιμοποιήστε την εντολή {command}", + "vsCodeCopilot": "{name}: {file} στις ρυθμίσεις χώρου εργασίας", + "replaceHint": "Αντικαταστήστε το σύμβολο κράτησης θέσης με το κλειδί API που λάβατε κατά τη δημιουργία του." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (πελάτες παλαιού τύπου μέσω γέφυρας mcp-remote)", + "description": "Για πελάτες που υποστηρίζουν μόνο τη μεταφορά stdio. Απαιτείται εγκατεστημένη τοπικά η εξάρτηση {dependency} (Node.js):" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "Δοκιμάστε τη Σύνδεσή Σας", + "description": "Εκτελέστε αυτό στο τερματικό σας για να επαληθεύσετε ότι το τερματικό είναι προσβάσιμο και το κλειδί API σας λειτουργεί:", + "hint": "Μια επιτυχής απόκριση επιστρέφει τις δυνατότητες του διακομιστή MCP. Αν δείτε σφάλμα, ελέγξτε την απόκριση JSON για υποδείξεις." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "Διαθέσιμα Εργαλεία", + "description": "{count} εργαλεία διαθέσιμα. Αναπτύξτε μια κατηγορία για να δείτε μεμονωμένα εργαλεία και τις περιγραφές τους.", + "columnType": "Τύπος", + "columnName": "Εργαλείο", + "columnDescription": "Περιγραφή" }, "troubleshooting": { - "title": "", + "title": "Αντιμετώπιση προβλημάτων", "missingHeader": { - "title": "", - "description": "" + "title": "\"Λείπει η κεφαλίδα ApiKey\"", + "description": "Ο πελάτης σας δεν στέλνει την κεφαλίδα {header}. Βεβαιωθείτε ότι η ενότητα {section} στη διαμόρφωση MCP είναι σωστή. Ορισμένοι πελάτες απαιτούν επανεκκίνηση μετά από αλλαγές στη διαμόρφωση." }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"Μη έγκυρη μορφή ApiKey\"", + "description": "Βεβαιωθείτε ότι αντιγράψατε ολόκληρο το κλειδί API, όχι μόνο ένα μέρος του." }, "invalidKey": { - "title": "", - "description": "" + "title": "\"Μη έγκυρο κλειδί API\"", + "description": "Το αναγνωριστικό κλειδιού δεν βρέθηκε ή το token είναι λάθος. Τα κλειδιά API μπορούν να προβληθούν μόνο μία φορά κατά τη δημιουργία. Αν το χάσατε, διαγράψτε το παλιό κλειδί και δημιουργήστε ένα νέο." }, "connectionRefused": { - "title": "", - "description": "" + "title": "Απόρριψη σύνδεσης / χρονικό όριο", + "description": "Βεβαιωθείτε ότι η διεύθυνση URL είναι προσβάσιμη από τον πελάτη AI σας. Αν το Homarr εκτελείται πίσω από αντίστροφο διακομιστή μεσολάβησης ή σε Docker, χρησιμοποιήστε την εξωτερική διεύθυνση URL (όχι {localhost}). Βεβαιωθείτε ότι η θύρα είναι σωστή (προεπιλογή: 7575 για Docker)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "Τα εργαλεία δεν εμφανίζονται", + "description": "Ορισμένα εργαλεία απαιτούν συγκεκριμένες ενσωματώσεις για να διαμορφωθούν (π.χ. Docker, Overseerr). Η λίστα εργαλείων εξαρτάται από το τι είναι διαθέσιμο στην εγκατάσταση Homarr σας." } }, - "copy": "", + "copy": "Αντιγραφή", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "Εγκατάσταση με ένα κλικ", + "subtitle": "Χρησιμοποιεί OAuth — πιστοποιηθείτε στο πρόγραμμα περιήγησής σας κατά την πρώτη χρήση", + "vsCode": "Εγκατάσταση στο VS Code", + "cursor": "Εγκατάσταση στο Cursor", + "copyUrl": "Αντιγραφή URL MCP", + "copied": "Αντιγράφηκε!", + "copyHint": "Για ChatGPT, Claude Code ή οποιονδήποτε πελάτη MCP", + "manualConfig": "Χειροκίνητη Διαμόρφωση" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Πλήρες αντίγραφο ασφαλείας βάσης δεδομένων", + "metaTitle": "Αντίγραφο ασφαλείας & επαναφορά", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Εξαγωγή βάσης δεδομένων", + "description": "Λήψη πλήρους αντιγράφου ασφαλείας της βάσης δεδομένων SQLite σας, συμπεριλαμβανομένων όλων των ρυθμίσεων, χρηστών, πινάκων και κρυπτογραφημένων μυστικών ενσωμάτωσης. Το αντίγραφο ασφαλείας συσκευάζεται ως αρχείο ZIP με το κλειδί κρυπτογράφησης και μεταδεδομένα.", + "button": "Λήψη αντιγράφου ασφαλείας", + "error": "Αποτυχία εξαγωγής", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Εξαγωγή ευαίσθητων δεδομένων", + "warningTitle": "Αυτή η εξαγωγή περιέχει ολόκληρη τη βάση δεδομένων σας.", + "warningBody": "Το αντίγραφο ασφαλείας περιλαμβάνει όλους τους χρήστες, μυστικά ενσωμάτωσης (κρυπτογραφημένα), κλειδιά API, διαμορφώσεις πινάκων και δεδομένα εφαρμογών. Αποθηκεύστε το εξαγόμενο αρχείο με ασφάλεια και μην το μοιράζεστε.", + "typePrompt": "Πληκτρολογήστε \"{phrase}\" για να συνεχίσετε", + "submit": "Εξαγωγή βάσης δεδομένων", + "cancel": "Ακύρωση" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Επαναφορά βάσης δεδομένων", + "description": "Μεταφορτώστε ένα προηγουμένως εξαχθέν αντίγραφο ασφαλείας ZIP για να επαναφέρετε τη βάση δεδομένων σας. Αυτό θα αντικαταστήσει ολόκληρη τη βάση δεδομένων σας. Εάν το αντίγραφο ασφαλείας δημιουργήθηκε με διαφορετικό κλειδί κρυπτογράφησης, τα μυστικά θα επανακρυπτογραφηθούν αυτόματα.", + "warning": "Η επαναφορά ενός αντιγράφου ασφαλείας θα αντικαταστήσει πλήρως την τρέχουσα βάση δεδομένων σας και θα επανεκκινήσει την εφαρμογή. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", "dropzone": { - "title": "", - "description": "" + "title": "Αποθέστε το αντίγραφο ασφαλείας ZIP εδώ ή κάντε κλικ για περιήγηση", + "description": "Γίνονται δεκτά μόνο αρχεία .zip από αντίγραφο ασφαλείας Homarr SQLite" }, - "changeFile": "", - "button": "", + "changeFile": "Αλλαγή αρχείου", + "button": "Επαναφορά βάσης δεδομένων", "success": { - "title": "", - "message": "" + "title": "Η επαναφορά ολοκληρώθηκε", + "message": "Η βάση δεδομένων επαναφέρθηκε επιτυχώς. Η εφαρμογή επανεκκινείται..." }, - "error": "" + "error": "Αποτυχία εισαγωγής" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Περιεχόμενα αντιγράφου ασφαλείας", + "exported": "Εξήχθη {date}", + "loading": "Ανάλυση αρχείου αντιγράφου ασφαλείας...", + "errorTitle": "Σφάλμα προεπισκόπησης", + "entity": "Οντότητα", + "count": "Πλήθος", + "boards": "Πίνακες", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Πίνακες", + "user": "Χρήστες", + "app": "Εφαρμογές", + "integration": "Ενσωματώσεις", + "item": "Γουίτζετς", + "media": "Πολυμέσα", + "search_engine": "Μηχανές αναζήτησης" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Αποτυχία ανάλυσης αρχείου αντιγράφου ασφαλείας", + "invalidMissingMetadata": "Μη έγκυρο αντίγραφο ασφαλείας: λείπει το metadata.json", + "invalidMissingDb": "Μη έγκυρο αντίγραφο ασφαλείας: λείπει το db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Αποθέστε το αντίγραφο ασφαλείας ZIP εδώ", + "description": "Δέχεται αρχεία .zip από αντίγραφο ασφαλείας Homarr SQLite (μέγιστο 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Ανάλυση αντιγράφου ασφαλείας...", + "changeFile": "Αλλαγή αρχείου", + "continueToRestore": "Συνέχεια στην επαναφορά", + "tryAgain": "Προσπαθήστε ξανά", + "analysisError": "Σφάλμα ανάλυσης", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Περιεχόμενα αντιγράφου ασφαλείας", + "exported": "Εξήχθη {date}", + "entity": "Οντότητα", + "count": "Πλήθος", + "boards": "Πίνακες", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Πίνακες", + "user": "Χρήστες", + "app": "Εφαρμογές", + "integration": "Ενσωματώσεις", + "item": "Γουίτζετς", + "media": "Πολυμέσα", + "search_engine": "Μηχανές αναζήτησης" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} μετεγκατάσταση εφαρμόστηκε", + "migrationsAppliedPlural": "{count} μετεγκαταστάσεις εφαρμόστηκαν", + "migrationsOlderVersion": "Αυτό το αντίγραφο ασφαλείας ήταν από παλαιότερη έκδοση Homarr. Εφαρμόστηκε {count} μετεγκατάσταση σχήματος για να ενημερωθεί.", + "migrationsOlderVersionPlural": "Αυτό το αντίγραφο ασφαλείας ήταν από παλαιότερη έκδοση Homarr. Εφαρμόστηκαν {count} μετεγκαταστάσεις σχήματος για να ενημερωθεί.", + "migrationsUpToDate": "Το σχήμα βάσης δεδομένων είναι ενημερωμένο ({count} μετεγκαταστάσεις εφαρμόστηκαν)", + "upToDate": "Ενημερωμένο", + "migrationsPending": "{count} σε εκκρεμότητα" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Εφαρμογή μετεγκαταστάσεων ({current}/{total})", + "migrationLabel": "Μετεγκατάσταση {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Καταστροφική ενέργεια", + "warningTitle": "Αυτό θα αντικαταστήσει μόνιμα ολόκληρη τη βάση δεδομένων σας.", + "warningBody": "Όλοι οι τρέχοντες πίνακες, χρήστες, εφαρμογές, ενσωματώσεις, ρυθμίσεις και συνεδρίες θα χαθούν. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Η εφαρμογή θα επανεκκινήσει μετά την επαναφορά.", + "typePrompt": "Πληκτρολογήστε \"{phrase}\" για να συνεχίσετε", + "cancel": "Ακύρωση", + "submit": "Επαναφορά βάσης δεδομένων" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Επαναφορά βάσης δεδομένων...", + "extracting": "Εξαγωγή αρχείου αντιγράφου ασφαλείας", + "migrating": "Εφαρμογή μετεγκαταστάσεων βάσης δεδομένων", + "encrypting": "Επανακρυπτογράφηση μυστικών ενσωμάτωσης", + "swapping": "Αντικατάσταση αρχείου βάσης δεδομένων", + "restarting": "Επανεκκίνηση διακομιστή" }, "complete": { - "title": "", - "message": "" + "title": "Η επαναφορά ολοκληρώθηκε", + "message": "Η βάση δεδομένων επαναφέρθηκε επιτυχώς. Ο διακομιστής επανεκκινείται — παρακαλώ ανανεώστε τη σελίδα σε λίγα δευτερόλεπτα." }, "failed": { - "title": "" + "title": "Αποτυχία επαναφοράς" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Μη έγκυρο αντίγραφο ασφαλείας: λείπει το metadata.json", + "invalidMissingDb": "Μη έγκυρο αντίγραφο ασφαλείας: λείπει το db.sqlite", + "analyzeError": "Αποτυχία ανάλυσης αντιγράφου ασφαλείας" } } }, @@ -5277,15 +5324,15 @@ "label": "Θύρες" }, "host": { - "label": "" + "label": "Διακομιστής" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Προβολή αρχείων καταγραφής", "page": { - "title": "" + "title": "Αρχεία καταγραφής {name}" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Αφαίρεση", + "confirm": "", "notification": { "success": { "title": "", @@ -5715,7 +5763,7 @@ "docker": { "label": "", "logs": { - "label": "" + "label": "Αρχεία καταγραφής" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Εναλλαγή λειτουργίας εμφάνισης", "light": "", "dark": "" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Προτιμήσεις", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Επιλέξτε μια προτίμηση για αλλαγή", + "backHint": "Πατήστε Backspace ή χρησιμοποιήστε το κουμπί πίσω για να επιστρέψετε", + "backAction": "Επιστροφή" } }, "notification": { "error": { - "message": "" + "message": "Αδυναμία ενημέρωσης προτίμησης" } }, "option": { "preferences": { - "label": "" + "label": "Άνοιγμα προτιμήσεων" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Ενεργοποιημένο", + "disabled": "Απενεργοποιημένο" }, "board": { - "none": "", - "unavailable": "" + "none": "Κανένα", + "unavailable": "Επιλεγμένο (μη διαθέσιμο)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Κανένα", + "unavailable": "Επιλεγμένο (μη διαθέσιμο)" }, "colorScheme": { - "label": "", + "label": "Συνδυασμός χρωμάτων", "children": { "detail": { - "title": "" + "title": "Επιλέξτε τον συνδυασμό χρωμάτων σας" } } }, "locale": { - "label": "", + "label": "Γλώσσα", "children": { "detail": { - "title": "" + "title": "Επιλέξτε την προτιμώμενη γλώσσα σας" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Προεπιλεγμένη μηχανή αναζήτησης", "children": { "detail": { - "title": "" + "title": "Επιλέξτε την προεπιλεγμένη μηχανή αναζήτησης" } } }, "openSearchInNewTab": { - "label": "", + "label": "Άνοιγμα αποτελεσμάτων αναζήτησης σε νέα καρτέλα", "children": { "detail": { - "title": "" + "title": "Άνοιγμα αποτελεσμάτων αναζήτησης σε νέα καρτέλα" } } }, "ddgBangs": { - "label": "", + "label": "Ενεργοποίηση bangs DuckDuckGo", "children": { "detail": { - "title": "" + "title": "Ενεργοποίηση bangs DuckDuckGo" } } }, "firstDayOfWeek": { - "label": "", + "label": "Πρώτη ημέρα της εβδομάδας", "children": { "detail": { - "title": "" + "title": "Επιλέξτε την πρώτη ημέρα της εβδομάδας" } } }, "homeBoardId": { - "label": "", + "label": "Αρχικός πίνακας", "children": { "detail": { - "title": "" + "title": "Επιλέξτε τον αρχικό σας πίνακα" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Αρχικός πίνακας κινητού", "children": { "detail": { - "title": "" + "title": "Επιλέξτε τον αρχικό πίνακα κινητού σας" } } }, "pingIconsEnabled": { - "label": "", + "label": "Χρήση εικονιδίων για pings", "children": { "detail": { - "title": "" + "title": "Χρήση εικονιδίων για pings" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Άνοιγμα πλήρους σελίδας προτιμήσεων" } } } } }, "media": { - "help": "", + "help": "Αναζητήστε ταινίες ή σειρές για αίτημα", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Ταινίες και σειρές" }, "action": { "search": { - "label": "", - "description": "", + "label": "Αναζήτηση ταινιών ή σειρών", + "description": "Αρχίστε να πληκτρολογείτε για να αναζητήσετε τις ενσωματώσεις αιτημάτων πολυμέσων σας", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Προσθέστε μια ενσωμάτωση Overseerr, Jellyseerr ή Seerr για να ενεργοποιήσετε την αναζήτηση πολυμέσων.", + "scoped": "Αυτό το widget δεν έχει προσβάσιμη ενσωμάτωση αιτημάτων πολυμέσων." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Διαθέσιμο", + "partiallyAvailable": "Μερικώς διαθέσιμο", + "processing": "Επεξεργασία", + "requested": "Ζητήθηκε", + "pending": "Ζητήθηκε" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Συμβουλή: Μπορείτε να χρησιμοποιήσετε και bangs DuckDuckGo εδώ, π.χ. !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Αναζήτηση \"{query}\" με {label}", + "pressEnterToOpen": "Πατήστε Enter για άνοιγμα", + "engineSelected": "{label} επιλεγμένο (!{bang})", + "typeQueryToContinue": "Πληκτρολογήστε το ερώτημα αναζήτησής σας για να συνεχίσετε", + "emptyBangHint": "Πληκτρολογήστε ένα bang, π.χ. !yt, και μετά πατήστε Space για επιλογή" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Κατάσταση" }, "status": { - "requested": "" + "requested": "Ζητήθηκε" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Διαβάστε τα έγγραφα", + "next": "Επόμενο", + "prev": "Πίσω", + "done": "Τέλος", + "skip": "Παράλειψη περιήγησης", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Καλώς ήρθατε στο Homarr!", + "description": "Αυτό είναι το κέντρο ελέγχου σας. Από εδώ διαχειρίζεστε πίνακες, εφαρμογές, ενσωματώσεις, χρήστες και ρυθμίσεις διακομιστή. Ας κάνουμε μια περιήγηση σε κάθε ενότητα." }, "boardsList": { "title": "Οι Πίνακες σας", - "description": "" + "description": "Εδώ είναι όλοι οι πίνακές σας. Κάθε πίνακας έχει τη δική του διάταξη, φόντο και ρυθμίσεις πρόσβασης. Μπορείτε να δείτε ποιος δημιούργησε τον καθένα και αν είναι δημόσιος ή ιδιωτικός." }, "boardsCreate": { "title": "Δημιουργία Πίνακα", - "description": "" + "description": "Κάντε κλικ εδώ για να δημιουργήσετε έναν νέο πίνακα ή να εισαγάγετε έναν από προηγούμενη εγκατάσταση Homarr. Κάθε πίνακας αποκτά το δικό του URL που μπορείτε να μοιραστείτε." }, "appsList": { - "title": "", - "description": "" + "title": "Οι εφαρμογές σας", + "description": "Αυτές είναι όλες οι εφαρμογές που έχετε προσθέσει — σύνδεσμοι προς τις αυτο-φιλοξενούμενες υπηρεσίες σας. Κάθε εφαρμογή έχει ένα εικονίδιο, προαιρετικό έλεγχο υγείας και ένα σήμα κατάστασης στον πίνακα." }, "appsCreate": { - "title": "", - "description": "" + "title": "Προσθήκη εφαρμογής", + "description": "Καταχωρίστε μια νέα υπηρεσία εδώ. Δώστε της ένα όνομα, URL και εικονίδιο — θα εμφανιστεί ως πλακίδιο στους πίνακές σας με ζωντανή παρακολούθηση κατάστασης." }, "integrationsList": { - "title": "", - "description": "" + "title": "Οι ενσωματώσεις σας", + "description": "Αυτές είναι οι υπηρεσίες που είναι συνδεδεμένες στο Homarr — Sonarr, Radarr, Plex, Jellyfin και 50+ ακόμα. Όλα τα διαπιστευτήρια είναι κρυπτογραφημένα σε κατάσταση ηρεμίας." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Προσθήκη ενσωμάτωσης", + "description": "Συνδέστε μια νέα υπηρεσία εδώ. Επιλέξτε τον τύπο, εισαγάγετε το URL και το κλειδί API — το Homarr επικυρώνει τη σύνδεση πριν την αποθήκευση." }, "usersList": { - "title": "", - "description": "" + "title": "Οι χρήστες σας", + "description": "Δείτε όλους όσους έχουν πρόσβαση. Οργανώστε τους χρήστες σε ομάδες και ελέγξτε ποιος μπορεί να δει ή να επεξεργαστεί κάθε πίνακα." }, "usersCreate": { - "title": "", - "description": "" + "title": "Δημιουργία χρήστη", + "description": "Προσθέστε έναν νέο λογαριασμό χρήστη εδώ. Μπορείτε επίσης να χρησιμοποιήσετε συνδέσμους πρόσκλησης για εύκολη ενσωμάτωση. Αυτή είναι η περιήγηση — είστε έτοιμοι!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Αυτός είναι ο πίνακάς σας", + "description": "Ένας πίνακας με drag-and-drop όπου τακτοποιείτε εφαρμογές και widgets. Πατήστε Ctrl+K ανά πάσα στιγμή για αναζήτηση εφαρμογών, πινάκων και ενεργειών." }, "editMode": { - "title": "", - "description": "" + "title": "Λειτουργία επεξεργασίας", + "description": "Κάντε κλικ εδώ για να μπείτε σε λειτουργία επεξεργασίας. Μπορείτε στη συνέχεια να προσθέσετε widgets, εφαρμογές και ενότητες — σύρετε για επανατοποθέτηση, αλλάξτε μέγεθος με τη λαβή γωνίας. Κάντε ξανά κλικ για να αποθηκεύσετε τις αλλαγές σας." }, "settings": { - "title": "", - "description": "" + "title": "Ρυθμίσεις πίνακα", + "description": "Αλλάξτε το όνομα αυτού του πίνακα, τις στήλες, το φόντο, τα χρώματα και ποιος μπορεί να έχει πρόσβαση σε αυτόν. Κάθε πίνακας μπορεί να είναι δημόσιος ή ιδιωτικός." }, "switcher": { "title": "Εναλλαγή Πινάκων", - "description": "" + "description": "Μεταβείτε μεταξύ πινάκων. Δημιουργήστε ξεχωριστούς πίνακες για διαφορετικούς σκοπούς — πολυμέσα, δίκτυα, ανά χρήστη ή ό,τι θέλετε." }, "userMenu": { - "title": "", - "description": "" + "title": "Το προφίλ σας", + "description": "Αλλάξτε τον συνδυασμό χρωμάτων σας, τη γλώσσα, τον αρχικό πίνακα και τις προτιμήσεις σας. Μπορείτε επίσης να μεταβείτε στην περιοχή διαχείρισης από εδώ." } } } diff --git a/packages/translation/src/lang/en-gb.json b/packages/translation/src/lang/en-gb.json index 24f0c4201..76abff9a8 100644 --- a/packages/translation/src/lang/en-gb.json +++ b/packages/translation/src/lang/en-gb.json @@ -783,114 +783,114 @@ "jsonPath": "$.data.value", "tablePath": "$.data.items", "columnJsonPath": "$.name", - "valuePath": "", - "maxPath": "", - "goodValues": "", - "color": "" + "valuePath": "$.data.used", + "maxPath": "$.data.total", + "goodValues": "online, true, up", + "color": "blue" }, "cardStyleOption": { - "filled": "", - "outline": "", - "subtle": "" + "filled": "Filled", + "outline": "Outline", + "subtle": "Subtle" }, "layoutOption": { - "list": "", - "grid": "" + "list": "List", + "grid": "Grid" }, "sizeOption": { - "sm": "", - "md": "", - "lg": "", - "xl": "" + "sm": "Small", + "md": "Medium", + "lg": "Large", + "xl": "Extra Large" }, "labelPositionOption": { - "above": "", - "below": "" + "above": "Above", + "below": "Below" }, "fieldset": { - "general": "", - "connection": "", - "display": "" + "general": "General", + "connection": "API Connection", + "display": "Display Configuration" }, "displayTypeDescription": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Show one extracted value with a label and unit", + "keyValue": "Show multiple labeled values side by side", + "table": "Show rows of data in a table format", + "statGrid": "Colored stat cards in a grid — like Pi-Hole or Speedtest widgets", + "progressBars": "Progress bars showing usage or completion — for disk, memory, quotas", + "statusIndicator": "Colored status dots showing online/offline or health states", + "countGrid": "Compact number + label counters in a tight grid", + "raw": "Pretty-printed JSON output for debugging", + "actionButton": "A button that triggers a request when clicked", + "customJsx": "Custom JSX layout using whitelisted Mantine components with full API data binding" }, "method": { - "GET": "", - "POST": "", - "PUT": "", - "DELETE": "", - "PATCH": "" + "GET": "GET", + "POST": "POST", + "PUT": "PUT", + "DELETE": "DELETE", + "PATCH": "PATCH" }, "authType": { - "none": "", - "bearer": "", - "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "none": "None", + "bearer": "Bearer Token", + "basic": "Basic Auth", + "apiKeyHeader": "API Key (Header)", + "apiKeyQuery": "API Key (Query)" }, "displayType": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Single Value", + "keyValue": "Key-Value", + "table": "Table", + "statGrid": "Stat Grid", + "progressBars": "Progress Bars", + "statusIndicator": "Status Indicator", + "countGrid": "Count Grid", + "raw": "Raw JSON", + "actionButton": "Action Button", + "customJsx": "Custom JSX" }, "secret": { - "apiKey": "", - "username": "", - "password": "", - "savedPlaceholder": "" + "apiKey": "API Key / Token", + "username": "Username", + "password": "Password", + "savedPlaceholder": "••••••• (saved, leave empty to keep)" }, "preview": { - "title": "", - "test": "", - "hint": "", - "rawResponse": "" + "title": "Preview", + "test": "Test", + "hint": "Click Test to preview the API response with your current configuration.", + "rawResponse": "Raw JSON response" }, "notification": { - "created": "", - "updated": "", - "deleted": "", - "imported": "", - "aiPromptCopied": "", - "aiPromptDescription": "", - "aiPromptCopy": "", - "aiPromptNoResponse": "", - "aiPromptCopyError": "", - "createError": "", - "updateError": "", - "importError": "", - "exportError": "", - "duplicated": "", - "duplicateError": "", - "toggleError": "", - "deleteError": "", - "previewError": "", - "executed": "", - "executeError": "" + "created": "Widget \"{name}\" created successfully.", + "updated": "Widget \"{name}\" updated successfully.", + "deleted": "Widget \"{name}\" deleted.", + "imported": "Widget imported successfully.", + "aiPromptCopied": "AI prompt copied to clipboard", + "aiPromptDescription": "Copy a pre-built prompt to paste into any AI chatbot (ChatGPT, Claude, Gemini...). It includes the full widget schema and your API response so the AI can generate a ready-to-import JSON config for you.", + "aiPromptCopy": "Copy to clipboard", + "aiPromptNoResponse": "Tip: Run a test first to include your API response in the prompt for better results.", + "aiPromptCopyError": "Failed to copy prompt to clipboard. Your browser may not support this feature.", + "createError": "Failed to create widget. Check your API endpoint is reachable.", + "updateError": "Failed to update widget. Your changes were not saved.", + "importError": "Failed to import widget. Ensure the file is a valid custom widget JSON export.", + "exportError": "Failed to export widget.", + "duplicated": "Widget \"{name}\" duplicated.", + "duplicateError": "Failed to duplicate widget.", + "toggleError": "Failed to toggle widget status.", + "deleteError": "Failed to delete widget.", + "previewError": "Failed to fetch preview. Check the URL and try again.", + "executed": "Action executed successfully.", + "executeError": "Action failed: {error}" }, "table": { - "name": "", - "url": "", - "display": "" + "name": "Name", + "url": "URL", + "display": "Display" }, "widget": { - "disabled": "" + "disabled": "This widget is disabled" } }, "integration": { @@ -987,47 +987,47 @@ "placeholder": "Custom application URL" }, "apiKeySettings": { - "label": "" + "label": "Get API key" } }, "action": { "create": "New integration" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widgets", + "noWidgets": "No widgets", + "detected": "Detected via Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", - "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "dnsHole": "DNS", + "mediaService": "Media", + "calendar": "Calendar", + "mediaSearch": "Search", + "mediaRelease": "Releases", + "mediaRequest": "Requests", + "downloadClient": "Downloads", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Misc", + "smartHomeServer": "Smart Home", + "indexerManager": "Indexer", + "healthMonitoring": "Health", + "search": "Search", + "mediaTranscoding": "Transcoding", + "networkController": "Network", + "releasesProvider": "Releases", + "notifications": "Notifications", + "firewall": "Firewall", + "timetable": "Timetable", + "photoService": "Photos", + "documents": "Documents", + "notes": "Notes", + "mediaMonitoring": "Monitoring", + "speedtest": "Speed Test", + "analytics": "Analytics", + "vpn": "VPN", + "mediaLibrary": "Media Library", + "uptimeMonitoring": "Uptime Monitoring" }, "testConnection": { "action": { @@ -1290,12 +1290,12 @@ "newLabel": "New API Key (Secret)" }, "patchmonApiKey": { - "label": "", - "newLabel": "" + "label": "API Key", + "newLabel": "New API Key" }, "patchmonApiSecret": { - "label": "", - "newLabel": "" + "label": "API Secret", + "newLabel": "New API Secret" }, "githubAppId": { "label": "App Id", @@ -1310,8 +1310,8 @@ "newLabel": "New private key" }, "slug": { - "label": "", - "newLabel": "" + "label": "Status page slug", + "newLabel": "New status page slug" } } }, @@ -1321,40 +1321,40 @@ "full": "Full integration access" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Self-hosted audiobook and podcast server" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Self-hosted music streaming server with Subsonic API compatibility" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Self-hosted uptime monitoring with public status pages", "secret": { "slug": { - "description": "" + "description": "The slug of your public status page. Defaults to \"default\" if not set." }, "apiKey": { - "description": "" + "description": "Optional API key for authenticated /metrics access" } } }, "traefik": { - "name": "", - "description": "" + "name": "Traefik", + "description": "Cloud-native reverse proxy and load balancer" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Document management system for archiving and organizing scanned documents" }, "patchmon": { - "name": "", - "description": "" + "name": "PatchMon", + "description": "Patch management and monitoring for Linux hosts" }, "bazarr": { - "name": "", - "description": "" + "name": "Bazarr", + "description": "Companion application to Sonarr and Radarr that manages and downloads subtitles" } }, "media": { @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "No media uploaded" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Add", "apply": "Apply", "backToOverview": "Back to overview", - "skip": "", + "skip": "Skip", "change": "Change", "create": "Create", "createAnother": "Create and start over", @@ -1431,16 +1431,16 @@ "checkLogs": "Check logs for more information", "tryAgain": "Try again", "loading": "Loading", - "show": "", - "hide": "" + "show": "Show", + "hide": "Hide" }, "here": "here", "iconPicker": { "label": "Icon URL", "header": "Please enter a name or object to filter for the icon. Homarr will search throughout {countIcons} different icons to find the right one.", - "headerLoading": "", - "noResults": "", - "error": "" + "headerLoading": "Type to search icons…", + "noResults": "No icons match \"{search}\".", + "error": "Couldn't load icons." }, "colorScheme": { "options": { @@ -1492,7 +1492,7 @@ "switchToDarkMode": "Switch to dark mode", "switchToLightMode": "Switch to light mode", "management": "Management", - "docker": "", + "docker": "Docker", "preferences": "Your preferences", "logout": "Log-out", "login": "Log-in", @@ -1602,7 +1602,7 @@ "label": { "create": "New category", "changePosition": "Change position", - "settings": "" + "settings": "Settings" } }, "openAllInNewTabs": { @@ -1623,15 +1623,15 @@ "menu": { "label": { "settings": "Settings", - "refresh": "", - "options": "", - "actions": "" + "refresh": "Refresh", + "options": "Options", + "actions": "Actions" }, "status": { - "success": "", - "error": "", - "loading": "", - "idle": "" + "success": "OK", + "error": "Error", + "loading": "Loading", + "idle": "Idle" } }, "create": { @@ -1659,11 +1659,11 @@ "edit": { "title": "Edit item", "tab": { - "widget": "", - "app": "" + "widget": "Edit widget", + "app": "Edit app" }, "app": { - "propagationNotice": "" + "propagationNotice": "Changes to this app will be applied everywhere it is used across all dashboards." }, "advancedOptions": { "label": "Advanced options", @@ -1691,11 +1691,11 @@ }, "widget": { "integrationSelect": { - "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "configureIntegrationFirst": "Connect an integration first", + "loading": "Loading...", + "placeholder": "Select an option", + "noResults": "No results found", + "loadError": "Failed to load options" }, "app": { "name": "App", @@ -1776,7 +1776,7 @@ "label": "Open in new tab" }, "withBorder": { - "label": "" + "label": "Show border" }, "items": { "label": "Bookmarks", @@ -1785,11 +1785,11 @@ } }, "archiveTeamWarrior": { - "name": "", - "description": "", + "name": "ArchiveTeam Warrior", + "description": "Monitor ArchiveTeam Warrior status, projects, and active archival jobs.", "option": { "showBroadcastMessage": { - "label": "" + "label": "Show broadcast messages" } } }, @@ -1907,14 +1907,14 @@ "description": "Use ISO 8601 to format date (this will override other options)" }, "showWeather": { - "label": "", - "description": "" + "label": "Show weather", + "description": "Display a small animated weather icon and temperature in the corner of the card" }, "weatherLocation": { - "label": "" + "label": "Weather location" }, "isWeatherFormatFahrenheit": { - "label": "" + "label": "Use Fahrenheit" } } }, @@ -1944,7 +1944,7 @@ "noStation": "No station selected", "option": { "baseUrl": { - "label": "" + "label": "Search.ch URL" }, "station": { "label": "Station" @@ -1976,8 +1976,8 @@ "clear": "Clear formatting", "heading": "Heading {level}", "align": "Align text: {position}", - "directionLtr": "", - "directionRtl": "", + "directionLtr": "Set text direction left to right", + "directionRtl": "Set text direction right to left", "blockquote": "Blockquote", "horizontalLine": "Horizontal line", "bulletList": "Bullet list", @@ -2268,7 +2268,7 @@ "sunset": "Sunset", "maxWindSpeed": "Max wind speed: {maxWindSpeed} {unit}", "maxWindGusts": "Max wind gusts: {maxWindGusts} {unit}", - "humidity": "" + "humidity": "Humidity: {humidity}%" }, "kind": { "clear": "Clear", @@ -2328,9 +2328,9 @@ "label": "Show Filesystem Info" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "Visible storage volumes", + "description": "Only available when all selected integrations are Synology. Leave empty to show all detected storage volumes.", + "placeholder": "Select storage volumes" }, "defaultTab": { "label": "Default tab" @@ -2412,7 +2412,7 @@ "description": "Stats of your containers (This widget can only be added with administrator privileges)", "option": { "columns": { - "label": "" + "label": "Columns to show" }, "enableRowSorting": { "label": "Enable items sorting" @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Invert sorting" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "Failed to fetch containers stats" + "internalServerError": "Failed to fetch containers stats", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2468,40 +2479,40 @@ } }, "vpn": { - "name": "", - "description": "", - "serviceUnavailable": "", + "name": "VPN", + "description": "Overview of your VPN connections", + "serviceUnavailable": "VPN unavailable", "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Monitor the status of your UPS devices through a NUT server", "option": { "showBattery": { - "label": "" + "label": "Show battery" }, "showLoad": { - "label": "" + "label": "Show load" }, "showVoltage": { - "label": "" + "label": "Show voltage" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Online", + "onBattery": "On battery", + "lowBattery": "Low battery", + "charging": "Charging", + "unknown": "Unknown" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Runtime", + "load": "Load", + "input": "Input", + "output": "Output" }, "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch UPS data" } }, "tracearr": { @@ -2564,97 +2575,97 @@ "description": "Display visitor stats from your Umami analytics instance", "visitors": "visitors", "active": "active", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "pageviews": "pageviews", + "visits": "visits", + "bounceRate": "bounce", + "avgDuration": "avg", "option": { "websiteId": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noWebsites": "", - "configureIntegrationFirst": "" + "label": "Website", + "description": "Select a website tracked by your Umami instance", + "placeholder": "Select a website", + "loading": "Loading websites...", + "noWebsites": "No websites found", + "configureIntegrationFirst": "Connect a Umami integration first" }, "timeFrame": { - "label": "", - "description": "", + "label": "Time frame", + "description": "The time period to display visitor data for", "option": { - "today": "", - "24h": "", - "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "today": "Today", + "24h": "Last 24 hours", + "7d": "Last 7 days", + "30d": "Last 30 days", + "month": "This month", + "lastMonth": "Last month" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Event", + "description": "Show total occurrences of a specific event", + "placeholder": "Select an event", + "loading": "Loading events...", + "noEvents": "No events found", + "none": "No event", + "configureWebsiteFirst": "Select a website first to load events" }, "chartType": { - "label": "", - "description": "", + "label": "Chart type", + "description": "Display style for the chart", "option": { - "bar": "", - "sparkline": "" + "bar": "Bar chart", + "sparkline": "Sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Chart style", + "description": "How to display the event series in the chart", "option": { - "grouped": "", - "overlay": "" + "grouped": "Side by side", + "overlay": "Overlay (subset)" } }, "viewMode": { - "label": "", - "description": "", + "label": "View", + "description": "What to display in the widget body", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Chart", + "events": "Events chart", + "topPages": "Top pages", + "topReferrers": "Top referrers" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Events", + "description": "Select one or more events to chart", + "placeholder": "Select events...", + "loading": "Loading events...", + "noEvents": "No events found", + "configureWebsiteFirst": "Select a website first to load events" }, "topCount": { - "label": "", - "description": "" + "label": "Items to show", + "description": "Number of top items to display (max 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "events", + "label": "events" }, "topPages": { - "direct": "" + "direct": "Direct" }, "topReferrers": { - "direct": "" + "direct": "Direct" }, "events": { - "selectPrompt": "" + "selectPrompt": "Select events to chart" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "No Umami integration configured", + "noWebsite": "No website configured", + "noData": "No data available", + "internalServerError": "Failed to fetch Umami data" } }, "common": { @@ -2725,18 +2736,33 @@ "showOnlyPlaying": { "label": "Show only currently playing", "description": "Disabling this will not work for Plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Currently playing", "user": "User", "name": "Name", "id": "Id", - "status": "", - "directPlay": "", - "transcoding": "", - "paused": "", - "remaining": "", + "status": "Status", + "directPlay": "Direct play", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", + "transcoding": "Transcoding", + "paused": "Paused", + "remaining": "{minutes} min left", "metadata": { "title": "Stats for nerds", "video": { @@ -2758,235 +2784,235 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Overview of your Paperless-ngx document archive", + "documentsTotal": "Total Documents", + "documentsInbox": "Inbox", + "correspondents": "Correspondents", + "tags": "Tags", + "documentTypes": "Document Types", + "inboxRatio": "Inbox Ratio", + "inbox": "inbox", + "total": "total", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Show inbox ratio", + "description": "Display the inbox-to-total document ratio in the hero section" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Show inbox ring", + "description": "Display a progress ring alongside the inbox ratio" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Show total documents", + "description": "Show the total number of documents in your archive" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Show inbox count", + "description": "Show the number of unprocessed documents in the inbox" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Show correspondents", + "description": "Show the total number of correspondents" }, "showTags": { - "label": "", - "description": "" + "label": "Show tags", + "description": "Show the total number of tags" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Show document types", + "description": "Show the total number of document types" } }, "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch Paperless-ngx data" } }, "patchmon": { - "name": "", - "description": "", - "title": "", - "totalHosts": "", - "hostsNeedingUpdates": "", - "securityUpdates": "", - "upToDateHosts": "", - "hostsWithSecurityUpdates": "", - "recentUpdates24h": "", - "totalOutdatedPackages": "", - "totalRepos": "", - "osDistribution": "", - "compliance": "", - "complianceRatio": "", - "lastUpdated": "", + "name": "PatchMon", + "description": "Overview of host patch status from PatchMon", + "title": "PatchMon Statistics", + "totalHosts": "Total Hosts", + "hostsNeedingUpdates": "Needs Updates", + "securityUpdates": "Security Updates", + "upToDateHosts": "Up-to-Date Hosts", + "hostsWithSecurityUpdates": "Hosts with Security Updates", + "recentUpdates24h": "Updates (24h)", + "totalOutdatedPackages": "Outdated Packages", + "totalRepos": "Repositories", + "osDistribution": "OS Distribution", + "compliance": "Patch Compliance", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Updated {time}", "option": { "showTotalHosts": { - "label": "", - "description": "" + "label": "Show total hosts", + "description": "Display the total number of monitored hosts" }, "showHostsNeedingUpdates": { - "label": "", - "description": "" + "label": "Show hosts needing updates", + "description": "Display hosts with at least one outdated package" }, "showSecurityUpdates": { - "label": "", - "description": "" + "label": "Show security updates", + "description": "Display the total number of security updates available" }, "showUpToDateHosts": { - "label": "", - "description": "" + "label": "Show up-to-date hosts", + "description": "Display hosts with zero outdated packages" }, "showHostsWithSecurityUpdates": { - "label": "", - "description": "" + "label": "Show hosts with security updates", + "description": "Display hosts requiring security patches" }, "showRecentUpdates24h": { - "label": "", - "description": "" + "label": "Show recent updates (24h)", + "description": "Display the number of updates applied in the last 24 hours" }, "showTotalOutdatedPackages": { - "label": "", - "description": "" + "label": "Show outdated packages", + "description": "Display the total number of outdated packages across all hosts" }, "showTotalRepos": { - "label": "", - "description": "" + "label": "Show repositories", + "description": "Display the number of active repositories being monitored" }, "enableThresholdColors": { - "label": "", - "description": "" + "label": "Enable threshold colours", + "description": "Colour stat values green, yellow, or red based on severity presets" }, "useCustomThresholds": { - "label": "", - "description": "" + "label": "Advanced thresholds", + "description": "Customise warning and critical thresholds per stat using absolute counts or percentages of total hosts" }, "thresholdMode": { "option": { - "absolute": "", - "percent": "" + "absolute": "Absolute count", + "percent": "Percent of total hosts" } }, "hostsNeedingUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Needs updates threshold mode", + "description": "Compare the needs-updates count as an absolute value or percentage of total hosts" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Needs updates warning threshold", + "description": "Enter yellow when the value reaches this threshold" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Needs updates critical threshold", + "description": "Enter red when the value reaches this threshold" }, "securityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Security updates threshold mode", + "description": "Compare the security-updates count as an absolute value or percentage of total hosts" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Security updates warning threshold", + "description": "Enter yellow when the value reaches this threshold" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Security updates critical threshold", + "description": "Enter red when the value reaches this threshold" }, "hostsWithSecurityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Hosts with security updates threshold mode", + "description": "Compare the host count as an absolute value or percentage of total hosts" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Hosts with security updates warning threshold", + "description": "Enter yellow when the value reaches this threshold" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Hosts with security updates critical threshold", + "description": "Enter red when the value reaches this threshold" }, "upToDateHostsThresholdMode": { - "label": "", - "description": "" + "label": "Up-to-date hosts threshold mode", + "description": "Compare the up-to-date host count as an absolute value or percentage of total hosts" }, "upToDateHostsWarningAt": { - "label": "", - "description": "" + "label": "Up-to-date hosts warning threshold", + "description": "Enter yellow when the value is at or above this threshold but below full coverage" }, "upToDateHostsCriticalAt": { - "label": "", - "description": "" + "label": "Up-to-date hosts critical threshold", + "description": "Enter red when the value falls below this threshold" }, "totalOutdatedPackagesThresholdMode": { - "label": "", - "description": "" + "label": "Outdated packages threshold mode", + "description": "Compare the outdated-packages count as an absolute value or percentage of total hosts" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "Outdated packages warning threshold", + "description": "Enter yellow when the value reaches this threshold" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "Outdated packages critical threshold", + "description": "Enter red when the value reaches this threshold" }, "showOsDistribution": { - "label": "", - "description": "" + "label": "Show OS distribution", + "description": "Display a breakdown of monitored hosts by operating system" }, "osDistributionLimit": { - "label": "", - "description": "", + "label": "OS distribution limit", + "description": "Maximum number of operating systems to display", "option": { - "3": "", - "5": "", - "10": "", - "all": "" + "3": "Top 3", + "5": "Top 5", + "10": "Top 10", + "all": "All" } }, "showOsVersion": { - "label": "", - "description": "" + "label": "Show OS version", + "description": "Append the OS version to each distribution label when available" }, "showComplianceHero": { - "label": "", - "description": "" + "label": "Show compliance hero", + "description": "Display a compliance ring showing the percentage of up-to-date hosts" }, "osDisplayMode": { - "label": "", - "description": "", + "label": "OS display mode", + "description": "Choose how to display the operating system distribution", "option": { - "bars": "", - "donut": "" + "bars": "Horizontal bars", + "donut": "Doughnut chart" } } }, "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch PatchMon data" } }, "bazarr": { - "name": "", - "description": "", - "episodes": "", - "movies": "", - "providers": "", - "status": "", + "name": "Bazarr", + "description": "Overview of missing subtitles and health status from your Bazarr instance", + "episodes": "Missing Episodes", + "movies": "Missing Movies", + "providers": "Provider Issues", + "status": "Health Issues", "option": { "showMissingEpisodes": { - "label": "", - "description": "" + "label": "Show missing episodes", + "description": "Display the number of episodes with missing subtitles" }, "showMissingMovies": { - "label": "", - "description": "" + "label": "Show missing movies", + "description": "Display the number of movies with missing subtitles" }, "showProviderIssues": { - "label": "", - "description": "" + "label": "Show provider issues", + "description": "Display the number of subtitle providers with issues" }, "showHealthIssues": { - "label": "", - "description": "" + "label": "Show health issues", + "description": "Display the number of Bazarr health issues" } }, "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch Bazarr data" } }, "immich-serverStats": { @@ -3017,7 +3043,7 @@ }, "immich-albumCarousel": { "name": "Immich Album", - "allPhotos": "", + "allPhotos": "All photos", "option": { "albumId": { "label": "Album ID", @@ -3032,12 +3058,12 @@ "description": "" }, "randomizePhotos": { - "label": "", - "description": "" + "label": "Randomise photos", + "description": "Show photos in a random order instead of always starting with the same album order." } }, - "description": "", - "noPhotos": "" + "description": "Slideshow of pictures from an Immich album or your full library", + "noPhotos": "No photos found" }, "downloads": { "name": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "", - "noCommunications": "" + "noCommunications": "", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "" }, "id": { - "columnTitle": "" + "columnTitle": "", + "detailsTitle": "" }, "integration": { "columnTitle": "" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "", + "eta": "" }, "type": { "columnTitle": "", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "" + "globalRatio": "", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3223,10 +3276,10 @@ "label": "" }, "statusFilter": { - "label": "" + "label": "Statuses to show" }, "recentDays": { - "label": "" + "label": "Show only recent requests" } }, "pending": { @@ -3335,33 +3388,33 @@ } }, "mediaMissing": { - "name": "", - "description": "", + "name": "Missing & Queued Media", + "description": "Shows missing and queued movies and episodes from Radarr and Sonarr", "option": { "showMissing": { - "label": "" + "label": "Show missing items" }, "showQueued": { - "label": "" + "label": "Show queued items" }, "pageSize": { - "label": "" + "label": "Items per page" } }, "tab": { - "missing": "", - "queued": "" + "missing": "Missing", + "queued": "Queued" }, "type": { - "movie": "", - "episode": "" + "movie": "Movie", + "episode": "Episode" }, "empty": { - "missing": "", - "queued": "", - "noTabsEnabled": "" + "missing": "No missing items", + "queued": "No queued items", + "noTabsEnabled": "Enable at least one tab in the widget settings" }, - "timeLeft": "" + "timeLeft": "Time left" }, "rssFeed": { "name": "", @@ -3433,7 +3486,7 @@ "label": "" }, "providerUrl": { - "label": "" + "label": "Provider URL" }, "identifier": { "label": "", @@ -3484,11 +3537,11 @@ "tooltip": "" }, "tokens": { - "label": "", - "token": "", - "configured": "", - "notConfigured": "", - "save": "" + "label": "Provider Tokens", + "token": "Token", + "configured": "Token configured", + "notConfigured": "No token set", + "save": "Save" } } }, @@ -3511,9 +3564,9 @@ "invalidIdentifier": "", "noMatchingVersion": "", "noReleasesFound": "", - "noProviderSelected": "", + "noProviderSelected": "No provider selected", "noProviderResponse": "", - "unexpected": "" + "unexpected": "Unexpected provider error" } } }, @@ -3608,7 +3661,7 @@ "noItems": "", "option": { "hideLogos": { - "label": "" + "label": "Hide logos" } } }, @@ -3652,144 +3705,130 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Monitor uptime statistics from your Uptime Kuma status page", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Show average uptime", + "description": "Display the combined 24-hour average uptime percentage" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Show uptime ring", + "description": "Display a progress ring alongside the average uptime value" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Show total monitors", + "description": "Display the total number of configured monitors" }, "showUpCount": { - "label": "", - "description": "" + "label": "Show up count", + "description": "Display how many monitors are currently up" }, "showDownCount": { - "label": "", - "description": "" + "label": "Show down count", + "description": "Display how many monitors are currently down" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Show paused count", + "description": "Display how many monitors are currently paused" } }, - "averageUptime": "", + "averageUptime": "Average uptime (24h)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Total monitors", + "upCount": "Up", + "downCount": "Down", + "pausedCount": "Paused" }, "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch uptime data" } }, "traefik": { - "name": "", - "description": "", + "name": "Traefik", + "description": "Overview of Traefik routers, services, middlewares, and entry points", "option": { "showTcp": { - "label": "" + "label": "Show TCP" }, "showUdp": { - "label": "" + "label": "Show UDP" }, "showEntryPoints": { - "label": "" + "label": "Show entry points" } }, - "instances": "", - "versionUnknown": "", + "instances": "Traefik instances", + "versionUnknown": "Version unknown", "summary": { - "routers": "", - "entryPoints": "" + "routers": "Routers", + "entryPoints": "Entry points" }, "resource": { - "routers": "", - "services": "", - "middlewares": "" + "routers": "Routers", + "services": "Services", + "middlewares": "Middlewares" }, "status": { - "healthy": "", - "errors": "", - "warnings": "" + "healthy": "Healthy", + "errors": "{count} errors", + "warnings": "{count} warnings" }, "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch Traefik data" } }, "audioStats": { - "name": "", - "description": "", + "name": "Audio stats", + "description": "Library and playback statistics from Navidrome or Audiobookshelf", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Show artists", + "description": "Show the total number of artists in your music library (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Show albums", + "description": "Show the total number of albums in your music library (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "Show songs", + "description": "Show the total number of songs in your music library (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Show library count", + "description": "Show the number of libraries on your instance (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Show audiobooks", + "description": "Show the total number of audiobooks across all libraries (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Show podcasts", + "description": "Show the total number of podcasts across all libraries (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "Show listening time", + "description": "Show your total listening time (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "Show active sessions", + "description": "Show the number of currently active playback sessions (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "Compact mode", + "description": "Use a denser layout with smaller tiles, ideal for small widget sizes" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "Artists", + "albums": "Albums", + "songs": "Songs", + "libraryCount": "Libraries", + "audiobooks": "Audiobooks", + "podcasts": "Podcasts", + "listeningTime": "Listening Time", + "activeSessions": "Active Sessions", "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch audio stats data" } }, "systemResources": { @@ -3853,9 +3892,9 @@ "label": "" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "Visible storage volumes", + "description": "Only available when all selected integrations are Synology. Leave empty to show all detected storage volumes.", + "placeholder": "Select storage volumes" } }, "status": { @@ -3863,265 +3902,273 @@ } }, "customApi": { - "name": "", - "description": "", + "name": "Custom API", + "description": "Display data from any external API with custom configuration.", "option": { "definitionId": { - "label": "" + "label": "Definition ID" }, "refreshInterval": { - "label": "", - "description": "" + "label": "Refresh interval", + "description": "How often to refetch data from the API (in seconds)" } }, - "noDefinition": "", - "definitionNotFound": "", - "noDisplayOutput": "", - "executeConfirm": "", - "executing": "", - "executeSuccess": "", - "executeFailed": "" + "noDefinition": "No definition selected", + "definitionNotFound": "Widget definition not found. It may have been deleted.", + "noDisplayOutput": "No display output", + "executeConfirm": "Are you sure you want to execute this action?", + "executing": "Executing...", + "executeSuccess": "Action executed successfully", + "executeFailed": "Action failed. Check the widget configuration." }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel Systems (Table)", + "description": "Table view of all Beszel-monitored systems with sortable columns and status indicators", "option": { "statusFilter": { - "label": "" + "label": "Status filter" }, "sortBy": { - "label": "" + "label": "Sort by" }, "sortDirection": { - "label": "" + "label": "Sort direction" }, "showCpu": { - "label": "" + "label": "Show CPU" }, "showMemory": { - "label": "" + "label": "Show memory" }, "showDisk": { - "label": "" + "label": "Show disk" }, "showGpu": { - "label": "" + "label": "Show GPU" }, "showLoadAvg": { - "label": "" + "label": "Show load average" }, "showNet": { - "label": "" + "label": "Show network" }, "showTemp": { - "label": "" + "label": "Show temperature" }, "showBattery": { - "label": "" + "label": "Show battery" }, "showServices": { - "label": "" + "label": "Show services" }, "showUptime": { - "label": "" + "label": "Show uptime" }, "showAgent": { + "label": "Show agent version" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "No systems found", "error": { - "internalServerError": "" + "internalServerError": "Unable to connect to Beszel. Check your integration settings.", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "System", + "cpu": "CPU", + "memory": "Memory", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Load Avg", + "net": "Net", + "temp": "Temp", + "battery": "Bat", + "services": "Services", + "uptime": "Uptime", + "agent": "Agent" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel Systems (Grid)", + "description": "Card grid view of all Beszel-monitored systems with real-time metrics", "option": { "statusFilter": { - "label": "" + "label": "Status filter" }, "showCpu": { - "label": "" + "label": "Show CPU" }, "showMemory": { - "label": "" + "label": "Show memory" }, "showDisk": { - "label": "" + "label": "Show disk" }, "showGpu": { - "label": "" + "label": "Show GPU" }, "showLoadAvg": { - "label": "" + "label": "Show load average" }, "showNet": { - "label": "" + "label": "Show network" }, "showTemp": { - "label": "" + "label": "Show temperature" }, "showBattery": { - "label": "" + "label": "Show battery" }, "showServices": { - "label": "" + "label": "Show services" }, "showUptime": { - "label": "" + "label": "Show uptime" }, "showAgent": { - "label": "" + "label": "Show agent version" } }, "error": { - "internalServerError": "" + "internalServerError": "Unable to connect to Beszel. Check your integration settings." }, "empty": { - "noSystems": "" + "noSystems": "No systems found" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Memory", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Load Avg", + "net": "Net", + "temp": "Temp", + "battery": "Bat", + "services": "Services", + "uptime": "Uptime", + "agent": "Agent" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel Alerts", + "description": "View Beszel alert configurations and history", "option": { "showHistory": { - "label": "" + "label": "Show alert history" }, "maxHistoryItems": { - "label": "" + "label": "Max history items" } }, - "empty": "", + "empty": "No alerts configured", "error": { - "internalServerError": "" + "internalServerError": "Unable to connect to Beszel. Check your integration settings." }, - "history": "", - "resolved": "", + "history": "History", + "resolved": "Resolved", "status": { - "triggered": "", - "ok": "" + "triggered": "Triggered", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel System Stats", + "description": "Time-series charts for CPU, memory, disk, network, and Docker container metrics", "option": { "systemId": { - "label": "", - "description": "" + "label": "System", + "description": "Select a Beszel system to display stats for" }, "timePeriod": { - "label": "" + "label": "Time period" }, "showCpu": { - "label": "" + "label": "Show CPU chart" }, "showMemory": { - "label": "" + "label": "Show memory chart" }, "showDisk": { - "label": "" + "label": "Show disk chart" }, "showDiskIO": { - "label": "" + "label": "Show disk I/O chart" }, "showNetwork": { - "label": "" + "label": "Show network chart" }, "showDockerCpu": { - "label": "" + "label": "Show Docker CPU chart" }, "showDockerMemory": { - "label": "" + "label": "Show Docker memory chart" }, "showDockerNetwork": { - "label": "" + "label": "Show Docker network chart" } }, - "selectSystem": "", + "selectSystem": "Select system", "empty": { - "noSystems": "" + "noSystems": "No systems found" }, "error": { - "internalServerError": "", - "liveConnectionFailed": "", - "switchToHistorical": "", - "systemNotFound": "" + "internalServerError": "Unable to connect to Beszel. Check your integration settings.", + "liveConnectionFailed": "Live connection failed. Your Beszel instance may not support real-time streaming.", + "switchToHistorical": "Switch to historical view", + "systemNotFound": "Selected system was not found. Choose a different system." }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU Usage", + "subtitle": "Average system-wide CPU utilization", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Memory Usage", + "subtitle": "Precise utilization at the recorded time", + "series": "Used", + "cache": "Cache/Buffers" }, "disk": { - "title": "", - "subtitle": "", - "series": "" + "title": "Disk Usage", + "subtitle": "Usage by filesystem", + "series": "Root" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Disk I/O", + "subtitle": "Throughput of root filesystem", + "read": "Read", + "write": "Write" }, "storage": { - "title": "", - "subtitle": "", - "series": "" + "title": "Storage", + "subtitle": "Per-filesystem disk usage", + "series": "Used" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Bandwidth", + "subtitle": "Network traffic of public interfaces", + "sent": "Sent", + "recv": "Received" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU Usage", + "subtitle": "Average CPU utilization of containers" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker Memory Usage", + "subtitle": "Memory usage of docker containers" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker Network I/O", + "subtitle": "Network traffic of docker containers" } } } @@ -4498,9 +4545,9 @@ "text": "" }, "error": { - "title": "", - "text": "", - "digest": "" + "title": "This page couldn't load", + "text": "An unexpected error occurred while loading this page. Your navigation is still available — try reloading, or use another section from the sidebar.", + "digest": "Error reference: {digest}" }, "navbar": { "items": { @@ -4508,7 +4555,7 @@ "boards": "", "apps": "", "integrations": "", - "customWidgets": "", + "customWidgets": "Custom Widgets", "searchEngies": "", "medias": "", "users": { @@ -4525,10 +4572,10 @@ "docker": "", "kubernetes": "", "logs": "", - "api": "", + "api": "API & MCP", "certificates": "", "tasks": "", - "backup": "" + "backup": "Backup" } }, "settings": "", @@ -4609,7 +4656,7 @@ "private": "" }, "noResults": { - "title": "" + "title": "No boards yet" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "", "accessibility": "", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Onboarding Tours", + "description": "Reset the onboarding tours to see them again on your next visit to the management area or dashboard.", + "reset": "Reset onboarding tours", "resetSuccess": { - "title": "", - "message": "" + "title": "Tours reset", + "message": "Onboarding tours will show again on your next visit" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Completed", + "notStarted": "Not started" }, "name": { - "management": "", - "dashboard": "" + "management": "Management", + "dashboard": "Dashboard" } } } @@ -4782,8 +4829,8 @@ "analytics": { "title": "", "general": { - "title": "", - "text": "" + "title": "Help us improve Homarr", + "text": "This helps us figure out what people actually use so we know where to spend our time. We see stuff like how many widgets or integrations you have, your Homarr version, and what database you're on. That's it — no personal info, no URLs, no names, nothing that could identify you or your setup." } }, "crawlingAndIndexing": { @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "Default colour scheme", "options": { - "auto": "", + "auto": "Auto", "light": "", "dark": "" } @@ -4984,213 +5031,213 @@ } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "AI / MCP", + "title": "AI Integration", + "subtitle": "Model Context Protocol (MCP) Server", + "description": "Connect AI assistants to your Homarr instance and control your entire homelab through natural language. Search and request media on Overseerr, manage Docker containers, toggle Pi-hole, check server health, control Home Assistant devices, and more — all from your AI assistant.", + "noApiKey": "You need an API key to authenticate with the MCP server.", + "createApiKeyButton": "Create API Key", "endpoint": { - "title": "" + "title": "MCP Endpoint" }, "authentication": { - "title": "", - "intro": "", + "title": "Authentication", + "intro": "You can authenticate with your MCP server using either an API key or OAuth. Both methods grant the same level of access.", "apiKey": { - "title": "", - "description": "" + "title": "API Key (manual)", + "description": "Pass the ApiKey header with your full API key in the MCP client configuration." }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (browser login)", + "description": "Clients that support OAuth (such as Claude Code, opencode, or Cursor) can authenticate by opening a browser window. Run the auth command in your client, log in to Homarr in the browser, and you're connected — an API key is created automatically.", + "hint": "OAuth tokens appear as regular API keys in the Authentication tab. You can revoke them at any time." }, - "permissions": "" + "permissions": "The API key determines the permissions available to the AI — it operates with the same access level as the key owner." }, "clientConfig": { - "title": "", + "title": "Client Configuration", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "Recommended", + "title": "Streamable HTTP", + "worksWith": "Works with: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", + "addToConfig": "Add to your MCP client configuration file:", + "cursor": "{name}: {file} in your project or global settings", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} or use {command}", + "vsCodeCopilot": "{name}: {file} in workspace settings", + "replaceHint": "Replace the placeholder with the API key you received when creating it." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (legacy clients via mcp-remote bridge)", + "description": "For clients that only support stdio transport. Requires {dependency} (Node.js) installed locally:" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "Test Your Connection", + "description": "Run this in your terminal to verify the endpoint is reachable and your API key works:", + "hint": "A successful response returns the MCP server capabilities. If you see an error, check the JSON response for hints." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "Available Tools", + "description": "{count} tools available. Expand a category to see individual tools and their descriptions.", + "columnType": "Type", + "columnName": "Tool", + "columnDescription": "Description" }, "troubleshooting": { - "title": "", + "title": "Troubleshooting", "missingHeader": { - "title": "", - "description": "" + "title": "\"Missing ApiKey header\"", + "description": "Your client is not sending the {header} header. Verify the {section} section in your MCP config is correct. Some clients require restarting after config changes." }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"Invalid ApiKey format\"", + "description": "Make sure you copied the full API key, not just part of it." }, "invalidKey": { - "title": "", - "description": "" + "title": "\"Invalid API key\"", + "description": "The key ID was not found or the token is wrong. API keys can only be viewed once when created. If you lost it, delete the old key and create a new one." }, "connectionRefused": { - "title": "", - "description": "" + "title": "Connection refused / timeout", + "description": "Make sure the URL is reachable from your AI client. If Homarr runs behind a reverse proxy or in Docker, use the external URL (not {localhost}). Verify the port is correct (default: 7575 for Docker)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "Tools not appearing", + "description": "Some tools require specific integrations to be configured (e.g. Docker, Overseerr). The tool list depends on what's available in your Homarr instance." } }, - "copy": "", + "copy": "Copy", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "Install in One Click", + "subtitle": "Uses OAuth — authenticate in your browser on first use", + "vsCode": "Install in VS Code", + "cursor": "Install in Cursor", + "copyUrl": "Copy MCP URL", + "copied": "Copied!", + "copyHint": "For ChatGPT, Claude Code, or any MCP client", + "manualConfig": "Manual Configuration" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Full Database Backup", + "metaTitle": "Backup & Restore", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Export Database", + "description": "Download a full backup of your SQLite database including all settings, users, boards, and encrypted integration secrets. The backup is bundled as a ZIP file with the encryption key and metadata.", + "button": "Download Backup", + "error": "Export failed", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Sensitive data export", + "warningTitle": "This export contains your entire database.", + "warningBody": "The backup includes all users, integration secrets (encrypted), API keys, board configurations, and app data. Store the exported file securely and do not share it.", + "typePrompt": "Type \"{phrase}\" to continue", + "submit": "Export Database", + "cancel": "Cancel" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Restore Database", + "description": "Upload a previously exported backup ZIP to restore your database. This will replace your entire database. If the backup was created with a different encryption key, secrets will be automatically re-encrypted.", + "warning": "Restoring a backup will completely replace your current database and restart the application. This action cannot be undone.", "dropzone": { - "title": "", - "description": "" + "title": "Drop your backup ZIP here or click to browse", + "description": "Only .zip files from a Homarr SQLite backup are accepted" }, - "changeFile": "", - "button": "", + "changeFile": "Change file", + "button": "Restore Database", "success": { - "title": "", - "message": "" + "title": "Restore Complete", + "message": "Database has been restored successfully. The application is restarting..." }, - "error": "" + "error": "Import failed" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Backup Contents", + "exported": "Exported {date}", + "loading": "Analyzing backup file...", + "errorTitle": "Preview Error", + "entity": "Entity", + "count": "Count", + "boards": "Boards", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Boards", + "user": "Users", + "app": "Apps", + "integration": "Integrations", + "item": "Widgets", + "media": "Media", + "search_engine": "Search Engines" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Failed to analyze backup file", + "invalidMissingMetadata": "Invalid backup: missing metadata.json", + "invalidMissingDb": "Invalid backup: missing db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Drop your backup ZIP here", + "description": "Accepts .zip files from a Homarr SQLite backup (max 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analyzing backup...", + "changeFile": "Change file", + "continueToRestore": "Continue to restore", + "tryAgain": "Try again", + "analysisError": "Analysis Error", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Backup Contents", + "exported": "Exported {date}", + "entity": "Entity", + "count": "Count", + "boards": "Boards", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Boards", + "user": "Users", + "app": "Apps", + "integration": "Integrations", + "item": "Widgets", + "media": "Media", + "search_engine": "Search Engines" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migration applied", + "migrationsAppliedPlural": "{count} migrations applied", + "migrationsOlderVersion": "This backup was from an older Homarr version. {count} schema migration was applied to bring it up to date.", + "migrationsOlderVersionPlural": "This backup was from an older Homarr version. {count} schema migrations were applied to bring it up to date.", + "migrationsUpToDate": "Database schema is up to date ({count} migrations applied)", + "upToDate": "Up to date", + "migrationsPending": "{count} pending" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Applying migrations ({current}/{total})", + "migrationLabel": "Migration {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Destructive action", + "warningTitle": "This will permanently replace your entire database.", + "warningBody": "All current boards, users, apps, integrations, settings, and sessions will be lost. This action cannot be undone. The application will restart after the restore.", + "typePrompt": "Type \"{phrase}\" to continue", + "cancel": "Cancel", + "submit": "Restore Database" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Restoring database...", + "extracting": "Extracting backup archive", + "migrating": "Applying database migrations", + "encrypting": "Re-encrypting integration secrets", + "swapping": "Replacing database file", + "restarting": "Restarting server" }, "complete": { - "title": "", - "message": "" + "title": "Restore Complete", + "message": "Database has been restored successfully. The server is restarting — please refresh the page in a few seconds." }, "failed": { - "title": "" + "title": "Restore Failed" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Invalid backup: missing metadata.json", + "invalidMissingDb": "Invalid backup: missing db.sqlite", + "analyzeError": "Failed to analyze backup" } } }, @@ -5238,13 +5285,13 @@ "table": { "updated": "", "refresh": { - "lastUpdated": "" + "lastUpdated": "Last refresh {when}" }, "search": "", "selected": "", "footer": "", - "totalCpu": "", - "totalMemory": "" + "totalCpu": "Total CPU: {cpu}%", + "totalMemory": "Total Mem: {memory}" }, "field": { "name": { @@ -5277,15 +5324,15 @@ "label": "" }, "host": { - "label": "" + "label": "Host" } }, "action": { "title": "", "logs": { - "label": "", + "label": "View logs", "page": { - "title": "" + "title": "{name} logs" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "", + "confirm": "", "notification": { "success": { "title": "", @@ -5372,7 +5420,7 @@ }, "error": { "internalServerError": "", - "noColumns": "" + "noColumns": "Select at least one column in the widget settings" } }, "kubernetes": { @@ -5681,14 +5729,14 @@ } }, "custom-widgets": { - "label": "", + "label": "Custom widgets", "new": { - "label": "" + "label": "New" }, "edit": { - "label": "", + "label": "Edit", "flow": { - "label": "" + "label": "Flow" } } }, @@ -5715,7 +5763,7 @@ "docker": { "label": "", "logs": { - "label": "" + "label": "Logs" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Toggle appearance mode", "light": "", "dark": "" }, @@ -5867,33 +5915,33 @@ } }, "preferences": { - "title": "", + "title": "Preferences", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Select a preference to change", + "backHint": "Press Backspace or use the back button to go back", + "backAction": "Go back" } }, "notification": { "error": { - "message": "" + "message": "Unable to update preference" } }, "option": { "preferences": { - "label": "" + "label": "Open preferences" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Enabled", + "disabled": "Disabled" }, "board": { - "none": "", - "unavailable": "" + "none": "None", + "unavailable": "Currently selected (unavailable)" }, "searchEngine": { - "none": "", + "none": "None", "unavailable": "Currently selected (unavailable)" }, "colorScheme": { @@ -5984,29 +6032,29 @@ } }, "media": { - "help": "", + "help": "Search for movies or shows to request", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Movies and shows" }, "action": { "search": { - "label": "", - "description": "", + "label": "Search for movies or shows", + "description": "Start typing to search your media request integrations", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Add an Overseerr, Jellyseerr, or Seerr integration to enable media search.", + "scoped": "This widget does not have an accessible media request integration." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Available", + "partiallyAvailable": "Partial", + "processing": "Processing", + "requested": "Requested", + "pending": "Requested" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Tip: You can use any DuckDuckGo bangs here as well, e.g. !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Search \"{query}\" with {label}", + "pressEnterToOpen": "Press Enter to open", + "engineSelected": "{label} selected (!{bang})", + "typeQueryToContinue": "Type your search query to continue", + "emptyBangHint": "Type a bang, e.g. !yt, then press Space to select" }, "children": { "action": { diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index de211bf66..0c7b91dd9 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Invert sorting" + }, + "columnOrder": { + "label": "Column order" + }, + "columnWidths": { + "label": "Column widths" } }, "error": { - "internalServerError": "Failed to fetch containers stats" + "internalServerError": "Failed to fetch containers stats", + "layoutSaveTitle": "Table layout not saved", + "layoutSaveMessage": "The Docker table layout could not be saved. Try moving or resizing the column again." + }, + "empty": { + "noContainers": "No containers found" } }, "coolify": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Show only currently playing", "description": "Disabling this will not work for plex" + }, + "showBitrate": { + "label": "Show bitrate", + "description": "Show the current playback bitrate next to the location" + }, + "showLocation": { + "label": "Show location", + "description": "Show whether the stream is on your LAN or WAN" } }, + "footer": { + "streams": "{count, plural, one {# active stream} other {# active streams}}", + "totalBitrate": "Total: {bitrate}" + }, "items": { "currentlyPlaying": "Currently playing", "user": "User", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "Status", "directPlay": "Direct play", + "directStream": "Direct stream", + "transcodeVideo": "Transcoding video", + "transcodeAudio": "Transcoding audio", "transcoding": "Transcoding", "paused": "Paused", "remaining": "{minutes} min left", @@ -3940,11 +3966,19 @@ }, "showAgent": { "label": "Show agent version" + }, + "columnOrder": { + "label": "Column order" + }, + "columnWidths": { + "label": "Column widths" } }, "noRecords": "No systems found", "error": { - "internalServerError": "Unable to connect to Beszel. Check your integration settings." + "internalServerError": "Unable to connect to Beszel. Check your integration settings.", + "layoutSaveTitle": "Unable to save table layout", + "layoutSaveMessage": "Your column order or widths could not be saved. Please try again." }, "column": { "system": "System", @@ -5342,6 +5376,7 @@ }, "remove": { "label": "Remove", + "confirm": "Click again to remove permanently", "notification": { "success": { "title": "Containers removed", diff --git a/packages/translation/src/lang/es.json b/packages/translation/src/lang/es.json index 6745b6398..15a5b1e8d 100644 --- a/packages/translation/src/lang/es.json +++ b/packages/translation/src/lang/es.json @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Invertir orden" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "No se pudo obtener las estadísticas de los contenedores" + "internalServerError": "No se pudo obtener las estadísticas de los contenedores", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2560,30 +2571,30 @@ } }, "umami": { - "name": "", - "description": "", - "visitors": "", - "active": "", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "name": "Estadísticas Umami", + "description": "Mostrar estadísticas de visitantes de su instancia de Umami Analytics", + "visitors": "visitantes", + "active": "activo", + "pageviews": "vistas de página", + "visits": "visitas", + "bounceRate": "rebote", + "avgDuration": "promedio", "option": { "websiteId": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noWebsites": "", - "configureIntegrationFirst": "" + "label": "Sitio web", + "description": "Seleccione un sitio web rastreado por su instancia de Umami", + "placeholder": "Seleccione un sitio web", + "loading": "Cargando sitios web...", + "noWebsites": "No se encontraron sitios web", + "configureIntegrationFirst": "Conecte primero una integración de Umami" }, "timeFrame": { - "label": "", - "description": "", + "label": "Período de tiempo", + "description": "El período de tiempo para mostrar los datos de los visitantes", "option": { - "today": "", - "24h": "", - "7d": "", + "today": "Hoy", + "24h": "Últimas 24 horas", + "7d": "Últimos 7 días", "30d": "", "month": "", "lastMonth": "" @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Mostrar sólo reproducción actual", "description": "Desactivar esta opción no funcionará para plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Reproducción en curso", "user": "Usuario", @@ -2734,6 +2757,9 @@ "id": "ID", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Limitar elementos por integración", "description": "Esto limitará el número de elementos mostrados por integración, no globalmente" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Seleccionar Columnas en Artículos", - "noCommunications": "No se pueden cargar los datos desde la integración" + "noCommunications": "No se pueden cargar los datos desde la integración", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Índice actual dentro del cliente" }, "id": { - "columnTitle": "ID" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "Integración" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Hora de finalización", - "detailsTitle": "Tiempo desde/hasta la finalización" + "detailsTitle": "Tiempo desde/hasta la finalización", + "eta": "" }, "type": { "columnTitle": "Tipo", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Relación global" + "globalRatio": "Relación global", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Lanzamientos de medios", @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "", @@ -5207,8 +5254,8 @@ "subtitle": "{count} contribuyendo con las traducciones en muchos idiomas" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "Patrocinadores", + "subtitle": "{count} apoyando económicamente el proyecto" }, "libraries": { "title": "Librerías", @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Eliminar", + "confirm": "", "notification": { "success": { "title": "Contenedores eliminados", diff --git a/packages/translation/src/lang/et.json b/packages/translation/src/lang/et.json index a1ffabe84..b490502e0 100644 --- a/packages/translation/src/lang/et.json +++ b/packages/translation/src/lang/et.json @@ -150,33 +150,33 @@ "backToStart": "" }, "user": { - "title": "", - "name": "", + "title": "Kasutajad", + "name": "Kasutaja", "page": { "login": { - "title": "", - "subtitle": "" + "title": "Logi sisse oma kontole", + "subtitle": "Tere tulemast tagasi! Palun sisesta oma sisselogimisandmed" }, "invite": { - "title": "", - "subtitle": "", - "description": "" + "title": "Liitu Homarriga", + "subtitle": "Tere tulemast Homarrisse! Palun loo oma konto", + "description": "Sind kutsus {username}" }, "init": { - "title": "", - "subtitle": "" + "title": "Uus Homarri paigaldus", + "subtitle": "Palun loo esmane administraatori kasutaja" } }, "field": { "email": { - "label": "", - "verified": "" + "label": "E-post", + "verified": "Kinnitatud" }, "username": { - "label": "" + "label": "Kasutajanimi" }, "password": { - "label": "", + "label": "Parool", "suggestionsTitle": "", "suggestion": { "length": "", @@ -187,16 +187,16 @@ } }, "passwordConfirm": { - "label": "" + "label": "Kinnita parool" }, "previousPassword": { - "label": "" + "label": "Eelmine parool" }, "homeBoard": { - "label": "" + "label": "Kodujuhtpaneel" }, "pingIconsEnabled": { - "label": "" + "label": "Kasuta pingide jaoks ikoone" }, "enableRightClickOnWidgets": { "label": "", @@ -213,59 +213,59 @@ } }, "error": { - "usernameTaken": "" + "usernameTaken": "Kasutajanimi on juba võetud" }, "action": { "login": { - "label": "", - "labelWith": "", + "label": "Logi sisse", + "labelWith": "Logi sisse kontoga {provider}", "notification": { "success": { - "title": "", - "message": "" + "title": "Sisselogimine õnnestus", + "message": "Oled nüüd sisse logitud" }, "error": { - "title": "", - "message": "" + "title": "Sisselogimine ebaõnnestus", + "message": "Sisselogimine ebaõnnestus" } }, "forgotPassword": { - "label": "", - "description": "" + "label": "Unustasid parooli?", + "description": "Administraator saab järgmise käsuga sinu parooli lähtestada:" } }, "register": { - "label": "", + "label": "Loo konto", "notification": { "success": { - "title": "", - "message": "" + "title": "Konto loodud", + "message": "Jätkamiseks logi sisse" }, "error": { - "title": "", - "message": "" + "title": "Konto loomine ebaõnnestus", + "message": "Kontot ei saanud luua" } } }, - "create": "", + "create": "Loo kasutaja", "changePassword": { - "label": "", + "label": "Muuda parooli", "notification": { "success": { - "message": "" + "message": "Parool edukalt muudetud" }, "error": { - "message": "" + "message": "Parooli ei saanud muuta" } } }, "changeHomeBoard": { "notification": { "success": { - "message": "" + "message": "Kodujuhtpaneel edukalt muudetud" }, "error": { - "message": "" + "message": "Kodujuhtpaneeli ei saanud muuta" } } }, @@ -282,20 +282,20 @@ "changeFirstDayOfWeek": { "notification": { "success": { - "message": "" + "message": "Nädala esimene päev edukalt muudetud" }, "error": { - "message": "" + "message": "Nädala esimest päeva ei saanud muuta" } } }, "changePingIconsEnabled": { "notification": { "success": { - "message": "" + "message": "Pingiikoonid edukalt lülitatud" }, "error": { - "message": "" + "message": "Pingiikoone ei saanud lülitada" } } }, @@ -311,29 +311,29 @@ }, "manageAvatar": { "changeImage": { - "label": "", + "label": "Muuda pilti", "notification": { "success": { - "message": "" + "message": "Pilt edukalt muudetud" }, "error": { - "message": "" + "message": "Pilti ei saanud muuta" }, "toLarge": { - "title": "", - "message": "" + "title": "Pilt on liiga suur", + "message": "Maksimaalne pildi suurus on {size}" } } }, "removeImage": { - "label": "", - "confirm": "", + "label": "Eemalda pilt", + "confirm": "Kas oled kindel, et soovid pildi eemaldada?", "notification": { "success": { - "message": "" + "message": "Pilt edukalt eemaldatud" }, "error": { - "message": "" + "message": "Pilti ei saanud eemaldada" } } } @@ -341,34 +341,34 @@ "editProfile": { "notification": { "success": { - "message": "" + "message": "Profiil edukalt uuendatud" }, "error": { - "message": "" + "message": "Profiili ei saanud uuendada" } } }, "delete": { - "label": "", - "description": "", - "confirm": "" + "label": "Kustuta kasutaja jäädavalt", + "description": "Kustutab selle kasutaja koos tema eelistustega. Ei kustuta ühtegi juhtpaneeli. Kasutajat ei teavitata.", + "confirm": "Kas oled kindel, et soovid kustutada kasutaja {username} koos tema eelistustega?" }, "select": { - "label": "", - "notFound": "" + "label": "Vali kasutaja", + "notFound": "Kasutajat ei leitud" }, "transfer": { - "label": "" + "label": "Vali uus omanik" } } }, "group": { - "title": "", - "name": "", - "search": "", + "title": "Rühmad", + "name": "Rühm", + "search": "Otsi rühma", "field": { - "name": "", - "members": "", + "name": "Nimi", + "members": "Liikmed", "homeBoard": { "label": "", "description": "" @@ -380,198 +380,198 @@ }, "permission": { "admin": { - "title": "", + "title": "Administraator", "item": { "admin": { - "label": "", - "description": "" + "label": "Administraator", + "description": "Selle õigusega liikmetel on täielik juurdepääs kõikidele funktsioonidele ja seadetele" } } }, "app": { - "title": "", + "title": "Rakendused", "item": { "create": { - "label": "", - "description": "" + "label": "Loo rakendusi", + "description": "Luba liikmetel rakendusi luua" }, "use-all": { - "label": "", - "description": "" + "label": "Kasuta kõiki rakendusi", + "description": "Luba liikmetel lisada oma juhtpaneelidele mis tahes rakendusi" }, "modify-all": { - "label": "", - "description": "" + "label": "Muuda kõiki rakendusi", + "description": "Luba liikmetel muuta kõiki rakendusi" }, "full-all": { - "label": "", - "description": "" + "label": "Täielik rakenduste juurdepääs", + "description": "Luba liikmetel hallata, kasutada ja kustutada mis tahes rakendust" } } }, "board": { - "title": "", + "title": "Juhtpaneelid", "item": { "create": { - "label": "", - "description": "" + "label": "Loo juhtpaneele", + "description": "Luba liikmetel luua juhtpaneele" }, "view-all": { - "label": "", - "description": "" + "label": "Vaata kõiki juhtpaneele", + "description": "Luba liikmetel vaadata kõiki juhtpaneele" }, "modify-all": { - "label": "", - "description": "" + "label": "Muuda kõiki juhtpaneele", + "description": "Luba liikmetel muuta kõiki juhtpaneele (ei sisalda juurdepääsukontrolli ja ohtlike toimingute ala)" }, "full-all": { - "label": "", - "description": "" + "label": "Täielik juhtpaneelide juurdepääs", + "description": "Luba liikmetel vaadata, muuta ja kustutada kõiki juhtpaneele (sh juurdepääsukontroll ja ohtlikud toimingud)" } } }, "integration": { - "title": "", + "title": "Integratsioonid", "item": { "create": { - "label": "", - "description": "" + "label": "Loo integratsioone", + "description": "Luba liikmetel luua integratsioone" }, "use-all": { - "label": "", - "description": "" + "label": "Kasuta kõiki integratsioone", + "description": "Luba liikmetel lisada oma juhtpaneelidele mis tahes integratsioone" }, "interact-all": { - "label": "", - "description": "" + "label": "Suhtle mis tahes integratsiooniga", + "description": "Luba liikmetel suhelda mis tahes integratsiooniga" }, "full-all": { - "label": "", - "description": "" + "label": "Täielik integratsioonide juurdepääs", + "description": "Luba liikmetel hallata, kasutada ja suhelda mis tahes integratsiooniga" } } }, "media": { - "title": "", + "title": "Meedia", "item": { "upload": { - "label": "", - "description": "" + "label": "Laadi meediaid üles", + "description": "Luba liikmetel meediaid üles laadida" }, "view-all": { - "label": "", - "description": "" + "label": "Vaata kõiki meediaid", + "description": "Luba liikmetel vaadata kõiki meediaid" }, "full-all": { - "label": "", - "description": "" + "label": "Täielik meedia juurdepääs", + "description": "Luba liikmetel hallata ja kustutada mis tahes meediat" } } }, "other": { - "title": "", + "title": "Muu", "item": { "view-logs": { - "label": "", - "description": "" + "label": "Vaata logisid", + "description": "Luba liikmetel vaadata logisid" } } }, "search-engine": { - "title": "", + "title": "Otsingumootorid", "item": { "create": { - "label": "", - "description": "" + "label": "Loo otsingumootoreid", + "description": "Luba liikmetel luua otsingumootoreid" }, "modify-all": { - "label": "", - "description": "" + "label": "Muuda kõiki otsingumootoreid", + "description": "Luba liikmetel muuta kõiki otsingumootoreid" }, "full-all": { - "label": "", - "description": "" + "label": "Täielik otsingumootorite juurdepääs", + "description": "Luba liikmetel hallata ja kustutada mis tahes otsingumootorit" } } } }, "memberNotice": { - "mixed": "", - "external": "" + "mixed": "Mõned liikmed on välistest pakkujatest ja neid ei saa siin hallata", + "external": "Kõik liikmed on välistest pakkujatest ja neid ei saa siin hallata" }, "reservedNotice": { - "message": "" + "message": "See rühm on reserveeritud süsteemi kasutamiseks ja piirab mõningaid toiminguid. " }, "action": { "create": { - "label": "", + "label": "Uus rühm", "notification": { "success": { - "message": "" + "message": "Rühm loodi edukalt" }, "error": { - "message": "" + "message": "Rühma ei saanud luua" } } }, "transfer": { - "label": "", - "description": "", - "confirm": "", + "label": "Anna omandiõigus üle", + "description": "Anna selle rühma omandiõigus üle teisele kasutajale.", + "confirm": "Kas oled kindel, et soovid rühma {name} omandiõiguse üle anda kasutajale {username}?", "notification": { "success": { - "message": "" + "message": "Rühm {group} edukalt üle antud kasutajale {user}" }, "error": { - "message": "" + "message": "Omandiõigust ei saanud üle anda" } } }, "addMember": { - "label": "" + "label": "Lisa liige" }, "removeMember": { - "label": "", - "confirm": "" + "label": "Eemalda liige", + "confirm": "Kas oled kindel, et soovid eemaldada kasutaja {user} sellest rühmast?" }, "delete": { - "label": "", - "description": "", - "confirm": "", + "label": "Kustuta rühm", + "description": "Kui oled rühma kustutanud, pole enam tagasiteed. Palun ole kindel.", + "confirm": "Kas oled kindel, et soovid kustutada rühma {name}?", "notification": { "success": { - "message": "" + "message": "Rühm {name} edukalt kustutatud" }, "error": { - "message": "" + "message": "Rühma {name} ei saanud kustutada" } } }, "changePermissions": { "notification": { "success": { - "title": "", - "message": "" + "title": "Õigused salvestatud", + "message": "Õigused on edukalt salvestatud" }, "error": { - "title": "", - "message": "" + "title": "Õigusi ei salvestatud", + "message": "Õigusi ei salvestatud" } } }, "update": { "notification": { "success": { - "message": "" + "message": "Rühm {name} edukalt salvestatud" }, "error": { - "message": "" + "message": "Rühma {name} ei saanud salvestada" } } }, "select": { - "label": "", - "notFound": "" + "label": "Vali rühm", + "notFound": "Rühma ei leitud" }, "settings": { "board": { @@ -607,62 +607,62 @@ "search": "", "page": { "list": { - "title": "", + "title": "Rakendused", "noResults": { - "title": "", - "action": "" + "title": "Ühtegi rakendust pole veel", + "action": "Loo oma esimene rakendus" } }, "create": { - "title": "", + "title": "Uus rakendus", "notification": { "success": { - "title": "", - "message": "" + "title": "Loomine õnnestus", + "message": "Rakendus loodi edukalt" }, "error": { - "title": "", - "message": "" + "title": "Loomine ebaõnnestus", + "message": "Rakendust ei saanud luua" } } }, "edit": { - "title": "", + "title": "Muuda rakendust", "notification": { "success": { - "title": "", - "message": "" + "title": "Muudatused rakendati edukalt", + "message": "Rakendus edukalt salvestatud" }, "error": { - "title": "", - "message": "" + "title": "Muudatusi ei saanud rakendada", + "message": "Rakendust ei saanud salvestada" } } }, "delete": { - "title": "", - "message": "", + "title": "Kustuta rakendus", + "message": "Kas oled kindel, et soovid kustutada rakenduse {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Kustutamine õnnestus", + "message": "Rakendus edukalt kustutatud" }, "error": { - "title": "", - "message": "" + "title": "Kustutamine ebaõnnestus", + "message": "Rakendust ei saanud kustutada" } } } }, "field": { "name": { - "label": "" + "label": "Nimi" }, "description": { - "label": "" + "label": "Kirjeldus" }, "url": { - "label": "" + "label": "Url" }, "useDifferentUrlForPing": { "checkbox": { @@ -673,8 +673,8 @@ }, "action": { "select": { - "label": "", - "notFound": "", + "label": "Vali rakendus", + "notFound": "Rakendust ei leitud", "search": "", "noResults": "", "action": "", @@ -896,22 +896,22 @@ "integration": { "page": { "list": { - "title": "", - "search": "", + "title": "Integratsioonid", + "search": "Otsi integratsioone", "noResults": { - "title": "" + "title": "Ühtegi integratsiooni pole veel" } }, "create": { - "title": "", + "title": "Uus {name} integratsioon", "notification": { "success": { - "title": "", - "message": "" + "title": "Loomine õnnestus", + "message": "Integratsioon loodi edukalt" }, "error": { - "title": "", - "message": "" + "title": "Loomine ebaõnnestus", + "message": "Integratsiooni ei saanud luua" } }, "app": { @@ -931,15 +931,15 @@ } }, "edit": { - "title": "", + "title": "Muuda {name} integratsiooni", "notification": { "success": { - "title": "", - "message": "" + "title": "Muudatused rakendati edukalt", + "message": "Integratsioon edukalt salvestatud" }, "error": { - "title": "", - "message": "" + "title": "Muudatusi ei saanud rakendada", + "message": "Integratsiooni ei saanud salvestada" } }, "app": { @@ -951,26 +951,26 @@ } }, "delete": { - "title": "", - "message": "", + "title": "Kustuta integratsioon", + "message": "Kas oled kindel, et soovid kustutada integratsiooni {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Kustutamine õnnestus", + "message": "Integratsioon edukalt kustutatud" }, "error": { - "title": "", - "message": "" + "title": "Kustutamine ebaõnnestus", + "message": "Integratsiooni ei saanud kustutada" } } } }, "field": { "name": { - "label": "" + "label": "Nimi" }, "url": { - "label": "" + "label": "Url" }, "attemptSearchEngineCreation": { "label": "", @@ -991,7 +991,7 @@ } }, "action": { - "create": "" + "create": "Uus integratsioon" }, "grid": { "widgetCount": "", @@ -1031,8 +1031,8 @@ }, "testConnection": { "action": { - "create": "", - "edit": "" + "create": "Testi ühendust ja loo", + "edit": "Testi ühendust ja salvesta" }, "error": { "common": { @@ -1160,71 +1160,71 @@ } } }, - "alertNotice": "", + "alertNotice": "Salvestamise nupp aktiveeritakse, kui ühendus on edukalt loodud", "notification": { "success": { - "title": "", - "message": "" + "title": "Ühendus õnnestus", + "message": "Ühendus loodi edukalt" }, "invalidUrl": { - "title": "", - "message": "" + "title": "Vigane URL", + "message": "URL on vigane" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "Puuduvad volitused", + "message": "Kõiki volitusi ei esitatud" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "Vigased volitused", + "message": "Volitused on vigased" }, "commonError": { - "title": "", - "message": "" + "title": "Ühendus ebaõnnestus", + "message": "Ühendust ei saanud luua" }, "badRequest": { - "title": "", - "message": "" + "title": "Vigane päring", + "message": "Päring oli valesti koostatud" }, "unauthorized": { - "title": "", - "message": "" + "title": "Volitamata", + "message": "Tõenäoliselt valed volitused" }, "forbidden": { - "title": "", - "message": "" + "title": "Keelatud", + "message": "Tõenäoliselt puuduvad õigused" }, "notFound": { - "title": "", - "message": "" + "title": "Ei leitud", + "message": "Tõenäoliselt vale url või tee" }, "internalServerError": { - "title": "", - "message": "" + "title": "Serveri sisemine viga", + "message": "Serveris tekkis viga" }, "serviceUnavailable": { - "title": "", - "message": "" + "title": "Teenus pole saadaval", + "message": "Server pole praegu saadaval" }, "connectionAborted": { - "title": "", - "message": "" + "title": "Ühendus katkestati", + "message": "Ühendus katkestati" }, "domainNotFound": { - "title": "", - "message": "" + "title": "Domeeni ei leitud", + "message": "Domeeni ei leitud" }, "connectionRefused": { - "title": "", - "message": "" + "title": "Ühendusest keelduti", + "message": "Ühendusest keelduti" }, "invalidJson": { - "title": "", - "message": "" + "title": "Vigane JSON", + "message": "Vastus ei olnud korrektne JSON" }, "wrongPath": { - "title": "", - "message": "" + "title": "Vale tee", + "message": "Tee on tõenäoliselt vale" }, "tooManyRequests": { "title": "", @@ -1233,33 +1233,33 @@ } }, "secrets": { - "title": "", - "lastUpdated": "", + "title": "Saladused", + "lastUpdated": "Viimati uuendatud {date}", "notSet": { "label": "", "tooltip": "" }, - "secureNotice": "", + "secureNotice": "Seda saladust ei saa pärast loomist enam hankida", "reset": { - "title": "", - "message": "" + "title": "Lähtesta saladus", + "message": "Kas oled kindel, et soovid selle saladuse lähtestada?" }, "noSecretsRequired": { - "segmentTitle": "", - "text": "" + "segmentTitle": "Saladusi pole", + "text": "Selle integratsiooni jaoks pole saladusi vaja" }, "kind": { "username": { - "label": "", - "newLabel": "" + "label": "Kasutajanimi", + "newLabel": "Uus kasutajanimi" }, "apiKey": { - "label": "", - "newLabel": "" + "label": "API võti", + "newLabel": "Uus API võti" }, "password": { - "label": "", - "newLabel": "" + "label": "Parool", + "newLabel": "Uus parool" }, "tokenId": { "label": "", @@ -1316,9 +1316,9 @@ } }, "permission": { - "use": "", - "interact": "", - "full": "" + "use": "Vali integratsioonid kirjetes", + "interact": "Suhtle integratsioonidega", + "full": "Täielik integratsioonide juurdepääs" }, "audiobookshelf": { "name": "", @@ -1358,40 +1358,40 @@ } }, "media": { - "plural": "", - "search": "", + "plural": "Meedia", + "search": "Otsi meediat", "field": { - "name": "", - "size": "", - "creator": "" + "name": "Nimi", + "size": "Suurus", + "creator": "Looja" }, "action": { "upload": { - "label": "", - "file": "", + "label": "Laadi meedia üles", + "file": "Vali fail", "notification": { "success": { - "message": "" + "message": "Meedia laaditi edukalt üles" }, "error": { - "message": "" + "message": "Meediat ei saanud üles laadida" } } }, "delete": { - "label": "", - "description": "", + "label": "Kustuta meedia", + "description": "Kas oled kindel, et soovid kustutada meedia ?", "notification": { "success": { - "message": "" + "message": "Meedia edukalt kustutatud" }, "error": { - "message": "" + "message": "Meediat ei saanud kustutada" } } }, "copy": { - "label": "" + "label": "Kopeeri URL" }, "open": { "label": "" @@ -1403,41 +1403,41 @@ }, "common": { "success": "", - "beta": "", - "error": "", + "beta": "Beeta", + "error": "Viga", "action": { - "add": "", - "apply": "", - "backToOverview": "", + "add": "Lisa", + "apply": "Rakenda", + "backToOverview": "Tagasi ülevaatesse", "skip": "", "change": "", - "create": "", + "create": "Loo", "createAnother": "", - "edit": "", - "import": "", - "insert": "", - "remove": "", - "save": "", - "saveChanges": "", - "cancel": "", - "delete": "", - "discard": "", + "edit": "Muuda", + "import": "Impordi", + "insert": "Sisesta", + "remove": "Eemalda", + "save": "Salvesta", + "saveChanges": "Salvesta muudatused", + "cancel": "Tühista", + "delete": "Kustuta", + "discard": "Loobu", "close": "", - "confirm": "", - "continue": "", - "previous": "", - "next": "", - "checkoutDocs": "", + "confirm": "Kinnita", + "continue": "Jätka", + "previous": "Eelmine", + "next": "Järgmine", + "checkoutDocs": "Tutvu dokumentatsiooniga", "checkLogs": "", - "tryAgain": "", - "loading": "", + "tryAgain": "Proovi uuesti", + "loading": "Laadimine", "show": "", "hide": "" }, - "here": "", + "here": "siin", "iconPicker": { - "label": "", - "header": "", + "label": "Ikooni URL", + "header": "Sisesta nimi või objektid ikoonide filtreerimiseks... Homarr otsib {countIcons} ikooni seast.", "headerLoading": "", "noResults": "", "error": "" @@ -1450,93 +1450,93 @@ } }, "information": { - "min": "", - "max": "", - "days": "", - "hours": "", - "minutes": "" + "min": "Minimaalne", + "max": "Maksimaalne", + "days": "Päevad", + "hours": "Tunnid", + "minutes": "Minutid" }, "notification": { "create": { - "success": "", - "error": "" + "success": "Loomine õnnestus", + "error": "Loomine ebaõnnestus" }, "delete": { - "success": "", - "error": "" + "success": "Kustutamine õnnestus", + "error": "Kustutamine ebaõnnestus" }, "update": { - "success": "", - "error": "" + "success": "Muudatused rakendati edukalt", + "error": "Muudatusi ei saanud rakendada" }, "transfer": { - "success": "", - "error": "" + "success": "Üleandmine õnnestus", + "error": "Üleandmine ebaõnnestus" } }, "multiSelect": { - "placeholder": "" + "placeholder": "Vali üks või mitu väärtust" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "Lisa rohkem väärtusi", + "addLabel": "Lisa {value}" }, "select": { - "placeholder": "", + "placeholder": "Vali väärtus", "badge": { - "recommended": "" + "recommended": "Soovitatav" } }, "userAvatar": { "menu": { - "switchToDarkMode": "", - "switchToLightMode": "", - "management": "", + "switchToDarkMode": "Lülita tumedale režiimile", + "switchToLightMode": "Lülita heledale režiimile", + "management": "Haldus", "docker": "", "preferences": "Teie eelistused", - "logout": "", - "login": "", - "homeBoard": "", - "loggedOut": "", + "logout": "Logi välja", + "login": "Logi sisse", + "homeBoard": "Sinu kodujuhtpaneel", + "loggedOut": "Välja logitud", "updateAvailable": "" } }, - "dangerZone": "", - "noResults": "", + "dangerZone": "Ohtlike toimingute ala", + "noResults": "Tulemusi ei leitud", "unsavedChanges": "", "servers": "", "applications": "", "services": "", "preview": { - "show": "", - "hide": "" + "show": "Näita eelvaadet", + "hide": "Peida eelvaade" }, "zod": { "errors": { - "default": "", - "required": "", + "default": "See väli on vigane", + "required": "See väli on kohustuslik", "string": { - "startsWith": "", - "endsWith": "", - "includes": "", - "invalidEmail": "" + "startsWith": "See väli peab algama {startsWith}", + "endsWith": "See väli peab lõppema {endsWith}", + "includes": "See väli peab sisaldama {includes}", + "invalidEmail": "See väli peab olema korrektne e-posti aadress" }, "tooSmall": { - "string": "", - "number": "" + "string": "See väli peab olema vähemalt {minimum} tähemärki pikk", + "number": "See väli peab olema suurem või võrdne {minimum}" }, "tooBig": { - "string": "", - "number": "" + "string": "See väli võib olla maksimaalselt {maximum} tähemärki pikk", + "number": "See väli peab olema väiksem või võrdne {maximum}" }, "custom": { - "passwordsDoNotMatch": "", - "passwordRequirements": "", - "boardAlreadyExists": "", - "invalidFileType": "", + "passwordsDoNotMatch": "Paroolid ei kattu", + "passwordRequirements": "Parool ei vasta nõuetele", + "boardAlreadyExists": "Selle nimega juhtpaneel on juba olemas", + "invalidFileType": "Vigane failitüüp, oodati {expected}", "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", + "fileTooLarge": "Fail on liiga suur, maksimaalne suurus on {maxSize}", + "invalidConfiguration": "Vigane seadistus", "groupNameTaken": "" } } @@ -1551,8 +1551,8 @@ "section": { "dynamic": { "action": { - "create": "", - "remove": "" + "create": "Uus dünaamiline sektsioon", + "remove": "Eemalda dünaamiline sektsioon" }, "option": { "title": { @@ -1566,42 +1566,42 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Eemalda dünaamiline sektsioon", + "message": "Kas oled kindel, et soovid selle dünaamilise sektsiooni eemaldada? Üksused teisaldatakse ülemsektsiooni samasse asukohta." } }, "category": { "field": { "name": { - "label": "" + "label": "Nimi" } }, "action": { - "create": "", - "edit": "", - "remove": "", - "moveUp": "", - "moveDown": "", - "createAbove": "", - "createBelow": "", + "create": "Uus kategooria", + "edit": "Nimeta kategooria ümber", + "remove": "Eemalda kategooria", + "moveUp": "Liiguta üles", + "moveDown": "Liiguta alla", + "createAbove": "Uus kategooria ülal", + "createBelow": "Uus kategooria all", "openAllInNewTabs": "" }, "create": { - "title": "", - "submit": "" + "title": "Uus kategooria", + "submit": "Lisa kategooria" }, "remove": { - "title": "", - "message": "" + "title": "Eemalda kategooria", + "message": "Kas oled kindel, et soovid eemaldada kategooria {name}?" }, "edit": { - "title": "", - "submit": "" + "title": "Nimeta kategooria ümber", + "submit": "Nimeta kategooria ümber" }, "menu": { "label": { - "create": "", - "changePosition": "", + "create": "Uus kategooria", + "changePosition": "Muuda asukohta", "settings": "" } }, @@ -1613,16 +1613,16 @@ }, "item": { "action": { - "create": "", - "import": "", - "edit": "", - "moveResize": "", - "duplicate": "", - "remove": "" + "create": "Uus üksus", + "import": "Impordi üksus", + "edit": "Muuda üksust", + "moveResize": "Liiguta / muuda suurust", + "duplicate": "Dubleeri üksus", + "remove": "Eemalda üksus" }, "menu": { "label": { - "settings": "", + "settings": "Seaded", "refresh": "", "options": "", "actions": "" @@ -1635,29 +1635,29 @@ } }, "create": { - "title": "", + "title": "Vali lisatav üksus", "search": "", - "addToBoard": "" + "addToBoard": "Lisa juhtpaneelile" }, "moveResize": { - "title": "", + "title": "Liiguta / muuda suurust", "field": { "width": { - "label": "" + "label": "Laius" }, "height": { - "label": "" + "label": "Kõrgus" }, "xOffset": { - "label": "" + "label": "X nihe" }, "yOffset": { - "label": "" + "label": "Y nihe" } } }, "edit": { - "title": "", + "title": "Muuda üksust", "tab": { "widget": "", "app": "" @@ -1666,18 +1666,18 @@ "propagationNotice": "" }, "advancedOptions": { - "label": "", - "title": "" + "label": "Täpsemad valikud", + "title": "Üksuse täpsemad valikud" }, "field": { "integrations": { - "label": "" + "label": "Integratsioonid" }, "title": { "label": "" }, "customCssClasses": { - "label": "" + "label": "Kohandatud css klassid" }, "borderColor": { "label": "" @@ -1685,8 +1685,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Eemalda üksus", + "message": "Kas oled kindel, et soovid selle üksuse eemaldada?" } }, "widget": { @@ -1698,17 +1698,17 @@ "loadError": "" }, "app": { - "name": "", - "description": "", + "name": "Rakendus", + "description": "Manustab rakenduse juhtpaneelile.", "option": { "appId": { - "label": "" + "label": "Vali rakendus" }, "openInNewTab": { - "label": "" + "label": "Ava uues vahekaardis" }, "showTitle": { - "label": "" + "label": "Näita rakenduse nime" }, "pingEnabled": { "label": "" @@ -1734,29 +1734,29 @@ }, "error": { "notFound": { - "label": "", - "tooltip": "" + "label": "Rakendust pole", + "tooltip": "Sul pole valitud sobivat rakendust" } } }, "bookmarks": { - "name": "", - "description": "", + "name": "Järjehoidjad", + "description": "Kuvab mitu rakenduse linki", "option": { "title": { - "label": "" + "label": "Pealkiri" }, "layout": { - "label": "", + "label": "Paigutus", "option": { "row": { - "label": "" + "label": "Horisontaalne" }, "column": { - "label": "" + "label": "Vertikaalne" }, "grid": { - "label": "" + "label": "Ruudustik" }, "gridHorizontal": { "label": "" @@ -1779,8 +1779,8 @@ "label": "" }, "items": { - "label": "", - "add": "" + "label": "Järjehoidjad", + "add": "Lisa järjehoidja" } } }, @@ -1794,109 +1794,109 @@ } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "DNS Hole kokkuvõte", + "description": "Kuvab sinu DNS Hole kokkuvõtte", "option": { "layout": { - "label": "", + "label": "Paigutus", "option": { "row": { - "label": "" + "label": "Horisontaalne" }, "column": { - "label": "" + "label": "Vertikaalne" }, "grid": { - "label": "" + "label": "Ruudustik" } } }, "usePiHoleColors": { - "label": "" + "label": "Kasuta Pi-Hole värve" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "DNS Hole kokkuvõtte hankimine ebaõnnestus", + "integrationsDisconnected": "Andmeid pole, kõik integratsioonid on katkestatud" }, "data": { - "adsBlockedToday": "", - "adsBlockedTodayPercentage": "", - "dnsQueriesToday": "", - "domainsBeingBlocked": "" + "adsBlockedToday": "Täna blokeeritud", + "adsBlockedTodayPercentage": "Täna blokeeritud", + "dnsQueriesToday": "Tänased päringud", + "domainsBeingBlocked": "Domeene blokeerimisnimekirjas" }, "domainsTooltip": "" }, "dnsHoleControls": { - "name": "", - "description": "", + "name": "DNS Hole juhtimine", + "description": "Juhti PiHole või AdGuard oma juhtpaneelilt", "option": { "layout": { - "label": "", + "label": "Paigutus", "option": { "row": { - "label": "" + "label": "Horisontaalne" }, "column": { - "label": "" + "label": "Vertikaalne" }, "grid": { - "label": "" + "label": "Ruudustik" } } }, "showToggleAllButtons": { - "label": "" + "label": "Näita lülita kõik nuppe" } }, "error": { - "internalServerError": "" + "internalServerError": "DNS Hole juhtimine ebaõnnestus" }, "controls": { - "enableAll": "", - "disableAll": "", - "setTimer": "", - "set": "", - "enabled": "", - "disabled": "", - "processing": "", - "disconnected": "", - "hours": "", - "minutes": "", - "unlimited": "" + "enableAll": "Luba kõik", + "disableAll": "Keela kõik", + "setTimer": "Määra taimer", + "set": "Määra", + "enabled": "Lubatud", + "disabled": "Keelatud", + "processing": "Töötlemine", + "disconnected": "Katkestatud", + "hours": "Tunnid", + "minutes": "Minutid", + "unlimited": "Tühjaks jättes piiramatu" } }, "clock": { - "name": "", - "description": "", + "name": "Kuupäev ja kellaaeg", + "description": "Kuvab praeguse kuupäeva ja kellaaja.", "option": { "customTitleToggle": { - "label": "", - "description": "" + "label": "Kohandatud pealkirja/linna kuvamine", + "description": "Näita kohandatud pealkirja või linna/riigi nime kella kohal." }, "customTitle": { - "label": "" + "label": "Pealkiri" }, "is24HourFormat": { - "label": "", - "description": "" + "label": "24-tunni formaat", + "description": "Kasuta 24-tunnist vormingut 12-tunnise asemel" }, "showSeconds": { - "label": "" + "label": "Näita sekundeid" }, "useCustomTimezone": { - "label": "" + "label": "Kasuta fikseeritud ajavööndit" }, "timezone": { - "label": "", - "description": "" + "label": "Ajavöönd", + "description": "Vali ajavöönd IANA standardi järgi" }, "showDate": { - "label": "" + "label": "Näita kuupäeva" }, "dateFormat": { - "label": "", - "description": "" + "label": "Kuupäeva vorming", + "description": "Kuidas kuupäev peaks välja nägema" }, "customTimeFormat": { "label": "", @@ -1952,66 +1952,66 @@ } }, "notebook": { - "name": "", - "description": "", + "name": "Märkmik", + "description": "Lihtne märkmiku vidin, mis toetab markdown'ist", "option": { "showToolbar": { - "label": "" + "label": "Näita tööriistariba, mis aitab sul markdown'i kirjutada" }, "allowReadOnlyCheck": { - "label": "" + "label": "Luba märkeruut ainult lugemisrežiimis" }, "content": { - "label": "" + "label": "Märkmiku sisu" } }, "controls": { - "bold": "", - "italic": "", - "strikethrough": "", - "underline": "", - "colorText": "", - "colorHighlight": "", - "code": "", - "clear": "", - "heading": "", - "align": "", + "bold": "Paks kiri", + "italic": "Kaldkiri", + "strikethrough": "Läbikriipsutus", + "underline": "Allajoonitud", + "colorText": "Teksti värv", + "colorHighlight": "Värviline esiletõstetud tekst", + "code": "Kood", + "clear": "Eemalda vorming", + "heading": "Pealkiri {level}", + "align": "Joonda tekst: {position}", "directionLtr": "", "directionRtl": "", - "blockquote": "", - "horizontalLine": "", - "bulletList": "", - "orderedList": "", - "checkList": "", - "increaseIndent": "", - "decreaseIndent": "", - "link": "", - "unlink": "", - "image": "", - "addTable": "", - "deleteTable": "", - "colorCell": "", - "mergeCell": "", - "addColumnLeft": "", - "addColumnRight": "", - "deleteColumn": "", - "addRowTop": "", - "addRowBelow": "", - "deleteRow": "" + "blockquote": "Tsitaat", + "horizontalLine": "Horisontaaljoon", + "bulletList": "Täpploend", + "orderedList": "Nummerdatud loend", + "checkList": "Kontroll-loend", + "increaseIndent": "Suurenda taanet", + "decreaseIndent": "Vähenda taanet", + "link": "Link", + "unlink": "Eemalda link", + "image": "Lisa pilt", + "addTable": "Lisa tabel", + "deleteTable": "Kustuta tabel", + "colorCell": "Lahtri värv", + "mergeCell": "Lülita lahtrite ühendamine", + "addColumnLeft": "Lisa veerg ette", + "addColumnRight": "Lisa veerg järele", + "deleteColumn": "Kustuta veerg", + "addRowTop": "Lisa rida ette", + "addRowBelow": "Lisa rida järele", + "deleteRow": "Kustuta rida" }, "align": { - "left": "", - "center": "", - "right": "" + "left": "Vasakule", + "center": "Keskele", + "right": "Paremale" }, "popover": { - "clearColor": "", - "source": "", - "widthPlaceholder": "", - "columns": "", - "rows": "", - "width": "", - "height": "" + "clearColor": "Eemalda värv", + "source": "Allikas", + "widthPlaceholder": "Väärtus % või pikslites", + "columns": "Veerud", + "rows": "Read", + "width": "Laius", + "height": "Kõrgus" }, "placeholder": "", "dismiss": { @@ -2052,73 +2052,73 @@ "saveFailed": "" }, "iframe": { - "name": "", - "description": "", + "name": "iFrame", + "description": "Lisa mis tahes sisu internetist. Mõned veebisaidid võivad juurdepääsu piirata.", "option": { "embedUrl": { - "label": "" + "label": "Manus-URL" }, "allowFullScreen": { - "label": "" + "label": "Luba täisekraan" }, "allowTransparency": { - "label": "" + "label": "Luba läbipaistvus" }, "allowScrolling": { - "label": "" + "label": "Luba kerimine" }, "allowPayment": { - "label": "" + "label": "Luba makse" }, "allowAutoPlay": { - "label": "" + "label": "Luba automaatesitus" }, "allowMicrophone": { - "label": "" + "label": "Luba mikrofon" }, "allowCamera": { - "label": "" + "label": "Luba kaamera" }, "allowGeolocation": { - "label": "" + "label": "Luba geolokatsioon" }, "allowModals": { "label": "" } }, "error": { - "noUrl": "", + "noUrl": "Pole esitatud iFrame'i URL-i", "unsupportedProtocol": "", - "noBrowerSupport": "" + "noBrowerSupport": "Teie brauser ei toeta iframe'e. Palun uuendage brauserit." } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "Olemi olek", + "description": "Kuva olemi olek ja lülita seda valikuliselt", "option": { "entityId": { - "label": "" + "label": "Olemi ID" }, "displayName": { - "label": "" + "label": "Kuvatav nimi" }, "entityUnit": { - "label": "" + "label": "Olemi ühik" }, "clickable": { - "label": "" + "label": "Klikitav" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "Käivita automatiseering", + "description": "Käivita automatiseering ühe klõpsuga", "option": { "displayName": { - "label": "" + "label": "Kuvatav nimi" }, "automationId": { - "label": "" + "label": "Automatiseeringu ID" } }, "spotlightAction": { @@ -2202,25 +2202,25 @@ } }, "calendar": { - "name": "", - "description": "", + "name": "Kalender", + "description": "Kuva integratsioonidest pärit sündmused kalendrivaates kindlal suhtelisel ajaperioodil", "duration": { "allDay": "" }, "option": { "releaseType": { - "label": "", + "label": "Radarr'i väljalaske tüüp", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "Kinodes", + "digitalRelease": "Digitaalne väljalase", + "physicalRelease": "Füüsiline väljalase" } }, "filterPastMonths": { - "label": "" + "label": "Alates" }, "filterFutureMonths": { - "label": "" + "label": "Kuni" }, "showUnmonitored": { "label": "" @@ -2228,11 +2228,11 @@ } }, "weather": { - "name": "", - "description": "", + "name": "Ilm", + "description": "Näitab määratud asukoha praegust ilmateavet.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Temperatuur Fahrenheitis" }, "disableTemperatureDecimals": { "label": "" @@ -2245,21 +2245,21 @@ "label": "" }, "location": { - "label": "" + "label": "Ilmakoht" }, "showCity": { - "label": "" + "label": "Näita linna" }, "hasForecast": { - "label": "" + "label": "Näita ilmaprognoosi" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Prognoosipäevade arv", + "description": "Kui vidin pole piisavalt lai, näidatakse vähem päevi" }, "dateFormat": { - "label": "", - "description": "" + "label": "Kuupäeva vorming", + "description": "Kuidas kuupäev peaks välja nägema" } }, "currentWindSpeed": "", @@ -2271,52 +2271,52 @@ "humidity": "" }, "kind": { - "clear": "", - "mainlyClear": "", - "fog": "", - "drizzle": "", - "freezingDrizzle": "", - "rain": "", - "freezingRain": "", - "snowFall": "", - "snowGrains": "", - "rainShowers": "", - "snowShowers": "", - "thunderstorm": "", - "thunderstormWithHail": "", - "unknown": "" + "clear": "Selge", + "mainlyClear": "Peamiselt selge", + "fog": "Udu", + "drizzle": "Uduvihm", + "freezingDrizzle": "Jäätuv uduvihm", + "rain": "Vihm", + "freezingRain": "Jäätuv vihm", + "snowFall": "Lumesadu", + "snowGrains": "Lumeterad", + "rainShowers": "Vihmahood", + "snowShowers": "Lumehood", + "thunderstorm": "Äike", + "thunderstormWithHail": "Äike koos rahega", + "unknown": "Tundmatu" } }, "indexerManager": { - "name": "", - "description": "", + "name": "Indekseerijate halduri olek", + "description": "Teie indekseerijate olek", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Ava indekseerija sait uuel vahelehel" } }, - "title": "", - "testAll": "", + "title": "Indekseerijate haldur", + "testAll": "Testi kõiki", "error": { - "internalServerError": "" + "internalServerError": "Indekseerijate oleku hankimine ebaõnnestus" } }, "healthMonitoring": { - "name": "", - "description": "", + "name": "Süsteemi tervise jälgimine", + "description": "Näitab teavet, mis kajastab teie süsteemi(de) tervist ja olekut.", "tab": { "system": "", "cluster": "" }, "option": { "fahrenheit": { - "label": "" + "label": "CPU temperatuur Fahrenheitis" }, "cpu": { - "label": "" + "label": "Näita CPU teavet" }, "memory": { - "label": "" + "label": "Näita mälu teavet" }, "gpu": { "label": "" @@ -2325,7 +2325,7 @@ "label": "" }, "fileSystem": { - "label": "" + "label": "Näita failisüsteemi teavet" }, "visibleStorageVolumes": { "label": "", @@ -2343,22 +2343,22 @@ } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", + "information": "Teave", + "processor": "Protsessor: {cpuModelName}", + "memory": "Mälu: {memory} GiB", + "memoryAvailable": "Saadaval: {memoryAvailable} GiB ({percent}%)", + "version": "Versioon: {version}", "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", - "available": "", - "lastSeen": "" + "loadAverage": "Keskmine koormus:", + "minute": "1 minut", + "minutes": "{count} minutit", + "used": "Kasutatud", + "available": "Saadaval", + "lastSeen": "Viimane oleku uuendus: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "Tervisliku seisundi hankimine ebaõnnestus" }, "cluster": { "summary": { @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2659,74 +2670,86 @@ }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", - "search": "", + "query": "Linn / postiindeks", + "latitude": "Laiuskraad", + "longitude": "Pikkuskraad", + "disabledTooltip": "Palun sisestage linn või postiindeks", + "unknownLocation": "Tundmatu asukoht", + "search": "Otsi", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "Linn", + "country": "Riik", + "coordinates": "Koordinaadid", + "population": "Rahvaarv" }, "action": { - "select": "" + "select": "Vali {city}, {countryCode}" }, "population": { - "fallback": "" + "fallback": "Tundmatu" } } }, "integration": { - "noData": "", - "description": "" + "noData": "Integratsiooni ei leitud", + "description": "Klõpsa uue integratsiooni loomiseks" }, "app": { - "noData": "", - "description": "", + "noData": "Rakendust ei leitud", + "description": "Klõpsa uue rakenduse loomiseks", "quickCreate": "" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "Integratsiooni pole valitud", + "noData": "Integratsiooni andmed pole saadaval" }, "option": {} }, "video": { - "name": "", - "description": "", + "name": "Video voog", + "description": "Lisa video voog või video kaamerast või veebisaidilt", "option": { "feedUrl": { - "label": "" + "label": "Voo URL" }, "hasAutoPlay": { - "label": "", - "description": "" + "label": "Automaatesitus", + "description": "Automaatesitus töötab ainult vaigistatult brauseri piirangute tõttu" }, "isMuted": { - "label": "" + "label": "Vaigistatud" }, "hasControls": { - "label": "" + "label": "Näita juhtelemente" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "Video URL-i pole antud", + "forYoutubeUseIframe": "YouTube'i videote puhul kasuta iframe valikut" } }, "mediaServer": { - "name": "", - "description": "", + "name": "Praegused meediaserveri voogedastused", + "description": "Näita praeguseid voogedastusi oma meediaserverites", "option": { "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3040,151 +3066,178 @@ "noPhotos": "" }, "downloads": { - "name": "", - "description": "", + "name": "Allalaadimishaldur", + "description": "Võimaldab vaadata ja hallata allalaadimisi nii Torrenti kui Usenet'i klientidest.", "option": { "columns": { - "label": "" + "label": "Näidatavad veerud" }, "enableRowSorting": { - "label": "" + "label": "Luba üksuste sorteerimine" }, "defaultSort": { - "label": "" + "label": "Vaikimisi sorteerimise veerg" }, "descendingDefaultSort": { - "label": "" + "label": "Pööra sorteerimine ümber" }, "showCompletedUsenet": { - "label": "" + "label": "Näita Usenet'i kirjeid, mis on märgitud lõpetatuks" }, "showCompletedTorrent": { - "label": "" + "label": "Näita torrentikirjeid, mis on märgitud lõpetatuks" }, "showCompletedHttp": { "label": "" }, "activeTorrentThreshold": { - "label": "" + "label": "Peida lõpetatud torrent alla selle läve (kiB/s)" }, "categoryFilter": { - "label": "" + "label": "Filtreeritavad kategooriad/sildid" }, "filterIsWhitelist": { - "label": "" + "label": "Filtreeri lubatute loendina" }, "applyFilterToRatio": { - "label": "" + "label": "Kasuta filtrit suhte arvutamiseks" }, "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { - "noColumns": "", - "noCommunications": "" + "noColumns": "Vali üksuste veerud", + "noCommunications": "Andmeid ei saa integratsioonist laadida", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { - "columnTitle": "" + "columnTitle": "Juhtelemendid" }, "added": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Lisatud", + "detailsTitle": "Lisamise kuupäev" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Lisad", + "detailsTitle": "Kategooriad (või lisateave)" }, "downSpeed": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Alla", + "detailsTitle": "Allalaadimiskiirus" }, "index": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "#", + "detailsTitle": "Praegune indeks kliendi sees" }, "id": { - "columnTitle": "" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { - "columnTitle": "" + "columnTitle": "Integratsioon" }, "name": { - "columnTitle": "" + "columnTitle": "Töö nimetus" }, "progress": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Edenemine", + "detailsTitle": "Allalaadimise edenemine" }, "ratio": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Suhe", + "detailsTitle": "Torrenti suhe (vastuvõetud/saadetud)" }, "received": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Kokku alla", + "detailsTitle": "Kokku alla laetud" }, "sent": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Kokku üles", + "detailsTitle": "Kokku üles laetud" }, "size": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Faili suurus", + "detailsTitle": "Valiku/failide kogusuurus" }, "state": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Olek", + "detailsTitle": "Töö olek" }, "time": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Lõpuaeg", + "detailsTitle": "Aeg lõpetamisest/kuni lõpetamiseni", + "eta": "" }, "type": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Tüüp", + "detailsTitle": "Allalaadimishalduri tüüp" }, "upSpeed": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Üles", + "detailsTitle": "Üleslaadimiskiirus" } }, "states": { - "downloading": "", - "queued": "", - "paused": "", - "completed": "", - "failed": "", - "processing": "", - "leeching": "", - "stalled": "", - "unknown": "", - "seeding": "" + "downloading": "Allalaadimine", + "queued": "Järjekorras", + "paused": "Peatatud", + "completed": "Lõpetatud", + "failed": "Ebaõnnestunud", + "processing": "Töötlemine", + "leeching": "Leech'imine", + "stalled": "Seiskunud", + "unknown": "Tundmatu", + "seeding": "Seeditamine" }, "actions": { "clients": { - "modalTitle": "", - "pause": "", - "resume": "" + "modalTitle": "Allalaadimishaldurite nimekiri", + "pause": "Peata kõik kliendid/üksused", + "resume": "Jätka kõiki kliente/üksuseid" }, "client": { - "pause": "", - "resume": "" + "pause": "Peata klient", + "resume": "Jätka klienti" }, "item": { - "pause": "", - "resume": "", + "pause": "Peata üksus", + "resume": "Jätka üksust", "delete": { - "title": "", - "modalTitle": "", - "entry": "", - "entryAndFiles": "" + "title": "Kustuta üksus", + "modalTitle": "Kas olete kindel, et soovite selle töö kustutada?", + "entry": "Kustuta kirje", + "entryAndFiles": "Kustuta kirje ja fail(id)" } } }, - "globalRatio": "" + "globalRatio": "Globaalne suhe", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3216,11 +3269,11 @@ } }, "mediaRequests-requestList": { - "name": "", - "description": "", + "name": "Meediapäringute nimekiri", + "description": "Vaata kõiki meediapäringuid oma Overseerr või Jellyseerr eksemplarist", "option": { "linksTargetNewTab": { - "label": "" + "label": "Ava lingid uuel vahelehel" }, "statusFilter": { "label": "" @@ -3230,17 +3283,17 @@ } }, "pending": { - "approve": "", - "approving": "", - "decline": "" + "approve": "Kinnita päring", + "approving": "Päringu kinnitamine...", + "decline": "Keeldu päringust" }, "availability": { - "unknown": "", - "pending": "", - "processing": "", + "unknown": "Tundmatu", + "pending": "Ootel", + "processing": "Töötlemine", "requested": "", - "partiallyAvailable": "", - "available": "", + "partiallyAvailable": "Osaline", + "available": "Saadaval", "blacklisted": "", "deleted": "" }, @@ -3251,27 +3304,27 @@ "failed": "", "completed": "" }, - "toBeDetermined": "" + "toBeDetermined": "Tuleb määrata" }, "mediaRequests-requestStats": { - "name": "", - "description": "", + "name": "Meediapäringute statistika", + "description": "Statistika teie meediapäringute kohta", "option": {}, "titles": { "stats": { - "main": "", - "approved": "", - "pending": "", - "processing": "", - "declined": "", - "available": "", - "tv": "", - "movie": "", - "total": "" + "main": "Meedia statistika", + "approved": "Juba kinnitatud", + "pending": "Kinnitamist ootavad", + "processing": "Töötlemisel", + "declined": "Juba tagasi lükatud", + "available": "Juba saadaval", + "tv": "TV päringud", + "movie": "Filmipäringud", + "total": "Kokku" }, "users": { - "main": "", - "requests": "" + "main": "Parimad kasutajad", + "requests": "Päringud" } } }, @@ -3364,20 +3417,20 @@ "timeLeft": "" }, "rssFeed": { - "name": "", - "description": "", + "name": "RSS-voogud", + "description": "Jälgi ja kuva üht või enamat üldist RSS-, ATOM- või JSON-voogu", "option": { "feedUrls": { - "label": "" + "label": "Voo URL-id" }, "enableRtl": { - "label": "" + "label": "Luba RTL" }, "textLinesClamp": { - "label": "" + "label": "Kirjelduse ridade piiramine" }, "maximumAmountPosts": { - "label": "" + "label": "Postituste arvu limiit" }, "hideDescription": { "label": "" @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "", @@ -4128,11 +4175,11 @@ }, "widgetPreview": { "toggle": { - "enabled": "", - "disabled": "" + "enabled": "Redigeerimisrežiim lubatud", + "disabled": "Redigeerimisrežiim keelatud" }, "dimensions": { - "title": "" + "title": "Muuda mõõtmeid" } }, "board": { @@ -4154,70 +4201,70 @@ "edit": { "notification": { "success": { - "title": "", - "message": "" + "title": "Muudatused rakendati edukalt", + "message": "Töölaud salvestati edukalt" }, "error": { - "title": "", - "message": "" + "title": "Muudatusi ei saa rakendada", + "message": "Töölauda ei saanud salvestada" } }, "confirmLeave": { - "title": "", - "message": "" + "title": "Salvestamata muudatused", + "message": "Teil on salvestamata muudatusi, kas olete kindel, et soovite lahkuda?" } }, "oldImport": { - "label": "", + "label": "Impordi Homarr'ist enne 1.0.0", "notification": { "success": { - "title": "", - "message": "" + "title": "Importimine õnnestus", + "message": "Töölaud imporditi edukalt" }, "error": { - "title": "", - "message": "" + "title": "Importimine ebaõnnestus", + "message": "Töölauda ei saanud importida, vaadake logisid täpsema teabe saamiseks" } }, "form": { "file": { - "label": "", - "invalidError": "" + "label": "Vali JSON fail", + "invalidError": "Vigane seadistusfail" }, "apps": { - "label": "", + "label": "Rakendused", "avoidDuplicates": { - "label": "", - "description": "" + "label": "Väldi duplikaate", + "description": "Ignoreerib rakendusi, kui sama href'iga rakendus on juba olemas" }, "onlyImportApps": { - "label": "", - "description": "" + "label": "Impordi ainult rakendusi", + "description": "Lisab ainult rakendused, töölaud tuleb käsitsi uuesti luua" } }, "name": { - "label": "" + "label": "Töölaua nimi" }, "screenSize": { - "label": "", + "label": "Ekraani suurus", "description": "", "option": { - "sm": "", - "md": "", - "lg": "" + "sm": "Väike", + "md": "Keskmine", + "lg": "Suur" } }, "sidebarBehavior": { - "label": "", - "description": "", + "label": "Külgriba käitumine", + "description": "Külgribad eemaldati versioonis 1.0, saate valida, mis peaks juhtuma neis olevate üksustega.", "option": { "lastSection": { - "label": "", - "description": "" + "label": "Viimane jaotis", + "description": "Külgriba kuvatakse viimase jaotise all" }, "removeItems": { - "label": "", - "description": "" + "label": "Eemalda üksused", + "description": "Külgribal olevad üksused eemaldatakse" } } } @@ -4232,19 +4279,19 @@ }, "field": { "pageTitle": { - "label": "" + "label": "Lehe pealkiri" }, "metaTitle": { - "label": "" + "label": "Meta-pealkiri" }, "logoImageUrl": { - "label": "" + "label": "Logo pildi URL" }, "faviconImageUrl": { - "label": "" + "label": "Favicon'i pildi URL" }, "backgroundImageUrl": { - "label": "", + "label": "Taustapildi URL", "placeholder": "", "group": { "your": "", @@ -4252,60 +4299,60 @@ } }, "backgroundImageAttachment": { - "label": "", + "label": "Taustapildi kinnitus", "option": { "fixed": { - "label": "", - "description": "" + "label": "Fikseeritud", + "description": "Taust püsib samas asendis." }, "scroll": { - "label": "", - "description": "" + "label": "Keritav", + "description": "Taust kerib koos hiirega." } } }, "backgroundImageRepeat": { - "label": "", + "label": "Taustapildi kordamine", "option": { "repeat": { - "label": "", - "description": "" + "label": "Korda", + "description": "Pilti korratakse nii palju kui vaja, et katta kogu taustapildi värvimisala." }, "no-repeat": { - "label": "", - "description": "" + "label": "Ära korda", + "description": "Pilti ei korrata ja see ei pruugi täita kogu ruumi." }, "repeat-x": { - "label": "", - "description": "" + "label": "Korda X", + "description": "Sama nagu 'Korda', kuid ainult horisontaalteljel." }, "repeat-y": { - "label": "", - "description": "" + "label": "Korda Y", + "description": "Sama nagu 'Korda', kuid ainult vertikaalteljel." } } }, "backgroundImageSize": { - "label": "", + "label": "Taustapildi suurus", "option": { "cover": { - "label": "", - "description": "" + "label": "Katab", + "description": "Skaalab pildi võimalikult väikeseks, et katta kogu aken, kärpides liigset ruumi." }, "contain": { - "label": "", - "description": "" + "label": "Sisaldab", + "description": "Skaalab pildi võimalikult suureks oma konteineri sees, ilma et pilti kärbitaks või venitataks." } } }, "primaryColor": { - "label": "" + "label": "Peamine värv" }, "secondaryColor": { - "label": "" + "label": "Teisene värv" }, "opacity": { - "label": "" + "label": "Läbipaistmatus" }, "iconColor": { "label": "" @@ -4314,11 +4361,11 @@ "label": "" }, "customCss": { - "label": "", - "description": "", + "label": "Kohandatud css sellele töölauale", + "description": "Kohanda oma juhtpaneeli CSS-i abil, soovitatav ainult kogenud kasutajatele", "customClassesAlert": { - "title": "", - "description": "" + "title": "Kohandatud klassid", + "description": "Saate lisada kohandatud klasse oma töölaua üksustele iga üksuse täpsemates valikutes ja kasutada neid ülaltoodud kohandatud CSS-is." } }, "disableStatus": { @@ -4326,7 +4373,7 @@ "description": "" }, "columnCount": { - "label": "" + "label": "Veergude arv" }, "itemRadius": { "label": "", @@ -4340,25 +4387,25 @@ } }, "name": { - "label": "" + "label": "Nimi" }, "isPublic": { - "label": "", - "description": "" + "label": "Avalik", + "description": "Avalikud töölauad on kõigile juurdepääsetavad, isegi ilma kontota." } }, "content": { - "metaTitle": "" + "metaTitle": "{boardName} töölaud" }, "setting": { - "title": "", + "title": "{boardName} töölaua seaded", "section": { "general": { - "title": "", - "unrecognizedLink": "" + "title": "Üldine", + "unrecognizedLink": "Antud linki ei tuvastatud ja seda ei kuvata eelvaates, see võib siiski töötada." }, "layout": { - "title": "", + "title": "Paigutus", "responsive": { "title": "", "action": { @@ -4367,72 +4414,72 @@ } }, "background": { - "title": "" + "title": "Taust" }, "appearance": { "title": "" }, "customCss": { - "title": "" + "title": "Kohandatud css" }, "behavior": { "title": "" }, "access": { - "title": "", + "title": "Juurdepääsukontroll", "permission": { "item": { "view": { - "label": "" + "label": "Vaata töölauda" }, "modify": { - "label": "" + "label": "Muuda töölauda" }, "full": { - "label": "" + "label": "Täielik juurdepääs" } } } }, "dangerZone": { - "title": "", + "title": "Ohtlik tsoon", "action": { "rename": { - "label": "", - "description": "", - "button": "", + "label": "Nimeta töölaud ümber", + "description": "Nime muutmine lõhub kõik selle töölaua lingid.", + "button": "Muuda nime", "modal": { - "title": "" + "title": "Nimeta töölaud ümber" } }, "visibility": { - "label": "", + "label": "Muuda töölaua nähtavust", "description": { - "public": "", - "private": "" + "public": "See töölaud on praegu avalik.", + "private": "See töölaud on praegu privaatne." }, "button": { - "public": "", - "private": "" + "public": "Muuda privaatseks", + "private": "Muuda avalikuks" }, "confirm": { "public": { - "title": "", - "description": "" + "title": "Muuda töölaud privaatseks", + "description": "Kas olete kindel, et soovite selle töölaua privaatseks muuta? See peidab töölaua avalikkuse eest. Lingid külaliskasutajatele lõhutakse." }, "private": { - "title": "", - "description": "" + "title": "Muuda töölaud avalikuks", + "description": "Kas olete kindel, et soovite selle töölaua avalikuks muuta? See muudab töölaua kõigile juurdepääsetavaks." } } }, "delete": { - "label": "", - "description": "", - "button": "", + "label": "Kustuta see töölaud", + "description": "Kui olete töölaua kustutanud, pole seda võimalik tagasi võtta. Palun olge kindel.", + "button": "Kustuta see töölaud", "confirm": { - "title": "", - "description": "" + "title": "Kustuta töölaud", + "description": "Kas olete kindel, et soovite selle töölaua kustutada? See kustutab töölaua ja kogu selle sisu jäädavalt." } } } @@ -4487,15 +4534,15 @@ } }, "management": { - "metaTitle": "", + "metaTitle": "Haldus", "title": { - "morning": "", - "afternoon": "", - "evening": "" + "morning": "Tere hommikust, {username}", + "afternoon": "Tere päevast, {username}", + "evening": "Tere õhtust, {username}" }, "notFound": { - "title": "", - "text": "" + "title": "Ei leitud", + "text": "Taotletud ressurssi ei leitud" }, "error": { "title": "", @@ -4504,40 +4551,40 @@ }, "navbar": { "items": { - "home": "", - "boards": "", - "apps": "", - "integrations": "", + "home": "Kodu", + "boards": "Töölauad", + "apps": "Rakendused", + "integrations": "Integratsioonid", "customWidgets": "", - "searchEngies": "", - "medias": "", + "searchEngies": "Otsingumootorid", + "medias": "Meedia", "users": { - "label": "", + "label": "Kasutajad", "items": { - "manage": "", - "invites": "", - "groups": "" + "manage": "Halda", + "invites": "Kutsed", + "groups": "Rühmad" } }, "tools": { - "label": "", + "label": "Tööriistad", "items": { - "docker": "", + "docker": "Docker", "kubernetes": "", - "logs": "", + "logs": "Logid", "api": "", "certificates": "", - "tasks": "", + "tasks": "Ülesanded", "backup": "" } }, - "settings": "", + "settings": "Seaded", "help": { - "label": "", + "label": "Abi", "items": { - "documentation": "", - "submitIssue": "", - "discord": "", + "documentation": "Dokumentatsioon", + "submitIssue": "Esita probleem", + "discord": "Kogukonna Discord", "sourceCode": "" } }, @@ -5329,6 +5376,7 @@ }, "remove": { "label": "", + "confirm": "", "notification": { "success": { "title": "", diff --git a/packages/translation/src/lang/fi.json b/packages/translation/src/lang/fi.json index 952ad3fbb..5db39e6f4 100644 --- a/packages/translation/src/lang/fi.json +++ b/packages/translation/src/lang/fi.json @@ -8,9 +8,9 @@ "action": { "scratch": "", "importOldmarr": "", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Palauta SQLite-varmuuskopiosta", + "restoreSqliteDescription": "Lataa täysi SQLite-tietokantavarmuuskopio aiemmasta Homarr-instanssista. Tämä palauttaa kaikki paneelit, käyttäjät, sovellukset, integraatiot ja asetukset.", + "backToOptions": "← Takaisin asennusvaihtoehtoihin" } }, "import": { @@ -199,8 +199,8 @@ "label": "Käytä ping-kuvakkeita" }, "enableRightClickOnWidgets": { - "label": "", - "description": "" + "label": "Käytä hiiren kakkospainiketta widgeteissä", + "description": "Näytä Homarrin kontekstivalikko, kun napsautat hiiren kakkospainikkeella widgetiä. Poista käytöstä käyttääksesi selaimen oletusvalikkoa (esim. \"Avaa linkki uudessa välilehdessä\")." }, "defaultSearchEngine": { "label": "Oletushakukone" @@ -691,206 +691,206 @@ "customWidget": { "page": { "list": { - "title": "", - "noResults": "", - "loading": "" + "title": "Mukautetut widgetit", + "noResults": "Ei vielä mukautettuja widgettejä. Luo ensimmäinen!", + "loading": "Ladataan..." }, "create": { - "title": "", - "subtitle": "" + "title": "Luo mukautettu widget", + "subtitle": "Määritä API-URL, todennus ja miten vastaustiedot näytetään." }, "edit": { - "title": "" + "title": "Muokkaa mukautettua widgettiä" } }, "action": { - "create": "", - "import": "", - "save": "", - "delete": "", - "deleteConfirm": "", - "export": "", - "addMapping": "", - "addColumn": "", - "edit": "", - "removeMapping": "", - "removeColumn": "", - "addItem": "", - "removeItem": "", - "addBar": "", - "duplicate": "", - "copyAiPrompt": "", - "enable": "", - "disable": "", - "menu": "" + "create": "Luo", + "import": "Tuo", + "save": "Tallenna", + "delete": "Poista mukautettu widget", + "deleteConfirm": "Haluatko varmasti poistaa \"{name}\"? Tätä toimintoa ei voi peruuttaa.", + "export": "Vie", + "addMapping": "Lisää kartoitus", + "addColumn": "Lisää sarake", + "edit": "Muokkaa", + "removeMapping": "Poista kartoitus", + "removeColumn": "Poista sarake", + "addItem": "Lisää kohde", + "removeItem": "Poista kohde", + "addBar": "Lisää palkki", + "duplicate": "Monista", + "copyAiPrompt": "Kopioi AI-kehoteprompt", + "enable": "Ota käyttöön", + "disable": "Poista käytöstä", + "menu": "Toiminnot" }, "field": { - "name": "", - "description": "", - "iconUrl": "", - "url": "", - "authType": "", - "headerName": "", - "method": "", - "requestBody": "", - "displayType": "", - "jsonPath": "", - "jsonPathHint": "", - "label": "", - "unit": "", - "mappings": "", - "tablePath": "", - "tablePathHint": "", - "columns": "", - "header": "", - "items": "", - "gridColumns": "", - "cardStyle": "", - "bars": "", - "valuePath": "", - "maxPath": "", - "showPercentage": "", - "barSize": "", - "goodValues": "", - "dotSize": "", - "valueSize": "", - "labelPosition": "", - "kvLayout": "", - "striped": "", - "compact": "", - "maxHeight": "", - "color": "", - "buttonLabel": "", - "buttonColor": "", - "confirmText": "", - "confirmTextHint": "", - "successMessage": "", - "successMessageHint": "", - "enabled": "", + "name": "Nimi", + "description": "Kuvaus", + "iconUrl": "Kuvakkeen URL-osoite", + "url": "URL", + "authType": "Tunnistautumistyyppi", + "headerName": "Otsikko/kyselyparametrin nimi", + "method": "Menetelmä", + "requestBody": "Pyynnön runko", + "displayType": "Näyttötyyppi", + "jsonPath": "JSON-polku", + "jsonPathHint": "Käytä JSONPath-syntaksia arvojen poimimiseen, esim. $.data.temperature tai $.items[0].name", + "label": "Tunniste", + "unit": "Yksikkö", + "mappings": "Kartoitukset", + "tablePath": "Taulukon JSON-polku", + "tablePathHint": "Polku vastauksen taulukkoon, esim. $.data.items", + "columns": "Sarakkeet", + "header": "Otsikko", + "items": "Kohteet", + "gridColumns": "Ruudukon sarakkeet", + "cardStyle": "Kortin tyyli", + "bars": "Palkit", + "valuePath": "Arvon JSON-polku", + "maxPath": "Maksimiarvon JSON-polku", + "showPercentage": "Näytä prosenttiosuus", + "barSize": "Palkin koko", + "goodValues": "Hyvät arvot (pilkuin eroteltuina)", + "dotSize": "Pisteen koko", + "valueSize": "Arvon koko", + "labelPosition": "Tunnisteen sijainti", + "kvLayout": "Asettelu", + "striped": "Raidalliset rivit", + "compact": "Tiivis tila", + "maxHeight": "Maksimikorkeus (px)", + "color": "Väri", + "buttonLabel": "Painikkeen teksti", + "buttonColor": "Painikkeen väri", + "confirmText": "Vahvistusteksti", + "confirmTextHint": "Jos asetettu, vahvistusvalintaikkuna tulee esiin ennen pyynnön suorittamista", + "successMessage": "Onnistumisviesti", + "successMessageHint": "Viesti, joka näytetään onnistuneen suorituksen jälkeen", + "enabled": "Käytössä", "template": { - "label": "", - "description": "" + "label": "JSX-mallipohja", + "description": "Mantine JSX -mallipohja. Käytä vastauskenttiä datan sidonnoilla (esim. data.name). Käytä vain sallittuja komponentteja. Kielletyt: constructor, __proto__, eval, Function, window, document." } }, "placeholder": { - "exampleLabel": "", - "exampleLabelShort": "", - "exampleHeader": "", - "exampleUnit": "", - "iconUrl": "", - "url": "", - "headerName": "", - "jsonPath": "", - "tablePath": "", - "columnJsonPath": "", - "valuePath": "", - "maxPath": "", - "goodValues": "", - "color": "" + "exampleLabel": "CPU-lämpötila", + "exampleLabelShort": "CPU-lämpö", + "exampleHeader": "Nimi", + "exampleUnit": "°C", + "iconUrl": "https://...", + "url": "https://api.example.com/api/v1/status", + "headerName": "X-API-Key", + "jsonPath": "$.data.value", + "tablePath": "$.data.items", + "columnJsonPath": "$.nimi", + "valuePath": "$.data.used", + "maxPath": "$.data.total", + "goodValues": "online, true, up", + "color": "sininen" }, "cardStyleOption": { - "filled": "", - "outline": "", - "subtle": "" + "filled": "Täytetty", + "outline": "Ääriviiva", + "subtle": "Hienovarainen" }, "layoutOption": { - "list": "", - "grid": "" + "list": "Luettelo", + "grid": "Ruudukko" }, "sizeOption": { - "sm": "", - "md": "", - "lg": "", - "xl": "" + "sm": "Pieni", + "md": "Keskikokoinen", + "lg": "Suuri", + "xl": "Erittäin suuri" }, "labelPositionOption": { - "above": "", - "below": "" + "above": "Yläpuolella", + "below": "Alapuolella" }, "fieldset": { - "general": "", - "connection": "", - "display": "" + "general": "Yleiset", + "connection": "API-yhteys", + "display": "Näyttöasetukset" }, "displayTypeDescription": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Näytä yksi poimittu arvo tunnisteella ja yksiköllä", + "keyValue": "Näytä useita tunnisteellisia arvoja vierekkäin", + "table": "Näytä tietorivit taulukkomuodossa", + "statGrid": "Värilliset tilastokortit ruudukossa – kuten Pi-Hole- tai Speedtest-widgetit", + "progressBars": "Edistymispalkit, jotka näyttävät käyttöasteen tai valmistumisen – levylle, muistille, kiintiöille", + "statusIndicator": "Värilliset tilapisteet, jotka näyttävät online/offline- tai terveydentilan", + "countGrid": "Tiiviit numero + tunniste -laskurit tiukassa ruudukossa", + "raw": "Muotoiltu JSON-tuloste vianetsintään", + "actionButton": "Painike, joka laukaisee pyynnön napsautettaessa", + "customJsx": "Mukautettu JSX-asettelu käyttäen sallittuja Mantine-komponentteja täydellä API-tietojen sidonnalla" }, "method": { - "GET": "", - "POST": "", - "PUT": "", - "DELETE": "", - "PATCH": "" + "GET": "GET", + "POST": "POST", + "PUT": "PUT", + "DELETE": "DELETE", + "PATCH": "PATCH" }, "authType": { - "none": "", - "bearer": "", - "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "none": "Ei mitään", + "bearer": "Bearer-tunniste", + "basic": "Basic-todennus", + "apiKeyHeader": "API-avain (otsikko)", + "apiKeyQuery": "API-avain (kysely)" }, "displayType": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Yksittäinen arvo", + "keyValue": "Avain-arvo", + "table": "Taulukko", + "statGrid": "Tilastoruudukko", + "progressBars": "Edistymispalkit", + "statusIndicator": "Tilan ilmaisin", + "countGrid": "Laskuriruudukko", + "raw": "Raaka JSON", + "actionButton": "Toimintopainike", + "customJsx": "Mukautettu JSX" }, "secret": { - "apiKey": "", - "username": "", - "password": "", - "savedPlaceholder": "" + "apiKey": "API-avain / token", + "username": "Käyttäjätunnus", + "password": "Salasana", + "savedPlaceholder": "••••••• (tallennettu, jätä tyhjäksi säilyttääksesi)" }, "preview": { - "title": "", - "test": "", - "hint": "", - "rawResponse": "" + "title": "Esikatselu", + "test": "Testaa", + "hint": "Napsauta Testaa nähdäksesi API-vastauksen nykyisillä asetuksillasi.", + "rawResponse": "Raaka JSON-vastaus" }, "notification": { - "created": "", - "updated": "", - "deleted": "", - "imported": "", - "aiPromptCopied": "", - "aiPromptDescription": "", - "aiPromptCopy": "", - "aiPromptNoResponse": "", - "aiPromptCopyError": "", - "createError": "", - "updateError": "", - "importError": "", - "exportError": "", - "duplicated": "", - "duplicateError": "", - "toggleError": "", - "deleteError": "", - "previewError": "", - "executed": "", - "executeError": "" + "created": "Widget \"{name}\" luotiin onnistuneesti.", + "updated": "Widget \"{name}\" päivitettiin onnistuneesti.", + "deleted": "Widget \"{name}\" poistettiin.", + "imported": "Widget tuotiin onnistuneesti.", + "aiPromptCopied": "AI-kehoteprompt kopioitu leikepöydälle", + "aiPromptDescription": "Kopioi valmis kehoteprompt liitettäväksi mihin tahansa AI-chatbottiin (ChatGPT, Claude, Gemini...). Se sisältää täyden widget-skeeman ja API-vastauksesi, jotta AI voi luoda sinulle tuotavissa olevan JSON-asetuksen.", + "aiPromptCopy": "Kopioi leikepöydälle", + "aiPromptNoResponse": "Vinkki: Suorita testi ensin sisällyttääksesi API-vastauksesi kehotepromptiin parempien tulosten saamiseksi.", + "aiPromptCopyError": "Kehotepromptin kopiointi leikepöydälle epäonnistui. Selaimesi ei ehkä tue tätä ominaisuutta.", + "createError": "Widgetin luonti epäonnistui. Tarkista, että API-päätepisteesi on tavoitettavissa.", + "updateError": "Widgetin päivitys epäonnistui. Muutoksiasi ei tallennettu.", + "importError": "Widgetin tuonti epäonnistui. Varmista, että tiedosto on kelvollinen mukautetun widgetin JSON-vienti.", + "exportError": "Widgetin vienti epäonnistui.", + "duplicated": "Widget \"{name}\" kopioitiin.", + "duplicateError": "Widgetin kopiointi epäonnistui.", + "toggleError": "Widgetin tilan vaihto epäonnistui.", + "deleteError": "Widgetin poisto epäonnistui.", + "previewError": "Esikatselun nouto epäonnistui. Tarkista URL ja yritä uudelleen.", + "executed": "Toiminto suoritettu onnistuneesti.", + "executeError": "Toiminto epäonnistui: {error}" }, "table": { - "name": "", - "url": "", - "display": "" + "name": "Nimi", + "url": "URL", + "display": "Näyttö" }, "widget": { - "disabled": "" + "disabled": "Tämä widget on poistettu käytöstä" } }, "integration": { @@ -1020,14 +1020,14 @@ "firewall": "Palomuuri", "timetable": "Aikataulu", "photoService": "Valokuvat", - "documents": "", + "documents": "Asiakirjat", "notes": "Muistiinpanot", "mediaMonitoring": "Valvonta", "speedtest": "Nopeustestaus", "analytics": "Analytiikka", - "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "vpn": "VPN", + "mediaLibrary": "Mediakirjasto", + "uptimeMonitoring": "Käytettävyysvalvonta" }, "testConnection": { "action": { @@ -1290,12 +1290,12 @@ "newLabel": "" }, "patchmonApiKey": { - "label": "", - "newLabel": "" + "label": "API-avain", + "newLabel": "Uusi API-avain" }, "patchmonApiSecret": { - "label": "", - "newLabel": "" + "label": "API-salaisuus", + "newLabel": "Uusi API-salaisuus" }, "githubAppId": { "label": "Sovellustunniste", @@ -1310,8 +1310,8 @@ "newLabel": "Uusi yksityinen avain" }, "slug": { - "label": "", - "newLabel": "" + "label": "Tilasivun polkutunnus", + "newLabel": "Uusi tilasivun polkutunnus" } } }, @@ -1321,40 +1321,40 @@ "full": "Integraatioiden hallinta" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Itsepalveluperiaatteella toimiva äänikirja- ja podcast-palvelin" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Itsepalveluperiaatteella toimiva musiikin suoratoistopalvelin Subsonic API -yhteensopivuudella" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Itsepalveluperiaatteella toimiva käytettävyysvalvonta julkisilla tilasivuilla", "secret": { "slug": { - "description": "" + "description": "Julkisen tilasivusi polkutunnus. Oletuksena \"default\", jos ei asetettu." }, "apiKey": { - "description": "" + "description": "Valinnainen API-avain todennettua /metrics-käyttöä varten" } } }, "traefik": { - "name": "", - "description": "" + "name": "Traefik", + "description": "Pilvinatiivi käänteinen välityspalvelin ja kuormantasaaja" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Asiakirjojen hallintajärjestelmä skannattujen dokumenttien arkistointiin ja järjestelyyn" }, "patchmon": { - "name": "", - "description": "" + "name": "PatchMon", + "description": "Paikkaustenhallinta ja -valvonta Linux-isännille" }, "bazarr": { - "name": "", - "description": "" + "name": "Bazarr", + "description": "Sonarrin ja Radarrin kumppanisovellus, joka hallinnoi ja lataa tekstityksiä" } }, "media": { @@ -1409,7 +1409,7 @@ "add": "Lisää", "apply": "", "backToOverview": "Palaa yleisnäkymään", - "skip": "", + "skip": "Ohita", "change": "Vaihda", "create": "Luo", "createAnother": "Luo ja aloita uudelleen", @@ -1431,16 +1431,16 @@ "checkLogs": "", "tryAgain": "", "loading": "", - "show": "", - "hide": "" + "show": "Näytä", + "hide": "Piilota" }, "here": "", "iconPicker": { "label": "Kuvakkeen URL-osoite", "header": "Suodata kuvakkeita syöttämällä nimi tai objekti... Homarr etsii {countIcons} kuvakkeesta.", - "headerLoading": "", - "noResults": "", - "error": "" + "headerLoading": "Kirjoita hakeaksesi kuvakkeita…", + "noResults": "Ei kuvakkeita haulla \"{search}\".", + "error": "Kuvakkeiden lataaminen epäonnistui." }, "colorScheme": { "options": { @@ -1492,7 +1492,7 @@ "switchToDarkMode": "", "switchToLightMode": "", "management": "Hallinta", - "docker": "", + "docker": "Docker", "preferences": "Asetuksesi", "logout": "Kirjaudu ulos", "login": "", @@ -1602,7 +1602,7 @@ "label": { "create": "", "changePosition": "", - "settings": "" + "settings": "Asetukset" } }, "openAllInNewTabs": { @@ -1623,15 +1623,15 @@ "menu": { "label": { "settings": "Asetukset", - "refresh": "", - "options": "", - "actions": "" + "refresh": "Päivitä", + "options": "Asetukset", + "actions": "Toiminnot" }, "status": { - "success": "", - "error": "", - "loading": "", - "idle": "" + "success": "OK", + "error": "Virhe", + "loading": "Ladataan", + "idle": "Toimeton" } }, "create": { @@ -1691,11 +1691,11 @@ }, "widget": { "integrationSelect": { - "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "configureIntegrationFirst": "Yhdistä integraatio ensin", + "loading": "Ladataan...", + "placeholder": "Valitse vaihtoehto", + "noResults": "Ei hakutuloksia", + "loadError": "Vaihtoehtojen lataus epäonnistui" }, "app": { "name": "Sovellus", @@ -1776,7 +1776,7 @@ "label": "Avaa uudessa välilehdessä" }, "withBorder": { - "label": "" + "label": "Näytä reunus" }, "items": { "label": "", @@ -1785,11 +1785,11 @@ } }, "archiveTeamWarrior": { - "name": "", - "description": "", + "name": "ArchiveTeam Warrior", + "description": "Seuraa ArchiveTeam Warriorin tilaa, projekteja ja aktiivisia arkistointitöitä.", "option": { "showBroadcastMessage": { - "label": "" + "label": "Näytä yleislähetysviestit" } } }, @@ -1907,14 +1907,14 @@ "description": "Määritä ISO 8601 -standardin mukainen päiväyksen muoto (korvaa muut valinnat)." }, "showWeather": { - "label": "", - "description": "" + "label": "Näytä sää", + "description": "Näytä pieni animoitu sääkuvake ja lämpötila kortin kulmassa" }, "weatherLocation": { - "label": "" + "label": "Sään sijainti" }, "isWeatherFormatFahrenheit": { - "label": "" + "label": "Käytä Fahrenheit-asteita" } } }, @@ -1944,7 +1944,7 @@ "noStation": "", "option": { "baseUrl": { - "label": "" + "label": "Search.ch URL" }, "station": { "label": "" @@ -1976,8 +1976,8 @@ "clear": "", "heading": "", "align": "", - "directionLtr": "", - "directionRtl": "", + "directionLtr": "Aseta tekstin suunta vasemmalta oikealle", + "directionRtl": "Aseta tekstin suunta oikealta vasemmalle", "blockquote": "", "horizontalLine": "", "bulletList": "", @@ -2268,7 +2268,7 @@ "sunset": "Auringonlasku", "maxWindSpeed": "Tuulen nopeus: {maxWindSpeed} {unit}", "maxWindGusts": "Puuskien nopeus: {maxWindSpeed} {unit}", - "humidity": "" + "humidity": "Kosteus: {humidity}%" }, "kind": { "clear": "", @@ -2328,9 +2328,9 @@ "label": "" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "Näkyvät tallennusvolyymit", + "description": "Käytettävissä vain, kun kaikki valitut integraatiot ovat Synology. Jätä tyhjäksi näyttääksesi kaikki havaitut tallennusvolyymit.", + "placeholder": "Valitse tallennusvolyymit" }, "defaultTab": { "label": "" @@ -2412,7 +2412,7 @@ "description": "Konttiesi tilastot (tämä widget voidaan lisätä vain ylläpito-oikeuksilla)", "option": { "columns": { - "label": "" + "label": "Näytettävät sarakkeet" }, "enableRowSorting": { "label": "Salli kohteiden järjestys" @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Käänteinen järjestys" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2468,40 +2479,40 @@ } }, "vpn": { - "name": "", - "description": "", - "serviceUnavailable": "", + "name": "VPN", + "description": "Yleiskatsaus VPN-yhteyksistäsi", + "serviceUnavailable": "VPN ei ole käytettävissä", "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Valvo UPS-laitteiden tilaa NUT-palvelimen kautta", "option": { "showBattery": { - "label": "" + "label": "Näytä akku" }, "showLoad": { - "label": "" + "label": "Näytä kuorma" }, "showVoltage": { - "label": "" + "label": "Näytä jännite" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Verkkovirralla", + "onBattery": "Akulla", + "lowBattery": "Akku vähissä", + "charging": "Latautuu", + "unknown": "Tuntematon" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Toiminta-aika", + "load": "Kuorma", + "input": "Syöttö", + "output": "Lähtö" }, "error": { - "internalServerError": "" + "internalServerError": "UPS-tietojen haku epäonnistui" } }, "tracearr": { @@ -2584,77 +2595,77 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Viimeiset 30 päivää", + "month": "Tässä kuussa", + "lastMonth": "Viime kuussa" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Tapahtuma", + "description": "Näytä tietyn tapahtuman esiintymiskerrat yhteensä", + "placeholder": "Valitse tapahtuma", + "loading": "Ladataan tapahtumia...", + "noEvents": "Tapahtumia ei löytynyt", + "none": "Ei tapahtumaa", + "configureWebsiteFirst": "Valitse ensin verkkosivusto ladataksesi tapahtumat" }, "chartType": { - "label": "", - "description": "", + "label": "Kaavion tyyppi", + "description": "Kaavion näyttötyyli", "option": { - "bar": "", - "sparkline": "" + "bar": "Pylväskaavio", + "sparkline": "Sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Kaavion tyyli", + "description": "Miten tapahtumasarjat näytetään kaaviossa", "option": { - "grouped": "", - "overlay": "" + "grouped": "Vierekkäin", + "overlay": "Päällekkäin (osajoukko)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Näkymä", + "description": "Mitä widgetin rungossa näytetään", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Kaavio", + "events": "Tapahtumakaavio", + "topPages": "Suosituimmat sivut", + "topReferrers": "Suosituimmat viittaajat" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Tapahtumat", + "description": "Valitse yksi tai useampi tapahtuma kaavioon", + "placeholder": "Valitse tapahtumia...", + "loading": "Ladataan tapahtumia...", + "noEvents": "Tapahtumia ei löytynyt", + "configureWebsiteFirst": "Valitse ensin verkkosivusto ladataksesi tapahtumat" }, "topCount": { - "label": "", + "label": "Näytettävien kohteiden määrä", "description": "Näytettävien huippukohteiden määrä (enintään 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "tapahtumaa", + "label": "tapahtumaa" }, "topPages": { - "direct": "" + "direct": "Suora" }, "topReferrers": { - "direct": "" + "direct": "Suora" }, "events": { - "selectPrompt": "" + "selectPrompt": "Valitse tapahtumat kaavioitavaksi" }, "error": { "noIntegration": "Umami-integraatiota ei ole määritetty", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noWebsite": "Verkkosivustoa ei ole määritetty", + "noData": "Ei tietoja saatavilla", + "internalServerError": "Umami-tietojen haku epäonnistui" } }, "common": { @@ -2725,18 +2736,33 @@ "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", "name": "", "id": "", - "status": "", - "directPlay": "", - "transcoding": "", - "paused": "", - "remaining": "", + "status": "Tila", + "directPlay": "Muuntamaton toisto", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", + "transcoding": "Transkoodaus", + "paused": "Keskeytetty", + "remaining": "{minutes} min jäljellä", "metadata": { "title": "", "video": { @@ -2758,235 +2784,235 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Yleiskatsaus Paperless-ngx-dokumenttiarkistostasi", + "documentsTotal": "Dokumentteja yhteensä", + "documentsInbox": "Saapuneet", + "correspondents": "Lähettäjät", + "tags": "Tunnisteet", + "documentTypes": "Dokumenttityypit", + "inboxRatio": "Saapuneiden suhde", + "inbox": "saapuneet", + "total": "yhteensä", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Näytä saapuneiden suhde", + "description": "Näytä saapuneiden ja kaikkien dokumenttien suhde hero-osiossa" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Näytä saapuneiden rengas", + "description": "Näytä edistymisrengas saapuneiden suhteen ohella" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Näytä dokumenttien kokonaismäärä", + "description": "Näytä dokumenttien kokonaismäärä arkistossasi" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Näytä saapuneiden määrä", + "description": "Näytä käsittelemättömien dokumenttien määrä saapuneissa" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Näytä lähettäjät", + "description": "Näytä lähettäjien kokonaismäärä" }, "showTags": { - "label": "", - "description": "" + "label": "Näytä tunnisteet", + "description": "Näytä tunnisteiden kokonaismäärä" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Näytä dokumenttityypit", + "description": "Näytä dokumenttityyppien kokonaismäärä" } }, "error": { - "internalServerError": "" + "internalServerError": "Paperless-ngx-tietojen haku epäonnistui" } }, "patchmon": { - "name": "", - "description": "", - "title": "", - "totalHosts": "", - "hostsNeedingUpdates": "", - "securityUpdates": "", - "upToDateHosts": "", - "hostsWithSecurityUpdates": "", - "recentUpdates24h": "", - "totalOutdatedPackages": "", - "totalRepos": "", - "osDistribution": "", - "compliance": "", - "complianceRatio": "", - "lastUpdated": "", + "name": "PatchMon", + "description": "Yleiskatsaus isäntien päivitystilanteesta PatchMonista", + "title": "PatchMon-tilastot", + "totalHosts": "Isännät yhteensä", + "hostsNeedingUpdates": "Päivitystä tarvitsevat", + "securityUpdates": "Tietoturvapäivitykset", + "upToDateHosts": "Ajan tasalla olevat isännät", + "hostsWithSecurityUpdates": "Isännät, joilla on tietoturvapäivityksiä", + "recentUpdates24h": "Päivitykset (24 h)", + "totalOutdatedPackages": "Vanhentuneet paketit", + "totalRepos": "Pakettivarastot", + "osDistribution": "Käyttöjärjestelmien jakauma", + "compliance": "Päivityskattavuus", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Päivitetty {time}", "option": { "showTotalHosts": { - "label": "", - "description": "" + "label": "Näytä isännät yhteensä", + "description": "Näytä valvottujen isäntien kokonaismäärä" }, "showHostsNeedingUpdates": { - "label": "", - "description": "" + "label": "Näytä päivitystä tarvitsevat isännät", + "description": "Näytä isännät, joilla on vähintään yksi vanhentunut paketti" }, "showSecurityUpdates": { - "label": "", - "description": "" + "label": "Näytä tietoturvapäivitykset", + "description": "Näytä saatavilla olevien tietoturvapäivitysten kokonaismäärä" }, "showUpToDateHosts": { - "label": "", - "description": "" + "label": "Näytä ajan tasalla olevat isännät", + "description": "Näytä isännät, joissa ei ole vanhentuneita paketteja" }, "showHostsWithSecurityUpdates": { - "label": "", - "description": "" + "label": "Näytä isännät, joilla on tietoturvapäivityksiä", + "description": "Näytä isännät, jotka tarvitsevat tietoturvakorjauksia" }, "showRecentUpdates24h": { - "label": "", - "description": "" + "label": "Näytä viimeaikaiset päivitykset (24 h)", + "description": "Näytä viimeisen 24 tunnin aikana asennettujen päivitysten määrä" }, "showTotalOutdatedPackages": { - "label": "", - "description": "" + "label": "Näytä vanhentuneet paketit", + "description": "Näytä vanhentuneiden pakettien kokonaismäärä kaikissa isännissä" }, "showTotalRepos": { - "label": "", - "description": "" + "label": "Näytä repositoriot", + "description": "Näytä valvottavien aktiivisten repositorioiden määrä" }, "enableThresholdColors": { - "label": "", - "description": "" + "label": "Ota käyttöön kynnysarvovärit", + "description": "Väritä tilastoarvot vihreäksi, keltaiseksi tai punaiseksi vakavuusesiasetusten perusteella" }, "useCustomThresholds": { - "label": "", - "description": "" + "label": "Edistyneet kynnysarvot", + "description": "Mukauta varoitus- ja kriittiset kynnysarvot tilastoittain käyttäen absoluuttisia määriä tai prosenttiosuutta isäntien kokonaismäärästä" }, "thresholdMode": { "option": { - "absolute": "", - "percent": "" + "absolute": "Absoluuttinen määrä", + "percent": "Prosenttia isäntien kokonaismäärästä" } }, "hostsNeedingUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Päivityksiä tarvitsevien kynnysarvotila", + "description": "Vertaa päivitystarpeiden määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Päivitystarpeiden varoituskynnysarvo", + "description": "Muuta keltaiseksi, kun arvo saavuttaa tämän kynnysarvon" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Päivitystarpeiden kriittinen kynnysarvo", + "description": "Muuta punaiseksi, kun arvo saavuttaa tämän kynnysarvon" }, "securityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Tietoturvapäivitysten kynnysarvotila", + "description": "Vertaa tietoturvapäivitysten määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Tietoturvapäivitysten varoituskynnysarvo", + "description": "Muuta keltaiseksi, kun arvo saavuttaa tämän kynnysarvon" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Tietoturvapäivitysten kriittinen kynnysarvo", + "description": "Muuta punaiseksi, kun arvo saavuttaa tämän kynnysarvon" }, "hostsWithSecurityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Tietoturvapäivityksiä sisältävien isäntien kynnysarvotila", + "description": "Vertaa isäntien määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Tietoturvapäivityksiä sisältävien isäntien varoituskynnysarvo", + "description": "Muuta keltaiseksi, kun arvo saavuttaa tämän kynnysarvon" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Tietoturvapäivityksiä sisältävien isäntien kriittinen kynnysarvo", + "description": "Muuta punaiseksi, kun arvo saavuttaa tämän kynnysarvon" }, "upToDateHostsThresholdMode": { - "label": "", - "description": "" + "label": "Ajan tasalla olevien isäntien kynnysarvotila", + "description": "Vertaa ajan tasalla olevien isäntien määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" }, "upToDateHostsWarningAt": { - "label": "", - "description": "" + "label": "Ajan tasalla olevien isäntien varoituskynnysarvo", + "description": "Muuta keltaiseksi, kun arvo on vähintään tämä kynnysarvo, mutta alle täyden kattavuuden" }, "upToDateHostsCriticalAt": { - "label": "", - "description": "" + "label": "Ajan tasalla olevien isäntien kriittinen kynnysarvo", + "description": "Muuta punaiseksi, kun arvo laskee tämän kynnysarvon alle" }, "totalOutdatedPackagesThresholdMode": { - "label": "", - "description": "" + "label": "Vanhentuneiden pakettien kynnysarvotila", + "description": "Vertaa vanhentuneiden pakettien määrää absoluuttisena arvona tai prosenttiosuutena isäntien kokonaismäärästä" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "Vanhentuneiden pakettien varoituskynnysarvo", + "description": "Muuta keltaiseksi, kun arvo saavuttaa tämän kynnysarvon" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "Vanhentuneiden pakettien kriittinen kynnysarvo", + "description": "Muuta punaiseksi, kun arvo saavuttaa tämän kynnysarvon" }, "showOsDistribution": { - "label": "", - "description": "" + "label": "Näytä käyttöjärjestelmäjakauma", + "description": "Näytä erittely valvotuista isännistä käyttöjärjestelmittäin" }, "osDistributionLimit": { - "label": "", - "description": "", + "label": "Käyttöjärjestelmäjakauman rajoitus", + "description": "Näytettävien käyttöjärjestelmien enimmäismäärä", "option": { - "3": "", - "5": "", - "10": "", - "all": "" + "3": "3 parasta", + "5": "5 parasta", + "10": "10 parasta", + "all": "Kaikki" } }, "showOsVersion": { - "label": "", - "description": "" + "label": "Näytä käyttöjärjestelmän versio", + "description": "Liitä käyttöjärjestelmän versio jokaiseen jakauman nimikkeeseen, kun se on saatavilla" }, "showComplianceHero": { - "label": "", - "description": "" + "label": "Näytä compliance-hero", + "description": "Näytä vaatimustenmukaisuusrengas, joka näyttää ajan tasalla olevien isäntien prosenttiosuuden" }, "osDisplayMode": { - "label": "", - "description": "", + "label": "Käyttöjärjestelmän näyttötila", + "description": "Valitse, miten käyttöjärjestelmän jakelu näytetään", "option": { - "bars": "", - "donut": "" + "bars": "Vaakapalkit", + "donut": "Donitsikaavio" } } }, "error": { - "internalServerError": "" + "internalServerError": "PatchMon-tietojen nouto epäonnistui" } }, "bazarr": { - "name": "", - "description": "", - "episodes": "", - "movies": "", - "providers": "", - "status": "", + "name": "Bazarr", + "description": "Yleiskatsaus puuttuvista tekstityksistä ja terveystilasta Bazarr-instanssistasi", + "episodes": "Puuttuvat jaksot", + "movies": "Puuttuvat elokuvat", + "providers": "Palveluntarjoajan ongelmat", + "status": "Terveysongelmat", "option": { "showMissingEpisodes": { - "label": "", - "description": "" + "label": "Näytä puuttuvat jaksot", + "description": "Näytä niiden jaksojen määrä, joista puuttuu tekstitys" }, "showMissingMovies": { - "label": "", - "description": "" + "label": "Näytä puuttuvat elokuvat", + "description": "Näytä niiden elokuvien määrä, joista puuttuu tekstitykset" }, "showProviderIssues": { - "label": "", - "description": "" + "label": "Näytä tarjoajien ongelmat", + "description": "Näytä ongelmallisten tekstitystarjoajien määrä" }, "showHealthIssues": { - "label": "", - "description": "" + "label": "Näytä kunto-ongelmat", + "description": "Näytä Bazarrin kunto-ongelmien määrä" } }, "error": { - "internalServerError": "" + "internalServerError": "Bazarrin tietojen nouto epäonnistui" } }, "immich-serverStats": { @@ -3017,11 +3043,11 @@ }, "immich-albumCarousel": { "name": "", - "allPhotos": "", + "allPhotos": "Kaikki valokuvat", "option": { "albumId": { - "label": "", - "description": "" + "label": "Albumi", + "description": "Valitse Immich-albumi tai Kaikki valokuvat. Tyhjä valinta näyttää satunnaisia kuvia koko kirjastostasi." }, "rotationIntervalSeconds": { "label": "Aikaväli sekunteina", @@ -3032,12 +3058,12 @@ "description": "" }, "randomizePhotos": { - "label": "", - "description": "" + "label": "Satunnaista valokuvat", + "description": "Näytä valokuvat satunnaisessa järjestyksessä albumijärjestyksen sijaan." } }, - "description": "", - "noPhotos": "" + "description": "Diaesitys kuvista Immich-albumista tai koko kirjastostasi", + "noPhotos": "Valokuvia ei löytynyt" }, "downloads": { "name": "Latauspääte", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Integraation elementtien määrärajoitus", "description": "Tämä rajoittaa näytettävien elementtien määrää integraatiokohtaisesti, ei kokonaisvaltaisesti." + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Valitse kohteiden sarakkeet", - "noCommunications": "Integraatiolta ei voida noutaa tietoja" + "noCommunications": "Integraatiolta ei voida noutaa tietoja", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "" }, "id": { - "columnTitle": "Tunniste" + "columnTitle": "Tunniste", + "detailsTitle": "" }, "integration": { "columnTitle": "Integraatio" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Valmistumisaika", - "detailsTitle": "" + "detailsTitle": "", + "eta": "" }, "type": { "columnTitle": "Tyyppi", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Kokonaissuhde" + "globalRatio": "Kokonaissuhde", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3223,10 +3276,10 @@ "label": "Avaa linkit uudessa välilehdessä" }, "statusFilter": { - "label": "" + "label": "Näytettävät tilat" }, "recentDays": { - "label": "" + "label": "Näytä vain viimeaikaiset pyynnöt" } }, "pending": { @@ -3335,33 +3388,33 @@ } }, "mediaMissing": { - "name": "", - "description": "", + "name": "Puuttuva & jonossa oleva media", + "description": "Näyttää puuttuvat ja jonossa olevat elokuvat ja jaksot Radarr:sta ja Sonarr:sta", "option": { "showMissing": { - "label": "" + "label": "Näytä puuttuvat kohteet" }, "showQueued": { - "label": "" + "label": "Näytä jonossa olevat kohteet" }, "pageSize": { - "label": "" + "label": "Kohteita per sivu" } }, "tab": { - "missing": "", - "queued": "" + "missing": "Puuttuvat", + "queued": "Jonossa" }, "type": { - "movie": "", - "episode": "" + "movie": "Elokuva", + "episode": "Jakso" }, "empty": { - "missing": "", - "queued": "", - "noTabsEnabled": "" + "missing": "Ei puuttuvia kohteita", + "queued": "Ei jonossa olevia kohteita", + "noTabsEnabled": "Ota käyttöön vähintään yksi välilehti widgetin asetuksissa" }, - "timeLeft": "" + "timeLeft": "Jäljellä oleva aika" }, "rssFeed": { "name": "", @@ -3433,7 +3486,7 @@ "label": "" }, "providerUrl": { - "label": "" + "label": "Palveluntarjoajan URL" }, "identifier": { "label": "", @@ -3484,11 +3537,11 @@ "tooltip": "" }, "tokens": { - "label": "", - "token": "", - "configured": "", - "notConfigured": "", - "save": "" + "label": "Palveluntarjoajan tokenit", + "token": "Käyttöavain", + "configured": "Token määritetty", + "notConfigured": "Tokenia ei ole asetettu", + "save": "Tallenna" } } }, @@ -3511,9 +3564,9 @@ "invalidIdentifier": "", "noMatchingVersion": "", "noReleasesFound": "", - "noProviderSelected": "", + "noProviderSelected": "Palveluntarjoajaa ei ole valittu", "noProviderResponse": "", - "unexpected": "" + "unexpected": "Odottamaton palveluntarjoajan virhe" } } }, @@ -3608,7 +3661,7 @@ "noItems": "", "option": { "hideLogos": { - "label": "" + "label": "Piilota logot" } } }, @@ -3652,144 +3705,130 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Tarkkaile käytettävyystilastoja Uptime Kuma -tilasivultasi", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Näytä keskimääräinen käytettävyys", + "description": "Näytä yhdistetty 24 tunnin keskimääräinen käytettävyysprosentti" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Näytä käytettävyysrengas", + "description": "Näytä edistymisrengas keskimääräisen käytettävyysarvon ohella" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Näytä valvontakohteiden kokonaismäärä", + "description": "Näytä määritettyjen valvontakohteiden kokonaismäärä" }, "showUpCount": { - "label": "", - "description": "" + "label": "Näytä ylhäällä olevien määrä", + "description": "Näytä kuinka monta valvontakohdetta on tällä hetkellä ylhäällä" }, "showDownCount": { - "label": "", - "description": "" + "label": "Näytä alhaalla olevien määrä", + "description": "Näytä kuinka monta valvontakohdetta on tällä hetkellä alhaalla" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Näytä keskeytettyjen määrä", + "description": "Näytä kuinka monta valvontakohdetta on tällä hetkellä keskeytettynä" } }, - "averageUptime": "", + "averageUptime": "Keskimääräinen käytettävyys (24h)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Valvontakohteita yhteensä", + "upCount": "Ylhäällä", + "downCount": "Alhaalla", + "pausedCount": "Keskeytetty" }, "error": { - "internalServerError": "" + "internalServerError": "Käytettävyystietojen haku epäonnistui" } }, "traefik": { - "name": "", - "description": "", + "name": "Traefik", + "description": "Yleiskatsaus Traefikin reitittimistä, palveluista, middlewareista ja sisääntulopisteistä", "option": { "showTcp": { - "label": "" + "label": "Näytä TCP" }, "showUdp": { - "label": "" + "label": "Näytä UDP" }, "showEntryPoints": { - "label": "" + "label": "Näytä sisääntulopisteet" } }, - "instances": "", - "versionUnknown": "", + "instances": "Traefik-instanssit", + "versionUnknown": "Versio tuntematon", "summary": { - "routers": "", - "entryPoints": "" + "routers": "Reitittimet", + "entryPoints": "Sisääntulopisteet" }, "resource": { - "routers": "", - "services": "", - "middlewares": "" + "routers": "Reitittimet", + "services": "Palvelut", + "middlewares": "Middlewaret" }, "status": { - "healthy": "", - "errors": "", - "warnings": "" + "healthy": "Terve", + "errors": "{count} virhettä", + "warnings": "{count} varoitusta" }, "error": { - "internalServerError": "" + "internalServerError": "Traefikin tietojen nouto epäonnistui" } }, "audioStats": { - "name": "", - "description": "", + "name": "Äänitilastot", + "description": "Kirjasto- ja toistotilastot Navidromesta tai Audiobookshelfistä", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Näytä artistit", + "description": "Näytä musiikkikirjastosi artistien kokonaismäärä (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Näytä albumit", + "description": "Näytä musiikkikirjastosi albumien kokonaismäärä (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "Näytä kappaleet", + "description": "Näytä musiikkikirjastosi kappaleiden kokonaismäärä (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Näytä kirjastojen määrä", + "description": "Näytä instanssisi kirjastojen lukumäärä (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Näytä äänikirjat", + "description": "Näytä äänikirjojen kokonaismäärä kaikissa kirjastoissa (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Näytä podcastit", + "description": "Näytä podcastien kokonaismäärä kaikissa kirjastoissa (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "Näytä kuunteluaika", + "description": "Näytä kokonaiskuunteluaikasi (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "Näytä aktiiviset istunnot", + "description": "Näytä parhaillaan aktiivisten toistoistuntojen määrä (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "Tiivis tila", + "description": "Käytä tiiviimpää asettelua pienemmillä ruuduilla, ihanteellinen pienille widgeteille" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "Artistit", + "albums": "Albumit", + "songs": "Kappaleet", + "libraryCount": "Kirjastot", + "audiobooks": "Äänikirjat", + "podcasts": "Podcastit", + "listeningTime": "Kuunteluaika", + "activeSessions": "Aktiiviset istunnot", "error": { - "internalServerError": "" + "internalServerError": "Audiotilastojen nouto epäonnistui" } }, "systemResources": { @@ -3853,9 +3892,9 @@ "label": "" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "Näkyvät tallennusvolyymit", + "description": "Käytettävissä vain, kun kaikki valitut integraatiot ovat Synology. Jätä tyhjäksi näyttääksesi kaikki havaitut tallennusvolyymit.", + "placeholder": "Valitse tallennusvolyymit" } }, "status": { @@ -3863,265 +3902,273 @@ } }, "customApi": { - "name": "", - "description": "", + "name": "Mukautettu API", + "description": "Näytä dataa mistä tahansa ulkoisesta API:sta mukautetuilla asetuksilla.", "option": { "definitionId": { - "label": "" + "label": "Määritelmän tunnus" }, "refreshInterval": { - "label": "", - "description": "" + "label": "Päivitysväli", + "description": "Kuinka usein data haetaan uudelleen API:sta (sekunteina)" } }, - "noDefinition": "", - "definitionNotFound": "", - "noDisplayOutput": "", - "executeConfirm": "", - "executing": "", - "executeSuccess": "", - "executeFailed": "" + "noDefinition": "Määritelmää ei valittu", + "definitionNotFound": "Widget-määritelmää ei löydy. Se on saatettu poistaa.", + "noDisplayOutput": "Ei näyttötulostetta", + "executeConfirm": "Haluatko varmasti suorittaa tämän toiminnon?", + "executing": "Suoritetaan...", + "executeSuccess": "Toiminto suoritettu onnistuneesti", + "executeFailed": "Toiminto epäonnistui. Tarkista widgetin asetukset." }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel-järjestelmät (taulukko)", + "description": "Taulukkonäkymä kaikista Beszel-valvotuista järjestelmistä, lajiteltavilla sarakkeilla ja tilaindikaattoreilla", "option": { "statusFilter": { - "label": "" + "label": "Tilasuodatin" }, "sortBy": { - "label": "" + "label": "Lajitteluperuste" }, "sortDirection": { - "label": "" + "label": "Lajittelusuunta" }, "showCpu": { - "label": "" + "label": "Näytä suoritin" }, "showMemory": { - "label": "" + "label": "Näytä muisti" }, "showDisk": { - "label": "" + "label": "Näytä levy" }, "showGpu": { - "label": "" + "label": "Näytä näytönohjain" }, "showLoadAvg": { - "label": "" + "label": "Näytä kuormituskeskiarvo" }, "showNet": { - "label": "" + "label": "Näytä verkko" }, "showTemp": { - "label": "" + "label": "Näytä lämpötila" }, "showBattery": { - "label": "" + "label": "Näytä akku" }, "showServices": { - "label": "" + "label": "Näytä palvelut" }, "showUptime": { - "label": "" + "label": "Näytä käynnissäoloaika" }, "showAgent": { + "label": "Näytä agentin versio" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Järjestelmiä ei löytynyt", "error": { - "internalServerError": "" + "internalServerError": "Beszel-yhteyden muodostaminen epäonnistui. Tarkista integraatioasetuksesi.", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Järjestelmä", + "cpu": "Suoritin", + "memory": "Muisti", + "disk": "Levy", + "gpu": "Näytönohjain", + "loadAvg": "Kuormituska", + "net": "Verkko", + "temp": "Lämpötila", + "battery": "Akku", + "services": "Palvelut", + "uptime": "Käynnissäoloaika", + "agent": "Agentti" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel-järjestelmät (ruudukko)", + "description": "Korttiruudukkonäkymä kaikista Beszel-valvotuista järjestelmistä reaaliaikaisilla mittareilla", "option": { "statusFilter": { - "label": "" + "label": "Tilasuodatin" }, "showCpu": { - "label": "" + "label": "Näytä suoritin" }, "showMemory": { - "label": "" + "label": "Näytä muisti" }, "showDisk": { - "label": "" + "label": "Näytä levy" }, "showGpu": { - "label": "" + "label": "Näytä näytönohjain" }, "showLoadAvg": { - "label": "" + "label": "Näytä kuormituskeskiarvo" }, "showNet": { - "label": "" + "label": "Näytä verkko" }, "showTemp": { - "label": "" + "label": "Näytä lämpötila" }, "showBattery": { - "label": "" + "label": "Näytä akku" }, "showServices": { - "label": "" + "label": "Näytä palvelut" }, "showUptime": { - "label": "" + "label": "Näytä käynnissäoloaika" }, "showAgent": { - "label": "" + "label": "Näytä agentin versio" } }, "error": { - "internalServerError": "" + "internalServerError": "Beszel-yhteyden muodostaminen epäonnistui. Tarkista integraatioasetuksesi." }, "empty": { - "noSystems": "" + "noSystems": "Järjestelmiä ei löytynyt" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "Suoritin", + "memory": "Muisti", + "disk": "Levy", + "gpu": "Näytönohjain", + "loadAvg": "Kuormituska", + "net": "Verkko", + "temp": "Lämpötila", + "battery": "Akku", + "services": "Palvelut", + "uptime": "Käynnissäoloaika", + "agent": "Agentti" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel-hälytykset", + "description": "Tarkastele Beszel-hälytysten määrityksiä ja historiaa", "option": { "showHistory": { - "label": "" + "label": "Näytä hälytyshistoria" }, "maxHistoryItems": { - "label": "" + "label": "Historiatietueiden enimmäismäärä" } }, - "empty": "", + "empty": "Ei määritettyjä hälytyksiä", "error": { - "internalServerError": "" + "internalServerError": "Beszel-yhteyden muodostaminen epäonnistui. Tarkista integraatioasetuksesi." }, - "history": "", - "resolved": "", + "history": "Historia", + "resolved": "Kuitattu", "status": { - "triggered": "", - "ok": "" + "triggered": "Lauennut", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel-järjestelmätilastot", + "description": "Aikasarjakaaviot suorittimelle, muistille, levylle, verkolle ja Docker-konttien mittareille", "option": { "systemId": { - "label": "", - "description": "" + "label": "Järjestelmä", + "description": "Valitse Beszel-järjestelmä, jonka tilastoja näytetään" }, "timePeriod": { - "label": "" + "label": "Aikajakso" }, "showCpu": { - "label": "" + "label": "Näytä suorittimen kaavio" }, "showMemory": { - "label": "" + "label": "Näytä muistin kaavio" }, "showDisk": { - "label": "" + "label": "Näytä levyn kaavio" }, "showDiskIO": { - "label": "" + "label": "Näytä levyn I/O -kaavio" }, "showNetwork": { - "label": "" + "label": "Näytä verkon kaavio" }, "showDockerCpu": { - "label": "" + "label": "Näytä Docker-suorittimen kaavio" }, "showDockerMemory": { - "label": "" + "label": "Näytä Docker-muistin kaavio" }, "showDockerNetwork": { - "label": "" + "label": "Näytä Docker-verkon kaavio" } }, - "selectSystem": "", + "selectSystem": "Valitse järjestelmä", "empty": { - "noSystems": "" + "noSystems": "Järjestelmiä ei löytynyt" }, "error": { - "internalServerError": "", - "liveConnectionFailed": "", - "switchToHistorical": "", - "systemNotFound": "" + "internalServerError": "Beszel-yhteyden muodostaminen epäonnistui. Tarkista integraatioasetuksesi.", + "liveConnectionFailed": "Live-yhteys epäonnistui. Beszel-instanssisi ei ehkä tue reaaliaikaista suoratoistoa.", + "switchToHistorical": "Siirry historialliseen näkymään", + "systemNotFound": "Valittua järjestelmää ei löydy. Valitse eri järjestelmä." }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "Suorittimen kuormitus", + "subtitle": "Keskimääräinen koko järjestelmän suorittimen käyttö", + "series": "Suoritin" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Muistin varaus", + "subtitle": "Tarkka käyttö tallennushetkellä", + "series": "Käytetty", + "cache": "Välimuisti/Puskurit" }, "disk": { - "title": "", - "subtitle": "", - "series": "" + "title": "Levyn käyttö", + "subtitle": "Käyttö tiedostojärjestelmissä", + "series": "Juur" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Levyn I/O", + "subtitle": "Juuritiedostojärjestelmän läpimeno", + "read": "Luettu", + "write": "Kirjoitettu" }, "storage": { - "title": "", - "subtitle": "", - "series": "" + "title": "Tallennustila", + "subtitle": "Tiedostojärjestelmäkohtainen levynkäyttö", + "series": "Käytössä" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Kaistanleveys", + "subtitle": "Julkisten rajapintojen verkkoliikenne", + "sent": "Lähetetty", + "recv": "Vastaanotettu" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker-suorittimen käyttö", + "subtitle": "Konttien keskimääräinen suorittimen kuormitus" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker-muistin käyttö", + "subtitle": "Docker-konttien muistin käyttö" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker-verkon I/O", + "subtitle": "Docker-konttien verkkoliikenne" } } } @@ -4498,9 +4545,9 @@ "text": "" }, "error": { - "title": "", - "text": "", - "digest": "" + "title": "Tätä sivua ei voitu ladata", + "text": "Tämän sivun lataamisessa tapahtui odottamaton virhe. Navigaatiopalkki on edelleen käytettävissä – yritä ladata uudelleen tai käytä toista osiota sivupalkista.", + "digest": "Virheviite: {digest}" }, "navbar": { "items": { @@ -4508,7 +4555,7 @@ "boards": "Paneelit", "apps": "Sovellukset", "integrations": "Integraatiot", - "customWidgets": "", + "customWidgets": "Mukautetut widgetit", "searchEngies": "Hakukoneet", "medias": "Mediatiedostot", "users": { @@ -4525,10 +4572,10 @@ "docker": "Docker", "kubernetes": "Kubernetes", "logs": "Lokitiedot", - "api": "", + "api": "API & MCP", "certificates": "Varmenteet", "tasks": "Tehtävät", - "backup": "" + "backup": "Varmuuskopio" } }, "settings": "Asetukset", @@ -4609,7 +4656,7 @@ "private": "" }, "noResults": { - "title": "" + "title": "Ei paneeleita vielä" }, "modal": { "createBoard": { @@ -4984,213 +5031,213 @@ } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "AI / MCP", + "title": "AI-integraatio", + "subtitle": "Model Context Protocol (MCP) -palvelin", + "description": "Yhdistä tekoälyavustajat Homarr-instanssiisi ja hallitse koko kotilaboratoriotasi luonnollisella kielellä. Hae ja pyydä mediaa Overseerrissä, hallitse Docker-kontteja, kytke Pi-hole päälle/pois, tarkista palvelimen kunto, hallitse Home Assistant -laitteita ja paljon muuta – kaikki tekoälyavustajaltasi.", + "noApiKey": "Tarvitset API-avaimen MCP-palvelimen todennukseen.", + "createApiKeyButton": "Luo API-avain", "endpoint": { - "title": "" + "title": "MCP-päätepiste" }, "authentication": { - "title": "", - "intro": "", + "title": "Tunnistautuminen", + "intro": "Voit tunnistautua MCP-palvelimeesi joko API-avaimella tai OAuthilla. Molemmat menetelmät antavat saman käyttöoikeustason.", "apiKey": { - "title": "", - "description": "" + "title": "API-avain (manuaalinen)", + "description": "Välitä ApiKey-otsikko, jossa on koko API-avaimesi, MCP-asiakkaan asetuksissa." }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (selainkirjautuminen)", + "description": "Asiakkaat, jotka tukevat OAuthia (kuten Claude Code, opencode tai Cursor), voivat todentaa avaamalla selainikkunan. Suorita auth-komento asiakkaassasi, kirjaudu selaimeen Homarriin, ja olet yhteydessä – API-avain luodaan automaattisesti.", + "hint": "OAuth-tokenit näkyvät tavallisina API-avaimina Tunnistautuminen-välilehdellä. Voit kumota ne milloin tahansa." }, - "permissions": "" + "permissions": "API-avain määrittää tekoälyn käytettävissä olevat oikeudet – se toimii samalla käyttöoikeustasolla kuin avaimen omistaja." }, "clientConfig": { - "title": "", + "title": "Asiakasasetukset", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "Suositus", + "title": "Streamable HTTP", + "worksWith": "Toimii: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", + "addToConfig": "Lisää MCP-asiakkaan asetustiedostoon:", + "cursor": "{name}: {file} projektissasi tai yleisissä asetuksissa", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} tai käytä komentoa {command}", + "vsCodeCopilot": "{name}: {file} työtilan asetuksissa", + "replaceHint": "Korvaa paikkamerkki API-avaimella, jonka sait sitä luodessasi." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (vanhat asiakkaat mcp-remote-sillan kautta)", + "description": "Asiakkaille, jotka tukevat vain stdio-siirtoa. Vaatii asennetun {dependency} (Node.js) paikallisesti:" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "Testaa yhteys", + "description": "Suorita tämä terminaalissasi varmistaaksesi, että päätepiste on tavoitettavissa ja API-avaimesi toimii:", + "hint": "Onnistunut vastaus palauttaa MCP-palvelimen ominaisuudet. Jos näet virheen, tarkista JSON-vastauksen vihjeet." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "Käytettävissä olevat työkalut", + "description": "{count} työkalua käytettävissä. Laajenna kategoria nähdäksesi yksittäiset työkalut ja niiden kuvaukset.", + "columnType": "Tyyppi", + "columnName": "Työkalu", + "columnDescription": "Kuvaus" }, "troubleshooting": { - "title": "", + "title": "Vianmääritys", "missingHeader": { - "title": "", - "description": "" + "title": "\"ApiKey-otsikko puuttuu\"", + "description": "Asiakkaasi ei lähetä {header}-otsikkoa. Tarkista, että {section}-osio MCP-asetuksissasi on oikein. Jotkut asiakkaat vaativat uudelleenkäynnistyksen asetusmuutosten jälkeen." }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"ApiKey-muoto virheellinen\"", + "description": "Varmista, että kopioit koko API-avaimen, et vain osaa siitä." }, "invalidKey": { - "title": "", - "description": "" + "title": "\"Virheellinen API-avain\"", + "description": "Avaimen tunnusta ei löydy tai tunnus on väärä. API-avaimet voidaan näyttää vain kerran luotaessa. Jos kadotit sen, poista vanha avain ja luo uusi." }, "connectionRefused": { - "title": "", - "description": "" + "title": "Yhteys hylättiin / aikakatkaisu", + "description": "Varmista, että URL on tavoitettavissa AI-asiakkaaltasi. Jos Homarr toimii käänteisen välityspalvelimen takana tai Dockerissa, käytä ulkoista URL-osoitetta (ei {localhost}). Tarkista portti on oikein (oletus: 7575 Dockerille)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "Työkalut eivät näy", + "description": "Jotkut työkalut vaativat tiettyjä integraatioita (esim. Docker, Overseerr). Työkalulista riippuu siitä, mitä Homarr-instanssissasi on käytettävissä." } }, - "copy": "", + "copy": "Kopioi", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "Asenna yhdellä napsautuksella", + "subtitle": "Käyttää OAuthia – todenna selaimesi ensimmäisellä käyttökerralla", + "vsCode": "Asenna VS Codeen", + "cursor": "Asenna Cursoriin", + "copyUrl": "Kopioi MCP-URL", + "copied": "Kopioitu!", + "copyHint": "ChatGPT:lle, Claude Codelle tai mille tahansa MCP-asiakkaalle", + "manualConfig": "Manuaalinen määritys" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Täysi tietokantavarmuuskopio", + "metaTitle": "Varmuuskopiointi ja palautus", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Vie tietokanta", + "description": "Lataa täysi varmuuskopio SQLite-tietokannastasi, sisältäen kaikki asetukset, käyttäjät, paneelit ja salatut integraatiosalaisuudet. Varmuuskopio pakataan ZIP-tiedostoksi, jossa on salausavain ja metatiedot.", + "button": "Lataa varmuuskopio", + "error": "Vienti epäonnistui", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Arkaluonteisten tietojen vienti", + "warningTitle": "Tämä vienti sisältää koko tietokannan.", + "warningBody": "Varmuuskopio sisältää kaikki käyttäjät, integraatiosalaisuudet (salattuina), API-avaimet, paneelien asetukset ja sovellustiedot. Säilytä viety tiedosto turvallisesti äläkä jaa sitä.", + "typePrompt": "Kirjoita \"{phrase}\" jatkaaksesi", + "submit": "Vie tietokanta", + "cancel": "Peruuta" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Palauta tietokanta", + "description": "Lataa aiemmin viety varmuuskopio-ZIP palauttaaksesi tietokannan. Tämä korvaa koko tietokantasi. Jos varmuuskopio on luotu eri salausavaimella, salaisuudet salataan automaattisesti uudelleen.", + "warning": "Varmuuskopion palauttaminen korvaa nykyisen tietokannan kokonaan ja käynnistää sovelluksen uudelleen. Tätä toimintoa ei voi peruuttaa.", "dropzone": { - "title": "", - "description": "" + "title": "Pudota varmuuskopio-ZIP tähän tai napsauta selataksesi", + "description": "Vain Homarr SQLite -varmuuskopion .zip-tiedostot hyväksytään" }, - "changeFile": "", - "button": "", + "changeFile": "Vaihda tiedosto", + "button": "Palauta tietokanta", "success": { - "title": "", - "message": "" + "title": "Palautus valmis", + "message": "Tietokanta on palautettu onnistuneesti. Sovellus käynnistyy uudelleen..." }, - "error": "" + "error": "Tuonti epäonnistui" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Varmuuskopion sisältö", + "exported": "Viety {date}", + "loading": "Analysoidaan varmuuskopiotiedostoa...", + "errorTitle": "Esikatseluvirhe", + "entity": "Entiteetti", + "count": "Lukumäärä", + "boards": "Paneelit", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Paneelit", + "user": "Käyttäjät", + "app": "Sovellukset", + "integration": "Integraatiot", + "item": "Widgetit", + "media": "Media", + "search_engine": "Hakukoneet" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Varmuuskopiotiedoston analysointi epäonnistui", + "invalidMissingMetadata": "Virheellinen varmuuskopio: metadata.json puuttuu", + "invalidMissingDb": "Virheellinen varmuuskopio: db.sqlite puuttuu" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Pudota varmuuskopio-ZIP tähän", + "description": "Hyväksyy Homarr SQLite -varmuuskopion .zip-tiedostot (max 256 Mt)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analysoidaan varmuuskopiota...", + "changeFile": "Vaihda tiedosto", + "continueToRestore": "Jatka palautukseen", + "tryAgain": "Yritä uudelleen", + "analysisError": "Analyysivirhe", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Varmuuskopion sisältö", + "exported": "Viety {date}", + "entity": "Entiteetti", + "count": "Lukumäärä", + "boards": "Paneelit", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Paneelit", + "user": "Käyttäjät", + "app": "Sovellukset", + "integration": "Integraatiot", + "item": "Widgetit", + "media": "Media", + "search_engine": "Hakukoneet" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migraatio käytössä", + "migrationsAppliedPlural": "{count} migraatiota käytössä", + "migrationsOlderVersion": "Tämä varmuuskopio on vanhemmasta Homarr-versiosta. {count} skeemamigraatio otettiin käyttöön saattaakseen sen ajan tasalle.", + "migrationsOlderVersionPlural": "Tämä varmuuskopio on vanhemmasta Homarr-versiosta. {count} skeemamigraatiota otettiin käyttöön saattaakseen sen ajan tasalle.", + "migrationsUpToDate": "Tietokantaskeema on ajan tasalla ({count} migraatiota käytössä)", + "upToDate": "Ajan tasalla", + "migrationsPending": "{count} odottaa" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Migraatioiden käyttöönotto ({current}/{total})", + "migrationLabel": "Migraatio {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Tuhoava toimenpide", + "warningTitle": "Tämä korvaa koko tietokantasi pysyvästi.", + "warningBody": "Kaikki nykyiset paneelit, käyttäjät, sovellukset, integraatiot, asetukset ja istunnot menetetään. Tätä toimintoa ei voi peruuttaa. Sovellus käynnistyy uudelleen palautuksen jälkeen.", + "typePrompt": "Kirjoita \"{phrase}\" jatkaaksesi", + "cancel": "Peruuta", + "submit": "Palauta tietokanta" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Palautetaan tietokantaa...", + "extracting": "Puretaan varmuuskopioarkistoa", + "migrating": "Otetaan käyttöön tietokantamigraatioita", + "encrypting": "Salataan integraatiosalaisuuksia uudelleen", + "swapping": "Korvataan tietokantatiedosto", + "restarting": "Käynnistetään palvelin uudelleen" }, "complete": { - "title": "", - "message": "" + "title": "Palautus valmis", + "message": "Tietokanta on palautettu onnistuneesti. Palvelin käynnistyy uudelleen – päivitä sivu muutaman sekunnin kuluttua." }, "failed": { - "title": "" + "title": "Palautus epäonnistui" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Virheellinen varmuuskopio: metadata.json puuttuu", + "invalidMissingDb": "Virheellinen varmuuskopio: db.sqlite puuttuu", + "analyzeError": "Varmuuskopion analysointi epäonnistui" } } }, @@ -5238,13 +5285,13 @@ "table": { "updated": "Päivitetty {when}", "refresh": { - "lastUpdated": "" + "lastUpdated": "Viimeisin päivitys {when}" }, "search": "Suodata {count} konttia...", "selected": "{selectCount}/{totalCount} kontista valittu", "footer": "Yhteensä {count} konttia", - "totalCpu": "", - "totalMemory": "" + "totalCpu": "CPU yhteensä: {cpu}%", + "totalMemory": "Muisti yhteensä: {memory}" }, "field": { "name": { @@ -5285,7 +5332,7 @@ "logs": { "label": "Tarkastele lokeja", "page": { - "title": "" + "title": "{name} lokit" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Poista", + "confirm": "", "notification": { "success": { "title": "", @@ -5372,7 +5420,7 @@ }, "error": { "internalServerError": "", - "noColumns": "" + "noColumns": "Valitse vähintään yksi sarake widgetin asetuksista" } }, "kubernetes": { @@ -5681,14 +5729,14 @@ } }, "custom-widgets": { - "label": "", + "label": "Mukautetut widgetit", "new": { - "label": "" + "label": "Uusi" }, "edit": { - "label": "", + "label": "Muokkaa", "flow": { - "label": "" + "label": "Kulku" } } }, @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "Lokit" } }, "kubernetes": { @@ -5969,10 +6017,10 @@ } }, "enableRightClickOnWidgets": { - "label": "", + "label": "Käytä hiiren kakkospainiketta widgeteissä", "children": { "detail": { - "title": "" + "title": "Käytä hiiren kakkospainiketta widgeteissä" } } }, @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Tila" }, "status": { - "requested": "" + "requested": "Pyydetty" } }, "button": { @@ -6400,31 +6448,31 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Lue dokumentaatio", + "next": "Seuraava", + "prev": "Takaisin", + "done": "Valmis", + "skip": "Ohita kierros", "manage": { "welcome": { "title": "Tervetuloa Homarriin!", "description": "Tämä on ohjauskeskuksesi. Täällä hallitset paneeleita, sovelluksia, integraatioita, käyttäjiä ja palvelinasetuksia. Tutustutaan jokaiseen osioon." }, "boardsList": { - "title": "", - "description": "" + "title": "Omat paneelisi", + "description": "Tässä ovat kaikki kojelaudat. Jokaisella on oma asettelunsa, taustansa ja käyttöoikeusasetuksensa. Näet kuka ne on luonut ja ovatko ne julkisia vai yksityisiä." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Luo paneeli", + "description": "Napsauta tästä luodaksesi uuden kojelaudan tai tuodaksesi sellaisen aiemmasta Homarr-asennuksesta. Jokainen paneeli saa oman URL-osoitteensa, jonka voit jakaa." }, "appsList": { - "title": "", - "description": "" + "title": "Omat sovelluksesi", + "description": "Nämä ovat kaikki lisäämäsi sovellukset – linkit itsepalvelupalveluihisi. Jokaisella on kuvake, valinnainen terveystarkastus ja tilamerkki kojelaudalla." }, "appsCreate": { - "title": "", - "description": "" + "title": "Lisää sovellus", + "description": "Rekisteröi uusi palvelu tästä. Anna sille nimi, URL ja kuvake – se näkyy laatikkona paneelissasi ja siinä on reaaliaikainen tilaseuranta." }, "integrationsList": { "title": "Integraatiosi", @@ -6435,34 +6483,34 @@ "description": "Yhdistä uusi palvelu tästä. Valitse tyyppi, syötä URL-osoite ja rajapinnan avain — Homarr todentaa yhteyden ennen tallennusta." }, "usersList": { - "title": "", - "description": "" + "title": "Käyttäjäsi", + "description": "Näe kaikki joilla on pääsy. Järjestä käyttäjät ryhmiin ja hallitse kuka voi katsella tai muokata kutakin paneelia." }, "usersCreate": { - "title": "", - "description": "" + "title": "Luo käyttäjä", + "description": "Lisää uusi käyttäjätili tästä. Voit käyttää myös kutsulinkkejä helppoon käyttöönottoon. Tässä olikin kierros – olet valmis!" } }, "board": { "welcome": { - "title": "", + "title": "Tämä on paneelisi", "description": "Kojelauta, jolla järjestelet sovelluksia ja widgettejä raahamaalla. Etsi sovelluksia, paneeleita ja toimintoja milloin tahansa painamalla Ctrl + K." }, "editMode": { - "title": "", - "description": "" + "title": "Muokkaustila", + "description": "Napsauta tästä siirtyäksesi muokkaustilaan. Voit sitten lisätä widgettejä, sovelluksia ja osioita – vedä sijoittaaksesi, muuta kokoa kulmakahvasta. Napsauta uudelleen tallentaaksesi muutokset." }, "settings": { - "title": "", - "description": "" + "title": "Paneelin asetukset", + "description": "Vaihda paneelin nimeä, sarakkeita, taustaa, värejä ja käyttöoikeuksia. Jokainen paneeli voi olla julkinen tai yksityinen." }, "switcher": { - "title": "", + "title": "Vaihda paneelia", "description": "Siirry paneelien välillä. Luo erilliset kojelaudat eri tarkoituksiin — media, verkko, käyttäjäkohtaiset tai mitä vain haluat." }, "userMenu": { - "title": "", - "description": "" + "title": "Profiilisi", + "description": "Vaihda väriteemaa, kieltä, kotipaneelia ja asetuksia. Täältä pääset myös hallinta-alueelle." } } } diff --git a/packages/translation/src/lang/fr.json b/packages/translation/src/lang/fr.json index 389b75293..9c73c03c2 100644 --- a/packages/translation/src/lang/fr.json +++ b/packages/translation/src/lang/fr.json @@ -199,8 +199,8 @@ "label": "Utiliser les icônes pour les pings" }, "enableRightClickOnWidgets": { - "label": "", - "description": "" + "label": "Activer le clic droit sur les widgets", + "description": "Afficher le menu contextuel d'Homarr lorsque vous cliquez avec le bouton droit sur un widget. Désactiver pour utiliser le menu par défaut du navigateur (par exemple \"Ouvrir le lien dans un nouvel onglet\")." }, "defaultSearchEngine": { "label": "Moteur de recherche par défaut" @@ -710,10 +710,10 @@ "delete": "Supprimer le widget personnalisé", "deleteConfirm": "Êtes-vous sûr de vouloir supprimer \"{name}\" ? Cette action est irréversible.", "export": "Exporter", - "addMapping": "", + "addMapping": "Ajouter une correspondance", "addColumn": "Ajouter une colonne", "edit": "Modifier", - "removeMapping": "", + "removeMapping": "Supprimer la correspondance", "removeColumn": "Supprimer la colonne", "addItem": "Ajouter un élément", "removeItem": "Supprimer l'élément", @@ -730,31 +730,31 @@ "iconUrl": "URL de l'icône", "url": "URL", "authType": "Type d’authentification", - "headerName": "", - "method": "", - "requestBody": "", - "displayType": "", - "jsonPath": "", - "jsonPathHint": "", + "headerName": "Nom du paramètre de l'entête/requête", + "method": "Méthode", + "requestBody": "Corps de la requête", + "displayType": "Type d'affichage", + "jsonPath": "Chemin JSON", + "jsonPathHint": "Utiliser la syntaxe JSONPath pour extraire des valeurs, par exemple $.data.temperature ou $.items[0].name", "label": "Étiquette", "unit": "Unité", - "mappings": "", + "mappings": "Correspondances", "tablePath": "", "tablePathHint": "", - "columns": "", - "header": "", - "items": "", - "gridColumns": "", - "cardStyle": "", - "bars": "", + "columns": "Colonnes", + "header": "En-tête", + "items": "Objets", + "gridColumns": "Nombre de colonnes", + "cardStyle": "Style des cartes", + "bars": "Barres", "valuePath": "", "maxPath": "", - "showPercentage": "", - "barSize": "", - "goodValues": "", - "dotSize": "", - "valueSize": "", - "labelPosition": "", + "showPercentage": "Afficher le pourcentage", + "barSize": "Taille de la barre", + "goodValues": "Bonnes valeurs (séparées par des virgules)", + "dotSize": "Taille des points", + "valueSize": "Taille", + "labelPosition": "Position du libellé", "kvLayout": "", "striped": "", "compact": "Mode Compact", @@ -773,14 +773,14 @@ } }, "placeholder": { - "exampleLabel": "", + "exampleLabel": "Température du CPU", "exampleLabelShort": "Température du CPU", "exampleHeader": "Nom", "exampleUnit": "°C", "iconUrl": "https://...", "url": "https://api.example.com/api/v1/status", "headerName": "", - "jsonPath": "", + "jsonPath": "$.data.value", "tablePath": "", "columnJsonPath": "", "valuePath": "", @@ -798,9 +798,9 @@ "grid": "" }, "sizeOption": { - "sm": "", - "md": "", - "lg": "", + "sm": "Petit", + "md": "Moyen", + "lg": "Grand", "xl": "Très grand" }, "labelPositionOption": { @@ -825,30 +825,30 @@ "customJsx": "" }, "method": { - "GET": "", - "POST": "", - "PUT": "", - "DELETE": "", - "PATCH": "" + "GET": "GET", + "POST": "POST", + "PUT": "PUT", + "DELETE": "DELETE", + "PATCH": "PATCH" }, "authType": { - "none": "", - "bearer": "", - "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "none": "Aucun", + "bearer": "Jeton Bearer", + "basic": "Authentification basique", + "apiKeyHeader": "Clé API (En-tête)", + "apiKeyQuery": "Clé API (requête)" }, "displayType": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Valeur unique", + "keyValue": "Clé-Valeur", + "table": "Tableau", + "statGrid": "Grille de statistiques", + "progressBars": "Barre de progression", + "statusIndicator": "Indicateur de statut", + "countGrid": "Grille de valeurs", + "raw": "Raw JSON", + "actionButton": "Bouton d'action", + "customJsx": "JSX personnalisé" }, "secret": { "apiKey": "", @@ -857,9 +857,9 @@ "savedPlaceholder": "" }, "preview": { - "title": "", - "test": "", - "hint": "", + "title": "Aperçu", + "test": "Tester", + "hint": "Cliquez sur Test pour prévisualiser la réponse API avec votre configuration actuelle.", "rawResponse": "" }, "notification": { @@ -987,30 +987,30 @@ "placeholder": "URL personnalisée de l'application" }, "apiKeySettings": { - "label": "" + "label": "Obtenir la clé API" } }, "action": { "create": "Nouvelle intégration" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count, plural, one {# widget} other {# widgets}}", + "noWidgets": "Aucun widget", + "detected": "Détecté via Docker" }, "category": { - "dnsHole": "", - "mediaService": "", + "dnsHole": "DNS", + "mediaService": "Média", "calendar": "Calendrier", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", + "mediaSearch": "Rechercher", + "mediaRelease": "Versions", + "mediaRequest": "Demandes", + "downloadClient": "Téléchargements", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Divers", + "smartHomeServer": "Maison intelligente", + "indexerManager": "Indexeur", "healthMonitoring": "Santé", "search": "Rechercher", "mediaTranscoding": "Transcodage", @@ -1018,7 +1018,7 @@ "releasesProvider": "Versions", "notifications": "Notifications", "firewall": "Pare-feu", - "timetable": "", + "timetable": "Emploi du temps", "photoService": "Photos", "documents": "Documents", "notes": "Notes", @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Aucun média téléchargé" } }, "common": { @@ -1498,7 +1498,7 @@ "login": "Connexion", "homeBoard": "Votre tableau de bord", "loggedOut": "Déconnecté", - "updateAvailable": "Mises à jour {countUpdates} disponibles : {tag}" + "updateAvailable": "{countUpdates} Mises à jour disponibles : {tag}" } }, "dangerZone": "Zone de danger", @@ -1938,16 +1938,16 @@ } }, "timetable": { - "name": "", + "name": "Horaires", "description": "Affiche les heures de départ pour une station", - "title": "", - "noStation": "", + "title": "Départs {station}", + "noStation": "Aucune station sélectionnée", "option": { "baseUrl": { "label": "" }, "station": { - "label": "" + "label": "Station" } } }, @@ -2024,26 +2024,26 @@ } }, "anchorNote": { - "name": "", - "description": "", + "name": "Note Anchor", + "description": "Affiche une note sélectionnée depuis Anchor", "option": { "noteId": { - "label": "" + "label": "Note" }, "showTitle": { - "label": "" + "label": "Afficher le titre" }, "showUpdatedAt": { - "label": "" + "label": "Afficher la dernière mise à jour" } }, - "empty": "", - "emptyContent": "", + "empty": "Sélectionnez une note à afficher", + "emptyContent": "Cette note n'a pas de contenu", "notFound": "Note introuvable", - "noNotes": "", - "integrationRequired": "", - "updatedAt": "", - "untitled": "", + "noNotes": "Aucune note trouvée", + "integrationRequired": "Sélectionnez d'abord une intégration Anchor", + "updatedAt": "Mis à jour {date}", + "untitled": "Sans titre", "edit": "Modifier", "save": "Sauvegarder", "cancel": "Annuler", @@ -2083,7 +2083,7 @@ "label": "Autoriser la géolocalisation" }, "allowModals": { - "label": "" + "label": "Autoriser les modales" } }, "error": { @@ -2319,7 +2319,7 @@ "label": "Afficher les infos de la mémoire" }, "gpu": { - "label": "" + "label": "Afficher les infos du GPU" }, "showUptime": { "label": "Afficher le temps de disponibilité" @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Inverser le tri" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "Impossible de récupérer les statistiques des conteneurs" + "internalServerError": "Impossible de récupérer les statistiques des conteneurs", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,8 +2485,8 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Surveiller l'état de vos périphériques UPS via un serveur NUT", "option": { "showBattery": { "label": "Afficher la batterie" @@ -2501,7 +2512,7 @@ "output": "Sortie" }, "error": { - "internalServerError": "" + "internalServerError": "Impossible de récupérer les données UPS" } }, "tracearr": { @@ -2536,16 +2547,16 @@ "device": "Appareil", "progress": "Progression", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Lecture directe", + "transcode": "Transcodage", + "directStream": "Flux direct" } }, "recentActivity": { "title": "Activité récente", "empty": "Aucune activité récente", - "watched": "", - "partial": "" + "watched": "Regardé", + "partial": "Partiel" }, "violations": { "title": "Violations", @@ -2553,21 +2564,21 @@ "rule": "Règle", "user": "Utilisateur" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "Aucune section activée", "error": { "noIntegration": "Aucune intégration Tracearr configurée", "internalServerError": "Impossible de récupérer les données de Tracearr" } }, "umami": { - "name": "", - "description": "", - "visitors": "", - "active": "", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "name": "Statistiques Umami", + "description": "Affiche les statistiques des visiteurs de votre instance Umami Analytics", + "visitors": "visiteurs", + "active": "actif", + "pageviews": "pages vues", + "visits": "visites", + "bounceRate": "rebond", + "avgDuration": "moy", "option": { "websiteId": { "label": "Site Web", @@ -2596,53 +2607,53 @@ "loading": "Chargement des événements...", "noEvents": "Aucun événement trouvé", "none": "Aucun événement", - "configureWebsiteFirst": "" + "configureWebsiteFirst": "Sélectionnez d'abord un site web pour charger les événements" }, "chartType": { - "label": "", - "description": "", + "label": "Type de graphique", + "description": "Style d'affichage du graphique", "option": { - "bar": "", - "sparkline": "" + "bar": "Graphique à barres", + "sparkline": "Graphique sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Style de graphique", + "description": "Comment afficher la série d'événements dans le graphique", "option": { - "grouped": "", - "overlay": "" + "grouped": "Côte à côte", + "overlay": "Superposition (sous-ensemble)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Vue", + "description": "Quoi afficher dans le corps du widget", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Graphique", + "events": "Graphique des événements", + "topPages": "Pages principales", + "topReferrers": "Référents principaux" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Événements", + "description": "Sélectionnez un ou plusieurs événements à afficher dans le graphique", + "placeholder": "Sélectionner les événements...", + "loading": "Chargement des événements...", + "noEvents": "Aucun événement trouvé", + "configureWebsiteFirst": "Sélectionnez d'abord un site web pour charger les événements" }, "topCount": { - "label": "", - "description": "" + "label": "Éléments à afficher", + "description": "Nombre d'éléments principaux à afficher (max 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "événements", + "label": "événements" }, "topPages": { - "direct": "" + "direct": "Directe" }, "topReferrers": { "direct": "Directe" @@ -2651,10 +2662,10 @@ "selectPrompt": "Sélectionnez les événements à afficher" }, "error": { - "noIntegration": "", + "noIntegration": "Aucune intégration Umami configurée", "noWebsite": "Aucun site web configuré", "noData": "Aucune donnée disponible", - "internalServerError": "" + "internalServerError": "Impossible de récupérer les données Umami" } }, "common": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Afficher seulement les médias en cours de lecture", "description": "Désactiver cette option ne fonctionnera pas pour Plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "En cours de lecture", "user": "Utilisateur", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Limiter les éléments par intégration", "description": "Cela limitera le nombre d'éléments affichés par intégration, pas globalement" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Sélectionner les colonnes dans les éléments", - "noCommunications": "Impossible de charger les données à partir de l'intégration" + "noCommunications": "Impossible de charger les données à partir de l'intégration", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Index actuel au sein du client" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { "columnTitle": "Intégration" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Heure de finition", - "detailsTitle": "Temps écoulé depuis/à l'achèvement" + "detailsTitle": "Temps écoulé depuis/à l'achèvement", + "eta": "" }, "type": { "columnTitle": "Type", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Ratio global" + "globalRatio": "Ratio global", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Sorties récentes", @@ -3383,7 +3436,7 @@ "label": "Masquer la description" }, "showPosterImage": { - "label": "" + "label": "Afficher l'image de l'affiche" } } }, @@ -3614,7 +3667,7 @@ }, "speedtestTracker": { "name": "Suivi de test de vitesse", - "description": "", + "description": "Affiche les résultats des tests de vitesse depuis votre instance Speedtest Tracker.", "option": { "showLatestResult": { "label": "Afficher le dernier résultat" @@ -3631,24 +3684,24 @@ }, "latestResult": "Dernier résultat", "averages": "Moyennes", - "tests": "", - "recentResults": "", - "recentResultsSpeed": "", - "recentResultsPing": "", - "download": "", - "upload": "", - "ping": "", - "status": "", - "avgDownload": "", - "avgUpload": "", - "avgPing": "", - "healthy": "", - "unhealthy": "", - "ok": "", - "fail": "", - "noSectionsEnabled": "", + "tests": "{count, plural, one {test} other {tests}}", + "recentResults": "Résultats récents", + "recentResultsSpeed": "Vitesse", + "recentResultsPing": "Ping", + "download": "Téléchargement", + "upload": "Téléversement", + "ping": "Ping", + "status": "État", + "avgDownload": "Téléchargement moyen", + "avgUpload": "Téléversement moyen", + "avgPing": "Ping moyen", + "healthy": "Sain", + "unhealthy": "Dysfonctionnement", + "ok": "OK", + "fail": "Échec", + "noSectionsEnabled": "Activez au moins une section dans les options du widget.", "error": { - "internalServerError": "" + "internalServerError": "Impossible de récupérer les données du test de vitesse" } }, "uptimeKuma": { @@ -3741,18 +3794,6 @@ "label": "Afficher les titres", "description": "" }, - "showNowPlaying": { - "label": "Afficher la lecture en cours", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3805,7 +3844,7 @@ "option": { "cpu": "CPU", "memory": "Mémoire", - "gpu": "", + "gpu": "GPU", "network": "Réseau" } }, @@ -3822,7 +3861,7 @@ "card": { "cpu": "CPU", "memory": "RAM", - "gpu": "", + "gpu": "GPU", "network": "NET", "up": "UP", "down": "HORS SERVICE" @@ -3883,41 +3922,41 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Systèmes Beszel (Tableau)", + "description": "Vue en tableau de tous les systèmes surveillés par Beszel avec colonnes triables et indicateurs d'état", "option": { "statusFilter": { - "label": "" + "label": "Filtre d'état" }, "sortBy": { - "label": "" + "label": "Trier par" }, "sortDirection": { - "label": "" + "label": "Direction du tri" }, "showCpu": { - "label": "" + "label": "Afficher le CPU" }, "showMemory": { - "label": "" + "label": "Afficher la mémoire" }, "showDisk": { - "label": "" + "label": "Afficher le disque" }, "showGpu": { - "label": "" + "label": "Afficher le GPU" }, "showLoadAvg": { - "label": "" + "label": "Afficher la charge moyenne" }, "showNet": { - "label": "" + "label": "Afficher le réseau" }, "showTemp": { - "label": "" + "label": "Afficher la température" }, "showBattery": { - "label": "" + "label": "Afficher la batterie" }, "showServices": { "label": "" @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "", @@ -4508,7 +4555,7 @@ "boards": "Tableaux de bord", "apps": "Applications", "integrations": "Intégrations", - "customWidgets": "", + "customWidgets": "Widgets personnalisés", "searchEngies": "Moteurs de recherche", "medias": "Médias", "users": { @@ -4528,7 +4575,7 @@ "api": "API", "certificates": "Certificats", "tasks": "Tâches", - "backup": "" + "backup": "Sauvegarde" } }, "settings": "Paramètres", @@ -4609,7 +4656,7 @@ "private": "Ce tableau est privé" }, "noResults": { - "title": "" + "title": "Aucun tableau de bord pour l'instant" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Premier jour de la semaine", "accessibility": "Accessibilité", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Visites guidées d'intégration", + "description": "Réinitialiser les visites guidées pour les revoir lors de votre prochaine visite dans la zone de gestion ou le tableau de bord.", + "reset": "Réinitialiser les visites guidées", "resetSuccess": { - "title": "", - "message": "" + "title": "Visites réinitialisées", + "message": "Les visites guidées s'afficheront à nouveau lors de votre prochaine visite" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Complété", + "notStarted": "Non commencé" }, "name": { - "management": "", - "dashboard": "" + "management": "Administration", + "dashboard": "Tableau de bord" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "Schéma de couleurs par défaut", "options": { - "auto": "", + "auto": "Automatique", "light": "Clair", "dark": "Sombre" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Sauvegarde complète de la base de données", + "metaTitle": "Sauvegarde et restauration", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Exporter la base de données", + "description": "Téléchargez une sauvegarde complète de votre base de données SQLite incluant tous les paramètres, utilisateurs, tableaux de bord et secrets d'intégration chiffrés. La sauvegarde est regroupée dans un fichier ZIP avec la clé de chiffrement et les métadonnées.", + "button": "Télécharger la sauvegarde", + "error": "Échec de l'exportation", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Exportation de données sensibles", + "warningTitle": "Cette exportation contient l'intégralité de votre base de données.", + "warningBody": "La sauvegarde comprend tous les utilisateurs, les secrets d'intégration (chiffrés), les clés API, les configurations de tableaux de bord et les données d'application. Stockez le fichier exporté en lieu sûr et ne le partagez pas.", + "typePrompt": "Tapez \"{phrase}\" pour continuer", + "submit": "Exporter la base de données", + "cancel": "Annuler" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Restaurer la base de données", + "description": "Téléversez une sauvegarde ZIP précédemment exportée pour restaurer votre base de données. Cela remplacera l'intégralité de votre base de données. Si la sauvegarde a été créée avec une clé de chiffrement différente, les secrets seront automatiquement rechiffrés.", + "warning": "Restaurer une sauvegarde remplacera complètement votre base de données actuelle et redémarrera l'application. Cette action est irréversible.", "dropzone": { - "title": "", - "description": "" + "title": "Déposez votre fichier ZIP de sauvegarde ici ou cliquez pour parcourir", + "description": "Seuls les fichiers .zip provenant d'une sauvegarde SQLite Homarr sont acceptés" }, - "changeFile": "", - "button": "", + "changeFile": "Changer le fichier", + "button": "Restaurer la base de données", "success": { - "title": "", - "message": "" + "title": "Restauration terminée", + "message": "La base de données a été restaurée avec succès. L'application redémarre..." }, - "error": "" + "error": "Échec de l'importation" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Contenu de la sauvegarde", + "exported": "Exporté le {date}", + "loading": "Analyse du fichier de sauvegarde...", + "errorTitle": "Erreur d'aperçu", + "entity": "Entité", + "count": "Nombre", + "boards": "Tableaux de bord", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Tableaux de bord", + "user": "Utilisateurs", + "app": "Applications", + "integration": "Intégrations", + "item": "Widgets", + "media": "Médias", + "search_engine": "Moteurs de recherche" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Échec de l'analyse du fichier de sauvegarde", + "invalidMissingMetadata": "Sauvegarde invalide : metadata.json manquant", + "invalidMissingDb": "Sauvegarde invalide : db.sqlite manquant" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Déposez votre fichier ZIP de sauvegarde ici", + "description": "Accepte les fichiers .zip d'une sauvegarde SQLite Homarr (max 256 Mo)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analyse de la sauvegarde...", + "changeFile": "Changer le fichier", + "continueToRestore": "Continuer vers la restauration", + "tryAgain": "Réessayer", + "analysisError": "Erreur d'analyse", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Contenu de la sauvegarde", + "exported": "Exporté le {date}", + "entity": "Entité", + "count": "Nombre", + "boards": "Tableaux de bord", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Tableaux de bord", + "user": "Utilisateurs", + "app": "Applications", + "integration": "Intégrations", + "item": "Widgets", + "media": "Médias", + "search_engine": "Moteurs de recherche" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migration appliquée", + "migrationsAppliedPlural": "{count} migrations appliquées", + "migrationsOlderVersion": "Cette sauvegarde provient d'une version plus ancienne de Homarr. {count} migration de schéma a été appliquée pour la mettre à jour.", + "migrationsOlderVersionPlural": "Cette sauvegarde provient d'une version plus ancienne de Homarr. {count} migrations de schéma ont été appliquées pour la mettre à jour.", + "migrationsUpToDate": "Le schéma de base de données est à jour ({count} migrations appliquées)", + "upToDate": "À jour", + "migrationsPending": "{count} en attente" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Application des migrations ({current}/{total})", + "migrationLabel": "Migration {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Action destructive", + "warningTitle": "Cela remplacera définitivement l'intégralité de votre base de données.", + "warningBody": "Tous les tableaux, utilisateurs, applications, intégrations, paramètres et sessions actuels seront perdus. Cette action est irréversible. L'application redémarrera après la restauration.", + "typePrompt": "Tapez \"{phrase}\" pour continuer", + "cancel": "Annuler", + "submit": "Restaurer la base de données" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Restauration de la base de données...", + "extracting": "Extraction de l'archive de sauvegarde", + "migrating": "Application des migrations de base de données", + "encrypting": "Rechiffrement des secrets d'intégration", + "swapping": "Remplacement du fichier de base de données", + "restarting": "Redémarrage du serveur" }, "complete": { - "title": "", - "message": "" + "title": "Restauration terminée", + "message": "La base de données a été restaurée avec succès. Le serveur redémarre — veuillez rafraîchir la page dans quelques secondes." }, "failed": { - "title": "" + "title": "Échec de la restauration" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Sauvegarde invalide : metadata.json manquant", + "invalidMissingDb": "Sauvegarde invalide : db.sqlite manquant", + "analyzeError": "Échec de l'analyse de la sauvegarde" } } }, @@ -5207,8 +5254,8 @@ "subtitle": "{count} ont contribué à des traductions dans de nombreuses langues" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "Commanditaires", + "subtitle": "{count} soutiens financiers pour le projet" }, "libraries": { "title": "Bibliothèques", @@ -5277,15 +5324,15 @@ "label": "Ports" }, "host": { - "label": "" + "label": "Hôte" } }, "action": { "title": "Actions", "logs": { - "label": "", + "label": "Voir les journaux", "page": { - "title": "" + "title": "Journaux de {name}" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Supprimer", + "confirm": "", "notification": { "success": { "title": "Conteneurs supprimés", @@ -5681,9 +5729,9 @@ } }, "custom-widgets": { - "label": "", + "label": "Widgets personnalisés", "new": { - "label": "" + "label": "Nouveau" }, "edit": { "label": "", @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "Journaux" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "Commandes globales", "option": { "colorScheme": { - "auto": "", + "auto": "Basculer le mode d'apparence", "light": "Activer le mode clair", "dark": "Activer le mode sombre" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Préférences", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Sélectionnez une préférence à modifier", + "backHint": "Appuyez sur Retour arrière ou utilisez le bouton retour pour revenir en arrière", + "backAction": "Retour" } }, "notification": { "error": { - "message": "" + "message": "Impossible de mettre à jour la préférence" } }, "option": { "preferences": { - "label": "" + "label": "Ouvrir les préférences" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Activé", + "disabled": "Désactivé" }, "board": { - "none": "", - "unavailable": "" + "none": "Aucun", + "unavailable": "Actuellement sélectionné (indisponible)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Aucun", + "unavailable": "Actuellement sélectionné (indisponible)" }, "colorScheme": { - "label": "", + "label": "Thème de couleurs", "children": { "detail": { - "title": "" + "title": "Sélectionnez votre thème de couleurs" } } }, "locale": { - "label": "", + "label": "Langue", "children": { "detail": { - "title": "" + "title": "Sélectionnez votre langue préférée" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Moteur de recherche par défaut", "children": { "detail": { - "title": "" + "title": "Sélectionnez votre moteur de recherche par défaut" } } }, "openSearchInNewTab": { - "label": "", + "label": "Ouvrir les résultats de recherche dans un nouvel onglet", "children": { "detail": { - "title": "" + "title": "Ouvrir les résultats de recherche dans un nouvel onglet" } } }, "ddgBangs": { - "label": "", + "label": "Activer les bangs DuckDuckGo", "children": { "detail": { - "title": "" + "title": "Activer les bangs DuckDuckGo" } } }, "firstDayOfWeek": { - "label": "", + "label": "Premier jour de la semaine", "children": { "detail": { - "title": "" + "title": "Sélectionnez le premier jour de la semaine" } } }, "homeBoardId": { - "label": "", + "label": "Tableau de bord d'accueil", "children": { "detail": { - "title": "" + "title": "Sélectionnez votre tableau de bord d'accueil" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Tableau de bord d'accueil mobile", "children": { "detail": { - "title": "" + "title": "Sélectionnez votre tableau de bord d'accueil mobile" } } }, "pingIconsEnabled": { - "label": "", + "label": "Utiliser les icônes pour les pings", "children": { "detail": { - "title": "" + "title": "Utiliser les icônes pour les pings" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Ouvrir la page complète des préférences" } } } } }, "media": { - "help": "", + "help": "Rechercher des films ou séries à demander", "requestMovie": "Demander un film", "requestSeries": "Demander une série", "openIn": "Ouvrir dans {kind}", "group": { - "title": "" + "title": "Films et séries" }, "action": { "search": { - "label": "", - "description": "", + "label": "Rechercher des films ou séries", + "description": "Commencez à taper pour rechercher vos intégrations de demande de médias", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Ajoutez une intégration Overseerr, Jellyseerr ou Seerr pour activer la recherche de médias.", + "scoped": "Ce widget n'a pas d'intégration de demande de médias accessible." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Disponible", + "partiallyAvailable": "Partiel", + "processing": "Traitement en cours", + "requested": "Demandé", + "pending": "Demandé" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "Moteurs de recherche", - "tipDdgBangs": "", + "tipDdgBangs": "Astuce : Vous pouvez également utiliser ici n'importe quel bang DuckDuckGo, par ex. !quelquechose", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Rechercher \"{query}\" avec {label}", + "pressEnterToOpen": "Appuyez sur Entrée pour ouvrir", + "engineSelected": "{label} sélectionné (!{bang})", + "typeQueryToContinue": "Tapez votre requête de recherche pour continuer", + "emptyBangHint": "Tapez un bang, par ex. !yt, puis appuyez sur Espace pour sélectionner" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "Saison", "episodes": "Épisodes", - "status": "" + "status": "État" }, "status": { - "requested": "" + "requested": "Demandé" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Lire la documentation", + "next": "Suivant", + "prev": "Retour", + "done": "Terminé", + "skip": "Passer la visite", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Bienvenue sur Homarr !", + "description": "Ceci est votre centre de contrôle. De là, vous gérez les tableaux de bord, les applications, les intégrations, les utilisateurs et les paramètres du serveur. Faisons une visite de chaque section." }, "boardsList": { - "title": "", - "description": "" + "title": "Vos tableaux de bord", + "description": "Voici tous vos tableaux de bord. Chaque tableau a sa propre disposition, son arrière-plan et ses paramètres d'accès. Vous pouvez voir qui a créé chacun et s'il est public ou privé." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Créer un tableau de bord", + "description": "Cliquez ici pour créer un nouveau tableau de bord ou en importer un depuis une installation Homarr précédente. Chaque tableau obtient sa propre URL que vous pouvez partager." }, "appsList": { - "title": "", - "description": "" + "title": "Vos applications", + "description": "Ce sont toutes les applications que vous avez ajoutées — des liens vers vos services auto-hébergés. Chaque application a une icône, une vérification de santé optionnelle et un badge d'état sur le tableau de bord." }, "appsCreate": { - "title": "", - "description": "" + "title": "Ajouter une application", + "description": "Enregistrez un nouveau service ici. Donnez-lui un nom, une URL et une icône — il apparaîtra comme une tuile sur vos tableaux avec une surveillance de l'état en direct." }, "integrationsList": { - "title": "", - "description": "" + "title": "Vos intégrations", + "description": "Ce sont les services connectés à Homarr — Sonarr, Radarr, Plex, Jellyfin et plus de 50 autres. Toutes les informations d'identification sont chiffrées." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Ajouter une intégration", + "description": "Connectez un nouveau service ici. Choisissez le type, entrez l'URL et la clé API — Homarr valide la connexion avant d'enregistrer." }, "usersList": { - "title": "", - "description": "" + "title": "Vos utilisateurs", + "description": "Voyez tous ceux qui ont accès. Organisez les utilisateurs en groupes et contrôlez qui peut voir ou modifier chaque tableau." }, "usersCreate": { - "title": "", - "description": "" + "title": "Créer un utilisateur", + "description": "Ajoutez un nouveau compte utilisateur ici. Vous pouvez également utiliser des liens d'invitation pour une intégration facile. C'est la fin de la visite — vous êtes prêt !" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Ceci est votre tableau de bord", + "description": "Un tableau de bord par glisser-déposer où vous organisez les applications et les widgets. Appuyez sur Ctrl+K à tout moment pour rechercher des applications, des tableaux et des actions." }, "editMode": { - "title": "", - "description": "" + "title": "Mode édition", + "description": "Cliquez ici pour entrer en mode édition. Vous pouvez ensuite ajouter des widgets, des applications et des sections — faites glisser pour repositionner, redimensionnez avec la poignée d'angle. Cliquez à nouveau pour enregistrer vos modifications." }, "settings": { - "title": "", - "description": "" + "title": "Paramètres du tableau de bord", + "description": "Modifiez le nom, les colonnes, l'arrière-plan, les couleurs de ce tableau et qui peut y accéder. Chaque tableau peut être public ou privé." }, "switcher": { - "title": "", - "description": "" + "title": "Changer de tableau de bord", + "description": "Passez d'un tableau à l'autre. Créez des tableaux de bord distincts pour différents usages — médias, réseau, par utilisateur, ou tout ce que vous voulez." }, "userMenu": { - "title": "", - "description": "" + "title": "Votre profil", + "description": "Changez votre thème de couleurs, votre langue, votre tableau d'accueil et vos préférences. Vous pouvez également accéder à la zone de gestion depuis ici." } } } diff --git a/packages/translation/src/lang/he.json b/packages/translation/src/lang/he.json index 50a0a93fd..1c37a681c 100644 --- a/packages/translation/src/lang/he.json +++ b/packages/translation/src/lang/he.json @@ -1505,8 +1505,8 @@ "noResults": "לא נמצאו תוצאות", "unsavedChanges": "ישנם שינויים שלא נשמרו!", "servers": "שרתים", - "applications": "", - "services": "", + "applications": "אפליקציות", + "services": "שירותים", "preview": { "show": "הצג תצוגה מקדימה", "hide": "הסתר תצוגה המקדימה" @@ -1938,16 +1938,16 @@ } }, "timetable": { - "name": "", - "description": "", - "title": "", - "noStation": "", + "name": "לוח זמנים", + "description": "מציג זמני יציאה לתחנה", + "title": "יציאות {station}", + "noStation": "לא נבחרה תחנה", "option": { "baseUrl": { "label": "" }, "station": { - "label": "" + "label": "תחנה" } } }, @@ -2024,32 +2024,32 @@ } }, "anchorNote": { - "name": "", - "description": "", + "name": "פתק Anchor", + "description": "מציג פתק נבחר מ-Anchor", "option": { "noteId": { - "label": "" + "label": "פתק" }, "showTitle": { - "label": "" + "label": "הצג כותרת" }, "showUpdatedAt": { - "label": "" + "label": "הצג עדכון אחרון" } }, - "empty": "", - "emptyContent": "", - "notFound": "", - "noNotes": "", - "integrationRequired": "", - "updatedAt": "", - "untitled": "", - "edit": "", - "save": "", - "cancel": "", - "readOnlyViewer": "", - "saveForbidden": "", - "saveFailed": "" + "empty": "בחר פתק להצגה", + "emptyContent": "לפתק זה אין תוכן", + "notFound": "הפתק לא נמצא", + "noNotes": "לא נמצאו פתקים", + "integrationRequired": "בחר תחילה אינטגרציית Anchor", + "updatedAt": "עודכן ב- {date}", + "untitled": "ללא כותרת", + "edit": "עריכה", + "save": "שמור", + "cancel": "בטל", + "readOnlyViewer": "יש לך גישת צפייה לפתק זה. עריכה מושבתת.", + "saveForbidden": "אין לך הרשאה לערוך פתק זה.", + "saveFailed": "שמירת הפתק נכשלה. נסה שוב." }, "iframe": { "name": "iFrame", @@ -2083,7 +2083,7 @@ "label": "אפשר מיקום גיאוגרפי" }, "allowModals": { - "label": "" + "label": "אפשר חלונות קופצים" } }, "error": { @@ -2319,7 +2319,7 @@ "label": "הצג מידע זיכרון" }, "gpu": { - "label": "" + "label": "הצג מידע GPU" }, "showUptime": { "label": "הצג זמן פעולה" @@ -2428,43 +2428,54 @@ }, "descendingDefaultSort": { "label": "מיון הפוך" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "נכשל באחזור סטטיסטיקות המכולות" + "internalServerError": "נכשל באחזור סטטיסטיקות המכולות", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { - "name": "", - "description": "", + "name": "קוליפיי", + "description": "סקירה של מופע Coolify שלך עם שרתים ואפליקציות", "option": { "showServers": { - "label": "" + "label": "הצג שרתים" }, "showApplications": { - "label": "" + "label": "הצג אפליקציות" }, "showServices": { - "label": "" + "label": "הצג שירותים" } }, "empty": { - "servers": "", - "applications": "", - "services": "" + "servers": "לא נמצאו שרתים", + "applications": "לא נמצאו אפליקציות", + "services": "לא נמצאו שירותים" }, "footer": { - "updated": "" + "updated": "עודכן ב- {when}" }, "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "לא הוגדרה אינטגרציית Coolify", + "internalServerError": "אחזור נתוני Coolify נכשל" }, "server": { - "buildServer": "" + "buildServer": "בנייה" }, "instances": { - "title": "" + "title": "מופעים" } }, "vpn": { @@ -2505,85 +2516,85 @@ } }, "tracearr": { - "name": "", - "description": "", + "name": "טרייסאר", + "description": "ניטור שרת מדיה משופר עם נתוני זרם וקידוד מפורטים", "option": { "showStreams": { - "label": "" + "label": "הצג זרמים פעילים" }, "showStats": { - "label": "" + "label": "הצג סיכום סטטיסטיקות" }, "showRecentActivity": { - "label": "" + "label": "הצג פעילות אחרונה" }, "showViolations": { - "label": "" + "label": "הצג הפרות" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "זרמים פעילים", + "totalUsers": "סך המשתמשים", + "transcodes": "קידודים", + "bandwidth": "רוחב פס" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "אין זרמים פעילים", + "user": "משתמש", + "media": "מדיה", + "state": "מצב", + "quality": "איכות", + "device": "מכשיר", + "progress": "התקדמות", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "הפעלה ישירה", + "transcode": "קידוד", + "directStream": "זרם ישיר" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "פעילות אחרונה", + "empty": "אין פעילות אחרונה", + "watched": "נצפה", + "partial": "חלקי" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "הפרות", + "empty": "אין הפרות אחרונות", + "rule": "כלל", + "user": "משתמש" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "לא הופעלו מקטעים", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "לא הוגדרה אינטגרציית Tracearr", + "internalServerError": "אחזור נתוני Tracearr נכשל" } }, "umami": { - "name": "", - "description": "", - "visitors": "", - "active": "", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "name": "Umami ניתוחים", + "description": "הצג נתוני מבקרים ממופע Umami Analytics שלך", + "visitors": "מבקרים", + "active": "פעילים", + "pageviews": "צפיות דף", + "visits": "ביקורים", + "bounceRate": "נטישה", + "avgDuration": "ממוצע", "option": { "websiteId": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noWebsites": "", - "configureIntegrationFirst": "" + "label": "אתר", + "description": "בחר אתר המנוטר על ידי מופע ה-Umami שלך", + "placeholder": "בחר אתר", + "loading": "טוען אתרים...", + "noWebsites": "לא נמצאו אתרים", + "configureIntegrationFirst": "חבר תחילה אינטגרציית Umami" }, "timeFrame": { - "label": "", - "description": "", + "label": "מסגרת זמן", + "description": "פרק הזמן להצגת נתוני מבקרים", "option": { - "today": "", - "24h": "", - "7d": "", + "today": "היום", + "24h": "24 השעות האחרונות", + "7d": "7 הימים האחרונים", "30d": "", "month": "", "lastMonth": "" @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "הצג רק את ההפעלה הנוכחית", "description": "השבתת אפשרות זו לא תעבוד עבור פלקס" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "מתנגן כרגע", "user": "משתמש", @@ -2734,6 +2757,9 @@ "id": "מזהה", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2990,33 +3016,33 @@ } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "סטטיסטיקות שרת Immich", + "description": "מידע על מופע ה-Immich שלך", "option": { "showUsers": { - "label": "", - "description": "" + "label": "הצג משתמשים", + "description": "הצג מספר משתמשים במופע שלך" }, "showPhotos": { - "label": "", - "description": "" + "label": "הצג תמונות", + "description": "הצג מספר תמונות במופע שלך" }, "showVideos": { - "label": "", - "description": "" + "label": "הצג סרטונים", + "description": "הצג מספר סרטונים במופע שלך" }, "showStorage": { - "label": "", - "description": "" + "label": "הצג אחסון", + "description": "הצג את כמות האחסון הכוללת בשימוש" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "משתמשים", + "photos": "תמונות", + "videos": "סרטונים", + "storage": "אחסון בשימוש" }, "immich-albumCarousel": { - "name": "", + "name": "אלבום Immich", "allPhotos": "", "option": { "albumId": { @@ -3024,12 +3050,12 @@ "description": "" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "מרווח בשניות", + "description": "מחליף תמונות באלבום כל X שניות. חייב להיות לפחות 1. חייב להיות פחות מ-3600." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "הצג מידע תמונה", + "description": "הצג תאריך התמונה והאינדקס הנוכחי בתחתית המצגת" }, "randomizePhotos": { "label": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "הגבלת פריטים לכל אינטגרציה", "description": "פעולה זו תגביל את מספר הפריטים המוצגים בכל אינטגרציה, לא באופן גלובלי" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "בחר עמודות בפריטים", - "noCommunications": "לא ניתן לטעון נתונים מהאינטגרציה" + "noCommunications": "לא ניתן לטעון נתונים מהאינטגרציה", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "מדד נוכחי בתוך הלקוח" }, "id": { - "columnTitle": "מזהה" + "columnTitle": "מזהה", + "detailsTitle": "" }, "integration": { "columnTitle": "אינטגרציה" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "זמן סיום", - "detailsTitle": "זמן מאז/עד סיום" + "detailsTitle": "זמן מאז/עד סיום", + "eta": "" }, "type": { "columnTitle": "סוּג", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "יחס גלובלי" + "globalRatio": "יחס גלובלי", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "מדיה משוחררת", @@ -3383,7 +3436,7 @@ "label": "הסתר תיאור" }, "showPosterImage": { - "label": "" + "label": "הצג תמונת פוסטר" } } }, @@ -3613,42 +3666,42 @@ } }, "speedtestTracker": { - "name": "", - "description": "", + "name": "מעקב Speedtest", + "description": "מציג תוצאות בדיקת מהירות ממופע מעקב Speedtest שלך.", "option": { "showLatestResult": { - "label": "" + "label": "הצג תוצאה אחרונה" }, "showStats": { - "label": "" + "label": "הצג ממוצעים" }, "showRecentResults": { - "label": "" + "label": "הצג תוצאות אחרונות" }, "showPingGraph": { - "label": "" + "label": "הצג גרף פינג" } }, - "latestResult": "", - "averages": "", - "tests": "", - "recentResults": "", - "recentResultsSpeed": "", - "recentResultsPing": "", - "download": "", - "upload": "", - "ping": "", - "status": "", - "avgDownload": "", - "avgUpload": "", - "avgPing": "", - "healthy": "", - "unhealthy": "", - "ok": "", - "fail": "", - "noSectionsEnabled": "", + "latestResult": "תוצאה אחרונה", + "averages": "ממוצעים", + "tests": "{count} בדיקות", + "recentResults": "תוצאות אחרונות", + "recentResultsSpeed": "מהירות", + "recentResultsPing": "פינג", + "download": "הורדה", + "upload": "העלאה", + "ping": "פינג", + "status": "מצב", + "avgDownload": "הורדה ממוצעת", + "avgUpload": "העלאה ממוצעת", + "avgPing": "פינג ממוצע", + "healthy": "בריא", + "unhealthy": "לא בריא", + "ok": "בסדר", + "fail": "כשל", + "noSectionsEnabled": "הפעל לפחות מקטע אחד באפשרויות הווידג'ט.", "error": { - "internalServerError": "" + "internalServerError": "אחזור נתוני speedtest נכשל" } }, "uptimeKuma": { @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3805,7 +3844,7 @@ "option": { "cpu": "מעבד", "memory": "זיכרון", - "gpu": "", + "gpu": "מעבד גרפי", "network": "רשת" } }, @@ -3822,35 +3861,35 @@ "card": { "cpu": "מעבד", "memory": "זיכרון", - "gpu": "", + "gpu": "מעבד גרפי", "network": "רשת", "up": "העלאה", "down": "הורדה" } }, "systemDisks": { - "name": "", - "description": "", + "name": "דיסקי מערכת", + "description": "שימוש בדיסקים במערכת", "option": { "showTemperatureIfAvailable": { - "label": "" + "label": "הצג טמפרטורה אם זמינה" }, "displayMode": { - "label": "", + "label": "מצב תצוגה", "option": { "percentage": { - "label": "" + "label": "אחוז (לדוגמה, 76%)" }, "absolute": { - "label": "" + "label": "ערכים מוחלטים (לדוגמה, 800GB / 1TB)" }, "free": { - "label": "" + "label": "אחוז שטח פנוי (לדוגמה, 24% פנוי)" } } }, "showBackgroundBar": { - "label": "" + "label": "הצג סרגל שימוש ברקע" }, "visibleStorageVolumes": { "label": "", @@ -3859,7 +3898,7 @@ } }, "status": { - "unhealthy": "" + "unhealthy": "לא בריא" } }, "customApi": { @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "", @@ -4828,8 +4875,8 @@ "user": { "title": "משתמשים", "enableGravatar": { - "label": "", - "description": "" + "label": "הפעל Gravatar", + "description": "מציג אווטר מ-Libravatar/Gravatar כברירת מחדל כשאין אווטר מותאם אישית וקיים דוא\"ל" } }, "search": { @@ -5207,8 +5254,8 @@ "subtitle": "{count} תורמים בתרגום לשפות שונות" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "ספונסרים", + "subtitle": "{count} תומכים בפרויקט כלכלית" }, "libraries": { "title": "ספריות", @@ -5329,6 +5376,7 @@ }, "remove": { "label": "הסר", + "confirm": "", "notification": { "success": { "title": "הקונטיינרים הוסרו", diff --git a/packages/translation/src/lang/hr.json b/packages/translation/src/lang/hr.json index 9dabc244e..536865656 100644 --- a/packages/translation/src/lang/hr.json +++ b/packages/translation/src/lang/hr.json @@ -8,9 +8,9 @@ "action": { "scratch": "", "importOldmarr": "", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Vrati iz SQLite sigurnosne kopije", + "restoreSqliteDescription": "Prenesite cjelovitu SQLite sigurnosnu kopiju baze podataka iz prethodne Homarr instance. To će vratiti sve ploče, korisnike, aplikacije, integracije i postavke.", + "backToOptions": "← Natrag na opcije postavljanja" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "" }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Integracije", + "subtitle": "Odaberite usluge koje koristite.", + "description": "Odaberite integracije koje želite povezati. Automatski ćemo postaviti vašu ploču s odgovarajućim widgetima.", "action": { - "continue": "", - "skip": "" + "continue": "Nastavi", + "skip": "Preskoči za sada" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} od {total}", + "skip": "Preskoči ovu integraciju", + "finishing": "Postavljanje vaše ploče...", "error": { - "title": "", - "message": "" + "title": "Postavljanje nije uspjelo", + "message": "Nešto je pošlo po zlu prilikom postavljanja vaše ploče. Pokušajte ponovno." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "Pomagači URL-a", + "description": "Ovi pomagači pokušavaju pogoditi URL za vaše usluge. Ako ne radi, samo ručno upišite adresu." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Osnovni URL", + "placeholder": "homelab.local ili 192.168.1.1", + "hint": "Unesite svoju osnovnu domenu ili IP za automatsko popunjavanje URL-ova integracija", + "warning": "Postavljanjem osnovnog URL-a sada automatski će ispuniti sve URL-ove integracija, uštedjet ćete vrijeme tijekom postavljanja", + "preview": "npr. {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Poddomena", + "hostPort": "Računalo:Port" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker je otkrio {count} usluga", + "detectedBreakdown": "{integrations} integracija · {apps} aplikacija", + "summary": "Homarr je otkrio {apps} aplikacija, {integrations} od kojih imaju ugrađene integracije", + "appBadge": "Aplikacija", + "appSectionLabel": "Aplikacije za dodavanje na ploču ({count} odabrano)", + "scanning": "Skeniranje Dockera...", + "scanningDescription": "Traženje pokrenutih kontejnera na vašem sustavu" } }, "finish": { @@ -154,49 +154,49 @@ "name": "Korisnik", "page": { "login": { - "title": "", - "subtitle": "" + "title": "Prijavite se na svoj račun", + "subtitle": "Dobro došli natrag! Unesite svoje podatke" }, "invite": { - "title": "", - "subtitle": "", - "description": "" + "title": "Pridružite se Homarru", + "subtitle": "Dobro došli u Homarr! Kreirajte svoj račun", + "description": "Pozvani ste od strane {username}" }, "init": { - "title": "", - "subtitle": "" + "title": "Nova instalacija Homarra", + "subtitle": "Kreirajte početnog administratorskog korisnika" } }, "field": { "email": { "label": "E-pošta", - "verified": "" + "verified": "Potvrđeno" }, "username": { "label": "Korisničko ime" }, "password": { "label": "Lozinka", - "suggestionsTitle": "", + "suggestionsTitle": "Prijedlozi lozinke", "suggestion": { - "length": "", + "length": "Najmanje 8 znakova", "lowercase": "Uključuje mala slova", "uppercase": "Uključuje veliko slovo", "number": "Uključuje broj", - "special": "" + "special": "Sadrži poseban znak" } }, "passwordConfirm": { "label": "Potvrdi lozinku" }, "previousPassword": { - "label": "" + "label": "Prethodna lozinka" }, "homeBoard": { - "label": "" + "label": "Početna ploča" }, "pingIconsEnabled": { - "label": "" + "label": "Koristi ikone za pingove" }, "enableRightClickOnWidgets": { "label": "", @@ -209,29 +209,29 @@ "label": "" }, "ddgBangs": { - "label": "" + "label": "Omogući DuckDuckGo prečace" } }, "error": { - "usernameTaken": "" + "usernameTaken": "Korisničko ime je već zauzeto" }, "action": { "login": { "label": "Prijaviti se", - "labelWith": "", + "labelWith": "Prijava putem {provider}", "notification": { "success": { - "title": "", - "message": "" + "title": "Prijava uspješna", + "message": "Sada ste prijavljeni" }, "error": { - "title": "", - "message": "" + "title": "Prijava neuspješna", + "message": "Vaša prijava nije uspjela" } }, "forgotPassword": { - "label": "", - "description": "" + "label": "Zaboravili ste lozinku?", + "description": "Administrator može koristiti sljedeću naredbu za resetiranje vaše lozinke:" } }, "register": { @@ -239,33 +239,33 @@ "notification": { "success": { "title": "Račun kreiran", - "message": "" + "message": "Molimo prijavite se za nastavak" }, "error": { - "title": "", - "message": "" + "title": "Kreiranje računa nije uspjelo", + "message": "Vaš račun nije moguće kreirati" } } }, "create": "Stvori korisnika", "changePassword": { - "label": "", + "label": "Promijeni lozinku", "notification": { "success": { - "message": "" + "message": "Lozinka uspješno promijenjena" }, "error": { - "message": "" + "message": "Nije moguće promijeniti lozinku" } } }, "changeHomeBoard": { "notification": { "success": { - "message": "" + "message": "Početna ploča uspješno promijenjena" }, "error": { - "message": "" + "message": "Nije moguće promijeniti početnu ploču" } } }, @@ -282,58 +282,58 @@ "changeFirstDayOfWeek": { "notification": { "success": { - "message": "" + "message": "Prvi dan tjedna uspješno promijenjen" }, "error": { - "message": "" + "message": "Nije moguće promijeniti prvi dan tjedna" } } }, "changePingIconsEnabled": { "notification": { "success": { - "message": "" + "message": "Ikone pinga uspješno prebačene" }, "error": { - "message": "" + "message": "Nije moguće prebaciti ikone pinga" } } }, "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo prečaci uspješno uključeni/isključeni" }, "error": { - "message": "" + "message": "Ne mogu uključiti/isključiti DuckDuckGo prečace" } } }, "manageAvatar": { "changeImage": { - "label": "", + "label": "Promijeni sliku", "notification": { "success": { - "message": "" + "message": "Slika uspješno promijenjena" }, "error": { - "message": "" + "message": "Nije moguće promijeniti sliku" }, "toLarge": { - "title": "", - "message": "" + "title": "Slika je prevelika", + "message": "Maksimalna veličina slike je {size}" } } }, "removeImage": { - "label": "", - "confirm": "", + "label": "Ukloni sliku", + "confirm": "Jeste li sigurni da želite ukloniti sliku?", "notification": { "success": { - "message": "" + "message": "Slika uspješno uklonjena" }, "error": { - "message": "" + "message": "Nije moguće ukloniti sliku" } } } @@ -341,34 +341,34 @@ "editProfile": { "notification": { "success": { - "message": "" + "message": "Profil uspješno ažuriran" }, "error": { - "message": "" + "message": "Nije moguće ažurirati profil" } } }, "delete": { - "label": "", - "description": "", - "confirm": "" + "label": "Trajno izbriši korisnika", + "description": "Briše ovog korisnika uključujući njegove postavke. Neće izbrisati nijednu ploču. Korisnik neće biti obaviješten.", + "confirm": "Jeste li sigurni da želite izbrisati korisnika {username} s njegovim postavkama?" }, "select": { - "label": "", - "notFound": "" + "label": "Odaberi korisnika", + "notFound": "Korisnik nije pronađen" }, "transfer": { - "label": "" + "label": "Odaberi novog vlasnika" } } }, "group": { - "title": "", - "name": "", - "search": "", + "title": "Grupe", + "name": "Grupa", + "search": "Pronađi grupu", "field": { "name": "Naziv", - "members": "", + "members": "Članovi", "homeBoard": { "label": "", "description": "" @@ -380,11 +380,11 @@ }, "permission": { "admin": { - "title": "", + "title": "Administrator", "item": { "admin": { - "label": "", - "description": "" + "label": "Administrator", + "description": "Članovi s ovom dozvolom imaju potpuni pristup svim značajkama i postavkama" } } }, @@ -392,20 +392,20 @@ "title": "aplikacije", "item": { "create": { - "label": "", - "description": "" + "label": "Kreiraj aplikacije", + "description": "Dopusti članovima kreiranje aplikacija" }, "use-all": { - "label": "", - "description": "" + "label": "Koristi sve aplikacije", + "description": "Dopusti članovima dodavanje bilo koje aplikacije na svoje ploče" }, "modify-all": { - "label": "", - "description": "" + "label": "Izmijeni sve aplikacije", + "description": "Dopusti članovima izmjenu svih aplikacija" }, "full-all": { - "label": "", - "description": "" + "label": "Potpuni pristup aplikacijama", + "description": "Dopusti članovima upravljanje, korištenje i brisanje bilo koje aplikacije" } } }, @@ -413,165 +413,165 @@ "title": "Daske", "item": { "create": { - "label": "", - "description": "" + "label": "Kreiraj ploče", + "description": "Dopusti članovima kreiranje ploča" }, "view-all": { - "label": "", - "description": "" + "label": "Pregledaj sve ploče", + "description": "Dopusti članovima pregled svih ploča" }, "modify-all": { - "label": "", - "description": "" + "label": "Izmijeni sve ploče", + "description": "Dopusti članovima izmjenu svih ploča (ne uključuje kontrolu pristupa i opasnu zonu)" }, "full-all": { - "label": "", - "description": "" + "label": "Potpuni pristup pločama", + "description": "Dopusti članovima pregled, izmjenu i brisanje svih ploča (uključujući kontrolu pristupa i opasnu zonu)" } } }, "integration": { - "title": "", + "title": "Integracije", "item": { "create": { - "label": "", - "description": "" + "label": "Kreiraj integracije", + "description": "Dopusti članovima kreiranje integracija" }, "use-all": { - "label": "", - "description": "" + "label": "Koristi sve integracije", + "description": "Dopušta članovima dodavanje bilo koje integracije na svoje ploče" }, "interact-all": { - "label": "", - "description": "" + "label": "Interakcija s bilo kojom integracijom", + "description": "Dopusti članovima interakciju s bilo kojom integracijom" }, "full-all": { - "label": "", - "description": "" + "label": "Potpuni pristup integracijama", + "description": "Dopusti članovima upravljanje, korištenje i interakciju s bilo kojom integracijom" } } }, "media": { - "title": "", + "title": "Mediji", "item": { "upload": { - "label": "", - "description": "" + "label": "Prenesi medije", + "description": "Dopusti članovima prijenos medija" }, "view-all": { - "label": "", - "description": "" + "label": "Pregledaj sve medije", + "description": "Dopusti članovima pregled svih medija" }, "full-all": { - "label": "", - "description": "" + "label": "Potpuni pristup medijima", + "description": "Dopusti članovima upravljanje i brisanje bilo kojeg medija" } } }, "other": { - "title": "", + "title": "Ostalo", "item": { "view-logs": { - "label": "", - "description": "" + "label": "Pregledaj zapisnike", + "description": "Dopusti članovima pregled zapisnika" } } }, "search-engine": { - "title": "", + "title": "Tražilice", "item": { "create": { - "label": "", - "description": "" + "label": "Kreiraj tražilice", + "description": "Dopusti članovima kreiranje tražilica" }, "modify-all": { - "label": "", - "description": "" + "label": "Izmijeni sve tražilice", + "description": "Dopusti članovima izmjenu svih tražilica" }, "full-all": { - "label": "", - "description": "" + "label": "Potpuni pristup tražilicama", + "description": "Dopusti članovima upravljanje i brisanje bilo koje tražilice" } } } }, "memberNotice": { - "mixed": "", - "external": "" + "mixed": "Neki članovi su iz vanjskih pružatelja i njima se ne može upravljati ovdje", + "external": "Svi članovi su iz vanjskih pružatelja i njima se ne može upravljati ovdje" }, "reservedNotice": { - "message": "" + "message": "Ova grupa je rezervirana za sistemsku upotrebu i ograničava neke radnje. " }, "action": { "create": { - "label": "", + "label": "Nova grupa", "notification": { "success": { - "message": "" + "message": "Grupa je uspješno kreirana" }, "error": { - "message": "" + "message": "Grupu nije moguće kreirati" } } }, "transfer": { - "label": "", - "description": "", - "confirm": "", + "label": "Prenesi vlasništvo", + "description": "Prenesi vlasništvo ove grupe drugom korisniku.", + "confirm": "Jeste li sigurni da želite prenijeti vlasništvo za grupu {name} na {username}?", "notification": { "success": { - "message": "" + "message": "Grupa {group} uspješno prenesena na {user}" }, "error": { - "message": "" + "message": "Nije moguće prenijeti vlasništvo" } } }, "addMember": { - "label": "" + "label": "Dodaj člana" }, "removeMember": { - "label": "", - "confirm": "" + "label": "Ukloni člana", + "confirm": "Jeste li sigurni da želite ukloniti {user} iz ove grupe?" }, "delete": { - "label": "", - "description": "", - "confirm": "", + "label": "Izbriši grupu", + "description": "Nakon što izbrišete grupu, nema povratka. Budite sigurni.", + "confirm": "Jeste li sigurni da želite izbrisati grupu {name}?", "notification": { "success": { - "message": "" + "message": "Grupa {name} uspješno izbrisana" }, "error": { - "message": "" + "message": "Nije moguće izbrisati grupu {name}" } } }, "changePermissions": { "notification": { "success": { - "title": "", - "message": "" + "title": "Dozvole spremljene", + "message": "Dozvole su uspješno spremljene" }, "error": { - "title": "", - "message": "" + "title": "Dozvole nisu spremljene", + "message": "Dozvole nisu spremljene" } } }, "update": { "notification": { "success": { - "message": "" + "message": "Grupa {name} je uspješno spremljena" }, "error": { - "message": "" + "message": "Nije moguće spremiti grupu {name}" } } }, "select": { - "label": "", - "notFound": "" + "label": "Odaberi grupu", + "notFound": "Grupa nije pronađena" }, "settings": { "board": { @@ -609,47 +609,47 @@ "list": { "title": "aplikacije", "noResults": { - "title": "", - "action": "" + "title": "Još nema aplikacija", + "action": "Kreirajte svoju prvu aplikaciju" } }, "create": { - "title": "", + "title": "Nova aplikacija", "notification": { "success": { - "title": "", - "message": "" + "title": "Kreiranje uspješno", + "message": "Aplikacija je uspješno kreirana" }, "error": { - "title": "", - "message": "" + "title": "Kreiranje nije uspjelo", + "message": "Aplikaciju nije moguće kreirati" } } }, "edit": { - "title": "", + "title": "Uredi aplikaciju", "notification": { "success": { - "title": "", - "message": "" + "title": "Promjene uspješno primijenjene", + "message": "Aplikacija je uspješno spremljena" }, "error": { - "title": "", - "message": "" + "title": "Nije moguće primijeniti promjene", + "message": "Aplikaciju nije moguće spremiti" } } }, "delete": { - "title": "", - "message": "", + "title": "Izbriši aplikaciju", + "message": "Jeste li sigurni da želite izbrisati aplikaciju {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Brisanje uspješno", + "message": "Aplikacija je uspješno izbrisana" }, "error": { - "title": "", - "message": "" + "title": "Brisanje nije uspjelo", + "message": "Nije moguće izbrisati aplikaciju" } } } @@ -659,10 +659,10 @@ "label": "Naziv" }, "description": { - "label": "" + "label": "Opis" }, "url": { - "label": "" + "label": "URL" }, "useDifferentUrlForPing": { "checkbox": { @@ -673,8 +673,8 @@ }, "action": { "select": { - "label": "", - "notFound": "", + "label": "Odaberi aplikaciju", + "notFound": "Aplikacija nije pronađena", "search": "", "noResults": "", "action": "", @@ -896,22 +896,22 @@ "integration": { "page": { "list": { - "title": "", - "search": "", + "title": "Integracije", + "search": "Pretraži integracije", "noResults": { - "title": "" + "title": "Još nema integracija" } }, "create": { - "title": "", + "title": "Nova {name} integracija", "notification": { "success": { - "title": "", - "message": "" + "title": "Kreiranje uspješno", + "message": "Integracija je uspješno kreirana" }, "error": { - "title": "", - "message": "" + "title": "Kreiranje nije uspjelo", + "message": "Integraciju nije moguće kreirati" } }, "app": { @@ -931,15 +931,15 @@ } }, "edit": { - "title": "", + "title": "Uredi {name} integraciju", "notification": { "success": { - "title": "", - "message": "" + "title": "Promjene uspješno primijenjene", + "message": "Integracija je uspješno spremljena" }, "error": { - "title": "", - "message": "" + "title": "Nije moguće primijeniti promjene", + "message": "Integraciju nije moguće spremiti" } }, "app": { @@ -951,16 +951,16 @@ } }, "delete": { - "title": "", - "message": "", + "title": "Izbriši integraciju", + "message": "Jeste li sigurni da želite izbrisati integraciju {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Brisanje uspješno", + "message": "Integracija je uspješno izbrisana" }, "error": { - "title": "", - "message": "" + "title": "Brisanje nije uspjelo", + "message": "Nije moguće izbrisati integraciju" } } } @@ -970,7 +970,7 @@ "label": "Naziv" }, "url": { - "label": "" + "label": "URL" }, "attemptSearchEngineCreation": { "label": "", @@ -987,52 +987,52 @@ "placeholder": "" }, "apiKeySettings": { - "label": "" + "label": "Dohvati API ključ" } }, "action": { - "create": "" + "create": "Nova integracija" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widgeta", + "noWidgets": "Nema widgeta", + "detected": "Otkriveno putem Dockera" }, "category": { "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", + "mediaService": "Mediji", + "calendar": "Kalendar", + "mediaSearch": "Pretraživanje", + "mediaRelease": "Izdanja", + "mediaRequest": "Zahtjevi", + "downloadClient": "Preuzimanja", "usenet": "", "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", + "miscellaneous": "Razno", + "smartHomeServer": "Pametni dom", + "indexerManager": "Indekser", + "healthMonitoring": "Zdravlje", + "search": "Pretraživanje", + "mediaTranscoding": "Transkodiranje", + "networkController": "Mreža", + "releasesProvider": "Izdanja", + "notifications": "Obavijesti", + "firewall": "Vatrozid", + "timetable": "Raspored", + "photoService": "Fotografije", "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "notes": "Bilješke", + "mediaMonitoring": "Nadzor", + "speedtest": "Test brzine", + "analytics": "Analitika", "vpn": "", "mediaLibrary": "", "uptimeMonitoring": "" }, "testConnection": { "action": { - "create": "", - "edit": "" + "create": "Testiraj vezu i kreiraj", + "edit": "Testiraj vezu i spremi" }, "error": { "common": { @@ -1160,71 +1160,71 @@ } } }, - "alertNotice": "", + "alertNotice": "Gumb Spremi omogućen je nakon uspostave uspješne veze", "notification": { "success": { - "title": "", - "message": "" + "title": "Veza uspješna", + "message": "Veza je uspješno uspostavljena" }, "invalidUrl": { "title": "Neispravan URL", - "message": "" + "message": "URL nije valjan" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "Nedostaju vjerodajnice", + "message": "Nisu pružene sve vjerodajnice" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "Nevažeće vjerodajnice", + "message": "Vjerodajnice su nevažeće" }, "commonError": { - "title": "", - "message": "" + "title": "Veza nije uspjela", + "message": "Veza se nije mogla uspostaviti" }, "badRequest": { - "title": "", - "message": "" + "title": "Loš zahtjev", + "message": "Zahtjev je bio neispravan" }, "unauthorized": { - "title": "", - "message": "" + "title": "Neautorizirano", + "message": "Vjerojatno pogrešne vjerodajnice" }, "forbidden": { - "title": "", - "message": "" + "title": "Zabranjeno", + "message": "Vjerojatno nedostaju dozvole" }, "notFound": { - "title": "", - "message": "" + "title": "Nije pronađeno", + "message": "Vjerojatno pogrešan URL ili putanja" }, "internalServerError": { - "title": "", - "message": "" + "title": "Interna greška poslužitelja", + "message": "Poslužitelj je naišao na grešku" }, "serviceUnavailable": { - "title": "", - "message": "" + "title": "Usluga nedostupna", + "message": "Poslužitelj je trenutno nedostupan" }, "connectionAborted": { - "title": "", - "message": "" + "title": "Veza prekinuta", + "message": "Veza je prekinuta" }, "domainNotFound": { - "title": "", - "message": "" + "title": "Domena nije pronađena", + "message": "Domena nije pronađena" }, "connectionRefused": { - "title": "", - "message": "" + "title": "Veza odbijena", + "message": "Veza je odbijena" }, "invalidJson": { - "title": "", - "message": "" + "title": "Nevažeći JSON", + "message": "Odgovor nije valjani JSON" }, "wrongPath": { - "title": "", - "message": "" + "title": "Pogrešna putanja", + "message": "Putanja vjerojatno nije ispravna" }, "tooManyRequests": { "title": "", @@ -1233,33 +1233,33 @@ } }, "secrets": { - "title": "", - "lastUpdated": "", + "title": "Tajne", + "lastUpdated": "Zadnje ažurirano {date}", "notSet": { "label": "", "tooltip": "" }, - "secureNotice": "", + "secureNotice": "Ova tajna se ne može dohvatiti nakon kreiranja", "reset": { - "title": "", - "message": "" + "title": "Poništi tajnu", + "message": "Jeste li sigurni da želite poništiti ovu tajnu?" }, "noSecretsRequired": { - "segmentTitle": "", - "text": "" + "segmentTitle": "Nema tajni", + "text": "Za ovu integraciju nisu potrebne tajne" }, "kind": { "username": { "label": "Korisničko ime", - "newLabel": "" + "newLabel": "Novo korisničko ime" }, "apiKey": { - "label": "", - "newLabel": "" + "label": "API ključ", + "newLabel": "Novi API ključ" }, "password": { "label": "Lozinka", - "newLabel": "" + "newLabel": "Nova lozinka" }, "tokenId": { "label": "", @@ -1316,9 +1316,9 @@ } }, "permission": { - "use": "", - "interact": "", - "full": "" + "use": "Odaberite integracije u stavkama", + "interact": "Interakcija s integracijama", + "full": "Potpuni pristup integracijama" }, "audiobookshelf": { "name": "", @@ -1358,8 +1358,8 @@ } }, "media": { - "plural": "", - "search": "", + "plural": "Mediji", + "search": "Pronađi medij", "field": { "name": "Naziv", "size": "Veličina", @@ -1367,137 +1367,137 @@ }, "action": { "upload": { - "label": "", - "file": "", + "label": "Prenesi medij", + "file": "Odaberi datoteku", "notification": { "success": { - "message": "" + "message": "Medij je uspješno prenesen" }, "error": { - "message": "" + "message": "Medij nije moguće prenijeti" } } }, "delete": { - "label": "", - "description": "", + "label": "Izbriši medij", + "description": "Jeste li sigurni da želite izbrisati medij ?", "notification": { "success": { - "message": "" + "message": "Medij je uspješno izbrisan" }, "error": { - "message": "" + "message": "Medij nije moguće izbrisati" } } }, "copy": { - "label": "" + "label": "Kopiraj URL" }, "open": { "label": "" } }, "noResults": { - "title": "" + "title": "Nema prenesenih medija" } }, "common": { "success": "", - "beta": "", + "beta": "Beta", "error": "Pogreška", "action": { "add": "Dodaj", - "apply": "", - "backToOverview": "", - "skip": "", + "apply": "Primijeni", + "backToOverview": "Natrag na pregled", + "skip": "Preskoči", "change": "", "create": "Stvoriti", "createAnother": "", "edit": "Uredi", - "import": "", - "insert": "", + "import": "Uvezi", + "insert": "Umetni", "remove": "Ukloni", "save": "Spremi", "saveChanges": "Spremi promjene", "cancel": "Otkaži", "delete": "Obriši", - "discard": "", + "discard": "Odbaci", "close": "", "confirm": "Potvrdi", - "continue": "", + "continue": "Nastavi", "previous": "Prethodno", "next": "Sljedeći", - "checkoutDocs": "", + "checkoutDocs": "Pogledaj dokumentaciju", "checkLogs": "", "tryAgain": "Pokušaj ponovno", - "loading": "", - "show": "", - "hide": "" + "loading": "Učitavanje", + "show": "Prikaži", + "hide": "Sakrij" }, - "here": "", + "here": "ovdje", "iconPicker": { - "label": "", - "header": "", + "label": "URL ikone", + "header": "Upišite naziv ili objekte za filtriranje ikona... Homarr će pretražiti {countIcons} ikona za vas.", "headerLoading": "", "noResults": "", "error": "" }, "colorScheme": { "options": { - "auto": "", + "auto": "Automatski", "light": "", "dark": "" } }, "information": { - "min": "", - "max": "", - "days": "", - "hours": "", - "minutes": "" + "min": "Min", + "max": "Maks", + "days": "Dani", + "hours": "Sati", + "minutes": "Minute" }, "notification": { "create": { - "success": "", - "error": "" + "success": "Kreiranje uspješno", + "error": "Kreiranje nije uspjelo" }, "delete": { - "success": "", - "error": "" + "success": "Brisanje uspješno", + "error": "Brisanje nije uspjelo" }, "update": { - "success": "", - "error": "" + "success": "Promjene uspješno primijenjene", + "error": "Nije moguće primijeniti promjene" }, "transfer": { - "success": "", - "error": "" + "success": "Prijenos uspješan", + "error": "Prijenos nije uspio" } }, "multiSelect": { - "placeholder": "" + "placeholder": "Odaberite jednu ili više vrijednosti" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "Dodajte više vrijednosti", + "addLabel": "Dodaj {value}" }, "select": { - "placeholder": "", + "placeholder": "Odaberi vrijednost", "badge": { - "recommended": "" + "recommended": "Preporučeno" } }, "userAvatar": { "menu": { - "switchToDarkMode": "", - "switchToLightMode": "", - "management": "", + "switchToDarkMode": "Prebaci na tamni način", + "switchToLightMode": "Prebaci na svijetli način", + "management": "Upravljanje", "docker": "", "preferences": "Vaše preferencije", - "logout": "", + "logout": "Odjava", "login": "Prijaviti se", - "homeBoard": "", - "loggedOut": "", + "homeBoard": "Vaša početna ploča", + "loggedOut": "Odjavljeni", "updateAvailable": "" } }, @@ -1508,8 +1508,8 @@ "applications": "", "services": "", "preview": { - "show": "", - "hide": "" + "show": "Prikaži pregled", + "hide": "Sakrij pregled" }, "zod": { "errors": { @@ -1519,7 +1519,7 @@ "startsWith": "Ovo polje mora započeti s {startsWith}", "endsWith": "Ovo polje mora završavati s {endsWith}", "includes": "Ovo polje mora sadržavati {includes}", - "invalidEmail": "" + "invalidEmail": "Ovo polje mora biti valjana e-pošta" }, "tooSmall": { "string": "Ovo polje mora sadržavati najmanje {minimum} znakova", @@ -1530,13 +1530,13 @@ "number": "Ovo polje mora biti manje ili jednako {maximum}" }, "custom": { - "passwordsDoNotMatch": "", - "passwordRequirements": "", - "boardAlreadyExists": "", - "invalidFileType": "", + "passwordsDoNotMatch": "Lozinke se ne podudaraju", + "passwordRequirements": "Lozinka ne zadovoljava uvjete", + "boardAlreadyExists": "Ploča s ovim nazivom već postoji", + "invalidFileType": "Nevažeća vrsta datoteke, očekivano {expected}", "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", + "fileTooLarge": "Datoteka je prevelika, maksimalna veličina je {maxSize}", + "invalidConfiguration": "Nevažeća konfiguracija", "groupNameTaken": "" } } @@ -1551,8 +1551,8 @@ "section": { "dynamic": { "action": { - "create": "", - "remove": "" + "create": "Nova dinamička sekcija", + "remove": "Ukloni dinamičku sekciju" }, "option": { "title": { @@ -1566,8 +1566,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Ukloni dinamičku sekciju", + "message": "Jeste li sigurni da želite ukloniti ovu dinamičku sekciju? Stavke će biti premještene na isto mjesto u nadređenoj sekciji." } }, "category": { @@ -1577,32 +1577,32 @@ } }, "action": { - "create": "", - "edit": "", - "remove": "", + "create": "Nova kategorija", + "edit": "Preimenuj kategoriju", + "remove": "Ukloni kategoriju", "moveUp": "Pomakni se gore", "moveDown": "Pomicati prema dolje", - "createAbove": "", - "createBelow": "", + "createAbove": "Nova kategorija iznad", + "createBelow": "Nova kategorija ispod", "openAllInNewTabs": "" }, "create": { - "title": "", - "submit": "" + "title": "Nova kategorija", + "submit": "Dodaj kategoriju" }, "remove": { - "title": "", - "message": "" + "title": "Ukloni kategoriju", + "message": "Jeste li sigurni da želite ukloniti kategoriju {name}?" }, "edit": { - "title": "", - "submit": "" + "title": "Preimenuj kategoriju", + "submit": "Preimenuj kategoriju" }, "menu": { "label": { - "create": "", + "create": "Nova kategorija", "changePosition": "Promijenjen položaj", - "settings": "" + "settings": "Postavke" } }, "openAllInNewTabs": { @@ -1613,12 +1613,12 @@ }, "item": { "action": { - "create": "", - "import": "", - "edit": "", - "moveResize": "", - "duplicate": "", - "remove": "" + "create": "Nova stavka", + "import": "Uvezi stavku", + "edit": "Uredi stavku", + "moveResize": "Premjesti / promijeni veličinu stavke", + "duplicate": "Dupliciraj stavku", + "remove": "Ukloni stavku" }, "menu": { "label": { @@ -1635,12 +1635,12 @@ } }, "create": { - "title": "", + "title": "Odaberite stavku za dodavanje", "search": "", - "addToBoard": "" + "addToBoard": "Dodaj na ploču" }, "moveResize": { - "title": "", + "title": "Premjesti / promijeni veličinu stavke", "field": { "width": { "label": "Širina" @@ -1649,35 +1649,35 @@ "label": "Visina" }, "xOffset": { - "label": "" + "label": "X pomak" }, "yOffset": { - "label": "" + "label": "Y pomak" } } }, "edit": { - "title": "", + "title": "Uredi stavku", "tab": { - "widget": "", - "app": "" + "widget": "Uredi widget", + "app": "Uredi aplikaciju" }, "app": { - "propagationNotice": "" + "propagationNotice": "Promjene ove aplikacije primijenit će se svugdje gdje se koristi na svim pločama." }, "advancedOptions": { - "label": "", - "title": "" + "label": "Napredne opcije", + "title": "Napredne opcije stavke" }, "field": { "integrations": { - "label": "" + "label": "Integracije" }, "title": { "label": "" }, "customCssClasses": { - "label": "" + "label": "Prilagođene CSS klase" }, "borderColor": { "label": "" @@ -1685,8 +1685,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Ukloni stavku", + "message": "Jeste li sigurni da želite ukloniti ovu stavku?" } }, "widget": { @@ -1698,17 +1698,17 @@ "loadError": "" }, "app": { - "name": "", - "description": "", + "name": "Aplikacija", + "description": "Ugrađuje aplikaciju u ploču.", "option": { "appId": { - "label": "" + "label": "Odaberi aplikaciju" }, "openInNewTab": { "label": "Otvori u novoj kartici" }, "showTitle": { - "label": "" + "label": "Prikaži naziv aplikacije" }, "pingEnabled": { "label": "" @@ -1734,17 +1734,17 @@ }, "error": { "notFound": { - "label": "", - "tooltip": "" + "label": "Nema aplikacije", + "tooltip": "Nemate odabranu valjanu aplikaciju" } } }, "bookmarks": { - "name": "", - "description": "", + "name": "Oznake", + "description": "Prikazuje više poveznica aplikacija", "option": { "title": { - "label": "" + "label": "Naslov" }, "layout": { "label": "Raspored", @@ -1756,7 +1756,7 @@ "label": "Okomito" }, "grid": { - "label": "" + "label": "Mreža" }, "gridHorizontal": { "label": "" @@ -1776,11 +1776,11 @@ "label": "" }, "withBorder": { - "label": "" + "label": "Prikaži obrub" }, "items": { - "label": "", - "add": "" + "label": "Oznake", + "add": "Dodaj oznaku" } } }, @@ -1794,8 +1794,8 @@ } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "Sažetak DNS rupe", + "description": "Prikazuje sažetak vaše DNS rupe", "option": { "layout": { "label": "Raspored", @@ -1807,28 +1807,28 @@ "label": "Okomito" }, "grid": { - "label": "" + "label": "Mreža" } } }, "usePiHoleColors": { - "label": "" + "label": "Koristi Pi-Hole boje" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "Neuspješno dohvaćanje sažetka DNS rupe", + "integrationsDisconnected": "Nema dostupnih podataka, sve integracije su isključene" }, "data": { - "adsBlockedToday": "", - "adsBlockedTodayPercentage": "", + "adsBlockedToday": "Blokirano danas", + "adsBlockedTodayPercentage": "Blokirano danas", "dnsQueriesToday": "Upiti danas", - "domainsBeingBlocked": "" + "domainsBeingBlocked": "Domene na popisu za blokiranje" }, "domainsTooltip": "" }, "dnsHoleControls": { - "name": "", + "name": "Kontrole DNS rupe", "description": "Upravljajte PiHole ili AdGuard iz svoje nadzorne ploče", "option": { "layout": { @@ -1841,62 +1841,62 @@ "label": "Okomito" }, "grid": { - "label": "" + "label": "Mreža" } } }, "showToggleAllButtons": { - "label": "" + "label": "Prikaži gumbe za uključivanje/isključivanje svih" } }, "error": { - "internalServerError": "" + "internalServerError": "Neuspješno upravljanje DNS rupom" }, "controls": { - "enableAll": "", - "disableAll": "", - "setTimer": "", - "set": "", + "enableAll": "Omogući sve", + "disableAll": "Onemogući sve", + "setTimer": "Postavi odbrojavanje", + "set": "Postavi", "enabled": "Omogućeno", "disabled": "Onemogućeno", - "processing": "", - "disconnected": "", - "hours": "", - "minutes": "", - "unlimited": "" + "processing": "Obrada", + "disconnected": "Prekinuta veza", + "hours": "Sati", + "minutes": "Minute", + "unlimited": "Ostavite prazno za neograničeno" } }, "clock": { - "name": "", + "name": "Datum i vrijeme", "description": "Prikaži trenutni datum i vrijeme.", "option": { "customTitleToggle": { - "label": "", - "description": "" + "label": "Prilagođeni prikaz naslova/grada", + "description": "Prikažite prilagođeni naslov ili naziv grada/države na vrhu sata." }, "customTitle": { - "label": "" + "label": "Naslov" }, "is24HourFormat": { - "label": "", - "description": "" + "label": "24-satni format", + "description": "Koristite 24-satni format umjesto 12-satnog formata" }, "showSeconds": { - "label": "" + "label": "Prikaži sekunde" }, "useCustomTimezone": { - "label": "" + "label": "Koristi fiksnu vremensku zonu" }, "timezone": { - "label": "", - "description": "" + "label": "Vremenska zona", + "description": "Odaberite vremensku zonu prema IANA standardu" }, "showDate": { - "label": "" + "label": "Prikaži datum" }, "dateFormat": { - "label": "", - "description": "" + "label": "Format datuma", + "description": "Kako bi datum trebao izgledati" }, "customTimeFormat": { "label": "", @@ -1953,63 +1953,63 @@ }, "notebook": { "name": "Bilježnica", - "description": "", + "description": "Jednostavan widget bilježnice koji podržava markdown", "option": { "showToolbar": { "label": "Prikažite alatnu traku koja će vam pomoći u pisanju oznake" }, "allowReadOnlyCheck": { - "label": "" + "label": "Dopusti označavanje u načinu samo za čitanje" }, "content": { "label": "Sadržaj bilježnice" } }, "controls": { - "bold": "", - "italic": "", - "strikethrough": "", - "underline": "", - "colorText": "", - "colorHighlight": "", - "code": "", - "clear": "", - "heading": "", - "align": "", + "bold": "Podebljano", + "italic": "Kurziv", + "strikethrough": "Precrtano", + "underline": "Podcrtano", + "colorText": "Boja teksta", + "colorHighlight": "Obojeni istaknuti tekst", + "code": "Kod", + "clear": "Očisti formatiranje", + "heading": "Naslov {level}", + "align": "Poravnaj tekst: {position}", "directionLtr": "", "directionRtl": "", - "blockquote": "", - "horizontalLine": "", - "bulletList": "", - "orderedList": "", - "checkList": "", - "increaseIndent": "", - "decreaseIndent": "", - "link": "", - "unlink": "", - "image": "", - "addTable": "", - "deleteTable": "", - "colorCell": "", - "mergeCell": "", - "addColumnLeft": "", - "addColumnRight": "", - "deleteColumn": "", - "addRowTop": "", - "addRowBelow": "", - "deleteRow": "" + "blockquote": "Blok citat", + "horizontalLine": "Vodoravna crta", + "bulletList": "Popis s grafičkim oznakama", + "orderedList": "Numerirani popis", + "checkList": "Popis za provjeru", + "increaseIndent": "Povećaj uvlaku", + "decreaseIndent": "Smanji uvlaku", + "link": "Poveznica", + "unlink": "Ukloni poveznicu", + "image": "Ugradi sliku", + "addTable": "Dodaj tablicu", + "deleteTable": "Izbriši tablicu", + "colorCell": "Boja ćelije", + "mergeCell": "Prebaci spajanje ćelija", + "addColumnLeft": "Dodaj stupac prije", + "addColumnRight": "Dodaj stupac poslije", + "deleteColumn": "Izbriši stupac", + "addRowTop": "Dodaj red prije", + "addRowBelow": "Dodaj red poslije", + "deleteRow": "Izbriši red" }, "align": { "left": "Lijevo", - "center": "", + "center": "Sredina", "right": "Pravo" }, "popover": { - "clearColor": "", - "source": "", - "widthPlaceholder": "", - "columns": "", - "rows": "", + "clearColor": "Očisti boju", + "source": "Izvor", + "widthPlaceholder": "Vrijednost u % ili pikselima", + "columns": "Stupci", + "rows": "Redovi", "width": "Širina", "height": "Visina" }, @@ -2052,7 +2052,7 @@ "saveFailed": "" }, "iframe": { - "name": "", + "name": "iFrame", "description": "Ugradite bilo koji sadržaj s interneta. Neke web stranice mogu ograničiti pristup.", "option": { "embedUrl": { @@ -2087,38 +2087,38 @@ } }, "error": { - "noUrl": "", + "noUrl": "Nije naveden iFrame URL", "unsupportedProtocol": "", "noBrowerSupport": "Vaš preglednik ne podržava iframeove. Ažurirajte svoj preglednik." } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "Stanje entiteta", + "description": "Prikaži stanje entiteta i po želji ga prebacite", "option": { "entityId": { - "label": "" + "label": "ID entiteta" }, "displayName": { - "label": "" + "label": "Prikazni naziv" }, "entityUnit": { - "label": "" + "label": "Jedinica entiteta" }, "clickable": { - "label": "" + "label": "Klikabilno" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "Izvrši automatizaciju", + "description": "Pokreni automatizaciju jednim klikom", "option": { "displayName": { - "label": "" + "label": "Prikazni naziv" }, "automationId": { - "label": "" + "label": "ID automatizacije" } }, "spotlightAction": { @@ -2203,7 +2203,7 @@ }, "calendar": { "name": "Kalendar", - "description": "", + "description": "Prikaži događaje iz svojih integracija u kalendarskom prikazu unutar određenog relativnog vremenskog razdoblja", "duration": { "allDay": "" }, @@ -2211,16 +2211,16 @@ "releaseType": { "label": "Vrsta izdanja u Radarr-u", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "U kinima", + "digitalRelease": "Digitalno izdanje", + "physicalRelease": "Fizičko izdanje" } }, "filterPastMonths": { - "label": "" + "label": "Počni od" }, "filterFutureMonths": { - "label": "" + "label": "Završi u" }, "showUnmonitored": { "label": "" @@ -2232,7 +2232,7 @@ "description": "Prikazuje trenutne vremenske informacije za odabranu lokaciju.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Temperatura u Fahrenheitima" }, "disableTemperatureDecimals": { "label": "" @@ -2248,18 +2248,18 @@ "label": "Lokacija vremenske prognoze" }, "showCity": { - "label": "" + "label": "Prikaži grad" }, "hasForecast": { - "label": "" + "label": "Prikaži prognozu" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Broj dana prognoze", + "description": "Kad widget nije dovoljno širok, prikazuje se manje dana" }, "dateFormat": { - "label": "", - "description": "" + "label": "Format datuma", + "description": "Kako bi datum trebao izgledati" } }, "currentWindSpeed": "", @@ -2288,35 +2288,35 @@ } }, "indexerManager": { - "name": "", - "description": "", + "name": "Status upravitelja indeksera", + "description": "Status vaših indeksera", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Otvori stranicu indeksera u novoj kartici" } }, - "title": "", - "testAll": "", + "title": "Upravitelj indeksera", + "testAll": "Testiraj sve", "error": { - "internalServerError": "" + "internalServerError": "Neuspješno dohvaćanje statusa indeksera" } }, "healthMonitoring": { - "name": "", - "description": "", + "name": "Nadzor zdravlja sustava", + "description": "Prikazuje informacije o zdravlju i statusu vašeg(ih) sustava.", "tab": { "system": "", "cluster": "" }, "option": { "fahrenheit": { - "label": "" + "label": "Temp. CPU u Fahrenheitima" }, "cpu": { - "label": "" + "label": "Prikaži informacije o CPU-u" }, "memory": { - "label": "" + "label": "Prikaži informacije o memoriji" }, "gpu": { "label": "" @@ -2325,7 +2325,7 @@ "label": "" }, "fileSystem": { - "label": "" + "label": "Prikaži informacije o datotečnom sustavu" }, "visibleStorageVolumes": { "label": "", @@ -2343,22 +2343,22 @@ } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", + "information": "Informacije", + "processor": "Procesor: {cpuModelName}", + "memory": "Memorija: {memory}GiB", + "memoryAvailable": "Dostupno: {memoryAvailable}GiB ({percent}%)", + "version": "Verzija: {version}", "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", - "available": "", - "lastSeen": "" + "loadAverage": "Prosječno opterećenje:", + "minute": "1 minuta", + "minutes": "{count} minute", + "used": "Iskorišteno", + "available": "Dostupno", + "lastSeen": "Zadnje ažuriranje statusa: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "Neuspješno dohvaćanje statusa zdravlja" }, "cluster": { "summary": { @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS uređaj", + "description": "Pratite status svojih UPS uređaja putem NUT poslužitelja", "option": { "showBattery": { - "label": "" + "label": "Prikaži bateriju" }, "showLoad": { - "label": "" + "label": "Prikaži opterećenje" }, "showVoltage": { - "label": "" + "label": "Prikaži napon" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Na mreži", + "onBattery": "Na bateriji", + "lowBattery": "Niska baterija", + "charging": "Punjenje", + "unknown": "Nepoznato" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Vrijeme rada", + "load": "Opterećenje", + "input": "Ulaz", + "output": "Izlaz" }, "error": { - "internalServerError": "" + "internalServerError": "Neuspješno dohvaćanje UPS podataka" } }, "tracearr": { @@ -2584,96 +2595,96 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Posljednjih 30 dana", + "month": "Ovaj mjesec", + "lastMonth": "Prošli mjesec" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Događaj", + "description": "Prikaži ukupne pojave određenog događaja", + "placeholder": "Odaberite događaj", + "loading": "Učitavanje događaja...", + "noEvents": "Nije pronađen nijedan događaj", + "none": "Nema događaja", + "configureWebsiteFirst": "Prvo odaberite web mjesto za učitavanje događaja" }, "chartType": { - "label": "", - "description": "", + "label": "Vrsta grafikona", + "description": "Stil prikaza grafikona", "option": { - "bar": "", - "sparkline": "" + "bar": "Stupčasti grafikon", + "sparkline": "Mini grafikon" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Stil grafikona", + "description": "Kako prikazati niz događaja u grafikonu", "option": { - "grouped": "", - "overlay": "" + "grouped": "Jedan pored drugog", + "overlay": "Prekrivanje (podskup)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Prikaz", + "description": "Što prikazati u tijelu widgeta", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Grafikon", + "events": "Grafikon događaja", + "topPages": "Najposjećenije stranice", + "topReferrers": "Najposjećeniji izvori" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Događaji", + "description": "Odaberite jedan ili više događaja za grafikon", + "placeholder": "Odaberite događaje...", + "loading": "Učitavanje događaja...", + "noEvents": "Nije pronađen nijedan događaj", + "configureWebsiteFirst": "Prvo odaberite web mjesto za učitavanje događaja" }, "topCount": { - "label": "", - "description": "" + "label": "Stavke za prikaz", + "description": "Broj najboljih stavki za prikaz (maks. 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "događaja", + "label": "događaja" }, "topPages": { - "direct": "" + "direct": "Izravno" }, "topReferrers": { - "direct": "" + "direct": "Izravno" }, "events": { - "selectPrompt": "" + "selectPrompt": "Odaberite događaje za grafikon" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Nije konfigurirana integracija s Umamijem", + "noWebsite": "Nije konfigurirano web mjesto", + "noData": "Nema dostupnih podataka", + "internalServerError": "Neuspješno dohvaćanje podataka iz Umamija" } }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", + "query": "Grad / Poštanski broj", + "latitude": "Geografska širina", + "longitude": "Geografska dužina", + "disabledTooltip": "Unesite grad ili poštanski broj", + "unknownLocation": "Nepoznata lokacija", "search": "traži", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "Grad", + "country": "Država", + "coordinates": "Koordinate", + "population": "Populacija" }, "action": { - "select": "" + "select": "Odaberi {city}, {countryCode}" }, "population": { "fallback": "Nepoznato" @@ -2681,22 +2692,22 @@ } }, "integration": { - "noData": "", - "description": "" + "noData": "Nije pronađena integracija", + "description": "Kliknite za stvaranje nove integracije" }, "app": { - "noData": "", - "description": "", + "noData": "Nijedna aplikacija nije pronađena", + "description": "Kliknite za stvaranje nove aplikacije", "quickCreate": "" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "Nijedna integracija nije odabrana", + "noData": "Nema dostupnih podataka integracije" }, "option": {} }, "video": { - "name": "", + "name": "Video prijenos", "description": "Ugradi video stream ili video sa kamere i/ili web stranice", "option": { "feedUrl": { @@ -2704,29 +2715,41 @@ }, "hasAutoPlay": { "label": "Automatska reprodukcija", - "description": "" + "description": "Automatska reprodukcija radi samo kad je zvuk isključen zbog ograničenja preglednika" }, "isMuted": { - "label": "" + "label": "Isključen zvuk" }, "hasControls": { - "label": "" + "label": "Prikaži kontrole" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "Nije naveden URL videozapisa", + "forYoutubeUseIframe": "Za YouTube videozapise koristite opciju iframe" } }, "mediaServer": { - "name": "", - "description": "", + "name": "Trenutačni prijenosi poslužitelja medija", + "description": "Prikaži trenutačne prijenose na svojim poslužiteljima medija", "option": { "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3040,151 +3066,178 @@ "noPhotos": "" }, "downloads": { - "name": "", - "description": "", + "name": "Klijent za preuzimanje", + "description": "Omogućuje vam pregled i upravljanje preuzimanjima s Torrent i Usenet klijenata.", "option": { "columns": { - "label": "" + "label": "Stupci za prikaz" }, "enableRowSorting": { - "label": "" + "label": "Omogući sortiranje stavki" }, "defaultSort": { - "label": "" + "label": "Stupac koji se prema zadanim postavkama koristi za sortiranje" }, "descendingDefaultSort": { - "label": "" + "label": "Obrni sortiranje" }, "showCompletedUsenet": { - "label": "" + "label": "Prikaži usenet stavke označene kao dovršene" }, "showCompletedTorrent": { - "label": "" + "label": "Prikaži torrent stavke označene kao dovršene" }, "showCompletedHttp": { "label": "" }, "activeTorrentThreshold": { - "label": "" + "label": "Sakrij dovršene torrente ispod ovog praga (u kiB/s)" }, "categoryFilter": { - "label": "" + "label": "Kategorije/oznake za filtriranje" }, "filterIsWhitelist": { - "label": "" + "label": "Filtriraj kao bijela lista" }, "applyFilterToRatio": { - "label": "" + "label": "Koristi filtar za izračun omjera" }, "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { - "noColumns": "", - "noCommunications": "" + "noColumns": "Odaberite stupce u stavkama", + "noCommunications": "Nije moguće učitati podatke iz integracije", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { - "columnTitle": "" + "columnTitle": "Kontrole" }, "added": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Dodano", + "detailsTitle": "Datum dodavanja" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Dodaci", + "detailsTitle": "Kategorije (ili dodatne informacije)" }, "downSpeed": { "columnTitle": "Isključeno", "detailsTitle": "Brzina preuzimanja" }, "index": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "#", + "detailsTitle": "Trenutačni indeks unutar klijenta" }, "id": { - "columnTitle": "" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "Integracija" }, "name": { - "columnTitle": "" + "columnTitle": "Naziv posla" }, "progress": { "columnTitle": "Napredak", - "detailsTitle": "" + "detailsTitle": "Napredak preuzimanja" }, "ratio": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Omjer", + "detailsTitle": "Omjer torrenata (primljeno/poslano)" }, "received": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Ukupno preuzeto", + "detailsTitle": "Ukupno preuzeto" }, "sent": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Ukupno poslano", + "detailsTitle": "Ukupno učitano" }, "size": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Veličina datoteke", + "detailsTitle": "Ukupna veličina odabira/datoteka" }, "state": { "columnTitle": "Stanje", - "detailsTitle": "" + "detailsTitle": "Stanje posla" }, "time": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Vrijeme završetka", + "detailsTitle": "Vrijeme od/do dovršenja", + "eta": "" }, "type": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Vrsta", + "detailsTitle": "Vrsta klijenta za preuzimanje" }, "upSpeed": { "columnTitle": "Uključeno", - "detailsTitle": "" + "detailsTitle": "Brzina slanja" } }, "states": { - "downloading": "", - "queued": "", + "downloading": "Preuzimanje", + "queued": "U redu čekanja", "paused": "Pauzirano", "completed": "Završeno", - "failed": "", - "processing": "", - "leeching": "", - "stalled": "", + "failed": "Neuspjelo", + "processing": "Obrada", + "leeching": "Skidanje", + "stalled": "Zastoj", "unknown": "Nepoznato", - "seeding": "" + "seeding": "Dijeljenje" }, "actions": { "clients": { - "modalTitle": "", - "pause": "", - "resume": "" + "modalTitle": "Popis klijenata za preuzimanje", + "pause": "Pauziraj sve klijente/stavke", + "resume": "Nastavi sa svim klijentima/stavkama" }, "client": { - "pause": "", - "resume": "" + "pause": "Pauziraj klijenta", + "resume": "Nastavi klijenta" }, "item": { - "pause": "", - "resume": "", + "pause": "Pauziraj stavku", + "resume": "Nastavi stavku", "delete": { - "title": "", - "modalTitle": "", - "entry": "", - "entryAndFiles": "" + "title": "Obriši stavku", + "modalTitle": "Jeste li sigurni da želite obrisati ovaj posao?", + "entry": "Obriši unos", + "entryAndFiles": "Obriši unos i datoteku(e)" } } }, - "globalRatio": "" + "globalRatio": "Globalni omjer", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3216,7 +3269,7 @@ } }, "mediaRequests-requestList": { - "name": "", + "name": "Popis zahtjeva za medije", "description": "Pregledajte popis svih zahtjeva za medijima s vaše instance Overseerr ili Jellyseerr", "option": { "linksTargetNewTab": { @@ -3230,17 +3283,17 @@ } }, "pending": { - "approve": "", - "approving": "", - "decline": "" + "approve": "Odobri zahtjev", + "approving": "Odobravanje zahtjeva...", + "decline": "Odbij zahtjev" }, "availability": { "unknown": "Nepoznato", - "pending": "", - "processing": "", + "pending": "Na čekanju", + "processing": "Obrada", "requested": "", - "partiallyAvailable": "", - "available": "", + "partiallyAvailable": "Djelomično dostupno", + "available": "Dostupno", "blacklisted": "", "deleted": "" }, @@ -3251,10 +3304,10 @@ "failed": "", "completed": "" }, - "toBeDetermined": "" + "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { - "name": "", + "name": "Statistika zahtjeva za medije", "description": "Statistika o vašim zahtjevima za medijima", "option": {}, "titles": { @@ -3262,16 +3315,16 @@ "main": "Medijska statistika", "approved": "Već odobreno", "pending": "Odobrenjea na čekanju", - "processing": "", - "declined": "", - "available": "", + "processing": "U obradi", + "declined": "Već odbijeno", + "available": "Već dostupno", "tv": "TV zahtjevi", "movie": "Zahtjevi za Filmovima", "total": "Ukupno" }, "users": { "main": "Najbolji korisnici", - "requests": "" + "requests": "Zahtjevi" } } }, @@ -3364,20 +3417,20 @@ "timeLeft": "" }, "rssFeed": { - "name": "", - "description": "", + "name": "RSS kanali", + "description": "Pratite i prikazujte jedan ili više općih RSS, ATOM ili JSON kanala", "option": { "feedUrls": { - "label": "" + "label": "URL-ovi kanala" }, "enableRtl": { - "label": "" + "label": "Omogući RTL" }, "textLinesClamp": { - "label": "" + "label": "Ograničavanje redaka opisa" }, "maximumAmountPosts": { - "label": "" + "label": "Ograničenje broja objava" }, "hideDescription": { "label": "" @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3883,80 +3922,88 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel sustavi (tablica)", + "description": "Tablični prikaz svih Beszel nadziranih sustava s sortabilnim stupcima i indikatorima statusa", "option": { "statusFilter": { - "label": "" + "label": "Filtar statusa" }, "sortBy": { - "label": "" + "label": "Sortiraj po" }, "sortDirection": { - "label": "" + "label": "Smjer sortiranja" }, "showCpu": { - "label": "" + "label": "Prikaži CPU" }, "showMemory": { - "label": "" + "label": "Prikaži memoriju" }, "showDisk": { - "label": "" + "label": "Prikaži disk" }, "showGpu": { - "label": "" + "label": "Prikaži GPU" }, "showLoadAvg": { - "label": "" + "label": "Prikaži prosječno opterećenje" }, "showNet": { - "label": "" + "label": "Prikaži mrežu" }, "showTemp": { - "label": "" + "label": "Prikaži temperaturu" }, "showBattery": { - "label": "" + "label": "Prikaži bateriju" }, "showServices": { - "label": "" + "label": "Prikaži usluge" }, "showUptime": { - "label": "" + "label": "Prikaži vrijeme rada" }, "showAgent": { + "label": "Prikaži verziju agenta" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Nisu pronađeni sustavi", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", + "system": "Sustav", + "cpu": "Procesor", + "memory": "Memorija", + "disk": "Pohrana", + "gpu": "Grafički procesor", + "loadAvg": "Prosječno opterećenje", + "net": "Mreža", + "temp": "Temperatura", + "battery": "Baterija", + "services": "Usluge", + "uptime": "Vrijeme rada", "agent": "" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel sustavi (mreža)", + "description": "Prikaz kartice mreže svih Beszel nadziranih sustava s metrikama u stvarnom vremenu", "option": { "statusFilter": { - "label": "" + "label": "Filtar statusa" }, "showCpu": { - "label": "" + "label": "Prikaži CPU" }, "showMemory": { "label": "" @@ -4128,11 +4175,11 @@ }, "widgetPreview": { "toggle": { - "enabled": "", - "disabled": "" + "enabled": "Način uređivanja omogućen", + "disabled": "Način uređivanja onemogućen" }, "dimensions": { - "title": "" + "title": "Promijeni dimenzije" } }, "board": { @@ -4154,52 +4201,52 @@ "edit": { "notification": { "success": { - "title": "", - "message": "" + "title": "Promjene su uspješno primijenjene", + "message": "Ploča je uspješno spremljena" }, "error": { - "title": "", - "message": "" + "title": "Nije moguće primijeniti promjene", + "message": "Ploču nije moguće spremiti" } }, "confirmLeave": { - "title": "", - "message": "" + "title": "Nespremljene promjene", + "message": "Imate nespremljene promjene, jeste li sigurni da želite otići?" } }, "oldImport": { - "label": "", + "label": "Uvoz iz homarr prije 1.0.0", "notification": { "success": { - "title": "", - "message": "" + "title": "Uvoz uspješan", + "message": "Ploča je uspješno uvezena" }, "error": { - "title": "", - "message": "" + "title": "Uvoz nije uspio", + "message": "Ploču nije bilo moguće uvesti, provjerite zapise za više detalja" } }, "form": { "file": { - "label": "", - "invalidError": "" + "label": "Odaberite JSON datoteku", + "invalidError": "Nevažeća konfiguracijska datoteka" }, "apps": { "label": "aplikacije", "avoidDuplicates": { - "label": "", - "description": "" + "label": "Izbjegni duplikate", + "description": "Zanemaruje aplikacije kod kojih već postoji aplikacija s istim href-om" }, "onlyImportApps": { - "label": "", - "description": "" + "label": "Uvezi samo aplikacije", + "description": "Dodaje samo aplikacije, ploču treba ručno rekreirati" } }, "name": { - "label": "" + "label": "Naziv ploče" }, "screenSize": { - "label": "", + "label": "Veličina zaslona", "description": "", "option": { "sm": "Mali", @@ -4208,16 +4255,16 @@ } }, "sidebarBehavior": { - "label": "", - "description": "", + "label": "Ponašanje bočne trake", + "description": "Bočne trake su uklonjene u 1.0, možete odabrati što bi se trebalo dogoditi sa stavkama unutar njih.", "option": { "lastSection": { - "label": "", - "description": "" + "label": "Posljednji odjeljak", + "description": "Bočna traka će biti prikazana ispod posljednjeg odjeljka" }, "removeItems": { - "label": "", - "description": "" + "label": "Ukloni stavke", + "description": "Stavke unutar bočne trake bit će uklonjene" } } } @@ -4232,19 +4279,19 @@ }, "field": { "pageTitle": { - "label": "" + "label": "Naslov stranice" }, "metaTitle": { - "label": "" + "label": "Meta naslov" }, "logoImageUrl": { - "label": "" + "label": "URL slike logotipa" }, "faviconImageUrl": { - "label": "" + "label": "URL favicon slike" }, "backgroundImageUrl": { - "label": "", + "label": "URL pozadinske slike", "placeholder": "", "group": { "your": "", @@ -4252,49 +4299,49 @@ } }, "backgroundImageAttachment": { - "label": "", + "label": "Pričvršćivanje pozadinske slike", "option": { "fixed": { - "label": "", - "description": "" + "label": "Fiksno", + "description": "Pozadina ostaje na istom položaju." }, "scroll": { - "label": "", - "description": "" + "label": "Pomicanje", + "description": "Pozadina se pomiče s mišem." } } }, "backgroundImageRepeat": { - "label": "", + "label": "Ponavljanje pozadinske slike", "option": { "repeat": { - "label": "", - "description": "" + "label": "Ponovi", + "description": "Slika se ponavlja onoliko puta koliko je potrebno da bi se pokrilo cijelo područje slikanja pozadine." }, "no-repeat": { - "label": "", - "description": "" + "label": "Bez ponavljanja", + "description": "Slika se ne ponavlja i možda neće ispuniti cijeli prostor." }, "repeat-x": { - "label": "", - "description": "" + "label": "Ponovi X", + "description": "Isto kao 'Ponovi', ali samo na horizontalnoj osi." }, "repeat-y": { - "label": "", - "description": "" + "label": "Ponovi Y", + "description": "Isto kao 'Ponovi', ali samo na vertikalnoj osi." } } }, "backgroundImageSize": { - "label": "", + "label": "Veličina pozadinske slike", "option": { "cover": { - "label": "", - "description": "" + "label": "Pokrij", + "description": "Smanjuje sliku što je moguće manje kako bi se pokrio cijeli prozor obrezivanjem suvišnog prostora." }, "contain": { - "label": "", - "description": "" + "label": "Sadrži", + "description": "Povećava sliku što je moguće više unutar spremnika bez obrezivanja ili rastezanja slike." } } }, @@ -4305,7 +4352,7 @@ "label": "Sekundarna boja" }, "opacity": { - "label": "" + "label": "Neprozirnost" }, "iconColor": { "label": "" @@ -4314,11 +4361,11 @@ "label": "" }, "customCss": { - "label": "", + "label": "Prilagođeni CSS za ovu ploču", "description": "Dodatno, prilagodite svoju nadzornu ploču koristeći CSS, što se preporučuje samo iskusnim korisnicima", "customClassesAlert": { - "title": "", - "description": "" + "title": "Prilagođene klase", + "description": "Svojim stavkama na ploči možete dodati prilagođene klase u naprednim opcijama svake stavke i koristiti ih u gore navedenom prilagođenom CSS-u." } }, "disableStatus": { @@ -4326,7 +4373,7 @@ "description": "" }, "columnCount": { - "label": "" + "label": "Broj stupaca" }, "itemRadius": { "label": "", @@ -4344,18 +4391,18 @@ }, "isPublic": { "label": "Javno", - "description": "" + "description": "Javne ploče su dostupne svima, čak i bez računa." } }, "content": { - "metaTitle": "" + "metaTitle": "{boardName} ploča" }, "setting": { - "title": "", + "title": "Postavke za {boardName} ploču", "section": { "general": { "title": "Općenito", - "unrecognizedLink": "" + "unrecognizedLink": "Navedena poveznica nije prepoznata i neće se pregledati, ali bi i dalje mogla raditi." }, "layout": { "title": "Raspored", @@ -4373,23 +4420,23 @@ "title": "" }, "customCss": { - "title": "" + "title": "Prilagođeni CSS" }, "behavior": { "title": "" }, "access": { - "title": "", + "title": "Kontrola pristupa", "permission": { "item": { "view": { "label": "Prikaz ploče" }, "modify": { - "label": "" + "label": "Izmijeni ploču" }, "full": { - "label": "" + "label": "Potpuni pristup" } } } @@ -4398,41 +4445,41 @@ "title": "Opasna zona", "action": { "rename": { - "label": "", - "description": "", - "button": "", + "label": "Preimenuj ploču", + "description": "Promjena naziva prekinut će sve poveznice na ovu ploču.", + "button": "Promijeni naziv", "modal": { - "title": "" + "title": "Preimenuj ploču" } }, "visibility": { - "label": "", + "label": "Promijeni vidljivost ploče", "description": { - "public": "", - "private": "" + "public": "Ova ploča je trenutno javna.", + "private": "Ova ploča je trenutno privatna." }, "button": { - "public": "", - "private": "" + "public": "Učini privatnom", + "private": "Učini javnom" }, "confirm": { "public": { - "title": "", - "description": "" + "title": "Učini ploču privatnom", + "description": "Jeste li sigurni da želite ovu ploču učiniti privatnom? To će sakriti ploču od javnosti. Poveznice za gost korisnike neće raditi." }, "private": { - "title": "", - "description": "" + "title": "Učini ploču javnom", + "description": "Jeste li sigurni da želite ovu ploču učiniti javnom? To će ploču učiniti dostupnom svima." } } }, "delete": { - "label": "", - "description": "", - "button": "", + "label": "Izbriši ovu ploču", + "description": "Jednom kad izbrišete ploču, nema povratka. Budite sigurni.", + "button": "Izbriši ovu ploču", "confirm": { "title": "Izbriši ploču", - "description": "" + "description": "Jeste li sigurni da želite izbrisati ovu ploču? To će trajno izbrisati ploču i sav njezin sadržaj." } } } @@ -4487,15 +4534,15 @@ } }, "management": { - "metaTitle": "", + "metaTitle": "Upravljanje", "title": { - "morning": "", - "afternoon": "", - "evening": "" + "morning": "Dobro jutro, {username}", + "afternoon": "Dobar dan, {username}", + "evening": "Dobra večer, {username}" }, "notFound": { - "title": "", - "text": "" + "title": "Nije pronađeno", + "text": "Nije moguće pronaći traženi resurs" }, "error": { "title": "", @@ -4507,28 +4554,28 @@ "home": "Dom", "boards": "Daske", "apps": "aplikacije", - "integrations": "", + "integrations": "Integracije", "customWidgets": "", - "searchEngies": "", - "medias": "", + "searchEngies": "Tražilice", + "medias": "Mediji", "users": { "label": "Korisnici", "items": { "manage": "Upravljati", "invites": "poziva", - "groups": "" + "groups": "Grupe" } }, "tools": { "label": "Alati", "items": { - "docker": "", + "docker": "Docker", "kubernetes": "", - "logs": "", + "logs": "Zapisi", "api": "", "certificates": "", - "tasks": "", - "backup": "" + "tasks": "Zadaci", + "backup": "Sigurnosna kopija" } }, "settings": "Postavke", @@ -4536,9 +4583,9 @@ "label": "Pomozite", "items": { "documentation": "Dokumentacija", - "submitIssue": "", + "submitIssue": "Pošaljite prijavu problema", "discord": "Nesloga u zajednici", - "sourceCode": "" + "sourceCode": "Izvorni kod" } }, "about": "O aplikaciji" @@ -4550,17 +4597,17 @@ "board": "Daske", "user": "Korisnici", "invite": "poziva", - "integration": "", + "integration": "Integracije", "app": "aplikacije", - "group": "", + "group": "Grupe", "searchEngine": "", "media": "" }, "statisticLabel": { "boards": "Daske", - "resources": "", - "authentication": "", - "authorization": "" + "resources": "Resursi", + "authentication": "Autentifikacija", + "authorization": "Autorizacija" }, "heroBanner": { "title": "", @@ -4571,19 +4618,19 @@ "title": "Vaše ploče", "action": { "new": { - "label": "" + "label": "Nova ploča" }, "open": { - "label": "" + "label": "Otvori ploču" }, "settings": { "label": "Postavke" }, "setHomeBoard": { - "label": "", + "label": "Postavi kao početnu ploču", "badge": { "label": "Dom", - "tooltip": "" + "tooltip": "Ova ploča će se prikazivati kao vaša početna ploča" } }, "setMobileHomeBoard": { @@ -4600,16 +4647,16 @@ "label": "Izbriši trajno", "confirm": { "title": "Izbriši ploču", - "description": "" + "description": "Jeste li sigurni da želite izbrisati {name} ploču?" } } }, "visibility": { - "public": "", - "private": "" + "public": "Ova ploča je javna", + "private": "Ova ploča je privatna" }, "noResults": { - "title": "" + "title": "Još nema ploča" }, "modal": { "createBoard": { @@ -4622,16 +4669,16 @@ } }, "media": { - "includeFromAllUsers": "" + "includeFromAllUsers": "Uključi medije svih korisnika" }, "user": { - "back": "", - "fieldsDisabledExternalProvider": "", + "back": "Natrag na korisnike", + "fieldsDisabledExternalProvider": "Određena polja su onemogućena jer njima upravlja vanjski pružatelj autentifikacije.", "setting": { "general": { "title": "Općenito", "item": { - "language": "", + "language": "Jezik i regija", "board": { "title": "", "type": { @@ -4643,26 +4690,26 @@ "firstDayOfWeek": "Prvi dan u tjednu", "accessibility": "Pristupačnost", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Vodiči za onboarding", + "description": "Resetirajte onboarding vodiče kako biste ih ponovno vidjeli pri sljedećem posjetu upravljačkom području ili ploči.", + "reset": "Resetiraj onboarding vodiče", "resetSuccess": { - "title": "", - "message": "" + "title": "Vodiči su resetirani", + "message": "Onboarding vodiči ponovno će se prikazati pri sljedećem posjetu" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Završeno", + "notStarted": "Nije započeto" }, "name": { - "management": "", - "dashboard": "" + "management": "Upravljanje", + "dashboard": "Ploča" } } } }, "security": { - "title": "" + "title": "Sigurnost" }, "board": { "title": "Daske" @@ -4673,50 +4720,50 @@ "title": "Korisnici" }, "edit": { - "metaTitle": "" + "metaTitle": "Uredi korisnika {username}" }, "create": { "metaTitle": "Stvori korisnika", - "title": "", + "title": "Stvori novog korisnika", "step": { "personalInformation": { - "label": "" + "label": "Osobne informacije" }, "security": { - "label": "" + "label": "Sigurnost" }, "groups": { - "label": "", - "title": "", - "description": "" + "label": "Grupe", + "title": "Odaberite sve grupe čiji bi član trebao biti korisnik", + "description": "Grupa {everyoneGroup} dodijeljena je svim korisnicima i ne može se ukloniti." }, "review": { - "label": "" + "label": "Pregled" }, "completed": { - "title": "" + "title": "Korisnik stvoren" }, "error": { - "title": "" + "title": "Stvaranje korisnika nije uspjelo" } }, "action": { - "createAnother": "", - "back": "" + "createAnother": "Stvori još jednog korisnika", + "back": "Povratak na popis korisnika" } }, "invite": { "title": "Upravljanje pozivnicama korisnika", "action": { "new": { - "title": "", + "title": "Nova pozivnica", "description": "Nakon isteka, pozivnica više neće biti valjana i primatelj pozivnice neće moći kreirati račun." }, "copy": { - "title": "", - "description": "", + "title": "Kopiraj pozivnicu", + "description": "Vaša pozivnica je generirana. Nakon što se ovaj modalni prozor zatvori, više nećete moći kopirati ovu poveznicu. Ako više ne želite pozvati tu osobu, ovu pozivnicu možete obrisati bilo kada.", "link": "Link pozivnice", - "button": "" + "button": "Kopiraj i zatvori" }, "delete": { "title": "Izbriši pozivnicu", @@ -4740,13 +4787,13 @@ } }, "group": { - "back": "", + "back": "Natrag na grupe", "setting": { "general": { "title": "Općenito", - "owner": "", - "ownerOfGroup": "", - "ownerOfGroupDeleted": "" + "owner": "Vlasnik", + "ownerOfGroup": "Vlasnik ove grupe", + "ownerOfGroupDeleted": "Vlasnik ove grupe je izbrisan. Trenutno nema vlasnika." }, "setting": { "title": "", @@ -4756,14 +4803,14 @@ } }, "members": { - "title": "", - "search": "", - "notFound": "" + "title": "Članovi", + "search": "Pronađi člana", + "notFound": "Nema pronađenih članova" }, "permissions": { - "title": "", + "title": "Dopuštenja", "form": { - "unsavedChanges": "" + "unsavedChanges": "Imate nespremljene promjene!" } } } @@ -4772,46 +4819,46 @@ "title": "Postavke", "notification": { "success": { - "message": "" + "message": "Postavke su uspješno spremljene" }, "error": { - "message": "" + "message": "Spremanje postavki nije uspjelo" } }, "section": { "analytics": { - "title": "", + "title": "Analitika", "general": { "title": "", "text": "" } }, "crawlingAndIndexing": { - "title": "", - "warning": "", + "title": "Pretraživanje i indeksiranje", + "warning": "Uključivanje ili isključivanje bilo koje postavke ovdje ozbiljno će utjecati na to kako će tražilice indeksirati i pretraživati vašu stranicu. Svaka postavka je zahtjev i ovisi o pretraživaču hoće li je primijeniti. Primjena bilo koje izmjene može potrajati nekoliko dana ili tjedana. Neke postavke mogu biti specifične za pojedine tražilice.", "noIndex": { - "title": "", - "text": "" + "title": "Bez indeksiranja", + "text": "Ne indeksiraj web mjesto na tražilicama i ne prikazuj ga u rezultatima pretraživanja" }, "noFollow": { - "title": "", - "text": "" + "title": "Bez praćenja poveznica", + "text": "Ne prati nikakve poveznice tijekom indeksiranja. Isključivanje će dovesti do toga da pretraživači pokušaju pratiti sve poveznice na Homarru." }, "noTranslate": { - "title": "", - "text": "" + "title": "Bez prijevoda", + "text": "Kada jezik web-mjesta vjerojatno nije onaj koji korisnik želi čitati, Google će u rezultatima pretraživanja prikazati poveznicu za prijevod" }, "noSiteLinksSearchBox": { - "title": "", - "text": "" + "title": "Bez okvira za pretraživanje poveznicama web-mjesta", + "text": "Google će izgraditi okvir za pretraživanje s pretraženim poveznicama zajedno s drugim izravnim poveznicama. Uključivanje će zatražiti od Googlea da onemogući taj okvir." } }, "board": { "title": "Daske", "homeBoard": { - "label": "", + "label": "Globalna početna ploča", "mobileLabel": "", - "description": "" + "description": "Samo javne ploče su dostupne za odabir" }, "status": { "title": "", @@ -4842,40 +4889,40 @@ "appearance": { "title": "Izgled", "defaultColorScheme": { - "label": "", + "label": "Zadana shema boja", "options": { - "auto": "", - "light": "", - "dark": "" + "auto": "Automatski", + "light": "Svijetla", + "dark": "Tamna" } } }, "culture": { - "title": "", + "title": "Kultura", "defaultLocale": { - "label": "" + "label": "Zadani jezik" } } } }, "tool": { "tasks": { - "title": "", + "title": "Zadaci", "status": { - "idle": "", + "idle": "Neaktivan", "running": "U radu", "error": "Pogreška", "disabled": "" }, "job": { "iconsUpdater": { - "label": "" + "label": "Ažuriranje ikona" }, "analytics": { - "label": "" + "label": "Analitika" }, "ping": { - "label": "" + "label": "Pingovi" } }, "interval": { @@ -4951,12 +4998,12 @@ } }, "api": { - "title": "", + "title": "API", "modal": { "createApiToken": { - "title": "", - "description": "", - "button": "" + "title": "API token je stvoren", + "description": "API token je stvoren. Budite oprezni, ovaj token je šifriran u bazi podataka i nikada vam više neće biti prenesen. Ako izgubite ovaj token, više nećete moći dohvatiti ovaj specifični token.", + "button": "Kopiraj i zatvori" } }, "tab": { @@ -4964,10 +5011,10 @@ "label": "Dokumentacija" }, "apiKey": { - "label": "", - "title": "", + "label": "Autentifikacija", + "title": "API ključevi", "button": { - "createApiToken": "" + "createApiToken": "Stvori API token" }, "modal": { "delete": { @@ -4978,7 +5025,7 @@ "table": { "header": { "id": "iskaznica", - "createdBy": "", + "createdBy": "Stvorio", "actions": "" } } @@ -5075,144 +5122,144 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Potpuna sigurnosna kopija baze podataka", + "metaTitle": "Sigurnosna kopija i vraćanje", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Izvoz baze podataka", + "description": "Preuzmite potpunu sigurnosnu kopiju svoje SQLite baze podataka uključujući sve postavke, korisnike, ploče i šifrirane integracijske tajne. Sigurnosna kopija se pakira kao ZIP datoteka s ključem za enkripciju i metapodacima.", + "button": "Preuzmi sigurnosnu kopiju", + "error": "Izvoz nije uspio", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Izvoz osjetljivih podataka", + "warningTitle": "Ovaj izvoz sadrži vašu cijelu bazu podataka.", + "warningBody": "Sigurnosna kopija uključuje sve korisnike, integracijske tajne (šifrirane), API ključeve, konfiguracije ploča i podatke aplikacija. Pohranite izvezenu datoteku na sigurno i nemojte je dijeliti.", + "typePrompt": "Upišite \"{phrase}\" za nastavak", + "submit": "Izvoz baze podataka", + "cancel": "Otkaži" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Vraćanje baze podataka", + "description": "Prenesite prethodno izvezenu ZIP sigurnosnu kopiju za vraćanje vaše baze podataka. To će zamijeniti cijelu vašu bazu podataka. Ako je sigurnosna kopija stvorena s drugim ključem za enkripciju, tajne će se automatski ponovno šifrirati.", + "warning": "Vraćanje sigurnosne kopije potpuno će zamijeniti vašu trenutnu bazu podataka i ponovno pokrenuti aplikaciju. Ova radnja se ne može poništiti.", "dropzone": { - "title": "", - "description": "" + "title": "Ovdje ispustite svoju ZIP sigurnosnu kopiju ili kliknite za pregled", + "description": "Prihvaćaju se samo .zip datoteke iz Homarr SQLite sigurnosne kopije" }, - "changeFile": "", - "button": "", + "changeFile": "Promijeni datoteku", + "button": "Vraćanje baze podataka", "success": { - "title": "", - "message": "" + "title": "Vraćanje dovršeno", + "message": "Baza podataka je uspješno vraćena. Aplikacija se ponovno pokreće..." }, - "error": "" + "error": "Uvoz nije uspio" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Sadržaj sigurnosne kopije", + "exported": "Izvezeno {date}", + "loading": "Analiziranje datoteke sigurnosne kopije...", + "errorTitle": "Pogreška pregleda", + "entity": "Entitet", + "count": "Broj", + "boards": "Daske", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Daske", + "user": "Korisnici", + "app": "Aplikacije", + "integration": "Integracije", + "item": "Widgeti", + "media": "Mediji", + "search_engine": "Tražilice" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Neuspješna analiza datoteke sigurnosne kopije", + "invalidMissingMetadata": "Neispravna sigurnosna kopija: nedostaje metadata.json", + "invalidMissingDb": "Neispravna sigurnosna kopija: nedostaje db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Ovdje ispustite svoju ZIP sigurnosnu kopiju", + "description": "Prihvaća .zip datoteke iz Homarr SQLite sigurnosne kopije (maks. 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analiziranje sigurnosne kopije...", + "changeFile": "Promijeni datoteku", + "continueToRestore": "Nastavi na vraćanje", + "tryAgain": "Pokušaj ponovno", + "analysisError": "Pogreška analize", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Sadržaj sigurnosne kopije", + "exported": "Izvezeno {date}", + "entity": "Entitet", + "count": "Broj", + "boards": "Daske", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Daske", + "user": "Korisnici", + "app": "Aplikacije", + "integration": "Integracije", + "item": "Widgeti", + "media": "Mediji", + "search_engine": "Tražilice" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migracija primijenjena", + "migrationsAppliedPlural": "{count} migracija primijenjeno", + "migrationsOlderVersion": "Ova sigurnosna kopija je iz starije Homarr verzije. {count} migracija sheme je primijenjena za ažuriranje.", + "migrationsOlderVersionPlural": "Ova sigurnosna kopija je iz starije Homarr verzije. {count} migracije sheme su primijenjene za ažuriranje.", + "migrationsUpToDate": "Shema baze podataka je ažurirana ({count} migracija primijenjeno)", + "upToDate": "Ažurirano", + "migrationsPending": "{count} na čekanju" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Primjena migracija ({current}/{total})", + "migrationLabel": "Migracija {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Destruktivna radnja", + "warningTitle": "Ovo će trajno zamijeniti cijelu vašu bazu podataka.", + "warningBody": "Sve trenutne ploče, korisnici, aplikacije, integracije, postavke i sesije bit će izgubljeni. Ova radnja se ne može poništiti. Aplikacija će se ponovno pokrenuti nakon vraćanja.", + "typePrompt": "Upišite \"{phrase}\" za nastavak", + "cancel": "Otkaži", + "submit": "Vraćanje baze podataka" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Vraćanje baze podataka...", + "extracting": "Raspakiravanje arhive sigurnosne kopije", + "migrating": "Primjena migracija baze podataka", + "encrypting": "Ponovno šifriranje integracijskih tajni", + "swapping": "Zamjena datoteke baze podataka", + "restarting": "Ponovno pokretanje poslužitelja" }, "complete": { - "title": "", - "message": "" + "title": "Vraćanje dovršeno", + "message": "Baza podataka je uspješno vraćena. Poslužitelj se ponovno pokreće — osvježite stranicu za nekoliko sekundi." }, "failed": { - "title": "" + "title": "Vraćanje nije uspjelo" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Neispravna sigurnosna kopija: nedostaje metadata.json", + "invalidMissingDb": "Neispravna sigurnosna kopija: nedostaje db.sqlite", + "analyzeError": "Neuspješna analiza sigurnosne kopije" } } }, "about": { - "version": "", - "text": "", + "version": "Verzija {version}", + "text": "Homarr je projekt otvorenog koda vođen zajednicom koji održavaju volonteri. Zahvaljujući tim ljudima, Homarr raste od 2021. Naš tim radi potpuno udaljeno iz mnogih različitih zemalja na Homarru u svoje slobodno vrijeme bez naknade.", "accordion": { "contributors": { - "title": "", - "subtitle": "" + "title": "Suradnici", + "subtitle": "{count} održava kod i Homarr" }, "translators": { - "title": "", - "subtitle": "" + "title": "Prevodioci", + "subtitle": "{count} doprinosi prijevodima na mnoge jezike" }, "sponsors": { "title": "", "subtitle": "" }, "libraries": { - "title": "", - "subtitle": "" + "title": "Biblioteke", + "subtitle": "{count} korišteno u kodu Homarra" }, "hotkeys": { "title": "", @@ -5234,14 +5281,14 @@ } }, "docker": { - "title": "", + "title": "Kontejneri", "table": { - "updated": "", + "updated": "Ažurirano {when}", "refresh": { "lastUpdated": "" }, "search": "", - "selected": "", + "selected": "Odabrano {selectCount} od {totalCount} kontejnera", "footer": "", "totalCpu": "", "totalMemory": "" @@ -5257,9 +5304,9 @@ "running": "U radu", "paused": "Pauzirano", "restarting": "Ponovno pokretanje", - "exited": "", + "exited": "Završeno", "removing": "Uklanjam", - "dead": "" + "dead": "Mrtav" } }, "stats": { @@ -5277,27 +5324,27 @@ "label": "Portovi" }, "host": { - "label": "" + "label": "Računalo" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Prikaži zapise", "page": { - "title": "" + "title": "{name} zapisi" } }, "start": { "label": "Pokreni", "notification": { "success": { - "title": "", - "message": "" + "title": "Kontejneri su pokrenuti", + "message": "Kontejneri su uspješno pokrenuti" }, "error": { - "title": "", - "message": "" + "title": "Kontejneri nisu pokrenuti", + "message": "Kontejneri nisu mogli biti pokrenuti" } } }, @@ -5305,12 +5352,12 @@ "label": "Zaustavi", "notification": { "success": { - "title": "", - "message": "" + "title": "Kontejneri su zaustavljeni", + "message": "Kontejneri su uspješno zaustavljeni" }, "error": { - "title": "", - "message": "" + "title": "Kontejneri nisu zaustavljeni", + "message": "Kontejneri nisu mogli biti zaustavljeni" } } }, @@ -5318,38 +5365,39 @@ "label": "Ponovo pokreni", "notification": { "success": { - "title": "", - "message": "" + "title": "Kontejneri su ponovno pokrenuti", + "message": "Kontejneri su uspješno ponovno pokrenuti" }, "error": { - "title": "", - "message": "" + "title": "Kontejneri nisu ponovno pokrenuti", + "message": "Kontejneri nisu mogli biti ponovno pokrenuti" } } }, "remove": { "label": "Ukloni", + "confirm": "", "notification": { "success": { - "title": "", - "message": "" + "title": "Kontejneri su uklonjeni", + "message": "Kontejneri su uspješno uklonjeni" }, "error": { - "title": "", - "message": "" + "title": "Kontejneri nisu uklonjeni", + "message": "Kontejneri nisu mogli biti uklonjeni" } } }, "refresh": { - "label": "", + "label": "Osvježi", "notification": { "success": { - "title": "", - "message": "" + "title": "Kontejneri su osvježeni", + "message": "Sada gledate najnovije podatke" }, "error": { - "title": "", - "message": "" + "title": "Kontejneri nisu osvježeni", + "message": "Nešto je pošlo po zlu prilikom osvježavanja kontejnera" } } }, @@ -5616,32 +5664,32 @@ } }, "permission": { - "title": "", + "title": "Dopuštenja", "userSelect": { - "title": "" + "title": "Dodaj korisničko dopuštenje" }, "groupSelect": { - "title": "" + "title": "Dodaj grupno dopuštenje" }, "tab": { "user": "Korisnici", - "group": "", - "inherited": "" + "group": "Grupe", + "inherited": "Naslijeđene grupe" }, "field": { "user": { "label": "Korisnik" }, "group": { - "label": "" + "label": "Grupa" }, "permission": { - "label": "" + "label": "Dopuštenje" } }, "action": { - "saveUser": "", - "saveGroup": "" + "saveUser": "Spremi korisničko dopuštenje", + "saveGroup": "Spremi grupno dopuštenje" } }, "navigationStructure": { @@ -5651,30 +5699,30 @@ "label": "Daske" }, "integrations": { - "label": "", + "label": "Integracije", "edit": { "label": "Uredi" }, "new": { - "label": "" + "label": "Novi" } }, "search-engines": { - "label": "", + "label": "Tražilice", "new": { - "label": "" + "label": "Novi" }, "edit": { "label": "Uredi" } }, "medias": { - "label": "" + "label": "Mediji" }, "apps": { "label": "aplikacije", "new": { - "label": "" + "label": "Novi" }, "edit": { "label": "Uredi" @@ -5698,10 +5746,10 @@ "label": "Stvoriti" }, "general": "Općenito", - "security": "", + "security": "Sigurnost", "board": "Daske", "groups": { - "label": "" + "label": "Grupe" }, "invites": { "label": "poziva" @@ -5713,9 +5761,9 @@ "label": "" }, "docker": { - "label": "", + "label": "Docker", "logs": { - "label": "" + "label": "Zapisi" } }, "kubernetes": { @@ -5746,7 +5794,7 @@ } }, "logs": { - "label": "" + "label": "Zapisi" }, "certificates": { "label": "", @@ -5764,28 +5812,28 @@ } }, "search": { - "placeholder": "", - "nothingFound": "", + "placeholder": "Pretraži bilo što", + "nothingFound": "Ništa nije pronađeno", "error": { - "fetch": "" + "fetch": "Došlo je do pogreške prilikom dohvaćanja podataka" }, "mode": { "appIntegrationBoard": { - "help": "", + "help": "Pretraži aplikacije, integracije ili ploče", "group": { "app": { "title": "aplikacije", "children": { "action": { "open": { - "label": "" + "label": "Otvori URL aplikacije" }, "edit": { - "label": "" + "label": "Uredi aplikaciju" } }, "detail": { - "title": "" + "title": "Odaberite radnju za aplikaciju" } } }, @@ -5794,177 +5842,177 @@ "children": { "action": { "open": { - "label": "" + "label": "Otvori ploču" }, "homeBoard": { - "label": "" + "label": "Postavi kao početnu ploču" }, "mobileBoard": { "label": "" }, "settings": { - "label": "" + "label": "Otvori postavke" } }, "detail": { - "title": "" + "title": "Odaberite radnju za ploču" } } }, "integration": { - "title": "" + "title": "Integracije" } } }, "command": { - "help": "", + "help": "Aktiviraj način naredbi", "group": { "localCommand": { "title": "" }, "globalCommand": { - "title": "", + "title": "Globalne naredbe", "option": { "colorScheme": { - "auto": "", - "light": "", - "dark": "" + "auto": "Prebaci način izgleda", + "light": "Prebaci na svijetli način rada", + "dark": "Prebaci na tamni način rada" }, "language": { - "label": "", + "label": "Promijeni jezik", "children": { "detail": { - "title": "" + "title": "Odaberite željeni jezik" } } }, "newBoard": { - "label": "" + "label": "Stvori novu ploču" }, "importBoard": { - "label": "" + "label": "Uvezi ploču" }, "newApp": { - "label": "" + "label": "Stvori novu aplikaciju" }, "newIntegration": { - "label": "", + "label": "Stvori novu integraciju", "children": { "detail": { - "title": "" + "title": "Odaberite vrstu integracije koju želite stvoriti" } } }, "newUser": { - "label": "" + "label": "Stvori novog korisnika" }, "newInvite": { - "label": "" + "label": "Stvori novu pozivnicu" }, "newGroup": { - "label": "" + "label": "Stvori novu grupu" } } }, "preferences": { - "title": "", + "title": "Preferencije", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Odaberite preferenciju za promjenu", + "backHint": "Pritisnite Backspace ili gumb za povratak za povratak", + "backAction": "Vrati se natrag" } }, "notification": { "error": { - "message": "" + "message": "Ne mogu ažurirati preferenciju" } }, "option": { "preferences": { - "label": "" + "label": "Otvori preferencije" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Omogućeno", + "disabled": "Onemogućeno" }, "board": { - "none": "", - "unavailable": "" + "none": "Ništa", + "unavailable": "Trenutno odabrano (nedostupno)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Ništa", + "unavailable": "Trenutno odabrano (nedostupno)" }, "colorScheme": { - "label": "", + "label": "Shema boja", "children": { "detail": { - "title": "" + "title": "Odaberite shemu boja" } } }, "locale": { - "label": "", + "label": "Jezik", "children": { "detail": { - "title": "" + "title": "Odaberite željeni jezik" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Zadana tražilica", "children": { "detail": { - "title": "" + "title": "Odaberite zadanu tražilicu" } } }, "openSearchInNewTab": { - "label": "", + "label": "Otvori rezultate pretraživanja u novoj kartici", "children": { "detail": { - "title": "" + "title": "Otvori rezultate pretraživanja u novoj kartici" } } }, "ddgBangs": { - "label": "", + "label": "Omogući DuckDuckGo prečace", "children": { "detail": { - "title": "" + "title": "Omogući DuckDuckGo prečace" } } }, "firstDayOfWeek": { - "label": "", + "label": "Prvi dan u tjednu", "children": { "detail": { - "title": "" + "title": "Odaberite prvi dan u tjednu" } } }, "homeBoardId": { - "label": "", + "label": "Početna ploča", "children": { "detail": { - "title": "" + "title": "Odaberite svoju početnu ploču" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobilna početna ploča", "children": { "detail": { - "title": "" + "title": "Odaberite svoju mobilnu početnu ploču" } } }, "pingIconsEnabled": { - "label": "", + "label": "Koristi ikone za pingove", "children": { "detail": { - "title": "" + "title": "Koristi ikone za pingove" } } }, @@ -5977,84 +6025,84 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Otvori cijelu stranicu preferencija" } } } } }, "media": { - "help": "", + "help": "Pretražite filmove ili serije za zahtjev", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Filmovi i serije" }, "action": { "search": { - "label": "", - "description": "", + "label": "Pretražite filmove ili serije", + "description": "Počnite tipkati za pretraživanje integracija za zahtjeve za medije", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Dodajte integraciju Overseerr, Jellyseerr ili Seerr za omogućavanje pretraživanja medija.", + "scoped": "Ovaj widget nema dostupnu integraciju za zahtjeve za medije." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Dostupno", + "partiallyAvailable": "Djelomično", + "processing": "Obrada", + "requested": "Zatraženo", + "pending": "Zatraženo" } }, "external": { - "help": "", + "help": "Koristi vanjsku tražilicu", "group": { "searchEngine": { - "title": "", - "tipDdgBangs": "", + "title": "Tražilice", + "tipDdgBangs": "Savjet: Ovdje možete koristiti i bilo koji DuckDuckGo prečac, npr. !nešto", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Pretraži \"{query}\" pomoću {label}", + "pressEnterToOpen": "Pritisnite Enter za otvaranje", + "engineSelected": "{label} odabran (!{bang})", + "typeQueryToContinue": "Upišite upit za pretraživanje za nastavak", + "emptyBangHint": "Upišite prečac, npr. !yt, zatim pritisnite razmaknicu za odabir" }, "children": { "action": { "search": { - "label": "" + "label": "Pretraži s {name}" } }, "detail": { - "title": "" + "title": "Odaberite radnju za tražilicu" }, "searchResults": { - "title": "" + "title": "Odaberite rezultat pretraživanja za radnje" } }, "option": { "google": { - "name": "", - "description": "" + "name": "Google", + "description": "Pretraži web s Googleom" }, "bing": { - "name": "", - "description": "" + "name": "Bing", + "description": "Pretraži web s Bingom" }, "duckduckgo": { - "name": "", - "description": "" + "name": "DuckDuckGo", + "description": "Pretraži web s DuckDuckGo-om" }, "torrent": { "name": "Torrenti", - "description": "" + "description": "Pretraži torrente na torrentdownloads.pro" }, "youTube": { - "name": "", - "description": "" + "name": "YouTube", + "description": "Pretraži videozapise na YouTubeu" } } } @@ -6063,7 +6111,7 @@ "help": { "group": { "mode": { - "title": "" + "title": "Načini" }, "help": { "title": "Pomozite", @@ -6072,7 +6120,7 @@ "label": "Dokumentacija" }, "submitIssue": { - "label": "" + "label": "Pošalji prijavu problema" }, "discord": { "label": "Nesloga u zajednici" @@ -6107,58 +6155,58 @@ } }, "page": { - "help": "", + "help": "Pretraži stranice", "group": { "page": { - "title": "", + "title": "Stranice", "option": { "manageHome": { - "label": "" + "label": "Upravljanje početnom stranicom" }, "manageBoard": { - "label": "" + "label": "Upravljanje pločama" }, "manageApp": { - "label": "" + "label": "Upravljanje aplikacijama" }, "manageIntegration": { - "label": "" + "label": "Upravljanje integracijama" }, "manageSearchEngine": { - "label": "" + "label": "Upravljanje tražilicama" }, "manageMedia": { - "label": "" + "label": "Upravljanje medijima" }, "manageUser": { "label": "Upravljanje korisnicima" }, "manageInvite": { - "label": "" + "label": "Upravljanje pozivnicama" }, "manageGroup": { - "label": "" + "label": "Upravljanje grupama" }, "manageDocker": { - "label": "" + "label": "Upravljanje Dockerom" }, "manageApi": { - "label": "" + "label": "Swagger API" }, "manageLog": { - "label": "" + "label": "Pregled zapisa" }, "manageTask": { - "label": "" + "label": "Upravljanje zadacima" }, "manageSettings": { - "label": "" + "label": "Globalne postavke" }, "about": { "label": "O aplikaciji" }, "homeBoard": { - "label": "" + "label": "Početna ploča" }, "preferences": { "label": "Vaše preferencije" @@ -6168,37 +6216,37 @@ } }, "userGroup": { - "help": "", + "help": "Pretraži korisnike ili grupe", "group": { "user": { "title": "Korisnici", "children": { "action": { "detail": { - "label": "" + "label": "Prikaži detalje korisnika" } }, "detail": { - "title": "" + "title": "Odaberite radnju za korisnika" } } }, "group": { - "title": "", + "title": "Grupe", "children": { "action": { "detail": { - "label": "" + "label": "Prikaži detalje grupe" }, "manageMember": { - "label": "" + "label": "Upravljanje članovima" }, "managePermission": { - "label": "" + "label": "Upravljanje dopuštenjima" } }, "detail": { - "title": "" + "title": "Odaberite radnju za grupu" } } } @@ -6206,27 +6254,27 @@ } }, "engine": { - "search": "", + "search": "Pronađi tražilicu", "field": { "name": { "label": "Naziv" }, "short": { - "label": "" + "label": "Kratko" }, "urlTemplate": { - "label": "" + "label": "Predložak URL pretraživanja" }, "description": { - "label": "" + "label": "Opis" } }, "page": { "list": { - "title": "", + "title": "Tražilice", "noResults": { - "title": "", - "action": "" + "title": "Još nema tražilica", + "action": "Stvorite svoju prvu tražilicu" }, "interactive": "" }, @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Stanje" }, "status": { - "requested": "" + "requested": "Zatraženo" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Pročitajte dokumentaciju", + "next": "Sljedeći", + "prev": "Natrag", + "done": "Gotovo", + "skip": "Preskoči vodič", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Dobrodošli u Homarr!", + "description": "Ovo je vaš kontrolni centar. Odavde upravljate pločama, aplikacijama, integracijama, korisnicima i postavkama poslužitelja. Prođimo kroz svaki odjeljak." }, "boardsList": { - "title": "", - "description": "" + "title": "Vaše ploče", + "description": "Ovdje su sve vaše ploče. Svaka ploča ima vlastiti izgled, pozadinu i postavke pristupa. Možete vidjeti tko ju je kreirao i je li javna ili privatna." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Stvori ploču", + "description": "Kliknite ovdje za stvaranje nove ploče ili uvoz iz prethodne Homarr instalacije. Svaka ploča dobiva vlastiti URL koji možete dijeliti." }, "appsList": { - "title": "", - "description": "" + "title": "Vaše aplikacije", + "description": "Ovo su sve aplikacije koje ste dodali — poveznice na vaše self-hosted usluge. Svaka aplikacija ima ikonu, opcionalnu provjeru zdravlja i statusnu značku na ploči." }, "appsCreate": { - "title": "", - "description": "" + "title": "Dodaj aplikaciju", + "description": "Ovdje registrirajte novu uslugu. Dajte joj naziv, URL i ikonu — pojavit će se kao pločica na vašim pločama s nadzorom statusa uživo." }, "integrationsList": { - "title": "", - "description": "" + "title": "Vaše integracije", + "description": "Ovo su usluge povezane s Homarrom — Sonarr, Radarr, Plex, Jellyfin i više od 50 drugih. Sve vjerodajnice su šifrirane u mirovanju." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Dodaj integraciju", + "description": "Ovdje povežite novu uslugu. Odaberite vrstu, unesite URL i API ključ — Homarr provjerava vezu prije spremanja." }, "usersList": { - "title": "", - "description": "" + "title": "Vaši korisnici", + "description": "Pogledajte tko sve ima pristup. Organizirajte korisnike u grupe i kontrolirajte tko može vidjeti ili uređivati svaku ploču." }, "usersCreate": { - "title": "", - "description": "" + "title": "Stvori korisnika", + "description": "Ovdje dodajte novi korisnički račun. Također možete koristiti pozivne poveznice za jednostavno uvođenje. To je vodič — sve je spremno!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Ovo je vaša ploča", + "description": "Ploča s povuci-i-ispusti na kojoj raspoređujete aplikacije i widgete. Pritisnite Ctrl+K bilo kada za pretraživanje aplikacija, ploča i radnji." }, "editMode": { - "title": "", - "description": "" + "title": "Način uređivanja", + "description": "Kliknite ovdje za ulazak u način uređivanja. Zatim možete dodavati widgete, aplikacije i odjeljke — povlačite za premještanje, mijenjajte veličinu pomoću ručice u kutu. Ponovno kliknite za spremanje promjena." }, "settings": { - "title": "", - "description": "" + "title": "Postavke ploče", + "description": "Promijenite naziv ploče, broj stupaca, pozadinu, boje i tko joj može pristupiti. Svaka ploča može biti javna ili privatna." }, "switcher": { - "title": "", - "description": "" + "title": "Prebacivanje ploča", + "description": "Preskačite među pločama. Stvorite zasebne ploče za različite namjene — medije, mrežu, po korisniku ili što god želite." }, "userMenu": { - "title": "", - "description": "" + "title": "Vaš profil", + "description": "Promijenite shemu boja, jezik, početnu ploču i preferencije. Odavde također možete otići u upravljačko područje." } } } diff --git a/packages/translation/src/lang/hu.json b/packages/translation/src/lang/hu.json index 1989b8fdf..979b24bce 100644 --- a/packages/translation/src/lang/hu.json +++ b/packages/translation/src/lang/hu.json @@ -9,8 +9,8 @@ "scratch": "Kezdjük a legelejétől", "importOldmarr": "Importálás Homarr 1.0 előtti verzióból", "restoreSqlite": "Visszaállítás SQLite-mentésből", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqliteDescription": "Tölts fel egy teljes SQLite adatbázis biztonsági mentést egy korábbi Homarr példányból. Ez visszaállítja az összes táblát, felhasználót, alkalmazást, integrációt és beállítást.", + "backToOptions": "← Vissza a beállítási lehetőségekhez" } }, "import": { @@ -95,44 +95,44 @@ }, "integrations": { "title": "Integrációk", - "subtitle": "", - "description": "", + "subtitle": "Válaszd ki a használt szolgáltatásokat.", + "description": "Válaszd ki a csatlakoztatni kívánt integrációkat. Automatikusan beállítjuk az irányítópultot a megfelelő widgetekkel.", "action": { - "continue": "", - "skip": "" + "continue": "Folytatás", + "skip": "Kihagyás most" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} / {total}", + "skip": "Integráció kihagyása", + "finishing": "Irányítópult beállítása...", "error": { - "title": "", - "message": "" + "title": "A beállítás sikertelen", + "message": "Hiba történt az irányítópult beállítása közben. Próbáld újra." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "URL segítők", + "description": "Ezek a segítők megpróbálják kitalálni a szolgáltatásaid URL-jét. Ha nem működik, írd be manuálisan a címet." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Alap URL", + "placeholder": "homelab.local vagy 192.168.1.1", + "hint": "Add meg az alap domain-t vagy IP-t az integrációs URL-ek automatikus kitöltéséhez", + "warning": "Az alap URL megadásával most automatikusan kitöltődik az összes integrációs URL, időt takarítva meg a beállítás során", + "preview": "pl. {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Aldomain", + "hostPort": "Hoszt:Port" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "A Docker {count} szolgáltatást észlelt", + "detectedBreakdown": "{integrations} integráció · {apps} alkalmazás", + "summary": "A Homarr {apps} alkalmazást észlelt, ebből {integrations} beépített integrációval rendelkezik", + "appBadge": "Alkalmazás", + "appSectionLabel": "Irányítópultra adandó alkalmazások ({count} kiválasztva)", + "scanning": "Docker szkennelése...", + "scanningDescription": "Futó konténerek keresése a rendszeren" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "Jelszó", - "suggestionsTitle": "", + "suggestionsTitle": "Jelszó-javaslatok", "suggestion": { "length": "Tartalmazzon legalább 8 karaktert", "lowercase": "Tartalmazzon kisbetűt", @@ -691,206 +691,206 @@ "customWidget": { "page": { "list": { - "title": "", - "noResults": "", - "loading": "" + "title": "Egyéni widgetek", + "noResults": "Még nincsenek egyéni widgetek. Hozd létre az elsőt!", + "loading": "Töltés..." }, "create": { - "title": "", - "subtitle": "" + "title": "Egyéni widget létrehozása", + "subtitle": "Adj meg egy API URL-t, hitelesítést, és hogy hogyan jelenjenek meg a válaszadatok." }, "edit": { - "title": "" + "title": "Egyéni widget szerkesztése" } }, "action": { - "create": "", - "import": "", - "save": "", - "delete": "", - "deleteConfirm": "", - "export": "", - "addMapping": "", - "addColumn": "", - "edit": "", - "removeMapping": "", - "removeColumn": "", - "addItem": "", - "removeItem": "", - "addBar": "", - "duplicate": "", - "copyAiPrompt": "", - "enable": "", - "disable": "", - "menu": "" + "create": "Létrehozás", + "import": "Importálás", + "save": "Mentés", + "delete": "Egyéni widget törlése", + "deleteConfirm": "Biztosan törölni szeretnéd \"{name}\" widgetet? Ez a művelet nem vonható vissza.", + "export": "Exportálás", + "addMapping": "Leképezés hozzáadása", + "addColumn": "Oszlop hozzáadása", + "edit": "Szerkesztés", + "removeMapping": "Leképezés eltávolítása", + "removeColumn": "Oszlop eltávolítása", + "addItem": "Elem hozzáadása", + "removeItem": "Elem eltávolítása", + "addBar": "Sáv hozzáadása", + "duplicate": "Duplikálás", + "copyAiPrompt": "AI prompt másolása", + "enable": "Engedélyezés", + "disable": "Letiltás", + "menu": "Műveletek" }, "field": { - "name": "", - "description": "", - "iconUrl": "", - "url": "", - "authType": "", - "headerName": "", - "method": "", - "requestBody": "", - "displayType": "", - "jsonPath": "", - "jsonPathHint": "", - "label": "", - "unit": "", - "mappings": "", - "tablePath": "", - "tablePathHint": "", - "columns": "", - "header": "", - "items": "", - "gridColumns": "", - "cardStyle": "", - "bars": "", - "valuePath": "", - "maxPath": "", - "showPercentage": "", - "barSize": "", - "goodValues": "", - "dotSize": "", - "valueSize": "", - "labelPosition": "", - "kvLayout": "", - "striped": "", - "compact": "", - "maxHeight": "", - "color": "", - "buttonLabel": "", - "buttonColor": "", - "confirmText": "", - "confirmTextHint": "", - "successMessage": "", - "successMessageHint": "", - "enabled": "", + "name": "Név", + "description": "Leírás", + "iconUrl": "Ikon URL", + "url": "URL", + "authType": "Hitelesítés típusa", + "headerName": "Fejléc/lekérdezési paraméter neve", + "method": "Metódus", + "requestBody": "Kérelem törzse", + "displayType": "Megjelenítés típusa", + "jsonPath": "JSON elérési út", + "jsonPathHint": "Használd a JSONPath szintaxist az értékek kinyeréséhez, pl. $.data.temperature vagy $.items[0].name", + "label": "Címke", + "unit": "Mértékegység", + "mappings": "Leképezések", + "tablePath": "Tömb JSON elérési útja", + "tablePathHint": "A válaszban lévő tömb elérési útja, pl. $.data.items", + "columns": "Oszlopok", + "header": "Fejléc", + "items": "Elemek", + "gridColumns": "Rács oszlopok", + "cardStyle": "Kártya stílus", + "bars": "Sávok", + "valuePath": "Érték JSON elérési út", + "maxPath": "Maximális érték JSON elérési út", + "showPercentage": "Százalék megjelenítése", + "barSize": "Sáv mérete", + "goodValues": "Jó értékek (vesszővel elválasztva)", + "dotSize": "Pont mérete", + "valueSize": "Érték mérete", + "labelPosition": "Címke pozíciója", + "kvLayout": "Elrendezés", + "striped": "Csíkos sorok", + "compact": "Kompakt mód", + "maxHeight": "Maximális magasság (px)", + "color": "Szín", + "buttonLabel": "Gomb felirata", + "buttonColor": "Gomb színe", + "confirmText": "Megerősítő szöveg", + "confirmTextHint": "Ha be van állítva, egy megerősítő ablak jelenik meg a kérés végrehajtása előtt", + "successMessage": "Sikerüzenet", + "successMessageHint": "A sikeres végrehajtás után megjelenő üzenet", + "enabled": "Engedélyezve", "template": { - "label": "", - "description": "" + "label": "JSX sablon", + "description": "Mantine JSX sablon. Az API válasz mezőit adatkötéseken keresztül éred el (pl. data.name). Csak engedélyezett komponenseket használj. Tilos: constructor, __proto__, eval, Function, window, document." } }, "placeholder": { - "exampleLabel": "", - "exampleLabelShort": "", - "exampleHeader": "", - "exampleUnit": "", - "iconUrl": "", - "url": "", - "headerName": "", - "jsonPath": "", - "tablePath": "", - "columnJsonPath": "", - "valuePath": "", - "maxPath": "", - "goodValues": "", - "color": "" + "exampleLabel": "CPU hőmérséklet", + "exampleLabelShort": "CPU hőm", + "exampleHeader": "Név", + "exampleUnit": "°C", + "iconUrl": "https://...", + "url": "https://api.example.com/api/v1/status", + "headerName": "X-API-Key", + "jsonPath": "$.data.value", + "tablePath": "$.data.items", + "columnJsonPath": "$.name", + "valuePath": "$.data.used", + "maxPath": "$.data.total", + "goodValues": "online, true, up", + "color": "kék" }, "cardStyleOption": { - "filled": "", - "outline": "", - "subtle": "" + "filled": "Kitöltött", + "outline": "Körvonal", + "subtle": "Halvány" }, "layoutOption": { - "list": "", - "grid": "" + "list": "Lista", + "grid": "Rács" }, "sizeOption": { - "sm": "", - "md": "", - "lg": "", - "xl": "" + "sm": "Kicsi", + "md": "Közepes", + "lg": "Nagy", + "xl": "Extra nagy" }, "labelPositionOption": { - "above": "", - "below": "" + "above": "Felette", + "below": "Alatta" }, "fieldset": { - "general": "", - "connection": "", - "display": "" + "general": "Általános", + "connection": "API kapcsolat", + "display": "Megjelenítési konfiguráció" }, "displayTypeDescription": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Egy kinyert érték megjelenítése címkével és mértékegységgel", + "keyValue": "Több címkézett érték megjelenítése egymás mellett", + "table": "Adatsorok megjelenítése táblázatos formában", + "statGrid": "Színezett statisztikai kártyák rácsban – mint a Pi-Hole vagy Speedtest widgetek", + "progressBars": "Folyamatjelző sávok használat vagy készültség mutatására – lemez, memória, kvóta", + "statusIndicator": "Színezett állapotpontok, amelyek online/offline vagy egészségügyi állapotot mutatnak", + "countGrid": "Kompakt szám + címke számlálók sűrű rácsban", + "raw": "Szépen formázott JSON kimenet hibakereséshez", + "actionButton": "Egy gomb, ami kérés végrehajtását váltja ki kattintásra", + "customJsx": "Egyéni JSX elrendezés engedélyezett Mantine komponensekkel és teljes API adatkötéssel" }, "method": { - "GET": "", - "POST": "", - "PUT": "", - "DELETE": "", - "PATCH": "" + "GET": "GET", + "POST": "POST", + "PUT": "PUT", + "DELETE": "DELETE", + "PATCH": "PATCH" }, "authType": { - "none": "", - "bearer": "", - "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "none": "Nincs", + "bearer": "Bearer token", + "basic": "Basic Auth", + "apiKeyHeader": "API-kulcs (fejléc)", + "apiKeyQuery": "API-kulcs (lekérdezés)" }, "displayType": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Egyedi érték", + "keyValue": "Kulcs-érték", + "table": "Táblázat", + "statGrid": "Statisztikai rács", + "progressBars": "Folyamatjelző sávok", + "statusIndicator": "Állapotjelző", + "countGrid": "Számláló rács", + "raw": "Nyers JSON", + "actionButton": "Műveleti gomb", + "customJsx": "Egyéni JSX" }, "secret": { - "apiKey": "", - "username": "", - "password": "", - "savedPlaceholder": "" + "apiKey": "API kulcs / token", + "username": "Felhasználónév", + "password": "Jelszó", + "savedPlaceholder": "••••••• (mentve, üresen hagyva megtartja)" }, "preview": { - "title": "", - "test": "", - "hint": "", - "rawResponse": "" + "title": "Előnézet", + "test": "Teszt", + "hint": "Kattints a Teszt gombra az API válasz előnézetéhez a jelenlegi konfigurációval.", + "rawResponse": "Nyers JSON válasz" }, "notification": { - "created": "", - "updated": "", - "deleted": "", + "created": "\"{name}\" widget sikeresen létrehozva.", + "updated": "\"{name}\" widget sikeresen frissítve.", + "deleted": "\"{name}\" widget törölve.", "imported": "", - "aiPromptCopied": "", - "aiPromptDescription": "", - "aiPromptCopy": "", - "aiPromptNoResponse": "", - "aiPromptCopyError": "", - "createError": "", - "updateError": "", - "importError": "", - "exportError": "", - "duplicated": "", - "duplicateError": "", - "toggleError": "", - "deleteError": "", - "previewError": "", - "executed": "", - "executeError": "" + "aiPromptCopied": "AI prompt a vágólapra másolva", + "aiPromptDescription": "Másolj egy előre elkészített promptot bármelyik AI chatbotba (ChatGPT, Claude, Gemini...). Tartalmazza a teljes widget sémát és az API választ, így az AI generálhat egy importálásra kész JSON konfigurációt.", + "aiPromptCopy": "Másolás a vágólapra", + "aiPromptNoResponse": "Tipp: Futtass egy tesztet először, hogy az API válasz is bekerüljön a promptba a jobb eredmények érdekében.", + "aiPromptCopyError": "A prompt vágólapra másolása sikertelen. Előfordulhat, hogy a böngésződ nem támogatja ezt a funkciót.", + "createError": "A widget létrehozása sikertelen. Ellenőrizd, hogy az API végpont elérhető-e.", + "updateError": "A widget frissítése sikertelen. A módosításaid nem lettek mentve.", + "importError": "A widget importálása sikertelen. Ellenőrizd, hogy a fájl érvényes egyéni widget JSON export-e.", + "exportError": "A widget exportálása sikertelen.", + "duplicated": "\"{name}\" widget duplikálva.", + "duplicateError": "A widget duplikálása sikertelen.", + "toggleError": "A widget állapotának átkapcsolása sikertelen.", + "deleteError": "A widget törlése sikertelen.", + "previewError": "Az előnézet lekérése sikertelen. Ellenőrizd az URL-t és próbáld újra.", + "executed": "A művelet sikeresen végrehajtva.", + "executeError": "A művelet sikertelen: {error}" }, "table": { - "name": "", - "url": "", - "display": "" + "name": "Név", + "url": "URL", + "display": "Megjelenítés" }, "widget": { - "disabled": "" + "disabled": "Ez a widget le van tiltva" } }, "integration": { @@ -987,47 +987,47 @@ "placeholder": "Egyéni alkalmazás URL" }, "apiKeySettings": { - "label": "" + "label": "API kulcs beszerzése" } }, "action": { "create": "Új integráció" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widget", + "noWidgets": "Nincsenek widgetek", + "detected": "Docker-en keresztül észlelve" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Média", + "calendar": "Naptár", + "mediaSearch": "Keresés", + "mediaRelease": "Kiadások", + "mediaRequest": "Kérelmek", + "downloadClient": "Letöltések", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Egyéb", + "smartHomeServer": "Okosotthon", + "indexerManager": "Indexelő", + "healthMonitoring": "Állapot", + "search": "Keresés", + "mediaTranscoding": "Átkódolás", + "networkController": "Hálózat", + "releasesProvider": "Kiadások", + "notifications": "Értesítések", + "firewall": "Tűzfal", + "timetable": "Órarend", + "photoService": "Fotók", + "documents": "Dokumentumok", + "notes": "Jegyzetek", + "mediaMonitoring": "Figyelés", + "speedtest": "Sebességteszt", + "analytics": "Analitika", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Médiatár", + "uptimeMonitoring": "Üzemidő Figyelés" }, "testConnection": { "action": { @@ -1310,8 +1310,8 @@ "newLabel": "Új privát kulcs" }, "slug": { - "label": "", - "newLabel": "" + "label": "Állapotoldal slug", + "newLabel": "Új állapotoldal slug" } } }, @@ -1321,22 +1321,22 @@ "full": "Teljes integrációs hozzáférés" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Self-hosted hangoskönyv és podcast szerver" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Self-hosted zenei stream szerver Subsonic API kompatibilitással" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Self-hosted üzemidő figyelés nyilvános állapotoldalakkal", "secret": { "slug": { - "description": "" + "description": "A nyilvános állapotoldal slug-ja. Alapértelmezés szerint \"default\", ha nincs beállítva." }, "apiKey": { - "description": "" + "description": "Megadható API-kulcs a hitelesített /metrics hozzáféréshez" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Dokumentumkezelő rendszer beolvasott dokumentumok archiválására és rendszerezésére" }, "patchmon": { "name": "", @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Nincs feltöltött média" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Hozzáadás", "apply": "Alkalmaz", "backToOverview": "Vissza az áttekintéshez", - "skip": "", + "skip": "Kihagyás", "change": "Módosít", "create": "Létrehozás", "createAnother": "Újrakezdés", @@ -1431,8 +1431,8 @@ "checkLogs": "További részletekért ellenőrizze a naplókat", "tryAgain": "Próbálja újra", "loading": "Töltés", - "show": "", - "hide": "" + "show": "Mutat", + "hide": "Elrejt" }, "here": "itt", "iconPicker": { @@ -1602,7 +1602,7 @@ "label": { "create": "Új kategória", "changePosition": "Pozíció módosítása", - "settings": "" + "settings": "Beállítások" } }, "openAllInNewTabs": { @@ -1659,11 +1659,11 @@ "edit": { "title": "Elem szerkesztése", "tab": { - "widget": "", - "app": "" + "widget": "Widget szerkesztése", + "app": "Alkalmazás szerkesztése" }, "app": { - "propagationNotice": "" + "propagationNotice": "Az alkalmazás módosításai mindenhol érvénybe lépnek, ahol használva van az összes irányítópulton." }, "advancedOptions": { "label": "Haladó beállítások", @@ -1776,7 +1776,7 @@ "label": "Megnyitás új lapon" }, "withBorder": { - "label": "" + "label": "Szegély mutatása" }, "items": { "label": "Könyjelzők", @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Fordított rendezés" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "A konténerek statisztikáinak lekérése sikertelen" + "internalServerError": "A konténerek statisztikáinak lekérése sikertelen", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Az UPS eszközök állapotának figyelése egy NUT szerveren keresztül", "option": { "showBattery": { - "label": "" + "label": "Akkumulátor mutatása" }, "showLoad": { - "label": "" + "label": "Terhelés mutatása" }, "showVoltage": { - "label": "" + "label": "Feszültség mutatása" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Elérhető", + "onBattery": "Akkumulátorról", + "lowBattery": "Alacsony akkumulátor", + "charging": "Töltés", + "unknown": "Ismeretlen" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Üzemidő", + "load": "Terhelés", + "input": "Bemenet", + "output": "Kimenet" }, "error": { - "internalServerError": "" + "internalServerError": "Nem sikerült lekérni az UPS adatokat" } }, "tracearr": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Csak a jelenleg lejátszottakat mutasd", "description": "Ennek letiltása a Plex esetében nem fog működni" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Jelenleg lejátszás alatt", "user": "Felhasználó", @@ -2734,6 +2757,9 @@ "id": "Azonosító", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,48 +2784,48 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "A Paperless-ngx dokumentumarchívum áttekintése", + "documentsTotal": "Összes dokumentum", + "documentsInbox": "Bejövő", + "correspondents": "Levelezőpartnerek", + "tags": "Címkék", + "documentTypes": "Dokumentumtípusok", + "inboxRatio": "Bejövő aránya", + "inbox": "bejövő", + "total": "összesen", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Bejövő arányának megjelenítése", + "description": "A bejövő és az összes dokumentum arányának megjelenítése a kiemelt részben" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Bejövő gyűrű megjelenítése", + "description": "Folyamatjelző gyűrű megjelenítése a bejövő arány mellett" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Összes dokumentum megjelenítése", + "description": "Az archívumban lévő dokumentumok teljes számának megjelenítése" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Bejövő darabszám megjelenítése", + "description": "A bejövő mappában lévő feldolgozatlan dokumentumok számának megjelenítése" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Levelezőpartnerek megjelenítése", + "description": "A levelezőpartnerek teljes számának megjelenítése" }, "showTags": { - "label": "", - "description": "" + "label": "Címkék megjelenítése", + "description": "A címkék teljes számának megjelenítése" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Dokumentumtípusok megjelenítése", + "description": "A dokumentumtípusok teljes számának megjelenítése" } }, "error": { - "internalServerError": "" + "internalServerError": "A Paperless-ngx adatok letöltése nem sikerült" } }, "patchmon": { @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Elemek száma integrációnként", "description": "Ez az egyes integrációkhoz tartozó elemek számát korlátozza, nem pedig általánosan" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Oszlopok kiválasztása az elemek között", - "noCommunications": "Nem sikerül betölteni az adatokat az integrációból" + "noCommunications": "Nem sikerül betölteni az adatokat az integrációból", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Aktuális index az ügyfélnél" }, "id": { - "columnTitle": "Azonosító" + "columnTitle": "Azonosító", + "detailsTitle": "" }, "integration": { "columnTitle": "Integráció" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Befejezési idő", - "detailsTitle": "A befejezésig hátralévő idő" + "detailsTitle": "A befejezésig hátralévő idő", + "eta": "" }, "type": { "columnTitle": "Típus", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Összes arány" + "globalRatio": "Összes arány", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Sajtóközlemények", @@ -3492,27 +3545,27 @@ } } }, - "not-found": "", - "pre-release": "", - "archived": "", - "forked": "", - "starsCount": "", - "forksCount": "", - "issuesCount": "", - "markViewed": "", - "openProjectPage": "", - "openReleasePage": "", - "releaseDescription": "", - "projectDescription": "", - "created": "", + "not-found": "Nem található", + "pre-release": "Előzetes verzió", + "archived": "Archivált", + "forked": "Forkolt", + "starsCount": "Csillagok", + "forksCount": "Forkok", + "issuesCount": "Nyitott hibajegyek", + "markViewed": "Megjelölés megtekintettként", + "openProjectPage": "Projekt oldal megnyitása", + "openReleasePage": "Kiadási oldal megnyitása", + "releaseDescription": "Kiadás leírása", + "projectDescription": "Projekt leírása", + "created": "Létrehozva", "error": { - "label": "", + "label": "Hiba", "messages": { - "invalidIdentifier": "", - "noMatchingVersion": "", - "noReleasesFound": "", + "invalidIdentifier": "Érvénytelen azonosító", + "noMatchingVersion": "Nem található megfelelő verzió", + "noReleasesFound": "Nem találhatók kiadások", "noProviderSelected": "", - "noProviderResponse": "", + "noProviderResponse": "Nincs válasz a szolgáltatótól", "unexpected": "" } } @@ -3521,44 +3574,44 @@ "option": {}, "card": { "vpn": { - "countConnected": "" + "countConnected": "{count} csatlakoztatva" } }, "error": { - "integrationsDisconnected": "", - "unknownContentOption": "" + "integrationsDisconnected": "Nincs elérhető adat, az összes integráció le van választva", + "unknownContentOption": "Ismeretlen tartalmi beállítás a hálózati vezérlő összefoglaló widgetnél: " }, - "name": "", - "description": "" + "name": "Hálózati vezérlő összefoglaló", + "description": "Megjeleníti egy hálózati vezérlő (pl. UniFi Controller) összefoglalóját" }, "networkControllerStatus": { "card": { "variants": { "wired": { - "name": "" + "name": "Vezetékes" }, "wifi": { - "name": "" + "name": "Wi-Fi" } }, "users": { - "label": "" + "label": "Felhasználók" }, "guests": { - "label": "" + "label": "Vendégek" } }, "option": { "content": { "option": { "wifi": { - "label": "" + "label": "Wi-Fi" }, "wired": { - "label": "" + "label": "Vezetékes" } }, - "label": "" + "label": "Widget tartalma" } }, "error": { @@ -3652,43 +3705,43 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Az Uptime Kuma állapotoldal üzemidő-statisztikáinak figyelése", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Átlagos üzemidő megjelenítése", + "description": "A 24 órás egyesített átlagos üzemidő százalékos megjelenítése" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Üzemidő gyűrű megjelenítése", + "description": "Folyamatjelző gyűrű megjelenítése az átlagos üzemidő érték mellett" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Összes monitor megjelenítése", + "description": "A konfigurált monitorok teljes számának megjelenítése" }, "showUpCount": { - "label": "", - "description": "" + "label": "Működő monitorok számának megjelenítése", + "description": "A jelenleg működő monitorok számának megjelenítése" }, "showDownCount": { - "label": "", - "description": "" + "label": "Nem működő monitorok számának megjelenítése", + "description": "A jelenleg nem működő monitorok számának megjelenítése" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Szünetelő monitorok számának megjelenítése", + "description": "A jelenleg szünetelő monitorok számának megjelenítése" } }, - "averageUptime": "", + "averageUptime": "Átlagos üzemidő (24h)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Összes monitor", + "upCount": "Működik", + "downCount": "Nem működik", + "pausedCount": "Szünetel" }, "error": { - "internalServerError": "" + "internalServerError": "Az üzemidőadatok letöltése nem sikerült" } }, "traefik": { @@ -3726,70 +3779,56 @@ } }, "audioStats": { - "name": "", - "description": "", + "name": "Audió statisztikák", + "description": "Könyvtári és lejátszási statisztikák Navidrome-ból vagy Audiobookshelf-ből", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Előadók megjelenítése", + "description": "Az előadók teljes számának megjelenítése a zenekönyvtárban (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Albumok megjelenítése", + "description": "Az albumok teljes számának megjelenítése a zenekönyvtárban (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "Zeneszámok megjelenítése", + "description": "A zeneszámok teljes számának megjelenítése a zenekönyvtárban (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Könyvtárak számának megjelenítése", + "description": "A példányodon lévő könyvtárak számának megjelenítése (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Hangoskönyvek megjelenítése", + "description": "Az összes hangoskönyv teljes számának megjelenítése az összes könyvtárban (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Podcastek megjelenítése", + "description": "Az összes podcast teljes számának megjelenítése az összes könyvtárban (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "Hallgatási idő megjelenítése", + "description": "A teljes hallgatási idő megjelenítése (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "Aktív munkamenetek megjelenítése", + "description": "A jelenleg aktív lejátszási munkamenetek számának megjelenítése (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "Kompakt mód", + "description": "Sűrűbb elrendezés kisebb csempékkel, ideális kis widgetméret esetén" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "Előadók", + "albums": "Albumok", + "songs": "Zeneszámok", + "libraryCount": "Könyvtárak", + "audiobooks": "Hangoskönyvek", + "podcasts": "Podcastek", + "listeningTime": "Hallgatási idő", + "activeSessions": "Aktív munkamenetek", "error": { - "internalServerError": "" + "internalServerError": "Az audió statisztikai adatok letöltése nem sikerült" } }, "systemResources": { @@ -3863,130 +3902,138 @@ } }, "customApi": { - "name": "", - "description": "", + "name": "Egyéni API", + "description": "Adatok megjelenítése bármely külső API-ból egyedi konfigurációval.", "option": { "definitionId": { - "label": "" + "label": "Definíció azonosító" }, "refreshInterval": { - "label": "", - "description": "" + "label": "Frissítési időköz", + "description": "Milyen gyakran kérje le újra az adatokat az API-tól (másodpercben)" } }, - "noDefinition": "", - "definitionNotFound": "", - "noDisplayOutput": "", - "executeConfirm": "", - "executing": "", - "executeSuccess": "", - "executeFailed": "" + "noDefinition": "Nincs definíció kiválasztva", + "definitionNotFound": "A widget definíció nem található. Lehet, hogy törölték.", + "noDisplayOutput": "Nincs megjelenítési kimenet", + "executeConfirm": "Biztosan végre szeretnéd hajtani ezt a műveletet?", + "executing": "Végrehajtás...", + "executeSuccess": "A művelet sikeresen végrehajtva", + "executeFailed": "A művelet sikertelen. Ellenőrizd a widget konfigurációját." }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel Rendszerek (Táblázat)", + "description": "Az összes Beszel által figyelt rendszer táblázatos nézete rendezhető oszlopokkal és állapotjelzőkkel", "option": { "statusFilter": { - "label": "" + "label": "Állapotszűrő" }, "sortBy": { - "label": "" + "label": "Rendezés alapja" }, "sortDirection": { - "label": "" + "label": "Rendezés iránya" }, "showCpu": { - "label": "" + "label": "CPU mutatása" }, "showMemory": { - "label": "" + "label": "Memória mutatása" }, "showDisk": { - "label": "" + "label": "Lemez mutatása" }, "showGpu": { - "label": "" + "label": "GPU mutatása" }, "showLoadAvg": { - "label": "" + "label": "Terhelési átlag mutatása" }, "showNet": { - "label": "" + "label": "Hálózat mutatása" }, "showTemp": { - "label": "" + "label": "Hőmérséklet mutatása" }, "showBattery": { - "label": "" + "label": "Akkumulátor mutatása" }, "showServices": { - "label": "" + "label": "Szolgáltatások mutatása" }, "showUptime": { - "label": "" + "label": "Üzemidő mutatása" }, "showAgent": { + "label": "Agent verzió mutatása" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Nincsenek rendszerek", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Rendszer", + "cpu": "CPU", + "memory": "Memória", + "disk": "Lemez", + "gpu": "GPU", + "loadAvg": "Terhelési átlag", + "net": "Hálózat", + "temp": "Hőm", + "battery": "Akk", + "services": "Szolgáltatások", + "uptime": "Üzemidő", + "agent": "Agent" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel Rendszerek (Rács)", + "description": "A Beszel által figyelt rendszerek kártyás rács nézete valós idejű metrikákkal", "option": { "statusFilter": { - "label": "" + "label": "Állapotszűrő" }, "showCpu": { - "label": "" + "label": "CPU mutatása" }, "showMemory": { - "label": "" + "label": "Memória mutatása" }, "showDisk": { - "label": "" + "label": "Lemez mutatása" }, "showGpu": { - "label": "" + "label": "GPU mutatása" }, "showLoadAvg": { - "label": "" + "label": "Terhelési átlag mutatása" }, "showNet": { - "label": "" + "label": "Hálózat mutatása" }, "showTemp": { - "label": "" + "label": "Hőmérséklet mutatása" }, "showBattery": { - "label": "" + "label": "Akkumulátor mutatása" }, "showServices": { - "label": "" + "label": "Szolgáltatások mutatása" }, "showUptime": { - "label": "" + "label": "Üzemidő mutatása" }, "showAgent": { - "label": "" + "label": "Agent verzió mutatása" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Memória", + "disk": "Lemez", + "gpu": "GPU", + "loadAvg": "Terhelési átlag", + "net": "Hálózat", + "temp": "Hőm", + "battery": "Akk", + "services": "Szolgáltatások", + "uptime": "Üzemidő", + "agent": "Agent" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel Riasztások", + "description": "Beszel riasztási konfigurációk és előzmények megtekintése", "option": { "showHistory": { - "label": "" + "label": "Riasztási előzmények mutatása" }, "maxHistoryItems": { - "label": "" + "label": "Max. előzmény elem" } }, - "empty": "", + "empty": "Nincsenek riasztások konfigurálva", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Előzmények", + "resolved": "Megoldva", "status": { - "triggered": "", - "ok": "" + "triggered": "Kiváltva", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel Rendszer Statisztikák", + "description": "Idősoros diagramok CPU, memória, lemez, hálózat és Docker konténer metrikákhoz", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Időszak" }, "showCpu": { - "label": "" + "label": "CPU diagram mutatása" }, "showMemory": { - "label": "" + "label": "Memória diagram mutatása" }, "showDisk": { - "label": "" + "label": "Lemez diagram mutatása" }, "showDiskIO": { - "label": "" + "label": "Lemez I/O diagram mutatása" }, "showNetwork": { - "label": "" + "label": "Hálózat diagram mutatása" }, "showDockerCpu": { - "label": "" + "label": "Docker CPU diagram mutatása" }, "showDockerMemory": { - "label": "" + "label": "Docker memória diagram mutatása" }, "showDockerNetwork": { - "label": "" + "label": "Docker hálózat diagram mutatása" } }, - "selectSystem": "", + "selectSystem": "Rendszer kiválasztása", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU Használat", + "subtitle": "Átlagos rendszerszintű CPU kihasználtság", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Memória Használat", + "subtitle": "Pontos kihasználtság a rögzített időpontban", + "series": "Használt", + "cache": "Gyorsítótár/Pufferek" }, "disk": { - "title": "", + "title": "Lemez Használat", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Lemez I/O", + "subtitle": "A gyökér fájlrendszer átviteli sebessége", + "read": "Olvasás", + "write": "Írás" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Sávszélesség", + "subtitle": "A nyilvános interfészek hálózati forgalma", + "sent": "Küldött", + "recv": "Fogadott" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU Használat", + "subtitle": "A konténerek átlagos CPU kihasználtsága" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker Memória Használat", + "subtitle": "A Docker konténerek memóriahasználata" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker Hálózati I/O", + "subtitle": "A Docker konténerek hálózati forgalma" } } } @@ -4196,11 +4243,11 @@ } }, "name": { - "label": "" + "label": "Tábla neve" }, "screenSize": { - "label": "", - "description": "", + "label": "Képernyő méret", + "description": "Az 1.0 előtti verziókban három különböző mód létezett, így minden képernyőmérethez be tudtad állítani az oszlopok számát.", "option": { "sm": "Kicsi", "md": "Közepes", @@ -4208,16 +4255,16 @@ } }, "sidebarBehavior": { - "label": "", - "description": "", + "label": "Oldalsáv viselkedés", + "description": "Az 1.0 verzióban az oldalsávok el lettek távolítva, kiválaszthatod, mi történjen a bennük lévő elemekkel.", "option": { "lastSection": { - "label": "", - "description": "" + "label": "Utolsó szakasz", + "description": "Az oldalsáv az utolsó szakasz alatt jelenik meg" }, "removeItems": { - "label": "", - "description": "" + "label": "Elemek eltávolítása", + "description": "Az oldalsávban lévő elemek el lesznek távolítva" } } } @@ -4225,8 +4272,8 @@ }, "quickCreateApp": { "modal": { - "title": "", - "createAndUse": "" + "title": "Alkalmazás létrehozása rögtön", + "createAndUse": "Létrehozás és használat" } } }, @@ -4247,41 +4294,41 @@ "label": "Háttérkép URL", "placeholder": "Kezdje el gépelni a helyi képek kereséséhez", "group": { - "your": "", - "other": "" + "your": "Saját képek", + "other": "Egyéb képek" } }, "backgroundImageAttachment": { "label": "Háttérkép csatolása", "option": { "fixed": { - "label": "", - "description": "" + "label": "Rögzített", + "description": "A háttér ugyanabban a pozícióban marad." }, "scroll": { - "label": "", - "description": "" + "label": "Görgethető", + "description": "A háttér együtt görög az egérrel." } } }, "backgroundImageRepeat": { - "label": "", + "label": "Háttérkép ismétlése", "option": { "repeat": { - "label": "", - "description": "" + "label": "Ismétlés", + "description": "A kép annyiszor ismétlődik, ahányszor szükséges a teljes háttérkép-festési terület lefedéséhez." }, "no-repeat": { - "label": "", - "description": "" + "label": "Nincs ismétlés", + "description": "A kép nem ismétlődik, és lehet, hogy nem tölti ki a teljes teret." }, "repeat-x": { - "label": "", - "description": "" + "label": "Ismétlés X", + "description": "Ugyanaz, mint az 'Ismétlés', de csak vízszintes tengelyen." }, "repeat-y": { - "label": "", - "description": "" + "label": "Ismétlés Y", + "description": "Ugyanaz, mint az 'Ismétlés', de csak függőleges tengelyen." } } }, @@ -4289,12 +4336,12 @@ "label": "Háttér kép mérete", "option": { "cover": { - "label": "", - "description": "" + "label": "Kitöltés", + "description": "A képet a lehető legkisebbre méretezi, hogy a felesleges terület levágásával lefedje a teljes ablakot." }, "contain": { - "label": "", - "description": "" + "label": "Illesztés", + "description": "A képet a lehető legnagyobbra méretezi a tárolóján belül anélkül, hogy levágásra vagy nyújtásra lenne szükség." } } }, @@ -4305,38 +4352,38 @@ "label": "Másodlagos szín" }, "opacity": { - "label": "" + "label": "Átlátszóság" }, "iconColor": { - "label": "" + "label": "Ikon színe" }, "clearColor": { - "label": "" + "label": "Szín törlése" }, "customCss": { - "label": "", + "label": "Egyéni css ehhez a táblához", "description": "Továbbá, testreszabhatja műszerfalát CSS segítségével, csak tapasztalt felhasználóknak ajánlott", "customClassesAlert": { - "title": "", - "description": "" + "title": "Egyéni osztályok", + "description": "Az egyes elemek haladó beállításaiban egyéni osztályokat adhatsz hozzá a tábla elemeihez, és használhatod őket a fenti egyéni CSS-ben." } }, "disableStatus": { - "label": "", - "description": "" + "label": "Alkalmazás állapotának letiltása", + "description": "Letiltja az állapotellenőrzést a táblán lévő összes alkalmazásnál" }, "columnCount": { - "label": "" + "label": "Oszlopok száma" }, "itemRadius": { - "label": "", - "description": "", + "label": "Elem lekerekítése", + "description": "Megváltoztatja a tábla elemeinek kerekítését", "option": { - "xs": "", - "sm": "", - "md": "", - "lg": "", - "xl": "" + "xs": "Nagyon kicsi", + "sm": "Kicsi", + "md": "Közepes", + "lg": "Nagy", + "xl": "Nagyon nagy" } }, "name": { @@ -4344,25 +4391,25 @@ }, "isPublic": { "label": "Nyilvános", - "description": "" + "description": "A nyilvános táblák mindenki számára elérhetők, akár regisztráció nélkül is." } }, "content": { - "metaTitle": "" + "metaTitle": "{boardName} tábla" }, "setting": { - "title": "", + "title": "{boardName} tábla beállításai", "section": { "general": { "title": "Általános", - "unrecognizedLink": "" + "unrecognizedLink": "A megadott link nem ismerhető fel, és nem fog előnézetet mutatni, de lehet, hogy működni fog." }, "layout": { "title": "Elrendezés", "responsive": { - "title": "", + "title": "Reszponzív elrendezések", "action": { - "add": "" + "add": "Elrendezés hozzáadása" } } }, @@ -4370,26 +4417,26 @@ "title": "Háttér" }, "appearance": { - "title": "" + "title": "Megjelenés" }, "customCss": { - "title": "" + "title": "Egyéni css" }, "behavior": { - "title": "" + "title": "Viselkedés" }, "access": { - "title": "", + "title": "Hozzáférés-vezérlés", "permission": { "item": { "view": { "label": "Tábla megtekintése" }, "modify": { - "label": "" + "label": "Tábla módosítása" }, "full": { - "label": "" + "label": "Teljes hozzáférés" } } } @@ -4398,27 +4445,27 @@ "title": "Veszélyzóna", "action": { "rename": { - "label": "", - "description": "", - "button": "", + "label": "Tábla átnevezése", + "description": "A név megváltoztatása megszakítja a táblára mutató összes hivatkozást.", + "button": "Név módosítása", "modal": { - "title": "" + "title": "Tábla átnevezése" } }, "visibility": { - "label": "", + "label": "Tábla láthatóságának módosítása", "description": { - "public": "", - "private": "" + "public": "Ez a tábla jelenleg nyilvános.", + "private": "Ez a tábla jelenleg privát." }, "button": { - "public": "", - "private": "" + "public": "Tedd priváttá", + "private": "Tedd nyilvánossá" }, "confirm": { "public": { - "title": "", - "description": "" + "title": "Tábla priváttá tétele", + "description": "Biztosan priváttá akarod tenni ezt a táblát? Ezzel elrejted a nyilvánosság elől. A vendégfelhasználók linkjei nem fognak működni." }, "private": { "title": "Nyilvános tábla készítése", @@ -4428,11 +4475,11 @@ }, "delete": { "label": "Törölje ezt a táblát", - "description": "", + "description": "Ha egyszer törölsz egy táblát, nincs visszaút. Légy biztos benne.", "button": "Törölje ezt a táblát", "confirm": { "title": "Tábla törlése", - "description": "" + "description": "Biztosan törölni szeretnéd ezt a táblát? Ez véglegesen törli a táblát és annak összes tartalmát." } } } @@ -4442,32 +4489,32 @@ "error": { "noBoard": { "title": "Üdvözöljük a Homarrban", - "description": "", + "description": "Egy letisztult, modern műszerfal, amely az összes alkalmazásodat és szolgáltatásodat kéznél tartja.", "link": "Az első tábla létrehozása", - "notice": "" + "notice": "Az oldal eltüntetéséhez hozz létre egy táblát, és állítsd be kezdőlapként" }, "notFound": { - "title": "", - "description": "", + "title": "A tábla nem található", + "description": "A megadott tábla vagy nem található, vagy nincs hozzáférése hozzá.", "link": "Az összes tábla megtekintése", - "notice": "" + "notice": "Ellenőrizze a hivatkozást, vagy lépjen kapcsolatba egy adminisztrátorral, ha úgy gondolja, hogy elérhetőnek kellene lennie" }, "homeBoard": { - "title": "", + "title": "Nincs kezdőlap tábla", "admin": { - "description": "", - "link": "", - "notice": "" + "description": "Még nem állítottál be kezdőlap táblát a szerver számára.", + "link": "Szerver-szintű kezdőlap tábla beállítása", + "notice": "Az oldal eltüntetéséhez minden felhasználó számára állíts be egy kezdőlap táblát a szervernek" }, "user": { - "description": "", - "link": "", - "notice": "" + "description": "Még nem állítottál be kezdőlap táblát.", + "link": "Saját kezdőlap beállítása", + "notice": "Az oldal eltüntetéséhez add meg a kezdőlap táblát a beállításaidban" }, "anonymous": { - "description": "", - "link": "", - "notice": "" + "description": "A szerver adminisztrátora még nem állított be kezdőlap táblát.", + "link": "Nyilvános táblák megtekintése", + "notice": "Az oldal eltüntetéséhez kérd meg a szerver adminisztrátorát, hogy állítson be egy kezdőlap táblát a szervernek" } } } @@ -4475,27 +4522,27 @@ "layout": { "field": { "name": { - "label": "" + "label": "Név" }, "columnCount": { - "label": "" + "label": "Oszlopok száma" }, "breakpoint": { - "label": "", - "description": "" + "label": "Töréspont", + "description": "Az elrendezés minden olyan képernyőn használva lesz, amely nagyobb ennél a töréspontnál, a következő nagyobb töréspontig." } } }, "management": { - "metaTitle": "", + "metaTitle": "Kezelés", "title": { - "morning": "", - "afternoon": "", - "evening": "" + "morning": "Jó reggelt, {username}", + "afternoon": "Jó napot, {username}", + "evening": "Jó estét, {username}" }, "notFound": { - "title": "", - "text": "" + "title": "Nem található", + "text": "A kért erőforrás nem található" }, "error": { "title": "", @@ -4522,13 +4569,13 @@ "tools": { "label": "Eszközök", "items": { - "docker": "", - "kubernetes": "", - "logs": "", - "api": "", - "certificates": "", - "tasks": "", - "backup": "" + "docker": "Docker", + "kubernetes": "Kubernetes", + "logs": "Naplók", + "api": "API & MCP", + "certificates": "Tanúsítványok", + "tasks": "Feladatok", + "backup": "Biztonsági mentés" } }, "settings": "Beállítások", @@ -4536,9 +4583,9 @@ "label": "Segítség", "items": { "documentation": "Dokumentáció", - "submitIssue": "", + "submitIssue": "Hiba bejelentése", "discord": "Discord-szerverünk", - "sourceCode": "" + "sourceCode": "Forráskód" } }, "about": "Névjegy" @@ -4553,63 +4600,63 @@ "integration": "Integrációk", "app": "Alkalmazások", "group": "Csoportok", - "searchEngine": "", - "media": "" + "searchEngine": "Keresőmotorok", + "media": "Médiák" }, "statisticLabel": { "boards": "Táblák", - "resources": "", - "authentication": "", - "authorization": "" + "resources": "Erőforrások", + "authentication": "Hitelesítés", + "authorization": "Jogosultságkezelés" }, "heroBanner": { - "title": "", - "subtitle": "" + "title": "Üdvözöljük újra a", + "subtitle": "{app} Tábla" } }, "board": { "title": "Az Ön táblái", "action": { "new": { - "label": "" + "label": "Új tábla" }, "open": { - "label": "" + "label": "Tábla megnyitása" }, "settings": { "label": "Beállítások" }, "setHomeBoard": { - "label": "", + "label": "Beállítás kezdőlapként", "badge": { "label": "Nyitólap", - "tooltip": "" + "tooltip": "Ez a tábla jelenik meg kezdőlapként" } }, "setMobileHomeBoard": { - "label": "", + "label": "Beállítás mobil táblaként", "badge": { - "label": "", - "tooltip": "" + "label": "Mobil", + "tooltip": "Ez a tábla jelenik meg mobil táblaként" } }, "duplicate": { - "label": "" + "label": "Tábla duplikálása" }, "delete": { "label": "Végleges törlés", "confirm": { "title": "Tábla törlése", - "description": "" + "description": "Biztosan törölni szeretnéd a {name} táblát?" } } }, "visibility": { - "public": "", - "private": "" + "public": "Ez a tábla nyilvános", + "private": "Ez a tábla privát" }, "noResults": { - "title": "" + "title": "Még nincsenek táblák" }, "modal": { "createBoard": { @@ -4622,41 +4669,41 @@ } }, "media": { - "includeFromAllUsers": "" + "includeFromAllUsers": "Minden felhasználó médiájának szerepeltetése" }, "user": { - "back": "", - "fieldsDisabledExternalProvider": "", + "back": "Vissza a felhasználókhoz", + "fieldsDisabledExternalProvider": "Bizonyos mezők le vannak tiltva, mert külső hitelesítési szolgáltató kezeli őket.", "setting": { "general": { "title": "Általános", "item": { - "language": "", + "language": "Nyelv és régió", "board": { - "title": "", + "title": "Kezdőlap tábla", "type": { - "general": "", - "mobile": "" + "general": "Általános", + "mobile": "Mobil" } }, - "search": "", + "search": "Keresés", "firstDayOfWeek": "A hét első napja", "accessibility": "Kisegítő lehetőségek", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Betanító túrák", + "description": "A betanító túrák visszaállítása, hogy újra megjelenjenek a következő látogatáskor a kezelőfelületen vagy az irányítópulton.", + "reset": "Betanító túrák visszaállítása", "resetSuccess": { - "title": "", - "message": "" + "title": "Túrák visszaállítva", + "message": "A betanító túrák újra megjelennek a következő látogatáskor" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Befejezett", + "notStarted": "Nem kezdődött el" }, "name": { - "management": "", - "dashboard": "" + "management": "Kezelés", + "dashboard": "Irányítópult" } } } @@ -4673,25 +4720,25 @@ "title": "Felhasználók" }, "edit": { - "metaTitle": "" + "metaTitle": "{username} felhasználó szerkesztése" }, "create": { "metaTitle": "Felhasználó létrehozása", - "title": "", + "title": "Új felhasználó létrehozása", "step": { "personalInformation": { - "label": "" + "label": "Személyes adatok" }, "security": { "label": "Biztonság" }, "groups": { "label": "Csoportok", - "title": "", - "description": "" + "title": "Válaszd ki az összes csoportot, amelyeknek a felhasználó tagja legyen", + "description": "A {everyoneGroup} csoport minden felhasználóhoz hozzá van rendelve, és nem távolítható el." }, "review": { - "label": "" + "label": "Áttekintés" }, "completed": { "title": "Létrejött a felhasználó" @@ -4701,22 +4748,22 @@ } }, "action": { - "createAnother": "", - "back": "" + "createAnother": "További felhasználó létrehozása", + "back": "Vissza a felhasználói listához" } }, "invite": { "title": "Felhasználói meghívók kezelése", "action": { "new": { - "title": "", + "title": "Új meghívó", "description": "A lejárat után a meghívó már nem lesz érvényes, és a meghívó címzettje nem tud fiókot létrehozni." }, "copy": { - "title": "", - "description": "", + "title": "Meghívó másolása", + "description": "A meghívód létrejött. A modális ablak bezárása után ezt a linket többé nem tudod lemásolni. Ha már nem szeretnéd meghívni az illetőt, bármikor törölheted ezt a meghívót.", "link": "Meghívó link", - "button": "" + "button": "Másolás és bezárás" }, "delete": { "title": "Meghívó törlése", @@ -4734,36 +4781,36 @@ "label": "Lejárati idő" }, "token": { - "label": "" + "label": "Token" } } } }, "group": { - "back": "", + "back": "Vissza a csoportokhoz", "setting": { "general": { "title": "Általános", "owner": "Tulajdonos", - "ownerOfGroup": "", - "ownerOfGroupDeleted": "" + "ownerOfGroup": "A csoport tulajdonosa", + "ownerOfGroupDeleted": "A csoport tulajdonosa törölve lett. Jelenleg nincs tulajdonosa." }, "setting": { - "title": "", - "alert": "", + "title": "Beállítások", + "alert": "A csoportbeállítások prioritását a csoportok listában lévő sorrendje határozza meg. A felül lévő beállítások felülírják az alul lévő beállításokat.", "board": { - "title": "" + "title": "Táblák" } }, "members": { "title": "Tagok", - "search": "", - "notFound": "" + "search": "Tag keresése", + "notFound": "Nincsenek tagok" }, "permissions": { - "title": "", + "title": "Engedélyek", "form": { - "unsavedChanges": "" + "unsavedChanges": "Nem mentett módosításaid vannak!" } } } @@ -4772,191 +4819,191 @@ "title": "Beállítások", "notification": { "success": { - "message": "" + "message": "A beállítások mentése sikeres" }, "error": { - "message": "" + "message": "Nem sikerült menteni a beállításokat" } }, "section": { "analytics": { - "title": "", + "title": "Analitika", "general": { "title": "", "text": "A Homarr az Umami nevű nyílt forráskódú szoftver segítségével névtelen elemzési adatokat küld. Ha ez az opció engedélyezve van, a következő adatokat gyűjtjük: a Homarr verziója, az adatbázis típusa (MySQL/PostgreSQL/SQLite), a Docker/Kubernetes állapota, az engedélyezett hitelesítési módszerek, valamint az egyes funkciók száma. Minden adat névtelen és összesített formában kerül rögzítésre – személyes adatokat, URL-eket, neveket vagy bármilyen azonosítható adatot soha nem gyűjtünk. Ez segít nyílt forráskódú fejlesztői csapatunknak a használati szokások megértésében és a fejlesztési feladatok fontossági sorrendjének meghatározásában." } }, "crawlingAndIndexing": { - "title": "", - "warning": "", + "title": "Böngészés és indexelés", + "warning": "Bármely itteni beállítás engedélyezése vagy letiltása súlyosan befolyásolja, hogyan indexelik és böngészik a keresőmotorok az oldaladat. Minden beállítás csak kérés, és a kereső dönti el, alkalmazza-e. A módosítások érvénybe lépése napokig vagy hetekig is eltarthat. Néhány beállítás keresőmotor-specifikus lehet.", "noIndex": { - "title": "", - "text": "" + "title": "Nincs indexelés", + "text": "Ne indexelje a webhelyet a keresőmotorok, és ne jelenjen meg a találatok között" }, "noFollow": { - "title": "", - "text": "" + "title": "Nincs követés", + "text": "Ne kövesse a linkeket indexelés közben. Ha letiltod, a keresők megpróbálnak minden Homarr-linket követni." }, "noTranslate": { - "title": "", - "text": "" + "title": "Nincs fordítás", + "text": "Ha az oldal nyelve valószínűleg nem az, amit a felhasználó olvasni szeretne, a Google fordítási linket jeleníthet meg a találatokban" }, "noSiteLinksSearchBox": { - "title": "", - "text": "" + "title": "Nincs oldallink-keresőmező", + "text": "A Google egy keresőmezőt épít a feltérképezett linkekkel és más közvetlen hivatkozásokkal. Ennek engedélyezése arra kéri a Google-t, hogy tiltsa le ezt a mezőt." } }, "board": { "title": "Táblák", "homeBoard": { - "label": "", - "mobileLabel": "", - "description": "" + "label": "Globális kezdőlap tábla", + "mobileLabel": "Globális mobil tábla", + "description": "Csak nyilvános táblák választhatók" }, "status": { - "title": "", + "title": "Alkalmazás állapota", "enableStatusByDefault": { - "label": "", - "description": "" + "label": "Állapot engedélyezése alapértelmezetten", + "description": "Alkalmazás elem hozzáadásakor az állapot alapértelmezetten engedélyezve lesz" }, "forceDisableStatus": { - "label": "", - "description": "" + "label": "Állapot kényszerített letiltása", + "description": "Az alkalmazások állapota le lesz tiltva minden felhasználó számára, és nem engedélyezhető" } } }, "user": { - "title": "", + "title": "Felhasználók", "enableGravatar": { - "label": "", - "description": "" + "label": "Gravatar engedélyezése", + "description": "Visszaesik a Libravatar/Gravatar felhasználói avatarokra, ha nincs egyéni avatar beállítva és az e-mail konfigurálva van" } }, "search": { - "title": "", + "title": "Keresés", "defaultSearchEngine": { - "label": "", - "description": "" + "label": "Globális alapértelmezett keresőmotor", + "description": "Itt nem választhatók ki integrációs keresőmotorok" } }, "appearance": { "title": "Megjelenés", "defaultColorScheme": { - "label": "", + "label": "Alapértelmezett színséma", "options": { - "auto": "", + "auto": "Automatikus", "light": "Világos", "dark": "Sötét" } } }, "culture": { - "title": "", + "title": "Kultúra", "defaultLocale": { - "label": "" + "label": "Alapértelmezett nyelv" } } } }, "tool": { "tasks": { - "title": "", + "title": "Feladatok", "status": { - "idle": "", + "idle": "Tétlen", "running": "Fut", "error": "Hiba", - "disabled": "" + "disabled": "Letiltva" }, "job": { "iconsUpdater": { - "label": "" + "label": "Ikonfrissítő" }, "analytics": { - "label": "" + "label": "Analitika" }, "ping": { - "label": "" + "label": "Pingek" } }, "interval": { - "seconds": "", - "minutes": "", - "hours": "", - "midnight": "", - "weeklyMonday": "", + "seconds": "Minden {interval, plural, =1 {másodperc} one {másodperc} other {# másodperc}}", + "minutes": "Minden {interval, plural, =1 {perc} one {perc} other {# perc}}", + "hours": "Minden {interval, plural, =1 {óra} one {óra} other {# óra}}", + "midnight": "Minden nap éjfélkor", + "weeklyMonday": "Minden héten hétfőn", "update": { "success": { - "message": "" + "message": "Az időköz sikeresen frissítve" }, "error": { - "message": "" + "message": "Nem sikerült az időköz frissítése" } } }, "settings": { - "title": "" + "title": "Feladatbeállítások a {jobName} számára" }, "field": { "name": { - "label": "" + "label": "Név" }, "interval": { - "label": "" + "label": "Ütemezési időköz" }, "lastExecution": { - "label": "" + "label": "Utolsó végrehajtás" }, "actions": { - "label": "" + "label": "Műveletek" } }, "table": { - "search": "" + "search": "Keresés {count} feladat között..." }, "action": { "refresh": { - "label": "" + "label": "Frissítés" } }, "refresh": { "success": { - "message": "" + "message": "Feladatok sikeresen frissítve" }, "error": { - "message": "" + "message": "Nem sikerült a feladatok frissítése" } }, "trigger": { "success": { - "message": "" + "message": "Feladat sikeresen elindítva" }, "error": { - "message": "" + "message": "Nem sikerült a feladat indítása" } }, "enable": { "success": { - "message": "" + "message": "Feladat sikeresen engedélyezve" } }, "disable": { "success": { - "message": "" + "message": "Feladat sikeresen letiltva" } }, "toggle": { "error": { - "message": "" + "message": "Nem sikerült a feladat állapotának átváltása" } } }, "api": { - "title": "", + "title": "API", "modal": { "createApiToken": { - "title": "", - "description": "", - "button": "" + "title": "API token létrehozva", + "description": "Az API token létrejött. Vigyázz, ez a token titkosítva van az adatbázisban, és soha többé nem kerül átadásra. Ha elveszíted, nem tudod visszaszerezni ezt a tokent.", + "button": "Másolás és bezárás" } }, "tab": { @@ -4964,270 +5011,270 @@ "label": "Dokumentáció" }, "apiKey": { - "label": "", - "title": "", + "label": "Hitelesítés", + "title": "API kulcsok", "button": { - "createApiToken": "" + "createApiToken": "API token létrehozása" }, "modal": { "delete": { - "title": "", - "text": "" + "title": "API token törlése", + "text": "Ez véglegesen törli az API tokent. Az ezt a tokent használó API kliensek többé nem tudnak hitelesíteni és API kéréseket végrehajtani. Ez a művelet nem vonható vissza." } }, "table": { "header": { "id": "Azonosító", - "createdBy": "", - "actions": "" + "createdBy": "Létrehozta", + "actions": "Műveletek" } } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "AI / MCP", + "title": "AI integráció", + "subtitle": "Model Context Protocol (MCP) szerver", + "description": "Csatlakoztass mesterséges intelligencia asszisztenseket a Homarr példányához, és irányítsd az egész homelabot természetes nyelven. Keress és igényelj médiát Overseerr-on, kezeld a Docker konténereket, kapcsold ki/be a Pi-hole-t, ellenőrizd a szerver állapotát, irányítsd a Home Assistant eszközöket, és még sok mást – mindezt az AI asszisztensedből.", + "noApiKey": "API-kulcsra van szükséged az MCP szerverrel való hitelesítéshez.", + "createApiKeyButton": "API-kulcs létrehozása", "endpoint": { - "title": "" + "title": "MCP végpont" }, "authentication": { - "title": "", - "intro": "", + "title": "Hitelesítés", + "intro": "Hitelesítheted az MCP szerverrel API-kulccsal vagy OAuth-val. Mindkét módszer ugyanazt a hozzáférési szintet biztosítja.", "apiKey": { - "title": "", - "description": "" + "title": "API-kulcs (manuális)", + "description": "Add át az ApiKey fejlécet a teljes API-kulccsal az MCP kliens konfigurációjában." }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (böngészős bejelentkezés)", + "description": "Az OAuth-t támogató kliensek (mint a Claude Code, opencode vagy Cursor) böngészőablak megnyitásával hitelesíthetnek. Futtasd az auth parancsot a kliensben, jelentkezz be a Homarrba a böngészőben, és már csatlakoztál is – egy API-kulcs automatikusan létrejön.", + "hint": "Az OAuth tokenek normál API-kulcsként jelennek meg a Hitelesítés fülön. Bármikor visszavonhatod őket." }, - "permissions": "" + "permissions": "Az API-kulcs határozza meg az AI számára elérhető jogosultságokat – ugyanazzal a hozzáférési szinttel működik, mint a kulcs tulajdonosa." }, "clientConfig": { - "title": "", + "title": "Kliens konfiguráció", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "Ajánlott", + "title": "Folyamatos HTTP", + "worksWith": "Működik: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", + "addToConfig": "Add hozzá az MCP kliens konfigurációs fájljához:", + "cursor": "{name}: {file} a projektedben vagy a globális beállításokban", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} vagy használd a {command} parancsot", + "vsCodeCopilot": "{name}: {file} a munkaterület beállításaiban", + "replaceHint": "Cseréld ki a helykitöltőt a létrehozáskor kapott API-kulcsra." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (régebbi kliensek mcp-remote bridge-en keresztül)", + "description": "Csak stdio átvitelt támogató kliensekhez. Helyileg telepített {dependency} (Node.js) szükséges:" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "Kapcsolat tesztelése", + "description": "Futtasd ezt a terminálban az elérhetőség és az API-kulcs működésének ellenőrzéséhez:", + "hint": "Sikeres válasz esetén az MCP szerver képességeit kapod vissza. Ha hibát látsz, ellenőrizd a JSON választ a tippekért." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "Elérhető eszközök", + "description": "{count} eszköz érhető el. Nyiss meg egy kategóriát az egyes eszközök és leírásaik megtekintéséhez.", + "columnType": "Típus", + "columnName": "Eszköz", + "columnDescription": "Leírás" }, "troubleshooting": { - "title": "", + "title": "Hibaelhárítás", "missingHeader": { - "title": "", - "description": "" + "title": "„Hiányzó ApiKey fejléc”", + "description": "A kliens nem küldi a {header} fejlécet. Ellenőrizd, hogy a {section} szakasz helyes-e az MCP konfigurációban. Néhány kliens újraindítást igényel a konfigurációs módosítások után." }, "invalidFormat": { - "title": "", - "description": "" + "title": "„Érvénytelen ApiKey formátum”", + "description": "Ellenőrizd, hogy a teljes API-kulcsot másoltad-e ki, ne csak egy részét." }, "invalidKey": { - "title": "", - "description": "" + "title": "„Érvénytelen API-kulcs”", + "description": "A kulcsazonosító nem található, vagy a token hibás. Az API-kulcsok csak a létrehozáskor tekinthetők meg egyszer. Ha elvesztetted, töröld a régit, és hozz létre egy újat." }, "connectionRefused": { - "title": "", - "description": "" + "title": "A kapcsolat elutasítva / időtúllépés", + "description": "Ellenőrizd, hogy az URL elérhető-e az AI kliensből. Ha a Homarr fordított proxy vagy Docker mögött fut, használd a külső URL-t (ne a {localhost}-ot). Ellenőrizd a portot (alapértelmezett: 7575 Docker esetén)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "Eszközök nem jelennek meg", + "description": "Néhány eszköz specifikus integrációk beállítását igényli (pl. Docker, Overseerr). Az eszközlista a Homarr példányon elérhető függvényeitől függ." } }, - "copy": "", + "copy": "Másolás", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "Egy kattintásos telepítés", + "subtitle": "OAuth-ot használ – első használatkor hitelesítés a böngészőben", + "vsCode": "Telepítés VS Code-ban", + "cursor": "Telepítés Cursor-ban", + "copyUrl": "MCP URL másolása", + "copied": "Másolva!", + "copyHint": "ChatGPT-hez, Claude Code-hoz vagy bármely MCP klienshez", + "manualConfig": "Kézi konfiguráció" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Teljes adatbázis biztonsági mentés", + "metaTitle": "Biztonsági mentés és visszaállítás", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Adatbázis exportálása", + "description": "Töltsd le a teljes SQLite adatbázis biztonsági mentését, beleértve az összes beállítást, felhasználót, táblát és titkosított integrációs titkot. A biztonsági mentés ZIP fájlba van csomagolva a titkosítási kulccsal és metaadatokkal együtt.", + "button": "Biztonsági mentés letöltése", + "error": "Az exportálás sikertelen", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Érzékeny adatok exportálása", + "warningTitle": "Ez az export tartalmazza a teljes adatbázist.", + "warningBody": "A biztonsági mentés tartalmazza az összes felhasználót, integrációs titkot (titkosítva), API kulcsokat, tábla konfigurációkat és alkalmazásadatokat. Az exportált fájlt biztonságosan tárold, és ne oszd meg.", + "typePrompt": "Írd be, hogy \"{phrase}\" a folytatáshoz", + "submit": "Adatbázis exportálása", + "cancel": "Mégse" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Adatbázis visszaállítása", + "description": "Tölts fel egy korábban exportált biztonsági mentés ZIP-et az adatbázis visszaállításához. Ez a teljes adatbázist lecseréli. Ha a biztonsági mentés más titkosítási kulccsal készült, a titkok automatikusan újratitkosításra kerülnek.", + "warning": "A biztonsági mentés visszaállítása teljesen lecseréli a jelenlegi adatbázist és újraindítja az alkalmazást. Ez a művelet nem vonható vissza.", "dropzone": { - "title": "", - "description": "" + "title": "Húzd ide a biztonsági mentés ZIP fájlt, vagy kattints a böngészéshez", + "description": "Csak Homarr SQLite biztonsági mentésből származó .zip fájlok fogadhatók el" }, - "changeFile": "", - "button": "", + "changeFile": "Fájl módosítása", + "button": "Adatbázis visszaállítása", "success": { - "title": "", - "message": "" + "title": "Visszaállítás kész", + "message": "Az adatbázis sikeresen visszaállítva. Az alkalmazás újraindul..." }, - "error": "" + "error": "Az importálás sikertelen" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Biztonsági mentés tartalma", + "exported": "Exportálva: {date}", + "loading": "Biztonsági mentés fájl elemzése...", + "errorTitle": "Előnézeti hiba", + "entity": "Entitás", + "count": "Darab", + "boards": "Táblák", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Táblák", + "user": "Felhasználók", + "app": "Alkalmazások", + "integration": "Integrációk", + "item": "Widgetek", + "media": "Média", + "search_engine": "Keresőmotorok" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Nem sikerült elemezni a biztonsági mentés fájlt", + "invalidMissingMetadata": "Érvénytelen biztonsági mentés: hiányzó metadata.json", + "invalidMissingDb": "Érvénytelen biztonsági mentés: hiányzó db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Húzd ide a biztonsági mentés ZIP fájlt", + "description": "Homarr SQLite biztonsági mentésből származó .zip fájlok fogadhatók el (max 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Biztonsági mentés elemzése...", + "changeFile": "Fájl módosítása", + "continueToRestore": "Folytatás a visszaállításhoz", + "tryAgain": "Próbáld újra", + "analysisError": "Elemzési hiba", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Biztonsági mentés tartalma", + "exported": "Exportálva: {date}", + "entity": "Entitás", + "count": "Darab", + "boards": "Táblák", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Táblák", + "user": "Felhasználók", + "app": "Alkalmazások", + "integration": "Integrációk", + "item": "Widgetek", + "media": "Média", + "search_engine": "Keresőmotorok" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migráció alkalmazva", + "migrationsAppliedPlural": "{count} migráció alkalmazva", + "migrationsOlderVersion": "Ez a biztonsági mentés egy régebbi Homarr verzióból származik. {count} séma migráció lett alkalmazva a naprakész állapothoz.", + "migrationsOlderVersionPlural": "Ez a biztonsági mentés egy régebbi Homarr verzióból származik. {count} séma migráció lett alkalmazva a naprakész állapothoz.", + "migrationsUpToDate": "Az adatbázis séma naprakész ({count} migráció alkalmazva)", + "upToDate": "Naprakész", + "migrationsPending": "{count} függőben" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Migrációk alkalmazása ({current}/{total})", + "migrationLabel": "{index}. migráció" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Megsemmisítő művelet", + "warningTitle": "Ez véglegesen lecseréli a teljes adatbázist.", + "warningBody": "Az összes jelenlegi tábla, felhasználó, alkalmazás, integráció, beállítás és munkamenet elvész. Ez a művelet nem vonható vissza. Az alkalmazás újraindul a visszaállítás után.", + "typePrompt": "Írd be, hogy \"{phrase}\" a folytatáshoz", + "cancel": "Mégse", + "submit": "Adatbázis visszaállítása" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Adatbázis visszaállítása...", + "extracting": "Biztonsági mentés archívum kibontása", + "migrating": "Adatbázis migrációk alkalmazása", + "encrypting": "Integrációs titkok újratitkosítása", + "swapping": "Adatbázis fájl cseréje", + "restarting": "Szerver újraindítása" }, "complete": { - "title": "", - "message": "" + "title": "Visszaállítás kész", + "message": "Az adatbázis sikeresen visszaállítva. A szerver újraindul – kérlek frissítsd az oldalt néhány másodperc múlva." }, "failed": { - "title": "" + "title": "Visszaállítás sikertelen" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Érvénytelen biztonsági mentés: hiányzó metadata.json", + "invalidMissingDb": "Érvénytelen biztonsági mentés: hiányzó db.sqlite", + "analyzeError": "Nem sikerült elemezni a biztonsági mentést" } } }, "about": { - "version": "", - "text": "", + "version": "{version} verzió", + "text": "A Homarr egy közösség által vezérelt nyílt forráskódú projekt, amelyet önkéntesek tartanak fenn. Nekik köszönhetően a Homarr 2021 óta folyamatosan fejlődik. Csapatunk teljesen távolról, sok különböző országból, szabadidejében, díjazás nélkül dolgozik a Homarr-on.", "accordion": { "contributors": { - "title": "", - "subtitle": "" + "title": "Közreműködők", + "subtitle": "{count} ember karbantartja a kódot és a Homarr-t" }, "translators": { - "title": "", - "subtitle": "" + "title": "Fordítók", + "subtitle": "{count} ember járul hozzá fordításokkal számos nyelven" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "Támogatók", + "subtitle": "{count} anyagilag támogatja a projektet" }, "libraries": { - "title": "", - "subtitle": "" + "title": "Könyvtárak", + "subtitle": "{count} könyvtár van használatban a Homarr kódjában" }, "hotkeys": { - "title": "", - "subtitle": "", + "title": "Gyorsbillentyűk", + "subtitle": "Billentyűparancsok a munkafolyamat javításához", "field": { - "shortcut": "", - "action": "" + "shortcut": "Gyorsbillentyű", + "action": "Művelet" }, "action": { - "toggleBoardEdit": "", - "toggleColorScheme": "", - "saveNotebook": "", - "openSpotlight": "" + "toggleBoardEdit": "Tábla szerkesztő mód be/ki kapcsolása", + "toggleColorScheme": "Világos/sötét mód váltása", + "saveNotebook": "Jegyzetfüzet mentése (csak a jegyzetfüzet widgetben)", + "openSpotlight": "Keresés megnyitása" }, - "note": "" + "note": "Tipp: A Mod a Ctrl billentyűt és a macOS-en a ⌘ billentyűt jelenti" } } } @@ -5236,13 +5283,13 @@ "docker": { "title": "Tartály", "table": { - "updated": "", + "updated": "Frissítve: {when}", "refresh": { "lastUpdated": "" }, - "search": "", - "selected": "", - "footer": "", + "search": "Keresés {count} konténer között", + "selected": "{selectCount} / {totalCount} konténer kiválasztva", + "footer": "Összesen {count} konténer", "totalCpu": "", "totalMemory": "" }, @@ -5257,9 +5304,9 @@ "running": "Fut", "paused": "Szünet", "restarting": "Újraindítás", - "exited": "", + "exited": "Leállt", "removing": "Eltávolítás", - "dead": "" + "dead": "Holt" } }, "stats": { @@ -5277,27 +5324,27 @@ "label": "Portok" }, "host": { - "label": "" + "label": "Hoszt" } }, "action": { - "title": "", + "title": "Műveletek", "logs": { - "label": "", + "label": "Naplók megtekintése", "page": { - "title": "" + "title": "{name} naplók" } }, "start": { "label": "Indítás", "notification": { "success": { - "title": "", - "message": "" + "title": "Konténerek elindítva", + "message": "A konténerek sikeresen el lettek indítva" }, "error": { - "title": "", - "message": "" + "title": "Konténerek nem indultak el", + "message": "A konténereket nem sikerült elindítani" } } }, @@ -5305,12 +5352,12 @@ "label": "Megállítás", "notification": { "success": { - "title": "", - "message": "" + "title": "Konténerek leállítva", + "message": "A konténerek sikeresen le lettek állítva" }, "error": { - "title": "", - "message": "" + "title": "Konténerek nem álltak le", + "message": "A konténereket nem sikerült leállítani" } } }, @@ -5318,100 +5365,101 @@ "label": "Újraindítás", "notification": { "success": { - "title": "", - "message": "" + "title": "Konténerek újraindítva", + "message": "A konténerek sikeresen újra lettek indítva" }, "error": { - "title": "", - "message": "" + "title": "Konténerek nem indultak újra", + "message": "A konténereket nem sikerült újraindítani" } } }, "remove": { "label": "Eltávolítás", + "confirm": "", "notification": { "success": { - "title": "", - "message": "" + "title": "Konténerek eltávolítva", + "message": "A konténerek sikeresen el lettek távolítva" }, "error": { - "title": "", - "message": "" + "title": "Konténerek nem lettek eltávolítva", + "message": "A konténereket nem sikerült eltávolítani" } } }, "refresh": { - "label": "", + "label": "Frissítés", "notification": { "success": { - "title": "", - "message": "" + "title": "Konténerek frissítve", + "message": "Most a legfrissebb adatokat látod" }, "error": { - "title": "", - "message": "" + "title": "Konténerek nem frissültek", + "message": "Hiba történt a konténerek frissítése közben" } } }, "addToHomarr": { - "label": "", + "label": "Hozzáadás a Homarr-hoz", "notification": { "success": { - "title": "", - "message": "" + "title": "Hozzáadva a Homarr-hoz", + "message": "A kiválasztott alkalmazások hozzá lettek adva a Homarr-hoz" }, "error": { - "title": "", - "message": "" + "title": "Nem sikerült hozzáadni a Homarr-hoz", + "message": "A kiválasztott alkalmazásokat nem sikerült hozzáadni a Homarr-hoz" } }, "modal": { - "title": "" + "title": "Docker konténer(ek) hozzáadása a Homarr-hoz" } } }, "error": { - "internalServerError": "", + "internalServerError": "Nem sikerült lekérni a Docker konténereket", "noColumns": "" } }, "kubernetes": { "cluster": { - "title": "", - "label": "", - "providers": "", - "version": "", - "architecture": "", + "title": "Klaszter műszerfal", + "label": "Klaszter", + "providers": "Szolgáltatók", + "version": "Verzió", + "architecture": "Architektúra", "capacity": { - "title": "", + "title": "Kapacitás", "resource": { - "reserved": "", - "used": "" + "reserved": "Fenntartva", + "used": "Használt" } }, "resources": { - "title": "", - "nodes": "", - "namespaces": "", - "ingresses": "", - "services": "", - "pods": "", - "configmaps": "", - "secrets": "", - "volumes": "" + "title": "Erőforrások", + "nodes": "Csomópontok", + "namespaces": "Névterek", + "ingresses": "Ingress-ek", + "services": "Szolgáltatások", + "pods": "Podok", + "configmaps": "ConfigMap-ek", + "secrets": "Titkok", + "volumes": "Kötetek" } }, "nodes": { - "label": "", + "label": "Csomópontok", "field": { "name": { - "label": "" + "label": "Név" }, "state": { - "label": "", + "label": "Állapot", "option": { - "ready": "", - "NotReady": "" + "ready": "Kész", + "NotReady": "Nem kész" } }, "cpu": { @@ -5421,212 +5469,212 @@ "label": "RAM" }, "pods": { - "label": "" + "label": "Podok" }, "operatingSystem": { - "label": "" + "label": "Operációs rendszer" }, "architecture": { - "label": "" + "label": "Architektúra" }, "kubernetesVersion": { - "label": "" + "label": "Kubernetes verzió" }, "creationTimestamp": { - "label": "" + "label": "Létrehozva" } }, "table": { - "search": "" + "search": "Keresés {count} csomópont között" } }, "namespaces": { - "label": "", + "label": "Névterek", "field": { "name": { - "label": "" + "label": "Név" }, "state": { - "label": "", + "label": "Állapot", "option": { - "active": "", - "terminating": "" + "active": "Aktív", + "terminating": "Megszüntetés alatt" } }, "creationTimestamp": { - "label": "" + "label": "Létrehozva" } }, "table": { - "search": "" + "search": "{count} névtér keresése" } }, "ingresses": { - "label": "", + "label": "Bejövő forgalmak", "field": { "name": { - "label": "" + "label": "Név" }, "namespace": { - "label": "" + "label": "Névtér" }, "className": { - "label": "" + "label": "Osztálynév" }, "rulesAndPaths": { - "label": "" + "label": "Szabályok és útvonalak" }, "creationTimestamp": { - "label": "" + "label": "Létrehozva" } }, "table": { - "search": "" + "search": "{count} bejövő forgalom keresése" } }, "services": { - "label": "", + "label": "Szolgáltatások", "field": { "name": { - "label": "" + "label": "Név" }, "namespace": { - "label": "" + "label": "Névtér" }, "type": { - "label": "" + "label": "Típus" }, "ports": { - "label": "" + "label": "Portok" }, "targetPorts": { - "label": "" + "label": "Célportok" }, "clusterIP": { - "label": "" + "label": "Klaszter IP" }, "creationTimestamp": { - "label": "" + "label": "Létrehozva" } }, "table": { - "search": "" + "search": "{count} szolgáltatás keresése" } }, "pods": { - "label": "", + "label": "Podok", "field": { "name": { - "label": "" + "label": "Név" }, "namespace": { - "label": "" + "label": "Névtér" }, "image": { - "label": "" + "label": "Kép" }, "applicationType": { - "label": "" + "label": "Alkalmazás típusa" }, "status": { - "label": "" + "label": "Állapot" }, "creationTimestamp": { - "label": "" + "label": "Létrehozva" } }, "table": { - "search": "" + "search": "{count} pod keresése" } }, "secrets": { - "label": "", + "label": "Titkok", "field": { "name": { - "label": "" + "label": "Név" }, "namespace": { - "label": "" + "label": "névtér" }, "type": { - "label": "" + "label": "típus" }, "creationTimestamp": { - "label": "" + "label": "Létrehozva" } }, "table": { - "search": "" + "search": "{count} titok keresése" } }, "configmaps": { - "label": "", + "label": "ConfigMap-ek", "field": { "name": { - "label": "" + "label": "Név" }, "namespace": { - "label": "" + "label": "névtér" }, "creationTimestamp": { - "label": "" + "label": "Létrehozva" } }, "table": { - "search": "" + "search": "Keresés {count} ConfigMap között" } }, "volumes": { - "label": "", + "label": "Kötetek", "field": { "name": { - "label": "" + "label": "Név" }, "namespace": { - "label": "" + "label": "Névtér" }, "accessModes": { - "label": "" + "label": "Elérési módok" }, "storage": { - "label": "" + "label": "Tárhely" }, "storageClassName": { - "label": "" + "label": "Tárolóosztály neve" }, "volumeMode": { - "label": "" + "label": "Kötet mód" }, "volumeName": { - "label": "" + "label": "Kötet neve" }, "status": { - "label": "" + "label": "Állapot" }, "creationTimestamp": { - "label": "" + "label": "Létrehozva" } }, "table": { - "search": "" + "search": "Keresés {count} kötet között" } }, "error": { - "internalServerError": "" + "internalServerError": "A Kubernetes adatok lekérése nem sikerült" } }, "permission": { - "title": "", + "title": "Engedélyek", "userSelect": { - "title": "" + "title": "Felhasználói engedély hozzáadása" }, "groupSelect": { - "title": "" + "title": "Csoportengedély hozzáadása" }, "tab": { "user": "Felhasználók", "group": "Csoportok", - "inherited": "" + "inherited": "Örökölt csoportok" }, "field": { "user": { @@ -5636,12 +5684,12 @@ "label": "Csoport" }, "permission": { - "label": "" + "label": "Engedély" } }, "action": { - "saveUser": "", - "saveGroup": "" + "saveUser": "Felhasználói engedély mentése", + "saveGroup": "Csoportengedély mentése" } }, "navigationStructure": { @@ -5656,13 +5704,13 @@ "label": "Szerkesztés" }, "new": { - "label": "" + "label": "Új" } }, "search-engines": { "label": "Keresőmotorok", "new": { - "label": "" + "label": "Új" }, "edit": { "label": "Szerkesztés" @@ -5674,7 +5722,7 @@ "apps": { "label": "Alkalmazások", "new": { - "label": "" + "label": "Új" }, "edit": { "label": "Szerkesztés" @@ -5710,48 +5758,48 @@ "tools": { "label": "Eszközök", "tasks": { - "label": "" + "label": "Feladatok" }, "docker": { - "label": "", + "label": "Docker", "logs": { - "label": "" + "label": "Naplók" } }, "kubernetes": { - "label": "", + "label": "Kubernetes", "nodes": { - "label": "" + "label": "Node-ok" }, "namespaces": { - "label": "" + "label": "Névterek" }, "ingresses": { - "label": "" + "label": "Ingresszek" }, "services": { - "label": "" + "label": "Szolgáltatások" }, "pods": { - "label": "" + "label": "podok" }, "configmaps": { - "label": "" + "label": "ConfigMap-ek" }, "secrets": { - "label": "" + "label": "Titkok" }, "volumes": { - "label": "" + "label": "Kötetek" } }, "logs": { - "label": "" + "label": "Naplók" }, "certificates": { - "label": "", + "label": "Tanúsítványok", "hostnames": { - "label": "" + "label": "Gazdagépnevek" } } }, @@ -5764,28 +5812,28 @@ } }, "search": { - "placeholder": "", - "nothingFound": "", + "placeholder": "Keresés bármire", + "nothingFound": "Nincs találat", "error": { - "fetch": "" + "fetch": "Hiba történt az adatok lekérése közben" }, "mode": { "appIntegrationBoard": { - "help": "", + "help": "Keresés alkalmazásokra, integrációkra vagy táblákra", "group": { "app": { "title": "Alkalmazások", "children": { "action": { "open": { - "label": "" + "label": "Alkalmazás url megnyitása" }, "edit": { "label": "Alkalmazás szerkesztése" } }, "detail": { - "title": "" + "title": "Válassz egy műveletet az alkalmazáshoz" } } }, @@ -5794,20 +5842,20 @@ "children": { "action": { "open": { - "label": "" + "label": "Tábla megnyitása" }, "homeBoard": { - "label": "" + "label": "Beállítás kezdőlapként" }, "mobileBoard": { - "label": "" + "label": "Beállítás mobil táblaként" }, "settings": { - "label": "" + "label": "Beállítások megnyitása" } }, "detail": { - "title": "" + "title": "Válassz egy műveletet a táblához" } } }, @@ -5817,154 +5865,154 @@ } }, "command": { - "help": "", + "help": "Parancs mód aktiválása", "group": { "localCommand": { - "title": "" + "title": "Helyi parancsok" }, "globalCommand": { - "title": "", + "title": "Globális parancsok", "option": { "colorScheme": { - "auto": "", - "light": "", - "dark": "" + "auto": "Megjelenés módjának váltása", + "light": "Váltás világos módba", + "dark": "Váltás sötét módba" }, "language": { - "label": "", + "label": "Nyelv módosítása", "children": { "detail": { - "title": "" + "title": "Válaszd ki a kívánt nyelvet" } } }, "newBoard": { - "label": "" + "label": "Új tábla létrehozása" }, "importBoard": { - "label": "" + "label": "Tábla importálása" }, "newApp": { - "label": "" + "label": "Új alkalmazás létrehozása" }, "newIntegration": { - "label": "", + "label": "Új integráció létrehozása", "children": { "detail": { - "title": "" + "title": "Válaszd ki a létrehozni kívánt integráció típusát" } } }, "newUser": { - "label": "" + "label": "Új felhasználó létrehozása" }, "newInvite": { - "label": "" + "label": "Új meghívó létrehozása" }, "newGroup": { - "label": "" + "label": "Új csoport létrehozása" } } }, "preferences": { - "title": "", + "title": "Preferenciák", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Válassz egy preferenciát a módosításhoz", + "backHint": "Nyomj Backspace-t vagy használd a vissza gombot a visszalépéshez", + "backAction": "Vissza" } }, "notification": { "error": { - "message": "" + "message": "Nem sikerült frissíteni a preferenciát" } }, "option": { "preferences": { - "label": "" + "label": "Preferenciák megnyitása" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Engedélyezve", + "disabled": "Letiltva" }, "board": { - "none": "", - "unavailable": "" + "none": "Egyik sem", + "unavailable": "Jelenleg kiválasztott (nem elérhető)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Egyik sem", + "unavailable": "Jelenleg kiválasztott (nem elérhető)" }, "colorScheme": { - "label": "", + "label": "Színséma", "children": { "detail": { - "title": "" + "title": "Válassz színsémát" } } }, "locale": { - "label": "", + "label": "Nyelv", "children": { "detail": { - "title": "" + "title": "Válaszd ki a kívánt nyelvet" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Alapértelmezett keresőmotor", "children": { "detail": { - "title": "" + "title": "Válaszd ki az alapértelmezett keresőmotort" } } }, "openSearchInNewTab": { - "label": "", + "label": "Keresési eredmények megnyitása új lapon", "children": { "detail": { - "title": "" + "title": "Keresési eredmények megnyitása új lapon" } } }, "ddgBangs": { - "label": "", + "label": "DuckDuckGo bang parancsok engedélyezése", "children": { "detail": { - "title": "" + "title": "DuckDuckGo bang parancsok engedélyezése" } } }, "firstDayOfWeek": { - "label": "", + "label": "A hét első napja", "children": { "detail": { - "title": "" + "title": "Válaszd ki a hét első napját" } } }, "homeBoardId": { - "label": "", + "label": "Kezdőlap", "children": { "detail": { - "title": "" + "title": "Válaszd ki a kezdőlapod" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobil kezdőlap", "children": { "detail": { - "title": "" + "title": "Válaszd ki a mobil kezdőlapod" } } }, "pingIconsEnabled": { - "label": "", + "label": "Ikonok használata a pingekhez", "children": { "detail": { - "title": "" + "title": "Ikonok használata a pingekhez" } } }, @@ -5977,84 +6025,84 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Teljes preferenciák oldal megnyitása" } } } } }, "media": { - "help": "", - "requestMovie": "", - "requestSeries": "", - "openIn": "", + "help": "Keress filmeket vagy sorozatokat a kéréshez", + "requestMovie": "Film kérése", + "requestSeries": "Sorozat kérése", + "openIn": "Megnyitás itt: {kind}", "group": { - "title": "" + "title": "Filmek és sorozatok" }, "action": { "search": { - "label": "", - "description": "", + "label": "Keress filmeket vagy sorozatokat", + "description": "Kezdj el gépelni a médiakérési integrációid kereséséhez", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Adj hozzá egy Overseerr, Jellyseerr vagy Seerr integrációt a médiakeresés engedélyezéséhez.", + "scoped": "Ennek a widgetnek nincs elérhető médiakérési integrációja." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Elérhető", + "partiallyAvailable": "Részleges", + "processing": "Feldolgozás alatt", + "requested": "Kérve", + "pending": "Kérve" } }, "external": { - "help": "", + "help": "Külső keresőmotor használata", "group": { "searchEngine": { "title": "Keresőmotorok", - "tipDdgBangs": "", + "tipDdgBangs": "Tipp: Itt bármilyen DuckDuckGo bang parancsot is használhatsz, pl. !valami", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "\"{query}\" keresése {label} segítségével", + "pressEnterToOpen": "Nyomd meg az Enter-t a megnyitáshoz", + "engineSelected": "{label} kiválasztva (!{bang})", + "typeQueryToContinue": "Írd be a keresési kifejezést a folytatáshoz", + "emptyBangHint": "Írj egy bang parancsot, pl. !yt, majd nyomj Szóközt a kiválasztáshoz" }, "children": { "action": { "search": { - "label": "" + "label": "Keresés {name} segítségével" } }, "detail": { - "title": "" + "title": "Válassz egy műveletet a keresőmotorhoz" }, "searchResults": { - "title": "" + "title": "Válassz egy találatot a műveletekhez" } }, "option": { "google": { - "name": "", - "description": "" + "name": "Google", + "description": "Keresés a weben a Google-lal" }, "bing": { - "name": "", - "description": "" + "name": "Bing", + "description": "Keresés a weben a Binggel" }, "duckduckgo": { - "name": "", - "description": "" + "name": "DuckDuckGo", + "description": "Keresés a weben a DuckDuckGo-val" }, "torrent": { "name": "Torrentek", - "description": "" + "description": "Torrentek keresése a torrentdownloads.pro oldalon" }, "youTube": { - "name": "", - "description": "" + "name": "YouTube", + "description": "Videók keresése a YouTube-on" } } } @@ -6063,7 +6111,7 @@ "help": { "group": { "mode": { - "title": "" + "title": "Módok" }, "help": { "title": "Segítség", @@ -6072,7 +6120,7 @@ "label": "Dokumentáció" }, "submitIssue": { - "label": "" + "label": "Hiba bejelentése" }, "discord": { "label": "Discord-szerverünk" @@ -6084,75 +6132,75 @@ "home": { "group": { "search": { - "title": "", + "title": "Keresés", "option": { "other": { - "label": "" + "label": "Keresés másik keresőmotorral" }, "no-default": { - "label": "", - "description": "" + "label": "Nincs alapértelmezett keresőmotor", + "description": "Állíts be egy alapértelmezett keresőmotort a beállításokban" }, "search": { - "label": "" + "label": "Keresés \"{query}\" kifejezésre a {name} segítségével" }, "from-integration": { - "description": "" + "description": "Kezdj el gépelni a kereséshez" } } }, "local": { - "title": "" + "title": "Helyi találatok" } } }, "page": { - "help": "", + "help": "Keresés oldalakra", "group": { "page": { - "title": "", + "title": "Oldalak", "option": { "manageHome": { - "label": "" + "label": "Kezdőlap kezelése" }, "manageBoard": { - "label": "" + "label": "Táblák kezelése" }, "manageApp": { - "label": "" + "label": "Alkalmazások kezelése" }, "manageIntegration": { - "label": "" + "label": "Integrációk kezelése" }, "manageSearchEngine": { - "label": "" + "label": "Keresőmotorok kezelése" }, "manageMedia": { - "label": "" + "label": "Médiák kezelése" }, "manageUser": { "label": "Felhasználók kezelése" }, "manageInvite": { - "label": "" + "label": "Meghívók kezelése" }, "manageGroup": { - "label": "" + "label": "Csoportok kezelése" }, "manageDocker": { - "label": "" + "label": "Docker kezelése" }, "manageApi": { - "label": "" + "label": "Swagger API" }, "manageLog": { "label": "Naplók megtekintése" }, "manageTask": { - "label": "" + "label": "Feladatok kezelése" }, "manageSettings": { - "label": "" + "label": "Globális beállítások" }, "about": { "label": "Névjegy" @@ -6168,18 +6216,18 @@ } }, "userGroup": { - "help": "", + "help": "Keresés felhasználókra vagy csoportokra", "group": { "user": { "title": "Felhasználók", "children": { "action": { "detail": { - "label": "" + "label": "Felhasználó adatainak megjelenítése" } }, "detail": { - "title": "" + "title": "Válassz egy műveletet a felhasználóhoz" } } }, @@ -6188,17 +6236,17 @@ "children": { "action": { "detail": { - "label": "" + "label": "Csoport adatainak megjelenítése" }, "manageMember": { - "label": "" + "label": "Tagok kezelése" }, "managePermission": { - "label": "" + "label": "Engedélyek kezelése" } }, "detail": { - "title": "" + "title": "Válassz egy műveletet a csoporthoz" } } } @@ -6206,16 +6254,16 @@ } }, "engine": { - "search": "", + "search": "Keresőmotor keresése", "field": { "name": { "label": "Név" }, "short": { - "label": "" + "label": "Rövid" }, "urlTemplate": { - "label": "" + "label": "URL keresősablon" }, "description": { "label": "Leírás" @@ -6225,53 +6273,53 @@ "list": { "title": "Keresőmotorok", "noResults": { - "title": "", - "action": "" + "title": "Még nincsenek keresőmotorok", + "action": "Hozd létre az első keresőmotorodat" }, - "interactive": "" + "interactive": "Interaktív, integrációt használ" }, "create": { - "title": "", + "title": "Új keresőmotor", "notification": { "success": { - "title": "", - "message": "" + "title": "Keresőmotor létrehozva", + "message": "A keresőmotor sikeresen létrejött" }, "error": { - "title": "", - "message": "" + "title": "Keresőmotor nem jött létre", + "message": "A keresőmotort nem sikerült létrehozni" } } }, "edit": { - "title": "", + "title": "Keresőmotor szerkesztése", "notification": { "success": { "title": "A módosítások sikeresen alkalmazva", - "message": "" + "message": "A keresőmotor sikeresen mentve lett" }, "error": { "title": "Nem sikerült alkalmazni a változtatásokat", - "message": "" + "message": "A keresőmotort nem sikerült menteni" } }, - "configControl": "", + "configControl": "Konfiguráció", "searchEngineType": { - "generic": "", - "fromIntegration": "" + "generic": "Általános", + "fromIntegration": "Integrációból" } }, "delete": { - "title": "", - "message": "", + "title": "Keresőmotor törlése", + "message": "Biztosan törli a {name} keresőmotort?", "notification": { "success": { - "title": "", - "message": "" + "title": "Keresőmotor törölve", + "message": "A keresőmotor sikeresen törölve lett" }, "error": { - "title": "", - "message": "" + "title": "Keresőmotor nem lett törölve", + "message": "A keresőmotort nem sikerült törölni" } } } @@ -6279,15 +6327,15 @@ "media": { "request": { "modal": { - "title": "", + "title": "\"{name}\" kérése", "table": { "header": { "season": "Évszak", "episodes": "Epizódok", - "status": "" + "status": "Állapot" }, "status": { - "requested": "" + "requested": "Kérve" } }, "button": { @@ -6334,55 +6382,55 @@ "description": "A tanúsítvány értelmezése sikertelen" }, "expires": "Lejár {when}", - "toHostnames": "" + "toHostnames": "Megbízható gazdagépnevek" }, "hostnames": { - "title": "", - "description": "", + "title": "Megbízható tanúsítvány-gazdagépnevek", + "description": "Egyes tanúsítványok nem engedélyezik azt a domain-t, amelyet a Homarr használ a lekérésükhöz, ezért az összes megbízható gazdagépnév és a tanúsítvány ujjlenyomatuk a korlátozások megkerülésére szolgál.", "noResults": { - "title": "" + "title": "Még nincsenek gazdagépnevek" }, - "toCertificates": "" + "toCertificates": "Tanúsítványok" } }, "action": { "create": { - "label": "", + "label": "Tanúsítvány hozzáadása", "notification": { "success": { - "title": "", - "message": "" + "title": "Tanúsítvány hozzáadva", + "message": "A tanúsítvány sikeresen hozzáadva" }, "error": { - "title": "", - "message": "" + "title": "Nem sikerült hozzáadni a tanúsítványt", + "message": "A tanúsítványt nem sikerült hozzáadni" } } }, "remove": { - "label": "", - "confirm": "", + "label": "Tanúsítvány eltávolítása", + "confirm": "Biztosan el szeretnéd távolítani a tanúsítványt?", "notification": { "success": { - "title": "", - "message": "" + "title": "Tanúsítvány eltávolítva", + "message": "A tanúsítvány sikeresen eltávolítva" }, "error": { - "title": "", - "message": "" + "title": "A tanúsítvány nem lett eltávolítva", + "message": "A tanúsítványt nem sikerült eltávolítani" } } }, "removeHostname": { - "label": "", - "confirm": "", + "label": "Megbízható gazdagépnév eltávolítása", + "confirm": "Biztosan eltávolítja ezt a megbízható gazdagépnevet? Emiatt egyes integrációk leállhatnak.", "notification": { "success": { - "title": "", - "message": "" + "title": "Gazdagépnév eltávolítva", + "message": "A gazdagépnév sikeresen eltávolításra került" }, "error": { - "title": "", + "title": "Gazdagépnév nem lett eltávolítva", "message": "A gazdagépnév nem távolítható el" } } @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Dokumentáció olvasása", + "next": "Következő", + "prev": "Vissza", + "done": "Kész", + "skip": "Túra kihagyása", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Üdv a Homarr-ban!", + "description": "Ez a vezérlőközpontod. Itt kezelheted a táblákat, alkalmazásokat, integrációkat, felhasználókat és szerverbeállításokat. Nézzük meg az egyes szakaszokat." }, "boardsList": { - "title": "", - "description": "" + "title": "A tábláid", + "description": "Itt találod az összes irányítópultod. Minden táblának saját elrendezése, háttere és hozzáférési beállításai vannak. Láthatod, ki hozta létre, és hogy nyilvános vagy privát-e." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Tábla létrehozása", + "description": "Kattints ide új irányítópult létrehozásához vagy egy korábbi Homarr telepítésből való importáláshoz. Minden tábla saját URL-t kap, amit megoszthatsz." }, "appsList": { - "title": "", - "description": "" + "title": "Az alkalmazásaid", + "description": "Ezek az általad hozzáadott alkalmazások – hivatkozások a self-hosted szolgáltatásaidra. Minden alkalmazásnak van ikonja, opcionális állapotellenőrzése és állapotjelzője az irányítópulton." }, "appsCreate": { - "title": "", - "description": "" + "title": "Alkalmazás hozzáadása", + "description": "Regisztrálj itt egy új szolgáltatást. Adj neki nevet, URL-t és ikont – csempeként jelenik meg a tábláidon élő állapotfigyeléssel." }, "integrationsList": { - "title": "", - "description": "" + "title": "Az integrációid", + "description": "Ezek a Homarr-hoz kapcsolt szolgáltatások – Sonarr, Radarr, Plex, Jellyfin és több mint 50 további. Minden hitelesítő adat titkosítva van tárolás során." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Integráció hozzáadása", + "description": "Csatlakoztass itt egy új szolgáltatást. Válaszd ki a típust, add meg az URL-t és az API kulcsot – a Homarr mentés előtt ellenőrzi a kapcsolatot." }, "usersList": { - "title": "", - "description": "" + "title": "A felhasználóid", + "description": "Lásd, kik férnek hozzá. Rendezd a felhasználókat csoportokba, és szabályozd, ki tekintheti meg vagy szerkesztheti az egyes táblákat." }, "usersCreate": { - "title": "", - "description": "" + "title": "Felhasználó létrehozása", + "description": "Adj hozzá itt egy új felhasználói fiókot. Meghívó linkeket is használhatsz az egyszerű beléptetéshez. Ezzel vége a túrának – minden készen áll!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Ez a táblád", + "description": "Egy fogd-és-vidd irányítópult, ahol alkalmazásokat és widgeteket rendezhetsz el. Nyomd meg bármikor a Ctrl+K-t alkalmazások, táblák és műveletek kereséséhez." }, "editMode": { - "title": "", - "description": "" + "title": "Szerkesztési mód", + "description": "Kattints ide a szerkesztési módba lépéshez. Ezután widgeteket, alkalmazásokat és szakaszokat adhatsz hozzá – húzd őket az áthelyezéshez, méretezd át a sarokfogantyúval. Kattints újra a mentéshez." }, "settings": { - "title": "", - "description": "" + "title": "Tábla beállítások", + "description": "Itt módosíthatod a tábla nevét, oszlopait, hátterét, színeit és azt, hogy ki férhet hozzá. Minden tábla lehet nyilvános vagy privát." }, "switcher": { - "title": "", - "description": "" + "title": "Táblák váltása", + "description": "Ugorj a táblák között. Hozz létre külön irányítópultokat különböző célokra – média, hálózat, felhasználónként vagy bármi másra." }, "userMenu": { - "title": "", - "description": "" + "title": "A profilod", + "description": "Itt válthatsz színsémát, nyelvet, kezdőlapot és preferenciákat. Innen a kezelőfelületre is ugorhatsz." } } } diff --git a/packages/translation/src/lang/it.json b/packages/translation/src/lang/it.json index 8072fb48c..d1fe23155 100644 --- a/packages/translation/src/lang/it.json +++ b/packages/translation/src/lang/it.json @@ -1907,14 +1907,14 @@ "description": "Usa ISO 8601 per formattare la data (questo sovrascriverà altre opzioni)" }, "showWeather": { - "label": "", - "description": "" + "label": "Mostra meteo", + "description": "Mostra una piccola icona animata del meteo e la temperatura nell'angolo della scheda" }, "weatherLocation": { - "label": "" + "label": "Località meteo" }, "isWeatherFormatFahrenheit": { - "label": "" + "label": "Usa Fahrenheit" } } }, @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Inverti ordinamento" + }, + "columnOrder": { + "label": "Ordine delle colonne" + }, + "columnWidths": { + "label": "Larghezza delle colonne" } }, "error": { - "internalServerError": "Recupero statistiche container non riuscito" + "internalServerError": "Recupero statistiche container non riuscito", + "layoutSaveTitle": "Layout della tabella non salvato", + "layoutSaveMessage": "Impossibile salvare il layout della tabella Docker. Prova a spostare o ridimensionare nuovamente la colonna." + }, + "empty": { + "noContainers": "Nessun container trovato" } }, "coolify": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Mostra solo attualmente in riproduzione", "description": "La disabilitazione non funzionerà per Plex" + }, + "showBitrate": { + "label": "Mostra bitrate", + "description": "Mostra il bitrate di riproduzione corrente accanto alla posizione" + }, + "showLocation": { + "label": "Mostra posizione", + "description": "Mostra se lo stream si trova sulla tua LAN o WAN" } }, + "footer": { + "streams": "{count, plural, one {# stream attivo} other {# stream attivi}}", + "totalBitrate": "Totale: {bitrate}" + }, "items": { "currentlyPlaying": "Attualmente in riproduzione", "user": "Utente", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "Stato", "directPlay": "Riproduzione diretta", + "directStream": "Streaming diretto", + "transcodeVideo": "Transcodifica video", + "transcodeAudio": "Transcodifica audio", "transcoding": "Transcodifica", "paused": "In pausa", "remaining": "{minutes} min rimanenti", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Limite elementi per integrazione", "description": "Ciò limiterà il numero di elementi mostrati per integrazione, non globalmente" + }, + "columnOrder": { + "label": "Ordine delle colonne" + }, + "columnWidths": { + "label": "Larghezza delle colonne" } }, "errors": { "noColumns": "Seleziona colonne in elementi", - "noCommunications": "Impossibile caricare i dati dall'integrazione" + "noCommunications": "Impossibile caricare i dati dall'integrazione", + "noItems": "Nessun download trovato", + "actionFailed": "Azione non riuscita", + "actionFailedMessage": "L'azione non può essere completata. Per favore riprova." }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Indice corrente all'interno del client" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "ID elemento" }, "integration": { "columnTitle": "Integrazione" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Ora di fine", - "detailsTitle": "Tempo dal/al completamento" + "detailsTitle": "Tempo dal/al completamento", + "eta": "ETA" }, "type": { "columnTitle": "Tipo", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Rapporto globale" + "globalRatio": "Rapporto globale", + "contextMenu": { + "copyName": "Copia nome", + "copyId": "Copia ID", + "clearFilters": "Resetta filtri" + }, + "footer": { + "filter": "Filtro download" + }, + "stats": { + "show": "Mostra statistiche globali", + "hide": "Nascondi statistiche globali", + "overallProgress": "Avanzamento complessivo della coda", + "totalSize": "Dimensione totale della coda", + "clients": "{count, plural, one {# cliente} other {# clienti}}" + }, + "disconnected": "(disconnesso)" }, "mediaReleases": { "name": "Comunicati stampa", @@ -3741,18 +3794,6 @@ "label": "Mostra brani", "description": "Mostra il numero totale di brani nella tua libreria musicale (Navidrome)" }, - "showNowPlaying": { - "label": "Mostra in riproduzione", - "description": "Mostra le tracce attualmente in riproduzione (Navidrome)" - }, - "showNowPlayingList": { - "label": "Mostra elenco in riproduzione", - "description": "Mostra le singole tracce invece del solo conteggio degli stream attivi (Navidrome)" - }, - "maxNowPlayingItems": { - "label": "Numero massimo elementi in riproduzione", - "description": "Numero massimo di tracce da mostrare nell'elenco in riproduzione (Navidrome)" - }, "showLibraryCount": { "label": "Mostra conteggio librerie", "description": "Mostra il numero di librerie sulla tua istanza (Audiobookshelf)" @@ -3786,8 +3827,6 @@ "podcasts": "Podcast", "listeningTime": "Tempo di Ascolto", "activeSessions": "Sessioni Attive", - "nowPlaying": "In Riproduzione", - "nowPlayingCount": "{count, plural, one {# stream} other {# streams}}", "error": { "internalServerError": "Impossibile recuperare i dati delle statistiche audio" } @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "Mostra versione agente" + }, + "columnOrder": { + "label": "Ordine delle colonne" + }, + "columnWidths": { + "label": "Larghezza delle colonne" } }, "noRecords": "Nessun sistema trovato", "error": { - "internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione." + "internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione.", + "layoutSaveTitle": "Impossibile salvare il layout della tabella", + "layoutSaveMessage": "Impossibile salvare l'ordine o la larghezza delle colonne. Riprova." }, "column": { "system": "Sistema", @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Rimuovi", + "confirm": "Fare clic di nuovo per rimuovere definitivamente", "notification": { "success": { "title": "Containers rimossi", diff --git a/packages/translation/src/lang/ja.json b/packages/translation/src/lang/ja.json index 8bda37bcc..4972ad11d 100644 --- a/packages/translation/src/lang/ja.json +++ b/packages/translation/src/lang/ja.json @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "並び替えを反転" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "コンテナステータスの取得に失敗しました" + "internalServerError": "コンテナステータスの取得に失敗しました", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2560,30 +2571,30 @@ } }, "umami": { - "name": "", - "description": "", - "visitors": "", - "active": "", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "name": "Umami 統計情報", + "description": "あなたの Umami 統計情報インスタンスから訪問者統計を表示します", + "visitors": "訪問者数", + "active": "活動中", + "pageviews": "ページビュー", + "visits": "訪問数", + "bounceRate": "直帰率", + "avgDuration": "平均", "option": { "websiteId": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noWebsites": "", - "configureIntegrationFirst": "" + "label": "ウェブサイト", + "description": "あなたの Umami インスタンスで追跡されているウェブサイトを選択してください", + "placeholder": "ウェブサイトを選択", + "loading": "ウェブサイトを読み込み中…", + "noWebsites": "ウェブサイトが見つかりません", + "configureIntegrationFirst": "最初に Umami 統合を接続してください" }, "timeFrame": { - "label": "", - "description": "", + "label": "期間", + "description": "訪問者データを表示する期間", "option": { - "today": "", - "24h": "", - "7d": "", + "today": "今日", + "24h": "過去24時間", + "7d": "過去7日間", "30d": "", "month": "", "lastMonth": "" @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "現在再生中のみ表示", "description": "これを無効にすると plex では動作しません" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "再生中の曲", "user": "ユーザー", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "連携機能ごとに項目を制限", "description": "これは、連携機能ごとに表示されるアイテム数を制限します。グローバルではありません" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "項目内の列を選択", - "noCommunications": "連携機能からデータを読み込めません" + "noCommunications": "連携機能からデータを読み込めません", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "クライアント内の現在のインデックス" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { "columnTitle": "連携機能" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "終了時刻", - "detailsTitle": "完了までの時間" + "detailsTitle": "完了までの時間", + "eta": "" }, "type": { "columnTitle": "種類", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "グローバル比" + "globalRatio": "グローバル比", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "メディアリリース", @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "", @@ -5207,8 +5254,8 @@ "subtitle": "{count} の多くの言語で翻訳を行っている" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "スポンサー", + "subtitle": "{count}人がプロジェクトを財政的に支援しています" }, "libraries": { "title": "ライブラリ", @@ -5329,6 +5376,7 @@ }, "remove": { "label": "削除", + "confirm": "", "notification": { "success": { "title": "コンテナー削除", diff --git a/packages/translation/src/lang/ko.json b/packages/translation/src/lang/ko.json index 200cef781..9941463ff 100644 --- a/packages/translation/src/lang/ko.json +++ b/packages/translation/src/lang/ko.json @@ -756,7 +756,7 @@ "valueSize": "값 크기", "labelPosition": "레이블 위치", "kvLayout": "레이아웃", - "striped": "", + "striped": "줄무늬 행", "compact": "컴팩트 모드", "maxHeight": "최대 높이 (px)", "color": "색상", @@ -769,7 +769,7 @@ "enabled": "활성화됨", "template": { "label": "JSX 템플릿", - "description": "" + "description": "Mantine JSX 템플릿. 데이터 바인딩(예: data.name)을 통해 API 응답 필드에 액세스합니다. 허용된 구성 요소만 사용하십시오. 금지: constructor, __proto__, eval, Function, window, document." } }, "placeholder": { @@ -785,13 +785,13 @@ "columnJsonPath": "$.name", "valuePath": "$.data.used", "maxPath": "$.data.total", - "goodValues": "", + "goodValues": "online, true, up", "color": "파랑" }, "cardStyleOption": { "filled": "채워짐", - "outline": "", - "subtle": "" + "outline": "외곽선", + "subtle": "미묘한" }, "layoutOption": { "list": "리스트", @@ -804,25 +804,25 @@ "xl": "매우 큼" }, "labelPositionOption": { - "above": "", - "below": "" + "above": "위", + "below": "아래" }, "fieldset": { - "general": "", + "general": "일반", "connection": "API 연결", "display": "표시 설정" }, "displayTypeDescription": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "레이블과 단위가 있는 하나의 추출된 값을 표시합니다", + "keyValue": "여러 레이블이 지정된 값을 나란히 표시합니다", + "table": "테이블 형식으로 데이터 행을 표시합니다", + "statGrid": "그리드의 색상이 지정된 통계 카드 — Pi-Hole 또는 Speedtest 위젯과 유사", + "progressBars": "사용량 또는 완료율을 표시하는 진행률 표시줄 — 디스크, 메모리, 할당량용", + "statusIndicator": "온라인/오프라인 또는 상태를 표시하는 색상 상태 점", + "countGrid": "좁은 그리드에 작은 숫자 + 레이블 카운터", + "raw": "디버깅을 위한 예쁘게 출력된 JSON", + "actionButton": "클릭 시 요청을 트리거하는 버튼", + "customJsx": "전체 API 데이터 바인딩과 함께 허용된 Mantine 구성 요소를 사용하는 사용자 정의 JSX 레이아웃" }, "method": { "GET": "GET", @@ -1037,7 +1037,7 @@ "error": { "common": { "cause": { - "title": "" + "title": "자세한 사유" } }, "unknown": { @@ -1069,70 +1069,70 @@ "title": "인증서 오류", "description": { "expired": "인증서가 만료되었습니다.", - "notYetValid": "", - "untrusted": "", - "hostnameMismatch": "" + "notYetValid": "인증서가 아직 유효하지 않습니다.", + "untrusted": "신뢰하는 인증서가 아닙니다.", + "hostnameMismatch": "인증서 호스트네임이 URL과 일치하지 않습니다." }, "alert": { "permission": { "title": "권한 부족", - "message": "" + "message": "인증서를 신뢰 또는 업로드할 권한이 없습니다. 관리자에게 연락해 필요한 루트 인증서를 업로드하십시오." }, "hostnameMismatch": { "title": "호스트 이름이 불일치함", - "message": "" + "message": "인증서의 호스트네임이 연결하는 호스트네임과 일치하지 않습니다. 이는 보안 위험을 나타낼 수 있지만 이 인증서를 신뢰할 수도 있습니다." }, "extract": { - "title": "", - "message": "" + "title": "CA 인증서 추출 실패", + "message": "체인 없는 자체 서명 인증서만 자동으로 불러올 수 있습니다. 자체 서명 인증서를 사용하고 있다면 CA 인증서를 수동 업로드하십시오. 에서 그에 대한 지침을 확인할 수 있습니다." } }, "action": { "retry": { - "label": "" + "label": "생성 재시도" }, "trust": { - "label": "" + "label": "인증서 신뢰" }, "upload": { - "label": "" + "label": "인증서 업로드" } }, "hostnameMismatch": { "confirm": { - "title": "", - "message": "" + "title": "호스트네임 불일치 신뢰", + "message": "호스트네임이 불일치하는 인증서를 신뢰하시겠습니까?" }, "notification": { "success": { "title": "신뢰하는 인증서", - "message": "" + "message": "호스트네임을 신뢰하는 인증서 목록에 추가" }, "error": { - "title": "", - "message": "" + "title": "인증서 신뢰 실패", + "message": "호스트네임 불일치 인증서를 신뢰할 수 없음" } } }, "selfSigned": { "confirm": { - "title": "", - "message": "" + "title": "자체 서명 인증서 신뢰", + "message": "자체 서명 인증서를 신뢰하시겠습니까?" }, "notification": { "success": { - "title": "", - "message": "" + "title": "신뢰하는 인증서", + "message": "인증서를 신뢰하는 인증서 목록에 추가" }, "error": { - "title": "", - "message": "" + "title": "인증서 신뢰 실패", + "message": "인증서 신뢰 목록 추가 실패" } } }, "details": { "title": "세부 사항", - "description": "", + "description": "결정하기 전에 인증서 정보를 확인하십시오.", "content": { "action": "항목 보기", "title": "PEM 인증서" @@ -1246,7 +1246,7 @@ }, "noSecretsRequired": { "segmentTitle": "시크릿 값 없음", - "text": "" + "text": "이 통합에는 시크릿이 필요하지 않습니다" }, "kind": { "username": { @@ -1254,7 +1254,7 @@ "newLabel": "새 사용자 이름" }, "apiKey": { - "label": "", + "label": "API 키", "newLabel": "새 API 키" }, "password": { @@ -1262,99 +1262,99 @@ "newLabel": "새 패스워드" }, "tokenId": { - "label": "", + "label": "토큰 ID", "newLabel": "새 토큰 ID" }, "realm": { - "label": "", - "newLabel": "" + "label": "영역", + "newLabel": "새 영역" }, "personalAccessToken": { - "label": "", + "label": "개인 액세스 토큰", "newLabel": "새 개인 액세스 토큰(PAT)" }, "topic": { - "label": "", + "label": "주제", "newLabel": "새 주제" }, "url": { - "label": "", + "label": "URL", "newLabel": "새 URL" }, "opnsenseApiKey": { - "label": "", + "label": "API 키 (키 값)", "newLabel": "새 API 키(Key)" }, "opnsenseApiSecret": { - "label": "", + "label": "API 키 (시크릿 값)", "newLabel": "새 API 키(Secret)" }, "patchmonApiKey": { - "label": "", - "newLabel": "" + "label": "API 키", + "newLabel": "새 API 키" }, "patchmonApiSecret": { - "label": "", - "newLabel": "" + "label": "API 시크릿", + "newLabel": "새 API 시크릿" }, "githubAppId": { - "label": "", + "label": "APP ID", "newLabel": "새 앱 ID" }, "githubInstallationId": { - "label": "", + "label": "설치 ID", "newLabel": "새 설치 ID" }, "privateKey": { - "label": "", + "label": "개인 키", "newLabel": "새 개인 키" }, "slug": { - "label": "", - "newLabel": "" + "label": "상태 페이지 슬러그", + "newLabel": "새 상태 페이지 슬러그" } } }, "permission": { - "use": "", - "interact": "", - "full": "" + "use": "항목에서 통합 선택", + "interact": "통합과 상호작용", + "full": "전체 통합 접근" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "셀프 호스팅 오디오북 및 팟캐스트 서버" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Subsonic API 호환성을 갖춘 셀프 호스팅 음악 스트리밍 서버" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "공개 상태 페이지가 있는 셀프 호스팅 가동 시간 모니터링", "secret": { "slug": { - "description": "" + "description": "공개 상태 페이지의 슬러그입니다. 설정하지 않으면 기본값은 \"default\"입니다." }, "apiKey": { - "description": "" + "description": "인증된 /metrics 액세스를 위한 선택적 API 키" } } }, "traefik": { - "name": "", - "description": "" + "name": "Traefik", + "description": "클라우드 네이티브 리버스 프록시 및 로드 밸런서" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "스캔된 문서를 보관하고 정리하는 문서 관리 시스템" }, "patchmon": { - "name": "", - "description": "" + "name": "PatchMon", + "description": "Linux 호스트용 패치 관리 및 모니터링" }, "bazarr": { - "name": "", - "description": "" + "name": "Bazarr", + "description": "Sonarr와 Radarr의 보조 애플리케이션으로, 자막을 관리하고 다운로드합니다" } }, "media": { @@ -1391,28 +1391,28 @@ } }, "copy": { - "label": "" + "label": "URL 복사" }, "open": { - "label": "" + "label": "미디어 열기" } }, "noResults": { - "title": "" + "title": "미디어가 업로드되지 않음" } }, "common": { - "success": "", - "beta": "", + "success": "성공", + "beta": "베타", "error": "오류", "action": { "add": "추가", - "apply": "", - "backToOverview": "", - "skip": "", - "change": "", + "apply": "적용", + "backToOverview": "개요로 돌아가기", + "skip": "건너뛰기", + "change": "변경", "create": "만들기", - "createAnother": "", + "createAnother": "만들고 다시 시작", "edit": "수정", "import": "가져오기", "insert": "삽입", @@ -1438,8 +1438,8 @@ "iconPicker": { "label": "아이콘 URL", "header": "이름 또는 주제를 입력해 아이콘을 필터링하세요... Homarr가 {countIcons}에서 아이콘을 검색합니다.", - "headerLoading": "", - "noResults": "", + "headerLoading": "아이콘을 검색하려면 입력…", + "noResults": "\"{search}\"에 일치하는 아이콘이 없습니다.", "error": "아이콘을 불러올 수 없습니다." }, "colorScheme": { @@ -1785,17 +1785,17 @@ } }, "archiveTeamWarrior": { - "name": "", - "description": "", + "name": "ArchiveTeam Warrior", + "description": "ArchiveTeam Warrior 상태, 프로젝트 및 활성 보관 작업을 모니터링합니다.", "option": { "showBroadcastMessage": { - "label": "" + "label": "방송 메시지 표시" } } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "DNS 홀 요약", + "description": "DNS 홀의 요약을 표시합니다", "option": { "layout": { "label": "레이아웃", @@ -1807,28 +1807,28 @@ "label": "세로" }, "grid": { - "label": "" + "label": "그리드" } } }, "usePiHoleColors": { - "label": "" + "label": "Pi-Hole 색상 사용" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "DNS 홀 요약을 가져오지 못했습니다", + "integrationsDisconnected": "데이터 없음, 모든 통합 연결 해제됨" }, "data": { - "adsBlockedToday": "", - "adsBlockedTodayPercentage": "", + "adsBlockedToday": "오늘 차단됨", + "adsBlockedTodayPercentage": "오늘 차단됨", "dnsQueriesToday": "오늘 쿼리", - "domainsBeingBlocked": "" + "domainsBeingBlocked": "차단 목록의 도메인" }, - "domainsTooltip": "" + "domainsTooltip": "여러 통합으로 인해 Homarr가 차단된 도메인의 정확한 수를 계산할 수 없습니다" }, "dnsHoleControls": { - "name": "", + "name": "DNS 홀 제어", "description": "대시보드에서 PiHole 또는 AdGuard를 제어하세요.", "option": { "layout": { @@ -1841,29 +1841,29 @@ "label": "세로" }, "grid": { - "label": "" + "label": "그리드" } } }, "showToggleAllButtons": { - "label": "" + "label": "모두 토글 버튼 표시" } }, "error": { - "internalServerError": "" + "internalServerError": "DNS 홀 제어 실패" }, "controls": { - "enableAll": "", - "disableAll": "", - "setTimer": "", - "set": "", + "enableAll": "모두 활성화", + "disableAll": "모두 비활성화", + "setTimer": "타이머 설정", + "set": "설정", "enabled": "활성화됨", "disabled": "장애인", - "processing": "", - "disconnected": "", - "hours": "", - "minutes": "", - "unlimited": "" + "processing": "처리 중", + "disconnected": "연결 해제됨", + "hours": "시간", + "minutes": "분", + "unlimited": "무제한으로 하려면 비워 두세요" } }, "clock": { @@ -1907,34 +1907,34 @@ "description": "ISO 8601을 사용하여 날짜 형식 지정 (다른 옵션 무시)" }, "showWeather": { - "label": "", - "description": "" + "label": "날씨 표시", + "description": "카드 모서리에 작은 애니메이션 날씨 아이콘과 온도를 표시합니다" }, "weatherLocation": { - "label": "" + "label": "날씨 위치" }, "isWeatherFormatFahrenheit": { - "label": "" + "label": "화씨 사용" } } }, "minecraftServerStatus": { - "name": "", - "description": "", + "name": "Minecraft 서버 상태", + "description": "Minecraft 서버의 상태를 표시합니다", "option": { "title": { - "label": "" + "label": "제목" }, "domain": { - "label": "" + "label": "서버 주소" }, "isBedrockServer": { - "label": "" + "label": "Bedrock 서버" } }, "status": { - "online": "", - "offline": "" + "online": "온라인", + "offline": "오프라인" } }, "timetable": { @@ -1944,7 +1944,7 @@ "noStation": "", "option": { "baseUrl": { - "label": "" + "label": "Search.ch URL" }, "station": { "label": "" @@ -1976,8 +1976,8 @@ "clear": "서식 초기화", "heading": "제목 레벨 {level}", "align": "텍스트 정렬: {position}", - "directionLtr": "", - "directionRtl": "", + "directionLtr": "텍스트 방향을 왼쪽에서 오른쪽으로 설정", + "directionRtl": "텍스트 방향을 오른쪽에서 왼쪽으로 설정", "blockquote": "인용문", "horizontalLine": "가로선", "bulletList": "글머리 기호 목록", @@ -2093,109 +2093,109 @@ } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "엔티티 상태", + "description": "엔티티의 상태를 표시하고 선택적으로 토글합니다", "option": { "entityId": { - "label": "" + "label": "엔티티 ID" }, "displayName": { - "label": "" + "label": "표시 이름" }, "entityUnit": { - "label": "" + "label": "엔티티 단위" }, "clickable": { - "label": "" + "label": "클릭 가능" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "자동화 실행", + "description": "한 번의 클릭으로 자동화를 트리거합니다", "option": { "displayName": { - "label": "" + "label": "표시 이름" }, "automationId": { - "label": "" + "label": "자동화 ID" } }, "spotlightAction": { - "run": "" + "run": "{name} 실행" } }, "stockPrice": { - "name": "", - "description": "", + "name": "주가", + "description": "회사의 현재 주가를 표시합니다", "option": { "stock": { - "label": "" + "label": "주식 심볼" }, "timeRange": { - "label": "", + "label": "기간", "option": { "1d": { - "label": "" + "label": "1일" }, "5d": { - "label": "" + "label": "5일" }, "1mo": { - "label": "" + "label": "1개월" }, "3mo": { - "label": "" + "label": "3개월" }, "6mo": { - "label": "" + "label": "6개월" }, "ytd": { - "label": "" + "label": "연초부터 현재까지" }, "1y": { - "label": "" + "label": "1년" }, "2y": { - "label": "" + "label": "2년" }, "5y": { - "label": "" + "label": "5년" }, "10y": { - "label": "" + "label": "10년" }, "max": { - "label": "" + "label": "최대" } } }, "timeInterval": { - "label": "", + "label": "시간 간격", "option": { "5m": { - "label": "" + "label": "5분" }, "15m": { - "label": "" + "label": "15분" }, "30m": { - "label": "" + "label": "30분" }, "1h": { - "label": "" + "label": "1시간" }, "1d": { - "label": "" + "label": "1일" }, "5d": { - "label": "" + "label": "5일" }, "1wk": { - "label": "" + "label": "1주" }, "1mo": { - "label": "" + "label": "1개월" } } } @@ -2268,7 +2268,7 @@ "sunset": "일몰", "maxWindSpeed": "최대 풍속: {maxWindSpeed}{unit}", "maxWindGusts": "최대 순간 풍속: {maxWindGusts}{unit}", - "humidity": "" + "humidity": "습도: {humidity}%" }, "kind": { "clear": "맑음", @@ -2288,17 +2288,17 @@ } }, "indexerManager": { - "name": "", - "description": "", + "name": "인덱서 관리자 상태", + "description": "인덱서 상태", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "새 탭에서 인덱서 사이트 열기" } }, - "title": "", - "testAll": "", + "title": "인덱서 관리자", + "testAll": "모두 테스트", "error": { - "internalServerError": "" + "internalServerError": "인덱서 상태를 가져오지 못했습니다" } }, "healthMonitoring": { @@ -2408,30 +2408,41 @@ } }, "dockerContainers": { - "name": "", + "name": "Docker 상태", "description": "", "option": { "columns": { - "label": "" + "label": "표시할 열" }, "enableRowSorting": { - "label": "" + "label": "항목 정렬 활성화" }, "defaultSort": { "label": "", "option": { - "name": "", - "state": "", - "cpuUsage": "", - "memoryUsage": "" + "name": "이름", + "state": "상태", + "cpuUsage": "CPU 사용량", + "memoryUsage": "메모리 사용량" } }, "descendingDefaultSort": { + "label": "역순 정렬" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "컨테이너 상태 불러오기 실패", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "NUT 서버를 통해 UPS 장치 상태 모니터링", "option": { "showBattery": { - "label": "" + "label": "배터리 표시" }, "showLoad": { - "label": "" + "label": "부하 표시" }, "showVoltage": { - "label": "" + "label": "전압 표시" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "온라인", + "onBattery": "배터리 사용 중", + "lowBattery": "배터리 부족", + "charging": "충전 중", + "unknown": "알 수 없음" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "런타임", + "load": "부하", + "input": "입력", + "output": "출력" }, "error": { - "internalServerError": "" + "internalServerError": "UPS 데이터를 가져오지 못함" } }, "tracearr": { @@ -2584,77 +2595,77 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "지난 30일", + "month": "이번 달", + "lastMonth": "지난 달" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "이벤트", + "description": "특정 이벤트의 총 발생 횟수 표시", + "placeholder": "이벤트 선택", + "loading": "이벤트 로딩 중...", + "noEvents": "이벤트를 찾을 수 없음", + "none": "이벤트 없음", + "configureWebsiteFirst": "이벤트를 로드하려면 먼저 웹사이트를 선택하세요" }, "chartType": { - "label": "", - "description": "", + "label": "차트 유형", + "description": "차트 표시 스타일", "option": { - "bar": "", - "sparkline": "" + "bar": "막대 차트", + "sparkline": "스파크라인" } }, "chartStyle": { - "label": "", - "description": "", + "label": "차트 스타일", + "description": "차트에서 이벤트 시리즈를 표시하는 방법", "option": { - "grouped": "", - "overlay": "" + "grouped": "나란히", + "overlay": "오버레이 (부분 집합)" } }, "viewMode": { - "label": "", - "description": "", + "label": "보기", + "description": "위젯 본문에 표시할 내용", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "차트", + "events": "이벤트 차트", + "topPages": "인기 페이지", + "topReferrers": "인기 참조자" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "이벤트", + "description": "차트로 표시할 이벤트를 하나 이상 선택하세요", + "placeholder": "이벤트 선택...", + "loading": "이벤트 로딩 중...", + "noEvents": "이벤트를 찾을 수 없음", + "configureWebsiteFirst": "이벤트를 로드하려면 먼저 웹사이트를 선택하세요" }, "topCount": { - "label": "", - "description": "" + "label": "표시할 항목", + "description": "표시할 상위 항목 수 (최대 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "이벤트", + "label": "이벤트" }, "topPages": { - "direct": "" + "direct": "직접" }, "topReferrers": { - "direct": "" + "direct": "직접" }, "events": { - "selectPrompt": "" + "selectPrompt": "차트로 표시할 이벤트를 선택하세요" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Umami 통합이 구성되지 않음", + "noWebsite": "웹사이트가 구성되지 않음", + "noData": "데이터 없음", + "internalServerError": "Umami 데이터를 가져오지 못함" } }, "common": { @@ -2704,18 +2715,18 @@ }, "hasAutoPlay": { "label": "자동 재생", - "description": "" + "description": "브라우저 제한으로 인해 자동 재생은 음소거 상태에서만 작동합니다" }, "isMuted": { - "label": "" + "label": "음소거" }, "hasControls": { - "label": "" + "label": "컨트롤 표시" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "비디오 URL이 제공되지 않았습니다", + "forYoutubeUseIframe": "YouTube 동영상은 iframe 옵션을 사용하세요" } }, "mediaServer": { @@ -2725,18 +2736,33 @@ "showOnlyPlaying": { "label": "현재 재생 중 항목만 표시", "description": "비활성화 옵션은 plex에서는 지원되지 않음" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "현재 재생 중", "user": "사용자", "name": "이름", "id": "아이디", - "status": "", - "directPlay": "", - "transcoding": "", - "paused": "", - "remaining": "", + "status": "상태", + "directPlay": "직접 재생", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", + "transcoding": "트랜스코딩", + "paused": "일시 중지됨", + "remaining": "남은 시간 {minutes}분", "metadata": { "title": "너드 통계", "video": { @@ -2758,235 +2784,235 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Paperless-ngx 문서 아카이브 개요", + "documentsTotal": "총 문서 수", + "documentsInbox": "받은 편지함", + "correspondents": "발신인", + "tags": "태그", + "documentTypes": "문서 유형", + "inboxRatio": "받은 편지함 비율", + "inbox": "받은 편지함", + "total": "전체", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "받은 편지함 비율 표시", + "description": "히어로 섹션에 받은 편지함 대비 전체 문서 비율을 표시합니다" }, "showInboxRing": { - "label": "", - "description": "" + "label": "받은 편지함 링 표시", + "description": "받은 편지함 비율과 함께 진행률 링을 표시합니다" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "총 문서 수 표시", + "description": "아카이브에 있는 총 문서 수를 표시합니다" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "받은 편지함 수 표시", + "description": "받은 편지함에 있는 처리되지 않은 문서 수를 표시합니다" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "발신인 표시", + "description": "총 발신인 수를 표시합니다" }, "showTags": { - "label": "", - "description": "" + "label": "태그 표시", + "description": "총 태그 수를 표시합니다" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "문서 유형 표시", + "description": "총 문서 유형 수를 표시합니다" } }, "error": { - "internalServerError": "" + "internalServerError": "Paperless-ngx 데이터를 가져오지 못함" } }, "patchmon": { - "name": "", - "description": "", - "title": "", - "totalHosts": "", - "hostsNeedingUpdates": "", - "securityUpdates": "", - "upToDateHosts": "", - "hostsWithSecurityUpdates": "", - "recentUpdates24h": "", - "totalOutdatedPackages": "", - "totalRepos": "", - "osDistribution": "", - "compliance": "", - "complianceRatio": "", - "lastUpdated": "", + "name": "PatchMon", + "description": "PatchMon의 호스트 패치 상태 개요", + "title": "PatchMon 통계", + "totalHosts": "총 호스트", + "hostsNeedingUpdates": "업데이트 필요", + "securityUpdates": "보안 업데이트", + "upToDateHosts": "최신 상태의 호스트", + "hostsWithSecurityUpdates": "보안 업데이트가 필요한 호스트", + "recentUpdates24h": "업데이트 (24시간)", + "totalOutdatedPackages": "오래된 패키지", + "totalRepos": "저장소", + "osDistribution": "OS 배포판", + "compliance": "패치 준수", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "{time} 업데이트됨", "option": { "showTotalHosts": { - "label": "", - "description": "" + "label": "총 호스트 표시", + "description": "모니터링되는 총 호스트 수 표시" }, "showHostsNeedingUpdates": { - "label": "", - "description": "" + "label": "업데이트가 필요한 호스트 표시", + "description": "하나 이상의 오래된 패키지가 있는 호스트 표시" }, "showSecurityUpdates": { - "label": "", - "description": "" + "label": "보안 업데이트 표시", + "description": "사용 가능한 총 보안 업데이트 수 표시" }, "showUpToDateHosts": { - "label": "", - "description": "" + "label": "최신 호스트 표시", + "description": "오래된 패키지가 없는 호스트 표시" }, "showHostsWithSecurityUpdates": { - "label": "", - "description": "" + "label": "보안 업데이트가 필요한 호스트 표시", + "description": "보안 패치가 필요한 호스트 표시" }, "showRecentUpdates24h": { - "label": "", - "description": "" + "label": "최근 업데이트 (24시간) 표시", + "description": "지난 24시간 동안 적용된 업데이트 수 표시" }, "showTotalOutdatedPackages": { - "label": "", - "description": "" + "label": "오래된 패키지 표시", + "description": "모든 호스트에서의 총 오래된 패키지 수 표시" }, "showTotalRepos": { - "label": "", - "description": "" + "label": "저장소 표시", + "description": "모니터링되는 활성 저장소 수 표시" }, "enableThresholdColors": { - "label": "", - "description": "" + "label": "임계값 색상 활성화", + "description": "심각도 사전 설정에 따라 통계 값을 녹색, 노란색 또는 빨간색으로 표시" }, "useCustomThresholds": { - "label": "", - "description": "" + "label": "고급 임계값", + "description": "절대 개수 또는 전체 호스트 대비 백분율을 사용하여 통계별 경고 및 위험 임계값 사용자 정의" }, "thresholdMode": { "option": { - "absolute": "", - "percent": "" + "absolute": "절대 개수", + "percent": "전체 호스트 대비 백분율" } }, "hostsNeedingUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "업데이트 필요 임계값 모드", + "description": "업데이트 필요 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "업데이트 필요 경고 임계값", + "description": "이 임계값에 도달하면 노란색으로 표시" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "업데이트 필요 위험 임계값", + "description": "이 임계값에 도달하면 빨간색으로 표시" }, "securityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "보안 업데이트 임계값 모드", + "description": "보안 업데이트 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "보안 업데이트 경고 임계값", + "description": "이 임계값에 도달하면 노란색으로 표시" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "보안 업데이트 위험 임계값", + "description": "이 임계값에 도달하면 빨간색으로 표시" }, "hostsWithSecurityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "보안 업데이트가 있는 호스트 임계값 모드", + "description": "호스트 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "보안 업데이트가 있는 호스트 경고 임계값", + "description": "이 임계값에 도달하면 노란색으로 표시" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "보안 업데이트가 있는 호스트 위험 임계값", + "description": "이 임계값에 도달하면 빨간색으로 표시" }, "upToDateHostsThresholdMode": { - "label": "", - "description": "" + "label": "최신 호스트 임계값 모드", + "description": "최신 호스트 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" }, "upToDateHostsWarningAt": { - "label": "", - "description": "" + "label": "최신 호스트 경고 임계값", + "description": "값이 이 임계값 이상이지만 전체 적용 범위 미만일 때 노란색으로 표시" }, "upToDateHostsCriticalAt": { - "label": "", - "description": "" + "label": "최신 호스트 위험 임계값", + "description": "값이 이 임계값 미만으로 떨어지면 빨간색으로 표시" }, "totalOutdatedPackagesThresholdMode": { - "label": "", - "description": "" + "label": "오래된 패키지 임계값 모드", + "description": "오래된 패키지 개수를 절대값 또는 전체 호스트 대비 백분율로 비교" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "오래된 패키지 경고 임계값", + "description": "이 임계값에 도달하면 노란색으로 표시" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "오래된 패키지 위험 임계값", + "description": "이 임계값에 도달하면 빨간색으로 표시" }, "showOsDistribution": { - "label": "", - "description": "" + "label": "OS 배포판 표시", + "description": "운영 체제별로 모니터링되는 호스트 분석 표시" }, "osDistributionLimit": { - "label": "", - "description": "", + "label": "OS 배포판 제한", + "description": "표시할 최대 운영 체제 수", "option": { - "3": "", - "5": "", - "10": "", - "all": "" + "3": "상위 3개", + "5": "상위 5개", + "10": "상위 10개", + "all": "모두" } }, "showOsVersion": { - "label": "", - "description": "" + "label": "OS 버전 표시", + "description": "사용 가능한 경우 각 배포판 레이블에 OS 버전 추가" }, "showComplianceHero": { - "label": "", - "description": "" + "label": "준수 상태 표시", + "description": "최신 호스트의 백분율을 표시하는 준수 링 표시" }, "osDisplayMode": { - "label": "", - "description": "", + "label": "OS 표시 모드", + "description": "운영 체제 배포판 표시 방법 선택", "option": { - "bars": "", - "donut": "" + "bars": "가로 막대", + "donut": "도넛 차트" } } }, "error": { - "internalServerError": "" + "internalServerError": "PatchMon 데이터를 가져오지 못했습니다" } }, "bazarr": { - "name": "", - "description": "", - "episodes": "", - "movies": "", - "providers": "", - "status": "", + "name": "Bazarr", + "description": "Bazarr 인스턴스의 누락된 자막 및 상태 개요", + "episodes": "누락된 에피소드", + "movies": "누락된 영화", + "providers": "제공자 문제", + "status": "상태 문제", "option": { "showMissingEpisodes": { - "label": "", - "description": "" + "label": "누락된 에피소드 표시", + "description": "누락된 자막이 있는 에피소드 수 표시" }, "showMissingMovies": { - "label": "", - "description": "" + "label": "누락된 영화 표시", + "description": "누락된 자막이 있는 영화 수 표시" }, "showProviderIssues": { - "label": "", - "description": "" + "label": "제공자 문제 표시", + "description": "문제가 있는 자막 제공자 수 표시" }, "showHealthIssues": { - "label": "", - "description": "" + "label": "상태 문제 표시", + "description": "Bazarr 상태 문제 수 표시" } }, "error": { - "internalServerError": "" + "internalServerError": "Bazarr 데이터를 가져오지 못했습니다" } }, "immich-serverStats": { @@ -3017,11 +3043,11 @@ }, "immich-albumCarousel": { "name": "Immich 앨범", - "allPhotos": "", + "allPhotos": "모든 사진", "option": { "albumId": { "label": "앨범", - "description": "" + "description": "Immich 앨범 또는 모든 사진을 선택하세요. 선택하지 않으면 전체 라이브러리에서 무작위 사진이 표시됩니다." }, "rotationIntervalSeconds": { "label": "표시 간격 초", @@ -3036,8 +3062,8 @@ "description": "항상 같은 앨범 순서로 시작하는 대신 무작위 순서로 사진을 표시합니다." } }, - "description": "", - "noPhotos": "" + "description": "Immich 앨범 또는 전체 라이브러리의 사진 슬라이드쇼", + "noPhotos": "사진을 찾을 수 없습니다" }, "downloads": { "name": "다운로드 클라이언트", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "통합당 항목 수 제한", "description": "통합당 표시되는 항목 수를 제한하여 전체 항목이 표시되지 않습니다" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "항목에서 열 선택", - "noCommunications": "통합에서 데이터를 불러올 수 없습니다" + "noCommunications": "통합에서 데이터를 불러올 수 없습니다", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "클라이언트 내 현재 인덱스" }, "id": { - "columnTitle": "아이디" + "columnTitle": "아이디", + "detailsTitle": "" }, "integration": { "columnTitle": "통합" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "완료 시간", - "detailsTitle": "완료/완료 후 경과 시간" + "detailsTitle": "완료/완료 후 경과 시간", + "eta": "" }, "type": { "columnTitle": "유형", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "" + "globalRatio": "전체 비율", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3216,45 +3269,45 @@ } }, "mediaRequests-requestList": { - "name": "", + "name": "미디어 요청 목록", "description": "오버서 또는 젤리서 인스턴스의 모든 미디어 요청 목록 보기", "option": { "linksTargetNewTab": { "label": "새 탭에서 링크 열기" }, "statusFilter": { - "label": "" + "label": "표시할 상태" }, "recentDays": { - "label": "" + "label": "최근 요청만 표시" } }, "pending": { - "approve": "", - "approving": "", - "decline": "" + "approve": "요청 승인", + "approving": "요청 승인 중...", + "decline": "요청 거절" }, "availability": { "unknown": "알 수 없음", - "pending": "", - "processing": "", + "pending": "대기 중", + "processing": "처리 중", "requested": "", - "partiallyAvailable": "", - "available": "", + "partiallyAvailable": "부분", + "available": "사용 가능", "blacklisted": "", "deleted": "" }, "status": { - "pending": "", - "approved": "", - "declined": "", - "failed": "", - "completed": "" + "pending": "대기 중", + "approved": "승인됨", + "declined": "거절됨", + "failed": "실패", + "completed": "완료" }, - "toBeDetermined": "" + "toBeDetermined": "미정" }, "mediaRequests-requestStats": { - "name": "", + "name": "미디어 요청 통계", "description": "미디어 요청에 대한 통계", "option": {}, "titles": { @@ -3262,122 +3315,122 @@ "main": "미디어 통계", "approved": "이미 승인됨", "pending": "승인 대기 중", - "processing": "", - "declined": "", - "available": "", + "processing": "처리 중", + "declined": "이미 거절됨", + "available": "이미 사용 가능", "tv": "TV 요청", "movie": "영화 요청", "total": "합계" }, "users": { "main": "상위 사용자", - "requests": "" + "requests": "요청" } } }, "mediaTranscoding": { - "name": "", - "description": "", + "name": "미디어 트랜스코딩", + "description": "미디어 트랜스코딩의 통계, 현재 대기열 및 작업자 상태", "option": { "defaultView": { - "label": "" + "label": "기본 보기" }, "queuePageSize": { - "label": "" + "label": "대기열 페이지 크기" } }, "tab": { - "workers": "", + "workers": "작업자", "queue": "대기열", - "statistics": "" + "statistics": "통계" }, - "currentIndex": "", + "currentIndex": "{total}개 중 {start}-{end}", "healthCheck": { - "title": "", - "queued": "", + "title": "상태 확인", + "queued": "대기 중", "status": { - "healthy": "", - "unhealthy": "" + "healthy": "정상", + "unhealthy": "비정상" } }, "panel": { "statistics": { "empty": "비어 있음", - "transcodes": "", - "transcodesCount": "", - "healthChecksCount": "", - "filesCount": "", - "savedSpace": "", - "healthChecks": "", - "videoCodecs": "", - "videoContainers": "", - "videoResolutions": "" + "transcodes": "트랜스코드", + "transcodesCount": "트랜스코드", + "healthChecksCount": "상태 확인", + "filesCount": "파일", + "savedSpace": "절약된 공간", + "healthChecks": "상태 확인", + "videoCodecs": "코덱", + "videoContainers": "컨테이너", + "videoResolutions": "해상도" }, "workers": { "empty": "비어 있음", "table": { - "file": "", + "file": "파일", "eta": "남은 시간", "progress": "진행률", - "transcode": "", - "healthCheck": "" + "transcode": "트랜스코드", + "healthCheck": "상태 확인" } }, "queue": { "empty": "비어 있음", "table": { - "file": "", + "file": "파일", "size": "크기", - "transcode": "", - "healthCheck": "" + "transcode": "트랜스코드", + "healthCheck": "상태 확인" } } } }, "mediaMissing": { - "name": "", - "description": "", + "name": "누락 및 대기 중인 미디어", + "description": "Radarr 및 Sonarr의 누락 및 대기 중인 영화와 에피소드 표시", "option": { "showMissing": { - "label": "" + "label": "누락된 항목 표시" }, "showQueued": { - "label": "" + "label": "대기 중인 항목 표시" }, "pageSize": { - "label": "" + "label": "페이지당 항목 수" } }, "tab": { - "missing": "", - "queued": "" + "missing": "누락", + "queued": "대기 중" }, "type": { - "movie": "", - "episode": "" + "movie": "영화", + "episode": "에피소드" }, "empty": { - "missing": "", - "queued": "", - "noTabsEnabled": "" + "missing": "누락된 항목 없음", + "queued": "대기 중인 항목 없음", + "noTabsEnabled": "위젯 설정에서 최소한 하나의 탭을 활성화하세요" }, - "timeLeft": "" + "timeLeft": "남은 시간" }, "rssFeed": { - "name": "", - "description": "", + "name": "RSS 피드", + "description": "하나 이상의 일반 RSS, ATOM 또는 JSON 피드를 모니터링하고 표시합니다", "option": { "feedUrls": { - "label": "" + "label": "피드 URL" }, "enableRtl": { - "label": "" + "label": "RTL 활성화" }, "textLinesClamp": { - "label": "" + "label": "설명 줄 제한" }, "maximumAmountPosts": { - "label": "" + "label": "게시물 수 제한" }, "hideDescription": { "label": "" @@ -3388,33 +3441,33 @@ } }, "releases": { - "name": "", - "description": "", + "name": "릴리즈", + "description": "지정된 버전 정규식으로 주어진 저장소의 현재 버전 목록을 표시합니다.", "option": { "newReleaseWithin": { - "label": "", - "description": "" + "label": "새 릴리스 내", + "description": "사용 예: 1w (1주), 10M (10개월). 허용되는 단위 유형 h (시간), d (일), w (주), M (월), y (년). 새 릴리스 강조 표시를 하지 않으려면 비워 두십시오." }, "staleReleaseWithin": { - "label": "", - "description": "" + "label": "오래된 릴리스 내", + "description": "사용 예: 1w (1주), 10M (10개월). 허용되는 단위 유형 h (시간), d (일), w (주), M (월), y (년). 오래된 릴리스 강조 표시를 하지 않으려면 비워 두십시오." }, "showOnlyHighlighted": { - "label": "", - "description": "" + "label": "강조 표시만 표시", + "description": "위에서 설정한 대로 새 릴리스 또는 오래된 릴리스만 표시합니다." }, "showDetails": { - "label": "" + "label": "세부 정보 표시" }, "showOnlyIcon": { "label": "" }, "topReleases": { - "label": "", - "description": "" + "label": "최상위 릴리스", + "description": "표시할 최신 릴리스의 최대 개수입니다. 영은 제한이 없습니다." }, "repositories": { - "label": "", + "label": "저장소", "addRepository": { "label": "" }, @@ -3430,90 +3483,90 @@ "deselectAll": "" }, "provider": { - "label": "" + "label": "제공자" }, "providerUrl": { - "label": "" + "label": "공급자 URL" }, "identifier": { - "label": "", - "placeholder": "" + "label": "식별자", + "placeholder": "이름 또는 소유자/이름" }, "name": { - "label": "" + "label": "이름" }, "versionFilter": { - "label": "", + "label": "버전 필터", "prefix": { - "label": "" + "label": "접두사" }, "precision": { - "label": "", + "label": "정밀도", "options": { - "none": "" + "none": "없음" } }, "suffix": { - "label": "" + "label": "접미사" }, "regex": { - "label": "" + "label": "정규 표현식" } }, "edit": { - "label": "" + "label": "편집" }, "editForm": { - "title": "", + "title": "저장소 편집", "cancel": { - "label": "" + "label": "취소" }, "confirm": { - "label": "" + "label": "확인" } }, "importForm": { "title": "" }, "example": { - "label": "" + "label": "예시" }, - "invalid": "", + "invalid": "잘못된 저장소 정의, 값을 확인하십시오", "noProvider": { "label": "", "tooltip": "" }, "tokens": { - "label": "", - "token": "", - "configured": "", - "notConfigured": "", - "save": "" + "label": "공급자 토큰", + "token": "토큰", + "configured": "토큰 구성됨", + "notConfigured": "토큰이 설정되지 않음", + "save": "저장" } } }, - "not-found": "", - "pre-release": "", - "archived": "", - "forked": "", - "starsCount": "", - "forksCount": "", - "issuesCount": "", + "not-found": "찾을 수 없음", + "pre-release": "프리릴리스", + "archived": "보관됨", + "forked": "포크됨", + "starsCount": "별", + "forksCount": "포크", + "issuesCount": "열린 이슈", "markViewed": "", - "openProjectPage": "", - "openReleasePage": "", - "releaseDescription": "", + "openProjectPage": "프로젝트 페이지 열기", + "openReleasePage": "릴리스 페이지 열기", + "releaseDescription": "릴리스 설명", "projectDescription": "", - "created": "", + "created": "생성됨", "error": { - "label": "", + "label": "오류", "messages": { "invalidIdentifier": "", "noMatchingVersion": "", "noReleasesFound": "", - "noProviderSelected": "", + "noProviderSelected": "선택한 공급자가 없습니다", "noProviderResponse": "", - "unexpected": "" + "unexpected": "예기치 않은 공급자 오류" } } }, @@ -3525,52 +3578,52 @@ } }, "error": { - "integrationsDisconnected": "", - "unknownContentOption": "" + "integrationsDisconnected": "데이터 없음, 모든 통합이 연결 해제됨", + "unknownContentOption": "네트워크 컨트롤러 요약 위젯의 알 수 없는 콘텐츠 옵션: " }, - "name": "", - "description": "" + "name": "네트워크 컨트롤러 요약", + "description": "네트워크 컨트롤러(예: UniFi 컨트롤러)의 요약을 표시합니다" }, "networkControllerStatus": { "card": { "variants": { "wired": { - "name": "" + "name": "유선" }, "wifi": { - "name": "" + "name": "Wi-Fi" } }, "users": { - "label": "" + "label": "사용자" }, "guests": { - "label": "" + "label": "게스트" } }, "option": { "content": { "option": { "wifi": { - "label": "" + "label": "Wi-Fi" }, "wired": { - "label": "" + "label": "유선" } }, - "label": "" + "label": "위젯 콘텐츠" } }, "error": { - "integrationsDisconnected": "", - "unknownContentOption": "" + "integrationsDisconnected": "데이터 없음, 모든 통합이 연결 해제됨", + "unknownContentOption": "네트워크 상태 위젯의 알 수 없는 콘텐츠 옵션: " }, - "name": "", - "description": "" + "name": "네트워크 상태", + "description": "네트워크에 연결된 장치를 표시합니다" }, "networkController": { "error": { - "internalServerError": "" + "internalServerError": "네트워크 컨트롤러 요약을 가져오지 못했습니다" } }, "firewall": { @@ -3657,72 +3710,72 @@ "option": { "showAverageUptime": { "label": "평균 업타임 표시", - "description": "" + "description": "24시간 평균 가동 시간 백분율을 표시합니다" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "가동 시간 링 표시", + "description": "평균 가동 시간 값과 함께 진행률 링을 표시합니다" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "총 모니터 수 표시", + "description": "구성된 총 모니터 수를 표시합니다" }, "showUpCount": { - "label": "", - "description": "" + "label": "작동 중 수 표시", + "description": "현재 작동 중인 모니터 수를 표시합니다" }, "showDownCount": { - "label": "", - "description": "" + "label": "작동 중단 수 표시", + "description": "현재 작동 중단된 모니터 수를 표시합니다" }, "showPausedCount": { - "label": "", - "description": "" + "label": "일시 중지 수 표시", + "description": "현재 일시 중지된 모니터 수를 표시합니다" } }, - "averageUptime": "", + "averageUptime": "평균 가동 시간 (24시간)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "총 모니터 수", + "upCount": "작동 중", + "downCount": "작동 중단", + "pausedCount": "일시 중지됨" }, "error": { - "internalServerError": "" + "internalServerError": "가동 시간 데이터를 가져오지 못함" } }, "traefik": { - "name": "", - "description": "", + "name": "Traefik", + "description": "Traefik 라우터, 서비스, 미들웨어 및 진입점 개요", "option": { "showTcp": { - "label": "" + "label": "TCP 표시" }, "showUdp": { - "label": "" + "label": "UDP 표시" }, "showEntryPoints": { - "label": "" + "label": "진입점 표시" } }, - "instances": "", - "versionUnknown": "", + "instances": "Traefik 인스턴스", + "versionUnknown": "버전 알 수 없음", "summary": { - "routers": "", - "entryPoints": "" + "routers": "라우터", + "entryPoints": "진입점" }, "resource": { - "routers": "", - "services": "", - "middlewares": "" + "routers": "라우터", + "services": "서비스", + "middlewares": "미들웨어" }, "status": { - "healthy": "", - "errors": "", - "warnings": "" + "healthy": "정상", + "errors": "{count}개 오류", + "warnings": "{count}개 경고" }, "error": { - "internalServerError": "" + "internalServerError": "Traefik 데이터를 가져오지 못함" } }, "audioStats": { @@ -3741,18 +3794,6 @@ "label": "음원 표시", "description": "음악 라이브러리에 있는 음원 총 수를 표시 (Navidrome)" }, - "showNowPlaying": { - "label": "현재 재생 중 표시", - "description": "현재 재생 중인 트랙을 표시 (Navidrome)" - }, - "showNowPlayingList": { - "label": "현재 재생 목록 표시", - "description": "활성 스트림 수 대신 개별 트랙 표시 (Navidrome)" - }, - "maxNowPlayingItems": { - "label": "최대 현재 재생 항목 수", - "description": "현재 재생 목록에 표시할 최대 트랙 수 (Navidrome)" - }, "showLibraryCount": { "label": "라이브러리 수 표시", "description": "인스턴스에 있는 라이브러리 수 표시 (Audiobookshelf)" @@ -3786,8 +3827,6 @@ "podcasts": "팟캐스트", "listeningTime": "청취 시간", "activeSessions": "활성 세션", - "nowPlaying": "현재 재생 중", - "nowPlayingCount": "{count, plural, one {# 스트림} other {# 스트림}}", "error": { "internalServerError": "오디오 정보 가져오기 실패" } @@ -3853,9 +3892,9 @@ "label": "백그라운드 사용량 바 표시" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "표시할 저장소 볼륨", + "description": "선택한 모든 통합이 Synology일 때만 사용할 수 있습니다. 감지된 모든 저장소 볼륨을 표시하려면 비워두십시오.", + "placeholder": "저장소 볼륨 선택" } }, "status": { @@ -3883,245 +3922,253 @@ "executeFailed": "작업 실패. 위젯 설정을 확인하십시오." }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel 시스템 (표)", + "description": "정렬 가능한 열과 상태 표시기가 있는 모든 Beszel 모니터링 시스템의 표 보기", "option": { "statusFilter": { - "label": "" + "label": "상태 필터" }, "sortBy": { - "label": "" + "label": "정렬 기준" }, "sortDirection": { - "label": "" + "label": "정렬 방향" }, "showCpu": { - "label": "" + "label": "CPU 표시" }, "showMemory": { - "label": "" + "label": "메모리 표시" }, "showDisk": { - "label": "" + "label": "디스크 표시" }, "showGpu": { - "label": "" + "label": "GPU 표시" }, "showLoadAvg": { - "label": "" + "label": "평균 부하 표시" }, "showNet": { - "label": "" + "label": "네트워크 표시" }, "showTemp": { - "label": "" + "label": "온도 표시" }, "showBattery": { - "label": "" + "label": "배터리 표시" }, "showServices": { - "label": "" + "label": "서비스 표시" }, "showUptime": { - "label": "" + "label": "가동 시간 표시" }, "showAgent": { + "label": "에이전트 버전 표시" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "시스템을 찾을 수 없음", "error": { - "internalServerError": "" + "internalServerError": "Beszel에 연결할 수 없습니다. 통합 설정을 확인하십시오.", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "시스템", + "cpu": "CPU", + "memory": "메모리", + "disk": "디스크", + "gpu": "GPU", + "loadAvg": "평균 부하", + "net": "네트", + "temp": "온도", + "battery": "배터리", + "services": "서비스", + "uptime": "가동 시간", + "agent": "에이전트" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel 시스템 (그리드)", + "description": "실시간 메트릭이 포함된 모든 Beszel 모니터링 시스템의 카드 그리드 보기", "option": { "statusFilter": { - "label": "" + "label": "상태 필터" }, "showCpu": { - "label": "" + "label": "CPU 표시" }, "showMemory": { - "label": "" + "label": "메모리 표시" }, "showDisk": { - "label": "" + "label": "디스크 표시" }, "showGpu": { - "label": "" + "label": "GPU 표시" }, "showLoadAvg": { - "label": "" + "label": "평균 부하 표시" }, "showNet": { - "label": "" + "label": "네트워크 표시" }, "showTemp": { - "label": "" + "label": "온도 표시" }, "showBattery": { - "label": "" + "label": "배터리 표시" }, "showServices": { - "label": "" + "label": "서비스 표시" }, "showUptime": { - "label": "" + "label": "가동 시간 표시" }, "showAgent": { - "label": "" + "label": "에이전트 버전 표시" } }, "error": { - "internalServerError": "" + "internalServerError": "Beszel에 연결할 수 없습니다. 통합 설정을 확인하십시오." }, "empty": { - "noSystems": "" + "noSystems": "시스템을 찾을 수 없음" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "메모리", + "disk": "디스크", + "gpu": "GPU", + "loadAvg": "평균 부하", + "net": "네트", + "temp": "온도", + "battery": "배터리", + "services": "서비스", + "uptime": "가동 시간", + "agent": "에이전트" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel 알림", + "description": "Beszel 알림 구성 및 기록 보기", "option": { "showHistory": { - "label": "" + "label": "알림 기록 표시" }, "maxHistoryItems": { - "label": "" + "label": "최대 기록 항목" } }, - "empty": "", + "empty": "알림이 구성되지 않음", "error": { - "internalServerError": "" + "internalServerError": "Beszel에 연결할 수 없습니다. 통합 설정을 확인하십시오." }, - "history": "", - "resolved": "", + "history": "기록", + "resolved": "해결됨", "status": { - "triggered": "", - "ok": "" + "triggered": "트리거됨", + "ok": "정상" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel 시스템 통계", + "description": "CPU, 메모리, 디스크, 네트워크 및 Docker 컨테이너 메트릭에 대한 시계열 차트", "option": { "systemId": { - "label": "", - "description": "" + "label": "시스템", + "description": "통계를 표시할 Beszel 시스템 선택" }, "timePeriod": { - "label": "" + "label": "기간" }, "showCpu": { - "label": "" + "label": "CPU 차트 표시" }, "showMemory": { - "label": "" + "label": "메모리 차트 표시" }, "showDisk": { - "label": "" + "label": "디스크 차트 표시" }, "showDiskIO": { - "label": "" + "label": "디스크 I/O 차트 표시" }, "showNetwork": { - "label": "" + "label": "네트워크 차트 표시" }, "showDockerCpu": { - "label": "" + "label": "Docker CPU 차트 표시" }, "showDockerMemory": { - "label": "" + "label": "Docker 메모리 차트 표시" }, "showDockerNetwork": { - "label": "" + "label": "Docker 네트워크 차트 표시" } }, - "selectSystem": "", + "selectSystem": "시스템 선택", "empty": { - "noSystems": "" + "noSystems": "시스템을 찾을 수 없음" }, "error": { - "internalServerError": "", - "liveConnectionFailed": "", - "switchToHistorical": "", - "systemNotFound": "" + "internalServerError": "Beszel에 연결할 수 없습니다. 통합 설정을 확인하십시오.", + "liveConnectionFailed": "실시간 연결에 실패했습니다. Beszel 인스턴스가 실시간 스트리밍을 지원하지 않을 수 있습니다.", + "switchToHistorical": "기록 보기로 전환", + "systemNotFound": "선택한 시스템을 찾을 수 없습니다. 다른 시스템을 선택하십시오." }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU 사용량", + "subtitle": "시스템 전체 평균 CPU 활용률", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "메모리 사용량", + "subtitle": "기록된 시간의 정확한 활용률", + "series": "사용됨", + "cache": "캐시/버퍼" }, "disk": { - "title": "", - "subtitle": "", - "series": "" + "title": "디스크 사용량", + "subtitle": "파일 시스템별 사용량", + "series": "루트" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "디스크 I/O", + "subtitle": "루트 파일 시스템 처리량", + "read": "읽기", + "write": "쓰기" }, "storage": { - "title": "", - "subtitle": "", - "series": "" + "title": "저장소", + "subtitle": "파일 시스템별 디스크 사용량", + "series": "사용중" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "대역폭", + "subtitle": "공용 인터페이스의 네트워크 트래픽", + "sent": "전송", + "recv": "수신" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU 사용량", + "subtitle": "컨테이너의 평균 CPU 활용률" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker 메모리 사용량", + "subtitle": "Docker 컨테이너의 메모리 사용량" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker 네트워크 I/O", + "subtitle": "Docker 컨테이너의 네트워크 트래픽" } } } @@ -4252,36 +4299,36 @@ } }, "backgroundImageAttachment": { - "label": "", + "label": "배경 이미지 첨부", "option": { "fixed": { - "label": "", - "description": "" + "label": "고정", + "description": "배경이 같은 위치에 유지됩니다." }, "scroll": { - "label": "", - "description": "" + "label": "스크롤", + "description": "마우스로 배경이 스크롤됩니다." } } }, "backgroundImageRepeat": { - "label": "", + "label": "배경 이미지 반복", "option": { "repeat": { - "label": "", - "description": "" + "label": "반복", + "description": "전체 배경 이미지 영역을 채울 만큼 필요한 만큼 이미지가 반복됩니다." }, "no-repeat": { - "label": "", - "description": "" + "label": "반복 없음", + "description": "이미지가 반복되지 않으며 전체 공간을 채우지 않을 수 있습니다." }, "repeat-x": { - "label": "", - "description": "" + "label": "X축 반복", + "description": "'반복'과 동일하지만 수평 축에서만 적용됩니다." }, "repeat-y": { - "label": "", - "description": "" + "label": "Y축 반복", + "description": "'반복'과 동일하지만 수직 축에서만 적용됩니다." } } }, @@ -4289,12 +4336,12 @@ "label": "배경 이미지 크기", "option": { "cover": { - "label": "", - "description": "" + "label": "커버", + "description": "초과 공간을 잘라내어 전체 창을 덮도록 이미지를 가능한 한 작게 조정합니다." }, "contain": { - "label": "", - "description": "" + "label": "컨테인", + "description": "자르거나 늘리지 않고 컨테이너 내에서 이미지를 가능한 한 크게 조정합니다." } } }, @@ -4318,7 +4365,7 @@ "description": "또한 숙련된 사용자에게만 권장되는 CSS를 사용하여 대시보드를 사용자 지정할 수 있습니다.", "customClassesAlert": { "title": "사용자 지정 클래스", - "description": "" + "description": "각 항목의 고급 옵션에서 보드 항목에 사용자 정의 클래스를 추가하고 위의 사용자 정의 CSS에서 사용할 수 있습니다." } }, "disableStatus": { @@ -4348,7 +4395,7 @@ } }, "content": { - "metaTitle": "" + "metaTitle": "{boardName} 보드" }, "setting": { "title": "{boardName} 보드 설정", @@ -4498,9 +4545,9 @@ "text": "요청한 리소스를 찾을 수 없습니다" }, "error": { - "title": "", - "text": "", - "digest": "" + "title": "이 페이지를 로드할 수 없습니다", + "text": "이 페이지를 로드하는 동안 예기치 않은 오류가 발생했습니다. 탐색은 여전히 가능합니다. 페이지를 새로고침하거나 사이드바에서 다른 섹션을 사용해 보십시오.", + "digest": "오류 참조: {digest}" }, "navbar": { "items": { @@ -4522,13 +4569,13 @@ "tools": { "label": "도구", "items": { - "docker": "", - "kubernetes": "", - "logs": "", - "api": "", - "certificates": "", - "tasks": "", - "backup": "" + "docker": "Docker", + "kubernetes": "Kubernetes", + "logs": "로그", + "api": "API 및 MCP", + "certificates": "인증서", + "tasks": "작업", + "backup": "백업" } }, "settings": "설정", @@ -4833,57 +4880,57 @@ } }, "search": { - "title": "", + "title": "검색", "defaultSearchEngine": { - "label": "", - "description": "" + "label": "전역 기본 검색 엔진", + "description": "통합 검색 엔진은 여기에서 선택할 수 없습니다" } }, "appearance": { "title": "모양", "defaultColorScheme": { - "label": "", + "label": "기본 색상 구성표", "options": { - "auto": "", - "light": "", - "dark": "" + "auto": "자동", + "light": "라이트", + "dark": "다크" } } }, "culture": { - "title": "", + "title": "문화", "defaultLocale": { - "label": "" + "label": "기본 언어" } } } }, "tool": { "tasks": { - "title": "", + "title": "작업", "status": { - "idle": "", + "idle": "대기", "running": "실행 중", "error": "오류", "disabled": "" }, "job": { "iconsUpdater": { - "label": "" + "label": "아이콘 업데이터" }, "analytics": { - "label": "" + "label": "분석" }, "ping": { - "label": "" + "label": "핑" } }, "interval": { - "seconds": "", - "minutes": "", - "hours": "", - "midnight": "", - "weeklyMonday": "", + "seconds": "매 {interval, plural, =1 {초} other {# 초}}", + "minutes": "매 {interval, plural, =1 {분} other {# 분}}", + "hours": "매 {interval, plural, =1 {시간} other {# 시간}}", + "midnight": "매일 자정", + "weeklyMonday": "매주 월요일", "update": { "success": { "message": "간격 업데이트 완료" @@ -5014,87 +5061,87 @@ "title": "스트리밍 가능한 HTTP", "worksWith": "작동: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", "addToConfig": "MCP 클라이언트 설정 파일에 추가:", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "cursor": "{name}: 프로젝트 또는 전역 설정의 {file}", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} 또는 {command} 사용", + "vsCodeCopilot": "{name}: 작업 영역 설정의 {file}", + "replaceHint": "자리 표시자를 생성할 때 받은 API 키로 바꾸십시오." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (mcp-remote 브리지를 통한 레거시 클라이언트)", + "description": "stdio 전송만 지원하는 클라이언트용. 로컬에 {dependency}(Node.js) 설치 필요:" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "연결 테스트", + "description": "엔드포인트에 연결할 수 있고 API 키가 작동하는지 확인하려면 터미널에서 이 명령을 실행하십시오:", + "hint": "성공적인 응답은 MCP 서버 기능을 반환합니다. 오류가 표시되면 JSON 응답에서 힌트를 확인하십시오." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "사용 가능한 도구", + "description": "{count}개의 도구를 사용할 수 있습니다. 카테고리를 확장하여 개별 도구와 설명을 확인하십시오.", + "columnType": "유형", + "columnName": "도구", + "columnDescription": "설명" }, "troubleshooting": { - "title": "", + "title": "문제 해결", "missingHeader": { - "title": "", - "description": "" + "title": "\"ApiKey 헤더 누락\"", + "description": "클라이언트가 {header} 헤더를 보내지 않습니다. MCP 구성의 {section} 섹션이 올바른지 확인하십시오. 일부 클라이언트는 구성 변경 후 다시 시작해야 합니다." }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"잘못된 ApiKey 형식\"", + "description": "API 키의 일부가 아닌 전체 API 키를 복사했는지 확인하십시오." }, "invalidKey": { - "title": "", - "description": "" + "title": "\"잘못된 API 키\"", + "description": "키 ID를 찾을 수 없거나 토큰이 잘못되었습니다. API 키는 생성할 때 한 번만 볼 수 있습니다. 분실한 경우 이전 키를 삭제하고 새 키를 만드십시오." }, "connectionRefused": { - "title": "", - "description": "" + "title": "연결 거부됨 / 시간 초과", + "description": "AI 클라이언트에서 URL에 연결할 수 있는지 확인하십시오. Homarr가 리버스 프록시 뒤 또는 Docker에서 실행되는 경우 외부 URL({localhost}가 아님)을 사용하십시오. 포트가 올바른지 확인하십시오(기본값: Docker의 경우 7575)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "도구가 나타나지 않음", + "description": "일부 도구는 특정 통합(예: Docker, Overseerr)이 구성되어야 합니다. 도구 목록은 Homarr 인스턴스에서 사용 가능한 항목에 따라 다릅니다." } }, - "copy": "", + "copy": "복사", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "원클릭 설치", + "subtitle": "OAuth 사용 — 처음 사용할 때 브라우저에서 인증하세요", + "vsCode": "VS Code에 설치", + "cursor": "Cursor에 설치", + "copyUrl": "MCP URL 복사", + "copied": "복사됨!", + "copyHint": "ChatGPT, Claude Code 또는 모든 MCP 클라이언트용", + "manualConfig": "수동 구성" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "전체 데이터베이스 백업", + "metaTitle": "백업 및 복원", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "데이터베이스 내보내기", + "description": "모든 설정, 사용자, 보드 및 암호화된 통합 시크릿을 포함한 SQLite 데이터베이스의 전체 백업을 다운로드합니다. 백업은 암호화 키 및 메타데이터와 함께 ZIP 파일로 묶입니다.", + "button": "백업 다운로드", + "error": "내보내기 실패", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "민감한 데이터 내보내기", + "warningTitle": "이 내보내기에는 전체 데이터베이스가 포함됩니다.", + "warningBody": "백업에는 모든 사용자, 통합 시크릿(암호화됨), API 키, 보드 구성 및 앱 데이터가 포함됩니다. 내보낸 파일을 안전하게 보관하고 공유하지 마십시오.", + "typePrompt": "계속하려면 \"{phrase}\" 입력", + "submit": "데이터베이스 내보내기", + "cancel": "취소" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "데이터베이스 복원", + "description": "이전에 내보낸 백업 ZIP을 업로드하여 데이터베이스를 복원합니다. 이 작업은 전체 데이터베이스를 대체합니다. 백업이 다른 암호화 키로 생성된 경우 시크릿이 자동으로 다시 암호화됩니다.", + "warning": "백업을 복원하면 현재 데이터베이스가 완전히 교체되고 애플리케이션이 다시 시작됩니다. 이 작업은 취소할 수 없습니다.", "dropzone": { "title": "백업 ZIP을 여기에 놓거나 클릭하여 탐색", "description": "Homarr SQLite 백업에서는 .zip 파일만 허용됩니다" @@ -5162,64 +5209,64 @@ "migrationsPending": "{count}개 대기 중" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "마이그레이션 적용 중 ({current}/{total})", + "migrationLabel": "마이그레이션 {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "파괴적 작업", + "warningTitle": "이 작업은 전체 데이터베이스를 영구적으로 대체합니다.", + "warningBody": "현재의 모든 보드, 사용자, 앱, 통합, 설정 및 세션이 손실됩니다. 이 작업은 취소할 수 없습니다. 복원 후 애플리케이션이 다시 시작됩니다.", + "typePrompt": "계속하려면 \"{phrase}\" 입력", + "cancel": "취소", + "submit": "데이터베이스 복원" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "데이터베이스 복원 중...", + "extracting": "백업 아카이브 추출 중", + "migrating": "데이터베이스 마이그레이션 적용 중", + "encrypting": "통합 시크릿 재암호화 중", + "swapping": "데이터베이스 파일 교체 중", + "restarting": "서버 재시작 중" }, "complete": { - "title": "", - "message": "" + "title": "복원 완료", + "message": "데이터베이스가 성공적으로 복원되었습니다. 서버가 다시 시작 중입니다 — 잠시 후 페이지를 새로고침하십시오." }, "failed": { - "title": "" + "title": "복원 실패" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "잘못된 백업: metadata.json 누락", + "invalidMissingDb": "잘못된 백업: db.sqlite 누락", + "analyzeError": "백업 분석 실패" } } }, "about": { - "version": "", - "text": "", + "version": "버전 {version}", + "text": "Homarr는 자원봉사자들에 의해 유지되는 커뮤니티 주도 오픈 소스 프로젝트입니다. 이 사람들 덕분에 Homarr는 2021년부터 성장해 왔습니다. 우리 팀은 보상 없이 여가 시간에 여러 나라에서 완전히 원격으로 Homarr 작업을 하고 있습니다.", "accordion": { "contributors": { - "title": "", - "subtitle": "" + "title": "기여자", + "subtitle": "{count}명이 코드 및 Homarr 유지 관리" }, "translators": { - "title": "", - "subtitle": "" + "title": "번역가", + "subtitle": "{count}명이 여러 언어로 번역 기여" }, "sponsors": { "title": "", "subtitle": "" }, "libraries": { - "title": "", - "subtitle": "" + "title": "라이브러리", + "subtitle": "Homarr 코드에 사용된 {count}개" }, "hotkeys": { - "title": "", - "subtitle": "", + "title": "단축키", + "subtitle": "워크플로우 개선을 위한 키보드 단축키", "field": { - "shortcut": "", - "action": "" + "shortcut": "단축키", + "action": "행동" }, "action": { "toggleBoardEdit": "", @@ -5234,17 +5281,17 @@ } }, "docker": { - "title": "", + "title": "컨테이너", "table": { - "updated": "", + "updated": "{when} 업데이트됨", "refresh": { - "lastUpdated": "" + "lastUpdated": "마지막 새로고침 {when}" }, - "search": "", - "selected": "", - "footer": "", - "totalCpu": "", - "totalMemory": "" + "search": "{count}개 컨테이너 검색", + "selected": "{totalCount}개 중 {selectCount}개 컨테이너 선택됨", + "footer": "총 {count}개 컨테이너", + "totalCpu": "총 CPU: {cpu}%", + "totalMemory": "총 메모리: {memory}" }, "field": { "name": { @@ -5257,17 +5304,17 @@ "running": "실행 중", "paused": "일시 중지됨", "restarting": "다시 시작", - "exited": "", + "exited": "종료됨", "removing": "제거", - "dead": "" + "dead": "죽음" } }, "stats": { "cpu": { - "label": "" + "label": "CPU" }, "memory": { - "label": "" + "label": "메모리" } }, "containerImage": { @@ -5277,27 +5324,27 @@ "label": "포트" }, "host": { - "label": "" + "label": "호스트" } }, "action": { - "title": "", + "title": "동작", "logs": { - "label": "", + "label": "로그 보기", "page": { - "title": "" + "title": "{name} 로그" } }, "start": { "label": "시작", "notification": { "success": { - "title": "", - "message": "" + "title": "컨테이너 시작됨", + "message": "컨테이너가 성공적으로 시작되었습니다" }, "error": { - "title": "", - "message": "" + "title": "컨테이너 시작 안 됨", + "message": "컨테이너를 시작할 수 없었습니다" } } }, @@ -5305,12 +5352,12 @@ "label": "중지", "notification": { "success": { - "title": "", - "message": "" + "title": "컨테이너 중지됨", + "message": "컨테이너가 성공적으로 중지되었습니다" }, "error": { - "title": "", - "message": "" + "title": "컨테이너 중지 안 됨", + "message": "컨테이너를 중지할 수 없었습니다" } } }, @@ -5318,25 +5365,26 @@ "label": "재시작", "notification": { "success": { - "title": "", - "message": "" + "title": "컨테이너 다시 시작됨", + "message": "컨테이너가 성공적으로 다시 시작되었습니다" }, "error": { - "title": "", - "message": "" + "title": "컨테이너 다시 시작 안 됨", + "message": "컨테이너를 다시 시작할 수 없었습니다" } } }, "remove": { "label": "제거", + "confirm": "", "notification": { "success": { - "title": "", - "message": "" + "title": "컨테이너 제거됨", + "message": "컨테이너가 성공적으로 제거되었습니다" }, "error": { - "title": "", - "message": "" + "title": "컨테이너 제거 안 됨", + "message": "컨테이너를 제거할 수 없었습니다" } } }, @@ -5344,275 +5392,275 @@ "label": "새로고침", "notification": { "success": { - "title": "", - "message": "" + "title": "컨테이너 새로 고침됨", + "message": "이제 최신 데이터를 보고 있습니다" }, "error": { - "title": "", - "message": "" + "title": "컨테이너 새로 고침 안 됨", + "message": "컨테이너를 새로 고치는 중에 문제가 발생했습니다" } } }, "addToHomarr": { - "label": "", + "label": "Homarr에 추가", "notification": { "success": { - "title": "", - "message": "" + "title": "Homarr에 추가됨", + "message": "선택한 앱이 Homarr에 추가되었습니다" }, "error": { - "title": "", - "message": "" + "title": "Homarr에 추가할 수 없습니다", + "message": "선택한 앱을 Homarr에 추가할 수 없습니다" } }, "modal": { - "title": "" + "title": "Docker 컨테이너(들)를 Homarr에 추가" } } }, "error": { - "internalServerError": "", - "noColumns": "" + "internalServerError": "Docker 컨테이너를 가져오지 못했습니다", + "noColumns": "위젯 설정에서 열을 하나 이상 선택하십시오" } }, "kubernetes": { "cluster": { - "title": "", - "label": "", - "providers": "", - "version": "", - "architecture": "", + "title": "클러스터 대시보드", + "label": "클러스터", + "providers": "공급자", + "version": "버전", + "architecture": "아키텍처", "capacity": { - "title": "", + "title": "용량", "resource": { - "reserved": "", - "used": "" + "reserved": "예약됨", + "used": "사용 중" } }, "resources": { - "title": "", - "nodes": "", - "namespaces": "", - "ingresses": "", - "services": "", - "pods": "", - "configmaps": "", - "secrets": "", - "volumes": "" + "title": "리소스", + "nodes": "노드", + "namespaces": "네임스페이스", + "ingresses": "인그레스", + "services": "서비스", + "pods": "파드", + "configmaps": "ConfigMaps", + "secrets": "보안 비밀", + "volumes": "볼륨" } }, "nodes": { - "label": "", + "label": "노드", "field": { "name": { - "label": "" + "label": "이름" }, "state": { - "label": "", + "label": "상태", "option": { - "ready": "", - "NotReady": "" + "ready": "준비됨", + "NotReady": "준비 안 됨" } }, "cpu": { - "label": "" + "label": "CPU" }, "memory": { - "label": "" + "label": "RAM" }, "pods": { - "label": "" + "label": "파드" }, "operatingSystem": { - "label": "" + "label": "OS" }, "architecture": { - "label": "" + "label": "아키텍처" }, "kubernetesVersion": { - "label": "" + "label": "Kubernetes 버전" }, "creationTimestamp": { - "label": "" + "label": "생성됨" } }, "table": { - "search": "" + "search": "{count}개 노드 검색" } }, "namespaces": { - "label": "", + "label": "네임스페이스", "field": { "name": { - "label": "" + "label": "이름" }, "state": { - "label": "", + "label": "상태", "option": { - "active": "", - "terminating": "" + "active": "활성", + "terminating": "종료 중" } }, "creationTimestamp": { - "label": "" + "label": "생성됨" } }, "table": { - "search": "" + "search": "{count}개 네임스페이스 검색" } }, "ingresses": { - "label": "", + "label": "인그레스", "field": { "name": { - "label": "" + "label": "이름" }, "namespace": { - "label": "" + "label": "네임스페이스" }, "className": { - "label": "" + "label": "클래스 이름" }, "rulesAndPaths": { - "label": "" + "label": "규칙 및 경로" }, "creationTimestamp": { - "label": "" + "label": "생성됨" } }, "table": { - "search": "" + "search": "{count}개 인그레스 검색" } }, "services": { - "label": "", + "label": "서비스", "field": { "name": { - "label": "" + "label": "이름" }, "namespace": { - "label": "" + "label": "네임스페이스" }, "type": { - "label": "" + "label": "유형" }, "ports": { - "label": "" + "label": "포트" }, "targetPorts": { - "label": "" + "label": "대상 포트" }, "clusterIP": { - "label": "" + "label": "클러스터 IP" }, "creationTimestamp": { - "label": "" + "label": "생성됨" } }, "table": { - "search": "" + "search": "{count}개 서비스 검색" } }, "pods": { - "label": "", + "label": "파드", "field": { "name": { - "label": "" + "label": "이름" }, "namespace": { - "label": "" + "label": "네임스페이스" }, "image": { - "label": "" + "label": "이미지" }, "applicationType": { - "label": "" + "label": "애플리케이션 유형" }, "status": { - "label": "" + "label": "상태" }, "creationTimestamp": { - "label": "" + "label": "생성됨" } }, "table": { - "search": "" + "search": "{count}개 파드 검색" } }, "secrets": { - "label": "", + "label": "보안 비밀", "field": { "name": { - "label": "" + "label": "이름" }, "namespace": { - "label": "" + "label": "네임스페이스" }, "type": { - "label": "" + "label": "유형" }, "creationTimestamp": { - "label": "" + "label": "생성됨" } }, "table": { - "search": "" + "search": "{count}개 시크릿 검색" } }, "configmaps": { - "label": "", + "label": "ConfigMaps", "field": { "name": { - "label": "" + "label": "이름" }, "namespace": { - "label": "" + "label": "네임스페이스" }, "creationTimestamp": { - "label": "" + "label": "생성됨" } }, "table": { - "search": "" + "search": "{count}개 ConfigMap 검색" } }, "volumes": { - "label": "", + "label": "볼륨", "field": { "name": { - "label": "" + "label": "이름" }, "namespace": { - "label": "" + "label": "네임스페이스" }, "accessModes": { - "label": "" + "label": "액세스 모드" }, "storage": { - "label": "" + "label": "저장 공간" }, "storageClassName": { - "label": "" + "label": "스토리지 클래스 이름" }, "volumeMode": { - "label": "" + "label": "볼륨 모드" }, "volumeName": { - "label": "" + "label": "볼륨 이름" }, "status": { - "label": "" + "label": "상태" }, "creationTimestamp": { - "label": "" + "label": "생성됨" } }, "table": { - "search": "" + "search": "{count}개 볼륨 검색" } }, "error": { - "internalServerError": "" + "internalServerError": "Kubernetes 데이터를 가져오지 못했습니다" } }, "permission": { @@ -5721,28 +5769,28 @@ "kubernetes": { "label": "Kubernetes", "nodes": { - "label": "" + "label": "노드" }, "namespaces": { - "label": "" + "label": "네임스페이스" }, "ingresses": { - "label": "" + "label": "인그레스" }, "services": { - "label": "" + "label": "서비스" }, "pods": { - "label": "" + "label": "파드" }, "configmaps": { - "label": "" + "label": "ConfigMaps" }, "secrets": { - "label": "" + "label": "비밀" }, "volumes": { - "label": "" + "label": "볼륨" } }, "logs": { @@ -5845,86 +5893,86 @@ "label": "보드 가져오기" }, "newApp": { - "label": "" + "label": "새 앱 생성" }, "newIntegration": { - "label": "", + "label": "새 통합 생성", "children": { "detail": { - "title": "" + "title": "생성할 통합 유형 선택" } } }, "newUser": { - "label": "" + "label": "새 사용자 생성" }, "newInvite": { - "label": "" + "label": "새 초대 생성" }, "newGroup": { - "label": "" + "label": "새 그룹 생성" } } }, "preferences": { - "title": "", + "title": "환경 설정", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "변경할 환경 설정 선택", + "backHint": "뒤로 가려면 백스페이스 키를 누르거나 뒤로 버튼을 사용하세요", + "backAction": "뒤로 가기" } }, "notification": { "error": { - "message": "" + "message": "환경 설정을 업데이트할 수 없습니다" } }, "option": { "preferences": { - "label": "" + "label": "환경 설정 열기" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "활성화됨", + "disabled": "비활성화됨" }, "board": { - "none": "", - "unavailable": "" + "none": "없음", + "unavailable": "현재 선택됨 (사용 불가)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "없음", + "unavailable": "현재 선택됨 (사용 불가)" }, "colorScheme": { - "label": "", + "label": "색 구성표", "children": { "detail": { - "title": "" + "title": "색 구성표 선택" } } }, "locale": { - "label": "", + "label": "언어", "children": { "detail": { - "title": "" + "title": "선호하는 언어 선택" } } }, "defaultSearchEngineId": { - "label": "", + "label": "기본 검색 엔진", "children": { "detail": { - "title": "" + "title": "기본 검색 엔진 선택" } } }, "openSearchInNewTab": { - "label": "", + "label": "검색 결과를 새 탭에서 열기", "children": { "detail": { - "title": "" + "title": "검색 결과를 새 탭에서 열기" } } }, @@ -5961,18 +6009,18 @@ } }, "pingIconsEnabled": { - "label": "", + "label": "핑에 아이콘 사용", "children": { "detail": { - "title": "" + "title": "핑에 아이콘 사용" } } }, "enableRightClickOnWidgets": { - "label": "", + "label": "위젯 우클릭 활성화", "children": { "detail": { - "title": "" + "title": "위젯 우클릭 활성화" } } }, @@ -5984,55 +6032,55 @@ } }, "media": { - "help": "", - "requestMovie": "", - "requestSeries": "", - "openIn": "", + "help": "영화 또는 TV 프로그램을 검색하여 요청", + "requestMovie": "영화 요청", + "requestSeries": "시리즈 요청", + "openIn": "{kind}에서 열기", "group": { - "title": "" + "title": "영화 및 TV 프로그램" }, "action": { "search": { - "label": "", - "description": "", + "label": "영화 또는 TV 프로그램 검색", + "description": "미디어 요청 통합을 검색하려면 입력을 시작하세요", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "미디어 검색을 활성화하려면 Overseerr, Jellyseerr 또는 Seerr 통합을 추가하세요.", + "scoped": "이 위젯에는 접근 가능한 미디어 요청 통합이 없습니다." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "사용 가능", + "partiallyAvailable": "일부", + "processing": "처리 중", + "requested": "요청됨", + "pending": "요청됨" } }, "external": { - "help": "", + "help": "외부 검색 엔진 사용", "group": { "searchEngine": { "title": "검색 엔진", - "tipDdgBangs": "", + "tipDdgBangs": "팁: 여기에서 DuckDuckGo 뱅을 사용할 수도 있습니다 (예: !something)", "bang": { - "searchWithQuery": "", + "searchWithQuery": "\"{query}\" 검색: {label}", "pressEnterToOpen": "Enter 키로 열기", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "engineSelected": "{label} 선택됨 (!{bang})", + "typeQueryToContinue": "계속하려면 검색어를 입력하세요", + "emptyBangHint": "뱅을 입력하세요 (예: !yt), 그런 다음 스페이스바를 눌러 선택하세요" }, "children": { "action": { "search": { - "label": "" + "label": "{name}으로 검색" } }, "detail": { "title": "검색 엔진 동작 선택" }, "searchResults": { - "title": "" + "title": "동작을 위해 검색 결과 선택" } }, "option": { @@ -6091,74 +6139,74 @@ }, "no-default": { "label": "기본 검색 엔진 없음", - "description": "" + "description": "환경 설정에서 기본 검색 엔진 설정" }, "search": { - "label": "" + "label": "\"{query}\"을 {name}으로 검색" }, "from-integration": { - "description": "" + "description": "검색을 시작하려면 입력하세요" } } }, "local": { - "title": "" + "title": "로컬 결과" } } }, "page": { - "help": "", + "help": "페이지 검색", "group": { "page": { - "title": "", + "title": "페이지", "option": { "manageHome": { - "label": "" + "label": "홈 페이지 관리" }, "manageBoard": { - "label": "" + "label": "보드 관리" }, "manageApp": { - "label": "" + "label": "앱 관리" }, "manageIntegration": { - "label": "" + "label": "통합 관리" }, "manageSearchEngine": { - "label": "" + "label": "검색 엔진 관리" }, "manageMedia": { - "label": "" + "label": "미디어 관리" }, "manageUser": { "label": "사용자 관리" }, "manageInvite": { - "label": "" + "label": "초대 관리" }, "manageGroup": { - "label": "" + "label": "그룹 관리" }, "manageDocker": { - "label": "" + "label": "Docker 관리" }, "manageApi": { - "label": "" + "label": "Swagger API" }, "manageLog": { - "label": "" + "label": "로그 보기" }, "manageTask": { - "label": "" + "label": "작업 관리" }, "manageSettings": { - "label": "" + "label": "전역 설정" }, "about": { "label": "정보" }, "homeBoard": { - "label": "" + "label": "홈 보드" }, "preferences": { "label": "기본 설정" @@ -6168,30 +6216,30 @@ } }, "userGroup": { - "help": "", + "help": "사용자 또는 그룹 검색", "group": { "user": { "title": "사용자", "children": { "action": { "detail": { - "label": "" + "label": "사용자 세부 정보 표시" } }, "detail": { - "title": "" + "title": "사용자에 대한 동작 선택" } } }, "group": { - "title": "", + "title": "그룹", "children": { "action": { "detail": { - "label": "" + "label": "그룹 세부 정보 표시" }, "manageMember": { - "label": "" + "label": "멤버 관리" }, "managePermission": { "label": "권한 관리" @@ -6212,7 +6260,7 @@ "label": "이름" }, "short": { - "label": "" + "label": "짧음" }, "urlTemplate": { "label": "URL 검색 템플릿" @@ -6228,7 +6276,7 @@ "title": "아직 검색 엔진이 없습니다", "action": "첫 검색 엔진을 생성" }, - "interactive": "" + "interactive": "대화형, 통합 사용" }, "create": { "title": "새 검색 엔진", @@ -6257,8 +6305,8 @@ }, "configControl": "설정", "searchEngineType": { - "generic": "", - "fromIntegration": "" + "generic": "일반", + "fromIntegration": "통합에서" } }, "delete": { @@ -6279,19 +6327,19 @@ "media": { "request": { "modal": { - "title": "", + "title": "\"{name}\" 요청", "table": { "header": { - "season": "", - "episodes": "", - "status": "" + "season": "시즌", + "episodes": "에피소드", + "status": "상태" }, "status": { - "requested": "" + "requested": "요청됨" } }, "button": { - "send": "" + "send": "요청 보내기" } } } @@ -6338,52 +6386,52 @@ }, "hostnames": { "title": "신뢰할 수 있는 인증서 호스트네임", - "description": "", + "description": "일부 인증서는 Homarr가 사용하는 특정 도메인의 요청을 허용하지 않습니다. 이로 인해 인증서 지문이 있는 모든 신뢰하는 호스트네임이 이러한 제한을 우회하는 데 사용됩니다.", "noResults": { - "title": "" + "title": "호스트네임 없음" }, - "toCertificates": "" + "toCertificates": "인증서" } }, "action": { "create": { - "label": "", + "label": "인증서 추가", "notification": { "success": { - "title": "", - "message": "" + "title": "인증서 추가됨", + "message": "인증서가 성공적으로 추가되었습니다" }, "error": { - "title": "", - "message": "" + "title": "인증서 추가 실패", + "message": "인증서를 추가할 수 없습니다" } } }, "remove": { - "label": "", - "confirm": "", + "label": "인증서 제거", + "confirm": "인증서를 제거하시겠습니까?", "notification": { "success": { - "title": "", - "message": "" + "title": "인증서 제거됨", + "message": "인증서가 성공적으로 제거되었습니다" }, "error": { - "title": "", - "message": "" + "title": "인증서 제거 안 됨", + "message": "인증서를 제거할 수 없습니다" } } }, "removeHostname": { - "label": "", - "confirm": "", + "label": "신뢰하는 호스트네임 제거", + "confirm": "이 신뢰하는 호스트네임을 제거하시겠습니까? 몇몇 통합이 작동하지 않을 수 있습니다.", "notification": { "success": { - "title": "", - "message": "" + "title": "호스트네임 제거됨", + "message": "호스트네임 제거 완료" }, "error": { - "title": "", - "message": "" + "title": "호스트네임 제거 실패", + "message": "호스트네임을 제거할 수 없었습니다" } } } @@ -6392,42 +6440,42 @@ "log": { "level": { "option": { - "debug": "", - "info": "", - "warn": "", - "error": "" + "debug": "디버그", + "info": "정보", + "warn": "경고", + "error": "오류" } } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "문서 읽기", + "next": "다음", + "prev": "뒤로", + "done": "완료", + "skip": "투어 건너뛰기", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Homarr에 오신 것을 환영합니다!", + "description": "이곳은 제어 센터입니다. 여기에서 보드, 앱, 통합, 사용자 및 서버 설정을 관리합니다. 각 섹션을 둘러보겠습니다." }, "boardsList": { - "title": "", - "description": "" + "title": "보드", + "description": "모든 대시보드가 여기에 있습니다. 각 보드는 자체 레이아웃, 배경 및 접근 설정을 갖습니다. 누가 생성했는지, 공개인지 비공개인지 확인할 수 있습니다." }, "boardsCreate": { - "title": "", - "description": "" + "title": "보드 만들기", + "description": "새 대시보드를 만들거나 이전 Homarr 설치에서 가져오려면 여기를 클릭하세요. 각 보드는 공유할 수 있는 고유 URL을 갖습니다." }, "appsList": { - "title": "", - "description": "" + "title": "앱", + "description": "추가한 모든 앱 — 셀프 호스팅 서비스에 대한 링크입니다. 각 앱에는 아이콘, 선택적 상태 확인 및 대시보드의 상태 배지가 있습니다." }, "appsCreate": { - "title": "", - "description": "" + "title": "앱 추가", + "description": "여기에서 새 서비스를 등록하세요. 이름, URL, 아이콘을 지정하면 실시간 상태 모니터링과 함께 보드에 타일로 표시됩니다." }, "integrationsList": { - "title": "", + "title": "통합", "description": "Homarr에 연결된 서비스는 Sonarr, Radarr, Plex, Jellyfin 등 50개 이상입니다. 모든 자격증명은 정지 상태에서 암호화됩니다." }, "integrationsCreate": { diff --git a/packages/translation/src/lang/lt.json b/packages/translation/src/lang/lt.json index ba5d1d7b3..efd19f523 100644 --- a/packages/translation/src/lang/lt.json +++ b/packages/translation/src/lang/lt.json @@ -8,9 +8,9 @@ "action": { "scratch": "", "importOldmarr": "", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Atkurti iš SQLite atsarginės kopijos", + "restoreSqliteDescription": "Įkelkite pilną SQLite duomenų bazės atsarginę kopiją iš ankstesnio Homarr egzemplioriaus. Tai atkurs visas lentas, naudotojus, programėles, integracijas ir nustatymus.", + "backToOptions": "← Atgal į sąrankos parinktis" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "" }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Integracijos", + "subtitle": "Pasirinkite naudojamas paslaugas.", + "description": "Pasirinkite integracijas, kurias norite prijungti. Automatiškai sukonfigūruosime jūsų valdymo skydelį su atitinkamais valdikliais.", "action": { - "continue": "", - "skip": "" + "continue": "Tęsti", + "skip": "Kol kas praleisti" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} iš {total}", + "skip": "Praleisti šią integraciją", + "finishing": "Konfigūruojamas valdymo skydelis...", "error": { - "title": "", - "message": "" + "title": "Sąranka nepavyko", + "message": "Kažkas nepavyko konfigūruojant valdymo skydelį. Bandykite dar kartą." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "URL pagalbininkai", + "description": "Šie pagalbininkai bando atspėti jūsų paslaugų URL. Jei nepavyksta, tiesiog įveskite adresą rankiniu būdu." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Bazinis URL", + "placeholder": "homelab.local arba 192.168.1.1", + "hint": "Įveskite pagrindinį domeną ar IP, kad automatiškai užpildytumėte integracijų URL", + "warning": "Nustatę bazinį URL dabar, automatiškai užpildysite visus integracijų URL, taip sutaupydami laiko diegimo metu", + "preview": "pvz., {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Subdomenas", + "hostPort": "Mazgas:Prievadas" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker aptiko {count} paslaugas", + "detectedBreakdown": "{integrations} integracijų · {apps} programėlių", + "summary": "Homarr aptiko {apps} programėlių, iš kurių {integrations} turi integracijas", + "appBadge": "Programėlė", + "appSectionLabel": "Programėlės, pridedamos į valdymo skydelį (pasirinkta {count})", + "scanning": "Nuskaitomas Docker...", + "scanningDescription": "Ieškoma veikiančių konteinerių jūsų sistemoje" } }, "finish": { @@ -154,49 +154,49 @@ "name": "Vartotojas", "page": { "login": { - "title": "", - "subtitle": "" + "title": "Prisijunkite prie savo paskyros", + "subtitle": "Sveiki sugrįžę! Prašome įvesti savo prisijungimo duomenis" }, "invite": { "title": "Prisijungti prie Homarr", - "subtitle": "", - "description": "" + "subtitle": "Sveiki, čia Homarr! Prašome susikurti paskyrą", + "description": "Jus pakvietė {username}" }, "init": { - "title": "", - "subtitle": "" + "title": "Nauja Homarr instaliacija", + "subtitle": "Prašome sukurti pradinį administratorių" } }, "field": { "email": { "label": "El. paštas", - "verified": "" + "verified": "Patvirtinta" }, "username": { - "label": "" + "label": "Vartotojo vardas" }, "password": { "label": "Slaptažodis", - "suggestionsTitle": "", + "suggestionsTitle": "Slaptažodžio reikalavimai", "suggestion": { - "length": "", - "lowercase": "", - "uppercase": "", - "number": "", - "special": "" + "length": "Bent 8 simboliai", + "lowercase": "Yra mažoji raidė", + "uppercase": "Yra didžioji raidė", + "number": "Yra skaičius", + "special": "Yra specialistis simbolis" } }, "passwordConfirm": { "label": "Patvirtinti slaptažodį" }, "previousPassword": { - "label": "" + "label": "Ankstesnis slaptažodis" }, "homeBoard": { - "label": "" + "label": "Pagrindinė lenta" }, "pingIconsEnabled": { - "label": "" + "label": "Naudoti piktogramas pingams" }, "enableRightClickOnWidgets": { "label": "", @@ -209,29 +209,29 @@ "label": "" }, "ddgBangs": { - "label": "" + "label": "Įjungti DuckDuckGo bangs" } }, "error": { - "usernameTaken": "" + "usernameTaken": "Vartotojo vardas jau užimtas" }, "action": { "login": { "label": "Prisijungti", - "labelWith": "", + "labelWith": "Prisijungti su {provider}", "notification": { "success": { - "title": "", - "message": "" + "title": "Prisijungimas sėkmingas", + "message": "Dabar esate prisijungę" }, "error": { - "title": "", - "message": "" + "title": "Prisijungti nepavyko", + "message": "Jūsų prisijungimas nepavyko" } }, "forgotPassword": { - "label": "", - "description": "" + "label": "Pamiršote slaptažodį?", + "description": "Administratorius gali naudoti šią komandą norėdamas atkurti jūsų slaptažodį:" } }, "register": { @@ -239,33 +239,33 @@ "notification": { "success": { "title": "Paskyra sukurta", - "message": "" + "message": "Norėdami tęsti, prašome prisijungti" }, "error": { - "title": "", - "message": "" + "title": "Paskyros sukūrimas nepavyko", + "message": "Jūsų paskyra negalėjo būti sukurta" } } }, "create": "Sukurti vartotoją", "changePassword": { - "label": "", + "label": "Keisti slaptažodį", "notification": { "success": { - "message": "" + "message": "Slaptažodis sėkmingai pakeistas" }, "error": { - "message": "" + "message": "Nepavyko pakeisti slaptažodžio" } } }, "changeHomeBoard": { "notification": { "success": { - "message": "" + "message": "Pagrindinė lenta sėkmingai pakeista" }, "error": { - "message": "" + "message": "Nepavyko pakeisti pagrindinės lentos" } } }, @@ -282,58 +282,58 @@ "changeFirstDayOfWeek": { "notification": { "success": { - "message": "" + "message": "Savaitės pirmoji diena sėkmingai pakeista" }, "error": { - "message": "" + "message": "Nepavyko pakeisti savaitės pirmosios dienos" } } }, "changePingIconsEnabled": { "notification": { "success": { - "message": "" + "message": "Ping piktogramos sėkmingai perjungtos" }, "error": { - "message": "" + "message": "Nepavyko perjungti ping piktogramų" } } }, "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo bangs perjungti sėkmingai" }, "error": { - "message": "" + "message": "Nepavyko perjungti DuckDuckGo bangs" } } }, "manageAvatar": { "changeImage": { - "label": "", + "label": "Keisti paveikslėlį", "notification": { "success": { - "message": "" + "message": "Paveikslėlis sėkmingai pakeistas" }, "error": { - "message": "" + "message": "Nepavyko pakeisti paveikslėlio" }, "toLarge": { - "title": "", - "message": "" + "title": "Paveikslėlis per didelis", + "message": "Didžiausias paveikslėlio dydis yra {size}" } } }, "removeImage": { - "label": "", - "confirm": "", + "label": "Pašalinti paveikslėlį", + "confirm": "Ar tikrai norite pašalinti paveikslėlį?", "notification": { "success": { - "message": "" + "message": "Paveikslėlis sėkmingai pašalintas" }, "error": { - "message": "" + "message": "Nepavyko pašalinti paveikslėlio" } } } @@ -341,34 +341,34 @@ "editProfile": { "notification": { "success": { - "message": "" + "message": "Profilis sėkmingai atnaujintas" }, "error": { - "message": "" + "message": "Nepavyko atnaujinti profilio" } } }, "delete": { - "label": "", - "description": "", - "confirm": "" + "label": "Pašalinti vartotoją visam laikui", + "description": "Pašalina šį vartotoją kartu su jo nuostatomis. Lentos nebus ištrintos. Vartotojas nebus informuotas.", + "confirm": "Ar tikrai norite pašalinti vartotoją {username} su jo nuostatomis?" }, "select": { - "label": "", - "notFound": "" + "label": "Pasirinkti vartotoją", + "notFound": "Vartotojas nerastas" }, "transfer": { - "label": "" + "label": "Pasirinkti naują savininką" } } }, "group": { - "title": "", - "name": "", - "search": "", + "title": "Grupės", + "name": "Grupė", + "search": "Ieškoti grupės", "field": { "name": "Pavadinimas", - "members": "", + "members": "Nariai", "homeBoard": { "label": "", "description": "" @@ -383,8 +383,8 @@ "title": "Administratorius", "item": { "admin": { - "label": "", - "description": "" + "label": "Administratorius", + "description": "Nariai su šiuo leidimu turi visišką prieigą prie visų funkcijų ir nustatymų" } } }, @@ -392,20 +392,20 @@ "title": "Programėlės", "item": { "create": { - "label": "", - "description": "" + "label": "Kurti programas", + "description": "Leisti nariams kurti programas" }, "use-all": { - "label": "", - "description": "" + "label": "Naudoti visas programas", + "description": "Leisti nariams pridėti bet kokias programas prie savo lentų" }, "modify-all": { - "label": "", - "description": "" + "label": "Modifikuoti visas programas", + "description": "Leisti nariams modifikuoti visas programas" }, "full-all": { - "label": "", - "description": "" + "label": "Visiška programų prieiga", + "description": "Leisti nariams tvarkyti, naudoti ir ištrinti bet kokią programą" } } }, @@ -413,165 +413,165 @@ "title": "Lentos", "item": { "create": { - "label": "", - "description": "" + "label": "Kurti lentas", + "description": "Leisti nariams kurti lentas" }, "view-all": { - "label": "", - "description": "" + "label": "Peržiūrėti visas lentas", + "description": "Leisti nariams peržiūrėti visas lentas" }, "modify-all": { - "label": "", - "description": "" + "label": "Modifikuoti visas lentas", + "description": "Leisti nariams modifikuoti visas lentas (neapima prieigos kontrolės ir pavojingos zonos)" }, "full-all": { - "label": "", - "description": "" + "label": "Visiška lentų prieiga", + "description": "Leisti nariams peržiūrėti, modifikuoti ir ištrinti visas lentas (įskaitant prieigos kontrolę ir pavojingą zoną)" } } }, "integration": { - "title": "", + "title": "Integracijos", "item": { "create": { - "label": "", - "description": "" + "label": "Kurti integracijas", + "description": "Leisti nariams kurti integracijas" }, "use-all": { - "label": "", - "description": "" + "label": "Naudoti visas integracijas", + "description": "Leisti nariams pridėti bet kokias integracijas prie savo lentų" }, "interact-all": { - "label": "", - "description": "" + "label": "Sąveikauti su bet kokia integracija", + "description": "Leisti nariams sąveikauti su bet kokia integracija" }, "full-all": { - "label": "", - "description": "" + "label": "Visiška integracijų prieiga", + "description": "Leisti nariams tvarkyti, naudoti ir sąveikauti su bet kokia integracija" } } }, "media": { - "title": "", + "title": "Medijos", "item": { "upload": { - "label": "", - "description": "" + "label": "Įkelti medijas", + "description": "Leisti nariams įkelti medijas" }, "view-all": { - "label": "", - "description": "" + "label": "Peržiūrėti visas medijas", + "description": "Leisti nariams peržiūrėti visas medijas" }, "full-all": { - "label": "", - "description": "" + "label": "Visiška medijos prieiga", + "description": "Leisti nariams tvarkyti ir ištrinti bet kokią mediją" } } }, "other": { - "title": "", + "title": "Kita", "item": { "view-logs": { - "label": "", - "description": "" + "label": "Peržiūrėti žurnalus", + "description": "Leisti nariams peržiūrėti žurnalus" } } }, "search-engine": { - "title": "", + "title": "Paieškos sistemos", "item": { "create": { - "label": "", - "description": "" + "label": "Kurti paieškos sistemas", + "description": "Leisti nariams kurti paieškos sistemas" }, "modify-all": { - "label": "", - "description": "" + "label": "Modifikuoti visas paieškos sistemas", + "description": "Leisti nariams modifikuoti visas paieškos sistemas" }, "full-all": { - "label": "", - "description": "" + "label": "Visiška paieškos sistemų prieiga", + "description": "Leisti nariams tvarkyti ir ištrinti bet kokią paieškos sistemą" } } } }, "memberNotice": { - "mixed": "", - "external": "" + "mixed": "Kai kurie nariai yra iš išorinių tiekėjų ir čia negali būti tvarkomi", + "external": "Visi nariai yra iš išorinių tiekėjų ir čia negali būti tvarkomi" }, "reservedNotice": { - "message": "" + "message": "Ši grupė yra rezervuota sistemos naudojimui ir riboja kai kuriuos veiksmus. " }, "action": { "create": { - "label": "", + "label": "Nauja grupė", "notification": { "success": { - "message": "" + "message": "Grupė sėkmingai sukurta" }, "error": { - "message": "" + "message": "Grupės sukurti nepavyko" } } }, "transfer": { - "label": "", - "description": "", - "confirm": "", + "label": "Perduoti nuosavybę", + "description": "Perduoti šios grupės nuosavybę kitam vartotojui.", + "confirm": "Ar tikrai norite perduoti grupės {name} nuosavybę {username}?", "notification": { "success": { - "message": "" + "message": "Grupė {group} sėkmingai perduota {user}" }, "error": { - "message": "" + "message": "Nepavyko perduoti nuosavybės" } } }, "addMember": { - "label": "" + "label": "Pridėti narį" }, "removeMember": { - "label": "", - "confirm": "" + "label": "Pašalinti narį", + "confirm": "Ar tikrai norite pašalinti {user} iš šios grupės?" }, "delete": { - "label": "", - "description": "", - "confirm": "", + "label": "Ištrinti grupę", + "description": "Ištrynus grupę, kelio atgal nėra. Būkite tikri.", + "confirm": "Ar tikrai norite ištrinti grupę {name}?", "notification": { "success": { - "message": "" + "message": "Grupė {name} sėkmingai ištrinta" }, "error": { - "message": "" + "message": "Nepavyko ištrinti grupės {name}" } } }, "changePermissions": { "notification": { "success": { - "title": "", - "message": "" + "title": "Leidimai išsaugoti", + "message": "Leidimai sėkmingai išsaugoti" }, "error": { - "title": "", - "message": "" + "title": "Leidimai neišsaugoti", + "message": "Leidimai nebuvo išsaugoti" } } }, "update": { "notification": { "success": { - "message": "" + "message": "Grupė {name} sėkmingai išsaugota" }, "error": { - "message": "" + "message": "Nepavyko išsaugoti grupės {name}" } } }, "select": { - "label": "", - "notFound": "" + "label": "Pasirinkti grupę", + "notFound": "Grupė nerasta" }, "settings": { "board": { @@ -609,47 +609,47 @@ "list": { "title": "Programėlės", "noResults": { - "title": "", - "action": "" + "title": "Kol kas programų nėra", + "action": "Sukurti pirmąją programą" } }, "create": { - "title": "", + "title": "Nauja programa", "notification": { "success": { - "title": "", - "message": "" + "title": "Sukūrimas sėkmingas", + "message": "Programa sėkmingai sukurta" }, "error": { - "title": "", - "message": "" + "title": "Sukūrimas nepavyko", + "message": "Programos sukurti nepavyko" } } }, "edit": { - "title": "", + "title": "Redaguoti programą", "notification": { "success": { - "title": "", - "message": "" + "title": "Pakeitimai sėkmingai pritaikyti", + "message": "Programa sėkmingai išsaugota" }, "error": { - "title": "", - "message": "" + "title": "Nepavyko pritaikyti pakeitimų", + "message": "Programos išsaugoti nepavyko" } } }, "delete": { - "title": "", - "message": "", + "title": "Ištrinti programą", + "message": "Ar tikrai norite ištrinti programą {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Ištrynimas sėkmingas", + "message": "Programa sėkmingai ištrinta" }, "error": { - "title": "", - "message": "" + "title": "Ištrynimas nepavyko", + "message": "Nepavyko ištrinti programos" } } } @@ -659,10 +659,10 @@ "label": "Pavadinimas" }, "description": { - "label": "" + "label": "Aprašymas" }, "url": { - "label": "" + "label": "URL" }, "useDifferentUrlForPing": { "checkbox": { @@ -673,8 +673,8 @@ }, "action": { "select": { - "label": "", - "notFound": "", + "label": "Pasirinkti programą", + "notFound": "Programa nerasta", "search": "", "noResults": "", "action": "", @@ -896,22 +896,22 @@ "integration": { "page": { "list": { - "title": "", - "search": "", + "title": "Integracijos", + "search": "Ieškoti integracijų", "noResults": { - "title": "" + "title": "Kol kas integracijų nėra" } }, "create": { - "title": "", + "title": "Nauja {name} integracija", "notification": { "success": { - "title": "", - "message": "" + "title": "Sukūrimas sėkmingas", + "message": "Integracija sėkmingai sukurta" }, "error": { - "title": "", - "message": "" + "title": "Sukūrimas nepavyko", + "message": "Integracijos sukurti nepavyko" } }, "app": { @@ -931,15 +931,15 @@ } }, "edit": { - "title": "", + "title": "Redaguoti {name} integraciją", "notification": { "success": { - "title": "", - "message": "" + "title": "Pakeitimai sėkmingai pritaikyti", + "message": "Integracija sėkmingai išsaugota" }, "error": { - "title": "", - "message": "" + "title": "Nepavyko pritaikyti pakeitimų", + "message": "Integracijos išsaugoti nepavyko" } }, "app": { @@ -951,16 +951,16 @@ } }, "delete": { - "title": "", - "message": "", + "title": "Ištrinti integraciją", + "message": "Ar tikrai norite ištrinti integraciją {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Ištrynimas sėkmingas", + "message": "Integracija sėkmingai ištrinta" }, "error": { - "title": "", - "message": "" + "title": "Ištrynimas nepavyko", + "message": "Nepavyko ištrinti integracijos" } } } @@ -970,7 +970,7 @@ "label": "Pavadinimas" }, "url": { - "label": "" + "label": "URL" }, "attemptSearchEngineCreation": { "label": "", @@ -987,52 +987,52 @@ "placeholder": "" }, "apiKeySettings": { - "label": "" + "label": "Gauti API raktą" } }, "action": { - "create": "" + "create": "Nauja integracija" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} valdikliai", + "noWidgets": "Nėra valdiklių", + "detected": "Aptikta per Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Medija", + "calendar": "Kalendorius", + "mediaSearch": "Paieška", + "mediaRelease": "Leidiniai", + "mediaRequest": "Užklausos", + "downloadClient": "Atsisiuntimai", + "usenet": "Usenet", + "torrent": "Torrentas", + "miscellaneous": "Įvairūs", + "smartHomeServer": "Išmanieji namai", + "indexerManager": "Indeksuotojas", + "healthMonitoring": "Sveikata", + "search": "Paieška", + "mediaTranscoding": "Transkodavimas", + "networkController": "Tinklas", + "releasesProvider": "Leidiniai", + "notifications": "Pranešimai", + "firewall": "Ugniasienė", + "timetable": "Tvarkaraštis", + "photoService": "Nuotraukos", + "documents": "Dokumentai", + "notes": "Užrašai", + "mediaMonitoring": "Stebėjimas", + "speedtest": "Greičio testas", + "analytics": "Analizė", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Medijos biblioteka", + "uptimeMonitoring": "Veikimo stebėjimas" }, "testConnection": { "action": { - "create": "", - "edit": "" + "create": "Tikrinti ryšį ir kurti", + "edit": "Tikrinti ryšį ir išsaugoti" }, "error": { "common": { @@ -1160,71 +1160,71 @@ } } }, - "alertNotice": "", + "alertNotice": "Išsaugojimo mygtukas yra įjungtas, kai sėkmingai užmezgamas ryšys", "notification": { "success": { - "title": "", - "message": "" + "title": "Ryšys sėkmingas", + "message": "Ryšys sėkmingai užmegztas" }, "invalidUrl": { "title": "Klaidingas URL", - "message": "" + "message": "URL yra netinkamas" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "Trūksta prisijungimo duomenų", + "message": "Ne visi prisijungimo duomenys buvo pateikti" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "Neteisingi prisijungimo duomenys", + "message": "Prisijungimo duomenys neteisingi" }, "commonError": { - "title": "", - "message": "" + "title": "Ryšio nepavyko užmegzti", + "message": "Ryšio užmegzti nepavyko" }, "badRequest": { - "title": "", - "message": "" + "title": "Bloga užklausa", + "message": "Užklausa buvo neteisingai suformuota" }, "unauthorized": { - "title": "", - "message": "" + "title": "Neleidžiama", + "message": "Tikriausiai neteisingi prisijungimo duomenys" }, "forbidden": { - "title": "", - "message": "" + "title": "Draudžiama", + "message": "Tikriausiai trūksta leidimų" }, "notFound": { - "title": "", - "message": "" + "title": "Nerasta", + "message": "Tikriausiai neteisingas url ar kelias" }, "internalServerError": { - "title": "", - "message": "" + "title": "Vidinė serverio klaida", + "message": "Serveris susidūrė su klaida" }, "serviceUnavailable": { - "title": "", - "message": "" + "title": "Paslauga nepasiekiama", + "message": "Serveris šiuo metu nepasiekiamas" }, "connectionAborted": { - "title": "", - "message": "" + "title": "Ryšys nutrauktas", + "message": "Ryšys buvo nutrauktas" }, "domainNotFound": { - "title": "", - "message": "" + "title": "Domenas nerastas", + "message": "Domeno rasti nepavyko" }, "connectionRefused": { - "title": "", - "message": "" + "title": "Ryšys atmestas", + "message": "Ryšys buvo atmestas" }, "invalidJson": { - "title": "", - "message": "" + "title": "Netinkamas JSON", + "message": "Atsakymas nebuvo tinkamas JSON" }, "wrongPath": { - "title": "", - "message": "" + "title": "Neteisingas kelias", + "message": "Tikriausiai kelias nėra teisingas" }, "tooManyRequests": { "title": "", @@ -1233,29 +1233,29 @@ } }, "secrets": { - "title": "", - "lastUpdated": "", + "title": "Paslaptys", + "lastUpdated": "Paskutinį kartą atnaujinta {date}", "notSet": { "label": "", "tooltip": "" }, - "secureNotice": "", + "secureNotice": "Šios paslapties negalima gauti po sukūrimo", "reset": { - "title": "", - "message": "" + "title": "Atstatyti paslaptį", + "message": "Ar tikrai norite atstatyti šią paslaptį?" }, "noSecretsRequired": { - "segmentTitle": "", - "text": "" + "segmentTitle": "Nėra paslapčių", + "text": "Šiai integracijai nereikia paslapčių" }, "kind": { "username": { - "label": "", - "newLabel": "" + "label": "Vartotojo vardas", + "newLabel": "Naujas vartotojo vardas" }, "apiKey": { - "label": "", - "newLabel": "" + "label": "API raktas", + "newLabel": "Naujas API raktas" }, "password": { "label": "Slaptažodis", @@ -1310,33 +1310,33 @@ "newLabel": "" }, "slug": { - "label": "", - "newLabel": "" + "label": "Būsenos puslapio trumpinys", + "newLabel": "Naujas būsenos puslapio trumpinys" } } }, "permission": { - "use": "", - "interact": "", - "full": "" + "use": "Pasirinkite integracijas elementuose", + "interact": "Sąveikauti su integracijomis", + "full": "Visiška integracijų prieiga" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Savarankiškai talpinamas audioknygų ir tinklalaidžių serveris" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Savarankiškai talpinamas muzikos transliavimo serveris su Subsonic API suderinamumu" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Savarankiškai talpinamas veikimo stebėjimas su viešais būsenos puslapiais", "secret": { "slug": { - "description": "" + "description": "Jūsų viešo būsenos puslapio trumpinys. Jei nenustatyta, numatyta reikšmė \"default\"." }, "apiKey": { - "description": "" + "description": "Pasirinktinis API raktas autentifikuotai /metrics prieigai" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Dokumentų valdymo sistema, skirta nuskaitytų dokumentų archyvavimui ir tvarkymui" }, "patchmon": { "name": "", @@ -1358,185 +1358,185 @@ } }, "media": { - "plural": "", - "search": "", + "plural": "Medijos", + "search": "Ieškoti medijos", "field": { "name": "Pavadinimas", - "size": "", + "size": "Dydis", "creator": "Kūrėjas" }, "action": { "upload": { - "label": "", - "file": "", + "label": "Įkelti mediją", + "file": "Pasirinkti failą", "notification": { "success": { - "message": "" + "message": "Medija sėkmingai įkelta" }, "error": { - "message": "" + "message": "Medijos įkelti nepavyko" } } }, "delete": { - "label": "", - "description": "", + "label": "Ištrinti mediją", + "description": "Ar tikrai norite ištrinti mediją ?", "notification": { "success": { - "message": "" + "message": "Medija sėkmingai ištrinta" }, "error": { - "message": "" + "message": "Medijos ištrinti nepavyko" } } }, "copy": { - "label": "" + "label": "Kopijuoti URL" }, "open": { "label": "" } }, "noResults": { - "title": "" + "title": "Nėra įkelta medijos" } }, "common": { "success": "", - "beta": "", - "error": "", + "beta": "Beta", + "error": "Klaida", "action": { - "add": "", - "apply": "", - "backToOverview": "", - "skip": "", + "add": "Pridėti", + "apply": "Taikyti", + "backToOverview": "Atgal į apžvalgą", + "skip": "Praleisti", "change": "", "create": "Sukurti", "createAnother": "", - "edit": "", - "import": "", - "insert": "", + "edit": "Redaguoti", + "import": "Importuoti", + "insert": "Įterpti", "remove": "Pašalinti", - "save": "", + "save": "Išsaugoti", "saveChanges": "Išsaugoti pakeitimus", "cancel": "Atšaukti", - "delete": "", - "discard": "", + "delete": "Ištrinti", + "discard": "Atmesti", "close": "", - "confirm": "", - "continue": "", - "previous": "", - "next": "", - "checkoutDocs": "", + "confirm": "Patvirtinti", + "continue": "Tęsti", + "previous": "Ankstesnis", + "next": "Kitas", + "checkoutDocs": "Peržiūrėti dokumentaciją", "checkLogs": "", - "tryAgain": "", - "loading": "", - "show": "", - "hide": "" + "tryAgain": "Bandyti dar kartą", + "loading": "Įkeliama", + "show": "Rodyti", + "hide": "Slėpti" }, - "here": "", + "here": "čia", "iconPicker": { - "label": "", - "header": "", + "label": "Piktogramos URL", + "header": "Įveskite pavadinimą ar objektus, kad filtruoti piktogramas... Homarr ieškos per {countIcons} piktogramas.", "headerLoading": "", "noResults": "", "error": "" }, "colorScheme": { "options": { - "auto": "", + "auto": "Automatinis", "light": "", "dark": "" } }, "information": { - "min": "", - "max": "", - "days": "", - "hours": "", - "minutes": "" + "min": "Min", + "max": "Maks", + "days": "Dienos", + "hours": "Valandos", + "minutes": "Minutės" }, "notification": { "create": { - "success": "", - "error": "" + "success": "Sukūrimas sėkmingas", + "error": "Sukūrimas nepavyko" }, "delete": { - "success": "", - "error": "" + "success": "Ištrynimas sėkmingas", + "error": "Ištrynimas nepavyko" }, "update": { - "success": "", - "error": "" + "success": "Pakeitimai sėkmingai pritaikyti", + "error": "Nepavyko pritaikyti pakeitimų" }, "transfer": { - "success": "", - "error": "" + "success": "Perdavimas sėkmingas", + "error": "Perdavimas nepavyko" } }, "multiSelect": { - "placeholder": "" + "placeholder": "Pasirinkite vieną ar daugiau reikšmių" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "Pridėti daugiau reikšmių", + "addLabel": "Pridėti {value}" }, "select": { - "placeholder": "", + "placeholder": "Pasirinkite reikšmę", "badge": { - "recommended": "" + "recommended": "Rekomenduojama" } }, "userAvatar": { "menu": { - "switchToDarkMode": "", - "switchToLightMode": "", - "management": "", + "switchToDarkMode": "Perjungti į tamsų režimą", + "switchToLightMode": "Perjungti į šviesų režimą", + "management": "Valdymas", "docker": "", - "preferences": "", - "logout": "", + "preferences": "Jūsų nuostatos", + "logout": "Atsijungti", "login": "Prisijungti", - "homeBoard": "", - "loggedOut": "", + "homeBoard": "Jūsų pagrindinė lenta", + "loggedOut": "Atsijungta", "updateAvailable": "" } }, - "dangerZone": "", + "dangerZone": "Pavojinga zona", "noResults": "Rezultatų nerasta", "unsavedChanges": "", "servers": "", "applications": "", "services": "", "preview": { - "show": "", - "hide": "" + "show": "Rodyti peržiūrą", + "hide": "Slėpti peržiūrą" }, "zod": { "errors": { - "default": "", + "default": "Šis laukas neteisingas", "required": "Šis laukelis yra privalomas", "string": { - "startsWith": "", - "endsWith": "", - "includes": "", - "invalidEmail": "" + "startsWith": "Šis laukas turi prasidėti su {startsWith}", + "endsWith": "Šis laukas turi baigtis su {endsWith}", + "includes": "Šis laukas turi būti su {includes}", + "invalidEmail": "Šis laukas turi būti teisingas el. pašto adresas" }, "tooSmall": { - "string": "", - "number": "" + "string": "Šis laukas turi būti bent {minimum} simbolių ilgio", + "number": "Šis laukas turi būti didesnis arba lygus {minimum}" }, "tooBig": { - "string": "", - "number": "" + "string": "Šis laukas turi būti ne ilgesnis kaip {maximum} simbolių", + "number": "Šis laukas turi būti mažesnis arba lygus {maximum}" }, "custom": { - "passwordsDoNotMatch": "", - "passwordRequirements": "", - "boardAlreadyExists": "", - "invalidFileType": "", + "passwordsDoNotMatch": "Slaptažodžiai nesutampa", + "passwordRequirements": "Slaptažodis neatitinka reikalavimų", + "boardAlreadyExists": "Lenta su tokiu pavadinimu jau yra", + "invalidFileType": "Netinkamas failo tipas, tikimasi {expected}", "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", + "fileTooLarge": "Failas per didelis, didžiausias dydis yra {maxSize}", + "invalidConfiguration": "Netinkama konfigūracija", "groupNameTaken": "" } } @@ -1551,8 +1551,8 @@ "section": { "dynamic": { "action": { - "create": "", - "remove": "" + "create": "Nauja dinaminė sekcija", + "remove": "Pašalinti dinaminę sekciją" }, "option": { "title": { @@ -1566,8 +1566,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Pašalinti dinaminę sekciją", + "message": "Ar tikrai norite pašalinti šią dinaminę sekciją? Elementai bus perkelti į tą pačią vietą pirminėje sekcijoje." } }, "category": { @@ -1577,32 +1577,32 @@ } }, "action": { - "create": "", - "edit": "", - "remove": "", + "create": "Nauja kategorija", + "edit": "Pervardyti kategoriją", + "remove": "Pašalinti kategoriją", "moveUp": "Pakelti aukštyn", "moveDown": "Perkelti žemyn", - "createAbove": "", - "createBelow": "", + "createAbove": "Nauja kategorija aukščiau", + "createBelow": "Nauja kategorija žemiau", "openAllInNewTabs": "" }, "create": { - "title": "", - "submit": "" + "title": "Nauja kategorija", + "submit": "Pridėti kategoriją" }, "remove": { - "title": "", - "message": "" + "title": "Pašalinti kategoriją", + "message": "Ar tikrai norite pašalinti kategoriją {name}?" }, "edit": { - "title": "", - "submit": "" + "title": "Pervardyti kategoriją", + "submit": "Pervardyti kategoriją" }, "menu": { "label": { - "create": "", - "changePosition": "", - "settings": "" + "create": "Nauja kategorija", + "changePosition": "Keisti poziciją", + "settings": "Nustatymai" } }, "openAllInNewTabs": { @@ -1613,12 +1613,12 @@ }, "item": { "action": { - "create": "", - "import": "", - "edit": "", - "moveResize": "", - "duplicate": "", - "remove": "" + "create": "Naujas elementas", + "import": "Importuoti elementą", + "edit": "Redaguoti elementą", + "moveResize": "Perkelti / keisti dydį", + "duplicate": "Dubliuoti elementą", + "remove": "Pašalinti elementą" }, "menu": { "label": { @@ -1635,12 +1635,12 @@ } }, "create": { - "title": "", + "title": "Pasirinkite elementą pridėti", "search": "", - "addToBoard": "" + "addToBoard": "Pridėti prie lentos" }, "moveResize": { - "title": "", + "title": "Perkelti / keisti dydį", "field": { "width": { "label": "Plotis" @@ -1649,35 +1649,35 @@ "label": "Aukštis" }, "xOffset": { - "label": "" + "label": "X poslinkis" }, "yOffset": { - "label": "" + "label": "Y poslinkis" } } }, "edit": { - "title": "", + "title": "Redaguoti elementą", "tab": { - "widget": "", - "app": "" + "widget": "Redaguoti valdiklį", + "app": "Redaguoti programėlę" }, "app": { - "propagationNotice": "" + "propagationNotice": "Šios programėlės pakeitimai bus taikomi visur, kur ji naudojama visose lentose." }, "advancedOptions": { - "label": "", - "title": "" + "label": "Išplėstinės parinktys", + "title": "Išplėstinės elemento parinktys" }, "field": { "integrations": { - "label": "" + "label": "Integracijos" }, "title": { "label": "" }, "customCssClasses": { - "label": "" + "label": "Individualios CSS klasės" }, "borderColor": { "label": "" @@ -1685,8 +1685,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Pašalinti elementą", + "message": "Ar tikrai norite pašalinti šį elementą?" } }, "widget": { @@ -1698,17 +1698,17 @@ "loadError": "" }, "app": { - "name": "", - "description": "", + "name": "Programėlė", + "description": "Įdeda programėlę į lentą.", "option": { "appId": { - "label": "" + "label": "Pasirinkite programėlę" }, "openInNewTab": { "label": "Atidaryti naujame skirtuke" }, "showTitle": { - "label": "" + "label": "Rodyti programėlės pavadinimą" }, "pingEnabled": { "label": "" @@ -1734,20 +1734,20 @@ }, "error": { "notFound": { - "label": "", - "tooltip": "" + "label": "Nėra programėlės", + "tooltip": "Neturite pasirinktos tinkamos programėlės" } } }, "bookmarks": { - "name": "", - "description": "", + "name": "Žymės", + "description": "Rodo kelias programėlių nuorodas", "option": { "title": { - "label": "" + "label": "Pavadinimas" }, "layout": { - "label": "", + "label": "Išdėstymas", "option": { "row": { "label": "Horizontalus" @@ -1756,7 +1756,7 @@ "label": "Vertikalus" }, "grid": { - "label": "" + "label": "Tinklelis" }, "gridHorizontal": { "label": "" @@ -1776,11 +1776,11 @@ "label": "" }, "withBorder": { - "label": "" + "label": "Rodyti rėmelį" }, "items": { - "label": "", - "add": "" + "label": "Žymės", + "add": "Pridėti žymę" } } }, @@ -1794,11 +1794,11 @@ } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "DNS skylės suvestinė", + "description": "Rodo jūsų DNS skylės suvestinę", "option": { "layout": { - "label": "", + "label": "Išdėstymas", "option": { "row": { "label": "Horizontalus" @@ -1807,32 +1807,32 @@ "label": "Vertikalus" }, "grid": { - "label": "" + "label": "Tinklelis" } } }, "usePiHoleColors": { - "label": "" + "label": "Naudoti Pi-Hole spalvas" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "Nepavyko gauti DNS skylės suvestinės", + "integrationsDisconnected": "Nėra duomenų, visos integracijos atjungtos" }, "data": { "adsBlockedToday": "Šiandien užblokuota", "adsBlockedTodayPercentage": "Šiandien užblokuota", "dnsQueriesToday": "Užklausos šiandien", - "domainsBeingBlocked": "" + "domainsBeingBlocked": "Domenai blokavimo sąraše" }, "domainsTooltip": "" }, "dnsHoleControls": { - "name": "", + "name": "DNS skylės valdymas", "description": "Valdykite PiHole arba AdGuard iš savo prietaisų skydelio", "option": { "layout": { - "label": "", + "label": "Išdėstymas", "option": { "row": { "label": "Horizontalus" @@ -1841,62 +1841,62 @@ "label": "Vertikalus" }, "grid": { - "label": "" + "label": "Tinklelis" } } }, "showToggleAllButtons": { - "label": "" + "label": "Rodyti perjungimo visus mygtukus" } }, "error": { - "internalServerError": "" + "internalServerError": "Nepavyko valdyti DNS skylės" }, "controls": { - "enableAll": "", - "disableAll": "", - "setTimer": "", - "set": "", - "enabled": "", - "disabled": "", - "processing": "", - "disconnected": "", - "hours": "", - "minutes": "", - "unlimited": "" + "enableAll": "Įjungti visus", + "disableAll": "Išjungti visus", + "setTimer": "Nustatyti laikmatį", + "set": "Nustatyti", + "enabled": "Įjungta", + "disabled": "Išjungta", + "processing": "Apdorojama", + "disconnected": "Atjungta", + "hours": "Valandos", + "minutes": "Minutės", + "unlimited": "Palikite tuščią neribotam" } }, "clock": { - "name": "", + "name": "Data ir laikas", "description": "Rodo dabartinę datą ir laiką.", "option": { "customTitleToggle": { - "label": "", - "description": "" + "label": "Individualus pavadinimas / miesto rodymas", + "description": "Rodo individualų pavadinimą arba miesto/šalies pavadinimą virš laikrodžio." }, "customTitle": { - "label": "" + "label": "Pavadinimas" }, "is24HourFormat": { - "label": "", - "description": "" + "label": "24 valandų formatas", + "description": "Naudoti 24 valandų formatą vietoj 12 valandų" }, "showSeconds": { - "label": "" + "label": "Rodyti sekundes" }, "useCustomTimezone": { - "label": "" + "label": "Naudoti fiksuotą laiko juostą" }, "timezone": { "label": "Laiko juosta", - "description": "" + "description": "Pasirinkite laiko juostą pagal IANA standartą" }, "showDate": { - "label": "" + "label": "Rodyti datą" }, "dateFormat": { - "label": "", - "description": "" + "label": "Datos formatas", + "description": "Kaip turėtų atrodyti data" }, "customTimeFormat": { "label": "", @@ -1953,7 +1953,7 @@ }, "notebook": { "name": "Užrašai", - "description": "", + "description": "Paprastas užrašų valdiklis, palaikantis markdown", "option": { "showToolbar": { "label": "Rodyti įrankių juostą, padedančią rašyti žymėjimą" @@ -2001,7 +2001,7 @@ }, "align": { "left": "Kairėje", - "center": "", + "center": "Centruoti", "right": "Dešinėje" }, "popover": { @@ -2052,7 +2052,7 @@ "saveFailed": "" }, "iframe": { - "name": "", + "name": "iFrame", "description": "Įterpkite bet kokį turinį iš interneto. Kai kuriose svetainėse prieiga gali būti ribojama.", "option": { "embedUrl": { @@ -2087,32 +2087,32 @@ } }, "error": { - "noUrl": "", + "noUrl": "Nenurodytas iFrame URL", "unsupportedProtocol": "", "noBrowerSupport": "Jūsų naršyklė nepalaiko iframe. Atnaujinkite savo naršyklę." } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "Objekto būsena", + "description": "Rodyti objekto būseną ir pasirinktinai jį perjungti", "option": { "entityId": { "label": "Subjekto ID" }, "displayName": { - "label": "" + "label": "Rodomas pavadinimas" }, "entityUnit": { - "label": "" + "label": "Objekto vienetas" }, "clickable": { - "label": "" + "label": "Paspaudžiamas" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "Vykdyti automatizaciją", + "description": "Aktyvuoti automatizaciją vienu paspaudimu", "option": { "displayName": { "label": "Rodomas vardas" @@ -2203,7 +2203,7 @@ }, "calendar": { "name": "Kalendorius", - "description": "", + "description": "Rodyti įvykius iš jūsų integracijų kalendoriaus rodinyje per tam tikrą santykinį laikotarpį", "duration": { "allDay": "" }, @@ -2211,16 +2211,16 @@ "releaseType": { "label": "\"Radarr\" išleidimo tipas", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "Kino teatruose", + "digitalRelease": "Skaitmeninis leidimas", + "physicalRelease": "Fizinis leidimas" } }, "filterPastMonths": { - "label": "" + "label": "Pradėti nuo" }, "filterFutureMonths": { - "label": "" + "label": "Baigti" }, "showUnmonitored": { "label": "" @@ -2228,11 +2228,11 @@ } }, "weather": { - "name": "", - "description": "", + "name": "Oras", + "description": "Rodo dabartinę orų informaciją pasirinktoje vietoje.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Temperatūra Farenheitu" }, "disableTemperatureDecimals": { "label": "" @@ -2245,21 +2245,21 @@ "label": "" }, "location": { - "label": "" + "label": "Oro vieta" }, "showCity": { - "label": "" + "label": "Rodyti miestą" }, "hasForecast": { - "label": "" + "label": "Rodyti prognozę" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Prognozės dienų skaičius", + "description": "Kai valdiklis nėra pakankamai platus, rodoma mažiau dienų" }, "dateFormat": { - "label": "", - "description": "" + "label": "Datos formatas", + "description": "Kaip turėtų atrodyti data" } }, "currentWindSpeed": "", @@ -2271,52 +2271,52 @@ "humidity": "" }, "kind": { - "clear": "", - "mainlyClear": "", - "fog": "", - "drizzle": "", - "freezingDrizzle": "", - "rain": "", - "freezingRain": "", - "snowFall": "", - "snowGrains": "", - "rainShowers": "", - "snowShowers": "", - "thunderstorm": "", - "thunderstormWithHail": "", + "clear": "Giedra", + "mainlyClear": "Dažniausiai giedra", + "fog": "Rūkas", + "drizzle": "Dulksna", + "freezingDrizzle": "Šąlanti dulksna", + "rain": "Lietus", + "freezingRain": "Šąlantis lietus", + "snowFall": "Sniegimas", + "snowGrains": "Sniego kruopos", + "rainShowers": "Liūtys", + "snowShowers": "Sniego škvalai", + "thunderstorm": "Audra", + "thunderstormWithHail": "Audra su kruša", "unknown": "Nežinoma" } }, "indexerManager": { "name": "Indeksavimo tvarkytuvo būsena", - "description": "", + "description": "Jūsų indeksatorių būsena", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Atidaryti indeksatoriaus svetainę naujame skirtuke" } }, "title": "Indeksavimo tvarkyklė", "testAll": "Išbandyk viską", "error": { - "internalServerError": "" + "internalServerError": "Nepavyko gauti indeksatorių būsenos" } }, "healthMonitoring": { "name": "Sistemos būklės stebėjimas", - "description": "", + "description": "Rodo informaciją apie jūsų sistemos (-ų) sveikatą ir būseną.", "tab": { "system": "", "cluster": "" }, "option": { "fahrenheit": { - "label": "" + "label": "CPU temperatūra Farenheitu" }, "cpu": { - "label": "" + "label": "Rodyti CPU informaciją" }, "memory": { - "label": "" + "label": "Rodyti atminties informaciją" }, "gpu": { "label": "" @@ -2325,7 +2325,7 @@ "label": "" }, "fileSystem": { - "label": "" + "label": "Rodyti failų sistemos informaciją" }, "visibleStorageVolumes": { "label": "", @@ -2343,22 +2343,22 @@ } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", + "information": "Informacija", + "processor": "Procesorius: {cpuModelName}", + "memory": "Atmintis: {memory}GiB", + "memoryAvailable": "Prieinama: {memoryAvailable}GiB ({percent}%)", + "version": "Versija: {version}", "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", + "loadAverage": "Vidutinė apkrova:", + "minute": "1 minutė", + "minutes": "{count} minutės", + "used": "Naudojama", "available": "Galima", - "lastSeen": "" + "lastSeen": "Paskutinis būsenos atnaujinimas: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "Nepavyko gauti sveikatos būsenos" }, "cluster": { "summary": { @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Stebėkite UPS įrenginių būseną per NUT serverį", "option": { "showBattery": { - "label": "" + "label": "Rodyti bateriją" }, "showLoad": { - "label": "" + "label": "Rodyti apkrovą" }, "showVoltage": { - "label": "" + "label": "Rodyti įtampą" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Prisijungęs", + "onBattery": "Veikia iš baterijos", + "lowBattery": "Baterija išsikrovusi", + "charging": "Įkraunama", + "unknown": "Nežinoma" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Veikimo laikas", + "load": "Apkrova", + "input": "Įvestis", + "output": "Išvestis" }, "error": { - "internalServerError": "" + "internalServerError": "Nepavyko gauti UPS duomenų" } }, "tracearr": { @@ -2584,96 +2595,96 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Pastarosios 30 dienų", + "month": "Šis mėnuo", + "lastMonth": "Praėjęs mėnuo" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Įvykis", + "description": "Rodyti bendrą konkretaus įvykio pasikartojimų skaičių", + "placeholder": "Pasirinkite įvykį", + "loading": "Įkeliami įvykiai...", + "noEvents": "Įvykių nerasta", + "none": "Nėra įvykio", + "configureWebsiteFirst": "Pirmiausia pasirinkite svetainę, kad įkeltumėte įvykius" }, "chartType": { - "label": "", - "description": "", + "label": "Diagramos tipas", + "description": "Diagramos rodymo stilius", "option": { - "bar": "", - "sparkline": "" + "bar": "Stulpelinė diagrama", + "sparkline": "Minigrafikas" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Diagramos stilius", + "description": "Kaip rodyti įvykių serijas diagramoje", "option": { - "grouped": "", - "overlay": "" + "grouped": "Šalia", + "overlay": "Perdanga (poaibis)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Rodinys", + "description": "Ką rodyti valdiklio turinyje", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Diagrama", + "events": "Įvykių diagrama", + "topPages": "Top puslapiai", + "topReferrers": "Top nukreipėjai" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Įvykiai", + "description": "Pasirinkite vieną ar kelis įvykius diagramai", + "placeholder": "Pasirinkite įvykius...", + "loading": "Įkeliami įvykiai...", + "noEvents": "Įvykių nerasta", + "configureWebsiteFirst": "Pirmiausia pasirinkite svetainę, kad įkeltumėte įvykius" }, "topCount": { - "label": "", - "description": "" + "label": "Rodomi elementai", + "description": "Rodomų populiariausių elementų skaičius (maks. 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "įvykiai", + "label": "įvykiai" }, "topPages": { - "direct": "" + "direct": "Tiesiogiai" }, "topReferrers": { - "direct": "" + "direct": "Tiesiogiai" }, "events": { - "selectPrompt": "" + "selectPrompt": "Pasirinkite įvykius diagramai" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Umami integracija nesukonfigūruota", + "noWebsite": "Svetainė nesukonfigūruota", + "noData": "Nėra duomenų", + "internalServerError": "Nepavyko gauti Umami duomenų" } }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", + "query": "Miestas / Pašto kodas", + "latitude": "Platuma", + "longitude": "Ilguma", + "disabledTooltip": "Prašome įvesti miestą arba pašto kodą", + "unknownLocation": "Nežinoma vieta", "search": "Ieškoti", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "Miestas", + "country": "Šalis", + "coordinates": "Koordinatės", + "population": "Gyventojų skaičius" }, "action": { - "select": "" + "select": "Pasirinkite {city}, {countryCode}" }, "population": { "fallback": "Nežinoma" @@ -2681,52 +2692,64 @@ } }, "integration": { - "noData": "", - "description": "" + "noData": "Integracija nerasta", + "description": "Spustelėkite , kad sukurtumėte naują integraciją" }, "app": { - "noData": "", - "description": "", + "noData": "Programėlė nerasta", + "description": "Spustelėkite , kad sukurtumėte naują programėlę", "quickCreate": "" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "Nepasirinkta integracija", + "noData": "Nėra integracijos duomenų" }, "option": {} }, "video": { - "name": "", - "description": "", + "name": "Vaizdo srautas", + "description": "Įdėti vaizdo srautą arba vaizdo įrašą iš kameros ar svetainės", "option": { "feedUrl": { - "label": "" + "label": "Srauto URL" }, "hasAutoPlay": { - "label": "", - "description": "" + "label": "Automatinis paleidimas", + "description": "Automatinis paleidimas veikia tik išjungus garsą dėl naršyklės apribojimų" }, "isMuted": { - "label": "" + "label": "Išjungtas garsas" }, "hasControls": { - "label": "" + "label": "Rodyti valdiklius" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "Nenurodytas vaizdo URL", + "forYoutubeUseIframe": "YouTube vaizdo įrašams naudokite iframe parinktį" } }, "mediaServer": { - "name": "", - "description": "", + "name": "Dabartiniai medijos serverio srautai", + "description": "Rodyti dabartinius srautus jūsų medijos serveriuose", "option": { "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,48 +2784,48 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Jūsų Paperless-ngx dokumentų archyvo apžvalga", + "documentsTotal": "Iš viso dokumentų", + "documentsInbox": "Gautieji", + "correspondents": "Siuntėjai", + "tags": "Žymos", + "documentTypes": "Dokumentų tipai", + "inboxRatio": "Gautųjų santykis", + "inbox": "gautieji", + "total": "iš viso", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Rodyti gautųjų santykį", + "description": "Rodyti gautųjų ir visų dokumentų santykį pagrindinėje srityje" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Rodyti gautųjų žiedą", + "description": "Rodyti progreso žiedą kartu su gautųjų santykiu" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Rodyti bendrą dokumentų skaičių", + "description": "Rodyti bendrą dokumentų skaičių savo archyve" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Rodyti gautųjų skaičių", + "description": "Rodyti neapdorotų dokumentų skaičių gautuosiuose" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Rodyti siuntėjus", + "description": "Rodyti bendrą siuntėjų skaičių" }, "showTags": { - "label": "", - "description": "" + "label": "Rodyti žymas", + "description": "Rodyti bendrą žymų skaičių" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Rodyti dokumentų tipus", + "description": "Rodyti bendrą dokumentų tipų skaičių" } }, "error": { - "internalServerError": "" + "internalServerError": "Nepavyko gauti Paperless-ngx duomenų" } }, "patchmon": { @@ -3040,151 +3066,178 @@ "noPhotos": "" }, "downloads": { - "name": "", - "description": "", + "name": "Atsisiuntimų klientas", + "description": "Leidžia peržiūrėti ir valdyti atsisiuntimus tiek iš Torrent, tiek Usenet klientų.", "option": { "columns": { - "label": "" + "label": "Stulpeliai rodyti" }, "enableRowSorting": { - "label": "" + "label": "Įgalinti elementų rūšiavimą" }, "defaultSort": { - "label": "" + "label": "Stulpelis, naudojamas rūšiavimui pagal nutylėjimą" }, "descendingDefaultSort": { - "label": "" + "label": "Apversti rūšiavimą" }, "showCompletedUsenet": { - "label": "" + "label": "Rodyti usenet įrašus, pažymėtus kaip baigtus" }, "showCompletedTorrent": { - "label": "" + "label": "Rodyti torrent įrašus, pažymėtus kaip baigtus" }, "showCompletedHttp": { "label": "" }, "activeTorrentThreshold": { - "label": "" + "label": "Slėpti baigtus torrent žemiau šios ribos (kiB/s)" }, "categoryFilter": { - "label": "" + "label": "Kategorijos/žymos filtruoti" }, "filterIsWhitelist": { - "label": "" + "label": "Filtras kaip baltasis sąrašas" }, "applyFilterToRatio": { - "label": "" + "label": "Naudoti filtrą santykiui skaičiuoti" }, "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { - "noColumns": "", - "noCommunications": "" + "noColumns": "Pasirinkite stulpelius elementuose", + "noCommunications": "Nepavyksta įkelti duomenų iš integracijos", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { - "columnTitle": "" + "columnTitle": "Valdymas" }, "added": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Pridėta", + "detailsTitle": "Pridėjimo data" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Papildomai", + "detailsTitle": "Kategorijos (arba papildoma informacija)" }, "downSpeed": { "columnTitle": "Žemyn", "detailsTitle": "Atsisiuntimo greitis" }, "index": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "#", + "detailsTitle": "Dabartinis indeksas kliente" }, "id": { - "columnTitle": "" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "Integracija" }, "name": { - "columnTitle": "" + "columnTitle": "Užduoties pavadinimas" }, "progress": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Progresas", + "detailsTitle": "Atsisiuntimo progresas" }, "ratio": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Santykis", + "detailsTitle": "Torrent santykis (gauta/išsiųsta)" }, "received": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Viso atsisiųsta", + "detailsTitle": "Viso atsisiųsta" }, "sent": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Viso įkelta", + "detailsTitle": "Viso įkelta" }, "size": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Failo dydis", + "detailsTitle": "Bendras pasirinkimo / failų dydis" }, "state": { "columnTitle": "Būsena", - "detailsTitle": "" + "detailsTitle": "Užduoties būsena" }, "time": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Pabaigos laikas", + "detailsTitle": "Laikas iki / nuo užbaigimo", + "eta": "" }, "type": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Tipas", + "detailsTitle": "Atsisiuntimo kliento tipas" }, "upSpeed": { "columnTitle": "Aukštyn", - "detailsTitle": "" + "detailsTitle": "Įkėlimo greitis" } }, "states": { - "downloading": "", - "queued": "", - "paused": "", - "completed": "", - "failed": "", - "processing": "", - "leeching": "", - "stalled": "", + "downloading": "Atsisiunčiama", + "queued": "Eilėje", + "paused": "Pristabdyta", + "completed": "Baigta", + "failed": "Nepavyko", + "processing": "Apdorojama", + "leeching": "Siurbiama", + "stalled": "Sustabdyta", "unknown": "Nežinoma", - "seeding": "" + "seeding": "Dalijamasi" }, "actions": { "clients": { - "modalTitle": "", - "pause": "", - "resume": "" + "modalTitle": "Atsisiuntimo klientų sąrašas", + "pause": "Pristabdyti visus klientus/elementus", + "resume": "Tęsti visus klientus/elementus" }, "client": { - "pause": "", - "resume": "" + "pause": "Pristabdyti klientą", + "resume": "Tęsti klientą" }, "item": { - "pause": "", - "resume": "", + "pause": "Pristabdyti elementą", + "resume": "Tęsti elementą", "delete": { - "title": "", - "modalTitle": "", - "entry": "", - "entryAndFiles": "" + "title": "Ištrinti elementą", + "modalTitle": "Ar tikrai norite ištrinti šią užduotį?", + "entry": "Ištrinti įrašą", + "entryAndFiles": "Ištrinti įrašą ir failą (-us)" } } }, - "globalRatio": "" + "globalRatio": "Bendras santykis", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3216,7 +3269,7 @@ } }, "mediaRequests-requestList": { - "name": "", + "name": "Medijos užklausų sąrašas", "description": "Peržiūrėkite visų medijų užklausų iš \"Overseerr\" arba \"Jellyseerr\" sąrašą", "option": { "linksTargetNewTab": { @@ -3230,14 +3283,14 @@ } }, "pending": { - "approve": "", - "approving": "", - "decline": "" + "approve": "Patvirtinti užklausą", + "approving": "Tvirtinama užklausa...", + "decline": "Atmesti užklausą" }, "availability": { "unknown": "Nežinoma", - "pending": "", - "processing": "", + "pending": "Laukiama", + "processing": "Apdorojama", "requested": "", "partiallyAvailable": "Dalis", "available": "Galima", @@ -3251,10 +3304,10 @@ "failed": "", "completed": "" }, - "toBeDetermined": "" + "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { - "name": "", + "name": "Medijos užklausų statistika", "description": "Statistikos apie jūsų medijų užklausas", "option": {}, "titles": { @@ -3262,16 +3315,16 @@ "main": "Medijų statistikos", "approved": "Jau patvirtinta", "pending": "Laukia patvirtinimo", - "processing": "", - "declined": "", - "available": "", + "processing": "Apdorojama", + "declined": "Jau atmesta", + "available": "Jau prieinama", "tv": "TV užklausos", "movie": "Filmų užklausos", "total": "Iš viso" }, "users": { "main": "Top vartotojai", - "requests": "" + "requests": "Užklausos" } } }, @@ -3364,20 +3417,20 @@ "timeLeft": "" }, "rssFeed": { - "name": "", - "description": "", + "name": "RSS srautai", + "description": "Stebėti ir rodyti vieną ar daugiau bendrų RSS, ATOM arba JSON srautų", "option": { "feedUrls": { - "label": "" + "label": "Srautų URL" }, "enableRtl": { - "label": "" + "label": "Įgalinti RTL" }, "textLinesClamp": { - "label": "" + "label": "Aprašymo eilučių apkarpymas" }, "maximumAmountPosts": { - "label": "" + "label": "Įrašų skaičiaus riba" }, "hideDescription": { "label": "" @@ -3652,43 +3705,43 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Stebėkite veikimo statistiką iš savo Uptime Kuma būsenos puslapio", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Rodyti vidutinį veikimo laiką", + "description": "Rodyti bendrą 24 valandų vidutinį veikimo procentą" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Rodyti veikimo žiedą", + "description": "Rodyti progreso žiedą kartu su vidutine veikimo reikšme" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Rodyti bendrą monitorių skaičių", + "description": "Rodyti bendrą sukonfigūruotų monitorių skaičių" }, "showUpCount": { - "label": "", - "description": "" + "label": "Rodyti veikiančių skaičių", + "description": "Rodyti, kiek monitorių šiuo metu veikia" }, "showDownCount": { - "label": "", - "description": "" + "label": "Rodyti neveikiančių skaičių", + "description": "Rodyti, kiek monitorių šiuo metu neveikia" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Rodyti pristabdytų skaičių", + "description": "Rodyti, kiek monitorių šiuo metu pristabdyta" } }, - "averageUptime": "", + "averageUptime": "Vidutinis veikimo laikas (24 val.)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Iš viso monitorių", + "upCount": "Veikia", + "downCount": "Neveikia", + "pausedCount": "Pristabdyti" }, "error": { - "internalServerError": "" + "internalServerError": "Nepavyko gauti veikimo duomenų" } }, "traefik": { @@ -3726,44 +3779,32 @@ } }, "audioStats": { - "name": "", - "description": "", + "name": "Garso statistika", + "description": "Bibliotekos ir atkūrimo statistika iš Navidrome arba Audiobookshelf", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Rodyti atlikėjus", + "description": "Rodyti bendrą atlikėjų skaičių savo muzikos bibliotekoje (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Rodyti albumus", + "description": "Rodyti bendrą albumų skaičių savo muzikos bibliotekoje (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "Rodyti dainas", + "description": "Rodyti bendrą dainų skaičių savo muzikos bibliotekoje (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Rodyti bibliotekų skaičių", + "description": "Rodyti bibliotekų skaičių savo egzemplioriuje (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Rodyti audioknygas", + "description": "Rodyti bendrą audioknygų skaičių visose bibliotekose (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Rodyti tinklalaides", + "description": "Rodyti bendrą tinklalaidžių skaičių visose bibliotekose (Audiobookshelf)" }, "showListeningTime": { "label": "", @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel sistemos (lentelė)", + "description": "Visų Beszel stebimų sistemų lentelės vaizdas su rūšiuojamais stulpeliais ir būsenos indikatoriais", "option": { "statusFilter": { - "label": "" + "label": "Būsenos filtras" }, "sortBy": { - "label": "" + "label": "Rūšiuoti pagal" }, "sortDirection": { - "label": "" + "label": "Rūšiavimo kryptis" }, "showCpu": { - "label": "" + "label": "Rodyti CPU" }, "showMemory": { - "label": "" + "label": "Rodyti atmintį" }, "showDisk": { - "label": "" + "label": "Rodyti diską" }, "showGpu": { - "label": "" + "label": "Rodyti GPU" }, "showLoadAvg": { - "label": "" + "label": "Rodyti apkrovos vidurkį" }, "showNet": { - "label": "" + "label": "Rodyti tinklą" }, "showTemp": { - "label": "" + "label": "Rodyti temperatūrą" }, "showBattery": { - "label": "" + "label": "Rodyti bateriją" }, "showServices": { - "label": "" + "label": "Rodyti paslaugas" }, "showUptime": { - "label": "" + "label": "Rodyti veikimo laiką" }, "showAgent": { + "label": "Rodyti agento versiją" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Sistemų nerasta", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Sistema", + "cpu": "CPU", + "memory": "Atmintis", + "disk": "Diskas", + "gpu": "GPU", + "loadAvg": "Apkrovos vid", + "net": "Tinklas", + "temp": "Temp", + "battery": "Bat", + "services": "Paslaugos", + "uptime": "Veikimo laikas", + "agent": "Agentas" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel sistemos (tinklelis)", + "description": "Visų Beszel stebimų sistemų kortelių tinklelio vaizdas su realaus laiko metrika", "option": { "statusFilter": { - "label": "" + "label": "Būsenos filtras" }, "showCpu": { - "label": "" + "label": "Rodyti CPU" }, "showMemory": { - "label": "" + "label": "Rodyti atmintį" }, "showDisk": { - "label": "" + "label": "Rodyti diską" }, "showGpu": { - "label": "" + "label": "Rodyti GPU" }, "showLoadAvg": { - "label": "" + "label": "Rodyti apkrovos vidurkį" }, "showNet": { - "label": "" + "label": "Rodyti tinklą" }, "showTemp": { - "label": "" + "label": "Rodyti temperatūrą" }, "showBattery": { - "label": "" + "label": "Rodyti bateriją" }, "showServices": { - "label": "" + "label": "Rodyti paslaugas" }, "showUptime": { - "label": "" + "label": "Rodyti veikimo laiką" }, "showAgent": { - "label": "" + "label": "Rodyti agento versiją" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Atmintis", + "disk": "Diskas", + "gpu": "GPU", + "loadAvg": "Apkrovos vid", + "net": "Tinklas", + "temp": "Temp", + "battery": "Bat", + "services": "Paslaugos", + "uptime": "Veikimo laikas", + "agent": "Agentas" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel įspėjimai", + "description": "Peržiūrėkite Beszel įspėjimų konfigūracijas ir istoriją", "option": { "showHistory": { - "label": "" + "label": "Rodyti įspėjimų istoriją" }, "maxHistoryItems": { - "label": "" + "label": "Maks. istorijos elementų" } }, - "empty": "", + "empty": "Nėra sukonfigūruotų įspėjimų", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Istorija", + "resolved": "Išspręsta", "status": { - "triggered": "", - "ok": "" + "triggered": "Suaktyvinta", + "ok": "Gerai" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel sistemos statistika", + "description": "Laiko eilučių diagramos CPU, atminčiai, diskui, tinklui ir Docker konteinerių metrikoms", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Laikotarpis" }, "showCpu": { - "label": "" + "label": "Rodyti CPU diagramą" }, "showMemory": { - "label": "" + "label": "Rodyti atminties diagramą" }, "showDisk": { - "label": "" + "label": "Rodyti disko diagramą" }, "showDiskIO": { - "label": "" + "label": "Rodyti disko I/O diagramą" }, "showNetwork": { - "label": "" + "label": "Rodyti tinklo diagramą" }, "showDockerCpu": { - "label": "" + "label": "Rodyti Docker CPU diagramą" }, "showDockerMemory": { - "label": "" + "label": "Rodyti Docker atminties diagramą" }, "showDockerNetwork": { - "label": "" + "label": "Rodyti Docker tinklo diagramą" } }, - "selectSystem": "", + "selectSystem": "Pasirinkite sistemą", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU naudojimas", + "subtitle": "Vidutinis visos sistemos CPU panaudojimas", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Atminties naudojimas", + "subtitle": "Tikslus panaudojimas įrašymo metu", + "series": "Naudojama", + "cache": "Podėlis / Buferiai" }, "disk": { - "title": "", + "title": "Disko naudojimas", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Disko I/O", + "subtitle": "Šakninės failų sistemos pralaidumas", + "read": "Skaitymas", + "write": "Rašymas" }, "storage": { "title": "", @@ -4106,33 +4153,33 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Pralaidumas", + "subtitle": "Viešųjų sąsajų tinklo srautas", + "sent": "Išsiųsta", + "recv": "Gauta" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU naudojimas", + "subtitle": "Vidutinis konteinerių CPU panaudojimas" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker atminties naudojimas", + "subtitle": "Docker konteinerių atminties naudojimas" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker tinklo I/O", + "subtitle": "Docker konteinerių tinklo srautas" } } } }, "widgetPreview": { "toggle": { - "enabled": "", - "disabled": "" + "enabled": "Redagavimo režimas įjungtas", + "disabled": "Redagavimo režimas išjungtas" }, "dimensions": { - "title": "" + "title": "Keisti matmenis" } }, "board": { @@ -4154,52 +4201,52 @@ "edit": { "notification": { "success": { - "title": "", - "message": "" + "title": "Pakeitimai pritaikyti sėkmingai", + "message": "Lenta sėkmingai išsaugota" }, "error": { - "title": "", - "message": "" + "title": "Nepavyko pritaikyti pakeitimų", + "message": "Lentos išsaugoti nepavyko" } }, "confirmLeave": { - "title": "", - "message": "" + "title": "Neišsaugoti pakeitimai", + "message": "Turite neišsaugotų pakeitimų, ar tikrai norite išeiti?" } }, "oldImport": { - "label": "", + "label": "Importuoti iš homarr prieš 1.0.0", "notification": { "success": { - "title": "", - "message": "" + "title": "Importavimas sėkmingas", + "message": "Lenta sėkmingai importuota" }, "error": { - "title": "", - "message": "" + "title": "Importavimas nepavyko", + "message": "Lentos importuoti nepavyko, patikrinkite žurnalus dėl išsamesnės informacijos" } }, "form": { "file": { - "label": "", - "invalidError": "" + "label": "Pasirinkite JSON failą", + "invalidError": "Netinkamas konfigūracijos failas" }, "apps": { "label": "Programėlės", "avoidDuplicates": { - "label": "", - "description": "" + "label": "Vengti dublikatų", + "description": "Nepaiso programėlių, kai jau yra programėlė su tokiu pat href" }, "onlyImportApps": { - "label": "", - "description": "" + "label": "Importuoti tik programėles", + "description": "Prideda tik programėles, lentą reikia perkurti rankiniu būdu" } }, "name": { - "label": "" + "label": "Lentos pavadinimas" }, "screenSize": { - "label": "", + "label": "Ekrano dydis", "description": "", "option": { "sm": "Mažas", @@ -4208,16 +4255,16 @@ } }, "sidebarBehavior": { - "label": "", - "description": "", + "label": "Šoninės juostos elgsena", + "description": "Šoninės juostos buvo pašalintos 1.0, galite pasirinkti, kas turėtų nutikti su jose esančiais elementais.", "option": { "lastSection": { - "label": "", - "description": "" + "label": "Paskutinė sekcija", + "description": "Šoninė juosta bus rodoma po paskutine sekcija" }, "removeItems": { - "label": "", - "description": "" + "label": "Pašalinti elementus", + "description": "Elementai, esantys šoninėje juostoje, bus pašalinti" } } } @@ -4232,19 +4279,19 @@ }, "field": { "pageTitle": { - "label": "" + "label": "Puslapio pavadinimas" }, "metaTitle": { - "label": "" + "label": "Meta pavadinimas" }, "logoImageUrl": { - "label": "" + "label": "Logotipo paveikslėlio URL" }, "faviconImageUrl": { - "label": "" + "label": "Favicon paveikslėlio URL" }, "backgroundImageUrl": { - "label": "", + "label": "Fono paveikslėlio URL", "placeholder": "", "group": { "your": "", @@ -4252,49 +4299,49 @@ } }, "backgroundImageAttachment": { - "label": "", + "label": "Fono paveikslėlio priedas", "option": { "fixed": { - "label": "", - "description": "" + "label": "Fiksuotas", + "description": "Fonas lieka toje pačioje pozicijoje." }, "scroll": { - "label": "", - "description": "" + "label": "Slinkimas", + "description": "Fonas slenka su pele." } } }, "backgroundImageRepeat": { - "label": "", + "label": "Fono paveikslėlio kartojimas", "option": { "repeat": { - "label": "", - "description": "" + "label": "Kartoti", + "description": "Paveikslėlis kartojamas tiek, kiek reikia, kad užpildytų visą fono paveikslėlio piešimo sritį." }, "no-repeat": { - "label": "", - "description": "" + "label": "Nekartoti", + "description": "Paveikslėlis nekartojamas ir gali neužpildyti visos erdvės." }, "repeat-x": { - "label": "", - "description": "" + "label": "Kartoti X", + "description": "Tas pats kaip 'Kartoti', bet tik horizontalioje ašyje." }, "repeat-y": { - "label": "", - "description": "" + "label": "Kartoti Y", + "description": "Tas pats kaip 'Kartoti', bet tik vertikalioje ašyje." } } }, "backgroundImageSize": { - "label": "", + "label": "Fono paveikslėlio dydis", "option": { "cover": { - "label": "", - "description": "" + "label": "Uždengti", + "description": "Keičia paveikslėlio mastelį kuo mažesnį, kad padengtų visą langą, apkarpant perteklinę erdvę." }, "contain": { - "label": "", - "description": "" + "label": "Tilpti", + "description": "Keičia paveikslėlio mastelį kuo didesnį jo konteineryje, neapkarpant ir neištempiant." } } }, @@ -4305,7 +4352,7 @@ "label": "Antrinė spalva" }, "opacity": { - "label": "" + "label": "Nepermatomumas" }, "iconColor": { "label": "" @@ -4314,11 +4361,11 @@ "label": "" }, "customCss": { - "label": "", - "description": "", + "label": "Individualus CSS šiai lentai", + "description": "Be to, pritaikykite savo prietaisų skydelį naudodami CSS, rekomenduojama tik patyrusiems vartotojams", "customClassesAlert": { - "title": "", - "description": "" + "title": "Individualios klasės", + "description": "Galite pridėti individualių klasių prie lentos elementų išplėstinėse kiekvieno elemento parinktyse ir naudoti jas aukščiau esančiame individualiame CSS." } }, "disableStatus": { @@ -4326,7 +4373,7 @@ "description": "" }, "columnCount": { - "label": "" + "label": "Stulpelių skaičius" }, "itemRadius": { "label": "", @@ -4344,21 +4391,21 @@ }, "isPublic": { "label": "Vieša", - "description": "" + "description": "Viešos lentos yra prieinamos visiems, net ir be paskyros." } }, "content": { - "metaTitle": "" + "metaTitle": "{boardName} lenta" }, "setting": { - "title": "", + "title": "Nustatymai {boardName} lentai", "section": { "general": { "title": "Bendras", - "unrecognizedLink": "" + "unrecognizedLink": "Pateikta nuoroda neatpažinta ir nebus peržiūrėta, ji vis tiek gali veikti." }, "layout": { - "title": "", + "title": "Išdėstymas", "responsive": { "title": "", "action": { @@ -4367,72 +4414,72 @@ } }, "background": { - "title": "" + "title": "Fonas" }, "appearance": { "title": "" }, "customCss": { - "title": "" + "title": "Individualus CSS" }, "behavior": { "title": "" }, "access": { - "title": "", + "title": "Prieigos kontrolė", "permission": { "item": { "view": { "label": "Žiūrėti lentą" }, "modify": { - "label": "" + "label": "Keisti lentą" }, "full": { - "label": "" + "label": "Visa prieiga" } } } }, "dangerZone": { - "title": "", + "title": "Pavojinga zona", "action": { "rename": { - "label": "", - "description": "", - "button": "", + "label": "Pervardyti lentą", + "description": "Pakeitus pavadinimą, nutrūks visos nuorodos į šią lentą.", + "button": "Keisti pavadinimą", "modal": { - "title": "" + "title": "Pervardyti lentą" } }, "visibility": { - "label": "", + "label": "Keisti lentos matomumą", "description": { - "public": "", - "private": "" + "public": "Ši lenta šiuo metu yra vieša.", + "private": "Ši lenta šiuo metu yra privati." }, "button": { - "public": "", - "private": "" + "public": "Padaryti privačią", + "private": "Padaryti viešą" }, "confirm": { "public": { - "title": "", - "description": "" + "title": "Padaryti lentą privačią", + "description": "Ar tikrai norite padaryti šią lentą privačią? Tai paslėps lentą nuo viešumos. Nuorodos svečiams nutrūks." }, "private": { - "title": "", - "description": "" + "title": "Padaryti lentą viešą", + "description": "Ar tikrai norite padaryti šią lentą viešą? Tai padarys lentą prieinamą visiems." } } }, "delete": { - "label": "", - "description": "", - "button": "", + "label": "Ištrinti šią lentą", + "description": "Ištrynus lentą, kelio atgal nėra. Prašome būti tikri.", + "button": "Ištrinti šią lentą", "confirm": { "title": "Ištrinti lentą", - "description": "" + "description": "Ar tikrai norite ištrinti šią lentą? Tai visam laikui ištrins lentą ir visą jos turinį." } } } @@ -4487,15 +4534,15 @@ } }, "management": { - "metaTitle": "", + "metaTitle": "Valdymas", "title": { - "morning": "", - "afternoon": "", - "evening": "" + "morning": "Labas rytas, {username}", + "afternoon": "Laba diena, {username}", + "evening": "Labas vakaras, {username}" }, "notFound": { - "title": "", - "text": "" + "title": "Nerasta", + "text": "Nepavyko rasti prašomo ištekliaus" }, "error": { "title": "", @@ -4507,28 +4554,28 @@ "home": "Pagrindinis", "boards": "Lentos", "apps": "Programėlės", - "integrations": "", + "integrations": "Integracijos", "customWidgets": "", - "searchEngies": "", - "medias": "", + "searchEngies": "Paieškos sistemos", + "medias": "Medijos", "users": { "label": "Vartotojai", "items": { "manage": "Valdyti", "invites": "Pakvietimai", - "groups": "" + "groups": "Grupės" } }, "tools": { "label": "Įrankiai", "items": { - "docker": "", + "docker": "Docker", "kubernetes": "", - "logs": "", + "logs": "Žurnalai", "api": "", "certificates": "", - "tasks": "", - "backup": "" + "tasks": "Užduotys", + "backup": "Atsarginė kopija" } }, "settings": "Nustatymai", @@ -4536,12 +4583,12 @@ "label": "Pagalba", "items": { "documentation": "Dokumentacija", - "submitIssue": "", + "submitIssue": "Pateikti problemą", "discord": "Bendruomenės Discord", - "sourceCode": "" + "sourceCode": "Pirminis kodas" } }, - "about": "" + "about": "Apie" } }, "page": { @@ -4550,17 +4597,17 @@ "board": "Lentos", "user": "Vartotojai", "invite": "Pakvietimai", - "integration": "", + "integration": "Integracijos", "app": "Programėlės", - "group": "", + "group": "Grupės", "searchEngine": "", "media": "" }, "statisticLabel": { "boards": "Lentos", - "resources": "", - "authentication": "", - "authorization": "" + "resources": "Ištekliai", + "authentication": "Autentifikacija", + "authorization": "Autorizacija" }, "heroBanner": { "title": "", @@ -4571,19 +4618,19 @@ "title": "Jūsų lentos", "action": { "new": { - "label": "" + "label": "Nauja lenta" }, "open": { - "label": "" + "label": "Atidaryti lentą" }, "settings": { "label": "Nustatymai" }, "setHomeBoard": { - "label": "", + "label": "Nustatyti kaip pagrindinę lentą", "badge": { "label": "Pagrindinis", - "tooltip": "" + "tooltip": "Ši lenta bus rodoma kaip jūsų pagrindinė lenta" } }, "setMobileHomeBoard": { @@ -4600,16 +4647,16 @@ "label": "Ištrinti visam laikui", "confirm": { "title": "Ištrinti lentą", - "description": "" + "description": "Ar tikrai norite ištrinti {name} lentą?" } } }, "visibility": { - "public": "", - "private": "" + "public": "Ši lenta yra vieša", + "private": "Ši lenta yra privati" }, "noResults": { - "title": "" + "title": "Dar nėra lentų" }, "modal": { "createBoard": { @@ -4622,16 +4669,16 @@ } }, "media": { - "includeFromAllUsers": "" + "includeFromAllUsers": "Įtraukti mediją iš visų vartotojų" }, "user": { - "back": "", - "fieldsDisabledExternalProvider": "", + "back": "Atgal į vartotojus", + "fieldsDisabledExternalProvider": "Kai kurie laukai yra išjungti, nes juos valdo išorinis autentifikacijos teikėjas.", "setting": { "general": { "title": "Bendras", "item": { - "language": "", + "language": "Kalba ir regionas", "board": { "title": "", "type": { @@ -4640,23 +4687,23 @@ } }, "search": "", - "firstDayOfWeek": "", - "accessibility": "", + "firstDayOfWeek": "Pirmoji savaitės diena", + "accessibility": "Pritaikymas neįgaliesiems", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Įvedimo mokymai", + "description": "Iš naujo nustatykite vedlio mokymus, kad pamatytumėte juos dar kartą kitą kartą apsilankę valdymo srityje arba valdymo skydelyje.", + "reset": "Atstatyti vedlio mokymus", "resetSuccess": { - "title": "", - "message": "" + "title": "Mokymai nustatyti iš naujo", + "message": "Vedlio mokymai vėl bus rodomi jūsų kito apsilankymo metu" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Užbaigta", + "notStarted": "Nepradėta" }, "name": { - "management": "", - "dashboard": "" + "management": "Valdymas", + "dashboard": "Valdymo skydelis" } } } @@ -4673,48 +4720,48 @@ "title": "Vartotojai" }, "edit": { - "metaTitle": "" + "metaTitle": "Redaguoti vartotoją {username}" }, "create": { "metaTitle": "Sukurti vartotoją", - "title": "", + "title": "Sukurti naują vartotoją", "step": { "personalInformation": { - "label": "" + "label": "Asmeninė informacija" }, "security": { "label": "Apsauga" }, "groups": { - "label": "", - "title": "", - "description": "" + "label": "Grupės", + "title": "Pasirinkite visas grupes, kurių narys turėtų būti vartotojas", + "description": "Grupė {everyoneGroup} priskirta visiems vartotojams ir negali būti pašalinta." }, "review": { - "label": "" + "label": "Peržiūra" }, "completed": { - "title": "" + "title": "Vartotojas sukurtas" }, "error": { - "title": "" + "title": "Vartotojo kūrimas nepavyko" } }, "action": { - "createAnother": "", - "back": "" + "createAnother": "Sukurti kitą vartotoją", + "back": "Grįžti į vartotojų sąrašą" } }, "invite": { "title": "Tvarkyti naudotojų kvietimus", "action": { "new": { - "title": "", + "title": "Naujas kvietimas", "description": "Pasibaigus galiojimo laikui, kvietimas nebegalios ir kvietimo gavėjas negalės sukurti paskyros." }, "copy": { - "title": "", - "description": "", + "title": "Kopijuoti kvietimą", + "description": "Jūsų kvietimas sugeneruotas. Uždarius šį modalą, nebegalėsite kopijuoti šios nuorodos. Jei nebenorite kviesti to asmens, galite bet kada ištrinti šį kvietimą.", "link": "Kvietimo nuoroda", "button": "" }, @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "", "options": { - "auto": "", + "auto": "Automatinis", "light": "", "dark": "" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Visa duomenų bazės atsarginė kopija", + "metaTitle": "Atsarginė kopija ir atkūrimas", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Eksportuoti duomenų bazę", + "description": "Atsisiųskite pilną SQLite duomenų bazės atsarginę kopiją, įskaitant visus nustatymus, naudotojus, lentas ir užšifruotus integracijos slaptažodžius. Atsarginė kopija supakuota kaip ZIP failas su šifravimo raktu ir metaduomenimis.", + "button": "Atsisiųsti atsarginę kopiją", + "error": "Eksportavimas nepavyko", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Jautrių duomenų eksportas", + "warningTitle": "Šiame eksporte yra visa jūsų duomenų bazė.", + "warningBody": "Atsarginėje kopijoje yra visi vartotojai, integracijos paslaptys (užšifruotos), API raktai, lentų konfigūracijos ir programos duomenys. Eksportuotą failą laikykite saugiai ir nesidalinkite juo.", + "typePrompt": "Įveskite \"{phrase}\", kad tęstumėte", + "submit": "Eksportuoti duomenų bazę", + "cancel": "Atšaukti" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Atkurti duomenų bazę", + "description": "Įkelkite anksčiau eksportuotą atsarginės kopijos ZIP failą, kad atkurtumėte duomenų bazę. Tai pakeis visą jūsų duomenų bazę. Jei atsarginė kopija buvo sukurta naudojant kitą šifravimo raktą, paslaptys bus automatiškai peršifruotos.", + "warning": "Atkūrus atsarginę kopiją, visa dabartinė duomenų bazė bus pakeista ir programa bus paleista iš naujo. Šio veiksmo atšaukti negalima.", "dropzone": { - "title": "", - "description": "" + "title": "Numeskite atsarginės kopijos ZIP failą čia arba spustelėkite, kad naršytumėte", + "description": "Priimami tik .zip failai iš Homarr SQLite atsarginės kopijos" }, - "changeFile": "", - "button": "", + "changeFile": "Pakeisti failą", + "button": "Atkurti duomenų bazę", "success": { - "title": "", - "message": "" + "title": "Atkūrimas baigtas", + "message": "Duomenų bazė sėkmingai atkurta. Programa paleidžiama iš naujo..." }, - "error": "" + "error": "Importavimas nepavyko" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Atsarginės kopijos turinys", + "exported": "Eksportuota {date}", + "loading": "Analizuojamas atsarginės kopijos failas...", + "errorTitle": "Peržiūros klaida", + "entity": "Subjektas", + "count": "Skaičius", + "boards": "Lentos", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Lentos", + "user": "Vartotojai", + "app": "Programėlės", + "integration": "Integracijos", + "item": "Valdikliai", + "media": "Medija", + "search_engine": "Paieškos varikliai" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Nepavyko analizuoti atsarginės kopijos failo", + "invalidMissingMetadata": "Netinkama atsarginė kopija: trūksta metadata.json", + "invalidMissingDb": "Netinkama atsarginė kopija: trūksta db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Numeskite atsarginės kopijos ZIP failą čia", + "description": "Priima .zip failus iš Homarr SQLite atsarginės kopijos (maks. 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analizuojama atsarginė kopija...", + "changeFile": "Pakeisti failą", + "continueToRestore": "Tęsti atkūrimą", + "tryAgain": "Bandyti dar kartą", + "analysisError": "Analizės klaida", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Atsarginės kopijos turinys", + "exported": "Eksportuota {date}", + "entity": "Subjektas", + "count": "Skaičius", + "boards": "Lentos", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Lentos", + "user": "Vartotojai", + "app": "Programėlės", + "integration": "Integracijos", + "item": "Valdikliai", + "media": "Medija", + "search_engine": "Paieškos varikliai" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "Pritaikyta {count} migracija", + "migrationsAppliedPlural": "Pritaikytos {count} migracijos", + "migrationsOlderVersion": "Ši atsarginė kopija buvo iš senesnės Homarr versijos. Buvo pritaikyta {count} schemos migracija, kad būtų atnaujinta.", + "migrationsOlderVersionPlural": "Ši atsarginė kopija buvo iš senesnės Homarr versijos. Buvo pritaikytos {count} schemos migracijos, kad būtų atnaujinta.", + "migrationsUpToDate": "Duomenų bazės schema atnaujinta ({count} pritaikytos migracijos)", + "upToDate": "Atnaujinta", + "migrationsPending": "Laukia {count}" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Migracijų taikymas ({current}/{total})", + "migrationLabel": "Migracija {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Destruktyvus veiksmas", + "warningTitle": "Tai visam laikui pakeis jūsų duomenų bazę.", + "warningBody": "Visos esamos lentos, vartotojai, programėlės, integracijos, nustatymai ir sesijos bus prarasti. Šio veiksmo atšaukti negalima. Po atkūrimo programa bus paleista iš naujo.", + "typePrompt": "Įveskite \"{phrase}\", kad tęstumėte", + "cancel": "Atšaukti", + "submit": "Atkurti duomenų bazę" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Atkuriama duomenų bazė...", + "extracting": "Išskleidžiamas atsarginės kopijos archyvas", + "migrating": "Taikomos duomenų bazės migracijos", + "encrypting": "Peršifruojamos integracijų paslaptys", + "swapping": "Keičiamas duomenų bazės failas", + "restarting": "Paleidžiamas serveris iš naujo" }, "complete": { - "title": "", - "message": "" + "title": "Atkūrimas baigtas", + "message": "Duomenų bazė sėkmingai atkurta. Serveris paleidžiamas iš naujo – po kelių sekundžių atnaujinkite puslapį." }, "failed": { - "title": "" + "title": "Atkūrimas nepavyko" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Netinkama atsarginė kopija: trūksta metadata.json", + "invalidMissingDb": "Netinkama atsarginė kopija: trūksta db.sqlite", + "analyzeError": "Nepavyko analizuoti atsarginės kopijos" } } }, @@ -5277,15 +5324,15 @@ "label": "Prievadai" }, "host": { - "label": "" + "label": "Mazgas" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Peržiūrėti žurnalus", "page": { - "title": "" + "title": "{name} žurnalai" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Pašalinti", + "confirm": "", "notification": { "success": { "title": "", @@ -5715,7 +5763,7 @@ "docker": { "label": "", "logs": { - "label": "" + "label": "Žurnalai" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Perjungti išvaizdos režimą", "light": "", "dark": "" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Nuostatos", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Pasirinkite nuostatą, kurią norite pakeisti", + "backHint": "Paspauskite Backspace arba naudokite grįžimo mygtuką, kad grįžtumėte", + "backAction": "Grįžti" } }, "notification": { "error": { - "message": "" + "message": "Nepavyko atnaujinti nuostatos" } }, "option": { "preferences": { - "label": "" + "label": "Atidaryti nuostatas" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Įjungta", + "disabled": "Išjungta" }, "board": { - "none": "", - "unavailable": "" + "none": "Nėra", + "unavailable": "Šiuo metu pasirinkta (nepasiekiama)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Nėra", + "unavailable": "Šiuo metu pasirinkta (nepasiekiama)" }, "colorScheme": { - "label": "", + "label": "Spalvų schema", "children": { "detail": { - "title": "" + "title": "Pasirinkite spalvų schemą" } } }, "locale": { - "label": "", + "label": "Kalba", "children": { "detail": { - "title": "" + "title": "Pasirinkite pageidaujamą kalbą" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Numatytoji paieškos sistema", "children": { "detail": { - "title": "" + "title": "Pasirinkite numatytąją paieškos sistemą" } } }, "openSearchInNewTab": { - "label": "", + "label": "Atidaryti paieškos rezultatus naujame skirtuke", "children": { "detail": { - "title": "" + "title": "Atidaryti paieškos rezultatus naujame skirtuke" } } }, "ddgBangs": { - "label": "", + "label": "Įjungti DuckDuckGo bangs", "children": { "detail": { - "title": "" + "title": "Įjungti DuckDuckGo bangs" } } }, "firstDayOfWeek": { - "label": "", + "label": "Pirmoji savaitės diena", "children": { "detail": { - "title": "" + "title": "Pasirinkite pirmąją savaitės dieną" } } }, "homeBoardId": { - "label": "", + "label": "Pagrindinė lenta", "children": { "detail": { - "title": "" + "title": "Pasirinkite pagrindinę lentą" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobilioji pagrindinė lenta", "children": { "detail": { - "title": "" + "title": "Pasirinkite mobiliąją pagrindinę lentą" } } }, "pingIconsEnabled": { - "label": "", + "label": "Naudoti piktogramas ping'ams", "children": { "detail": { - "title": "" + "title": "Naudoti piktogramas ping'ams" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Atidaryti pilną nuostatų puslapį" } } } } }, "media": { - "help": "", + "help": "Ieškokite filmų ar serialų, kad pateiktumėte užklausą", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Filmai ir serialai" }, "action": { "search": { - "label": "", - "description": "", + "label": "Ieškoti filmų ar serialų", + "description": "Pradėkite rašyti, norėdami ieškoti savo medijos užklausų integracijose", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Pridėkite Overseerr, Jellyseerr arba Seerr integraciją, kad įgalintumėte medijos paiešką.", + "scoped": "Šis valdiklis neturi pasiekiamos medijos užklausų integracijos." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Pasiekiama", + "partiallyAvailable": "Iš dalies", + "processing": "Apdorojama", + "requested": "Užklausta", + "pending": "Užklausta" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Patarimas: čia taip pat galite naudoti bet kokius DuckDuckGo bangs, pvz., !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Ieškoti \"{query}\" naudojant {label}", + "pressEnterToOpen": "Paspauskite Enter, kad atidarytumėte", + "engineSelected": "Pasirinktas {label} (!{bang})", + "typeQueryToContinue": "Įveskite paieškos užklausą, kad tęstumėte", + "emptyBangHint": "Įveskite bang, pvz., !yt, tada paspauskite tarpo klavišą, kad pasirinktumėte" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Būsena" }, "status": { - "requested": "" + "requested": "Užklausta" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Skaityti dokumentaciją", + "next": "Kitas", + "prev": "Atgal", + "done": "Baigta", + "skip": "Praleisti mokymus", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Sveiki atvykę į Homarr!", + "description": "Tai jūsų valdymo centras. Iš čia valdote lentas, programėles, integracijas, naudotojus ir serverio nustatymus. Leiskite pristatyti kiekvieną skyrių." }, "boardsList": { - "title": "", - "description": "" + "title": "Jūsų lentos", + "description": "Čia yra visi jūsų valdymo skydeliai. Kiekviena lenta turi savo išdėstymą, foną ir prieigos nustatymus. Galite matyti, kas kiekvieną sukūrė ir ar ji vieša, ar privati." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Sukurti lentą", + "description": "Spustelėkite čia, kad sukurtumėte naują valdymo skydelį arba importuotumėte jį iš ankstesnės Homarr diegimo. Kiekviena lenta gauna savo URL, kurį galite dalintis." }, "appsList": { - "title": "", - "description": "" + "title": "Jūsų programėlės", + "description": "Tai visos jūsų pridėtos programėlės – nuorodos į savarankiškai talpinamas paslaugas. Kiekviena programėlė turi piktogramą, pasirinktiną sveikatos patikrinimą ir būsenos ženklelį valdymo skydelyje." }, "appsCreate": { - "title": "", - "description": "" + "title": "Pridėti programėlę", + "description": "Čia užregistruokite naują paslaugą. Suteikite jai pavadinimą, URL ir piktogramą – ji atsiras kaip plytelė jūsų lentose su tiesiogine būsenos stebėsena." }, "integrationsList": { - "title": "", - "description": "" + "title": "Jūsų integracijos", + "description": "Tai paslaugos, prijungtos prie Homarr – Sonarr, Radarr, Plex, Jellyfin ir daugiau nei 50 kitų. Visi prisijungimo duomenys yra užšifruoti saugykloje." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Pridėti integraciją", + "description": "Čia prijunkite naują paslaugą. Pasirinkite tipą, įveskite URL ir API raktą – Homarr patikrina ryšį prieš išsaugant." }, "usersList": { - "title": "", - "description": "" + "title": "Jūsų naudotojai", + "description": "Pamatykite visus, turinčius prieigą. Grupuokite naudotojus į grupes ir valdykite, kas gali peržiūrėti ar redaguoti kiekvieną lentą." }, "usersCreate": { - "title": "", - "description": "" + "title": "Sukurti naudotoją", + "description": "Čia pridėkite naują naudotojo paskyrą. Taip pat galite naudoti kvietimo nuorodas, kad palengvintumėte įvedimą. Tai ir viskas – esate pasiruošę!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Tai jūsų lenta", + "description": "Vilkite ir paleiskite valdymo skydelį, kuriame tvarkote programėles ir valdiklius. Paspauskite Ctrl+K bet kuriuo metu, kad ieškotumėte programėlių, lentų ir veiksmų." }, "editMode": { - "title": "", - "description": "" + "title": "Redagavimo režimas", + "description": "Spustelėkite čia, kad įeitumėte į redagavimo režimą. Tada galite pridėti valdiklių, programėlių ir skyrių – vilkite, kad pakeistumėte padėtį, keiskite dydį naudodami kampų rankenėles. Spustelėkite dar kartą, kad išsaugotumėte pakeitimus." }, "settings": { - "title": "", - "description": "" + "title": "Lentos nustatymai", + "description": "Keiskite šios lentos pavadinimą, stulpelius, foną, spalvas ir kas gali ją pasiekti. Kiekviena lenta gali būti vieša arba privati." }, "switcher": { - "title": "", - "description": "" + "title": "Perjungti lentas", + "description": "Šokinėkite tarp lentų. Kurkite atskirus valdymo skydelius skirtingiems tikslams – medijai, tinklui, kiekvienam naudotojui ar bet kam kitam." }, "userMenu": { - "title": "", - "description": "" + "title": "Jūsų profilis", + "description": "Keiskite spalvų schemą, kalbą, pagrindinę lentą ir nuostatas. Taip pat galite pereiti į valdymo sritį iš čia." } } } diff --git a/packages/translation/src/lang/lv.json b/packages/translation/src/lang/lv.json index 34a6be979..86cfc30b6 100644 --- a/packages/translation/src/lang/lv.json +++ b/packages/translation/src/lang/lv.json @@ -9,8 +9,8 @@ "scratch": "Sākt no jauna", "importOldmarr": "", "restoreSqlite": "SQLite rezerves kopija", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqliteDescription": "Augšupielādējiet pilnu SQLite datu bāzes dublējumu no iepriekšējās Homarr instances. Tas atjaunos visus dēļus, lietotājus, lietotnes, integrācijas un iestatījumus.", + "backToOptions": "← Atpakaļ uz iestatīšanas opcijām" } }, "import": { @@ -95,8 +95,8 @@ }, "integrations": { "title": "Integrācijas", - "subtitle": "", - "description": "", + "subtitle": "Atlasiet pakalpojumus, ko izmantojat.", + "description": "Izvēlieties integrācijas, ko vēlaties savienot. Mēs automātiski iestatīsim jūsu informācijas paneli ar atbilstošiem logrīkiem.", "action": { "continue": "Turpināt", "skip": "Pagaidām izlaist šo soli" @@ -104,35 +104,35 @@ "configure": { "progress": "{current} no {total}", "skip": "Izlaist šo integrāciju", - "finishing": "", + "finishing": "Notiek informācijas paneļa iestatīšana...", "error": { "title": "Neizdevās iestatīt!", - "message": "" + "message": "Radās kļūda, iestatot jūsu informācijas paneli. Lūdzu, mēģiniet vēlreiz." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "URL palīgrīki", + "description": "Šie palīgrīki mēģina uzminēt jūsu pakalpojumu URL. Ja tas nedarbojas, vienkārši ievadiet adresi manuāli." } }, "urlTemplate": { "label": "Bāzes URL", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "placeholder": "homelab.local vai 192.168.1.1", + "hint": "Ievadiet savu bāzes domēnu vai IP, lai automātiski aizpildītu integrāciju URL", + "warning": "Bāzes URL iestatīšana tagad automātiski aizpildīs visus integrāciju URL, ietaupot laiku iestatīšanas laikā", + "preview": "piem., {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Apakšdomēns", + "hostPort": "Resursdators:Ports" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker atklāja {count} pakalpojumus", + "detectedBreakdown": "{integrations} integrācijas · {apps} lietotnes", + "summary": "Homarr atklāja {apps} lietotnes, {integrations} no tām ir iebūvētas integrācijas", + "appBadge": "Lietotne", + "appSectionLabel": "Pievienojamās lietotnes informācijas panelim ({count} atlasītas)", + "scanning": "Notiek Docker skenēšana...", + "scanningDescription": "Meklē darbojošos konteinerus jūsu sistēmā" } }, "finish": { @@ -154,23 +154,23 @@ "name": "Lietotājs", "page": { "login": { - "title": "", - "subtitle": "" + "title": "Piesakieties savā kontā", + "subtitle": "Laipni lūgti! Lūdzu, ievadiet savus akreditācijas datus" }, "invite": { "title": "Pievienoties Homarr", - "subtitle": "", - "description": "" + "subtitle": "Laipni lūgti Homarr! Lūdzu, izveidojiet savu kontu", + "description": "Jūs uzaicināja {username}" }, "init": { - "title": "", - "subtitle": "" + "title": "Jauna Homarr instalācija", + "subtitle": "Lūdzu, izveidojiet sākotnējo administratora lietotāju" } }, "field": { "email": { "label": "E-pasts", - "verified": "" + "verified": "Apstiprināts" }, "username": { "label": "Lietotājvārds" @@ -193,10 +193,10 @@ "label": "Iepriekšējā parole" }, "homeBoard": { - "label": "" + "label": "Sākuma dēlis" }, "pingIconsEnabled": { - "label": "" + "label": "Izmantot ikonas pingiem" }, "enableRightClickOnWidgets": { "label": "", @@ -209,29 +209,29 @@ "label": "" }, "ddgBangs": { - "label": "" + "label": "Iespējot DuckDuckGo bangs" } }, "error": { - "usernameTaken": "" + "usernameTaken": "Lietotājvārds jau aizņemts" }, "action": { "login": { "label": "Pieslēgties", - "labelWith": "", + "labelWith": "Pieteikties ar {provider}", "notification": { "success": { - "title": "", + "title": "Pieteikšanās veiksmīga", "message": "Jūs esat veiksmīgi pieteicies" }, "error": { "title": "Pieteikšanās neizdevās", - "message": "" + "message": "Jūsu pieteikšanās neizdevās" } }, "forgotPassword": { - "label": "", - "description": "" + "label": "Aizmirsāt paroli?", + "description": "Administrators var izmantot šo komandu, lai atiestatītu jūsu paroli:" } }, "register": { @@ -239,11 +239,11 @@ "notification": { "success": { "title": "Konts izveidots", - "message": "" + "message": "Lūdzu, piesakieties, lai turpinātu" }, "error": { - "title": "", - "message": "" + "title": "Konta izveide neizdevās", + "message": "Jūsu kontu nevarēja izveidot" } } }, @@ -262,10 +262,10 @@ "changeHomeBoard": { "notification": { "success": { - "message": "" + "message": "Sākuma dēlis veiksmīgi nomainīts" }, "error": { - "message": "" + "message": "Nevar nomainīt sākuma dēli" } } }, @@ -282,58 +282,58 @@ "changeFirstDayOfWeek": { "notification": { "success": { - "message": "" + "message": "Nedēļas pirmā diena veiksmīgi nomainīta" }, "error": { - "message": "" + "message": "Nevar nomainīt nedēļas pirmo dienu" } } }, "changePingIconsEnabled": { "notification": { "success": { - "message": "" + "message": "Pinga ikonas veiksmīgi pārslēgtas" }, "error": { - "message": "" + "message": "Nevar pārslēgt pinga ikonas" } } }, "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo bangs veiksmīgi pārslēgti" }, "error": { - "message": "" + "message": "Nevar pārslēgt DuckDuckGo bangs" } } }, "manageAvatar": { "changeImage": { - "label": "", + "label": "Mainīt attēlu", "notification": { "success": { - "message": "" + "message": "Attēls veiksmīgi nomainīts" }, "error": { - "message": "" + "message": "Nevar nomainīt attēlu" }, "toLarge": { - "title": "", - "message": "" + "title": "Attēls ir pārāk liels", + "message": "Maksimālais attēla izmērs ir {size}" } } }, "removeImage": { - "label": "", - "confirm": "", + "label": "Noņemt attēlu", + "confirm": "Vai tiešām vēlaties noņemt attēlu?", "notification": { "success": { - "message": "" + "message": "Attēls veiksmīgi noņemts" }, "error": { - "message": "" + "message": "Nevar noņemt attēlu" } } } @@ -341,34 +341,34 @@ "editProfile": { "notification": { "success": { - "message": "" + "message": "Profils veiksmīgi atjaunināts" }, "error": { - "message": "" + "message": "Nevar atjaunināt profilu" } } }, "delete": { - "label": "", - "description": "", - "confirm": "" + "label": "Dzēst lietotāju neatgriezeniski", + "description": "Dzēš šo lietotāju, ieskaitot viņa preferences. Dēļi netiks dzēsti. Lietotājs netiks informēts.", + "confirm": "Vai esat pārliecināts, ka vēlaties dzēst lietotāju {username} ar viņa preferencēm?" }, "select": { - "label": "", - "notFound": "" + "label": "Atlasīt lietotāju", + "notFound": "Lietotājs nav atrasts" }, "transfer": { - "label": "" + "label": "Atlasīt jauno īpašnieku" } } }, "group": { - "title": "", - "name": "", - "search": "", + "title": "Grupas", + "name": "Grupa", + "search": "Atrast grupu", "field": { "name": "Nosaukums", - "members": "", + "members": "Dalībnieki", "homeBoard": { "label": "", "description": "" @@ -383,8 +383,8 @@ "title": "Administrators", "item": { "admin": { - "label": "", - "description": "" + "label": "Administrators", + "description": "Dalībniekiem ar šo atļauju ir pilna piekļuve visām funkcijām un iestatījumiem" } } }, @@ -392,20 +392,20 @@ "title": "Lietotnes", "item": { "create": { - "label": "", - "description": "" + "label": "Izveidot lietotnes", + "description": "Atļaut dalībniekiem izveidot lietotnes" }, "use-all": { - "label": "", - "description": "" + "label": "Izmantot visas lietotnes", + "description": "Atļaut dalībniekiem pievienot jebkuras lietotnes saviem dēļiem" }, "modify-all": { - "label": "", - "description": "" + "label": "Modificēt visas lietotnes", + "description": "Atļaut dalībniekiem modificēt visas lietotnes" }, "full-all": { - "label": "", - "description": "" + "label": "Pilna lietotņu piekļuve", + "description": "Atļaut dalībniekiem pārvaldīt, izmantot un dzēst jebkuru lietotni" } } }, @@ -413,165 +413,165 @@ "title": "Dēļi", "item": { "create": { - "label": "", - "description": "" + "label": "Izveidot dēļus", + "description": "Atļaut dalībniekiem izveidot dēļus" }, "view-all": { - "label": "", - "description": "" + "label": "Skatīt visus dēļus", + "description": "Atļaut dalībniekiem skatīt visus dēļus" }, "modify-all": { - "label": "", - "description": "" + "label": "Modificēt visus dēļus", + "description": "Atļaut dalībniekiem modificēt visus dēļus (neietver piekļuves kontroli un bīstamo zonu)" }, "full-all": { - "label": "", - "description": "" + "label": "Pilna dēļu piekļuve", + "description": "Atļaut dalībniekiem skatīt, modificēt un dzēst visus dēļus (ieskaitot piekļuves kontroli un bīstamo zonu)" } } }, "integration": { - "title": "", + "title": "Integrācijas", "item": { "create": { - "label": "", - "description": "" + "label": "Izveidot integrācijas", + "description": "Atļaut dalībniekiem izveidot integrācijas" }, "use-all": { - "label": "", - "description": "" + "label": "Izmantot visas integrācijas", + "description": "Atļauj dalībniekiem pievienot jebkuras integrācijas saviem dēļiem" }, "interact-all": { - "label": "", - "description": "" + "label": "Mijiedarboties ar jebkuru integrāciju", + "description": "Atļaut dalībniekiem mijiedarboties ar jebkuru integrāciju" }, "full-all": { - "label": "", - "description": "" + "label": "Pilna integrāciju piekļuve", + "description": "Atļaut dalībniekiem pārvaldīt, izmantot un mijiedarboties ar jebkuru integrāciju" } } }, "media": { - "title": "", + "title": "Multimediji", "item": { "upload": { - "label": "", - "description": "" + "label": "Augšupielādēt multimedijus", + "description": "Atļaut dalībniekiem augšupielādēt multimedijus" }, "view-all": { - "label": "", - "description": "" + "label": "Skatīt visus multimedijus", + "description": "Atļaut dalībniekiem skatīt visus multimedijus" }, "full-all": { - "label": "", - "description": "" + "label": "Pilna multivides piekļuve", + "description": "Atļaut dalībniekiem pārvaldīt un dzēst jebkuru multividi" } } }, "other": { - "title": "", + "title": "Cits", "item": { "view-logs": { - "label": "", - "description": "" + "label": "Skatīt žurnālus", + "description": "Atļaut dalībniekiem skatīt žurnālus" } } }, "search-engine": { - "title": "", + "title": "Meklētājprogrammas", "item": { "create": { - "label": "", - "description": "" + "label": "Izveidot meklētājprogrammas", + "description": "Atļaut dalībniekiem izveidot meklētājprogrammas" }, "modify-all": { - "label": "", - "description": "" + "label": "Modificēt visas meklētājprogrammas", + "description": "Atļaut dalībniekiem modificēt visas meklētājprogrammas" }, "full-all": { - "label": "", - "description": "" + "label": "Pilna meklētājprogrammu piekļuve", + "description": "Atļaut dalībniekiem pārvaldīt un dzēst jebkuru meklētājprogrammu" } } } }, "memberNotice": { - "mixed": "", - "external": "" + "mixed": "Daži dalībnieki ir no ārējiem pakalpojumu sniedzējiem un tos šeit nevar pārvaldīt", + "external": "Visi dalībnieki ir no ārējiem pakalpojumu sniedzējiem un tos šeit nevar pārvaldīt" }, "reservedNotice": { - "message": "" + "message": "Šī grupa ir rezervēta sistēmas lietošanai un ierobežo dažas darbības. " }, "action": { "create": { - "label": "", + "label": "Jauna grupa", "notification": { "success": { - "message": "" + "message": "Grupa tika veiksmīgi izveidota" }, "error": { - "message": "" + "message": "Grupu nevarēja izveidot" } } }, "transfer": { - "label": "", - "description": "", - "confirm": "", + "label": "Nodot īpašumtiesības", + "description": "Nodot šīs grupas īpašumtiesības citam lietotājam.", + "confirm": "Vai esat pārliecināts, ka vēlaties nodot īpašumtiesības grupai {name} lietotājam {username}?", "notification": { "success": { - "message": "" + "message": "Grupa {group} veiksmīgi nodota {user}" }, "error": { - "message": "" + "message": "Nevar nodot īpašumtiesības" } } }, "addMember": { - "label": "" + "label": "Pievienot dalībnieku" }, "removeMember": { - "label": "", - "confirm": "" + "label": "Noņemt dalībnieku", + "confirm": "Vai esat pārliecināts, ka vēlaties noņemt {user} no šīs grupas?" }, "delete": { - "label": "", - "description": "", - "confirm": "", + "label": "Dzēst grupu", + "description": "Kad grupa tiek dzēsta, atgriešanās vairs nav iespējama. Lūdzu, esiet pārliecināts.", + "confirm": "Vai esat pārliecināts, ka vēlaties dzēst grupu {name}?", "notification": { "success": { - "message": "" + "message": "Grupa {name} veiksmīgi dzēsta" }, "error": { - "message": "" + "message": "Nevar dzēst grupu {name}" } } }, "changePermissions": { "notification": { "success": { - "title": "", - "message": "" + "title": "Atļaujas saglabātas", + "message": "Atļaujas ir veiksmīgi saglabātas" }, "error": { - "title": "", - "message": "" + "title": "Atļaujas nav saglabātas", + "message": "Atļaujas nav saglabātas" } } }, "update": { "notification": { "success": { - "message": "" + "message": "Grupa {name} tika veiksmīgi saglabāta" }, "error": { - "message": "" + "message": "Nevar saglabāt grupu {name}" } } }, "select": { - "label": "", - "notFound": "" + "label": "Atlasīt grupu", + "notFound": "Grupa nav atrasta" }, "settings": { "board": { @@ -609,47 +609,47 @@ "list": { "title": "Lietotnes", "noResults": { - "title": "", - "action": "" + "title": "Vēl nav nevienas lietotnes", + "action": "Izveidojiet savu pirmo lietotni" } }, "create": { - "title": "", + "title": "Jauna lietotne", "notification": { "success": { - "title": "", - "message": "" + "title": "Izveide veiksmīga", + "message": "Lietotne tika veiksmīgi izveidota" }, "error": { - "title": "", - "message": "" + "title": "Izveide neizdevās", + "message": "Lietotni nevarēja izveidot" } } }, "edit": { - "title": "", + "title": "Rediģēt lietotni", "notification": { "success": { - "title": "", - "message": "" + "title": "Izmaiņas veiksmīgi piemērotas", + "message": "Lietotne tika veiksmīgi saglabāta" }, "error": { - "title": "", - "message": "" + "title": "Nevar piemērot izmaiņas", + "message": "Lietotni nevarēja saglabāt" } } }, "delete": { - "title": "", - "message": "", + "title": "Dzēst lietotni", + "message": "Vai esat pārliecināts, ka vēlaties dzēst lietotni {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Dzēšana veiksmīga", + "message": "Lietotne tika veiksmīgi dzēsta" }, "error": { - "title": "", - "message": "" + "title": "Dzēšana neizdevās", + "message": "Nevar dzēst lietotni" } } } @@ -659,10 +659,10 @@ "label": "Nosaukums" }, "description": { - "label": "" + "label": "Apraksts" }, "url": { - "label": "" + "label": "Url" }, "useDifferentUrlForPing": { "checkbox": { @@ -673,8 +673,8 @@ }, "action": { "select": { - "label": "", - "notFound": "", + "label": "Atlasīt lietotni", + "notFound": "Lietotne nav atrasta", "search": "", "noResults": "", "action": "", @@ -691,30 +691,30 @@ "customWidget": { "page": { "list": { - "title": "", - "noResults": "", + "title": "Pielāgotie logrīki", + "noResults": "Vēl nav pielāgotu logrīku. Izveidojiet pirmo!", "loading": "Notiek ielāde..." }, "create": { - "title": "", - "subtitle": "" + "title": "Izveidot pielāgotu logrīku", + "subtitle": "Definējiet API URL, autentifikāciju un to, kā attēlot atbildes datus." }, "edit": { - "title": "" + "title": "Rediģēt pielāgoto logrīku" } }, "action": { "create": "Izveidot", - "import": "", - "save": "", - "delete": "", - "deleteConfirm": "", - "export": "", - "addMapping": "", - "addColumn": "", - "edit": "", - "removeMapping": "", - "removeColumn": "", + "import": "Importēt", + "save": "Saglabāt", + "delete": "Dzēst pielāgoto logrīku", + "deleteConfirm": "Vai tiešām vēlaties dzēst \"{name}\"? Šo darbību nevar atsaukt.", + "export": "Eksportēt", + "addMapping": "Pievienot kartējumu", + "addColumn": "Pievienot kolonnu", + "edit": "Rediģēt", + "removeMapping": "Noņemt kartējumu", + "removeColumn": "Noņemt kolonnu", "addItem": "", "removeItem": "", "addBar": "", @@ -896,22 +896,22 @@ "integration": { "page": { "list": { - "title": "", - "search": "", + "title": "Integrācijas", + "search": "Meklēt integrācijas", "noResults": { - "title": "" + "title": "Vēl nav nevienas integrācijas" } }, "create": { - "title": "", + "title": "Jauna {name} integrācija", "notification": { "success": { - "title": "", - "message": "" + "title": "Izveide veiksmīga", + "message": "Integrācija tika veiksmīgi izveidota" }, "error": { - "title": "", - "message": "" + "title": "Izveide neizdevās", + "message": "Integrāciju nevarēja izveidot" } }, "app": { @@ -931,15 +931,15 @@ } }, "edit": { - "title": "", + "title": "Rediģēt {name} integrāciju", "notification": { "success": { - "title": "", - "message": "" + "title": "Izmaiņas veiksmīgi piemērotas", + "message": "Integrācija tika veiksmīgi saglabāta" }, "error": { - "title": "", - "message": "" + "title": "Nevar piemērot izmaiņas", + "message": "Integrāciju nevarēja saglabāt" } }, "app": { @@ -951,16 +951,16 @@ } }, "delete": { - "title": "", - "message": "", + "title": "Dzēst integrāciju", + "message": "Vai esat pārliecināts, ka vēlaties dzēst integrāciju {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Dzēšana veiksmīga", + "message": "Integrācija tika veiksmīgi dzēsta" }, "error": { - "title": "", - "message": "" + "title": "Dzēšana neizdevās", + "message": "Nevar dzēst integrāciju" } } } @@ -970,7 +970,7 @@ "label": "Nosaukums" }, "url": { - "label": "" + "label": "Url" }, "attemptSearchEngineCreation": { "label": "", @@ -987,52 +987,52 @@ "placeholder": "" }, "apiKeySettings": { - "label": "" + "label": "Iegūt API atslēgu" } }, "action": { - "create": "" + "create": "Jauna integrācija" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} logrīki", + "noWidgets": "Nav logrīku", + "detected": "Atklāts caur Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Multivide", + "calendar": "Kalendārs", + "mediaSearch": "Meklēt", + "mediaRelease": "Izlaidumi", + "mediaRequest": "Pieprasījumi", + "downloadClient": "Lejupielādes", + "usenet": "Usenet", + "torrent": "Torenti", + "miscellaneous": "Dažādi", + "smartHomeServer": "Viedā māja", + "indexerManager": "Indeksētājs", + "healthMonitoring": "Veselība", + "search": "Meklēt", + "mediaTranscoding": "Transkodēšana", + "networkController": "Tīkls", + "releasesProvider": "Izlaidumi", + "notifications": "Paziņojumi", + "firewall": "Ugunsmūris", + "timetable": "Laika grafiks", + "photoService": "Fotoattēli", + "documents": "Dokumenti", + "notes": "Piezīmes", + "mediaMonitoring": "Uzraudzība", + "speedtest": "Ātruma tests", + "analytics": "Analītika", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Mediju bibliotēka", + "uptimeMonitoring": "Pieejamības uzraudzība" }, "testConnection": { "action": { - "create": "", - "edit": "" + "create": "Testēt savienojumu un izveidot", + "edit": "Testēt savienojumu un saglabāt" }, "error": { "common": { @@ -1160,71 +1160,71 @@ } } }, - "alertNotice": "", + "alertNotice": "Saglabāšanas poga ir iespējota, kad ir izveidots veiksmīgs savienojums", "notification": { "success": { - "title": "", - "message": "" + "title": "Savienojums veiksmīgs", + "message": "Savienojums tika veiksmīgi izveidots" }, "invalidUrl": { "title": "Nederīgs URL", - "message": "" + "message": "URL nav derīgs" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "Trūkst akreditācijas datu", + "message": "Netika norādīti visi akreditācijas dati" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "Nederīgi akreditācijas dati", + "message": "Akreditācijas dati ir nederīgi" }, "commonError": { - "title": "", - "message": "" + "title": "Savienojums neizdevās", + "message": "Savienojumu nevarēja izveidot" }, "badRequest": { - "title": "", - "message": "" + "title": "Slikts pieprasījums", + "message": "Pieprasījums bija nepareizi veidots" }, "unauthorized": { - "title": "", - "message": "" + "title": "Neautorizēts", + "message": "Iespējams, nepareizi akreditācijas dati" }, "forbidden": { - "title": "", - "message": "" + "title": "Aizliegts", + "message": "Iespējams, trūkst atļauju" }, "notFound": { - "title": "", - "message": "" + "title": "Nav atrasts", + "message": "Iespējams, nepareizs url vai ceļš" }, "internalServerError": { - "title": "", - "message": "" + "title": "Iekšēja servera kļūda", + "message": "Serveris saskārās ar kļūdu" }, "serviceUnavailable": { - "title": "", - "message": "" + "title": "Pakalpojums nav pieejams", + "message": "Serveris pašlaik nav pieejams" }, "connectionAborted": { - "title": "", - "message": "" + "title": "Savienojums pārtraukts", + "message": "Savienojums tika pārtraukts" }, "domainNotFound": { - "title": "", - "message": "" + "title": "Domēns nav atrasts", + "message": "Domēnu nevarēja atrast" }, "connectionRefused": { - "title": "", - "message": "" + "title": "Savienojums atteikts", + "message": "Savienojums tika atteikts" }, "invalidJson": { - "title": "", - "message": "" + "title": "Nederīgs JSON", + "message": "Atbilde nebija derīgs JSON" }, "wrongPath": { - "title": "", - "message": "" + "title": "Nepareizs ceļš", + "message": "Ceļš, iespējams, nav pareizs" }, "tooManyRequests": { "title": "", @@ -1233,29 +1233,29 @@ } }, "secrets": { - "title": "", - "lastUpdated": "", + "title": "Noslēpumi", + "lastUpdated": "Pēdējo reizi atjaunināts {date}", "notSet": { "label": "", "tooltip": "" }, - "secureNotice": "", + "secureNotice": "Šo noslēpumu nevar iegūt pēc izveidošanas", "reset": { - "title": "", - "message": "" + "title": "Atiestatīt noslēpumu", + "message": "Vai esat pārliecināts, ka vēlaties atiestatīt šo noslēpumu?" }, "noSecretsRequired": { - "segmentTitle": "", - "text": "" + "segmentTitle": "Nav noslēpumu", + "text": "Šai integrācijai nav nepieciešami noslēpumi" }, "kind": { "username": { "label": "Lietotājvārds", - "newLabel": "" + "newLabel": "Jauns lietotājvārds" }, "apiKey": { - "label": "", - "newLabel": "" + "label": "API atslēga", + "newLabel": "Jauna API atslēga" }, "password": { "label": "Parole", @@ -1310,33 +1310,33 @@ "newLabel": "" }, "slug": { - "label": "", - "newLabel": "" + "label": "Statusa lapas daļa", + "newLabel": "Jauna statusa lapas daļa" } } }, "permission": { - "use": "", - "interact": "", - "full": "" + "use": "Atlasiet integrācijas vienumos", + "interact": "Mijiedarboties ar integrācijām", + "full": "Pilna integrāciju piekļuve" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Pašmitināts audiogrāmatu un podkāstu serveris" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Pašmitināts mūzikas straumēšanas serveris ar Subsonic API saderību" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Pašmitināta pieejamības uzraudzība ar publiskām statusa lapām", "secret": { "slug": { - "description": "" + "description": "Jūsu publiskās statusa lapas daļa. Ja nav iestatīts, noklusējums ir \"default\"." }, "apiKey": { - "description": "" + "description": "Neobligāta API atslēga autentificētai piekļuvei /metrics" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Dokumentu pārvaldības sistēma skenētu dokumentu arhivēšanai un organizēšanai" }, "patchmon": { "name": "", @@ -1358,8 +1358,8 @@ } }, "media": { - "plural": "", - "search": "", + "plural": "Multimediji", + "search": "Atrast multividi", "field": { "name": "Nosaukums", "size": "Lielums", @@ -1367,137 +1367,137 @@ }, "action": { "upload": { - "label": "", - "file": "", + "label": "Augšupielādēt multividi", + "file": "Izvēlēties failu", "notification": { "success": { - "message": "" + "message": "Multivide tika veiksmīgi augšupielādēta" }, "error": { - "message": "" + "message": "Multividi nevarēja augšupielādēt" } } }, "delete": { - "label": "", - "description": "", + "label": "Dzēst multividi", + "description": "Vai esat pārliecināts, ka vēlaties dzēst multividi ?", "notification": { "success": { - "message": "" + "message": "Multivide tika veiksmīgi dzēsta" }, "error": { - "message": "" + "message": "Multividi nevarēja dzēst" } } }, "copy": { - "label": "" + "label": "Kopēt URL" }, "open": { "label": "" } }, "noResults": { - "title": "" + "title": "Nav augšupielādētu multivides failu" } }, "common": { "success": "", - "beta": "", + "beta": "Beta", "error": "Kļūda", "action": { "add": "Pievienot", "apply": "Lietot", - "backToOverview": "", - "skip": "", + "backToOverview": "Atpakaļ uz pārskatu", + "skip": "Izlaist", "change": "", "create": "Izveidot", "createAnother": "", "edit": "Rediģēt", - "import": "", + "import": "Importēt", "insert": "Ievietot", "remove": "Noņemt", "save": "Saglabāt", "saveChanges": "Saglabāt izmaiņas", "cancel": "Atcelt", "delete": "Dzēst", - "discard": "", + "discard": "Atmest", "close": "", "confirm": "Apstipriniet", - "continue": "", + "continue": "Turpināt", "previous": "Iepriekšējais", "next": "Nākamais", - "checkoutDocs": "", + "checkoutDocs": "Skatīt dokumentāciju", "checkLogs": "", "tryAgain": "Mēģiniet vēlreiz", - "loading": "", - "show": "", - "hide": "" + "loading": "Notiek ielāde", + "show": "Rādīt", + "hide": "Paslēpt" }, - "here": "", + "here": "šeit", "iconPicker": { - "label": "", - "header": "", + "label": "Ikonas URL", + "header": "Rakstiet nosaukumu vai objektus, lai filtrētu ikonas... Homarr pārmeklēs {countIcons} ikonas jūsu vietā.", "headerLoading": "", "noResults": "", "error": "" }, "colorScheme": { "options": { - "auto": "", + "auto": "Automātiski", "light": "", "dark": "" } }, "information": { - "min": "", - "max": "", - "days": "", - "hours": "", - "minutes": "" + "min": "Min", + "max": "Maks", + "days": "Dienas", + "hours": "Stundas", + "minutes": "Minūtes" }, "notification": { "create": { - "success": "", - "error": "" + "success": "Izveide veiksmīga", + "error": "Izveide neizdevās" }, "delete": { - "success": "", - "error": "" + "success": "Dzēšana veiksmīga", + "error": "Dzēšana neizdevās" }, "update": { - "success": "", - "error": "" + "success": "Izmaiņas veiksmīgi piemērotas", + "error": "Nevar piemērot izmaiņas" }, "transfer": { - "success": "", - "error": "" + "success": "Nodošana veiksmīga", + "error": "Nodošana neizdevās" } }, "multiSelect": { - "placeholder": "" + "placeholder": "Izvēlieties vienu vai vairākas vērtības" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "Pievienot vairāk vērtību", + "addLabel": "Pievienot {value}" }, "select": { - "placeholder": "", + "placeholder": "Izvēlēties vērtību", "badge": { - "recommended": "" + "recommended": "Ieteicams" } }, "userAvatar": { "menu": { - "switchToDarkMode": "", - "switchToLightMode": "", - "management": "", + "switchToDarkMode": "Pārslēgt uz tumšo režīmu", + "switchToLightMode": "Pārslēgt uz gaišo režīmu", + "management": "Pārvaldība", "docker": "", "preferences": "Jūsu iestatījumi", - "logout": "", + "logout": "Izrakstīties", "login": "Pieslēgties", - "homeBoard": "", - "loggedOut": "", + "homeBoard": "Jūsu sākuma dēlis", + "loggedOut": "Izrakstījies", "updateAvailable": "" } }, @@ -1508,8 +1508,8 @@ "applications": "", "services": "", "preview": { - "show": "", - "hide": "" + "show": "Rādīt priekšskatījumu", + "hide": "Paslēpt priekšskatījumu" }, "zod": { "errors": { @@ -1519,7 +1519,7 @@ "startsWith": "Šim laukam jāsākas ar {startsWith}", "endsWith": "Šim laukam jābeidzas ar {endsWith}", "includes": "Šajā laukā jāiekļauj {includes}", - "invalidEmail": "" + "invalidEmail": "Šim laukam jābūt derīgai e-pasta adresei" }, "tooSmall": { "string": "Šim laukam jābūt vismaz {minimum} rakstzīmju garam", @@ -1530,13 +1530,13 @@ "number": "Šim laukam jābūt mazākam vai vienādam ar {maximum}" }, "custom": { - "passwordsDoNotMatch": "", - "passwordRequirements": "", - "boardAlreadyExists": "", - "invalidFileType": "", + "passwordsDoNotMatch": "Paroles nesakrīt", + "passwordRequirements": "Parole neatbilst prasībām", + "boardAlreadyExists": "Dēlis ar šādu nosaukumu jau pastāv", + "invalidFileType": "Nederīgs faila tips, sagaidīts {expected}", "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", + "fileTooLarge": "Fails ir pārāk liels, maksimālais izmērs ir {maxSize}", + "invalidConfiguration": "Nederīga konfigurācija", "groupNameTaken": "" } } @@ -1551,8 +1551,8 @@ "section": { "dynamic": { "action": { - "create": "", - "remove": "" + "create": "Jauna dinamiskā sadaļa", + "remove": "Noņemt dinamisko sadaļu" }, "option": { "title": { @@ -1566,8 +1566,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Noņemt dinamisko sadaļu", + "message": "Vai esat pārliecināts, ka vēlaties noņemt šo dinamisko sadaļu? Vienumi tiks pārvietoti uz to pašu atrašanās vietu vecāku sadaļā." } }, "category": { @@ -1577,32 +1577,32 @@ } }, "action": { - "create": "", - "edit": "", - "remove": "", + "create": "Jauna kategorija", + "edit": "Pārdēvēt kategoriju", + "remove": "Noņemt kategoriju", "moveUp": "Virzīt augšup", "moveDown": "Virzīt lejup", - "createAbove": "", - "createBelow": "", + "createAbove": "Jauna kategorija augšā", + "createBelow": "Jauna kategorija apakšā", "openAllInNewTabs": "" }, "create": { - "title": "", - "submit": "" + "title": "Jauna kategorija", + "submit": "Pievienot kategoriju" }, "remove": { - "title": "", - "message": "" + "title": "Noņemt kategoriju", + "message": "Vai esat pārliecināts, ka vēlaties noņemt kategoriju {name}?" }, "edit": { - "title": "", - "submit": "" + "title": "Pārdēvēt kategoriju", + "submit": "Pārdēvēt kategoriju" }, "menu": { "label": { - "create": "", + "create": "Jauna kategorija", "changePosition": "Mainīt pozīciju", - "settings": "" + "settings": "Iestatījumi" } }, "openAllInNewTabs": { @@ -1613,12 +1613,12 @@ }, "item": { "action": { - "create": "", - "import": "", - "edit": "", - "moveResize": "", - "duplicate": "", - "remove": "" + "create": "Jauns vienums", + "import": "Importēt vienumu", + "edit": "Rediģēt vienumu", + "moveResize": "Pārvietot / mainīt izmēru vienumam", + "duplicate": "Dublēt vienumu", + "remove": "Noņemt vienumu" }, "menu": { "label": { @@ -1635,12 +1635,12 @@ } }, "create": { - "title": "", + "title": "Izvēlieties pievienojamo vienumu", "search": "", - "addToBoard": "" + "addToBoard": "Pievienot dēlim" }, "moveResize": { - "title": "", + "title": "Pārvietot / mainīt izmēru vienumam", "field": { "width": { "label": "Platums" @@ -1649,35 +1649,35 @@ "label": "Augstums" }, "xOffset": { - "label": "" + "label": "X nobīde" }, "yOffset": { - "label": "" + "label": "Y nobīde" } } }, "edit": { - "title": "", + "title": "Rediģēt vienumu", "tab": { - "widget": "", - "app": "" + "widget": "Rediģēt logrīku", + "app": "Rediģēt lietotni" }, "app": { - "propagationNotice": "" + "propagationNotice": "Izmaiņas šajā lietotnē tiks piemērotas visur, kur tā tiek izmantota visos informācijas paneļos." }, "advancedOptions": { - "label": "", - "title": "" + "label": "Papildu opcijas", + "title": "Papildu vienumu opcijas" }, "field": { "integrations": { - "label": "" + "label": "Integrācijas" }, "title": { "label": "" }, "customCssClasses": { - "label": "" + "label": "Pielāgotas css klases" }, "borderColor": { "label": "" @@ -1685,8 +1685,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Noņemt vienumu", + "message": "Vai esat pārliecināts, ka vēlaties noņemt šo vienumu?" } }, "widget": { @@ -1698,17 +1698,17 @@ "loadError": "" }, "app": { - "name": "", - "description": "", + "name": "Lietotne", + "description": "Iegulst lietotni dēlī.", "option": { "appId": { - "label": "" + "label": "Izvēlēties lietotni" }, "openInNewTab": { "label": "Atvērt jaunā cilnē" }, "showTitle": { - "label": "" + "label": "Rādīt lietotnes nosaukumu" }, "pingEnabled": { "label": "" @@ -1734,17 +1734,17 @@ }, "error": { "notFound": { - "label": "", - "tooltip": "" + "label": "Nav lietotnes", + "tooltip": "Jums nav izvēlēta derīga lietotne" } } }, "bookmarks": { - "name": "", - "description": "", + "name": "Grāmatzīmes", + "description": "Parāda vairākas lietotņu saites", "option": { "title": { - "label": "" + "label": "Nosaukums" }, "layout": { "label": "Izkārtojums", @@ -1756,7 +1756,7 @@ "label": "Vertikāli" }, "grid": { - "label": "" + "label": "Režģis" }, "gridHorizontal": { "label": "" @@ -1776,11 +1776,11 @@ "label": "" }, "withBorder": { - "label": "" + "label": "Rādīt apmali" }, "items": { - "label": "", - "add": "" + "label": "Grāmatzīmes", + "add": "Pievienot grāmatzīmi" } } }, @@ -1794,8 +1794,8 @@ } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "DNS cauruma kopsavilkums", + "description": "Parāda jūsu DNS cauruma kopsavilkumu", "option": { "layout": { "label": "Izkārtojums", @@ -1807,28 +1807,28 @@ "label": "Vertikāli" }, "grid": { - "label": "" + "label": "Režģis" } } }, "usePiHoleColors": { - "label": "" + "label": "Izmantot Pi-Hole krāsas" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "Neizdevās iegūt DNS cauruma kopsavilkumu", + "integrationsDisconnected": "Nav datu, visas integrācijas ir atvienotas" }, "data": { "adsBlockedToday": "Šodien bloķēti", "adsBlockedTodayPercentage": "Šodien bloķēti", "dnsQueriesToday": "Pieprasījumi šodien", - "domainsBeingBlocked": "" + "domainsBeingBlocked": "Domēni bloķēšanas sarakstā" }, "domainsTooltip": "" }, "dnsHoleControls": { - "name": "", + "name": "DNS cauruma vadības elementi", "description": "Vadiet PiHole vai AdGuard no sava informācijas paneļa", "option": { "layout": { @@ -1841,62 +1841,62 @@ "label": "Vertikāli" }, "grid": { - "label": "" + "label": "Režģis" } } }, "showToggleAllButtons": { - "label": "" + "label": "Rādīt Pārslēgt Visas pogas" } }, "error": { - "internalServerError": "" + "internalServerError": "Neizdevās vadīt DNS caurumu" }, "controls": { - "enableAll": "", - "disableAll": "", - "setTimer": "", - "set": "", + "enableAll": "Iespējot visu", + "disableAll": "Atspējot visu", + "setTimer": "Iestatīt taimeri", + "set": "Iestatīt", "enabled": "Iespējots", "disabled": "Atspējots", - "processing": "", - "disconnected": "", - "hours": "", - "minutes": "", - "unlimited": "" + "processing": "Apstrādā", + "disconnected": "Atvienots", + "hours": "Stundas", + "minutes": "Minūtes", + "unlimited": "Atstāt tukšu, lai neierobežotu" } }, "clock": { - "name": "", + "name": "Datums un laiks", "description": "Rāda pašreizējo datumu un laiku.", "option": { "customTitleToggle": { - "label": "", - "description": "" + "label": "Pielāgots nosaukums/pilsētas attēlojums", + "description": "Parādiet pielāgotu nosaukumu vai pilsētas/valsts nosaukumu pulksteņa augšpusē." }, "customTitle": { - "label": "" + "label": "Nosaukums" }, "is24HourFormat": { - "label": "", - "description": "" + "label": "24 stundu formāts", + "description": "Izmantot 24 stundu formātu, nevis 12 stundu formātu" }, "showSeconds": { - "label": "" + "label": "Rādīt sekundes" }, "useCustomTimezone": { - "label": "" + "label": "Izmantot fiksētu laika joslu" }, "timezone": { "label": "Laika zona", - "description": "" + "description": "Izvēlieties laika joslu atbilstoši IANA standartam" }, "showDate": { - "label": "" + "label": "Rādīt datumu" }, "dateFormat": { - "label": "", - "description": "" + "label": "Datuma formāts", + "description": "Kā datumam jāizskatās" }, "customTimeFormat": { "label": "", @@ -1953,7 +1953,7 @@ }, "notebook": { "name": "Piezīmes", - "description": "", + "description": "Vienkāršs piezīmju bloka logrīks, kas atbalsta markdown", "option": { "showToolbar": { "label": "Rādīt rīkjoslu, lai palīdzētu rakstīt markdown tekstu" @@ -2052,7 +2052,7 @@ "saveFailed": "" }, "iframe": { - "name": "", + "name": "iFrame", "description": "Iegult jebkuru saturu no interneta. Dažas vietnes var ierobežot piekļuvi.", "option": { "embedUrl": { @@ -2087,32 +2087,32 @@ } }, "error": { - "noUrl": "", + "noUrl": "Nav norādīts iFrame URL", "unsupportedProtocol": "", "noBrowerSupport": "Jūsu pārlūkprogramma neatbalsta iframe. Lūdzu, atjauniniet pārlūkprogrammu." } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "Vienības stāvoklis", + "description": "Parādīt vienības stāvokli un pēc izvēles to pārslēgt", "option": { "entityId": { "label": "Vienības ID" }, "displayName": { - "label": "" + "label": "Parādāmais nosaukums" }, "entityUnit": { - "label": "" + "label": "Vienības mērvienība" }, "clickable": { - "label": "" + "label": "Noklikšķināms" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "Izpildīt automatizāciju", + "description": "Aktivizēt automatizāciju ar vienu klikšķi", "option": { "displayName": { "label": "Parādāmais nosaukums" @@ -2203,7 +2203,7 @@ }, "calendar": { "name": "Kalendārs", - "description": "", + "description": "Rādīt notikumus no jūsu integrācijām kalendāra skatā noteiktā relatīvā laika periodā", "duration": { "allDay": "" }, @@ -2211,16 +2211,16 @@ "releaseType": { "label": "Radarr laiduma tips", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "Kinoteātros", + "digitalRelease": "Digitālā izlaišana", + "physicalRelease": "Fiziskā izlaišana" } }, "filterPastMonths": { - "label": "" + "label": "Sākt no" }, "filterFutureMonths": { - "label": "" + "label": "Beigt pie" }, "showUnmonitored": { "label": "" @@ -2232,7 +2232,7 @@ "description": "Rāda pašreizējo laikapstākļu informāciju par iestatīto atrašanās vietu.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Temperatūra pēc Fārenheita" }, "disableTemperatureDecimals": { "label": "" @@ -2248,18 +2248,18 @@ "label": "Laikapstākļu atrašānās vieta" }, "showCity": { - "label": "" + "label": "Rādīt pilsētu" }, "hasForecast": { - "label": "" + "label": "Rādīt prognozi" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Prognozes dienu skaits", + "description": "Ja logrīks nav pietiekami plats, tiek rādīts mazāk dienu" }, "dateFormat": { - "label": "", - "description": "" + "label": "Datuma formāts", + "description": "Kā datumam jāizskatās" } }, "currentWindSpeed": "", @@ -2289,16 +2289,16 @@ }, "indexerManager": { "name": "Indeksētāja pārvaldnieka statuss", - "description": "", + "description": "Jūsu indeksētāju statuss", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Atvērt indeksētāja vietni jaunā cilnē" } }, "title": "Indexer pārvaldnieks", "testAll": "Pārbaudīt visu", "error": { - "internalServerError": "" + "internalServerError": "Neizdevās iegūt indeksētāju statusu" } }, "healthMonitoring": { @@ -2343,22 +2343,22 @@ } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", + "information": "Informācija", + "processor": "Procesors: {cpuModelName}", + "memory": "Atmiņa: {memory} GiB", + "memoryAvailable": "Pieejams: {memoryAvailable} GiB ({percent}%)", + "version": "Versija: {version}", "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", + "loadAverage": "Vidējā slodze:", + "minute": "1 minūte", + "minutes": "{count} minūtes", + "used": "Izmantots", "available": "Pieejams", - "lastSeen": "" + "lastSeen": "Pēdējais statusa atjauninājums: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "Neizdevās iegūt veselības statusu" }, "cluster": { "summary": { @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Pārraugiet savu UPS ierīču statusu, izmantojot NUT serveri", "option": { "showBattery": { - "label": "" + "label": "Rādīt akumulatoru" }, "showLoad": { - "label": "" + "label": "Rādīt slodzi" }, "showVoltage": { - "label": "" + "label": "Rādīt spriegumu" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Tiešsaistē", + "onBattery": "Uz akumulatora", + "lowBattery": "Zems akumulatora līmenis", + "charging": "Notiek uzlāde", + "unknown": "Nezināms" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Darbības laiks", + "load": "Slodze", + "input": "Ieeja", + "output": "Izeja" }, "error": { - "internalServerError": "" + "internalServerError": "Neizdevās iegūt UPS datus" } }, "tracearr": { @@ -2584,84 +2595,84 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Pēdējās 30 dienas", + "month": "Šis mēnesis", + "lastMonth": "Pagājušais mēnesis" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Notikums", + "description": "Rādīt konkrēta notikuma kopējo biežumu", + "placeholder": "Izvēlieties notikumu", + "loading": "Notiek notikumu ielāde...", + "noEvents": "Nav atrasts neviens notikums", + "none": "Nav notikuma", + "configureWebsiteFirst": "Vispirms izvēlieties vietni, lai ielādētu notikumus" }, "chartType": { - "label": "", - "description": "", + "label": "Diagrammas veids", + "description": "Diagrammas attēlošanas stils", "option": { - "bar": "", - "sparkline": "" + "bar": "Joslu diagramma", + "sparkline": "Svītras" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Diagrammas stils", + "description": "Kā attēlot notikumu sērijas diagrammā", "option": { - "grouped": "", - "overlay": "" + "grouped": "Blakus", + "overlay": "Pārklājums (apakškopa)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Skats", + "description": "Ko rādīt logrīka pamatdaļā", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Diagramma", + "events": "Notikumu diagramma", + "topPages": "Populārākās lapas", + "topReferrers": "Populārākie piesaistītāji" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Notikumi", + "description": "Atlasiet vienu vai vairākus notikumus, lai attēlotu diagrammā", + "placeholder": "Atlasiet notikumus...", + "loading": "Notiek notikumu ielāde...", + "noEvents": "Nav atrasts neviens notikums", + "configureWebsiteFirst": "Vispirms izvēlieties vietni, lai ielādētu notikumus" }, "topCount": { - "label": "", - "description": "" + "label": "Rādāmie vienumi", + "description": "Galveno vienumu skaits, ko rādīt (maks. 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "notikumi", + "label": "notikumi" }, "topPages": { - "direct": "" + "direct": "Tieša" }, "topReferrers": { - "direct": "" + "direct": "Tieša" }, "events": { - "selectPrompt": "" + "selectPrompt": "Atlasiet notikumus, ko attēlot diagrammā" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Nav konfigurēta Umami integrācija", + "noWebsite": "Nav konfigurēta vietne", + "noData": "Nav pieejamu datu", + "internalServerError": "Neizdevās iegūt Umami datus" } }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", + "query": "Pilsēta / pasta indekss", + "latitude": "Platums", + "longitude": "Garums", "disabledTooltip": "", "unknownLocation": "", "search": "Meklēt", @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,48 +2784,48 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Pārskats par jūsu Paperless-ngx dokumentu arhīvu", + "documentsTotal": "Kopā dokumentu", + "documentsInbox": "Iesūtne", + "correspondents": "Korespondenti", + "tags": "Birkas", + "documentTypes": "Dokumentu veidi", + "inboxRatio": "Iesūtnes attiecība", + "inbox": "iesūtne", + "total": "kopā", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Rādīt iesūtnes attiecību", + "description": "Parādīt iesūtnes dokumentu attiecību pret kopējo hero sadaļā" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Rādīt iesūtnes riņķi", + "description": "Parādīt progresa riņķi kopā ar iesūtnes attiecību" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Rādīt kopējo dokumentu skaitu", + "description": "Parādīt kopējo dokumentu skaitu arhīvā" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Rādīt iesūtnes skaitu", + "description": "Parādīt neapstrādāto dokumentu skaitu iesūtnē" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Rādīt korespondentus", + "description": "Parādīt kopējo korespondentu skaitu" }, "showTags": { - "label": "", - "description": "" + "label": "Rādīt birkas", + "description": "Parādīt kopējo birku skaitu" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Rādīt dokumentu veidus", + "description": "Parādīt kopējo dokumentu veidu skaitu" } }, "error": { - "internalServerError": "" + "internalServerError": "Neizdevās iegūt Paperless-ngx datus" } }, "patchmon": { @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "", - "noCommunications": "" + "noCommunications": "", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "" }, "id": { - "columnTitle": "" + "columnTitle": "", + "detailsTitle": "" }, "integration": { "columnTitle": "Integrācija" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "", + "eta": "" }, "type": { "columnTitle": "", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "" + "globalRatio": "", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3652,43 +3705,43 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Pārraudzīt pieejamības statistiku no jūsu Uptime Kuma statusa lapas", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Rādīt vidējo pieejamību", + "description": "Parādīt kombinēto 24 stundu vidējo pieejamības procentu" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Rādīt pieejamības riņķi", + "description": "Parādīt progresa riņķi kopā ar vidējo pieejamības vērtību" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Rādīt kopējo monitoru skaitu", + "description": "Parādīt konfigurēto monitoru kopējo skaitu" }, "showUpCount": { - "label": "", - "description": "" + "label": "Rādīt \"up\" skaitu", + "description": "Parādīt, cik monitoru pašlaik ir \"up\"" }, "showDownCount": { - "label": "", - "description": "" + "label": "Rādīt \"down\" skaitu", + "description": "Parādīt, cik monitoru pašlaik ir \"down\"" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Rādīt apturēto skaitu", + "description": "Parādīt, cik monitoru pašlaik ir apturēti" } }, - "averageUptime": "", + "averageUptime": "Vidējā pieejamība (24 h)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Kopējais monitoru skaits", + "upCount": "Augšup", + "downCount": "Lejup", + "pausedCount": "Apturēts" }, "error": { - "internalServerError": "" + "internalServerError": "Neizdevās iegūt pieejamības datus" } }, "traefik": { @@ -3726,70 +3779,56 @@ } }, "audioStats": { - "name": "", - "description": "", + "name": "Audio statistika", + "description": "Bibliotēkas un atskaņošanas statistika no Navidrome vai Audiobookshelf", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Rādīt izpildītājus", + "description": "Parādīt kopējo izpildītāju skaitu mūzikas bibliotēkā (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Rādīt albumus", + "description": "Parādīt kopējo albumu skaitu mūzikas bibliotēkā (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "Rādīt dziesmas", + "description": "Parādīt kopējo dziesmu skaitu mūzikas bibliotēkā (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Rādīt bibliotēku skaitu", + "description": "Parādīt bibliotēku skaitu jūsu instancē (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Rādīt audiogrāmatas", + "description": "Parādīt kopējo audiogrāmatu skaitu visās bibliotēkās (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Rādīt podkāstus", + "description": "Parādīt kopējo podkāstu skaitu visās bibliotēkās (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "Rādīt klausīšanās laiku", + "description": "Parādīt jūsu kopējo klausīšanās laiku (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "Rādīt aktīvās sesijas", + "description": "Parādīt pašlaik aktīvo atskaņošanas sesiju skaitu (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "Kompaktais režīms", + "description": "Izmantot blīvāku izkārtojumu ar mazākiem elementiem, ideāli piemērots maziem logrīku izmēriem" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "Izpildītāji", + "albums": "Albumi", + "songs": "Dziesmas", + "libraryCount": "Bibliotēkas", + "audiobooks": "Audiogrāmatas", + "podcasts": "Podkāsti", + "listeningTime": "Klausīšanās laiks", + "activeSessions": "Aktīvās sesijas", "error": { - "internalServerError": "" + "internalServerError": "Neizdevās iegūt audio statistikas datus" } }, "systemResources": { @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel sistēmas (Tabula)", + "description": "Tabulas skats visām Beszel uzraudzītajām sistēmām ar kārtojamām kolonnām un statusa indikatoriem", "option": { "statusFilter": { - "label": "" + "label": "Statusa filtrs" }, "sortBy": { - "label": "" + "label": "Kārtot pēc" }, "sortDirection": { - "label": "" + "label": "Kārtošanas virziens" }, "showCpu": { - "label": "" + "label": "Rādīt CPU" }, "showMemory": { - "label": "" + "label": "Rādīt atmiņu" }, "showDisk": { - "label": "" + "label": "Rādīt disku" }, "showGpu": { - "label": "" + "label": "Rādīt GPU" }, "showLoadAvg": { - "label": "" + "label": "Rādīt slodzes vidējo" }, "showNet": { - "label": "" + "label": "Rādīt tīklu" }, "showTemp": { - "label": "" + "label": "Rādīt temperatūru" }, "showBattery": { - "label": "" + "label": "Rādīt akumulatoru" }, "showServices": { - "label": "" + "label": "Rādīt servisus" }, "showUptime": { - "label": "" + "label": "Rādīt darbības laiku" }, "showAgent": { + "label": "Rādīt aģenta versiju" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Nav atrasta neviena sistēma", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Sistēma", + "cpu": "Procesors", + "memory": "Atmiņa", + "disk": "Disks", + "gpu": "Grafikas procesors", + "loadAvg": "Slodzes vidējais", + "net": "Tīkls", + "temp": "Temperatūra", + "battery": "Baterija", + "services": "Servisi", + "uptime": "Darbības laiks", + "agent": "Aģents" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel sistēmas (Režģis)", + "description": "Karšu režģa skats visām Beszel uzraudzītajām sistēmām ar reāllaika metrikām", "option": { "statusFilter": { - "label": "" + "label": "Statusa filtrs" }, "showCpu": { - "label": "" + "label": "Rādīt CPU" }, "showMemory": { - "label": "" + "label": "Rādīt atmiņu" }, "showDisk": { - "label": "" + "label": "Rādīt disku" }, "showGpu": { - "label": "" + "label": "Rādīt GPU" }, "showLoadAvg": { - "label": "" + "label": "Rādīt slodzes vidējo" }, "showNet": { - "label": "" + "label": "Rādīt tīklu" }, "showTemp": { - "label": "" + "label": "Rādīt temperatūru" }, "showBattery": { - "label": "" + "label": "Rādīt akumulatoru" }, "showServices": { - "label": "" + "label": "Rādīt servisus" }, "showUptime": { - "label": "" + "label": "Rādīt darbības laiku" }, "showAgent": { - "label": "" + "label": "Rādīt aģenta versiju" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "Procesors", + "memory": "Atmiņa", + "disk": "Disks", + "gpu": "Grafikas procesors", + "loadAvg": "Slodzes vidējais", + "net": "Tīkls", + "temp": "Temperatūra", + "battery": "Baterija", + "services": "Servisi", + "uptime": "Darbības laiks", + "agent": "Aģents" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel brīdinājumi", + "description": "Skatīt Beszel brīdinājumu konfigurācijas un vēsturi", "option": { "showHistory": { - "label": "" + "label": "Rādīt brīdinājumu vēsturi" }, "maxHistoryItems": { - "label": "" + "label": "Maks. vēstures ierakstu" } }, - "empty": "", + "empty": "Nav konfigurētu brīdinājumu", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Vēsture", + "resolved": "Atrisināts", "status": { - "triggered": "", - "ok": "" + "triggered": "Izraisīts", + "ok": "Labi" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel sistēmas statistika", + "description": "Laikrindu diagrammas CPU, atmiņas, diska, tīkla un Docker konteineru metrikām", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Laika periods" }, "showCpu": { - "label": "" + "label": "Rādīt CPU diagrammu" }, "showMemory": { - "label": "" + "label": "Rādīt atmiņas diagrammu" }, "showDisk": { - "label": "" + "label": "Rādīt diska diagrammu" }, "showDiskIO": { - "label": "" + "label": "Rādīt diska I/O diagrammu" }, "showNetwork": { - "label": "" + "label": "Rādīt tīkla diagrammu" }, "showDockerCpu": { - "label": "" + "label": "Rādīt Docker CPU diagrammu" }, "showDockerMemory": { - "label": "" + "label": "Rādīt Docker atmiņas diagrammu" }, "showDockerNetwork": { - "label": "" + "label": "Rādīt Docker tīkla diagrammu" } }, - "selectSystem": "", + "selectSystem": "Izvēlieties sistēmu", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU lietojums", + "subtitle": "Vidējais sistēmas mēroga CPU noslogojums", + "series": "Procesors" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Atmiņas lietojums", + "subtitle": "Precīza noslodze ierakstīšanas brīdī", + "series": "Lietots", + "cache": "Kešatmiņa/buferi" }, "disk": { - "title": "", + "title": "Diska lietojums", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Diska I/O", + "subtitle": "Saknes failu sistēmas caurlaidspēja", + "read": "Lasīts", + "write": "Rakstīts" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Joslas platums", + "subtitle": "Publisko interfeisu tīkla trafika", + "sent": "Nosūtīts", + "recv": "Saņemts" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU lietojums", + "subtitle": "Vidējais konteineru CPU noslogojums" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker atmiņas lietojums", + "subtitle": "Docker konteineru atmiņas patēriņš" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker tīkla I/O", + "subtitle": "Docker konteineru tīkla trafika" } } } @@ -4525,10 +4572,10 @@ "docker": "", "kubernetes": "", "logs": "", - "api": "", + "api": "API & MCP", "certificates": "", "tasks": "", - "backup": "" + "backup": "Dublēšana" } }, "settings": "Iestatījumi", @@ -4609,7 +4656,7 @@ "private": "" }, "noResults": { - "title": "" + "title": "Pagaidām nav dēļu" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Nedēļas pirmā diena", "accessibility": "Piekļūstamība", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Ievada ekskursijas", + "description": "Atiestatiet ievada ekskursijas, lai tās redzētu vēlreiz nākamajā pārvaldības apgabala vai informācijas paneļa apmeklējumā.", + "reset": "Atiestatīt ievada ekskursijas", "resetSuccess": { - "title": "", - "message": "" + "title": "Ekskursijas atiestatītas", + "message": "Ievada ekskursijas tiks rādītas vēlreiz nākamajā apmeklējumā" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Pabeigts", + "notStarted": "Nav sākts" }, "name": { - "management": "", - "dashboard": "" + "management": "Pārvaldība", + "dashboard": "Informācijas panelis" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "", "options": { - "auto": "", + "auto": "Automātiski", "light": "", "dark": "" } @@ -4984,213 +5031,213 @@ } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "AI / MCP", + "title": "AI integrācija", + "subtitle": "Model Context Protocol (MCP) serveris", + "description": "Savienojiet AI asistentus ar savu Homarr instanci un kontrolējiet visu savu mājas laboratoriju dabiskā valodā. Meklējiet un pieprasiet multividi Overseerr, pārvaldiet Docker konteinerus, pārslēdziet Pi-hole, pārbaudiet servera veselību, kontrolējiet Home Assistant ierīces un daudz ko citu — tieši no sava AI asistenta.", + "noApiKey": "Lai autentificētos ar MCP serveri, nepieciešama API atslēga.", + "createApiKeyButton": "Izveidot API atslēgu", "endpoint": { - "title": "" + "title": "MCP galapunkts" }, "authentication": { - "title": "", - "intro": "", + "title": "Autentifikācija", + "intro": "Jūs varat autentificēties ar savu MCP serveri, izmantojot API atslēgu vai OAuth. Abas metodes piešķir vienādu piekļuves līmeni.", "apiKey": { - "title": "", - "description": "" + "title": "API atslēga (manuāli)", + "description": "Nododiet ApiKey galveni ar savu pilno API atslēgu MCP klienta konfigurācijā." }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (pārlūka pieteikšanās)", + "description": "Klienti, kas atbalsta OAuth (piemēram, Claude Code, opencode vai Cursor), var autentificēties, atverot pārlūkprogrammas logu. Palaidiet autentifikācijas komandu savā klientā, piesakieties Homarr pārlūkā, un esat savienots — API atslēga tiek izveidota automātiski.", + "hint": "OAuth pilnvaras parādās kā parastas API atslēgas cilnē Autentifikācija. Jūs varat tās atsaukt jebkurā laikā." }, - "permissions": "" + "permissions": "API atslēga nosaka AI pieejamās atļaujas — tā darbojas ar tādu pašu piekļuves līmeni kā atslēgas īpašnieks." }, "clientConfig": { - "title": "", + "title": "Klienta konfigurācija", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", + "recommended": "Ieteicams", + "title": "Straumējams HTTP", + "worksWith": "Darbojas ar: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", + "addToConfig": "Pievienojiet savam MCP klienta konfigurācijas failam:", + "cursor": "{name}: {file} jūsu projektā vai globālajos iestatījumos", "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "claudeCode": "{name}: {file} vai lietojiet {command}", + "vsCodeCopilot": "{name}: {file} darbvietas iestatījumos", + "replaceHint": "Aizstājiet vietzīmi ar API atslēgu, kuru saņēmāt, to izveidojot." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (mantotajiem klientiem caur mcp-remote tiltu)", + "description": "Klientiem, kas atbalsta tikai stdio transportu. Nepieciešama lokāli instalēta {dependency} (Node.js):" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "Pārbaudiet savienojumu", + "description": "Palaidiet to savā terminālī, lai pārbaudītu, vai galapunkts ir sasniedzams un jūsu API atslēga darbojas:", + "hint": "Veiksmīga atbilde atgriež MCP servera iespējas. Ja redzat kļūdu, pārbaudiet JSON atbildi, lai iegūtu mājienus." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "Pieejamie rīki", + "description": "Pieejami {count} rīki. Izvērsiet kategoriju, lai redzētu atsevišķus rīkus un to aprakstus.", + "columnType": "Tips", + "columnName": "Rīks", + "columnDescription": "Apraksts" }, "troubleshooting": { - "title": "", + "title": "Problēmu novēršana", "missingHeader": { - "title": "", - "description": "" + "title": "\"Trūkst ApiKey galvenes\"", + "description": "Jūsu klients nesūta {header} galveni. Pārbaudiet, vai {section} sadaļa jūsu MCP konfigurācijā ir pareiza. Dažiem klientiem pēc konfigurācijas izmaiņām nepieciešama restartēšana." }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"Nederīgs ApiKey formāts\"", + "description": "Pārliecinieties, ka nokopējāt pilnu API atslēgu, nevis tikai daļu no tās." }, "invalidKey": { - "title": "", - "description": "" + "title": "\"Nederīga API atslēga\"", + "description": "Atslēgas ID nav atrasts vai pilnvara ir nepareiza. API atslēgas var apskatīt tikai vienreiz, kad tās izveidotas. Ja pazaudējāt, izdzēsiet veco atslēgu un izveidojiet jaunu." }, "connectionRefused": { - "title": "", - "description": "" + "title": "Savienojums atteikts / noildze", + "description": "Pārliecinieties, ka URL ir sasniedzams no jūsu AI klienta. Ja Homarr darbojas aiz reverse proxy vai Docker, izmantojiet ārējo URL (nevis {localhost}). Pārbaudiet, vai ports ir pareizs (noklusējums: 7575 Docker)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "Rīki neparādās", + "description": "Dažiem rīkiem nepieciešama specifisku integrāciju konfigurācija (piem., Docker, Overseerr). Rīku saraksts ir atkarīgs no tā, kas pieejams jūsu Homarr instancē." } }, - "copy": "", + "copy": "Kopēt", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "Instalēt ar vienu klikšķi", + "subtitle": "Izmanto OAuth — autentificējieties pārlūkā pirmajā lietošanas reizē", + "vsCode": "Instalēt VS Code", + "cursor": "Instalēt Cursor", + "copyUrl": "Kopēt MCP URL", + "copied": "Nokopēts!", + "copyHint": "ChatGPT, Claude Code vai jebkuram MCP klientam", + "manualConfig": "Manuālā konfigurācija" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Pilna datu bāzes dublēšana", + "metaTitle": "Dublēšana un atjaunošana", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Eksportēt datu bāzi", + "description": "Lejupielādējiet pilnu savas SQLite datu bāzes dublējumu, ieskaitot visus iestatījumus, lietotājus, dēļus un šifrētos integrāciju noslēpumus. Dublējums ir iesaiņots kā ZIP fails ar šifrēšanas atslēgu un metadatiem.", + "button": "Lejupielādēt dublējumu", + "error": "Eksportēšana neizdevās", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Sensitīvu datu eksports", + "warningTitle": "Šis eksports satur visu jūsu datu bāzi.", + "warningBody": "Dublējumā iekļauti visi lietotāji, integrāciju noslēpumi (šifrēti), API atslēgas, dēļu konfigurācijas un lietotņu dati. Glabājiet eksportēto failu droši un neizplatiet to.", + "typePrompt": "Ierakstiet \"{phrase}\", lai turpinātu", + "submit": "Eksportēt datu bāzi", + "cancel": "Atcelt" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Atjaunot datu bāzi", + "description": "Augšupielādējiet iepriekš eksportētu dublējuma ZIP, lai atjaunotu datu bāzi. Tas aizstās visu jūsu datu bāzi. Ja dublējums tika izveidots ar citu šifrēšanas atslēgu, noslēpumi tiks automātiski pāršifrēti.", + "warning": "Dublējuma atjaunošana pilnībā aizstās jūsu pašreizējo datu bāzi un restartēs lietojumprogrammu. Šo darbību nevar atsaukt.", "dropzone": { - "title": "", - "description": "" + "title": "Iemetiet savu dublējuma ZIP šeit vai noklikšķiniet, lai pārlūkotu", + "description": "Tiek pieņemti tikai .zip faili no Homarr SQLite dublējuma" }, - "changeFile": "", - "button": "", + "changeFile": "Mainīt failu", + "button": "Atjaunot datu bāzi", "success": { - "title": "", - "message": "" + "title": "Atjaunošana pabeigta", + "message": "Datu bāze ir veiksmīgi atjaunota. Lietojumprogramma tiek restartēta..." }, - "error": "" + "error": "Importēšana neizdevās" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Dublējuma saturs", + "exported": "Eksportēts {date}", + "loading": "Notiek dublējuma faila analīze...", + "errorTitle": "Priekšskatījuma kļūda", + "entity": "Entītija", + "count": "Skaits", + "boards": "Dēļi", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Dēļi", + "user": "Lietotāji", + "app": "Lietotnes", + "integration": "Integrācijas", + "item": "Logrīki", + "media": "Multivide", + "search_engine": "Meklētājprogrammas" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Neizdevās analizēt dublējuma failu", + "invalidMissingMetadata": "Nederīgs dublējums: trūkst metadata.json", + "invalidMissingDb": "Nederīgs dublējums: trūkst db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Iemetiet savu dublējuma ZIP šeit", + "description": "Pieņem .zip failus no Homarr SQLite dublējuma (maks. 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Notiek dublējuma analīze...", + "changeFile": "Mainīt failu", + "continueToRestore": "Turpināt atjaunošanu", + "tryAgain": "Mēģināt vēlreiz", + "analysisError": "Analīzes kļūda", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Dublējuma saturs", + "exported": "Eksportēts {date}", + "entity": "Entītija", + "count": "Skaits", + "boards": "Dēļi", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Dēļi", + "user": "Lietotāji", + "app": "Lietotnes", + "integration": "Integrācijas", + "item": "Logrīki", + "media": "Multivide", + "search_engine": "Meklētājprogrammas" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migrācija piemērota", + "migrationsAppliedPlural": "{count} migrācijas piemērotas", + "migrationsOlderVersion": "Šis dublējums bija no vecākas Homarr versijas. Tika piemērota {count} shēmas migrācija, lai to atjauninātu.", + "migrationsOlderVersionPlural": "Šis dublējums bija no vecākas Homarr versijas. Tika piemērotas {count} shēmas migrācijas, lai to atjauninātu.", + "migrationsUpToDate": "Datu bāzes shēma ir aktuāla ({count} migrācijas piemērotas)", + "upToDate": "Aktuāls", + "migrationsPending": "{count} gaida" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Notiek migrāciju piemērošana ({current}/{total})", + "migrationLabel": "Migrācija {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Destruktīva darbība", + "warningTitle": "Tas neatgriezeniski aizstās visu jūsu datu bāzi.", + "warningBody": "Visi pašreizējie dēļi, lietotāji, lietotnes, integrācijas, iestatījumi un sesijas tiks zaudētas. Šo darbību nevar atsaukt. Lietojumprogramma tiks restartēta pēc atjaunošanas.", + "typePrompt": "Ierakstiet \"{phrase}\", lai turpinātu", + "cancel": "Atcelt", + "submit": "Atjaunot datu bāzi" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Notiek datu bāzes atjaunošana...", + "extracting": "Izvelk dublējuma arhīvu", + "migrating": "Piemēro datu bāzes migrācijas", + "encrypting": "Pāršifrē integrāciju noslēpumus", + "swapping": "Aizvieto datu bāzes failu", + "restarting": "Restartē serveri" }, "complete": { - "title": "", - "message": "" + "title": "Atjaunošana pabeigta", + "message": "Datu bāze ir veiksmīgi atjaunota. Serveris tiek restartēts – lūdzu, atsvaidziniet lapu pēc dažām sekundēm." }, "failed": { - "title": "" + "title": "Atjaunošana neizdevās" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Nederīgs dublējums: trūkst metadata.json", + "invalidMissingDb": "Nederīgs dublējums: trūkst db.sqlite", + "analyzeError": "Neizdevās analizēt dublējumu" } } }, @@ -5277,15 +5324,15 @@ "label": "" }, "host": { - "label": "" + "label": "Resursdators" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Skatīt žurnālus", "page": { - "title": "" + "title": "{name} žurnāli" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Noņemt", + "confirm": "", "notification": { "success": { "title": "", @@ -5715,7 +5763,7 @@ "docker": { "label": "", "logs": { - "label": "" + "label": "Žurnāli" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Pārslēgt izskata režīmu", "light": "", "dark": "" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Iestatījumi", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Atlasiet iestatījumu, ko mainīt", + "backHint": "Nospiediet Backspace vai lietojiet atpakaļ pogu, lai atgrieztos", + "backAction": "Atgriezties" } }, "notification": { "error": { - "message": "" + "message": "Nevar atjaunināt iestatījumu" } }, "option": { "preferences": { - "label": "" + "label": "Atvērt preferences" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Iespējots", + "disabled": "Atspējots" }, "board": { - "none": "", - "unavailable": "" + "none": "Neviens", + "unavailable": "Pašlaik atlasīts (nav pieejams)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Neviens", + "unavailable": "Pašlaik atlasīts (nav pieejams)" }, "colorScheme": { - "label": "", + "label": "Krāsu shēma", "children": { "detail": { - "title": "" + "title": "Izvēlieties savu krāsu shēmu" } } }, "locale": { - "label": "", + "label": "Valoda", "children": { "detail": { - "title": "" + "title": "Izvēlieties vēlamo valodu" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Noklusējuma meklētājprogramma", "children": { "detail": { - "title": "" + "title": "Izvēlieties noklusējuma meklētājprogrammu" } } }, "openSearchInNewTab": { - "label": "", + "label": "Atvērt meklēšanas rezultātus jaunā cilnē", "children": { "detail": { - "title": "" + "title": "Atvērt meklēšanas rezultātus jaunā cilnē" } } }, "ddgBangs": { - "label": "", + "label": "Iespējot DuckDuckGo bangs", "children": { "detail": { - "title": "" + "title": "Iespējot DuckDuckGo bangs" } } }, "firstDayOfWeek": { - "label": "", + "label": "Nedēļas pirmā diena", "children": { "detail": { - "title": "" + "title": "Izvēlieties nedēļas pirmo dienu" } } }, "homeBoardId": { - "label": "", + "label": "Sākuma dēlis", "children": { "detail": { - "title": "" + "title": "Izvēlieties savu sākuma dēli" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobilais sākuma dēlis", "children": { "detail": { - "title": "" + "title": "Izvēlieties savu mobilo sākuma dēli" } } }, "pingIconsEnabled": { - "label": "", + "label": "Lietot ikonas pingiem", "children": { "detail": { - "title": "" + "title": "Lietot ikonas pingiem" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Atvērt pilno iestatījumu lapu" } } } } }, "media": { - "help": "", + "help": "Meklējiet filmas vai seriālus, ko pieprasīt", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Filmas un seriāli" }, "action": { "search": { - "label": "", - "description": "", + "label": "Meklēt filmas vai seriālus", + "description": "Sāciet rakstīt, lai meklētu savās multivides pieprasījumu integrācijās", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Pievienojiet Overseerr, Jellyseerr vai Seerr integrāciju, lai iespējotu multivides meklēšanu.", + "scoped": "Šim logrīkam nav pieejamas multivides pieprasījumu integrācijas." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Pieejams", + "partiallyAvailable": "Daļēji", + "processing": "Apstrādē", + "requested": "Pieprasīts", + "pending": "Pieprasīts" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Padoms: Šeit varat izmantot arī jebkurus DuckDuckGo bangs, piem., !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Meklēt \"{query}\" ar {label}", + "pressEnterToOpen": "Nospiediet Enter, lai atvērtu", + "engineSelected": "{label} atlasīts (!{bang})", + "typeQueryToContinue": "Ierakstiet meklēšanas vaicājumu, lai turpinātu", + "emptyBangHint": "Ierakstiet bangu, piem., !yt, pēc tam spiediet atstarpi, lai atlasītu" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Statuss" }, "status": { - "requested": "" + "requested": "Pieprasīts" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Lasīt dokumentāciju", + "next": "Nākamais", + "prev": "Atpakaļ", + "done": "Gatavs", + "skip": "Izlaist ekskursiju", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Laipni lūgti Homarr!", + "description": "Šis ir jūsu vadības centrs. No šejienes jūs pārvaldāt dēļus, lietotnes, integrācijas, lietotājus un servera iestatījumus. Apskatīsim katru sadaļu." }, "boardsList": { - "title": "", - "description": "" + "title": "Jūsu dēļi", + "description": "Šeit atrodas visi jūsu informācijas paneļi. Katram dēlim ir savs izkārtojums, fons un piekļuves iestatījumi. Jūs varat redzēt, kas katru izveidoja un vai tas ir publisks vai privāts." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Izveidot dēli", + "description": "Noklikšķiniet šeit, lai izveidotu jaunu informācijas paneli vai importētu to no iepriekšējās Homarr instalācijas. Katrs dēlis saņem savu URL, ar ko dalīties." }, "appsList": { - "title": "", - "description": "" + "title": "Jūsu lietotnes", + "description": "Šīs ir visas jūsu pievienotās lietotnes – saites uz jūsu pašu mitinātajiem pakalpojumiem. Katrai lietotnei ir ikona, izvēles veselības pārbaude un statusa zīme informācijas panelī." }, "appsCreate": { - "title": "", - "description": "" + "title": "Pievienot lietotni", + "description": "Reģistrējiet jaunu pakalpojumu šeit. Piešķiriet tam nosaukumu, URL un ikonu – tas parādīsies kā flīze jūsu dēļos ar tiešraides statusa uzraudzību." }, "integrationsList": { - "title": "", - "description": "" + "title": "Jūsu integrācijas", + "description": "Šie ir ar Homarr savienotie pakalpojumi – Sonarr, Radarr, Plex, Jellyfin un vairāk nekā 50 citi. Visi akreditācijas dati tiek šifrēti miera stāvoklī." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Pievienot integrāciju", + "description": "Pievienojiet jaunu pakalpojumu šeit. Izvēlieties tipu, ievadiet URL un API atslēgu – Homarr pārbaudīs savienojumu pirms saglabāšanas." }, "usersList": { - "title": "", - "description": "" + "title": "Jūsu lietotāji", + "description": "Redziet visus, kam ir piekļuve. Organizējiet lietotājus grupās un kontrolējiet, kas var skatīt vai rediģēt katru dēli." }, "usersCreate": { - "title": "", - "description": "" + "title": "Izveidot lietotāju", + "description": "Pievienojiet jaunu lietotāja kontu šeit. Varat arī izmantot ielūgumu saites ērtai pievienošanai. Tā ir ekskursija – esat gatavs!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Šis ir jūsu dēlis", + "description": "Vilkšanas un nomešanas informācijas panelis, kurā izkārtojat lietotnes un logrīkus. Jebkurā laikā nospiediet Ctrl+K, lai meklētu lietotnes, dēļus un darbības." }, "editMode": { - "title": "", - "description": "" + "title": "Rediģēšanas režīms", + "description": "Noklikšķiniet šeit, lai ieietu rediģēšanas režīmā. Pēc tam varat pievienot logrīkus, lietotnes un sadaļas – velciet, lai pārvietotu, mainiet izmēru ar stūra rokturi. Noklikšķiniet vēlreiz, lai saglabātu izmaiņas." }, "settings": { - "title": "", - "description": "" + "title": "Dēļa iestatījumi", + "description": "Mainiet šī dēļa nosaukumu, kolonnas, fonu, krāsas un to, kas tam var piekļūt. Katrs dēlis var būt publisks vai privāts." }, "switcher": { - "title": "", - "description": "" + "title": "Pārslēgt dēļus", + "description": "Pārejiet starp dēļiem. Izveidojiet atsevišķus informācijas paneļus dažādiem mērķiem – multividei, tīklošanai, katram lietotājam vai jebkam, kas jums patīk." }, "userMenu": { - "title": "", - "description": "" + "title": "Jūsu profils", + "description": "Mainiet savu krāsu shēmu, valodu, sākuma dēli un preferences. No šejienes varat arī pāriet uz pārvaldības apgabalu." } } } diff --git a/packages/translation/src/lang/nl.json b/packages/translation/src/lang/nl.json index ea81b66d8..7f8103886 100644 --- a/packages/translation/src/lang/nl.json +++ b/packages/translation/src/lang/nl.json @@ -8,9 +8,9 @@ "action": { "scratch": "Vanaf nul beginnen", "importOldmarr": "Importeren uit Homarr vóór 1.0", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Herstellen vanuit SQLite-back-up", + "restoreSqliteDescription": "Upload een volledige SQLite-databaseback-up van een vorige Homarr-instantie. Dit zal alle borden, gebruikers, apps, integraties en instellingen herstellen.", + "backToOptions": "← Terug naar installatie-opties" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "Serverinstellingen configureren." }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Integraties", + "subtitle": "Selecteer de services die je gebruikt.", + "description": "Kies de integraties die je wilt verbinden. We stellen je dashboard in met bijbehorende widgets.", "action": { - "continue": "", - "skip": "" + "continue": "Doorgaan", + "skip": "Overslaan voor nu" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} van {total}", + "skip": "Deze integratie overslaan", + "finishing": "Je dashboard instellen...", "error": { - "title": "", - "message": "" + "title": "Instellen mislukt", + "message": "Er is iets misgegaan bij het instellen van je dashboard. Probeer het opnieuw." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "URL-helpers", + "description": "Deze helpers proberen de URL voor je services te raden. Als het niet werkt, typ dan handmatig het adres." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Basis-URL", + "placeholder": "homelab.local of 192.168.1.1", + "hint": "Voer je basisdomein of IP in om integratie-URL's automatisch in te vullen", + "warning": "Door nu je basis-URL in te stellen worden alle integratie-URL's automatisch ingevuld, wat je tijd bespaart tijdens de installatie", + "preview": "bijv. {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Subdomein", + "hostPort": "Host:Poort" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker heeft {count} services gedetecteerd", + "detectedBreakdown": "{integrations} integraties · {apps} apps", + "summary": "Homarr heeft {apps} apps gedetecteerd, waarvan {integrations} ingebouwde integraties hebben", + "appBadge": "App", + "appSectionLabel": "Apps om aan dashboard toe te voegen ({count} geselecteerd)", + "scanning": "Docker scannen...", + "scanningDescription": "Zoeken naar actieve containers op je systeem" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "Wachtwoord", - "suggestionsTitle": "", + "suggestionsTitle": "Wachtwoordsuggesties", "suggestion": { "length": "Bevat ten minste 8 tekens", "lowercase": "Inclusief kleine letter", @@ -209,7 +209,7 @@ "label": "Zoekresultaten openen in nieuw tabblad" }, "ddgBangs": { - "label": "" + "label": "DuckDuckGo bangs inschakelen" } }, "error": { @@ -302,10 +302,10 @@ "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo bangs succesvol omgeschakeld" }, "error": { - "message": "" + "message": "Kan DuckDuckGo bangs niet omschakelen" } } }, @@ -987,47 +987,47 @@ "placeholder": "Aangepaste app-URL" }, "apiKeySettings": { - "label": "" + "label": "API-sleutel ophalen" } }, "action": { "create": "Nieuwe integratie" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widgets", + "noWidgets": "Geen widgets", + "detected": "Gedetecteerd via Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Media", + "calendar": "Kalender", + "mediaSearch": "Zoeken", + "mediaRelease": "Uitgaven", + "mediaRequest": "Aanvragen", + "downloadClient": "Downloads", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Diversen", + "smartHomeServer": "Smart Home", + "indexerManager": "Indexeerder", + "healthMonitoring": "Gezondheid", + "search": "Zoeken", + "mediaTranscoding": "Transcodering", + "networkController": "Netwerk", + "releasesProvider": "Uitgaven", + "notifications": "Meldingen", + "firewall": "Firewall", + "timetable": "Rooster", + "photoService": "Foto's", + "documents": "Documenten", + "notes": "Notities", + "mediaMonitoring": "Monitoring", + "speedtest": "Snelheidstest", + "analytics": "Analytics", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Mediabibliotheek", + "uptimeMonitoring": "Uptime-monitoring" }, "testConnection": { "action": { @@ -1076,15 +1076,15 @@ "alert": { "permission": { "title": "Onvoldoende rechten", - "message": "" + "message": "Je bent niet gemachtigd om certificaten te vertrouwen of te uploaden. Neem contact op met de beheerder om het vereiste rootcertificaat te uploaden." }, "hostnameMismatch": { "title": "Hostnaam komt niet overeen", - "message": "" + "message": "De hostnaam in het certificaat komt niet overeen met de hostnaam waarmee je verbinding maakt. Dit kan duiden op een beveiligingsrisico, maar je kunt er nog steeds voor kiezen dit certificaat te vertrouwen." }, "extract": { - "title": "", - "message": "" + "title": "Extraheren van CA-certificaat mislukt", + "message": "Alleen zelfondertekende certificaten zonder keten kunnen automatisch worden opgehaald. Als je een zelfondertekend certificaat gebruikt, zorg er dan voor dat je het CA-certificaat handmatig uploadt. Instructies hiervoor vind je ." } }, "action": { @@ -1100,39 +1100,39 @@ }, "hostnameMismatch": { "confirm": { - "title": "", - "message": "" + "title": "Hostnaam-mismatch vertrouwen", + "message": "Weet je zeker dat je het certificaat met een hostnaam-mismatch wilt vertrouwen?" }, "notification": { "success": { "title": "Vertrouwd certificaat", - "message": "" + "message": "Hostnaam toegevoegd aan lijst met vertrouwde certificaten" }, "error": { - "title": "", - "message": "" + "title": "Vertrouwen certificaat mislukt", + "message": "Het certificaat met een hostnaam-mismatch kon niet worden vertrouwd" } } }, "selfSigned": { "confirm": { - "title": "", + "title": "Zelfondertekend certificaat vertrouwen", "message": "Weet je zeker dat je dit zelfondertekende certificaat wilt vertrouwen?" }, "notification": { "success": { "title": "Vertrouwd certificaat", - "message": "" + "message": "Certificaat toegevoegd aan lijst met vertrouwde certificaten" }, "error": { - "title": "", - "message": "" + "title": "Vertrouwen certificaat mislukt", + "message": "Certificaat toevoegen aan lijst met vertrouwde certificaten mislukt" } } }, "details": { "title": "Details", - "description": "", + "description": "Controleer de certificaatinformatie voordat je besluit het te vertrouwen.", "content": { "action": "Inhoud weergeven", "title": "PEM-certificaat" @@ -1143,19 +1143,19 @@ "title": "Aanvraag fout", "description": { "connection": { - "hostUnreachable": "", - "networkUnreachable": "", - "refused": "", - "reset": "" + "hostUnreachable": "De server kon niet worden bereikt. Dit betekent meestal dat de host offline is of niet bereikbaar is vanuit je netwerk.", + "networkUnreachable": "Het netwerk is niet bereikbaar. Controleer je internetverbinding of netwerkconfiguratie.", + "refused": "De server weigerde de verbinding. Mogelijk is deze niet actief of weigert deze verzoeken op de opgegeven poort.", + "reset": "De verbinding werd onverwacht gesloten door de server. Dit kan gebeuren als de server instabiel is of opnieuw is opgestart." }, "dns": { - "notFound": "", - "timeout": "", - "noAnswer": "" + "notFound": "Het serveradres kon niet worden gevonden. Controleer de URL op typefouten of ongeldige domeinnamen.", + "timeout": "DNS-zoekopdracht time-out. Dit kan een tijdelijk probleem zijn – probeer het over enkele ogenblikken opnieuw.", + "noAnswer": "De DNS-server heeft geen geldig antwoord geretourneerd. Het domein bestaat mogelijk maar heeft geen geldige records." }, "timeout": { - "aborted": "", - "timeout": "" + "aborted": "Het verzoek is afgebroken voordat het kon worden voltooid. Dit kan komen door een gebruikersactie of een systeemtime-out.", + "timeout": "Het verzoek duurde te lang om te voltooien en kreeg een time-out. Controleer je netwerk of probeer het later opnieuw." } } } @@ -1310,8 +1310,8 @@ "newLabel": "Nieuwe privésleutel" }, "slug": { - "label": "", - "newLabel": "" + "label": "Slug van statuspagina", + "newLabel": "Nieuwe slug van statuspagina" } } }, @@ -1321,22 +1321,22 @@ "full": "Volledige integratietoegang" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Self-hosted audioboek- en podcastserver" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Self-hosted muziekstreamingserver met Subsonic API-compatibiliteit" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Self-hosted uptime-monitoring met openbare statuspagina's", "secret": { "slug": { - "description": "" + "description": "De slug van je openbare statuspagina. Standaard 'default' indien niet ingesteld." }, "apiKey": { - "description": "" + "description": "Optionele API-sleutel voor geauthenticeerde /metrics-toegang" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Documentbeheersysteem voor het archiveren en organiseren van gescande documenten" }, "patchmon": { "name": "", @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Geen media geüpload" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Toevoegen", "apply": "Toepassen", "backToOverview": "Terug naar overzicht", - "skip": "", + "skip": "Overslaan", "change": "Wijzigen", "create": "Aanmaken", "createAnother": "Aanmaken en opnieuw beginnen", @@ -1431,8 +1431,8 @@ "checkLogs": "Controleer logs voor meer details", "tryAgain": "Probeer opnieuw", "loading": "Laden", - "show": "", - "hide": "" + "show": "Weergeven", + "hide": "Verbergen" }, "here": "hier", "iconPicker": { @@ -1444,7 +1444,7 @@ }, "colorScheme": { "options": { - "auto": "", + "auto": "Auto", "light": "Licht", "dark": "Donker" } @@ -1504,9 +1504,9 @@ "dangerZone": "Gevarenzone", "noResults": "Geen resultaten gevonden", "unsavedChanges": "Er zijn niet-opgeslagen wijzigingen!", - "servers": "", - "applications": "", - "services": "", + "servers": "Servers", + "applications": "Apps", + "services": "Diensten", "preview": { "show": "Voorbeeld weergeven", "hide": "Voorbeeld verbergen" @@ -1602,7 +1602,7 @@ "label": { "create": "Nieuwe categorie", "changePosition": "Positie wijzigen", - "settings": "" + "settings": "Instellingen" } }, "openAllInNewTabs": { @@ -1659,11 +1659,11 @@ "edit": { "title": "Item bewerken", "tab": { - "widget": "", - "app": "" + "widget": "Widget bewerken", + "app": "App bewerken" }, "app": { - "propagationNotice": "" + "propagationNotice": "Wijzigingen aan deze app worden overal toegepast waar deze wordt gebruikt op alle dashboards." }, "advancedOptions": { "label": "Geavanceerde opties", @@ -1724,7 +1724,7 @@ }, "descriptionDisplayMode": { "label": "Beschrijving weergavemodus", - "description": "", + "description": "Kies hoe de app-beschrijving moet worden weergegeven", "option": { "normal": "Binnen widget", "tooltip": "Als tooltip", @@ -1776,7 +1776,7 @@ "label": "In nieuw tabblad openen" }, "withBorder": { - "label": "" + "label": "Rand weergeven" }, "items": { "label": "Bladwijzers", @@ -1938,16 +1938,16 @@ } }, "timetable": { - "name": "", - "description": "", - "title": "", - "noStation": "", + "name": "Dienstregeling", + "description": "Toont vertrektijden voor een station", + "title": "Vertrekken {station}", + "noStation": "Geen station geselecteerd", "option": { "baseUrl": { "label": "" }, "station": { - "label": "" + "label": "Station" } } }, @@ -2013,10 +2013,10 @@ "width": "Breedte", "height": "Hoogte" }, - "placeholder": "", + "placeholder": "Begin met het schrijven van je notities", "dismiss": { "title": "Wijzigingen weggooien?", - "message": "", + "message": "Je hebt niet-opgeslagen wijzigingen in je notitieblok. Weet je zeker dat je ze wilt verwijderen?", "action": { "discard": "Aanpassingen weggooien", "keepEditing": "Blijven bewerken" @@ -2024,32 +2024,32 @@ } }, "anchorNote": { - "name": "", - "description": "", + "name": "Ankernotitie", + "description": "Toont een geselecteerde notitie van Anchor", "option": { "noteId": { - "label": "" + "label": "Notitie" }, "showTitle": { - "label": "" + "label": "Titel weergeven" }, "showUpdatedAt": { - "label": "" + "label": "Laatst bijgewerkt weergeven" } }, - "empty": "", - "emptyContent": "", - "notFound": "", - "noNotes": "", - "integrationRequired": "", - "updatedAt": "", - "untitled": "", - "edit": "", - "save": "", - "cancel": "", - "readOnlyViewer": "", - "saveForbidden": "", - "saveFailed": "" + "empty": "Selecteer een notitie om weer te geven", + "emptyContent": "Deze notitie heeft geen inhoud", + "notFound": "Notitie niet gevonden", + "noNotes": "Geen notities gevonden", + "integrationRequired": "Selecteer eerst een Anchor-integratie", + "updatedAt": "{date} bijgewerkt", + "untitled": "Naamloos", + "edit": "Bewerken", + "save": "Opslaan", + "cancel": "Annuleren", + "readOnlyViewer": "Je hebt kijktoegang tot deze notitie. Bewerken is uitgeschakeld.", + "saveForbidden": "Je hebt geen toestemming om deze notitie te bewerken.", + "saveFailed": "Opslaan van deze notitie mislukt. Probeer het opnieuw." }, "iframe": { "name": "iFrame", @@ -2083,7 +2083,7 @@ "label": "Geolocatie toestaan" }, "allowModals": { - "label": "" + "label": "Modals toestaan" } }, "error": { @@ -2319,7 +2319,7 @@ "label": "Werkgeheugen info weergeven" }, "gpu": { - "label": "" + "label": "GPU-info weergeven" }, "showUptime": { "label": "Uptime weergeven" @@ -2409,62 +2409,73 @@ }, "dockerContainers": { "name": "Docker statistieken", - "description": "", + "description": "Statistieken van je containers (deze widget kan alleen worden toegevoegd met beheerdersrechten)", "option": { "columns": { "label": "" }, "enableRowSorting": { - "label": "" + "label": "Items sorteren inschakelen" }, "defaultSort": { - "label": "", + "label": "Kolom die standaard wordt gebruikt voor sorteren", "option": { - "name": "", - "state": "", - "cpuUsage": "", - "memoryUsage": "" + "name": "Naam", + "state": "Status", + "cpuUsage": "CPU-gebruik", + "memoryUsage": "Geheugengebruik" } }, "descendingDefaultSort": { + "label": "Sorteren omkeren" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "Ophalen van containerstatistieken mislukt", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { - "name": "", - "description": "", + "name": "Coolify", + "description": "Overzicht van je Coolify-instantie met servers en applicaties", "option": { "showServers": { - "label": "" + "label": "Servers weergeven" }, "showApplications": { - "label": "" + "label": "Applicaties weergeven" }, "showServices": { - "label": "" + "label": "Diensten weergeven" } }, "empty": { - "servers": "", - "applications": "", - "services": "" + "servers": "Geen servers gevonden", + "applications": "Geen applicaties gevonden", + "services": "Geen diensten gevonden" }, "footer": { - "updated": "" + "updated": "{when} bijgewerkt" }, "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Geen Coolify-integratie geconfigureerd", + "internalServerError": "Ophalen van Coolify-gegevens mislukt" }, "server": { - "buildServer": "" + "buildServer": "Build" }, "instances": { - "title": "" + "title": "Instanties" } }, "vpn": { @@ -2474,187 +2485,187 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Bewaak de status van je UPS-apparaten via een NUT-server", "option": { "showBattery": { - "label": "" + "label": "Batterij weergeven" }, "showLoad": { - "label": "" + "label": "Belasting weergeven" }, "showVoltage": { - "label": "" + "label": "Spanning weergeven" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Online", + "onBattery": "Op batterij", + "lowBattery": "Lage batterij", + "charging": "Opladen", + "unknown": "Onbekend" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Looptijd", + "load": "Belasting", + "input": "Invoer", + "output": "Uitvoer" }, "error": { - "internalServerError": "" + "internalServerError": "Ophalen van UPS-gegevens mislukt" } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Verbeterde mediaservermonitoring met gedetailleerde stream- en transcoderingsgegevens", "option": { "showStreams": { - "label": "" + "label": "Actieve streams weergeven" }, "showStats": { - "label": "" + "label": "Statistiekenoverzicht weergeven" }, "showRecentActivity": { - "label": "" + "label": "Recente activiteit weergeven" }, "showViolations": { - "label": "" + "label": "Overtredingen weergeven" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Actieve streams", + "totalUsers": "Totaal gebruikers", + "transcodes": "Transcodes", + "bandwidth": "Bandbreedte" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "Geen actieve streams", + "user": "Gebruiker", + "media": "Media", + "state": "Status", + "quality": "Kwaliteit", + "device": "Apparaat", + "progress": "Voortgang", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Direct Play", + "transcode": "Transcoderen", + "directStream": "Direct Stream" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "Recente activiteit", + "empty": "Geen recente activiteit", + "watched": "Bekeken", + "partial": "Gedeeltelijk" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Overtredingen", + "empty": "Geen recente overtredingen", + "rule": "Regel", + "user": "Gebruiker" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "Geen secties ingeschakeld", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Geen Tracearr-integratie geconfigureerd", + "internalServerError": "Ophalen van Tracearr-gegevens mislukt" } }, "umami": { - "name": "", - "description": "", - "visitors": "", - "active": "", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "name": "Umami Analytics", + "description": "Toon bezoekersstatistieken van je Umami analytics-instantie", + "visitors": "bezoekers", + "active": "actief", + "pageviews": "paginaweergaven", + "visits": "bezoeken", + "bounceRate": "bounce", + "avgDuration": "gem", "option": { "websiteId": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noWebsites": "", - "configureIntegrationFirst": "" + "label": "Website", + "description": "Selecteer een website die door je Umami-instantie wordt bijgehouden", + "placeholder": "Selecteer een website", + "loading": "Websites laden...", + "noWebsites": "Geen websites gevonden", + "configureIntegrationFirst": "Verbind eerst een Umami-integratie" }, "timeFrame": { - "label": "", - "description": "", + "label": "Tijdsbestek", + "description": "De periode om bezoekersgegevens voor weer te geven", "option": { - "today": "", - "24h": "", - "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "today": "Vandaag", + "24h": "Laatste 24 uur", + "7d": "Laatste 7 dagen", + "30d": "Laatste 30 dagen", + "month": "Deze maand", + "lastMonth": "Vorige maand" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Gebeurtenis", + "description": "Toon totaal aantal voorkomens van een specifieke gebeurtenis", + "placeholder": "Selecteer een gebeurtenis", + "loading": "Gebeurtenissen laden...", + "noEvents": "Geen gebeurtenissen gevonden", + "none": "Geen gebeurtenis", + "configureWebsiteFirst": "Selecteer eerst een website om gebeurtenissen te laden" }, "chartType": { - "label": "", - "description": "", + "label": "Grafiektype", + "description": "Weergavestijl voor de grafiek", "option": { - "bar": "", - "sparkline": "" + "bar": "Staafdiagram", + "sparkline": "Sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Grafiekstijl", + "description": "Hoe de gebeurtenisreeks in de grafiek moet worden weergegeven", "option": { - "grouped": "", - "overlay": "" + "grouped": "Naast elkaar", + "overlay": "Overlay (subset)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Weergave", + "description": "Wat moet worden weergegeven in de widgetbody", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Grafiek", + "events": "Gebeurtenisgrafiek", + "topPages": "Top pagina's", + "topReferrers": "Top verwijzers" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Gebeurtenissen", + "description": "Selecteer een of meer gebeurtenissen om in een grafiek weer te geven", + "placeholder": "Selecteer gebeurtenissen...", + "loading": "Gebeurtenissen laden...", + "noEvents": "Geen gebeurtenissen gevonden", + "configureWebsiteFirst": "Selecteer eerst een website om gebeurtenissen te laden" }, "topCount": { - "label": "", - "description": "" + "label": "Te tonen items", + "description": "Aantal topitems om weer te geven (max 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "gebeurtenissen", + "label": "gebeurtenissen" }, "topPages": { - "direct": "" + "direct": "Direct" }, "topReferrers": { - "direct": "" + "direct": "Direct" }, "events": { - "selectPrompt": "" + "selectPrompt": "Selecteer gebeurtenissen om in een grafiek weer te geven" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Geen Umami integratie geconfigureerd", + "noWebsite": "Geen website geconfigureerd", + "noData": "Geen gegevens beschikbaar", + "internalServerError": "Ophalen van Umami gegevens mislukt" } }, "common": { @@ -2724,9 +2735,21 @@ "option": { "showOnlyPlaying": { "label": "Alleen huidig spelende weergeven", + "description": "Dit uitschakelen werkt niet voor Plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Momenteel aan het afspelen", "user": "Gebruiker", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,48 +2784,48 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Overzicht van je Paperless-ngx documentenarchief", + "documentsTotal": "Totaal documenten", + "documentsInbox": "Inbox", + "correspondents": "Correspondenten", + "tags": "Tags", + "documentTypes": "Documenttypes", + "inboxRatio": "Inbox-verhouding", + "inbox": "inbox", + "total": "totaal", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Toon inbox-verhouding", + "description": "Toon de verhouding inbox-tot-totaal aantal documenten in het hero-gedeelte" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Toon inbox-ring", + "description": "Toon een voortgangsring naast de inbox-verhouding" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Toon totaal documenten", + "description": "Toon het totale aantal documenten in je archief" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Toon inhoud inbox", + "description": "Toon het aantal onverwerkte documenten in de inbox" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Toon correspondenten", + "description": "Toon het totale aantal correspondenten" }, "showTags": { - "label": "", - "description": "" + "label": "Toon tags", + "description": "Toon het totale aantal tags" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Toon documenttypes", + "description": "Toon het totale aantal documenttypes" } }, "error": { - "internalServerError": "" + "internalServerError": "Ophalen van Paperless-ngx gegevens mislukt" } }, "patchmon": { @@ -2990,33 +3016,33 @@ } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Immich Serverstatistieken", + "description": "Informatie over je Immich-instantie", "option": { "showUsers": { - "label": "", - "description": "" + "label": "Gebruikers weergeven", + "description": "Aantal gebruikers op je instantie weergeven" }, "showPhotos": { - "label": "", - "description": "" + "label": "Foto's weergeven", + "description": "Aantal foto's op je instantie weergeven" }, "showVideos": { - "label": "", - "description": "" + "label": "Video's weergeven", + "description": "Aantal video's op je instantie weergeven" }, "showStorage": { - "label": "", - "description": "" + "label": "Opslag weergeven", + "description": "Totale gebruikte opslaghoeveelheid weergeven" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "Gebruikers", + "photos": "Foto's", + "videos": "Video's", + "storage": "Gebruikte opslag" }, "immich-albumCarousel": { - "name": "", + "name": "Immich Album", "allPhotos": "", "option": { "albumId": { @@ -3024,12 +3050,12 @@ "description": "" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "Interval in seconden", + "description": "Draai elke X seconden tussen de foto's in het album. Moet minimaal 1 zijn en minder dan 3600." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "Foto-info weergeven", + "description": "Datum van de foto en de huidige index onderaan de diavoorstelling weergeven" }, "randomizePhotos": { "label": "", @@ -3078,12 +3104,21 @@ }, "limitPerIntegration": { "label": "Beperk items per integratie", - "description": "" + "description": "Hiermee wordt het aantal items dat per integratie wordt getoond beperkt, niet globaal" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Kolommen selecteren in items", - "noCommunications": "Kan geen gegevens laden van integratie" + "noCommunications": "Kan geen gegevens laden van integratie", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Huidige index binnen client" }, "id": { - "columnTitle": "ID" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "Integratie" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Eindtijd", - "detailsTitle": "Tijd sinds/tot voltooiing" + "detailsTitle": "Tijd sinds/tot voltooiing", + "eta": "" }, "type": { "columnTitle": "Type", @@ -3184,11 +3221,27 @@ } } }, - "globalRatio": "Globale verhouding" + "globalRatio": "Globale verhouding", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Media uitgaves", - "description": "", + "description": "Nieuw toegevoegde media of aankomende releases van verschillende integraties weergeven", "option": { "layout": { "label": "Lay-out", @@ -3383,21 +3436,21 @@ "label": "Beschrijving verbergen" }, "showPosterImage": { - "label": "" + "label": "Posterafbeelding weergeven" } } }, "releases": { "name": "Uitgaves", - "description": "", + "description": "Toont een lijst met de huidige versie van de opgegeven repositories met de opgegeven versie-regex.", "option": { "newReleaseWithin": { "label": "Nieuwe uitgave binnen", - "description": "" + "description": "Gebruiksvoorbeeld: 1w (1 week), 10M (10 maanden). Geaccepteerde eenheidstypen: h (uren), d (dagen), w (weken), M (maanden), y (jaren). Laat leeg om nieuwe uitgaven niet te markeren." }, "staleReleaseWithin": { - "label": "", - "description": "" + "label": "Verouderde uitgave binnen", + "description": "Gebruiksvoorbeeld: 1w (1 week), 10M (10 maanden). Geaccepteerde eenheidstypen: h (uren), d (dagen), w (weken), M (maanden), y (jaren). Laat leeg om verouderde uitgaven niet te markeren." }, "showOnlyHighlighted": { "label": "Alleen gemarkeerde weergeven", @@ -3411,7 +3464,7 @@ }, "topReleases": { "label": "Top uitgaven", - "description": "" + "description": "Het maximale aantal nieuwste uitgaven om te tonen. Nul betekent geen limiet." }, "repositories": { "label": "Repositories", @@ -3425,7 +3478,7 @@ "listFoundImages": "Lijst van gevonden afbeeldingen", "listAlreadyImportedImages": "Lijst van reeds geïmporteerde afbeeldingen", "allImagesAlreadyImported": "Alle afbeeldingen al geïmporteerd", - "onlyAdminCanImport": "", + "onlyAdminCanImport": "Alleen beheerders kunnen importeren vanuit Docker", "selectAll": "Alles selecteren", "deselectAll": "Alles deselecteren" }, @@ -3478,10 +3531,10 @@ "example": { "label": "Voorbeeld" }, - "invalid": "", + "invalid": "Ongeldige repository-definitie, controleer de waarden", "noProvider": { "label": "Geen aanbieder", - "tooltip": "" + "tooltip": "De provider kon niet worden geparsed, stel deze handmatig in na het importeren van de afbeeldingen" }, "tokens": { "label": "", @@ -3604,7 +3657,7 @@ }, "notifications": { "name": "Meldingen", - "description": "", + "description": "Toon meldingsgeschiedenis van een integratie", "noItems": "Geen meldingen om weer te geven.", "option": { "hideLogos": { @@ -3613,50 +3666,50 @@ } }, "speedtestTracker": { - "name": "", - "description": "", + "name": "Speedtest Tracker", + "description": "Toont snelheidstestresultaten van je Speedtest Tracker-instantie.", "option": { "showLatestResult": { - "label": "" + "label": "Laatste resultaat weergeven" }, "showStats": { - "label": "" + "label": "Gemiddelden weergeven" }, "showRecentResults": { - "label": "" + "label": "Recente resultaten weergeven" }, "showPingGraph": { - "label": "" + "label": "Ping-grafiek weergeven" } }, - "latestResult": "", - "averages": "", - "tests": "", - "recentResults": "", - "recentResultsSpeed": "", - "recentResultsPing": "", - "download": "", - "upload": "", - "ping": "", - "status": "", - "avgDownload": "", - "avgUpload": "", - "avgPing": "", - "healthy": "", - "unhealthy": "", - "ok": "", - "fail": "", - "noSectionsEnabled": "", + "latestResult": "Laatste resultaat", + "averages": "Gemiddelden", + "tests": "{count} tests", + "recentResults": "Recente resultaten", + "recentResultsSpeed": "Snelheid", + "recentResultsPing": "Ping", + "download": "Download", + "upload": "Upload", + "ping": "Ping", + "status": "Status", + "avgDownload": "Gem. Download", + "avgUpload": "Gem. Upload", + "avgPing": "Gem. Ping", + "healthy": "Gezond", + "unhealthy": "Niet-gezond", + "ok": "OK", + "fail": "Mislukt", + "noSectionsEnabled": "Schakel ten minste één sectie in de widgetopties in.", "error": { - "internalServerError": "" + "internalServerError": "Ophalen van speedtestgegevens mislukt" } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Bewaak uptime-statistieken van je Uptime Kuma statuspagina", "option": { "showAverageUptime": { - "label": "", + "label": "Toon gemiddelde uptime", "description": "" }, "showUptimeRing": { @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3805,7 +3844,7 @@ "option": { "cpu": "Processor", "memory": "Geheugen", - "gpu": "", + "gpu": "GPU", "network": "Netwerk" } }, @@ -3822,35 +3861,35 @@ "card": { "cpu": "CPU", "memory": "MEM", - "gpu": "", + "gpu": "GPU", "network": "NET", "up": "OMHOOG", "down": "OMLAAG" } }, "systemDisks": { - "name": "", - "description": "", + "name": "Systeemschijven", + "description": "Schijfgebruik van je systeem", "option": { "showTemperatureIfAvailable": { - "label": "" + "label": "Temperatuur weergeven indien beschikbaar" }, "displayMode": { - "label": "", + "label": "Weergavemodus", "option": { "percentage": { - "label": "" + "label": "Percentage (bijv. 76%)" }, "absolute": { - "label": "" + "label": "Absolute waarden (bijv. 800GB / 1TB)" }, "free": { - "label": "" + "label": "Vrije ruimte percentage (bijv. 24% vrij)" } } }, "showBackgroundBar": { - "label": "" + "label": "Gebruiksbalk op achtergrond weergeven" }, "visibleStorageVolumes": { "label": "", @@ -3859,7 +3898,7 @@ } }, "status": { - "unhealthy": "" + "unhealthy": "Niet-gezond" } }, "customApi": { @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel-systemen (tabel)", + "description": "Tabelweergave van alle door Beszel bewaakte systemen met sorteerbare kolommen en statusindicatoren", "option": { "statusFilter": { - "label": "" + "label": "Statusfilter" }, "sortBy": { - "label": "" + "label": "Sorteer op" }, "sortDirection": { - "label": "" + "label": "Sorteerrichting" }, "showCpu": { - "label": "" + "label": "Toon CPU" }, "showMemory": { - "label": "" + "label": "Toon geheugen" }, "showDisk": { - "label": "" + "label": "Toon schijf" }, "showGpu": { - "label": "" + "label": "Toon GPU" }, "showLoadAvg": { - "label": "" + "label": "Toon gemiddelde belasting" }, "showNet": { - "label": "" + "label": "Toon netwerk" }, "showTemp": { - "label": "" + "label": "Toon temperatuur" }, "showBattery": { - "label": "" + "label": "Toon batterij" }, "showServices": { - "label": "" + "label": "Toon services" }, "showUptime": { - "label": "" + "label": "Toon uptime" }, "showAgent": { + "label": "Toon agentversie" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Geen systemen gevonden", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Systeem", + "cpu": "CPU", + "memory": "Geheugen", + "disk": "Schijf", + "gpu": "GPU", + "loadAvg": "Gem. belasting", + "net": "Net", + "temp": "Temp", + "battery": "Bat", + "services": "Diensten", + "uptime": "Uptime", + "agent": "Agent" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel-systemen (raster)", + "description": "Kaartrasterweergave van alle door Beszel bewaakte systemen met realtime metingen", "option": { "statusFilter": { - "label": "" + "label": "Statusfilter" }, "showCpu": { - "label": "" + "label": "Toon CPU" }, "showMemory": { - "label": "" + "label": "Toon geheugen" }, "showDisk": { - "label": "" + "label": "Toon schijf" }, "showGpu": { - "label": "" + "label": "Toon GPU" }, "showLoadAvg": { - "label": "" + "label": "Toon gemiddelde belasting" }, "showNet": { - "label": "" + "label": "Toon netwerk" }, "showTemp": { - "label": "" + "label": "Toon temperatuur" }, "showBattery": { - "label": "" + "label": "Toon batterij" }, "showServices": { - "label": "" + "label": "Toon services" }, "showUptime": { - "label": "" + "label": "Toon uptime" }, "showAgent": { - "label": "" + "label": "Toon agentversie" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Geheugen", + "disk": "Schijf", + "gpu": "GPU", + "loadAvg": "Gem. belasting", + "net": "Net", + "temp": "Temp", + "battery": "Bat", + "services": "Diensten", + "uptime": "Uptime", + "agent": "Agent" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel-waarschuwingen", + "description": "Bekijk Beszel-waarschuwingsconfiguraties en geschiedenis", "option": { "showHistory": { - "label": "" + "label": "Toon waarschuwingsgeschiedenis" }, "maxHistoryItems": { - "label": "" + "label": "Max. geschiedenisitems" } }, - "empty": "", + "empty": "Geen waarschuwingen geconfigureerd", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Geschiedenis", + "resolved": "Opgelost", "status": { - "triggered": "", - "ok": "" + "triggered": "Geactiveerd", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel-systeemstatistieken", + "description": "Tijdreeksgrafieken voor CPU, geheugen, schijf, netwerk en Docker-containerstatistieken", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Tijdsperiode" }, "showCpu": { - "label": "" + "label": "Toon CPU-grafiek" }, "showMemory": { - "label": "" + "label": "Toon geheugengrafiek" }, "showDisk": { - "label": "" + "label": "Toon schijfgrafiek" }, "showDiskIO": { - "label": "" + "label": "Toon schijf I/O-grafiek" }, "showNetwork": { - "label": "" + "label": "Toon netwerkgrafiek" }, "showDockerCpu": { - "label": "" + "label": "Toon Docker CPU-grafiek" }, "showDockerMemory": { - "label": "" + "label": "Toon Docker geheugengrafiek" }, "showDockerNetwork": { - "label": "" + "label": "Toon Docker netwerkgrafiek" } }, - "selectSystem": "", + "selectSystem": "Selecteer systeem", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU-gebruik", + "subtitle": "Gemiddeld systeembreed CPU-gebruik", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Geheugengebruik", + "subtitle": "Nauwkeurig gebruik op het opgenomen tijdstip", + "series": "Gebruikt", + "cache": "Cache/Buffers" }, "disk": { - "title": "", + "title": "Schijfgebruik", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Schijf I/O", + "subtitle": "Doorvoersnelheid van het rootbestandssysteem", + "read": "Lezen", + "write": "Schrijven" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Bandbreedte", + "subtitle": "Netwerkverkeer van openbare interfaces", + "sent": "Verzonden", + "recv": "Ontvangen" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU-gebruik", + "subtitle": "Gemiddeld CPU-gebruik van containers" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker geheugengebruik", + "subtitle": "Geheugengebruik van Docker-containers" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker netwerk I/O", + "subtitle": "Netwerkverkeer van Docker-containers" } } } @@ -4528,7 +4575,7 @@ "api": "API", "certificates": "Certificaten", "tasks": "Taken", - "backup": "" + "backup": "Back-up" } }, "settings": "Instellingen", @@ -4609,7 +4656,7 @@ "private": "Dit bord is privé" }, "noResults": { - "title": "" + "title": "Nog geen borden" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Eerste dag van de week", "accessibility": "Toegankelijkheid", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Onboarding-rondleidingen", + "description": "Reset de onboarding-rondleidingen om ze opnieuw te zien tijdens je volgende bezoek aan de beheerpagina of het dashboard.", + "reset": "Onboarding-rondleidingen resetten", "resetSuccess": { - "title": "", - "message": "" + "title": "Rondleidingen gereset", + "message": "Onboarding-rondleidingen verschijnen opnieuw tijdens je volgende bezoek" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Voltooid", + "notStarted": "Niet gestart" }, "name": { - "management": "", - "dashboard": "" + "management": "Beheer", + "dashboard": "Dashboard" } } } @@ -4826,10 +4873,10 @@ } }, "user": { - "title": "", + "title": "Gebruikers", "enableGravatar": { - "label": "", - "description": "" + "label": "Gravatar inschakelen", + "description": "Valt terug op gebruikersavatars van Libravatar/Gravatar wanneer geen aangepaste avatar is ingesteld en een e-mail is geconfigureerd" } }, "search": { @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "Standaard kleurenschema", "options": { - "auto": "", + "auto": "Auto", "light": "Licht", "dark": "Donker" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Volledige databaseback-up", + "metaTitle": "Back-up & Herstel", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Database exporteren", + "description": "Download een volledige back-up van je SQLite-database inclusief alle instellingen, gebruikers, borden en versleutelde integratiegeheimen. De back-up is gebundeld als een ZIP-bestand met de encryptiesleutel en metadata.", + "button": "Back-up downloaden", + "error": "Exporteren mislukt", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Export van gevoelige gegevens", + "warningTitle": "Deze export bevat je volledige database.", + "warningBody": "De back-up omvat alle gebruikers, integratiegeheimen (versleuteld), API-sleutels, bordconfiguraties en app-gegevens. Bewaar het geëxporteerde bestand veilig en deel het niet.", + "typePrompt": "Typ \"{phrase}\" om door te gaan", + "submit": "Database exporteren", + "cancel": "Annuleren" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Database herstellen", + "description": "Upload een eerder geëxporteerde back-up ZIP om je database te herstellen. Dit vervangt je volledige database. Als de back-up met een andere encryptiesleutel is gemaakt, worden geheimen automatisch opnieuw versleuteld.", + "warning": "Het herstellen van een back-up zal je huidige database volledig vervangen en de applicatie herstarten. Deze actie kan niet ongedaan worden gemaakt.", "dropzone": { - "title": "", - "description": "" + "title": "Sleep je back-up ZIP hierheen of klik om te bladeren", + "description": "Alleen .zip-bestanden van een Homarr SQLite-back-up worden geaccepteerd" }, - "changeFile": "", - "button": "", + "changeFile": "Bestand wijzigen", + "button": "Database herstellen", "success": { - "title": "", - "message": "" + "title": "Herstel voltooid", + "message": "Database is succesvol hersteld. De applicatie wordt opnieuw opgestart..." }, - "error": "" + "error": "Importeren mislukt" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Back-up inhoud", + "exported": "Geëxporteerd op {date}", + "loading": "Back-upbestand analyseren...", + "errorTitle": "Voorbeeldfout", + "entity": "Entiteit", + "count": "Aantal", + "boards": "Borden", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Borden", + "user": "Gebruikers", + "app": "Apps", + "integration": "Integraties", + "item": "Widgets", + "media": "Media", + "search_engine": "Zoekmachines" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Kan back-upbestand niet analyseren", + "invalidMissingMetadata": "Ongeldige back-up: metadata.json ontbreekt", + "invalidMissingDb": "Ongeldige back-up: db.sqlite ontbreekt" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Sleep je back-up ZIP hierheen", + "description": "Accepteert .zip-bestanden van een Homarr SQLite-back-up (max 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Back-up analyseren...", + "changeFile": "Bestand wijzigen", + "continueToRestore": "Doorgaan naar herstel", + "tryAgain": "Probeer opnieuw", + "analysisError": "Analysefout", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Back-up inhoud", + "exported": "Geëxporteerd op {date}", + "entity": "Entiteit", + "count": "Aantal", + "boards": "Borden", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Borden", + "user": "Gebruikers", + "app": "Apps", + "integration": "Integraties", + "item": "Widgets", + "media": "Media", + "search_engine": "Zoekmachines" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migratie toegepast", + "migrationsAppliedPlural": "{count} migraties toegepast", + "migrationsOlderVersion": "Deze back-up was van een oudere Homarr-versie. {count} schemamigratie werd toegepast om deze bij te werken.", + "migrationsOlderVersionPlural": "Deze back-up was van een oudere Homarr-versie. {count} schemamigraties werden toegepast om deze bij te werken.", + "migrationsUpToDate": "Database-schema is up-to-date ({count} migraties toegepast)", + "upToDate": "Up-to-date", + "migrationsPending": "{count} in behandeling" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Migraties toepassen ({current}/{total})", + "migrationLabel": "Migratie {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Destructieve actie", + "warningTitle": "Dit zal permanent je volledige database vervangen.", + "warningBody": "Alle huidige borden, gebruikers, apps, integraties, instellingen en sessies gaan verloren. Deze actie kan niet ongedaan worden gemaakt. De applicatie wordt na het herstel opnieuw opgestart.", + "typePrompt": "Typ \"{phrase}\" om door te gaan", + "cancel": "Annuleren", + "submit": "Database herstellen" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Database herstellen...", + "extracting": "Back-uparchief uitpakken", + "migrating": "Database migraties toepassen", + "encrypting": "Integratiegeheimen opnieuw versleutelen", + "swapping": "Databasebestand vervangen", + "restarting": "Server herstarten" }, "complete": { - "title": "", - "message": "" + "title": "Herstel voltooid", + "message": "Database is succesvol hersteld. De server wordt opnieuw opgestart — ververs de pagina over enkele seconden." }, "failed": { - "title": "" + "title": "Herstellen mislukt" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Ongeldige back-up: metadata.json ontbreekt", + "invalidMissingDb": "Ongeldige back-up: db.sqlite ontbreekt", + "analyzeError": "Kan back-up niet analyseren" } } }, @@ -5207,8 +5254,8 @@ "subtitle": "{count} bijdragen aan vertalingen in vele talen" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "Sponsors", + "subtitle": "{count} die het project financieel ondersteunen" }, "libraries": { "title": "Bibliotheken", @@ -5277,15 +5324,15 @@ "label": "Poorten" }, "host": { - "label": "" + "label": "Host" } }, "action": { "title": "Acties", "logs": { - "label": "", + "label": "Logboeken bekijken", "page": { - "title": "" + "title": "{name} logboeken" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Verwijderen", + "confirm": "", "notification": { "success": { "title": "Containers verwijderd", @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "Logboeken" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "Globale commando's", "option": { "colorScheme": { - "auto": "", + "auto": "Weergavemodus omschakelen", "light": "Schakel naar lichte modus", "dark": "Schakel naar donkere modus" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Voorkeuren", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Selecteer een voorkeur om te wijzigen", + "backHint": "Druk op Backspace of gebruik de terugknop om terug te gaan", + "backAction": "Ga terug" } }, "notification": { "error": { - "message": "" + "message": "Kan voorkeur niet bijwerken" } }, "option": { "preferences": { - "label": "" + "label": "Open voorkeuren" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld" }, "board": { - "none": "", - "unavailable": "" + "none": "Geen", + "unavailable": "Momenteel geselecteerd (niet beschikbaar)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Geen", + "unavailable": "Momenteel geselecteerd (niet beschikbaar)" }, "colorScheme": { - "label": "", + "label": "Kleurenschema", "children": { "detail": { - "title": "" + "title": "Selecteer je kleurenschema" } } }, "locale": { - "label": "", + "label": "Taal", "children": { "detail": { - "title": "" + "title": "Selecteer je voorkeurstaal" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Standaard zoekmachine", "children": { "detail": { - "title": "" + "title": "Selecteer je standaard zoekmachine" } } }, "openSearchInNewTab": { - "label": "", + "label": "Zoekresultaten openen in nieuw tabblad", "children": { "detail": { - "title": "" + "title": "Zoekresultaten openen in nieuw tabblad" } } }, "ddgBangs": { - "label": "", + "label": "DuckDuckGo bangs inschakelen", "children": { "detail": { - "title": "" + "title": "DuckDuckGo bangs inschakelen" } } }, "firstDayOfWeek": { - "label": "", + "label": "Eerste dag van de week", "children": { "detail": { - "title": "" + "title": "Selecteer de eerste dag van de week" } } }, "homeBoardId": { - "label": "", + "label": "Home bord", "children": { "detail": { - "title": "" + "title": "Selecteer je home bord" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobiel home bord", "children": { "detail": { - "title": "" + "title": "Selecteer je mobiele home bord" } } }, "pingIconsEnabled": { - "label": "", + "label": "Gebruik iconen voor pings", "children": { "detail": { - "title": "" + "title": "Gebruik iconen voor pings" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Volledige voorkeurenpagina openen" } } } } }, "media": { - "help": "", + "help": "Zoeken naar films of shows om aan te vragen", "requestMovie": "Film aanvragen", "requestSeries": "Series aanvragen", "openIn": "Openen in {kind}", "group": { - "title": "" + "title": "Films en shows" }, "action": { "search": { - "label": "", - "description": "", + "label": "Zoeken naar films of shows", + "description": "Begin met typen om je media-aanvraag integraties te doorzoeken", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Voeg een Overseerr, Jellyseerr of Seerr integratie toe om media zoeken in te schakelen.", + "scoped": "Deze widget heeft geen toegankelijke media-aanvraag integratie." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Beschikbaar", + "partiallyAvailable": "Gedeeltelijk", + "processing": "Verwerken", + "requested": "Aangevraagd", + "pending": "Aangevraagd" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "Zoekmachines", - "tipDdgBangs": "", + "tipDdgBangs": "Tip: Je kunt hier ook elke DuckDuckGo bang gebruiken, bijvoorbeeld !iets", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Zoek \"{query}\" met {label}", + "pressEnterToOpen": "Druk op Enter om te openen", + "engineSelected": "{label} geselecteerd (!{bang})", + "typeQueryToContinue": "Typ je zoekopdracht om door te gaan", + "emptyBangHint": "Typ een bang, bijv. !yt, en druk op Spatie om te selecteren" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "Seizoen", "episodes": "Afleveringen", - "status": "" + "status": "Status" }, "status": { - "requested": "" + "requested": "Aangevraagd" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Lees de documentatie", + "next": "Volgende", + "prev": "Terug", + "done": "Klaar", + "skip": "Rondleiding overslaan", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Welkom bij Homarr!", + "description": "Dit is je controlepaneel. Vanaf hier beheer je borden, apps, integraties, gebruikers en serverinstellingen. Laten we een rondleiding door elke sectie nemen." }, "boardsList": { - "title": "", - "description": "" + "title": "Jouw borden", + "description": "Hier zijn al je dashboards. Elk bord heeft zijn eigen lay-out, achtergrond en toegangsinstellingen. Je kunt zien wie elk bord heeft aangemaakt en of het openbaar of privé is." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Een bord aanmaken", + "description": "Klik hier om een nieuw dashboard aan te maken of importeer er een uit een vorige Homarr-installatie. Elk bord krijgt een eigen URL die je kunt delen." }, "appsList": { - "title": "", - "description": "" + "title": "Jouw apps", + "description": "Dit zijn alle apps die je hebt toegevoegd — koppelingen naar je self-hosted services. Elke app heeft een pictogram, optionele gezondheidscontrole en een statusbadge op het dashboard." }, "appsCreate": { - "title": "", - "description": "" + "title": "Een app toevoegen", + "description": "Registreer hier een nieuwe service. Geef het een naam, URL en pictogram — het verschijnt als een tegel op je borden met live statuscontrole." }, "integrationsList": { - "title": "", - "description": "" + "title": "Jouw integraties", + "description": "Dit zijn de services verbonden met Homarr — Sonarr, Radarr, Plex, Jellyfin en meer dan 50 andere. Alle inloggegevens zijn versleuteld opgeslagen." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Een integratie toevoegen", + "description": "Verbind hier een nieuwe service. Kies het type, voer de URL en API-sleutel in — Homarr valideert de verbinding voordat het wordt opgeslagen." }, "usersList": { - "title": "", - "description": "" + "title": "Jouw gebruikers", + "description": "Bekijk iedereen die toegang heeft. Organiseer gebruikers in groepen en beheer wie elk bord kan bekijken of bewerken." }, "usersCreate": { - "title": "", - "description": "" + "title": "Een gebruiker aanmaken", + "description": "Voeg hier een nieuw gebruikersaccount toe. Je kunt ook uitnodigingslinks gebruiken voor eenvoudige onboarding. Dat is de rondleiding — je bent helemaal klaar!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Dit is jouw bord", + "description": "Een drag-and-drop dashboard waar je apps en widgets rangschikt. Druk op Ctrl+K om op elk moment te zoeken naar apps, borden en acties." }, "editMode": { - "title": "", - "description": "" + "title": "Bewerkmodus", + "description": "Klik hier om de bewerkmodus te openen. Je kunt vervolgens widgets, apps en secties toevoegen — versleep om te verplaatsen, vergroot/verklein met de hoekgreep. Klik nogmaals om je wijzigingen op te slaan." }, "settings": { - "title": "", - "description": "" + "title": "Bordinstellingen", + "description": "Wijzig de naam, kolommen, achtergrond, kleuren van dit bord en wie er toegang toe heeft. Elk bord kan openbaar of privé zijn." }, "switcher": { - "title": "", - "description": "" + "title": "Wissel van bord", + "description": "Spring tussen borden. Maak aparte dashboards voor verschillende doeleinden — media, netwerken, per gebruiker of wat je maar wilt." }, "userMenu": { - "title": "", - "description": "" + "title": "Jouw profiel", + "description": "Wijzig je kleurenschema, taal, home bord en voorkeuren. Je kunt ook vanuit hier naar de beheerpagina gaan." } } } diff --git a/packages/translation/src/lang/no.json b/packages/translation/src/lang/no.json index 68d6cef7f..d9bc061a1 100644 --- a/packages/translation/src/lang/no.json +++ b/packages/translation/src/lang/no.json @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Reverser sortering" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "Kunne ikke hente containerstatistikk" + "internalServerError": "Kunne ikke hente containerstatistikk", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Vis kun det som spiller nå", "description": "Å deaktivere dette fungerer ikke for Plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Spilles nå", "user": "Bruker", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Begrens elementer per integrasjon", "description": "Dette begrenser antall elementer vist per integrasjon, ikke globalt" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Velg kolonner i elementer", - "noCommunications": "Kan ikke laste inn data fra integrasjon" + "noCommunications": "Kan ikke laste inn data fra integrasjon", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Gjeldende indeks i klienten" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { "columnTitle": "Integrasjon" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Fullfør tid", - "detailsTitle": "Tid siden/til fullførelse" + "detailsTitle": "Tid siden/til fullførelse", + "eta": "" }, "type": { "columnTitle": "Type", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Global ratio" + "globalRatio": "Global ratio", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Medieutgivelser", @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "", @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Fjern", + "confirm": "", "notification": { "success": { "title": "Containere fjernet", diff --git a/packages/translation/src/lang/pl.json b/packages/translation/src/lang/pl.json index 7c3dee4a7..e447bf7f9 100644 --- a/packages/translation/src/lang/pl.json +++ b/packages/translation/src/lang/pl.json @@ -199,8 +199,8 @@ "label": "Użyj ikon dla pingów" }, "enableRightClickOnWidgets": { - "label": "", - "description": "" + "label": "Włącz prawe kliknięcie na widżetach", + "description": "Pokaż menu kontekstowe Homarr po kliknięciu prawym przyciskiem na widżet. Wyłącz, aby używać domyślnego menu przeglądarki (np. \"Otwórz link w nowej karcie\")." }, "defaultSearchEngine": { "label": "Domyślna wyszukiwarka" @@ -1290,12 +1290,12 @@ "newLabel": "Nowy klucz API (Secret)" }, "patchmonApiKey": { - "label": "", - "newLabel": "" + "label": "Klucz API", + "newLabel": "Nowy klucz API" }, "patchmonApiSecret": { - "label": "", - "newLabel": "" + "label": "Sekret API", + "newLabel": "Nowy sekret API" }, "githubAppId": { "label": "Identyfikator aplikacji", @@ -1341,20 +1341,20 @@ } }, "traefik": { - "name": "", - "description": "" + "name": "Traefik", + "description": "Chmurowy reverse proxy i load balancer" }, "paperlessNgx": { "name": "Paperless-ngx", "description": "System zarządzania dokumentami do archiwizacji i organizacji zeskanowaych dokumnteów" }, "patchmon": { - "name": "", - "description": "" + "name": "PatchMon", + "description": "Zarządzanie łatkami i monitorowanie hostów Linux" }, "bazarr": { - "name": "", - "description": "" + "name": "Bazarr", + "description": "Aplikacja towarzysząca Sonarr i Radarr do zarządzania i pobierania napisów" } }, "media": { @@ -1628,10 +1628,10 @@ "actions": "Akcje" }, "status": { - "success": "", - "error": "", - "loading": "", - "idle": "" + "success": "OK", + "error": "Błąd", + "loading": "Ładowanie", + "idle": "Bezczynny" } }, "create": { @@ -1907,14 +1907,14 @@ "description": "Użyj ISO 8601 do formatu daty (spowoduje to nadpisanie innych opcji)" }, "showWeather": { - "label": "", - "description": "" + "label": "Pokaż pogodę", + "description": "Wyświetl małą animowaną ikonę pogody i temperaturę w rogu karty" }, "weatherLocation": { - "label": "" + "label": "Lokalizacja pogody" }, "isWeatherFormatFahrenheit": { - "label": "" + "label": "Użyj Fahrenheita" } } }, @@ -1976,8 +1976,8 @@ "clear": "Wyczyść formatowanie", "heading": "Nagłówek {level}", "align": "Wyrównanie tekstu: {position}", - "directionLtr": "", - "directionRtl": "", + "directionLtr": "Ustaw kierunek tekstu od lewej do prawej", + "directionRtl": "Ustaw kierunek tekstu od prawej do lewej", "blockquote": "Cytat", "horizontalLine": "Linia pozioma", "bulletList": "Lista punktowana", @@ -2268,7 +2268,7 @@ "sunset": "Zachód słońca", "maxWindSpeed": "Maksymalna prędkość wiatru: {maxWindSpeed} km/h", "maxWindGusts": "Maksymalne porywy wiatru: {maxWindGusts} km/h", - "humidity": "" + "humidity": "Wilgotność: {humidity}%" }, "kind": { "clear": "Bezchmurnie", @@ -2328,9 +2328,9 @@ "label": "Pokaż informacje o systemie plików" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "Widoczne woluminy pamięci", + "description": "Dostępne tylko gdy wszystkie wybrane integracje to Synology. Pozostaw puste, aby wyświetlić wszystkie wykryte woluminy pamięci.", + "placeholder": "Wybierz woluminy pamięci" }, "defaultTab": { "label": "Domyślna karta" @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Odwróć sortowanie" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "Nie udało się pobrać statystyk kontenerów" + "internalServerError": "Nie udało się pobrać statystyk kontenerów", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2725,18 +2736,33 @@ "showOnlyPlaying": { "label": "Pokaż tylko aktualnie odtwarzane", "description": "Wyłączenie tej opcji nie zadziała w przypadku Plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Obecnie odtwarzane", "user": "Użytkownik", "name": "Nazwa", "id": "ID", - "status": "", - "directPlay": "", - "transcoding": "", - "paused": "", - "remaining": "", + "status": "Status", + "directPlay": "Odtwarzanie bezpośrednie", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", + "transcoding": "Transkodowanie", + "paused": "Zatrzymane", + "remaining": "{minutes} min pozostało", "metadata": { "title": "Statystyki dla nerdów", "video": { @@ -2803,190 +2829,190 @@ } }, "patchmon": { - "name": "", - "description": "", - "title": "", - "totalHosts": "", - "hostsNeedingUpdates": "", - "securityUpdates": "", - "upToDateHosts": "", - "hostsWithSecurityUpdates": "", - "recentUpdates24h": "", - "totalOutdatedPackages": "", - "totalRepos": "", - "osDistribution": "", - "compliance": "", - "complianceRatio": "", - "lastUpdated": "", + "name": "PatchMon", + "description": "Przegląd stanu poprawek hostów z PatchMon", + "title": "Statystyki PatchMon", + "totalHosts": "Łączna liczba hostów", + "hostsNeedingUpdates": "Wymaga aktualizacji", + "securityUpdates": "Aktualizacje zabezpieczeń", + "upToDateHosts": "Aktualne hosty", + "hostsWithSecurityUpdates": "Hosty z aktualizacjami zabezpieczeń", + "recentUpdates24h": "Aktualizacje (24h)", + "totalOutdatedPackages": "Nieaktualne pakiety", + "totalRepos": "Repozytoria", + "osDistribution": "Dystrybucja systemu", + "compliance": "Zgodność poprawek", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Zaktualizowano {time}", "option": { "showTotalHosts": { - "label": "", - "description": "" + "label": "Pokaż łączną liczbę hostów", + "description": "Wyświetla łączną liczbę monitorowanych hostów" }, "showHostsNeedingUpdates": { - "label": "", - "description": "" + "label": "Pokaż hosty wymagające aktualizacji", + "description": "Wyświetla hosty z co najmniej jednym nieaktualnym pakietem" }, "showSecurityUpdates": { - "label": "", - "description": "" + "label": "Pokaż aktualizacje zabezpieczeń", + "description": "Wyświetla całkowitą liczbę dostępnych aktualizacji zabezpieczeń" }, "showUpToDateHosts": { - "label": "", - "description": "" + "label": "Pokaż aktualne hosty", + "description": "Wyświetla hosty bez nieaktualnych pakietów" }, "showHostsWithSecurityUpdates": { - "label": "", - "description": "" + "label": "Pokaż hosty z aktualizacjami zabezpieczeń", + "description": "Wyświetla hosty wymagające poprawek bezpieczeństwa" }, "showRecentUpdates24h": { - "label": "", - "description": "" + "label": "Pokaż ostatnie aktualizacje (24h)", + "description": "Wyświetla liczbę aktualizacji zastosowanych w ciągu ostatnich 24 godzin" }, "showTotalOutdatedPackages": { - "label": "", - "description": "" + "label": "Pokaż nieaktualne pakiety", + "description": "Wyświetla całkowitą liczbę nieaktualnych pakietów na wszystkich hostach" }, "showTotalRepos": { - "label": "", - "description": "" + "label": "Pokaż repozytoria", + "description": "Wyświetla liczbę monitorowanych aktywnych repozytoriów" }, "enableThresholdColors": { - "label": "", - "description": "" + "label": "Włącz kolory progów", + "description": "Koloruj wartości statystyk na zielono, żółto lub czerwono w zależności od ustawionych progów ważności" }, "useCustomThresholds": { - "label": "", - "description": "" + "label": "Zaawansowane progi", + "description": "Dostosuj progi ostrzeżeń i krytyczne dla każdej statystyki, używając liczby bezwzględnej lub procentu wszystkich hostów" }, "thresholdMode": { "option": { - "absolute": "", - "percent": "" + "absolute": "Liczba bezwzględna", + "percent": "Procent wszystkich hostów" } }, "hostsNeedingUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Tryb progu dla wymagających aktualizacji", + "description": "Porównaj liczbę hostów wymagających aktualizacji jako wartość bezwzględną lub procent wszystkich hostów" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Próg ostrzeżenia dla wymagających aktualizacji", + "description": "Zmień na żółty, gdy wartość osiągnie ten próg" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Próg krytyczny dla wymagających aktualizacji", + "description": "Zmień na czerwony, gdy wartość osiągnie ten próg" }, "securityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Tryb progu dla aktualizacji zabezpieczeń", + "description": "Porównaj liczbę aktualizacji zabezpieczeń jako wartość bezwzględną lub procent wszystkich hostów" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Próg ostrzeżenia dla aktualizacji zabezpieczeń", + "description": "Ustaw żółty kolor, gdy wartość osiągnie ten próg" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Próg krytyczny aktualizacji zabezpieczeń", + "description": "Ustaw czerwony kolor, gdy wartość osiągnie ten próg" }, "hostsWithSecurityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Tryb progu liczby hostów z aktualizacjami zabezpieczeń", + "description": "Porównaj liczbę hostów jako wartość bezwzględną lub procent całkowitej liczby hostów" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Próg ostrzegawczy dla hostów z aktualizacjami zabezpieczeń", + "description": "Ustaw żółty kolor, gdy wartość osiągnie ten próg" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Próg krytyczny dla hostów z aktualizacjami zabezpieczeń", + "description": "Ustaw czerwony kolor, gdy wartość osiągnie ten próg" }, "upToDateHostsThresholdMode": { - "label": "", - "description": "" + "label": "Tryb progu dla aktualnych hostów", + "description": "Porównaj liczbę aktualnych hostów jako wartość bezwzględną lub procent całkowitej liczby hostów" }, "upToDateHostsWarningAt": { - "label": "", - "description": "" + "label": "Próg ostrzegawczy dla aktualnych hostów", + "description": "Ustaw żółty kolor, gdy wartość jest równa lub wyższa od tego progu, ale poniżej pełnego pokrycia" }, "upToDateHostsCriticalAt": { - "label": "", - "description": "" + "label": "Próg krytyczny dla aktualnych hostów", + "description": "Ustaw czerwony kolor, gdy wartość spadnie poniżej tego progu" }, "totalOutdatedPackagesThresholdMode": { - "label": "", - "description": "" + "label": "Tryb progu dla nieaktualnych pakietów", + "description": "Porównaj liczbę nieaktualnych pakietów jako wartość bezwzględną lub procent całkowitej liczby hostów" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "Próg ostrzegawczy dla nieaktualnych pakietów", + "description": "Ustaw żółty kolor, gdy wartość osiągnie ten próg" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "Próg krytyczny dla nieaktualnych pakietów", + "description": "Ustaw czerwony kolor, gdy wartość osiągnie ten próg" }, "showOsDistribution": { - "label": "", - "description": "" + "label": "Pokaż dystrybucję systemu operacyjnego", + "description": "Wyświetl podział monitorowanych hostów według systemu operacyjnego" }, "osDistributionLimit": { - "label": "", - "description": "", + "label": "Limit dystrybucji systemu operacyjnego", + "description": "Maksymalna liczba systemów operacyjnych do wyświetlenia", "option": { - "3": "", - "5": "", - "10": "", - "all": "" + "3": "Top 3", + "5": "Top 5", + "10": "Top 10", + "all": "Wszystkie" } }, "showOsVersion": { - "label": "", - "description": "" + "label": "Pokaż wersję systemu operacyjnego", + "description": "Dodaj wersję systemu operacyjnego do każdej etykiety dystrybucji, jeśli jest dostępna" }, "showComplianceHero": { - "label": "", - "description": "" + "label": "Pokaż wskaźnik zgodności", + "description": "Wyświetl pierścień zgodności pokazujący procent aktualnych hostów" }, "osDisplayMode": { - "label": "", - "description": "", + "label": "Tryb wyświetlania systemu operacyjnego", + "description": "Wybierz sposób wyświetlania dystrybucji systemu operacyjnego", "option": { - "bars": "", - "donut": "" + "bars": "Paski poziome", + "donut": "Wykres pierścieniowy" } } }, "error": { - "internalServerError": "" + "internalServerError": "Nie udało się pobrać danych PatchMon" } }, "bazarr": { - "name": "", - "description": "", - "episodes": "", - "movies": "", - "providers": "", - "status": "", + "name": "Bazarr", + "description": "Przegląd brakujących napisów i stanu zdrowia z instancji Bazarr", + "episodes": "Brakujące odcinki", + "movies": "Brakujące filmy", + "providers": "Problemy dostawców", + "status": "Problemy ze stanem", "option": { "showMissingEpisodes": { - "label": "", - "description": "" + "label": "Pokaż brakujące odcinki", + "description": "Wyświetla liczbę odcinków z brakującymi napisami" }, "showMissingMovies": { - "label": "", - "description": "" + "label": "Pokaż brakujące filmy", + "description": "Wyświetla liczbę filmów z brakującymi napisami" }, "showProviderIssues": { - "label": "", - "description": "" + "label": "Pokaż problemy dostawców", + "description": "Wyświetla liczbę dostawców napisów z problemami" }, "showHealthIssues": { - "label": "", - "description": "" + "label": "Pokaż problemy ze stanem", + "description": "Wyświetla liczbę problemów ze stanem Bazarr" } }, "error": { - "internalServerError": "" + "internalServerError": "Nie udało się pobrać danych z Bazarr" } }, "immich-serverStats": { @@ -3017,7 +3043,7 @@ }, "immich-albumCarousel": { "name": "Album Immich", - "allPhotos": "", + "allPhotos": "Wszystkie zdjęcia", "option": { "albumId": { "label": "ID albumu", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Limit elementów na integrację", "description": "To ograniczy liczbę wyświetlanych elementów dla każdej integracji, a nie globalnie." + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Wybierz kolumny w elementach", - "noCommunications": "Nie można załadować danych z integracji" + "noCommunications": "Nie można załadować danych z integracji", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Bieżący indeks w ramach klienta" }, "id": { - "columnTitle": "ID" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "Integracja" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Czas zakończenia", - "detailsTitle": "Czas od/do zakończenia" + "detailsTitle": "Czas od/do zakończenia", + "eta": "" }, "type": { "columnTitle": "Typ", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Wskaźnik globalny" + "globalRatio": "Wskaźnik globalny", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Wydania mediów", @@ -3223,10 +3276,10 @@ "label": "Otwieraj linki w nowej karcie" }, "statusFilter": { - "label": "" + "label": "Statusy do wyświetlenia" }, "recentDays": { - "label": "" + "label": "Pokaż tylko ostatnie żądania" } }, "pending": { @@ -3335,33 +3388,33 @@ } }, "mediaMissing": { - "name": "", - "description": "", + "name": "Brakujące i oczekujące media", + "description": "Pokazuje brakujące i oczekujące filmy i odcinki z Radarr i Sonarr", "option": { "showMissing": { - "label": "" + "label": "Pokaż brakujące elementy" }, "showQueued": { - "label": "" + "label": "Pokaż oczekujące elementy" }, "pageSize": { - "label": "" + "label": "Elementów na stronę" } }, "tab": { - "missing": "", - "queued": "" + "missing": "Brakujące", + "queued": "Oczekujące" }, "type": { - "movie": "", - "episode": "" + "movie": "Film", + "episode": "Odcinek" }, "empty": { - "missing": "", - "queued": "", - "noTabsEnabled": "" + "missing": "Brak brakujących elementów", + "queued": "Brak oczekujących elementów", + "noTabsEnabled": "Włącz co najmniej jedną kartę w ustawieniach widżetu" }, - "timeLeft": "" + "timeLeft": "Pozostały czas" }, "rssFeed": { "name": "Kanały RSS", @@ -3608,7 +3661,7 @@ "noItems": "Brak powiadomień do wyświetlenia.", "option": { "hideLogos": { - "label": "" + "label": "Ukryj loga" } } }, @@ -3692,37 +3745,37 @@ } }, "traefik": { - "name": "", - "description": "", + "name": "Traefik", + "description": "Przegląd routerów, usług, middleware i punktów wejścia Traefik", "option": { "showTcp": { - "label": "" + "label": "Pokaż TCP" }, "showUdp": { - "label": "" + "label": "Pokaż UDP" }, "showEntryPoints": { - "label": "" + "label": "Pokaż punkty wejścia" } }, - "instances": "", - "versionUnknown": "", + "instances": "Instancje Traefik", + "versionUnknown": "Wersja nieznana", "summary": { - "routers": "", - "entryPoints": "" + "routers": "Routery", + "entryPoints": "Punkty wejścia" }, "resource": { - "routers": "", - "services": "", - "middlewares": "" + "routers": "Routery", + "services": "Usługi", + "middlewares": "Middleware" }, "status": { - "healthy": "", - "errors": "", - "warnings": "" + "healthy": "Dobry", + "errors": "{count, plural, one {# błąd} few {# błędy} many {# błędów} other {# błędów}}", + "warnings": "{count, plural, one {# ostrzeżenie} few {# ostrzeżenia} many {# ostrzeżeń} other {# ostrzeżeń}}" }, "error": { - "internalServerError": "" + "internalServerError": "Nie udało się pobrać danych Traefik" } }, "audioStats": { @@ -3741,18 +3794,6 @@ "label": "Pokaż utwory", "description": "Pokaż całkowitą liczbę utworów w twojej bibliotece muzycznej (Navidrome)" }, - "showNowPlaying": { - "label": "Pokaż teraz odtwarzane", - "description": "Pokaż aktualnie odtwarzane utwory (Navidrome)" - }, - "showNowPlayingList": { - "label": "Pokaż listę teraz odtwarzanych", - "description": "Pokaż poszczególne utwory zamiast tylko aktywnej liczby strumieni (Navidrome)" - }, - "maxNowPlayingItems": { - "label": "Maksymalna ilość teraz odtwarzanych elementów", - "description": "Maksymalna liczba elementów wyświetlanych na liście teraz odtwarzanych (Navidrome)" - }, "showLibraryCount": { "label": "Pokaż ilość bibliotek", "description": "Pokaż liczbę bibliotek na twojej instancji (Audiobookshelf)" @@ -3786,8 +3827,6 @@ "podcasts": "Podcasty", "listeningTime": "Czas Słuchania", "activeSessions": "Aktywne Sesje", - "nowPlaying": "Teraz Odtwarzane", - "nowPlayingCount": "{count, plural, one {# stream} other {# streams}}", "error": { "internalServerError": "Nie udało się pobrać danych audio stats" } @@ -3853,9 +3892,9 @@ "label": "Pokaż pasek wykorzystania w tle" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "Widoczne woluminy pamięci", + "description": "Dostępne tylko gdy wszystkie wybrane integracje to Synology. Pozostaw puste, aby wyświetlić wszystkie wykryte woluminy pamięci.", + "placeholder": "Wybierz woluminy pamięci" } }, "status": { @@ -3927,11 +3966,19 @@ }, "showAgent": { "label": "Pokaż wersję agenta" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "noRecords": "Nie znaleziono systemów", "error": { - "internalServerError": "Nie można połączyć się z Beszel. Sprawdź ustawienia integracji." + "internalServerError": "Nie można połączyć się z Beszel. Sprawdź ustawienia integracji.", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { "system": "System", @@ -4101,9 +4148,9 @@ "write": "Zapis" }, "storage": { - "title": "", - "subtitle": "", - "series": "" + "title": "Pamięć", + "subtitle": "Użycie dysku według systemu plików", + "series": "Używane" }, "network": { "title": "Przepustowość", @@ -5238,7 +5285,7 @@ "table": { "updated": "Zaktualizowano {when}", "refresh": { - "lastUpdated": "" + "lastUpdated": "Ostatnie odświeżenie {when}" }, "search": "Szukaj wśród {count} kontenerów", "selected": "Wybrano {selectCount} z {totalCount} kontenerów", @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Usuń", + "confirm": "", "notification": { "success": { "title": "Usunięto kontenery", @@ -5969,10 +6017,10 @@ } }, "enableRightClickOnWidgets": { - "label": "", + "label": "Włącz prawe kliknięcie na widżetach", "children": { "detail": { - "title": "" + "title": "Włącz prawe kliknięcie na widżetach" } } }, diff --git a/packages/translation/src/lang/pt-br.json b/packages/translation/src/lang/pt-br.json index b907d0a43..d96857250 100644 --- a/packages/translation/src/lang/pt-br.json +++ b/packages/translation/src/lang/pt-br.json @@ -719,7 +719,7 @@ "removeItem": "Remover item", "addBar": "Adicionar barra", "duplicate": "Duplicar", - "copyAiPrompt": "", + "copyAiPrompt": "Copiar prompt de IA", "enable": "Habilitado", "disable": "Desabilitado", "menu": "Ações" @@ -730,14 +730,14 @@ "iconUrl": "URL do ícone", "url": "URL", "authType": "Tipo de Autenticação", - "headerName": "", + "headerName": "Nome do parâmetro de cabeçalho/consulta", "method": "Método", "requestBody": "Corpo da requisição", - "displayType": "", + "displayType": "Tipo de exibição", "jsonPath": "Caminho JSON", "jsonPathHint": "Usar sintaxe JSONPath para extrair valores, por exemplo, $.data.temperature ou $.items[0].name", - "label": "", - "unit": "", + "label": "Rótulo", + "unit": "Unidade", "mappings": "Mapeamentos", "tablePath": "Caminho Array JSON", "tablePathHint": "Caminho para o array na resposta, por exemplo, $.data.items", @@ -752,15 +752,15 @@ "showPercentage": "Mostrar porcentagem", "barSize": "Tamanho da barra", "goodValues": "Valores bons (separados por vírgula)", - "dotSize": "", + "dotSize": "Tamanho do ponto", "valueSize": "Tamanho do valor", - "labelPosition": "", + "labelPosition": "Posição do rótulo", "kvLayout": "Layout", "striped": "Linhas Listradas", "compact": "Modo Compacto", "maxHeight": "Altura máxima (px)", "color": "Cor", - "buttonLabel": "", + "buttonLabel": "Rótulo do botão", "buttonColor": "Cor do botão", "confirmText": "Texto de confirmação", "confirmTextHint": "Se definido, um diálogo de confirmação irá aparecer antes de executar a solicitação", @@ -774,24 +774,24 @@ }, "placeholder": { "exampleLabel": "Temperatura da CPU", - "exampleLabelShort": "", + "exampleLabelShort": "Temp CPU", "exampleHeader": "Nome", - "exampleUnit": "", + "exampleUnit": "°C", "iconUrl": "https://...", "url": "https://api.exemplo.com/br/api/v1/status", - "headerName": "", - "jsonPath": "", - "tablePath": "", - "columnJsonPath": "", - "valuePath": "", - "maxPath": "", - "goodValues": "", - "color": "" + "headerName": "X-API-Key", + "jsonPath": "$.data.value", + "tablePath": "$.data.items", + "columnJsonPath": "$.nome", + "valuePath": "$.data.used", + "maxPath": "$.data.total", + "goodValues": "online, true, up", + "color": "azul" }, "cardStyleOption": { - "filled": "", - "outline": "", - "subtle": "" + "filled": "Preenchido", + "outline": "Contorno", + "subtle": "Sutil" }, "layoutOption": { "list": "Lista", @@ -813,52 +813,52 @@ "display": "Configurações de tela" }, "displayTypeDescription": { - "singleValue": "", - "keyValue": "", - "table": "", + "singleValue": "Exibir um valor extraído com rótulo e unidade", + "keyValue": "Exibir vários valores rotulados lado a lado", + "table": "Exibir linhas de dados em formato de tabela", "statGrid": "Estatísticas coloridas em uma grade — como Pi-Hole ou Widgets Rápidos", "progressBars": "Barras de progresso mostrando uso ou conclusão — para disco, memória, quotas", "statusIndicator": "Pontos de status coloridos mostrando estados online/offline ou de saúde", - "countGrid": "", + "countGrid": "Contadores compactos de número + rótulo em uma grade apertada", "raw": "Saída JSON impressa para depuração", "actionButton": "Um botão que aciona uma solicitação quando clicado", "customJsx": "Layout JSX personalizado usando componentes Mantine na lista branca com ligação completa de dados de API" }, "method": { - "GET": "", - "POST": "", - "PUT": "", - "DELETE": "", - "PATCH": "" + "GET": "GET", + "POST": "POST", + "PUT": "PUT", + "DELETE": "DELETE", + "PATCH": "PATCH" }, "authType": { - "none": "", - "bearer": "", - "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "none": "Nenhum", + "bearer": "Token Bearer", + "basic": "Autenticação Básica", + "apiKeyHeader": "Chave API (Cabeçalho)", + "apiKeyQuery": "Chave API (Consulta)" }, "displayType": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Valor Único", + "keyValue": "Chave-Valor", + "table": "Tabela", + "statGrid": "Grade de Estatísticas", + "progressBars": "Barras de Progresso", + "statusIndicator": "Indicador de Status", + "countGrid": "Grade de Contagem", + "raw": "JSON Bruto", + "actionButton": "Botão de Ação", + "customJsx": "JSX personalizado" }, "secret": { - "apiKey": "", + "apiKey": "Chave de API / Token", "username": "Usuário", "password": "Senha", - "savedPlaceholder": "" + "savedPlaceholder": "••••••• (salvo, deixe em branco para manter)" }, "preview": { "title": "Pré-visualizar", - "test": "", + "test": "Testar", "hint": "Clique em Testar para visualizar a resposta da API com sua configuração atual.", "rawResponse": "Resposta JSON Bruta" }, @@ -867,7 +867,7 @@ "updated": "Widget \"{name}atualizado com sucesso.", "deleted": "Widget \"{name}excluído.", "imported": "Widget importado com sucesso.", - "aiPromptCopied": "", + "aiPromptCopied": "Prompt de IA copiado para a área de transferência", "aiPromptDescription": "Copie um prompt pré-construído para colar qualquer chatbot de AI (ChatGPT, Claude, Gemini...). Ele inclui o esquema completo de widget e a sua resposta de API para que a AI possa gerar uma configuração JSON pronta para importar para você.", "aiPromptCopy": "Copiar para área de transferência", "aiPromptNoResponse": "Dica: Execute um teste primeiro para incluir a sua API de resposta no prompt para melhores resultados.", @@ -890,7 +890,7 @@ "display": "Exibição" }, "widget": { - "disabled": "" + "disabled": "Este widget está desabilitado" } }, "integration": { @@ -1011,21 +1011,21 @@ "miscellaneous": "Diversos", "smartHomeServer": "Casa Inteligente", "indexerManager": "Indexador", - "healthMonitoring": "", + "healthMonitoring": "Saúde", "search": "Busca", "mediaTranscoding": "Transcodificação", "networkController": "Rede", "releasesProvider": "Lançamentos", "notifications": "Notificações", "firewall": "Firewall", - "timetable": "", + "timetable": "Grade horária", "photoService": "Fotos", "documents": "Documentos", "notes": "Anotações", "mediaMonitoring": "Monitoramento", "speedtest": "Teste de Velocidade", "analytics": "Análises", - "vpn": "", + "vpn": "VPN", "mediaLibrary": "Biblioteca de mídia", "uptimeMonitoring": "Monitoramento do Uptime" }, @@ -1311,7 +1311,7 @@ }, "slug": { "label": "Slug página de status", - "newLabel": "" + "newLabel": "Novo slug da página de status" } } }, @@ -1321,22 +1321,22 @@ "full": "Acesso completo à integração" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Servidor auto-hospedado de audiolivros e podcasts" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Servidor auto-hospedado de streaming de música com compatibilidade com a API Subsonic" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Monitoramento de tempo de atividade auto-hospedado com páginas de status públicas", "secret": { "slug": { - "description": "" + "description": "O slug da sua página de status pública. O padrão é \"default\" se não definido." }, "apiKey": { - "description": "" + "description": "Chave de API opcional para acesso autenticado a /metrics" } } }, @@ -1345,7 +1345,7 @@ "description": "" }, "paperlessNgx": { - "name": "", + "name": "Paperless-ngx", "description": "Sistema de gerenciamento de documentos para arquivamento e organização de documentos digitalizados" }, "patchmon": { @@ -1438,9 +1438,9 @@ "iconPicker": { "label": "URL do ícone", "header": "Digite o nome ou os objetos para filtrar os ícones... O Homarr pesquisará {countIcons} ícones para você.", - "headerLoading": "", - "noResults": "", - "error": "" + "headerLoading": "Digite para pesquisar ícones…", + "noResults": "Nenhum ícone corresponde a \"{search}\".", + "error": "Não foi possível carregar os ícones." }, "colorScheme": { "options": { @@ -1691,11 +1691,11 @@ }, "widget": { "integrationSelect": { - "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "configureIntegrationFirst": "Conecte uma integração primeiro", + "loading": "Carregando...", + "placeholder": "Selecionar uma opção", + "noResults": "Nenhum resultado encontrado", + "loadError": "Erro ao carregar opções" }, "app": { "name": "Aplicativo", @@ -1785,7 +1785,7 @@ } }, "archiveTeamWarrior": { - "name": "", + "name": "ArchiveTeam Warrior", "description": "Monitore o status do ArchiveTeam Warrior, projetos e trabalhos de arquivamento ativos.", "option": { "showBroadcastMessage": { @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Inverter ordenação" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "Erro ao obter as estatísticas dos contêineres" + "internalServerError": "Erro ao obter as estatísticas dos contêineres", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2468,9 +2479,9 @@ } }, "vpn": { - "name": "", - "description": "", - "serviceUnavailable": "", + "name": "VPN", + "description": "Visão geral das suas conexões VPN", + "serviceUnavailable": "VPN indisponível", "option": {} }, "ups": { @@ -2501,7 +2512,7 @@ "output": "Saída" }, "error": { - "internalServerError": "" + "internalServerError": "Falha ao buscar dados do UPS" } }, "tracearr": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Exibir apenas o que está sendo reproduzido", "description": "Desabilitar isso não funcionará para o Plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Reproduzindo agora", "user": "Usuário", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2760,46 +2786,46 @@ "paperlessNgx": { "name": "Paperless-ngx", "description": "Visão geral do seu arquivo de documentos Paperless-ngx", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "documentsTotal": "Total de documentos", + "documentsInbox": "Caixa de entrada", + "correspondents": "Correspondentes", + "tags": "Tags", + "documentTypes": "Tipos de documento", + "inboxRatio": "Proporção da caixa de entrada", + "inbox": "caixa de entrada", + "total": "total", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Mostrar proporção da caixa de entrada", + "description": "Exibir a proporção de documentos na caixa de entrada em relação ao total na seção de destaque" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Mostrar anel da caixa de entrada", + "description": "Exibir um anel de progresso junto com a proporção da caixa de entrada" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Mostrar total de documentos", + "description": "Mostrar o número total de documentos no seu arquivo" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Mostrar contagem da caixa de entrada", + "description": "Mostrar o número de documentos não processados na caixa de entrada" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Mostrar correspondentes", + "description": "Mostrar o número total de correspondentes" }, "showTags": { - "label": "", - "description": "" + "label": "Mostrar tags", + "description": "Mostrar o número total de tags" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Mostrar tipos de documento", + "description": "Mostrar o número total de tipos de documento" } }, "error": { - "internalServerError": "" + "internalServerError": "Falha ao buscar dados do Paperless-ngx" } }, "patchmon": { @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Limitar itens por integração", "description": "Isso limitará o número de itens exibidos por integração, não globalmente" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Selecionar Colunas em Itens", - "noCommunications": "Não foi possível carregar dados da integração" + "noCommunications": "Não foi possível carregar dados da integração", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Índice atual no cliente" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { "columnTitle": "Integração" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Tempo de conclusão", - "detailsTitle": "Tempo desde/até a conclusão" + "detailsTitle": "Tempo desde/até a conclusão", + "eta": "" }, "type": { "columnTitle": "Tipo", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Proporção global" + "globalRatio": "Proporção global", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Lançamentos de mídias", @@ -3652,43 +3705,43 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Monitore estatísticas de tempo de atividade da sua página de status do Uptime Kuma", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Mostrar tempo de atividade médio", + "description": "Exibir a porcentagem combinada de tempo de atividade médio nas últimas 24 horas" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Mostrar anel de tempo de atividade", + "description": "Exibir um anel de progresso junto com o valor médio de tempo de atividade" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Mostrar total de monitores", + "description": "Exibir o número total de monitores configurados" }, "showUpCount": { - "label": "", - "description": "" + "label": "Mostrar contagem de ativos", + "description": "Exibir quantos monitores estão ativos no momento" }, "showDownCount": { - "label": "", - "description": "" + "label": "Mostrar contagem de inativos", + "description": "Exibir quantos monitores estão inativos no momento" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Mostrar contagem de pausados", + "description": "Exibir quantos monitores estão pausados no momento" } }, - "averageUptime": "", + "averageUptime": "Tempo de atividade médio (24h)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Total de monitores", + "upCount": "Ativo", + "downCount": "Inativo", + "pausedCount": "Pausado" }, "error": { - "internalServerError": "" + "internalServerError": "Falha ao buscar dados de tempo de atividade" } }, "traefik": { @@ -3726,70 +3779,56 @@ } }, "audioStats": { - "name": "", - "description": "", + "name": "Estatísticas de áudio", + "description": "Estatísticas de biblioteca e reprodução do Navidrome ou Audiobookshelf", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Mostrar artistas", + "description": "Mostrar o número total de artistas na sua biblioteca de música (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Mostrar álbuns", + "description": "Mostrar o número total de álbuns na sua biblioteca de música (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "Mostrar músicas", + "description": "Mostrar o número total de músicas na sua biblioteca de música (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Mostrar contagem de bibliotecas", + "description": "Mostrar o número de bibliotecas na sua instância (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Mostrar audiolivros", + "description": "Mostrar o número total de audiolivros em todas as bibliotecas (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Mostrar podcasts", + "description": "Mostrar o número total de podcasts em todas as bibliotecas (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "Mostrar tempo de audição", + "description": "Mostrar seu tempo total de audição (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "Mostrar sessões ativas", + "description": "Mostrar o número de sessões de reprodução ativas no momento (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "Modo compacto", + "description": "Usar um layout mais denso com blocos menores, ideal para widgets pequenos" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "Artistas", + "albums": "Álbuns", + "songs": "Músicas", + "libraryCount": "Bibliotecas", + "audiobooks": "Audiolivros", + "podcasts": "Podcasts", + "listeningTime": "Tempo de audição", + "activeSessions": "Sessões ativas", "error": { - "internalServerError": "" + "internalServerError": "Falha ao buscar dados de estatísticas de áudio" } }, "systemResources": { @@ -3863,242 +3902,250 @@ } }, "customApi": { - "name": "", - "description": "", + "name": "API personalizada", + "description": "Exibir dados de qualquer API externa com configuração personalizada.", "option": { "definitionId": { - "label": "" + "label": "ID de definição" }, "refreshInterval": { - "label": "", - "description": "" + "label": "Intervalo de atualização", + "description": "Com que frequência reobter dados da API (em segundos)" } }, - "noDefinition": "", - "definitionNotFound": "", - "noDisplayOutput": "", - "executeConfirm": "", - "executing": "", - "executeSuccess": "", - "executeFailed": "" + "noDefinition": "Nenhuma definição selecionada", + "definitionNotFound": "Definição do widget não encontrada. Ela pode ter sido excluída.", + "noDisplayOutput": "Nenhuma saída de exibição", + "executeConfirm": "Tem certeza de que deseja executar esta ação?", + "executing": "Executando...", + "executeSuccess": "Ação executada com sucesso", + "executeFailed": "Ação falhou. Verifique a configuração do widget." }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Sistemas Beszel (Tabela)", + "description": "Visualização em tabela de todos os sistemas monitorados pelo Beszel com colunas classificáveis e indicadores de status", "option": { "statusFilter": { - "label": "" + "label": "Filtro de status" }, "sortBy": { - "label": "" + "label": "Ordenar por" }, "sortDirection": { - "label": "" + "label": "Direção da ordenação" }, "showCpu": { - "label": "" + "label": "Mostrar CPU" }, "showMemory": { - "label": "" + "label": "Mostrar memória" }, "showDisk": { - "label": "" + "label": "Mostrar disco" }, "showGpu": { - "label": "" + "label": "Mostrar GPU" }, "showLoadAvg": { - "label": "" + "label": "Mostrar carga média" }, "showNet": { - "label": "" + "label": "Mostrar rede" }, "showTemp": { - "label": "" + "label": "Mostrar temperatura" }, "showBattery": { - "label": "" + "label": "Mostrar bateria" }, "showServices": { - "label": "" + "label": "Mostrar serviços" }, "showUptime": { - "label": "" + "label": "Mostrar tempo de atividade" }, "showAgent": { + "label": "Mostrar versão do agente" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Nenhum sistema encontrado", "error": { - "internalServerError": "" + "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações de integração.", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Sistema", + "cpu": "CPU", + "memory": "Memória", + "disk": "Disco", + "gpu": "GPU", + "loadAvg": "Carga média", + "net": "Rede", + "temp": "Temperatura", + "battery": "Bateria", + "services": "Serviços", + "uptime": "Tempo de atividade", + "agent": "Agente" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Sistemas Beszel (Grade)", + "description": "Visualização em grade de cartões de todos os sistemas monitorados pelo Beszel com métricas em tempo real", "option": { "statusFilter": { - "label": "" + "label": "Filtro de status" }, "showCpu": { - "label": "" + "label": "Mostrar CPU" }, "showMemory": { - "label": "" + "label": "Mostrar memória" }, "showDisk": { - "label": "" + "label": "Mostrar disco" }, "showGpu": { - "label": "" + "label": "Mostrar GPU" }, "showLoadAvg": { - "label": "" + "label": "Mostrar carga média" }, "showNet": { - "label": "" + "label": "Mostrar rede" }, "showTemp": { - "label": "" + "label": "Mostrar temperatura" }, "showBattery": { - "label": "" + "label": "Mostrar bateria" }, "showServices": { - "label": "" + "label": "Mostrar serviços" }, "showUptime": { - "label": "" + "label": "Mostrar tempo de atividade" }, "showAgent": { - "label": "" + "label": "Mostrar versão do agente" } }, "error": { - "internalServerError": "" + "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações de integração." }, "empty": { - "noSystems": "" + "noSystems": "Nenhum sistema encontrado" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Memória", + "disk": "Disco", + "gpu": "GPU", + "loadAvg": "Carga média", + "net": "Rede", + "temp": "Temperatura", + "battery": "Bateria", + "services": "Serviços", + "uptime": "Tempo de atividade", + "agent": "Agente" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Alertas Beszel", + "description": "Veja as configurações e o histórico de alertas do Beszel", "option": { "showHistory": { - "label": "" + "label": "Mostrar histórico de alertas" }, "maxHistoryItems": { - "label": "" + "label": "Máximo de itens no histórico" } }, - "empty": "", + "empty": "Nenhum alerta configurado", "error": { - "internalServerError": "" + "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações de integração." }, - "history": "", - "resolved": "", + "history": "Histórico", + "resolved": "Resolvido", "status": { - "triggered": "", - "ok": "" + "triggered": "Acionado", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Estatísticas do sistema Beszel", + "description": "Gráficos de série temporal para métricas de CPU, memória, disco, rede e contêineres Docker", "option": { "systemId": { - "label": "", - "description": "" + "label": "Sistema", + "description": "Selecione um sistema Beszel para exibir estatísticas" }, "timePeriod": { - "label": "" + "label": "Período de tempo" }, "showCpu": { - "label": "" + "label": "Mostrar gráfico de CPU" }, "showMemory": { - "label": "" + "label": "Mostrar gráfico de memória" }, "showDisk": { - "label": "" + "label": "Mostrar gráfico de disco" }, "showDiskIO": { - "label": "" + "label": "Mostrar gráfico de E/S de disco" }, "showNetwork": { - "label": "" + "label": "Mostrar gráfico de rede" }, "showDockerCpu": { - "label": "" + "label": "Mostrar gráfico de CPU do Docker" }, "showDockerMemory": { - "label": "" + "label": "Mostrar gráfico de memória do Docker" }, "showDockerNetwork": { - "label": "" + "label": "Mostrar gráfico de rede do Docker" } }, - "selectSystem": "", + "selectSystem": "Selecionar sistema", "empty": { - "noSystems": "" + "noSystems": "Nenhum sistema encontrado" }, "error": { - "internalServerError": "", - "liveConnectionFailed": "", - "switchToHistorical": "", - "systemNotFound": "" + "internalServerError": "Não foi possível conectar ao Beszel. Verifique as configurações de integração.", + "liveConnectionFailed": "Falha na conexão ao vivo. Sua instância Beszel pode não oferecer suporte a streaming em tempo real.", + "switchToHistorical": "Mudar para visualização histórica", + "systemNotFound": "Sistema selecionado não encontrado. Escolha um sistema diferente." }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "Uso da CPU", + "subtitle": "Utilização média da CPU em todo o sistema", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Uso da memória", + "subtitle": "Utilização precisa no momento registrado", + "series": "Usado", + "cache": "Cache/Buffers" }, "disk": { - "title": "", + "title": "Uso do disco", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "E/S de disco", + "subtitle": "Taxa de transferência do sistema de arquivos raiz", + "read": "Leitura", + "write": "Escrita" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Largura de banda", + "subtitle": "Tráfego de rede das interfaces públicas", + "sent": "Enviado", + "recv": "Recebido" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Uso de CPU do Docker", + "subtitle": "Utilização média da CPU dos contêineres" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Uso de memória do Docker", + "subtitle": "Uso de memória dos contêineres Docker" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "E/S de rede do Docker", + "subtitle": "Tráfego de rede dos contêineres Docker" } } } @@ -4498,7 +4545,7 @@ "text": "Não foi possível encontrar o recurso solicitado" }, "error": { - "title": "", + "title": "Não foi possível carregar esta página", "text": "", "digest": "" }, @@ -4508,7 +4555,7 @@ "boards": "Placas", "apps": "Aplicativos", "integrations": "Integrações", - "customWidgets": "", + "customWidgets": "Widgets Personalizados", "searchEngies": "Mecanismos de busca", "medias": "Mídias", "users": { @@ -4528,7 +4575,7 @@ "api": "API", "certificates": "Certificados", "tasks": "Tarefas", - "backup": "" + "backup": "Backup" } }, "settings": "Configurações", @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Primeiro dia da semana", "accessibility": "Acessibilidade", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Tours de integração", + "description": "Redefina os tours de integração para vê-los novamente na sua próxima visita à área de gerenciamento ou ao painel.", + "reset": "Redefinir tours de integração", "resetSuccess": { - "title": "", - "message": "" + "title": "Tours redefinidos", + "message": "Os tours de integração serão exibidos novamente na sua próxima visita" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Concluído", + "notStarted": "Não iniciado" }, "name": { - "management": "", - "dashboard": "" + "management": "Gerenciamento", + "dashboard": "Painel" } } } @@ -4984,213 +5031,213 @@ } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "IA / MCP", + "title": "Integração com IA", + "subtitle": "Servidor Model Context Protocol (MCP)", + "description": "Conecte assistentes de IA à sua instância do Homarr e controle todo o seu homelab por meio de linguagem natural. Pesquise e solicite mídia no Overseerr, gerencie contêineres Docker, alterne o Pi-hole, verifique a integridade do servidor, controle dispositivos do Home Assistant e muito mais — tudo do seu assistente de IA.", + "noApiKey": "Você precisa de uma chave de API para autenticar no servidor MCP.", + "createApiKeyButton": "Criar chave de API", "endpoint": { - "title": "" + "title": "Endpoint MCP" }, "authentication": { - "title": "", - "intro": "", + "title": "Autenticação", + "intro": "Você pode autenticar no seu servidor MCP usando uma chave de API ou OAuth. Ambos os métodos concedem o mesmo nível de acesso.", "apiKey": { - "title": "", - "description": "" + "title": "Chave de API (manual)", + "description": "Passe o cabeçalho ApiKey com sua chave de API completa na configuração do cliente MCP." }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (login via navegador)", + "description": "Clientes que suportam OAuth (como Claude Code, opencode ou Cursor) podem autenticar abrindo uma janela do navegador. Execute o comando de autenticação no seu cliente, faça login no Homarr pelo navegador e você estará conectado — uma chave de API é criada automaticamente.", + "hint": "Tokens OAuth aparecem como chaves de API regulares na aba de Autenticação. Você pode revogá-los a qualquer momento." }, - "permissions": "" + "permissions": "A chave de API determina as permissões disponíveis para a IA — ela opera com o mesmo nível de acesso do proprietário da chave." }, "clientConfig": { - "title": "", + "title": "Configuração do cliente", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "Recomendado", + "title": "HTTP Streamable", + "worksWith": "Funciona com: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", + "addToConfig": "Adicione ao arquivo de configuração do seu cliente MCP:", + "cursor": "{name}: {file} no seu projeto ou configurações globais", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} ou use {command}", + "vsCodeCopilot": "{name}: {file} nas configurações do workspace", + "replaceHint": "Substitua o placeholder pela chave de API que você recebeu ao criá-la." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (clientes legados via ponte mcp-remote)", + "description": "Para clientes que suportam apenas transporte stdio. Requer {dependency} (Node.js) instalado localmente:" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "Teste sua conexão", + "description": "Execute isso no seu terminal para verificar se o endpoint está acessível e sua chave de API funciona:", + "hint": "Uma resposta bem-sucedida retorna as capacidades do servidor MCP. Se você vir um erro, verifique a resposta JSON para obter dicas." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "Ferramentas disponíveis", + "description": "{count} ferramentas disponíveis. Expanda uma categoria para ver as ferramentas individuais e suas descrições.", + "columnType": "Tipo", + "columnName": "Ferramenta", + "columnDescription": "Descrição" }, "troubleshooting": { - "title": "", + "title": "Solução de problemas", "missingHeader": { - "title": "", - "description": "" + "title": "\"Cabeçalho ApiKey ausente\"", + "description": "Seu cliente não está enviando o cabeçalho {header}. Verifique se a seção {section} em sua configuração MCP está correta. Alguns clientes exigem reinicialização após alterações de configuração." }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"Formato inválido de ApiKey\"", + "description": "Certifique-se de copiar a chave API completa, não apenas parte dela." }, "invalidKey": { - "title": "", - "description": "" + "title": "\"Chave API inválida\"", + "description": "O ID da chave não foi encontrado ou o token está incorreto. As chaves API só podem ser visualizadas uma vez ao serem criadas. Se você a perdeu, exclua a chave antiga e crie uma nova." }, "connectionRefused": { - "title": "", - "description": "" + "title": "Conexão recusada / tempo limite", + "description": "Certifique-se de que a URL seja acessível a partir do seu cliente de IA. Se o Homarr estiver atrás de um proxy reverso ou em Docker, use a URL externa (não {localhost}). Verifique se a porta está correta (padrão: 7575 para Docker)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "Ferramentas não estão aparecendo", + "description": "Algumas ferramentas exigem integrações específicas configuradas (por exemplo, Docker, Overseerr). A lista de ferramentas depende do que está disponível em sua instância do Homarr." } }, - "copy": "", + "copy": "Copiar", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "Instalar em um clique", + "subtitle": "Usa OAuth — autentique-se no navegador no primeiro uso", + "vsCode": "Instalar no VS Code", + "cursor": "Instalar no Cursor", + "copyUrl": "Copiar URL MCP", + "copied": "Copiado!", + "copyHint": "Para ChatGPT, Claude Code ou qualquer cliente MCP", + "manualConfig": "Configuração manual" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Backup completo do banco de dados", + "metaTitle": "Backup e restauração", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Exportar banco de dados", + "description": "Baixe um backup completo do seu banco de dados SQLite, incluindo todas as configurações, usuários, quadros e segredos de integração criptografados. O backup é empacotado como um arquivo ZIP com a chave de criptografia e metadados.", + "button": "Baixar backup", + "error": "Falha na exportação", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Exportação de dados sensíveis", + "warningTitle": "Esta exportação contém todo o seu banco de dados.", + "warningBody": "O backup inclui todos os usuários, segredos de integração (criptografados), chaves de API, configurações de quadro e dados de aplicativos. Armazene o arquivo exportado com segurança e não o compartilhe.", + "typePrompt": "Digite \"{phrase}\" para continuar", + "submit": "Exportar banco de dados", + "cancel": "Cancelar" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Restaurar banco de dados", + "description": "Envie um backup ZIP exportado anteriormente para restaurar seu banco de dados. Isso substituirá todo o seu banco de dados. Se o backup foi criado com uma chave de criptografia diferente, os segredos serão automaticamente recriptografados.", + "warning": "Restaurar um backup substituirá completamente seu banco de dados atual e reiniciará o aplicativo. Esta ação não pode ser desfeita.", "dropzone": { - "title": "", - "description": "" + "title": "Solte seu arquivo ZIP de backup aqui ou clique para navegar", + "description": "Somente arquivos .zip de um backup SQLite do Homarr são aceitos" }, - "changeFile": "", - "button": "", + "changeFile": "Alterar arquivo", + "button": "Restaurar banco de dados", "success": { - "title": "", - "message": "" + "title": "Restauração concluída", + "message": "O banco de dados foi restaurado com sucesso. O aplicativo está reiniciando..." }, - "error": "" + "error": "Falha na importação" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Conteúdo do backup", + "exported": "Exportado em {date}", + "loading": "Analisando arquivo de backup...", + "errorTitle": "Erro de visualização", + "entity": "Entidade", + "count": "Contagem", + "boards": "Quadros", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Quadros", + "user": "Usuários", + "app": "Aplicativos", + "integration": "Integrações", + "item": "Widgets", + "media": "Mídia", + "search_engine": "Mecanismos de busca" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Falha ao analisar arquivo de backup", + "invalidMissingMetadata": "Backup inválido: metadata.json ausente", + "invalidMissingDb": "Backup inválido: db.sqlite ausente" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Solte seu arquivo ZIP de backup aqui", + "description": "Aceita arquivos .zip de um backup SQLite do Homarr (máx. 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analisando backup...", + "changeFile": "Alterar arquivo", + "continueToRestore": "Continuar para restauração", + "tryAgain": "Tente novamente", + "analysisError": "Erro de análise", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Conteúdo do backup", + "exported": "Exportado em {date}", + "entity": "Entidade", + "count": "Contagem", + "boards": "Quadros", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Quadros", + "user": "Usuários", + "app": "Aplicativos", + "integration": "Integrações", + "item": "Widgets", + "media": "Mídia", + "search_engine": "Mecanismos de busca" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migração aplicada", + "migrationsAppliedPlural": "{count} migrações aplicadas", + "migrationsOlderVersion": "Este backup era de uma versão mais antiga do Homarr. {count} migração de esquema foi aplicada para atualizá-lo.", + "migrationsOlderVersionPlural": "Este backup era de uma versão mais antiga do Homarr. {count} migrações de esquema foram aplicadas para atualizá-lo.", + "migrationsUpToDate": "Esquema do banco de dados está atualizado ({count} migrações aplicadas)", + "upToDate": "Atualizado", + "migrationsPending": "{count, plural, one {# pendente} other {# pendentes}}" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Aplicando migrações ({current}/{total})", + "migrationLabel": "Migração {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Ação destrutiva", + "warningTitle": "Isso substituirá permanentemente todo o seu banco de dados.", + "warningBody": "Todos os quadros, usuários, aplicativos, integrações, configurações e sessões atuais serão perdidos. Esta ação não pode ser desfeita. O aplicativo será reiniciado após a restauração.", + "typePrompt": "Digite \"{phrase}\" para continuar", + "cancel": "Cancelar", + "submit": "Restaurar banco de dados" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Restaurando banco de dados...", + "extracting": "Extraindo arquivo de backup", + "migrating": "Aplicando migrações do banco de dados", + "encrypting": "Recriptografando segredos de integração", + "swapping": "Substituindo arquivo do banco de dados", + "restarting": "Reiniciando servidor" }, "complete": { - "title": "", - "message": "" + "title": "Restauração concluída", + "message": "O banco de dados foi restaurado com sucesso. O servidor está reiniciando — atualize a página em alguns segundos." }, "failed": { - "title": "" + "title": "Falha na restauração" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Backup inválido: metadata.json ausente", + "invalidMissingDb": "Backup inválido: db.sqlite ausente", + "analyzeError": "Falha ao analisar backup" } } }, @@ -5243,8 +5290,8 @@ "search": "Buscar {count} contêineres", "selected": "{selectCount} de {totalCount} contêineres selecionados", "footer": "Total de contêineres: {count}", - "totalCpu": "", - "totalMemory": "" + "totalCpu": "CPU total: {cpu}%", + "totalMemory": "Memória total: {memory}" }, "field": { "name": { @@ -5283,9 +5330,9 @@ "action": { "title": "Ações", "logs": { - "label": "", + "label": "Exibir logs", "page": { - "title": "" + "title": "Logs de {name}" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Excluir", + "confirm": "", "notification": { "success": { "title": "Contêineres removidos", @@ -5681,14 +5729,14 @@ } }, "custom-widgets": { - "label": "", + "label": "Widgets personalizados", "new": { - "label": "" + "label": "Novo" }, "edit": { - "label": "", + "label": "Editar", "flow": { - "label": "" + "label": "Fluxo" } } }, @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "Registros" } }, "kubernetes": { @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Preferências", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Selecione uma preferência para alterar", + "backHint": "Pressione Backspace ou use o botão voltar para retornar", + "backAction": "Voltar" } }, "notification": { "error": { - "message": "" + "message": "Não foi possível atualizar a preferência" } }, "option": { "preferences": { - "label": "" + "label": "Abrir preferências" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Habilitado", + "disabled": "Desabilitado" }, "board": { - "none": "", - "unavailable": "" + "none": "Nenhum", + "unavailable": "Selecionado atualmente (indisponível)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Nenhum", + "unavailable": "Selecionado atualmente (indisponível)" }, "colorScheme": { - "label": "", + "label": "Esquema de cores", "children": { "detail": { - "title": "" + "title": "Selecione seu esquema de cores" } } }, "locale": { - "label": "", + "label": "Idioma", "children": { "detail": { - "title": "" + "title": "Selecione seu idioma preferido" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Mecanismo de pesquisa padrão", "children": { "detail": { - "title": "" + "title": "Selecione seu mecanismo de pesquisa padrão" } } }, "openSearchInNewTab": { - "label": "", + "label": "Abrir resultados da busca em uma nova guia", "children": { "detail": { - "title": "" + "title": "Abrir resultados da busca em uma nova guia" } } }, "ddgBangs": { - "label": "", + "label": "Ativar bangs do DuckDuckGo", "children": { "detail": { - "title": "" + "title": "Ativar bangs do DuckDuckGo" } } }, "firstDayOfWeek": { - "label": "", + "label": "Primeiro dia da semana", "children": { "detail": { - "title": "" + "title": "Selecione o primeiro dia da semana" } } }, "homeBoardId": { - "label": "", + "label": "Quadro inicial", "children": { "detail": { - "title": "" + "title": "Selecione seu quadro inicial" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Quadro inicial para dispositivos móveis", "children": { "detail": { - "title": "" + "title": "Selecione seu quadro inicial para dispositivos móveis" } } }, "pingIconsEnabled": { - "label": "", + "label": "Usar ícones para pings", "children": { "detail": { - "title": "" + "title": "Usar ícones para pings" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Abrir página de preferências completa" } } } } }, "media": { - "help": "", + "help": "Pesquisar por filmes ou séries para solicitar", "requestMovie": "Solicitar filme", "requestSeries": "Solicitar série", "openIn": "Abrir em {kind}", "group": { - "title": "" + "title": "Filmes e séries" }, "action": { "search": { - "label": "", - "description": "", + "label": "Pesquisar por filmes ou séries", + "description": "Comece a digitar para pesquisar suas integrações de solicitação de mídia", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Adicione uma integração Overseerr, Jellyseerr ou Seerr para habilitar a busca de mídia.", + "scoped": "Este widget não possui uma integração de solicitação de mídia acessível." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Disponível", + "partiallyAvailable": "Parcial", + "processing": "Processando", + "requested": "Solicitado", + "pending": "Solicitado" } }, "external": { @@ -6284,10 +6332,10 @@ "header": { "season": "Temporada", "episodes": "Episódios", - "status": "" + "status": "Status" }, "status": { - "requested": "" + "requested": "Solicitado" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Leia a documentação", + "next": "Próximo", + "prev": "Voltar", + "done": "Concluído", + "skip": "Pular tour", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Bem-vindo ao Homarr!", + "description": "Este é o seu centro de controle. A partir daqui você gerencia quadros, aplicativos, integrações, usuários e configurações do servidor. Vamos fazer um tour por cada seção." }, "boardsList": { - "title": "", - "description": "" + "title": "Seus quadros", + "description": "Aqui estão todos os seus painéis. Cada quadro tem seu próprio layout, plano de fundo e configurações de acesso. Você pode ver quem criou cada um e se é público ou privado." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Criar um quadro", + "description": "Clique aqui para criar um novo painel ou importar um de uma instalação anterior do Homarr. Cada quadro recebe sua própria URL que você pode compartilhar." }, "appsList": { - "title": "", - "description": "" + "title": "Seus aplicativos", + "description": "Estes são todos os aplicativos que você adicionou — links para seus serviços auto-hospedados. Cada aplicativo tem um ícone, verificação de integridade opcional e um selo de status no painel." }, "appsCreate": { - "title": "", - "description": "" + "title": "Adicionar um aplicativo", + "description": "Registre um novo serviço aqui. Dê um nome, URL e ícone — ele aparecerá como um bloco nos seus quadros com monitoramento de status ao vivo." }, "integrationsList": { - "title": "", - "description": "" + "title": "Suas integrações", + "description": "Estes são os serviços conectados ao Homarr — Sonarr, Radarr, Plex, Jellyfin e mais de 50 outros. Todas as credenciais são criptografadas em repouso." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Adicionar uma integração", + "description": "Conecte um novo serviço aqui. Escolha o tipo, insira a URL e a chave de API — o Homarr valida a conexão antes de salvar." }, "usersList": { - "title": "", - "description": "" + "title": "Seus usuários", + "description": "Veja todos que têm acesso. Organize os usuários em grupos e controle quem pode visualizar ou editar cada quadro." }, "usersCreate": { - "title": "", - "description": "" + "title": "Criar um usuário", + "description": "Adicione uma nova conta de usuário aqui. Você também pode usar links de convite para facilitar a integração. Esse é o tour — você está pronto!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Este é o seu quadro", + "description": "Um painel de arrastar e soltar onde você organiza aplicativos e widgets. Pressione Ctrl+K a qualquer momento para pesquisar por aplicativos, quadros e ações." }, "editMode": { - "title": "", - "description": "" + "title": "Modo de edição", + "description": "Clique aqui para entrar no modo de edição. Você pode então adicionar widgets, aplicativos e seções — arraste para reposicionar, redimensione com a alça do canto. Clique novamente para salvar suas alterações." }, "settings": { - "title": "", - "description": "" + "title": "Configurações do quadro", + "description": "Altere o nome, colunas, plano de fundo, cores e quem pode acessar este quadro. Cada quadro pode ser público ou privado." }, "switcher": { - "title": "", - "description": "" + "title": "Alternar quadros", + "description": "Salte entre quadros. Crie painéis separados para diferentes propósitos — mídia, rede, por usuário ou o que você quiser." }, "userMenu": { - "title": "", - "description": "" + "title": "Seu perfil", + "description": "Altere seu esquema de cores, idioma, quadro inicial e preferências. Você também pode acessar a área de gerenciamento a partir daqui." } } } diff --git a/packages/translation/src/lang/pt.json b/packages/translation/src/lang/pt.json index 4bd892136..580ba60b3 100644 --- a/packages/translation/src/lang/pt.json +++ b/packages/translation/src/lang/pt.json @@ -8,9 +8,9 @@ "action": { "scratch": "", "importOldmarr": "", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Restaurar do backup SQLite", + "restoreSqliteDescription": "Carregar um backup completo do banco de dados SQLite de uma instância anterior do Homarr. Isso restaurará todos os painéis, usuários, aplicativos, integrações e configurações.", + "backToOptions": "← Voltar para opções de configuração" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "" }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Integrações", + "subtitle": "Selecione os serviços que você usa.", + "description": "Escolha as integrações que você gostaria de conectar. Vamos configurar seu painel com widgets correspondentes automaticamente.", "action": { - "continue": "", - "skip": "" + "continue": "Continuar", + "skip": "Pular por enquanto" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} de {total}", + "skip": "Pular esta integração", + "finishing": "Configurando seu painel...", "error": { - "title": "", - "message": "" + "title": "Falha na configuração", + "message": "Algo deu errado ao configurar seu painel. Por favor, tente novamente." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "Ajudantes de URL", + "description": "Esses ajudantes tentam adivinhar a URL para seus serviços. Se não funcionar, basta digitar o endereço manualmente." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "URL base", + "placeholder": "homelab.local ou 192.168.1.1", + "hint": "Digite seu domínio base ou IP para preencher automaticamente as URLs de integração", + "warning": "Definir sua URL base agora preencherá automaticamente todas as URLs de integração, economizando tempo durante a configuração", + "preview": "ex.: {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Subdomínio", + "hostPort": "Host:Porta" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker detectou {count} serviços", + "detectedBreakdown": "{integrations} integrações · {apps} apps", + "summary": "Homarr detectou {apps} aplicativos, {integrations} dos quais têm integrações integradas", + "appBadge": "Aplicativo", + "appSectionLabel": "Apps para adicionar ao painel ({count} selecionados)", + "scanning": "Escaneando Docker...", + "scanningDescription": "Procurando contêineres em execução no seu sistema" } }, "finish": { @@ -150,53 +150,53 @@ "backToStart": "" }, "user": { - "title": "", - "name": "", + "title": "Usuários", + "name": "Usuário", "page": { "login": { - "title": "", - "subtitle": "" + "title": "Acesse a sua conta", + "subtitle": "Bem-vindo(a) de volta! Por favor, insira suas credenciais" }, "invite": { - "title": "", - "subtitle": "", - "description": "" + "title": "Junte-se ao Homarr", + "subtitle": "Bem-vindo ao Homarr! Por favor, crie sua conta", + "description": "Você foi convidado(a) por {username}" }, "init": { - "title": "", - "subtitle": "" + "title": "Nova instalação do Homarr", + "subtitle": "Por favor, crie o usuário administrador inicial" } }, "field": { "email": { - "label": "", - "verified": "" + "label": "E-mail", + "verified": "Verificado" }, "username": { - "label": "" + "label": "Usuário" }, "password": { - "label": "", - "suggestionsTitle": "", + "label": "Senha", + "suggestionsTitle": "Sugestões de senha", "suggestion": { - "length": "", - "lowercase": "", - "uppercase": "", - "number": "", - "special": "" + "length": "Pelo menos 8 caracteres", + "lowercase": "Inclui letra minúscula", + "uppercase": "Inclui letra maiúscula", + "number": "Inclui número", + "special": "Inclui símbolo especial" } }, "passwordConfirm": { - "label": "" + "label": "Confirmar senha" }, "previousPassword": { - "label": "" + "label": "Senha anterior" }, "homeBoard": { - "label": "" + "label": "Quadro inicial" }, "pingIconsEnabled": { - "label": "" + "label": "Usar ícone para pings" }, "enableRightClickOnWidgets": { "label": "", @@ -209,63 +209,63 @@ "label": "" }, "ddgBangs": { - "label": "" + "label": "Ativar bangs do DuckDuckGo" } }, "error": { - "usernameTaken": "" + "usernameTaken": "Nome de usuário já em uso" }, "action": { "login": { - "label": "", - "labelWith": "", + "label": "“Login”", + "labelWith": "Iniciar sessão com {provider}", "notification": { "success": { - "title": "", - "message": "" + "title": "Início de sessão bem-sucedido", + "message": "Agora você está conectado" }, "error": { - "title": "", - "message": "" + "title": "Falha ao iniciar sessão", + "message": "Seu acesso falhou" } }, "forgotPassword": { - "label": "", - "description": "" + "label": "Esqueceu sua senha?", + "description": "Um administrador pode usar o seguinte comando para redefinir sua senha:" } }, "register": { - "label": "", + "label": "Criar conta", "notification": { "success": { - "title": "", - "message": "" + "title": "Conta criada", + "message": "Por favor, entre para continuar" }, "error": { - "title": "", - "message": "" + "title": "Criação da conta falhou", + "message": "Sua conta não pode ser criada" } } }, - "create": "", + "create": "Criar usuário", "changePassword": { - "label": "", + "label": "Alterar senha", "notification": { "success": { - "message": "" + "message": "Senha alterada com sucesso" }, "error": { - "message": "" + "message": "Não é possível alterar a senha" } } }, "changeHomeBoard": { "notification": { "success": { - "message": "" + "message": "Quadro inicial alterado com sucesso" }, "error": { - "message": "" + "message": "Não foi possível alterar o painel inicial" } } }, @@ -282,58 +282,58 @@ "changeFirstDayOfWeek": { "notification": { "success": { - "message": "" + "message": "Primeiro dia da semana alterado com sucesso" }, "error": { - "message": "" + "message": "Não foi possível alterar o primeiro dia da semana" } } }, "changePingIconsEnabled": { "notification": { "success": { - "message": "" + "message": "Ícones de ping alterados com sucesso" }, "error": { - "message": "" + "message": "Não foi possível alternar ícones de ping" } } }, "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "Bangs do DuckDuckGo alternados com sucesso" }, "error": { - "message": "" + "message": "Não foi possível alternar bangs do DuckDuckGo" } } }, "manageAvatar": { "changeImage": { - "label": "", + "label": "Alterar imagem", "notification": { "success": { - "message": "" + "message": "A imagem foi alterada com sucesso" }, "error": { - "message": "" + "message": "Não é possível alterar a imagem" }, "toLarge": { - "title": "", - "message": "" + "title": "A imagem é muito grande", + "message": "O tamanho máximo da imagem é {size}" } } }, "removeImage": { - "label": "", - "confirm": "", + "label": "Remover imagem", + "confirm": "Tem certeza de que deseja remover esta imagem?", "notification": { "success": { - "message": "" + "message": "Imagem removida com sucesso" }, "error": { - "message": "" + "message": "Não é possível remover a imagem" } } } @@ -341,34 +341,34 @@ "editProfile": { "notification": { "success": { - "message": "" + "message": "Perfil atualizado com sucesso" }, "error": { - "message": "" + "message": "Não foi possível atualizar o perfil" } } }, "delete": { - "label": "", - "description": "", - "confirm": "" + "label": "Excluir usuário permanentemente", + "description": "Exclui esse usuário incluindo suas preferências. Isso não removerá nenhum painel. O usuário não será notificado.", + "confirm": "Tem certeza que deseja excluir o usuário {username} e suas preferências?" }, "select": { - "label": "", - "notFound": "" + "label": "Selecionar usuário", + "notFound": "Nenhum usuário encontrado" }, "transfer": { - "label": "" + "label": "Selecionar novo proprietário" } } }, "group": { - "title": "", - "name": "", - "search": "", + "title": "Grupos", + "name": "Grupo", + "search": "Encontrar um grupo", "field": { - "name": "", - "members": "", + "name": "Nome", + "members": "Membros", "homeBoard": { "label": "", "description": "" @@ -380,198 +380,198 @@ }, "permission": { "admin": { - "title": "", + "title": "Administrador", "item": { "admin": { - "label": "", - "description": "" + "label": "Administrador", + "description": "Membros com essa permissão têm acesso total a todos os recursos e configurações" } } }, "app": { - "title": "", + "title": "Aplicativos", "item": { "create": { - "label": "", - "description": "" + "label": "Criar aplicativo", + "description": "Permitir que membros criem aplicativos" }, "use-all": { - "label": "", - "description": "" + "label": "Usar todas aplicações", + "description": "Permitir que os membros adicionem qualquer aplicativo aos seus painéis" }, "modify-all": { - "label": "", - "description": "" + "label": "Modificar todos os aplicativos", + "description": "Permitir que membros modifiquem todos os aplicativos" }, "full-all": { - "label": "", - "description": "" + "label": "Acesso completo a aplicativos", + "description": "Permitir que membros gerenciem, usem e excluam qualquer aplicativo" } } }, "board": { - "title": "", + "title": "Placas", "item": { "create": { - "label": "", - "description": "" + "label": "Criar painel", + "description": "Permitir que membros criem painéis" }, "view-all": { - "label": "", - "description": "" + "label": "Visualizar todos os painéis", + "description": "Permitir que membros visualizem todos os painéis" }, "modify-all": { - "label": "", - "description": "" + "label": "Modificar todos os painéis", + "description": "Permitir que membros modifiquem todos os painéis (Não inclui o controle de acesso e a zona de perigo)" }, "full-all": { - "label": "", - "description": "" + "label": "Acesso total ao painel", + "description": "Permitir que membros vejam, modifiquem e deletem todos os painéis (Incluindo o controle de acesso e a zona de perigo)" } } }, "integration": { - "title": "", + "title": "Integrações", "item": { "create": { - "label": "", - "description": "" + "label": "Criar integração", + "description": "Permitir que membros criem integrações" }, "use-all": { - "label": "", - "description": "" + "label": "Usar todas as integrações", + "description": "Permitir que membros adicionem qualquer integração aos seus painéis" }, "interact-all": { - "label": "", - "description": "" + "label": "Interagir com qualquer integração", + "description": "Permitir que membros interajam com qualquer integração" }, "full-all": { - "label": "", - "description": "" + "label": "Acesso completo à integração", + "description": "Permitir que membros gerenciem, usem e interajam com qualquer integração" } } }, "media": { - "title": "", + "title": "Mídias", "item": { "upload": { - "label": "", - "description": "" + "label": "Adicionar Mídia", + "description": "Permitir que membros adicionem mídias" }, "view-all": { - "label": "", - "description": "" + "label": "Visualizar todas as mídias", + "description": "Permitir que membros visualizem todas as mídias" }, "full-all": { - "label": "", - "description": "" + "label": "Acesso total às mídias", + "description": "Permitir que membros gerenciem e deletem qualquer mídia" } } }, "other": { - "title": "", + "title": "Outras", "item": { "view-logs": { - "label": "", - "description": "" + "label": "Exibir logs", + "description": "Permitir que os membros visualizem os registros" } } }, "search-engine": { - "title": "", + "title": "Mecanismos de busca", "item": { "create": { - "label": "", - "description": "" + "label": "Criar mecanismos de busca", + "description": "Permitir que os membros criem mecanismos de busca" }, "modify-all": { - "label": "", - "description": "" + "label": "Modificar todos os mecanismos de busca", + "description": "Permitir que membros modifiquem todos os mecanismos de busca" }, "full-all": { - "label": "", - "description": "" + "label": "Acesso total às ferramentas de busca", + "description": "Permitir que membros modifiquem e deletem qualquer ferramenta de busca" } } } }, "memberNotice": { - "mixed": "", - "external": "" + "mixed": "Alguns membros são de provedores externos e não podem ser gerenciados aqui", + "external": "Todos os membros são de provedores externos e não podem ser gerenciados aqui" }, "reservedNotice": { - "message": "" + "message": "Esse grupo é reservado para uso do sistema e restringe algumas ações. " }, "action": { "create": { - "label": "", + "label": "Novo grupo", "notification": { "success": { - "message": "" + "message": "O grupo foi criado com sucesso" }, "error": { - "message": "" + "message": "Não foi possível criar o grupo" } } }, "transfer": { - "label": "", - "description": "", - "confirm": "", + "label": "Transferir propriedade", + "description": "Transferir propriedade deste grupo para outro usuário.", + "confirm": "Tem certeza de que deseja transferir a propriedade do grupo {name} para {username}?", "notification": { "success": { - "message": "" + "message": "Grupo {group} transferido para {user} com sucesso" }, "error": { - "message": "" + "message": "Não foi possível transferir a propriedade" } } }, "addMember": { - "label": "" + "label": "Adicionar membro" }, "removeMember": { - "label": "", - "confirm": "" + "label": "Remover membro", + "confirm": "Você tem certeza que deseja remover {user} desse grupo?" }, "delete": { - "label": "", - "description": "", - "confirm": "", + "label": "Deletar grupo", + "description": "Uma vez deletado o grupo não há como reverter. Tenha cuidado.", + "confirm": "Você tem certeza que deseja deletar o grupo {name}?", "notification": { "success": { - "message": "" + "message": "Grupo {name} deletado com sucesso" }, "error": { - "message": "" + "message": "Não foi possível deletar o grupo {name}" } } }, "changePermissions": { "notification": { "success": { - "title": "", - "message": "" + "title": "Permissões salvas", + "message": "Permissões foram salvas com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Permissões não salvas", + "message": "As permissões não foram salvas" } } }, "update": { "notification": { "success": { - "message": "" + "message": "O grupo {name} foi salvo com sucesso" }, "error": { - "message": "" + "message": "Não é possível salvar o grupo {name}" } } }, "select": { - "label": "", - "notFound": "" + "label": "Selecionar grupo", + "notFound": "Nenhum grupo encontrado" }, "settings": { "board": { @@ -607,62 +607,62 @@ "search": "", "page": { "list": { - "title": "", + "title": "Aplicativos", "noResults": { - "title": "", - "action": "" + "title": "Ainda não há aplicativos disponíveis", + "action": "Crie seu primeiro aplicativo" } }, "create": { - "title": "", + "title": "Novo Aplicativo", "notification": { "success": { - "title": "", - "message": "" + "title": "Criação realizada com sucesso", + "message": "O aplicativo foi criado com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Criação falhou", + "message": "Não foi possível criar o aplicativo" } } }, "edit": { - "title": "", + "title": "Editar aplicativo", "notification": { "success": { - "title": "", - "message": "" + "title": "Alterações aplicadas com sucesso", + "message": "O aplicativo foi salvo com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Não foi possível aplicar as mudanças", + "message": "O aplicativo não pôde ser salvo" } } }, "delete": { - "title": "", - "message": "", + "title": "Deletar aplicativo", + "message": "Tem certeza que deseja excluir o aplicativo {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Exclusão realizada com sucesso", + "message": "O aplicativo foi excluído com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Exclusão falhou", + "message": "Não foi possível excluir o aplicativo" } } } }, "field": { "name": { - "label": "" + "label": "Nome" }, "description": { - "label": "" + "label": "Descrição" }, "url": { - "label": "" + "label": "Url" }, "useDifferentUrlForPing": { "checkbox": { @@ -673,8 +673,8 @@ }, "action": { "select": { - "label": "", - "notFound": "", + "label": "Selecionar aplicativo", + "notFound": "Nenhum aplicativo encontrado", "search": "", "noResults": "", "action": "", @@ -896,22 +896,22 @@ "integration": { "page": { "list": { - "title": "", - "search": "", + "title": "Integrações", + "search": "Buscar integrações", "noResults": { - "title": "" + "title": "Ainda não existem integrações" } }, "create": { - "title": "", + "title": "Nova integração {name}", "notification": { "success": { - "title": "", - "message": "" + "title": "Criação realizada com sucesso", + "message": "A integração foi criada com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Criação falhou", + "message": "A integração não pôde ser criada" } }, "app": { @@ -931,15 +931,15 @@ } }, "edit": { - "title": "", + "title": "Editar integração {name}", "notification": { "success": { - "title": "", - "message": "" + "title": "Alterações aplicadas com sucesso", + "message": "A integração foi salva com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Não foi possível aplicar as alterações", + "message": "A integração não pôde ser salva" } }, "app": { @@ -951,26 +951,26 @@ } }, "delete": { - "title": "", - "message": "", + "title": "Excluir integração", + "message": "Tem certeza que deseja excluir a integração {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Exclusão realizada com sucesso", + "message": "A integração foi excluída com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Exclusão falhou", + "message": "Não foi possível deletar a integração" } } } }, "field": { "name": { - "label": "" + "label": "Nome" }, "url": { - "label": "" + "label": "Url" }, "attemptSearchEngineCreation": { "label": "", @@ -987,52 +987,52 @@ "placeholder": "" }, "apiKeySettings": { - "label": "" + "label": "Obter chave da API" } }, "action": { - "create": "" + "create": "Nova integração" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widgets", + "noWidgets": "Nenhum widget", + "detected": "Detectado via Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Mídia", + "calendar": "Calendário", + "mediaSearch": "Pesquisar", + "mediaRelease": "Lançamentos", + "mediaRequest": "Solicitações", + "downloadClient": "Downloads", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Diversos", + "smartHomeServer": "Casa Inteligente", + "indexerManager": "Indexador", + "healthMonitoring": "Saúde", + "search": "Pesquisar", + "mediaTranscoding": "Transcodificação", + "networkController": "Rede", + "releasesProvider": "Lançamentos", + "notifications": "Notificações", + "firewall": "Firewall", + "timetable": "Horários", + "photoService": "Fotos", + "documents": "Documentos", + "notes": "Notas", + "mediaMonitoring": "Monitoramento", + "speedtest": "Teste de Velocidade", + "analytics": "Análises", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Biblioteca de Mídia", + "uptimeMonitoring": "Monitoramento de Uptime" }, "testConnection": { "action": { - "create": "", - "edit": "" + "create": "Testar conexão e criar", + "edit": "Testar conexão e salvar" }, "error": { "common": { @@ -1160,71 +1160,71 @@ } } }, - "alertNotice": "", + "alertNotice": "O botão Salvar é habilitado após o estabelecimento de uma conexão bem-sucedida", "notification": { "success": { - "title": "", - "message": "" + "title": "Conexão bem-sucedida", + "message": "A conexão foi estabelecida com sucesso" }, "invalidUrl": { - "title": "", - "message": "" + "title": "URL inválido", + "message": "A URL é inválida" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "Credenciais ausentes", + "message": "Nem todas as credenciais foram fornecidas" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "Credenciais inválidas", + "message": "As credenciais são inválidas" }, "commonError": { - "title": "", - "message": "" + "title": "Falha na conexão", + "message": "A conexão não pôde ser estabelecida" }, "badRequest": { - "title": "", - "message": "" + "title": "Solicitação inválida", + "message": "A solicitação estava malformada" }, "unauthorized": { - "title": "", - "message": "" + "title": "Não autorizado", + "message": "Credenciais provavelmente incorretas" }, "forbidden": { - "title": "", - "message": "" + "title": "Proibido", + "message": "Provavelmente faltam permissões" }, "notFound": { - "title": "", - "message": "" + "title": "Não encontrado", + "message": "Provavelmente url ou caminho incorreto" }, "internalServerError": { - "title": "", - "message": "" + "title": "Erro interno do servidor", + "message": "O servidor encontrou um erro" }, "serviceUnavailable": { - "title": "", - "message": "" + "title": "Serviço indisponível", + "message": "O servidor está indisponível no momento" }, "connectionAborted": { - "title": "", - "message": "" + "title": "Conexão abortada", + "message": "A conexão foi abortada" }, "domainNotFound": { - "title": "", - "message": "" + "title": "Domínio não encontrado", + "message": "O domínio não pôde ser encontrado" }, "connectionRefused": { - "title": "", - "message": "" + "title": "Conexão recusada", + "message": "A conexão foi recusada" }, "invalidJson": { - "title": "", - "message": "" + "title": "JSON inválido", + "message": "A resposta não é um JSON válido" }, "wrongPath": { - "title": "", - "message": "" + "title": "Caminho incorreto", + "message": "O caminho provavelmente não está correto" }, "tooManyRequests": { "title": "", @@ -1233,33 +1233,33 @@ } }, "secrets": { - "title": "", - "lastUpdated": "", + "title": "Sem credenciais", + "lastUpdated": "Última atualização em {date}", "notSet": { "label": "", "tooltip": "" }, - "secureNotice": "", + "secureNotice": "Esta credencial não pode ser recuperada após a criação", "reset": { - "title": "", - "message": "" + "title": "Redefinir credencial", + "message": "Tem certeza de que deseja redefinir esta credencial?" }, "noSecretsRequired": { - "segmentTitle": "", - "text": "" + "segmentTitle": "Sem credenciais", + "text": "Nenhuma credencial necessária para esta integração" }, "kind": { "username": { - "label": "", - "newLabel": "" + "label": "Usuário", + "newLabel": "Novo nome de usuário" }, "apiKey": { - "label": "", - "newLabel": "" + "label": "Chave de API", + "newLabel": "Nova chave de API" }, "password": { - "label": "", - "newLabel": "" + "label": "Senha", + "newLabel": "Nova senha" }, "tokenId": { "label": "", @@ -1310,33 +1310,33 @@ "newLabel": "" }, "slug": { - "label": "", - "newLabel": "" + "label": "Slug da página de status", + "newLabel": "Novo slug da página de status" } } }, "permission": { - "use": "", - "interact": "", - "full": "" + "use": "Selecionar integrações em itens", + "interact": "Interagir com integrações", + "full": "Acesso completo à integração" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Servidor auto-hospedado de audiolivros e podcasts" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Servidor de streaming de música auto-hospedado com compatibilidade com a API Subsonic" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Monitoramento de uptime auto-hospedado com páginas de status públicas", "secret": { "slug": { - "description": "" + "description": "O slug da sua página de status pública. O padrão é \"default\" se não definido." }, "apiKey": { - "description": "" + "description": "Chave de API opcional para acesso autenticado a /metrics" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Sistema de gerenciamento de documentos para arquivamento e organização de documentos digitalizados" }, "patchmon": { "name": "", @@ -1358,185 +1358,185 @@ } }, "media": { - "plural": "", - "search": "", + "plural": "Mídias", + "search": "Buscar uma mídia", "field": { - "name": "", - "size": "", - "creator": "" + "name": "Nome", + "size": "Tamanho", + "creator": "Criador" }, "action": { "upload": { - "label": "", - "file": "", + "label": "Enviar mídia", + "file": "Selecionar arquivo", "notification": { "success": { - "message": "" + "message": "A mídia foi carregada com sucesso" }, "error": { - "message": "" + "message": "Não foi possível carregar a mídia" } } }, "delete": { - "label": "", - "description": "", + "label": "Excluir mídia", + "description": "Tem certeza que deseja deletar a mídia ?", "notification": { "success": { - "message": "" + "message": "A mídia foi excluída com sucesso" }, "error": { - "message": "" + "message": "Não foi possível excluir a mídia" } } }, "copy": { - "label": "" + "label": "Copiar URL" }, "open": { "label": "" } }, "noResults": { - "title": "" + "title": "Nenhuma mídia enviada" } }, "common": { "success": "", - "beta": "", - "error": "", + "beta": "Beta", + "error": "Erro", "action": { - "add": "", - "apply": "", - "backToOverview": "", - "skip": "", + "add": "Adicionar", + "apply": "Aplicar", + "backToOverview": "Voltar à visão geral", + "skip": "Pular", "change": "", - "create": "", + "create": "Criar", "createAnother": "", - "edit": "", - "import": "", - "insert": "", - "remove": "", - "save": "", - "saveChanges": "", - "cancel": "", - "delete": "", - "discard": "", + "edit": "Editar", + "import": "Importar", + "insert": "Inserir", + "remove": "Excluir", + "save": "Salvar", + "saveChanges": "Salvar alterações", + "cancel": "Cancelar", + "delete": "Apagar", + "discard": "Descartar", "close": "", - "confirm": "", - "continue": "", - "previous": "", - "next": "", - "checkoutDocs": "", + "confirm": "Confirmar", + "continue": "Continuar", + "previous": "Anterior", + "next": "Próximo", + "checkoutDocs": "Confira a documentação", "checkLogs": "", - "tryAgain": "", - "loading": "", - "show": "", - "hide": "" + "tryAgain": "Tente novamente", + "loading": "Carregando", + "show": "Exibir", + "hide": "Ocultar" }, - "here": "", + "here": "aqui", "iconPicker": { - "label": "", - "header": "", + "label": "URL do ícone", + "header": "Digite o nome ou os objetos para filtrar os ícones... O Homarr pesquisará {countIcons} ícones para você.", "headerLoading": "", "noResults": "", "error": "" }, "colorScheme": { "options": { - "auto": "", + "auto": "Automático", "light": "", "dark": "" } }, "information": { - "min": "", - "max": "", - "days": "", - "hours": "", - "minutes": "" + "min": "Mínimo", + "max": "Máximo", + "days": "Dias", + "hours": "Horas", + "minutes": "Minutos" }, "notification": { "create": { - "success": "", - "error": "" + "success": "Criação realizada com sucesso", + "error": "Criação falhou" }, "delete": { - "success": "", - "error": "" + "success": "Exclusão realizada com sucesso", + "error": "Exclusão falhou" }, "update": { - "success": "", - "error": "" + "success": "Alterações aplicadas com sucesso", + "error": "Não foi possível aplicar as alterações" }, "transfer": { - "success": "", - "error": "" + "success": "Transferência realizada com sucesso", + "error": "Transferência falhou" } }, "multiSelect": { - "placeholder": "" + "placeholder": "Selecione um ou mais valores" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "Adicione mais valores", + "addLabel": "Adicionar {value}" }, "select": { - "placeholder": "", + "placeholder": "Selecionar um valor", "badge": { - "recommended": "" + "recommended": "Recomendado" } }, "userAvatar": { "menu": { - "switchToDarkMode": "", - "switchToLightMode": "", - "management": "", + "switchToDarkMode": "Alternar para o modo escuro", + "switchToLightMode": "Alternar para o modo claro", + "management": "Gerenciamento", "docker": "", - "preferences": "", - "logout": "", - "login": "", - "homeBoard": "", - "loggedOut": "", + "preferences": "Suas preferências", + "logout": "Sair", + "login": "“Login”", + "homeBoard": "Seu painel inicial", + "loggedOut": "Sessão encerrada", "updateAvailable": "" } }, - "dangerZone": "", - "noResults": "", + "dangerZone": "Zona de risco", + "noResults": "Nenhum resultado encontrado", "unsavedChanges": "", "servers": "", "applications": "", "services": "", "preview": { - "show": "", - "hide": "" + "show": "Exibir visualização", + "hide": "Ocultar visualização" }, "zod": { "errors": { - "default": "", - "required": "", + "default": "Esse campo é inválido", + "required": "Este campo é obrigatório", "string": { - "startsWith": "", - "endsWith": "", - "includes": "", - "invalidEmail": "" + "startsWith": "Esse campo deve começar com {startsWith}", + "endsWith": "Esse campo deve terminar com {endsWith}", + "includes": "Esse campo deve incluir {includes}", + "invalidEmail": "Este campo deve ser um e-mail válido" }, "tooSmall": { - "string": "", - "number": "" + "string": "Esse campo deve ter pelo menos {minimum} caracteres", + "number": "Esse campo deve ser maior ou igual a {minimum}" }, "tooBig": { - "string": "", - "number": "" + "string": "Esse campo deve ter no máximo {maximum} caracteres", + "number": "Esse campo deve ser menor ou igual a {maximum}" }, "custom": { - "passwordsDoNotMatch": "", - "passwordRequirements": "", - "boardAlreadyExists": "", - "invalidFileType": "", + "passwordsDoNotMatch": "Senhas não coincidem", + "passwordRequirements": "A senha não atende aos requisitos", + "boardAlreadyExists": "Já existe um painel com este nome", + "invalidFileType": "Formato de arquivo inválido, esperado {expected}", "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", + "fileTooLarge": "O arquivo é muito grande, o tamanho máximo é {maxSize}", + "invalidConfiguration": "Configuração inválida", "groupNameTaken": "" } } @@ -1551,8 +1551,8 @@ "section": { "dynamic": { "action": { - "create": "", - "remove": "" + "create": "Nova seção dinâmica", + "remove": "Remover seção dinâmica" }, "option": { "title": { @@ -1566,43 +1566,43 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Remover seção dinâmica", + "message": "Tem certeza de que deseja remover esta seção dinâmica? Os itens serão movidos para o mesmo local na seção pai." } }, "category": { "field": { "name": { - "label": "" + "label": "Nome" } }, "action": { - "create": "", - "edit": "", - "remove": "", - "moveUp": "", - "moveDown": "", - "createAbove": "", - "createBelow": "", + "create": "Nova categoria", + "edit": "Renomear categoria", + "remove": "Remover categoria", + "moveUp": "Subir", + "moveDown": "Mover para baixo", + "createAbove": "Nova categoria acima", + "createBelow": "Nova categoria abaixo", "openAllInNewTabs": "" }, "create": { - "title": "", - "submit": "" + "title": "Nova categoria", + "submit": "Adicionar categoria" }, "remove": { - "title": "", - "message": "" + "title": "Remover categoria", + "message": "Tem certeza que deseja deletar a categoria {name}?" }, "edit": { - "title": "", - "submit": "" + "title": "Renomear categoria", + "submit": "Renomear categoria" }, "menu": { "label": { - "create": "", - "changePosition": "", - "settings": "" + "create": "Nova categoria", + "changePosition": "Mudar de posição", + "settings": "Configurações" } }, "openAllInNewTabs": { @@ -1613,16 +1613,16 @@ }, "item": { "action": { - "create": "", - "import": "", - "edit": "", - "moveResize": "", - "duplicate": "", - "remove": "" + "create": "Novo item", + "import": "Importar item", + "edit": "Editar item", + "moveResize": "Mover / redimensionar item", + "duplicate": "Duplicar item", + "remove": "Remover item" }, "menu": { "label": { - "settings": "", + "settings": "Configurações", "refresh": "", "options": "", "actions": "" @@ -1635,49 +1635,49 @@ } }, "create": { - "title": "", + "title": "Escolha o item a adicionar", "search": "", - "addToBoard": "" + "addToBoard": "Adicionar ao painel" }, "moveResize": { - "title": "", + "title": "Mover / redimensionar item", "field": { "width": { - "label": "" + "label": "Largura" }, "height": { - "label": "" + "label": "Altura" }, "xOffset": { - "label": "" + "label": "Deslocamento X" }, "yOffset": { - "label": "" + "label": "Deslocamento Y" } } }, "edit": { - "title": "", + "title": "Editar item", "tab": { - "widget": "", - "app": "" + "widget": "Editar widget", + "app": "Editar aplicativo" }, "app": { - "propagationNotice": "" + "propagationNotice": "As alterações neste aplicativo serão aplicadas em todos os locais onde ele é usado em todos os painéis." }, "advancedOptions": { - "label": "", - "title": "" + "label": "Opções avançadas", + "title": "Opções avançadas de itens" }, "field": { "integrations": { - "label": "" + "label": "Integrações" }, "title": { "label": "" }, "customCssClasses": { - "label": "" + "label": "Classes css customizadas" }, "borderColor": { "label": "" @@ -1685,8 +1685,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Remover item", + "message": "Tem certeza que deseja remover esse item?" } }, "widget": { @@ -1698,17 +1698,17 @@ "loadError": "" }, "app": { - "name": "", - "description": "", + "name": "Aplicativo", + "description": "Incorpora um aplicativo no quadro.", "option": { "appId": { - "label": "" + "label": "Escolher aplicativo" }, "openInNewTab": { - "label": "" + "label": "Abrir em nova guia" }, "showTitle": { - "label": "" + "label": "Exibir o nome do aplicativo" }, "pingEnabled": { "label": "" @@ -1734,29 +1734,29 @@ }, "error": { "notFound": { - "label": "", - "tooltip": "" + "label": "Nenhum aplicativo", + "tooltip": "Você não tem nenhum aplicativo válido selecionado" } } }, "bookmarks": { - "name": "", - "description": "", + "name": "Marcadores", + "description": "Exibe múltiplos links de aplicativos", "option": { "title": { - "label": "" + "label": "Título" }, "layout": { - "label": "", + "label": "Layout", "option": { "row": { - "label": "" + "label": "Horizontal" }, "column": { - "label": "" + "label": "Vertical" }, "grid": { - "label": "" + "label": "Grade" }, "gridHorizontal": { "label": "" @@ -1776,11 +1776,11 @@ "label": "" }, "withBorder": { - "label": "" + "label": "Exibir borda" }, "items": { - "label": "", - "add": "" + "label": "Marcadores", + "add": "Adicionar marcador" } } }, @@ -1794,109 +1794,109 @@ } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "Resumo do DNS Hole", + "description": "Exibe o resumo do seu DNS Hole", "option": { "layout": { - "label": "", + "label": "Layout", "option": { "row": { - "label": "" + "label": "Horizontal" }, "column": { - "label": "" + "label": "Vertical" }, "grid": { - "label": "" + "label": "Grade" } } }, "usePiHoleColors": { - "label": "" + "label": "Usar cores do Pi-Hole" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "Falha ao buscar resumo do DNS Hole", + "integrationsDisconnected": "Nenhum dado disponível, todas as integrações estão desconectadas" }, "data": { - "adsBlockedToday": "", - "adsBlockedTodayPercentage": "", - "dnsQueriesToday": "", - "domainsBeingBlocked": "" + "adsBlockedToday": "Bloqueado hoje", + "adsBlockedTodayPercentage": "Bloqueado hoje", + "dnsQueriesToday": "Consultas hoje", + "domainsBeingBlocked": "Domínios na lista de bloqueio" }, "domainsTooltip": "" }, "dnsHoleControls": { - "name": "", - "description": "", + "name": "Controles do DNS Hole", + "description": "Controle o PiHole ou o AdGuard em seu painel de controle", "option": { "layout": { - "label": "", + "label": "Layout", "option": { "row": { - "label": "" + "label": "Horizontal" }, "column": { - "label": "" + "label": "Vertical" }, "grid": { - "label": "" + "label": "Grade" } } }, "showToggleAllButtons": { - "label": "" + "label": "Exibir botões \"Alternar Todos\"" } }, "error": { - "internalServerError": "" + "internalServerError": "Falha ao gerenciar o DNS Hole" }, "controls": { - "enableAll": "", - "disableAll": "", - "setTimer": "", - "set": "", - "enabled": "", - "disabled": "", - "processing": "", - "disconnected": "", - "hours": "", - "minutes": "", - "unlimited": "" + "enableAll": "Habilitar todos", + "disableAll": "Desabilitar todos", + "setTimer": "Definir temporizador", + "set": "Definir", + "enabled": "Ativado", + "disabled": "Desabilitado", + "processing": "Processando", + "disconnected": "Desconectado", + "hours": "Horas", + "minutes": "Minutos", + "unlimited": "Deixe em branco para não limitar" } }, "clock": { - "name": "", - "description": "", + "name": "Data e hora", + "description": "Apresenta a data e hora actuais.", "option": { "customTitleToggle": { - "label": "", - "description": "" + "label": "Exibição personalizada do título/cidade", + "description": "Exiba um título personalizado ou o nome da cidade/país na parte superior do relógio." }, "customTitle": { - "label": "" + "label": "Título" }, "is24HourFormat": { - "label": "", - "description": "" + "label": "Formato de 24 horas", + "description": "Use o formato de 24 horas em vez do formato de 12 horas" }, "showSeconds": { - "label": "" + "label": "Exibir segundos" }, "useCustomTimezone": { - "label": "" + "label": "Usar um fuso horário fixo" }, "timezone": { - "label": "", - "description": "" + "label": "Fuso-horário", + "description": "Escolha o fuso horário seguindo o padrão IANA" }, "showDate": { - "label": "" + "label": "Exibir data" }, "dateFormat": { - "label": "", - "description": "" + "label": "Formato de data", + "description": "Como a data deve ser exibida" }, "customTimeFormat": { "label": "", @@ -1952,66 +1952,66 @@ } }, "notebook": { - "name": "", - "description": "", + "name": "Caderno de anotações", + "description": "Um widget de bloco de notas simples que suporta markdown", "option": { "showToolbar": { - "label": "" + "label": "Mostrar a barra de ferramentas para ajudá-lo a escrever markdown" }, "allowReadOnlyCheck": { - "label": "" + "label": "Permitir a verificação no modo de leitura" }, "content": { - "label": "" + "label": "O conteúdo do notebook" } }, "controls": { - "bold": "", - "italic": "", - "strikethrough": "", - "underline": "", - "colorText": "", - "colorHighlight": "", - "code": "", - "clear": "", - "heading": "", - "align": "", + "bold": "Negrito", + "italic": "Itálico", + "strikethrough": "Riscar", + "underline": "Sublinhar", + "colorText": "Cor do texto", + "colorHighlight": "Texto colorido em destaque", + "code": "Código", + "clear": "Limpar formatação", + "heading": "Cabeçalho {level}", + "align": "Alinhar texto: {position}", "directionLtr": "", "directionRtl": "", - "blockquote": "", - "horizontalLine": "", - "bulletList": "", - "orderedList": "", - "checkList": "", - "increaseIndent": "", - "decreaseIndent": "", - "link": "", - "unlink": "", - "image": "", - "addTable": "", - "deleteTable": "", - "colorCell": "", - "mergeCell": "", - "addColumnLeft": "", - "addColumnRight": "", - "deleteColumn": "", - "addRowTop": "", - "addRowBelow": "", - "deleteRow": "" + "blockquote": "Bloco de Citação", + "horizontalLine": "Linha horizontal", + "bulletList": "Lista de marcadores", + "orderedList": "Lista ordenada", + "checkList": "Lista de verificação", + "increaseIndent": "Aumentar recuo", + "decreaseIndent": "Diminuir recuo", + "link": "Link", + "unlink": "Remover link", + "image": "Incorporar imagem", + "addTable": "Adicionar tabela", + "deleteTable": "Excluir tabela", + "colorCell": "Cor da Célula", + "mergeCell": "Ativar/desativar mesclagem de células", + "addColumnLeft": "Adicionar coluna antes", + "addColumnRight": "Adicionar coluna depois", + "deleteColumn": "Excluir coluna", + "addRowTop": "Adicionar linha antes", + "addRowBelow": "Adicionar linha depois", + "deleteRow": "Excluir linha" }, "align": { - "left": "", - "center": "", - "right": "" + "left": "Esquerda", + "center": "Centralizado", + "right": "Certo" }, "popover": { - "clearColor": "", - "source": "", - "widthPlaceholder": "", - "columns": "", - "rows": "", - "width": "", - "height": "" + "clearColor": "Limpar cor", + "source": "Fonte", + "widthPlaceholder": "Valor em % ou pixels", + "columns": "Colunas", + "rows": "Linhas", + "width": "Largura", + "height": "Altura" }, "placeholder": "", "dismiss": { @@ -2052,73 +2052,73 @@ "saveFailed": "" }, "iframe": { - "name": "", - "description": "", + "name": "iFrame", + "description": "Incorporar qualquer conteúdo da internet. Alguns sites podem restringir o acesso.", "option": { "embedUrl": { - "label": "" + "label": "Incorporar URL" }, "allowFullScreen": { - "label": "" + "label": "Permitir tela cheia" }, "allowTransparency": { - "label": "" + "label": "Permitir transparência" }, "allowScrolling": { - "label": "" + "label": "Permitir rolagem" }, "allowPayment": { - "label": "" + "label": "Permitir pagamento" }, "allowAutoPlay": { - "label": "" + "label": "Permitir reprodução automática" }, "allowMicrophone": { - "label": "" + "label": "Permitir microfone" }, "allowCamera": { - "label": "" + "label": "Permitir câmera" }, "allowGeolocation": { - "label": "" + "label": "Permitir geolocalização" }, "allowModals": { "label": "" } }, "error": { - "noUrl": "", + "noUrl": "Nenhum URL de iFrame fornecido", "unsupportedProtocol": "", - "noBrowerSupport": "" + "noBrowerSupport": "Seu navegador não suporta iframes. Atualize seu navegador." } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "Estado da Entidade", + "description": "Exibe o estado de uma entidade e permite alterná-lo opcionalmente", "option": { "entityId": { - "label": "" + "label": "ID da entidade" }, "displayName": { - "label": "" + "label": "Nome de exibição" }, "entityUnit": { - "label": "" + "label": "Unidade da Entidade" }, "clickable": { - "label": "" + "label": "Clicável" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "Executar automação", + "description": "Acionar uma automação com um único clique", "option": { "displayName": { - "label": "" + "label": "Nome de exibição" }, "automationId": { - "label": "" + "label": "ID da automação" } }, "spotlightAction": { @@ -2202,25 +2202,25 @@ } }, "calendar": { - "name": "", - "description": "", + "name": "Calendário", + "description": "Exibe eventos de suas integrações em uma visualização de calendário dentro de um período relativo específico", "duration": { "allDay": "" }, "option": { "releaseType": { - "label": "", + "label": "Tipo de libertação de Radarr", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "Nos cinemas", + "digitalRelease": "Lançamento digital", + "physicalRelease": "Lançamento físico" } }, "filterPastMonths": { - "label": "" + "label": "Começar de" }, "filterFutureMonths": { - "label": "" + "label": "Terminar em" }, "showUnmonitored": { "label": "" @@ -2228,11 +2228,11 @@ } }, "weather": { - "name": "", - "description": "", + "name": "Clima", + "description": "Apresenta a informação meteorológica actual de um local definido.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Temperatura em Fahrenheit" }, "disableTemperatureDecimals": { "label": "" @@ -2245,21 +2245,21 @@ "label": "" }, "location": { - "label": "" + "label": "Localização do tempo" }, "showCity": { - "label": "" + "label": "Exibir cidade" }, "hasForecast": { - "label": "" + "label": "Exibir previsão" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Quantidade de dias de previsão", + "description": "Quando o widget não é largo o suficiente, menos dias serão exibidos" }, "dateFormat": { - "label": "", - "description": "" + "label": "Formato de data", + "description": "Como a data deve ser exibida" } }, "currentWindSpeed": "", @@ -2271,52 +2271,52 @@ "humidity": "" }, "kind": { - "clear": "", - "mainlyClear": "", - "fog": "", - "drizzle": "", - "freezingDrizzle": "", - "rain": "", - "freezingRain": "", - "snowFall": "", - "snowGrains": "", - "rainShowers": "", - "snowShowers": "", - "thunderstorm": "", - "thunderstormWithHail": "", - "unknown": "" + "clear": "Limpar", + "mainlyClear": "Principalmente claro", + "fog": "Névoa", + "drizzle": "Chuvisco", + "freezingDrizzle": "Chuvisco congelante", + "rain": "Chuva", + "freezingRain": "Chuva congelante", + "snowFall": "Queda de neve", + "snowGrains": "Grãos de neve", + "rainShowers": "Pancadas de chuva", + "snowShowers": "Pancadas de neve", + "thunderstorm": "Trovoada", + "thunderstormWithHail": "Trovoada com granizo", + "unknown": "Desconhecido" } }, "indexerManager": { - "name": "", - "description": "", + "name": "Status do gerenciador de indexadores", + "description": "Status dos seus indexadores", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Abrir site do indexador em nova aba" } }, - "title": "", - "testAll": "", + "title": "Gerenciador de indexadores", + "testAll": "Testar todos", "error": { - "internalServerError": "" + "internalServerError": "Falha ao buscar status dos indexadores" } }, "healthMonitoring": { - "name": "", - "description": "", + "name": "Monitoramento de integridade do sistema", + "description": "Exibe informações que mostram a saúde e status de seu(s) sistema(s).", "tab": { "system": "", "cluster": "" }, "option": { "fahrenheit": { - "label": "" + "label": "Temperatura da CPU em Fahrenheit" }, "cpu": { - "label": "" + "label": "Mostrar informações da CPU" }, "memory": { - "label": "" + "label": "Mostrar informações da memória" }, "gpu": { "label": "" @@ -2325,7 +2325,7 @@ "label": "" }, "fileSystem": { - "label": "" + "label": "Mostrar informações do sistema de arquivos" }, "visibleStorageVolumes": { "label": "", @@ -2343,22 +2343,22 @@ } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", + "information": "Informação", + "processor": "Processador: {cpuModelName}", + "memory": "Memória: {memory} GiB", + "memoryAvailable": "Disponível: {memoryAvailable} GiB ({percent}%)", + "version": "Versão: {version}", "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", - "available": "", - "lastSeen": "" + "loadAverage": "Carga média:", + "minute": "1 minuto", + "minutes": "{count} minutos", + "used": "Usado", + "available": "Disponível", + "lastSeen": "Última atualização de status: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "Falha ao buscar status de integridade" }, "cluster": { "summary": { @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Monitorar o status dos seus dispositivos UPS através de um servidor NUT", "option": { "showBattery": { - "label": "" + "label": "Exibir bateria" }, "showLoad": { - "label": "" + "label": "Exibir carga" }, "showVoltage": { - "label": "" + "label": "Exibir voltagem" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Online", + "onBattery": "Na bateria", + "lowBattery": "Bateria fraca", + "charging": "Carregando", + "unknown": "Desconhecido" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Tempo de execução", + "load": "Carga", + "input": "Entrada", + "output": "Saída" }, "error": { - "internalServerError": "" + "internalServerError": "Falha ao buscar dados do UPS" } }, "tracearr": { @@ -2584,149 +2595,161 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Últimos 30 dias", + "month": "Este mês", + "lastMonth": "Mês passado" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Evento", + "description": "Mostrar total de ocorrências de um evento específico", + "placeholder": "Selecione um evento", + "loading": "Carregando eventos...", + "noEvents": "Nenhum evento encontrado", + "none": "Nenhum evento", + "configureWebsiteFirst": "Selecione primeiro um site para carregar eventos" }, "chartType": { - "label": "", - "description": "", + "label": "Tipo de gráfico", + "description": "Estilo de exibição do gráfico", "option": { - "bar": "", - "sparkline": "" + "bar": "Gráfico de barras", + "sparkline": "Sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Estilo do gráfico", + "description": "Como exibir as séries de eventos no gráfico", "option": { - "grouped": "", - "overlay": "" + "grouped": "Lado a lado", + "overlay": "Sobreposição (subconjunto)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Visualização", + "description": "O que exibir no corpo do widget", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Gráfico", + "events": "Gráfico de eventos", + "topPages": "Páginas principais", + "topReferrers": "Referenciadores principais" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Eventos", + "description": "Selecione um ou mais eventos para o gráfico", + "placeholder": "Selecionar eventos...", + "loading": "Carregando eventos...", + "noEvents": "Nenhum evento encontrado", + "configureWebsiteFirst": "Selecione primeiro um site para carregar eventos" }, "topCount": { - "label": "", - "description": "" + "label": "Itens a exibir", + "description": "Número de itens principais a exibir (máx. 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "ocorrências", + "label": "eventos" }, "topPages": { - "direct": "" + "direct": "Direto" }, "topReferrers": { - "direct": "" + "direct": "Direto" }, "events": { - "selectPrompt": "" + "selectPrompt": "Selecione eventos para o gráfico" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Nenhuma integração Umami configurada", + "noWebsite": "Nenhum site configurado", + "noData": "Sem dados disponíveis", + "internalServerError": "Falha ao buscar dados do Umami" } }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", - "search": "", + "query": "Cidade / Código postal", + "latitude": "Latitude", + "longitude": "Longitude", + "disabledTooltip": "Por favor, insira uma cidade ou código postal", + "unknownLocation": "Localização desconhecida", + "search": "Buscar", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "Cidade", + "country": "País", + "coordinates": "Coordenadas", + "population": "População" }, "action": { - "select": "" + "select": "Selecionar {city}, {countryCode}" }, "population": { - "fallback": "" + "fallback": "Desconhecido" } } }, "integration": { - "noData": "", - "description": "" + "noData": "Nenhuma integração encontrada", + "description": "Clique para criar uma nova integração" }, "app": { - "noData": "", - "description": "", + "noData": "Nenhum aplicativo encontrado", + "description": "Clique para criar um novo aplicativo", "quickCreate": "" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "Nenhuma integração selecionada", + "noData": "Nenhum dado de integração disponível" }, "option": {} }, "video": { - "name": "", - "description": "", + "name": "Transmissão de vídeo", + "description": "Incorporar uma transmissão de vídeo ou vídeo de uma câmera ou site", "option": { "feedUrl": { - "label": "" + "label": "URL do feed" }, "hasAutoPlay": { - "label": "", - "description": "" + "label": "Reprodução automática", + "description": "A reprodução automática só funciona quando o áudio está mudo devido a restrições do navegador" }, "isMuted": { - "label": "" + "label": "Mudo" }, "hasControls": { - "label": "" + "label": "Mostrar controles" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "Nenhum URL de vídeo fornecido", + "forYoutubeUseIframe": "Para vídeos do YouTube, use a opção iframe" } }, "mediaServer": { - "name": "", - "description": "", + "name": "Transmissões atuais do servidor de mídia", + "description": "Exibe as transmissões atuais nos seus servidores de mídia", "option": { "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,32 +2784,32 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Visão geral do seu arquivo de documentos do Paperless-ngx", + "documentsTotal": "Total de Documentos", + "documentsInbox": "Caixa de Entrada", + "correspondents": "Correspondentes", + "tags": "Tags", + "documentTypes": "Tipos de Documento", + "inboxRatio": "Proporção da Caixa de Entrada", + "inbox": "caixa de entrada", + "total": "total", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Exibir proporção da caixa de entrada", + "description": "Exibir a proporção de documentos da caixa de entrada em relação ao total na seção principal" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Exibir anel da caixa de entrada", + "description": "Exibir um anel de progresso junto com a proporção da caixa de entrada" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Exibir total de documentos", + "description": "Exibir o número total de documentos no seu arquivo" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Exibir contagem da caixa de entrada", + "description": "Exibir o número de documentos não processados na caixa de entrada" }, "showCorrespondents": { "label": "", @@ -3040,151 +3066,178 @@ "noPhotos": "" }, "downloads": { - "name": "", - "description": "", + "name": "Cliente de download", + "description": "Permite visualizar e gerenciar seus downloads de clientes Torrent e Usenet.", "option": { "columns": { - "label": "" + "label": "Colunas a exibir" }, "enableRowSorting": { - "label": "" + "label": "Habilitar ordenação de itens" }, "defaultSort": { - "label": "" + "label": "Coluna usada para ordenação padrão" }, "descendingDefaultSort": { - "label": "" + "label": "Inverter ordenação" }, "showCompletedUsenet": { - "label": "" + "label": "Mostrar entradas da Usenet marcadas como concluídas" }, "showCompletedTorrent": { - "label": "" + "label": "Mostrar entradas de torrent marcadas como concluídas" }, "showCompletedHttp": { "label": "" }, "activeTorrentThreshold": { - "label": "" + "label": "Ocultar torrents concluídos abaixo deste limite (em kiB/s)" }, "categoryFilter": { - "label": "" + "label": "Categorias/rótulos para filtrar" }, "filterIsWhitelist": { - "label": "" + "label": "Filtrar como lista de permissões" }, "applyFilterToRatio": { - "label": "" + "label": "Usar filtro para calcular a proporção" }, "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { - "noColumns": "", - "noCommunications": "" + "noColumns": "Selecionar colunas nos itens", + "noCommunications": "Não foi possível carregar dados da integração", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { - "columnTitle": "" + "columnTitle": "Controles" }, "added": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Adicionado", + "detailsTitle": "Data de adição" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Extras", + "detailsTitle": "Categorias (ou informações extras)" }, "downSpeed": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Down", + "detailsTitle": "Velocidade de download" }, "index": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "#", + "detailsTitle": "Índice atual no cliente" }, "id": { - "columnTitle": "" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { - "columnTitle": "" + "columnTitle": "Integração" }, "name": { - "columnTitle": "" + "columnTitle": "Nome do trabalho" }, "progress": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Progresso", + "detailsTitle": "Progresso do download" }, "ratio": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Proporção", + "detailsTitle": "Proporção do torrent (recebido/enviado)" }, "received": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Total baixado", + "detailsTitle": "Total baixado" }, "sent": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Total enviado", + "detailsTitle": "Total enviado" }, "size": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Tamanho do arquivo", + "detailsTitle": "Tamanho total da seleção/arquivos" }, "state": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Estado", + "detailsTitle": "Estado do trabalho" }, "time": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Tempo de conclusão", + "detailsTitle": "Tempo desde/até a conclusão", + "eta": "" }, "type": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Tipo", + "detailsTitle": "Tipo de cliente de download" }, "upSpeed": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Up", + "detailsTitle": "Velocidade de upload" } }, "states": { - "downloading": "", - "queued": "", - "paused": "", - "completed": "", - "failed": "", - "processing": "", - "leeching": "", - "stalled": "", - "unknown": "", - "seeding": "" + "downloading": "Baixando", + "queued": "Na fila", + "paused": "Pausado", + "completed": "Concluído", + "failed": "Falhou", + "processing": "Processando", + "leeching": "Baixando", + "stalled": "Parado", + "unknown": "Desconhecido", + "seeding": "Compartilhando" }, "actions": { "clients": { - "modalTitle": "", - "pause": "", - "resume": "" + "modalTitle": "Lista de clientes de download", + "pause": "Pausar todos os clientes/itens", + "resume": "Retomar todos os clientes/itens" }, "client": { - "pause": "", - "resume": "" + "pause": "Pausar cliente", + "resume": "Retomar cliente" }, "item": { - "pause": "", - "resume": "", + "pause": "Pausar item", + "resume": "Retomar item", "delete": { - "title": "", - "modalTitle": "", - "entry": "", - "entryAndFiles": "" + "title": "Excluir item", + "modalTitle": "Tem certeza de que deseja excluir este trabalho?", + "entry": "Excluir entrada", + "entryAndFiles": "Excluir entrada e arquivo(s)" } } }, - "globalRatio": "" + "globalRatio": "Proporção global", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3216,11 +3269,11 @@ } }, "mediaRequests-requestList": { - "name": "", - "description": "", + "name": "Lista de solicitações de mídia", + "description": "Veja uma lista de todas as solicitações de mídia da sua instância do Overseerr ou Jellyseerr", "option": { "linksTargetNewTab": { - "label": "" + "label": "Abrir links em nova aba" }, "statusFilter": { "label": "" @@ -3230,17 +3283,17 @@ } }, "pending": { - "approve": "", - "approving": "", - "decline": "" + "approve": "Aprovar solicitação", + "approving": "Aprovando solicitação...", + "decline": "Recusar solicitação" }, "availability": { - "unknown": "", - "pending": "", - "processing": "", + "unknown": "Desconhecido", + "pending": "Pendente", + "processing": "Processando", "requested": "", - "partiallyAvailable": "", - "available": "", + "partiallyAvailable": "Parcial", + "available": "Disponível", "blacklisted": "", "deleted": "" }, @@ -3251,27 +3304,27 @@ "failed": "", "completed": "" }, - "toBeDetermined": "" + "toBeDetermined": "A definir" }, "mediaRequests-requestStats": { - "name": "", - "description": "", + "name": "Estatísticas de solicitações de mídia", + "description": "Estatísticas sobre suas solicitações de mídia", "option": {}, "titles": { "stats": { - "main": "", - "approved": "", - "pending": "", - "processing": "", - "declined": "", - "available": "", - "tv": "", - "movie": "", - "total": "" + "main": "Estatísticas de mídia", + "approved": "Já aprovado", + "pending": "Aprovações pendentes", + "processing": "Sendo processado", + "declined": "Já recusado", + "available": "Já disponível", + "tv": "Solicitações de TV", + "movie": "Solicitações de filmes", + "total": "Total" }, "users": { - "main": "", - "requests": "" + "main": "Principais usuários", + "requests": "Solicitações" } } }, @@ -3364,20 +3417,20 @@ "timeLeft": "" }, "rssFeed": { - "name": "", - "description": "", + "name": "Feeds RSS", + "description": "Monitora e exibe um ou mais feeds RSS, ATOM ou JSON genéricos", "option": { "feedUrls": { - "label": "" + "label": "URLs dos feeds" }, "enableRtl": { - "label": "" + "label": "Habilitar RTL" }, "textLinesClamp": { - "label": "" + "label": "Limite de linhas da descrição" }, "maximumAmountPosts": { - "label": "" + "label": "Limite de quantidade de postagens" }, "hideDescription": { "label": "" @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Sistemas Beszel (Tabela)", + "description": "Visualização em tabela de todos os sistemas monitorados pelo Beszel com colunas classificáveis e indicadores de status", "option": { "statusFilter": { - "label": "" + "label": "Filtro de status" }, "sortBy": { - "label": "" + "label": "Ordenar por" }, "sortDirection": { - "label": "" + "label": "Direção da ordenação" }, "showCpu": { - "label": "" + "label": "Exibir CPU" }, "showMemory": { - "label": "" + "label": "Exibir memória" }, "showDisk": { - "label": "" + "label": "Exibir disco" }, "showGpu": { - "label": "" + "label": "Exibir GPU" }, "showLoadAvg": { - "label": "" + "label": "Exibir carga média" }, "showNet": { - "label": "" + "label": "Exibir rede" }, "showTemp": { - "label": "" + "label": "Exibir temperatura" }, "showBattery": { - "label": "" + "label": "Exibir bateria" }, "showServices": { - "label": "" + "label": "Exibir serviços" }, "showUptime": { - "label": "" + "label": "Exibir uptime" }, "showAgent": { + "label": "Exibir versão do agente" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Nenhum sistema encontrado", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Sistema", + "cpu": "CPU", + "memory": "Memória", + "disk": "Disco", + "gpu": "GPU", + "loadAvg": "Carga Média", + "net": "Rede", + "temp": "Temp", + "battery": "Bat", + "services": "Serviços", + "uptime": "Tempo de atividade", + "agent": "Agente" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Sistemas Beszel (Grade)", + "description": "Visualização em grade de cartões de todos os sistemas monitorados pelo Beszel com métricas em tempo real", "option": { "statusFilter": { - "label": "" + "label": "Filtro de status" }, "showCpu": { - "label": "" + "label": "Exibir CPU" }, "showMemory": { - "label": "" + "label": "Exibir memória" }, "showDisk": { - "label": "" + "label": "Exibir disco" }, "showGpu": { - "label": "" + "label": "Exibir GPU" }, "showLoadAvg": { - "label": "" + "label": "Exibir carga média" }, "showNet": { - "label": "" + "label": "Exibir rede" }, "showTemp": { - "label": "" + "label": "Exibir temperatura" }, "showBattery": { - "label": "" + "label": "Exibir bateria" }, "showServices": { - "label": "" + "label": "Exibir serviços" }, "showUptime": { - "label": "" + "label": "Exibir uptime" }, "showAgent": { - "label": "" + "label": "Exibir versão do agente" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Memória", + "disk": "Disco", + "gpu": "GPU", + "loadAvg": "Carga Média", + "net": "Rede", + "temp": "Temp", + "battery": "Bat", + "services": "Serviços", + "uptime": "Tempo de atividade", + "agent": "Agente" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Alertas Beszel", + "description": "Ver configurações e histórico de alertas do Beszel", "option": { "showHistory": { - "label": "" + "label": "Exibir histórico de alertas" }, "maxHistoryItems": { - "label": "" + "label": "Máx. itens do histórico" } }, - "empty": "", + "empty": "Nenhum alerta configurado", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Histórico", + "resolved": "Resolvido", "status": { - "triggered": "", - "ok": "" + "triggered": "Disparado", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Estatísticas do Sistema Beszel", + "description": "Gráficos de séries temporais para métricas de CPU, memória, disco, rede e contêineres Docker", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Período de tempo" }, "showCpu": { - "label": "" + "label": "Exibir gráfico de CPU" }, "showMemory": { - "label": "" + "label": "Exibir gráfico de memória" }, "showDisk": { - "label": "" + "label": "Exibir gráfico de disco" }, "showDiskIO": { - "label": "" + "label": "Exibir gráfico de E/S de disco" }, "showNetwork": { - "label": "" + "label": "Exibir gráfico de rede" }, "showDockerCpu": { - "label": "" + "label": "Exibir gráfico de CPU Docker" }, "showDockerMemory": { - "label": "" + "label": "Exibir gráfico de memória Docker" }, "showDockerNetwork": { - "label": "" + "label": "Exibir gráfico de rede Docker" } }, - "selectSystem": "", + "selectSystem": "Selecionar sistema", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "Uso da CPU", + "subtitle": "Utilização média da CPU em todo o sistema", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Uso de Memória", + "subtitle": "Utilização precisa no momento registrado", + "series": "Usado", + "cache": "Cache/Buffers" }, "disk": { - "title": "", + "title": "Uso de Disco", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "E/S de Disco", + "subtitle": "Taxa de transferência do sistema de arquivos raiz", + "read": "Leitura", + "write": "Gravação" }, "storage": { "title": "", @@ -4106,33 +4153,33 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Largura de Banda", + "subtitle": "Tráfego de rede das interfaces públicas", + "sent": "Enviado", + "recv": "Recebido" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Uso de CPU Docker", + "subtitle": "Utilização média da CPU dos contêineres" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Uso de Memória Docker", + "subtitle": "Uso de memória dos contêineres Docker" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "E/S de Rede Docker", + "subtitle": "Tráfego de rede dos contêineres Docker" } } } }, "widgetPreview": { "toggle": { - "enabled": "", - "disabled": "" + "enabled": "Modo de edição ativado", + "disabled": "Modo de edição desativado" }, "dimensions": { - "title": "" + "title": "Alterar dimensões" } }, "board": { @@ -4154,70 +4201,70 @@ "edit": { "notification": { "success": { - "title": "", - "message": "" + "title": "Alterações aplicadas com sucesso", + "message": "O painel foi salvo com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Não foi possível aplicar as alterações", + "message": "O painel não pôde ser salvo" } }, "confirmLeave": { - "title": "", - "message": "" + "title": "Alterações não salvas", + "message": "Você tem alterações não salvas, tem certeza de que deseja sair?" } }, "oldImport": { - "label": "", + "label": "Importar do Homarr anterior à versão 1.0.0", "notification": { "success": { - "title": "", - "message": "" + "title": "Importação bem-sucedida", + "message": "O painel foi importado com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Falha na importação", + "message": "O painel não pôde ser importado, verifique os logs para mais detalhes" } }, "form": { "file": { - "label": "", - "invalidError": "" + "label": "Selecionar arquivo JSON", + "invalidError": "Arquivo de configuração inválido" }, "apps": { - "label": "", + "label": "Aplicativos", "avoidDuplicates": { - "label": "", - "description": "" + "label": "Evitar duplicatas", + "description": "Ignora aplicativos onde já existe um aplicativo com o mesmo href" }, "onlyImportApps": { - "label": "", - "description": "" + "label": "Importar apenas aplicativos", + "description": "Apenas adiciona os aplicativos, o painel precisa ser recriado manualmente" } }, "name": { - "label": "" + "label": "Nome do painel" }, "screenSize": { - "label": "", + "label": "Tamanho da tela", "description": "", "option": { - "sm": "", - "md": "", - "lg": "" + "sm": "Pequeno", + "md": "Médio", + "lg": "Grande" } }, "sidebarBehavior": { - "label": "", - "description": "", + "label": "Comportamento da barra lateral", + "description": "As barras laterais foram removidas na versão 1.0. Você pode selecionar o que deve acontecer com os itens dentro delas.", "option": { "lastSection": { - "label": "", - "description": "" + "label": "Última seção", + "description": "A barra lateral será exibida abaixo da última seção" }, "removeItems": { - "label": "", - "description": "" + "label": "Remover itens", + "description": "Os itens contidos na barra lateral serão removidos" } } } @@ -4232,19 +4279,19 @@ }, "field": { "pageTitle": { - "label": "" + "label": "Título da página" }, "metaTitle": { - "label": "" + "label": "Meta título" }, "logoImageUrl": { - "label": "" + "label": "URL da imagem do logotipo" }, "faviconImageUrl": { - "label": "" + "label": "URL da imagem do favicon" }, "backgroundImageUrl": { - "label": "", + "label": "URL da imagem de fundo", "placeholder": "", "group": { "your": "", @@ -4252,60 +4299,60 @@ } }, "backgroundImageAttachment": { - "label": "", + "label": "Anexo da imagem de fundo", "option": { "fixed": { - "label": "", - "description": "" + "label": "Fixo", + "description": "O fundo permanece na mesma posição." }, "scroll": { - "label": "", - "description": "" + "label": "Rolagem", + "description": "O fundo rola com o mouse." } } }, "backgroundImageRepeat": { - "label": "", + "label": "Repetição da imagem de fundo", "option": { "repeat": { - "label": "", - "description": "" + "label": "Repetir", + "description": "A imagem é repetida quantas vezes forem necessárias para cobrir toda a área de pintura da imagem de fundo." }, "no-repeat": { - "label": "", - "description": "" + "label": "Não repetir", + "description": "A imagem não é repetida e pode não preencher todo o espaço." }, "repeat-x": { - "label": "", - "description": "" + "label": "Repetir X", + "description": "Igual a 'Repetir', mas apenas no eixo horizontal." }, "repeat-y": { - "label": "", - "description": "" + "label": "Repetir Y", + "description": "Igual a 'Repetir', mas apenas no eixo vertical." } } }, "backgroundImageSize": { - "label": "", + "label": "Tamanho da imagem de fundo", "option": { "cover": { - "label": "", - "description": "" + "label": "Cobrir", + "description": "Dimensiona a imagem o menor possível para cobrir toda a janela cortando o espaço excessivo." }, "contain": { - "label": "", - "description": "" + "label": "Conter", + "description": "Dimensiona a imagem o maior possível dentro do seu contêiner, sem cortar ou esticar a imagem." } } }, "primaryColor": { - "label": "" + "label": "Cor primária" }, "secondaryColor": { - "label": "" + "label": "Cor secundária" }, "opacity": { - "label": "" + "label": "Opacidade" }, "iconColor": { "label": "" @@ -4314,11 +4361,11 @@ "label": "" }, "customCss": { - "label": "", - "description": "", + "label": "Css personalizado para este painel", + "description": "Além disso, personalize seu painel usando CSS, recomendado apenas para usuários experientes", "customClassesAlert": { - "title": "", - "description": "" + "title": "Classes personalizadas", + "description": "Você pode adicionar classes personalizadas aos itens do seu painel nas opções avançadas de cada item e usá-las no CSS personalizado acima." } }, "disableStatus": { @@ -4326,7 +4373,7 @@ "description": "" }, "columnCount": { - "label": "" + "label": "Número de colunas" }, "itemRadius": { "label": "", @@ -4340,25 +4387,25 @@ } }, "name": { - "label": "" + "label": "Nome" }, "isPublic": { - "label": "", - "description": "" + "label": "Público", + "description": "Painéis públicos são acessíveis a todos, mesmo sem uma conta." } }, "content": { - "metaTitle": "" + "metaTitle": "Painel {boardName}" }, "setting": { - "title": "", + "title": "Configurações para o painel {boardName}", "section": { "general": { - "title": "", - "unrecognizedLink": "" + "title": "Geral", + "unrecognizedLink": "O link fornecido não é reconhecido e não será pré-visualizado, mas ainda pode funcionar." }, "layout": { - "title": "", + "title": "Layout", "responsive": { "title": "", "action": { @@ -4367,72 +4414,72 @@ } }, "background": { - "title": "" + "title": "Fundo" }, "appearance": { "title": "" }, "customCss": { - "title": "" + "title": "Css personalizado" }, "behavior": { "title": "" }, "access": { - "title": "", + "title": "Controle de acesso", "permission": { "item": { "view": { - "label": "" + "label": "Visualizar painel" }, "modify": { - "label": "" + "label": "Modificar painel" }, "full": { - "label": "" + "label": "Acesso total" } } } }, "dangerZone": { - "title": "", + "title": "Zona de perigo", "action": { "rename": { - "label": "", - "description": "", - "button": "", + "label": "Renomear painel", + "description": "Alterar o nome quebrará quaisquer links para este painel.", + "button": "Alterar nome", "modal": { - "title": "" + "title": "Renomear painel" } }, "visibility": { - "label": "", + "label": "Alterar visibilidade do painel", "description": { - "public": "", - "private": "" + "public": "Este painel está público atualmente.", + "private": "Este painel está privado atualmente." }, "button": { - "public": "", - "private": "" + "public": "Tornar privado", + "private": "Tornar público" }, "confirm": { "public": { - "title": "", - "description": "" + "title": "Tornar painel privado", + "description": "Tem certeza de que deseja tornar este painel privado? Isso ocultará o painel do público. Os links para usuários convidados serão quebrados." }, "private": { - "title": "", - "description": "" + "title": "Tornar painel público", + "description": "Tem certeza de que deseja tornar este painel público? Isso tornará o painel acessível a todos." } } }, "delete": { - "label": "", - "description": "", - "button": "", + "label": "Excluir este painel", + "description": "Depois de excluir um painel, não há como voltar atrás. Por favor, tenha certeza.", + "button": "Excluir este painel", "confirm": { - "title": "", - "description": "" + "title": "Excluir painel", + "description": "Tem certeza de que deseja excluir este painel? Isso excluirá permanentemente o painel e todo o seu conteúdo." } } } @@ -4487,15 +4534,15 @@ } }, "management": { - "metaTitle": "", + "metaTitle": "Gerenciamento", "title": { - "morning": "", - "afternoon": "", - "evening": "" + "morning": "Bom dia, {username}", + "afternoon": "Boa tarde, {username}", + "evening": "Boa noite, {username}" }, "notFound": { - "title": "", - "text": "" + "title": "Não encontrado", + "text": "Não foi possível encontrar o recurso solicitado" }, "error": { "title": "", @@ -4504,63 +4551,63 @@ }, "navbar": { "items": { - "home": "", - "boards": "", - "apps": "", - "integrations": "", + "home": "Início", + "boards": "Painéis", + "apps": "Aplicativos", + "integrations": "Integrações", "customWidgets": "", - "searchEngies": "", - "medias": "", + "searchEngies": "Mecanismos de busca", + "medias": "Mídias", "users": { - "label": "", + "label": "Usuários", "items": { - "manage": "", - "invites": "", - "groups": "" + "manage": "Gerenciar", + "invites": "Convites", + "groups": "Grupos" } }, "tools": { - "label": "", + "label": "Ferramentas", "items": { - "docker": "", + "docker": "Docker", "kubernetes": "", - "logs": "", + "logs": "Logs", "api": "", "certificates": "", - "tasks": "", - "backup": "" + "tasks": "Tarefas", + "backup": "Backup" } }, - "settings": "", + "settings": "Configurações", "help": { - "label": "", + "label": "Ajuda", "items": { - "documentation": "", - "submitIssue": "", - "discord": "", - "sourceCode": "" + "documentation": "Documentação", + "submitIssue": "Enviar um problema", + "discord": "Discord da comunidade", + "sourceCode": "Código fonte" } }, - "about": "" + "about": "Sobre" } }, "page": { "home": { "statistic": { - "board": "", - "user": "", - "invite": "", - "integration": "", - "app": "", - "group": "", + "board": "Painéis", + "user": "Usuários", + "invite": "Convites", + "integration": "Integrações", + "app": "Aplicativos", + "group": "Grupos", "searchEngine": "", "media": "" }, "statisticLabel": { - "boards": "", - "resources": "", - "authentication": "", - "authorization": "" + "boards": "Painéis", + "resources": "Recursos", + "authentication": "Autenticação", + "authorization": "Autorização" }, "heroBanner": { "title": "", @@ -4568,22 +4615,22 @@ } }, "board": { - "title": "", + "title": "Seus painéis", "action": { "new": { - "label": "" + "label": "Novo painel" }, "open": { - "label": "" + "label": "Abrir painel" }, "settings": { - "label": "" + "label": "Configurações" }, "setHomeBoard": { - "label": "", + "label": "Definir como painel inicial", "badge": { - "label": "", - "tooltip": "" + "label": "Início", + "tooltip": "Este painel será exibido como seu painel inicial" } }, "setMobileHomeBoard": { @@ -4597,41 +4644,41 @@ "label": "" }, "delete": { - "label": "", + "label": "Excluir permanentemente", "confirm": { - "title": "", - "description": "" + "title": "Excluir painel", + "description": "Tem certeza de que deseja excluir o painel {name}?" } } }, "visibility": { - "public": "", - "private": "" + "public": "Este painel é público", + "private": "Este painel é privado" }, "noResults": { - "title": "" + "title": "Nenhum quadro ainda" }, "modal": { "createBoard": { "field": { "name": { - "label": "" + "label": "Nome" } } } } }, "media": { - "includeFromAllUsers": "" + "includeFromAllUsers": "Incluir mídia de todos os usuários" }, "user": { - "back": "", - "fieldsDisabledExternalProvider": "", + "back": "Voltar para usuários", + "fieldsDisabledExternalProvider": "Alguns campos estão desabilitados porque são gerenciados por um provedor de autenticação externo.", "setting": { "general": { - "title": "", + "title": "Geral", "item": { - "language": "", + "language": "Idioma e região", "board": { "title": "", "type": { @@ -4640,113 +4687,113 @@ } }, "search": "", - "firstDayOfWeek": "", - "accessibility": "", + "firstDayOfWeek": "Primeiro dia da semana", + "accessibility": "Acessibilidade", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Tours de Integração", + "description": "Redefina os tours de integração para vê-los novamente na sua próxima visita à área de gerenciamento ou ao painel.", + "reset": "Redefinir tours de integração", "resetSuccess": { - "title": "", - "message": "" + "title": "Tours redefinidos", + "message": "Os tours de integração serão exibidos novamente na sua próxima visita" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Concluído", + "notStarted": "Não iniciado" }, "name": { - "management": "", - "dashboard": "" + "management": "Gerenciamento", + "dashboard": "Painel" } } } }, "security": { - "title": "" + "title": "Segurança" }, "board": { - "title": "" + "title": "Painéis" } }, "list": { - "metaTitle": "", - "title": "" + "metaTitle": "Gerenciar usuários", + "title": "Usuários" }, "edit": { - "metaTitle": "" + "metaTitle": "Editar usuário {username}" }, "create": { - "metaTitle": "", - "title": "", + "metaTitle": "Criar usuário", + "title": "Criar novo usuário", "step": { "personalInformation": { - "label": "" + "label": "Informações pessoais" }, "security": { - "label": "" + "label": "Segurança" }, "groups": { - "label": "", - "title": "", - "description": "" + "label": "Grupos", + "title": "Selecione todos os grupos dos quais o usuário deve ser membro", + "description": "O grupo {everyoneGroup} é atribuído a todos os usuários e não pode ser removido." }, "review": { - "label": "" + "label": "Revisão" }, "completed": { - "title": "" + "title": "Usuário criado" }, "error": { - "title": "" + "title": "Falha na criação do usuário" } }, "action": { - "createAnother": "", - "back": "" + "createAnother": "Criar outro usuário", + "back": "Voltar à lista de usuários" } }, "invite": { - "title": "", + "title": "Gerenciar convites de usuários", "action": { "new": { - "title": "", - "description": "" + "title": "Novo convite", + "description": "Após a expiração, um convite não será mais válido e o destinatário do convite não poderá criar uma conta." }, "copy": { - "title": "", - "description": "", - "link": "", - "button": "" + "title": "Copiar convite", + "description": "Seu convite foi gerado. Após o fechamento deste modal, você não poderá mais copiar este link. Se você não desejar mais convidar essa pessoa, poderá excluir este convite a qualquer momento.", + "link": "Link do convite", + "button": "Copiar e fechar" }, "delete": { - "title": "", - "description": "" + "title": "Excluir convite", + "description": "Tem certeza de que deseja excluir este convite? Os usuários com este link não poderão mais criar uma conta usando esse link." } }, "field": { "id": { - "label": "" + "label": "ID" }, "creator": { - "label": "" + "label": "Criador" }, "expirationDate": { - "label": "" + "label": "Data de expiração" }, "token": { - "label": "" + "label": "Token" } } } }, "group": { - "back": "", + "back": "Voltar para grupos", "setting": { "general": { - "title": "", - "owner": "", - "ownerOfGroup": "", - "ownerOfGroupDeleted": "" + "title": "Geral", + "owner": "Proprietário", + "ownerOfGroup": "Proprietário deste grupo", + "ownerOfGroupDeleted": "O proprietário deste grupo foi excluído. Atualmente não possui proprietário." }, "setting": { "title": "", @@ -4756,62 +4803,62 @@ } }, "members": { - "title": "", - "search": "", - "notFound": "" + "title": "Membros", + "search": "Encontrar um membro", + "notFound": "Nenhum membro encontrado" }, "permissions": { - "title": "", + "title": "Permissões", "form": { - "unsavedChanges": "" + "unsavedChanges": "Você tem alterações não salvas!" } } } }, "settings": { - "title": "", + "title": "Configurações", "notification": { "success": { - "message": "" + "message": "Configurações salvas com sucesso" }, "error": { - "message": "" + "message": "Falha ao salvar configurações" } }, "section": { "analytics": { - "title": "", + "title": "Análises", "general": { "title": "", "text": "" } }, "crawlingAndIndexing": { - "title": "", - "warning": "", + "title": "Rastreamento e indexação", + "warning": "Habilitar ou desabilitar qualquer configuração aqui afetará significativamente como os mecanismos de busca indexam e rastreiam sua página. Qualquer configuração é uma solicitação e cabe ao rastreador aplicar essas configurações. Qualquer modificação pode levar vários dias ou semanas para ser aplicada. Algumas configurações podem ser específicas do mecanismo de busca.", "noIndex": { - "title": "", - "text": "" + "title": "Não indexar", + "text": "Não indexar o site nos mecanismos de busca e não mostrá-lo em nenhum resultado de pesquisa" }, "noFollow": { - "title": "", - "text": "" + "title": "Não seguir", + "text": "Não seguir nenhum link durante a indexação. Desabilitar isso fará com que os rastreadores tentem seguir todos os links no Homarr." }, "noTranslate": { - "title": "", - "text": "" + "title": "Não traduzir", + "text": "Quando o idioma do site provavelmente não é o que o usuário deseja ler, o Google mostrará um link de tradução nos resultados da pesquisa" }, "noSiteLinksSearchBox": { - "title": "", - "text": "" + "title": "Sem caixa de pesquisa de links do site", + "text": "O Google criará uma caixa de pesquisa com os links rastreados, juntamente com outros links diretos. Habilitar isso solicitará ao Google que desabilite essa caixa." } }, "board": { - "title": "", + "title": "Painéis", "homeBoard": { - "label": "", + "label": "Painel inicial global", "mobileLabel": "", - "description": "" + "description": "Apenas painéis públicos estão disponíveis para seleção" }, "status": { "title": "", @@ -4840,42 +4887,42 @@ } }, "appearance": { - "title": "", + "title": "Aparência", "defaultColorScheme": { - "label": "", + "label": "Esquema de cores padrão", "options": { - "auto": "", - "light": "", - "dark": "" + "auto": "Automático", + "light": "Claro", + "dark": "Escuro" } } }, "culture": { - "title": "", + "title": "Cultura", "defaultLocale": { - "label": "" + "label": "Idioma padrão" } } } }, "tool": { "tasks": { - "title": "", + "title": "Tarefas", "status": { - "idle": "", - "running": "", - "error": "", + "idle": "Ocioso", + "running": "Em execução", + "error": "Erro", "disabled": "" }, "job": { "iconsUpdater": { - "label": "" + "label": "Atualizador de ícones" }, "analytics": { - "label": "" + "label": "Análises" }, "ping": { - "label": "" + "label": "Pings" } }, "interval": { @@ -4951,23 +4998,23 @@ } }, "api": { - "title": "", + "title": "API", "modal": { "createApiToken": { - "title": "", - "description": "", - "button": "" + "title": "Token de API criado", + "description": "O token de API foi criado. Tenha cuidado, este token é criptografado no banco de dados e nunca será transferido novamente para você. Se você perder este token, não poderá mais recuperar este token específico.", + "button": "Copiar e fechar" } }, "tab": { "documentation": { - "label": "" + "label": "Documentação" }, "apiKey": { - "label": "", - "title": "", + "label": "Autenticação", + "title": "Chaves de API", "button": { - "createApiToken": "" + "createApiToken": "Criar token de API" }, "modal": { "delete": { @@ -4977,8 +5024,8 @@ }, "table": { "header": { - "id": "", - "createdBy": "", + "id": "ID", + "createdBy": "Criado por", "actions": "" } } @@ -5075,144 +5122,144 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Backup Completo do Banco de Dados", + "metaTitle": "Backup e Restauração", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Exportar Banco de Dados", + "description": "Baixe um backup completo do seu banco de dados SQLite incluindo todas as configurações, usuários, painéis e segredos de integração criptografados. O backup é compactado como um arquivo ZIP com a chave de criptografia e metadados.", + "button": "Baixar Backup", + "error": "Falha na exportação", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Exportação de dados sensíveis", + "warningTitle": "Esta exportação contém todo o seu banco de dados.", + "warningBody": "O backup inclui todos os usuários, segredos de integração (criptografados), chaves de API, configurações de painéis e dados de aplicativos. Armazene o arquivo exportado com segurança e não o compartilhe.", + "typePrompt": "Digite \"{phrase}\" para continuar", + "submit": "Exportar Banco de Dados", + "cancel": "Cancelar" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Restaurar Banco de Dados", + "description": "Carregue um backup ZIP exportado anteriormente para restaurar seu banco de dados. Isso substituirá todo o seu banco de dados. Se o backup foi criado com uma chave de criptografia diferente, os segredos serão automaticamente re-criptografados.", + "warning": "Restaurar um backup substituirá completamente seu banco de dados atual e reiniciará o aplicativo. Esta ação não pode ser desfeita.", "dropzone": { - "title": "", - "description": "" + "title": "Solte seu backup ZIP aqui ou clique para navegar", + "description": "Somente arquivos .zip de um backup SQLite do Homarr são aceitos" }, - "changeFile": "", - "button": "", + "changeFile": "Alterar arquivo", + "button": "Restaurar Banco de Dados", "success": { - "title": "", - "message": "" + "title": "Restauração Concluída", + "message": "O banco de dados foi restaurado com sucesso. O aplicativo está reiniciando..." }, - "error": "" + "error": "Falha na importação" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Conteúdo do Backup", + "exported": "Exportado em {date}", + "loading": "Analisando arquivo de backup...", + "errorTitle": "Erro na Pré-visualização", + "entity": "Entidade", + "count": "Contagem", + "boards": "Painéis", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Painéis", + "user": "Usuários", + "app": "Aplicativos", + "integration": "Integrações", + "item": "Widgets", + "media": "Mídia", + "search_engine": "Mecanismos de Pesquisa" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Falha ao analisar arquivo de backup", + "invalidMissingMetadata": "Backup inválido: metadata.json ausente", + "invalidMissingDb": "Backup inválido: db.sqlite ausente" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Solte seu backup ZIP aqui", + "description": "Aceita arquivos .zip de um backup SQLite do Homarr (máx. 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analisando backup...", + "changeFile": "Alterar arquivo", + "continueToRestore": "Continuar para restauração", + "tryAgain": "Tentar novamente", + "analysisError": "Erro de Análise", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Conteúdo do Backup", + "exported": "Exportado em {date}", + "entity": "Entidade", + "count": "Contagem", + "boards": "Painéis", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Painéis", + "user": "Usuários", + "app": "Aplicativos", + "integration": "Integrações", + "item": "Widgets", + "media": "Mídia", + "search_engine": "Mecanismos de Pesquisa" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migração aplicada", + "migrationsAppliedPlural": "{count} migrações aplicadas", + "migrationsOlderVersion": "Este backup era de uma versão mais antiga do Homarr. {count} migração de esquema foi aplicada para atualizá-lo.", + "migrationsOlderVersionPlural": "Este backup era de uma versão mais antiga do Homarr. {count} migrações de esquema foram aplicadas para atualizá-lo.", + "migrationsUpToDate": "Esquema do banco de dados está atualizado ({count} migrações aplicadas)", + "upToDate": "Atualizado", + "migrationsPending": "{count} pendentes" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Aplicando migrações ({current}/{total})", + "migrationLabel": "Migração {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Ação destrutiva", + "warningTitle": "Isso substituirá permanentemente todo o seu banco de dados.", + "warningBody": "Todos os painéis, usuários, aplicativos, integrações, configurações e sessões atuais serão perdidos. Esta ação não pode ser desfeita. O aplicativo reiniciará após a restauração.", + "typePrompt": "Digite \"{phrase}\" para continuar", + "cancel": "Cancelar", + "submit": "Restaurar Banco de Dados" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Restaurando banco de dados...", + "extracting": "Extraindo arquivo de backup", + "migrating": "Aplicando migrações de banco de dados", + "encrypting": "Re-criptografando segredos de integração", + "swapping": "Substituindo arquivo de banco de dados", + "restarting": "Reiniciando servidor" }, "complete": { - "title": "", - "message": "" + "title": "Restauração Concluída", + "message": "O banco de dados foi restaurado com sucesso. O servidor está reiniciando — por favor, atualize a página em alguns segundos." }, "failed": { - "title": "" + "title": "Falha na Restauração" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Backup inválido: metadata.json ausente", + "invalidMissingDb": "Backup inválido: db.sqlite ausente", + "analyzeError": "Falha ao analisar backup" } } }, "about": { - "version": "", - "text": "", + "version": "Versão {version}", + "text": "O Homarr é um projeto de código aberto impulsionado pela comunidade e mantido por voluntários. Graças a essas pessoas, o Homarr tem sido um projeto em crescimento desde 2021. Nossa equipe trabalha remotamente de vários países diferentes no Homarr, em seu tempo livre e sem remuneração.", "accordion": { "contributors": { - "title": "", - "subtitle": "" + "title": "Contribuidores", + "subtitle": "{count} mantendo código e o Homarr" }, "translators": { - "title": "", - "subtitle": "" + "title": "Tradutores", + "subtitle": "{count} contribuindo com traduções em muitos idiomas" }, "sponsors": { "title": "", "subtitle": "" }, "libraries": { - "title": "", - "subtitle": "" + "title": "Bibliotecas", + "subtitle": "{count} usadas no código do Homarr" }, "hotkeys": { "title": "", @@ -5234,32 +5281,32 @@ } }, "docker": { - "title": "", + "title": "Contêineres", "table": { - "updated": "", + "updated": "Atualizado {when}", "refresh": { "lastUpdated": "" }, "search": "", - "selected": "", + "selected": "{selectCount} de {totalCount} contêineres selecionados", "footer": "", "totalCpu": "", "totalMemory": "" }, "field": { "name": { - "label": "" + "label": "Nome" }, "state": { - "label": "", + "label": "Estado", "option": { - "created": "", - "running": "", - "paused": "", - "restarting": "", - "exited": "", - "removing": "", - "dead": "" + "created": "Criado", + "running": "Em execução", + "paused": "Pausado", + "restarting": "Reiniciando", + "exited": "Finalizado", + "removing": "Removendo", + "dead": "Morto" } }, "stats": { @@ -5271,85 +5318,86 @@ } }, "containerImage": { - "label": "" + "label": "Imagem" }, "ports": { - "label": "" + "label": "Portas" }, "host": { - "label": "" + "label": "Host" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Exibir logs", "page": { - "title": "" + "title": "Logs de {name}" } }, "start": { - "label": "", + "label": "Iniciar", "notification": { "success": { - "title": "", - "message": "" + "title": "Contêineres iniciados", + "message": "Os contêineres foram iniciados com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Contêineres não iniciados", + "message": "Os contêineres não puderam ser iniciados" } } }, "stop": { - "label": "", + "label": "Parar", "notification": { "success": { - "title": "", - "message": "" + "title": "Contêineres parados", + "message": "Os contêineres foram parados com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Contêineres não parados", + "message": "Os contêineres não puderam ser parados" } } }, "restart": { - "label": "", + "label": "Reiniciar", "notification": { "success": { - "title": "", - "message": "" + "title": "Contêineres reiniciados", + "message": "Os contêineres foram reiniciados com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Contêineres não reiniciados", + "message": "Os contêineres não puderam ser reiniciados" } } }, "remove": { - "label": "", + "label": "Remover", + "confirm": "", "notification": { "success": { - "title": "", - "message": "" + "title": "Contêineres removidos", + "message": "Os contêineres foram removidos com sucesso" }, "error": { - "title": "", - "message": "" + "title": "Contêineres não removidos", + "message": "Os contêineres não puderam ser removidos" } } }, "refresh": { - "label": "", + "label": "Atualizar", "notification": { "success": { - "title": "", - "message": "" + "title": "Contêineres atualizados", + "message": "Agora você está visualizando os dados mais recentes" }, "error": { - "title": "", - "message": "" + "title": "Contêineres não atualizados", + "message": "Algo deu errado ao atualizar os contêineres" } } }, @@ -5616,68 +5664,68 @@ } }, "permission": { - "title": "", + "title": "Permissões", "userSelect": { - "title": "" + "title": "Adicionar permissão de usuário" }, "groupSelect": { - "title": "" + "title": "Adicionar permissão de grupo" }, "tab": { - "user": "", - "group": "", - "inherited": "" + "user": "Usuários", + "group": "Grupos", + "inherited": "Grupos herdados" }, "field": { "user": { - "label": "" + "label": "Usuário" }, "group": { - "label": "" + "label": "Grupo" }, "permission": { - "label": "" + "label": "Permissão" } }, "action": { - "saveUser": "", - "saveGroup": "" + "saveUser": "Salvar permissão de usuário", + "saveGroup": "Salvar permissão de grupo" } }, "navigationStructure": { "manage": { - "label": "", + "label": "Gerenciar", "boards": { - "label": "" + "label": "Painéis" }, "integrations": { - "label": "", + "label": "Integrações", "edit": { - "label": "" + "label": "Editar" }, "new": { - "label": "" + "label": "Novo" } }, "search-engines": { - "label": "", + "label": "Mecanismos de busca", "new": { - "label": "" + "label": "Novo" }, "edit": { - "label": "" + "label": "Editar" } }, "medias": { - "label": "" + "label": "Mídias" }, "apps": { - "label": "", + "label": "Aplicativos", "new": { - "label": "" + "label": "Novo" }, "edit": { - "label": "" + "label": "Editar" } }, "custom-widgets": { @@ -5693,29 +5741,29 @@ } }, "users": { - "label": "", + "label": "Usuários", "create": { - "label": "" + "label": "Criar" }, - "general": "", - "security": "", - "board": "", + "general": "Geral", + "security": "Segurança", + "board": "Painéis", "groups": { - "label": "" + "label": "Grupos" }, "invites": { - "label": "" + "label": "Convites" } }, "tools": { - "label": "", + "label": "Ferramentas", "tasks": { "label": "" }, "docker": { - "label": "", + "label": "Docker", "logs": { - "label": "" + "label": "Logs" } }, "kubernetes": { @@ -5746,7 +5794,7 @@ } }, "logs": { - "label": "" + "label": "Logs" }, "certificates": { "label": "", @@ -5756,32 +5804,32 @@ } }, "settings": { - "label": "" + "label": "Configurações" }, "about": { - "label": "" + "label": "Sobre" } } }, "search": { - "placeholder": "", - "nothingFound": "", + "placeholder": "Buscar por qualquer coisa", + "nothingFound": "Nada encontrado", "error": { - "fetch": "" + "fetch": "Ocorreu um erro ao buscar os dados" }, "mode": { "appIntegrationBoard": { - "help": "", + "help": "Buscar por aplicativos, integrações ou painéis", "group": { "app": { - "title": "", + "title": "Aplicativos", "children": { "action": { "open": { - "label": "" + "label": "Abrir url do aplicativo" }, "edit": { - "label": "" + "label": "Editar aplicativo" } }, "detail": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Alternar modo de aparência", "light": "", "dark": "" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Preferências", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Selecione uma preferência para alterar", + "backHint": "Pressione Backspace ou use o botão voltar para retornar", + "backAction": "Voltar" } }, "notification": { "error": { - "message": "" + "message": "Não foi possível atualizar a preferência" } }, "option": { "preferences": { - "label": "" + "label": "Abrir preferências" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Ativado", + "disabled": "Desativado" }, "board": { - "none": "", - "unavailable": "" + "none": "Nenhum", + "unavailable": "Atualmente selecionado (indisponível)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Nenhum", + "unavailable": "Atualmente selecionado (indisponível)" }, "colorScheme": { - "label": "", + "label": "Esquema de cores", "children": { "detail": { - "title": "" + "title": "Selecione seu esquema de cores" } } }, "locale": { - "label": "", + "label": "Idioma", "children": { "detail": { - "title": "" + "title": "Selecione seu idioma preferido" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Mecanismo de pesquisa padrão", "children": { "detail": { - "title": "" + "title": "Selecione seu mecanismo de pesquisa padrão" } } }, "openSearchInNewTab": { - "label": "", + "label": "Abrir resultados da pesquisa em nova guia", "children": { "detail": { - "title": "" + "title": "Abrir resultados da pesquisa em nova guia" } } }, "ddgBangs": { - "label": "", + "label": "Ativar bangs do DuckDuckGo", "children": { "detail": { - "title": "" + "title": "Ativar bangs do DuckDuckGo" } } }, "firstDayOfWeek": { - "label": "", + "label": "Primeiro dia da semana", "children": { "detail": { - "title": "" + "title": "Selecione o primeiro dia da semana" } } }, "homeBoardId": { - "label": "", + "label": "Painel inicial", "children": { "detail": { - "title": "" + "title": "Selecione seu painel inicial" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Painel inicial móvel", "children": { "detail": { - "title": "" + "title": "Selecione seu painel inicial móvel" } } }, "pingIconsEnabled": { - "label": "", + "label": "Usar ícones para pings", "children": { "detail": { - "title": "" + "title": "Usar ícones para pings" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Abrir página completa de preferências" } } } } }, "media": { - "help": "", + "help": "Buscar filmes ou séries para solicitar", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Filmes e séries" }, "action": { "search": { - "label": "", - "description": "", + "label": "Buscar filmes ou séries", + "description": "Comece a digitar para pesquisar suas integrações de solicitação de mídia", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Adicione uma integração Overseerr, Jellyseerr ou Seerr para ativar a pesquisa de mídia.", + "scoped": "Este widget não possui uma integração de solicitação de mídia acessível." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Disponível", + "partiallyAvailable": "Parcial", + "processing": "Processando", + "requested": "Solicitado", + "pending": "Solicitado" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Dica: você também pode usar qualquer bang do DuckDuckGo aqui, por exemplo, !algo", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Buscar \"{query}\" com {label}", + "pressEnterToOpen": "Pressione Enter para abrir", + "engineSelected": "{label} selecionado (!{bang})", + "typeQueryToContinue": "Digite sua consulta de pesquisa para continuar", + "emptyBangHint": "Digite um bang, por exemplo, !yt, depois pressione Espaço para selecionar" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Status" }, "status": { - "requested": "" + "requested": "Solicitado" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Leia a documentação", + "next": "Próximo", + "prev": "Voltar", + "done": "Concluído", + "skip": "Pular tour", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Bem-vindo ao Homarr!", + "description": "Este é o seu centro de controle. A partir daqui você gerencia painéis, aplicativos, integrações, usuários e configurações do servidor. Vamos fazer um tour por cada seção." }, "boardsList": { - "title": "", - "description": "" + "title": "Seus Painéis", + "description": "Aqui estão todos os seus painéis. Cada painel tem seu próprio layout, plano de fundo e configurações de acesso. Você pode ver quem criou cada um e se é público ou privado." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Criar um Painel", + "description": "Clique aqui para criar um novo painel ou importar um de uma instalação anterior do Homarr. Cada painel recebe sua própria URL que você pode compartilhar." }, "appsList": { - "title": "", - "description": "" + "title": "Seus Aplicativos", + "description": "Estes são todos os aplicativos que você adicionou — links para seus serviços auto-hospedados. Cada aplicativo tem um ícone, verificação de saúde opcional e um selo de status no painel." }, "appsCreate": { - "title": "", - "description": "" + "title": "Adicionar um Aplicativo", + "description": "Registre um novo serviço aqui. Dê a ele um nome, URL e ícone — ele aparecerá como um bloco nos seus painéis com monitoramento de status ao vivo." }, "integrationsList": { - "title": "", - "description": "" + "title": "Suas Integrações", + "description": "Estes são os serviços conectados ao Homarr — Sonarr, Radarr, Plex, Jellyfin e mais de 50 outros. Todas as credenciais são criptografadas em repouso." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Adicionar uma Integração", + "description": "Conecte um novo serviço aqui. Escolha o tipo, insira a URL e a chave de API — o Homarr valida a conexão antes de salvar." }, "usersList": { - "title": "", - "description": "" + "title": "Seus Usuários", + "description": "Veja todos que têm acesso. Organize os usuários em grupos e controle quem pode visualizar ou editar cada painel." }, "usersCreate": { - "title": "", - "description": "" + "title": "Criar um Usuário", + "description": "Adicione uma nova conta de usuário aqui. Você também pode usar links de convite para facilitar a integração. Esse é o tour — você está pronto!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Este é o seu painel", + "description": "Um painel de arrastar e soltar onde você organiza aplicativos e widgets. Pressione Ctrl+K a qualquer momento para pesquisar aplicativos, painéis e ações." }, "editMode": { - "title": "", - "description": "" + "title": "Modo de Edição", + "description": "Clique aqui para entrar no modo de edição. Você pode então adicionar widgets, aplicativos e seções — arraste para reposicionar, redimensione com a alça no canto. Clique novamente para salvar suas alterações." }, "settings": { - "title": "", - "description": "" + "title": "Configurações do Painel", + "description": "Altere o nome, colunas, plano de fundo, cores deste painel e quem pode acessá-lo. Cada painel pode ser público ou privado." }, "switcher": { - "title": "", - "description": "" + "title": "Alternar Painéis", + "description": "Salte entre painéis. Crie painéis separados para diferentes finalidades — mídia, rede, por usuário ou o que você quiser." }, "userMenu": { - "title": "", - "description": "" + "title": "Seu Perfil", + "description": "Altere seu esquema de cores, idioma, painel inicial e preferências. Você também pode acessar a área de gerenciamento a partir daqui." } } } diff --git a/packages/translation/src/lang/ro.json b/packages/translation/src/lang/ro.json index 2cb1ad62b..86ad0b371 100644 --- a/packages/translation/src/lang/ro.json +++ b/packages/translation/src/lang/ro.json @@ -177,13 +177,13 @@ }, "password": { "label": "Parola", - "suggestionsTitle": "", + "suggestionsTitle": "Sugestii pentru parolă", "suggestion": { - "length": "", + "length": "Cel puțin 8 caractere", "lowercase": "Să includă litere mici", "uppercase": "Să includă litere mari", "number": "Să includă cifre", - "special": "" + "special": "Include un simbol special" } }, "passwordConfirm": { @@ -209,7 +209,7 @@ "label": "" }, "ddgBangs": { - "label": "" + "label": "Activează bang-urile DuckDuckGo" } }, "error": { @@ -302,10 +302,10 @@ "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "Bang-urile DuckDuckGo au fost activate cu succes" }, "error": { - "message": "" + "message": "Nu s-a putut activa bang-urile DuckDuckGo" } } }, @@ -987,47 +987,47 @@ "placeholder": "" }, "apiKeySettings": { - "label": "" + "label": "Obține cheia API" } }, "action": { "create": "" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widget-uri", + "noWidgets": "Niciun widget", + "detected": "Detectat prin Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Media", + "calendar": "Calendar", + "mediaSearch": "Căutare", + "mediaRelease": "Lansări", + "mediaRequest": "Solicitări", + "downloadClient": "Descărcări", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Diverse", + "smartHomeServer": "Casă inteligentă", + "indexerManager": "Indexator", + "healthMonitoring": "Monitorizare", + "search": "Căutare", + "mediaTranscoding": "Transcodare", + "networkController": "Rețea", + "releasesProvider": "Lansări", + "notifications": "Notificări", + "firewall": "Firewall", + "timetable": "Orar", + "photoService": "Fotografii", + "documents": "Documente", + "notes": "Notițe", + "mediaMonitoring": "Monitorizare", + "speedtest": "Test de viteză", + "analytics": "Analiză", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Bibliotecă media", + "uptimeMonitoring": "Monitorizare uptime" }, "testConnection": { "action": { @@ -1310,8 +1310,8 @@ "newLabel": "" }, "slug": { - "label": "", - "newLabel": "" + "label": "Slug pagină de stare", + "newLabel": "Nou slug pagină de stare" } } }, @@ -1321,15 +1321,15 @@ "full": "" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Server auto-găzduit de audiobooks și podcasturi" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Server auto-găzduit de streaming muzical cu compatibilitate API Subsonic" }, "uptimeKuma": { - "name": "", + "name": "Uptime Kuma", "description": "", "secret": { "slug": { @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Niciun fișier media încărcat" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Adaugă", "apply": "Aplică", "backToOverview": "", - "skip": "", + "skip": "Omite", "change": "", "create": "Creează", "createAnother": "", @@ -1431,8 +1431,8 @@ "checkLogs": "", "tryAgain": "Încearcă din nou", "loading": "", - "show": "", - "hide": "" + "show": "Arată", + "hide": "Ascunde" }, "here": "", "iconPicker": { @@ -1444,7 +1444,7 @@ }, "colorScheme": { "options": { - "auto": "", + "auto": "Auto", "light": "", "dark": "" } @@ -1602,7 +1602,7 @@ "label": { "create": "", "changePosition": "Schimbă locația", - "settings": "" + "settings": "Setări" } }, "openAllInNewTabs": { @@ -1659,11 +1659,11 @@ "edit": { "title": "", "tab": { - "widget": "", - "app": "" + "widget": "Editează widget-ul", + "app": "Editează aplicația" }, "app": { - "propagationNotice": "" + "propagationNotice": "Modificările acestei aplicații se vor aplica în toate locurile unde este utilizată pe toate planșele." }, "advancedOptions": { "label": "", @@ -1776,7 +1776,7 @@ "label": "" }, "withBorder": { - "label": "" + "label": "Arată chenarul" }, "items": { "label": "", @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Monitorizează starea dispozitivelor UPS printr-un server NUT", "option": { "showBattery": { - "label": "" + "label": "Arată bateria" }, "showLoad": { - "label": "" + "label": "Arată încărcarea" }, "showVoltage": { - "label": "" + "label": "Arată tensiunea" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Online", + "onBattery": "Pe baterie", + "lowBattery": "Baterie descărcată", + "charging": "Încărcare", + "unknown": "Necunoscut" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Autonomie", + "load": "Încărcare", + "input": "Intrare", + "output": "Ieșire" }, "error": { - "internalServerError": "" + "internalServerError": "Nu s-au putut prelua datele UPS" } }, "tracearr": { @@ -2584,77 +2595,77 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Ultimele 30 de zile", + "month": "Luna aceasta", + "lastMonth": "Luna trecută" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Eveniment", + "description": "Afișează totalul aparițiilor unui anumit eveniment", + "placeholder": "Selectați un eveniment", + "loading": "Se încarcă evenimentele...", + "noEvents": "Niciun eveniment găsit", + "none": "Niciun eveniment", + "configureWebsiteFirst": "Selectați mai întâi un site pentru a încărca evenimentele" }, "chartType": { - "label": "", - "description": "", + "label": "Tip de grafic", + "description": "Stil de afișare pentru grafic", "option": { - "bar": "", - "sparkline": "" + "bar": "Grafic cu bare", + "sparkline": "Grafic sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Stil grafic", + "description": "Cum se afișează seria de evenimente în grafic", "option": { - "grouped": "", - "overlay": "" + "grouped": "Unul lângă altul", + "overlay": "Suprapunere (subset)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Vizualizare", + "description": "Ce se afișează în corpul widget-ului", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Grafic", + "events": "Grafic evenimente", + "topPages": "Top pagini", + "topReferrers": "Top referreri" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Evenimente", + "description": "Selectați unul sau mai multe evenimente pentru grafic", + "placeholder": "Selectați evenimente...", + "loading": "Se încarcă evenimentele...", + "noEvents": "Niciun eveniment găsit", + "configureWebsiteFirst": "Selectați mai întâi un site pentru a încărca evenimentele" }, "topCount": { - "label": "", - "description": "" + "label": "Elemente de afișat", + "description": "Numărul maxim de elemente de top de afișat (max 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "evenimente", + "label": "evenimente" }, "topPages": { - "direct": "" + "direct": "Direct" }, "topReferrers": { - "direct": "" + "direct": "Direct" }, "events": { - "selectPrompt": "" + "selectPrompt": "Selectați evenimente pentru grafic" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Nicio integrare Umami configurată", + "noWebsite": "Niciun site configurat", + "noData": "Nicio dată disponibilă", + "internalServerError": "Eroare la preluarea datelor Umami" } }, "common": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "", - "noCommunications": "" + "noCommunications": "", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "" }, "id": { - "columnTitle": "" + "columnTitle": "", + "detailsTitle": "" }, "integration": { "columnTitle": "Integrare" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "", + "eta": "" }, "type": { "columnTitle": "", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "" + "globalRatio": "", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Sisteme Beszel (Tabel)", + "description": "Vizualizare tabel a tuturor sistemelor monitorizate Beszel cu coloane sortabile și indicatori de stare", "option": { "statusFilter": { - "label": "" + "label": "Filtru stare" }, "sortBy": { - "label": "" + "label": "Sortează după" }, "sortDirection": { - "label": "" + "label": "Direcție sortare" }, "showCpu": { - "label": "" + "label": "Arată CPU" }, "showMemory": { - "label": "" + "label": "Arată memoria" }, "showDisk": { - "label": "" + "label": "Arată discul" }, "showGpu": { - "label": "" + "label": "Arată GPU" }, "showLoadAvg": { - "label": "" + "label": "Arată media de încărcare" }, "showNet": { - "label": "" + "label": "Arată rețeaua" }, "showTemp": { - "label": "" + "label": "Arată temperatura" }, "showBattery": { - "label": "" + "label": "Arată bateria" }, "showServices": { - "label": "" + "label": "Arată serviciile" }, "showUptime": { - "label": "" + "label": "Arată uptime" }, "showAgent": { + "label": "Arată versiunea agentului" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Niciun sistem găsit", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Sistem", + "cpu": "CPU", + "memory": "Memorie", + "disk": "Disc", + "gpu": "GPU", + "loadAvg": "Încărcare medie", + "net": "Rețea", + "temp": "Temp", + "battery": "Bat.", + "services": "Servicii", + "uptime": "Uptime", + "agent": "Agent" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Sisteme Beszel (Grilă)", + "description": "Vizualizare grilă carduri a tuturor sistemelor monitorizate Beszel cu metrici în timp real", "option": { "statusFilter": { - "label": "" + "label": "Filtru stare" }, "showCpu": { - "label": "" + "label": "Arată CPU" }, "showMemory": { - "label": "" + "label": "Arată memoria" }, "showDisk": { - "label": "" + "label": "Arată discul" }, "showGpu": { - "label": "" + "label": "Arată GPU" }, "showLoadAvg": { - "label": "" + "label": "Arată media de încărcare" }, "showNet": { - "label": "" + "label": "Arată rețeaua" }, "showTemp": { - "label": "" + "label": "Arată temperatura" }, "showBattery": { - "label": "" + "label": "Arată bateria" }, "showServices": { - "label": "" + "label": "Arată serviciile" }, "showUptime": { - "label": "" + "label": "Arată uptime" }, "showAgent": { - "label": "" + "label": "Arată versiunea agentului" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Memorie", + "disk": "Disc", + "gpu": "GPU", + "loadAvg": "Încărcare medie", + "net": "Rețea", + "temp": "Temp", + "battery": "Bat.", + "services": "Servicii", + "uptime": "Uptime", + "agent": "Agent" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Alerte Beszel", + "description": "Vizualizează configurațiile și istoricul alertelor Beszel", "option": { "showHistory": { - "label": "" + "label": "Arată istoricul alertelor" }, "maxHistoryItems": { - "label": "" + "label": "Număr maxim elemente istoric" } }, - "empty": "", + "empty": "Nicio alertă configurată", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Istoric", + "resolved": "Rezolvat", "status": { - "triggered": "", - "ok": "" + "triggered": "Declanșat", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Statistici sistem Beszel", + "description": "Grafice de serie temporală pentru CPU, memorie, disc, rețea și Docker container metrics", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Perioadă de timp" }, "showCpu": { - "label": "" + "label": "Arată graficul CPU" }, "showMemory": { - "label": "" + "label": "Arată graficul memoriei" }, "showDisk": { - "label": "" + "label": "Arată graficul discului" }, "showDiskIO": { - "label": "" + "label": "Arată graficul I/O disc" }, "showNetwork": { - "label": "" + "label": "Arată graficul rețelei" }, "showDockerCpu": { - "label": "" + "label": "Arată graficul CPU Docker" }, "showDockerMemory": { - "label": "" + "label": "Arată graficul memoriei Docker" }, "showDockerNetwork": { - "label": "" + "label": "Arată graficul rețelei Docker" } }, - "selectSystem": "", + "selectSystem": "Selectează sistemul", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "Utilizare CPU", + "subtitle": "Utilizarea medie a CPU la nivel de sistem", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Utilizare memorie", + "subtitle": "Utilizare precisă la momentul înregistrării", + "series": "Utilizat", + "cache": "Cache/Tampoane" }, "disk": { - "title": "", + "title": "Utilizare disc", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "I/O disc", + "subtitle": "Debit al sistemului de fișiere rădăcină", + "read": "Citire", + "write": "Scriere" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Lățime de bandă", + "subtitle": "Trafic de rețea al interfețelor publice", + "sent": "Trimis", + "recv": "Primit" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Utilizare CPU Docker", + "subtitle": "Utilizarea medie a CPU a containerelor" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Utilizare memorie Docker", + "subtitle": "Utilizarea memoriei containerelor Docker" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "I/O rețea Docker", + "subtitle": "Trafic de rețea al containerelor Docker" } } } @@ -4528,7 +4575,7 @@ "api": "", "certificates": "", "tasks": "", - "backup": "" + "backup": "Copie de rezervă" } }, "settings": "Setări", @@ -4609,7 +4656,7 @@ "private": "" }, "noResults": { - "title": "" + "title": "Nicio planșă încă" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Prima zi a săptămâni", "accessibility": "Accesibilitate", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Tururi de inițiere", + "description": "Resetați tururile de inițiere pentru a le revedea la următoarea vizită în zona de administrare sau pe planșă.", + "reset": "Resetați tururile de inițiere", "resetSuccess": { - "title": "", - "message": "" + "title": "Tururi resetate", + "message": "Tururile de inițiere vor fi afișate din nou la următoarea vizită" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Finalizat", + "notStarted": "Neînceput" }, "name": { - "management": "", - "dashboard": "" + "management": "Administrare", + "dashboard": "Planșă" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "", "options": { - "auto": "", + "auto": "Auto", "light": "", "dark": "" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Copie de rezervă completă a bazei de date", + "metaTitle": "Copie de rezervă și restaurare", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Exportă baza de date", + "description": "Descarcă o copie de rezervă completă a bazei tale de date SQLite, incluzând toate setările, utilizatorii, planșele și secretele de integrare criptate. Copia de rezervă este împachetată ca fișier ZIP cu cheia de criptare și metadate.", + "button": "Descarcă copia de rezervă", + "error": "Export eșuat", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Export date sensibile", + "warningTitle": "Acest export conține întreaga ta bază de date.", + "warningBody": "Copia de rezervă include toți utilizatorii, secretele de integrare (criptate), cheile API, configurațiile planșelor și datele aplicațiilor. Păstrează fișierul exportat în siguranță și nu-l partaja.", + "typePrompt": "Tastați „{phrase}” pentru a continua", + "submit": "Exportă baza de date", + "cancel": "Anulează" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Restaurează baza de date", + "description": "Încarcă o copie de rezervă ZIP exportată anterior pentru a restaura baza de date. Aceasta va înlocui întreaga ta bază de date. Dacă copia de rezervă a fost creată cu o cheie de criptare diferită, secretele vor fi re-criptate automat.", + "warning": "Restaurarea unei copii de rezervă va înlocui complet baza de date curentă și va reporni aplicația. Această acțiune nu poate fi anulată.", "dropzone": { - "title": "", - "description": "" + "title": "Trage fișierul ZIP aici sau apasă pentru a căuta", + "description": "Sunt acceptate doar fișiere .zip de la o copie de rezervă SQLite Homarr" }, - "changeFile": "", - "button": "", + "changeFile": "Schimbă fișierul", + "button": "Restaurează baza de date", "success": { - "title": "", - "message": "" + "title": "Restaurare completă", + "message": "Baza de date a fost restaurată cu succes. Aplicația se repornește..." }, - "error": "" + "error": "Import eșuat" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Conținutul copiei de rezervă", + "exported": "Exportat {date}", + "loading": "Se analizează fișierul de rezervă...", + "errorTitle": "Eroare de previzualizare", + "entity": "Entitate", + "count": "Număr", + "boards": "Planșe", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Planșe", + "user": "Utilizatori", + "app": "Aplicații", + "integration": "Integrări", + "item": "Widget-uri", + "media": "Media", + "search_engine": "Motoare de căutare" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Nu s-a putut analiza fișierul de rezervă", + "invalidMissingMetadata": "Copie de rezervă invalidă: lipsește metadata.json", + "invalidMissingDb": "Copie de rezervă invalidă: lipsește db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Trage aici fișierul ZIP al copiei de rezervă", + "description": "Acceptă fișiere .zip de la o copie de rezervă SQLite Homarr (max 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Se analizează copia de rezervă...", + "changeFile": "Schimbă fișierul", + "continueToRestore": "Continuă la restaurare", + "tryAgain": "Încearcă din nou", + "analysisError": "Eroare de analiză", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Conținutul copiei de rezervă", + "exported": "Exportat {date}", + "entity": "Entitate", + "count": "Număr", + "boards": "Planșe", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Planșe", + "user": "Utilizatori", + "app": "Aplicații", + "integration": "Integrări", + "item": "Widget-uri", + "media": "Media", + "search_engine": "Motoare de căutare" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migrare aplicată", + "migrationsAppliedPlural": "{count} migrări aplicate", + "migrationsOlderVersion": "Această copie de rezervă provine de la o versiune mai veche a Homarr. {count, plural, one {A fost aplicată o migrare de schemă} few {Au fost aplicate {count} migrări de schemă} other {Au fost aplicate {count} migrări de schemă}} pentru a o aduce la zi.", + "migrationsOlderVersionPlural": "Această copie de rezervă provine de la o versiune mai veche Homarr. Au fost aplicate {count} migrări de schemă pentru a o aduce la zi.", + "migrationsUpToDate": "Schema bazei de date este actualizată ({count} migrări aplicate)", + "upToDate": "Actualizat", + "migrationsPending": "{count} în așteptare" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Se aplică migrările ({current}/{total})", + "migrationLabel": "Migrarea {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Acțiune distructivă", + "warningTitle": "Aceasta va înlocui permanent întreaga ta bază de date.", + "warningBody": "Toate planșele, utilizatorii, aplicațiile, integrările, setările și sesiunile curente vor fi pierdute. Această acțiune nu poate fi anulată. Aplicația va reporni după restaurare.", + "typePrompt": "Tastați „{phrase}” pentru a continua", + "cancel": "Anulează", + "submit": "Restaurează baza de date" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Se restaurează baza de date...", + "extracting": "Se extrage arhiva de rezervă", + "migrating": "Se aplică migrările bazei de date", + "encrypting": "Se re-criptează secretele integrărilor", + "swapping": "Se înlocuiește fișierul bazei de date", + "restarting": "Se repornește serverul" }, "complete": { - "title": "", - "message": "" + "title": "Restaurare completă", + "message": "Baza de date a fost restaurată cu succes. Serverul se repornește — vă rugăm să reîmprospătați pagina în câteva secunde." }, "failed": { - "title": "" + "title": "Restaurare eșuată" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Copie de rezervă invalidă: lipsește metadata.json", + "invalidMissingDb": "Copie de rezervă invalidă: lipsește db.sqlite", + "analyzeError": "Nu s-a putut analiza copia de rezervă" } } }, @@ -5277,15 +5324,15 @@ "label": "Porturi" }, "host": { - "label": "" + "label": "Gazdă" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Vezi jurnalele", "page": { - "title": "" + "title": "Jurnale {name}" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Elimină", + "confirm": "", "notification": { "success": { "title": "", @@ -5715,7 +5763,7 @@ "docker": { "label": "", "logs": { - "label": "" + "label": "Jurnale" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Comută modul de aspect", "light": "", "dark": "" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Preferințe", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Selectați o preferință de schimbat", + "backHint": "Apăsați Backspace sau butonul înapoi pentru a reveni", + "backAction": "Înapoi" } }, "notification": { "error": { - "message": "" + "message": "Nu s-a putut actualiza preferința" } }, "option": { "preferences": { - "label": "" + "label": "Deschide preferințele" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Activat", + "disabled": "Dezactivat" }, "board": { - "none": "", - "unavailable": "" + "none": "Niciuna", + "unavailable": "Selectat în prezent (indisponibil)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Niciunul", + "unavailable": "Selectat în prezent (indisponibil)" }, "colorScheme": { - "label": "", + "label": "Schemă de culori", "children": { "detail": { - "title": "" + "title": "Selectați schema de culori" } } }, "locale": { - "label": "", + "label": "Limbă", "children": { "detail": { - "title": "" + "title": "Selectați limba preferată" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Motor de căutare implicit", "children": { "detail": { - "title": "" + "title": "Selectați motorul de căutare implicit" } } }, "openSearchInNewTab": { - "label": "", + "label": "Deschide rezultatele căutării într-o filă nouă", "children": { "detail": { - "title": "" + "title": "Deschide rezultatele căutării într-o filă nouă" } } }, "ddgBangs": { - "label": "", + "label": "Activează bang-urile DuckDuckGo", "children": { "detail": { - "title": "" + "title": "Activează bang-urile DuckDuckGo" } } }, "firstDayOfWeek": { - "label": "", + "label": "Prima zi a săptămânii", "children": { "detail": { - "title": "" + "title": "Selectați prima zi a săptămânii" } } }, "homeBoardId": { - "label": "", + "label": "Planșa principală", "children": { "detail": { - "title": "" + "title": "Selectați planșa principală" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Planșa principală pentru mobil", "children": { "detail": { - "title": "" + "title": "Selectați planșa principală pentru mobil" } } }, "pingIconsEnabled": { - "label": "", + "label": "Folosește pictograme pentru ping-uri", "children": { "detail": { - "title": "" + "title": "Folosește pictograme pentru ping-uri" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Deschide pagina completă de preferințe" } } } } }, "media": { - "help": "", + "help": "Căutați filme sau seriale pentru a le solicita", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Filme și seriale" }, "action": { "search": { - "label": "", - "description": "", + "label": "Căutați filme sau seriale", + "description": "Începeți să tastați pentru a căuta în integrările de solicitare media", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Adăugați o integrare Overseerr, Jellyseerr sau Seerr pentru a activa căutarea media.", + "scoped": "Acest widget nu are o integrare de solicitare media accesibilă." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Disponibil", + "partiallyAvailable": "Parțial", + "processing": "În procesare", + "requested": "Solicitat", + "pending": "Solicitat" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Sfat: puteți folosi orice bang DuckDuckGo și aici, de ex. !ceva", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Caută „{query}” cu {label}", + "pressEnterToOpen": "Apăsați Enter pentru a deschide", + "engineSelected": "{label} selectat (!{bang})", + "typeQueryToContinue": "Tastați termenul de căutare pentru a continua", + "emptyBangHint": "Tastați un bang, de ex. !yt, apoi apăsați Spațiu pentru a selecta" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Stare" }, "status": { - "requested": "" + "requested": "Solicitat" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Citiți documentația", + "next": "Următorul", + "prev": "Înapoi", + "done": "Gata", + "skip": "Omite turul", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Bun venit în Homarr!", + "description": "Acesta este centrul tău de control. De aici gestionezi planșele, aplicațiile, integrările, utilizatorii și setările serverului. Haideți să facem un tur al fiecărei secțiuni." }, "boardsList": { - "title": "", - "description": "" + "title": "Planșele tale", + "description": "Aici sunt toate planșele tale. Fiecare planșă are propriul aspect, fundal și setări de acces. Poți vedea cine a creat-o și dacă este publică sau privată." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Crează o planșă", + "description": "Apasă aici pentru a crea o planșă nouă sau pentru a importa una dintr-o instalare anterioară Homarr. Fiecare planșă primește propriul URL pe care îl poți partaja." }, "appsList": { - "title": "", - "description": "" + "title": "Aplicațiile tale", + "description": "Acestea sunt toate aplicațiile pe care le-ai adăugat — link-uri către serviciile tale auto-găzduite. Fiecare aplicație are o pictogramă, opțional o verificare de stare și o insignă de stare pe planșă." }, "appsCreate": { - "title": "", - "description": "" + "title": "Adaugă o aplicație", + "description": "Înregistrează un serviciu nou aici. Dă-i un nume, URL și pictogramă — va apărea ca o piesă pe planșele tale cu monitorizare live a stării." }, "integrationsList": { - "title": "", - "description": "" + "title": "Integrările tale", + "description": "Acestea sunt serviciile conectate la Homarr — Sonarr, Radarr, Plex, Jellyfin și peste 50 altele. Toate credențialele sunt criptate în repaus." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Adaugă o integrare", + "description": "Conectează un serviciu nou aici. Alege tipul, introdu URL-ul și cheia API — Homarr validează conexiunea înainte de salvare." }, "usersList": { - "title": "", - "description": "" + "title": "Utilizatorii tăi", + "description": "Vezi toți cei care au acces. Organizează utilizatorii în grupuri și controlează cine poate vizualiza sau edita fiecare planșă." }, "usersCreate": { - "title": "", - "description": "" + "title": "Crează un utilizator", + "description": "Adaugă un cont de utilizator nou aici. Poți folosi și link-uri de invitație pentru o integrare ușoară. Acesta este turul — ești gata!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Aceasta este planșa ta", + "description": "Un panou de tip drag-and-drop unde aranjezi aplicații și widget-uri. Apasă Ctrl+K oricând pentru a căuta aplicații, planșe și acțiuni." }, "editMode": { - "title": "", - "description": "" + "title": "Mod editare", + "description": "Apasă aici pentru a intra în modul editare. Poți apoi să adaugi widget-uri, aplicații și secțiuni — trage pentru a repoziționa, redimensionează cu mânerul din colț. Apasă din nou pentru a salva modificările." }, "settings": { - "title": "", - "description": "" + "title": "Setări planșă", + "description": "Schimbă numele planșei, coloanele, fundalul, culorile și cine poate accesa. Fiecare planșă poate fi publică sau privată." }, "switcher": { - "title": "", - "description": "" + "title": "Comută planșele", + "description": "Sari între planșe. Crează planșe separate pentru scopuri diferite — media, rețea, per utilizator sau orice dorești." }, "userMenu": { - "title": "", - "description": "" + "title": "Profilul tău", + "description": "Schimbă schema de culori, limba, planșa principală și preferințele. Poți de asemenea să sari în zona de administrare de aici." } } } diff --git a/packages/translation/src/lang/ru.json b/packages/translation/src/lang/ru.json index ccd8f6b05..c48dd7d8c 100644 --- a/packages/translation/src/lang/ru.json +++ b/packages/translation/src/lang/ru.json @@ -8,9 +8,9 @@ "action": { "scratch": "Начать с нуля", "importOldmarr": "Импортировать из Homarr версии до 1.0", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Восстановить из резервной копии SQLite", + "restoreSqliteDescription": "Загрузите полную резервную копию базы данных SQLite из предыдущего экземпляра Homarr. Это восстановит все панели, пользователей, приложения, интеграции и настройки.", + "backToOptions": "← Назад к вариантам настройки" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "Настройте параметры сервера." }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Интеграции", + "subtitle": "Выберите используемые сервисы.", + "description": "Выберите интеграции, которые хотите подключить. Мы автоматически настроим панель с соответствующими виджетами.", "action": { - "continue": "", - "skip": "" + "continue": "Продолжить", + "skip": "Пропустить" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} из {total}", + "skip": "Пропустить эту интеграцию", + "finishing": "Настройка панели...", "error": { - "title": "", - "message": "" + "title": "Ошибка настройки", + "message": "Что-то пошло не так при настройке панели. Пожалуйста, попробуйте снова." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "Помощники URL", + "description": "Эти помощники пытаются угадать URL ваших сервисов. Если не сработает, просто введите адрес вручную." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Базовый URL", + "placeholder": "homelab.local или 192.168.1.1", + "hint": "Введите базовый домен или IP для автозаполнения URL интеграций", + "warning": "Установка базового URL сейчас автоматически заполнит все URL интеграций, сэкономив время при настройке", + "preview": "например, {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Поддомен", + "hostPort": "Хост:Порт" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker обнаружил {count} сервисов", + "detectedBreakdown": "{integrations} интеграций · {apps} приложений", + "summary": "Homarr обнаружил {apps} приложений, {integrations} из которых имеют встроенные интеграции", + "appBadge": "Приложение", + "appSectionLabel": "Приложения для добавления на панель (выбрано {count})", + "scanning": "Сканирование Docker...", + "scanningDescription": "Поиск запущенных контейнеров в системе" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "Пароль", - "suggestionsTitle": "", + "suggestionsTitle": "Предложения пароля", "suggestion": { "length": "Содержит не менее 8 символов", "lowercase": "Содержит строчную букву", @@ -209,7 +209,7 @@ "label": "Открыть результаты поиска в новой вкладке" }, "ddgBangs": { - "label": "" + "label": "Включить DuckDuckGo bangs" } }, "error": { @@ -302,10 +302,10 @@ "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo bangs успешно переключены" }, "error": { - "message": "" + "message": "Не удалось переключить DuckDuckGo bangs" } } }, @@ -987,47 +987,47 @@ "placeholder": "Свой URL приложения" }, "apiKeySettings": { - "label": "" + "label": "Получить API-ключ" } }, "action": { "create": "Новая интеграция" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} виджетов", + "noWidgets": "Нет виджетов", + "detected": "Обнаружено через Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Медиа", + "calendar": "Календарь", + "mediaSearch": "Поиск", + "mediaRelease": "Релизы", + "mediaRequest": "Запросы", + "downloadClient": "Загрузки", + "usenet": "Usenet", + "torrent": "Торрент", + "miscellaneous": "Разное", + "smartHomeServer": "Умный дом", + "indexerManager": "Индексатор", + "healthMonitoring": "Здоровье", + "search": "Поиск", + "mediaTranscoding": "Транскодирование", + "networkController": "Сеть", + "releasesProvider": "Релизы", + "notifications": "Уведомления", + "firewall": "Брандмауэр", + "timetable": "Расписание", + "photoService": "Фото", + "documents": "Документы", + "notes": "Заметки", + "mediaMonitoring": "Мониторинг", + "speedtest": "Тест скорости", + "analytics": "Аналитика", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Медиа-библиотека", + "uptimeMonitoring": "Мониторинг доступности" }, "testConnection": { "action": { @@ -1310,8 +1310,8 @@ "newLabel": "Новый приватный ключ" }, "slug": { - "label": "", - "newLabel": "" + "label": "Slug страницы статуса", + "newLabel": "Новый slug страницы статуса" } } }, @@ -1321,15 +1321,15 @@ "full": "Полное управление интеграциями" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Сервер аудиокниг и подкастов с собственным хостингом" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Сервер потоковой музыки с собственным хостингом и совместимостью с Subsonic API" }, "uptimeKuma": { - "name": "", + "name": "Uptime Kuma", "description": "", "secret": { "slug": { @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Медиа не загружено" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Добавить", "apply": "Применить", "backToOverview": "Вернуться к обзору", - "skip": "", + "skip": "Пропустить", "change": "Изменить", "create": "Создать", "createAnother": "Создать и начать заново", @@ -1431,8 +1431,8 @@ "checkLogs": "Проверить логи для подробностей", "tryAgain": "Попробовать снова", "loading": "Загрузка", - "show": "", - "hide": "" + "show": "Показать", + "hide": "Скрыть" }, "here": "здесь", "iconPicker": { @@ -1444,7 +1444,7 @@ }, "colorScheme": { "options": { - "auto": "", + "auto": "Авто", "light": "Светлая", "dark": "Тёмная" } @@ -1602,7 +1602,7 @@ "label": { "create": "Новая категория", "changePosition": "Изменить позицию", - "settings": "" + "settings": "Настройки" } }, "openAllInNewTabs": { @@ -1659,11 +1659,11 @@ "edit": { "title": "Редактировать элемент", "tab": { - "widget": "", - "app": "" + "widget": "Редактировать виджет", + "app": "Редактировать приложение" }, "app": { - "propagationNotice": "" + "propagationNotice": "Изменения этого приложения будут применены везде, где оно используется на всех панелях." }, "advancedOptions": { "label": "Расширенные настройки", @@ -1776,7 +1776,7 @@ "label": "Открывать в новой вкладке" }, "withBorder": { - "label": "" + "label": "Показывать рамку" }, "items": { "label": "Закладки", @@ -2024,32 +2024,32 @@ } }, "anchorNote": { - "name": "", - "description": "", + "name": "Заметка Anchor", + "description": "Отображает выбранную заметку из Anchor", "option": { "noteId": { - "label": "" + "label": "Заметка" }, "showTitle": { - "label": "" + "label": "Показывать заголовок" }, "showUpdatedAt": { - "label": "" + "label": "Показывать последнее обновление" } }, - "empty": "", - "emptyContent": "", - "notFound": "", - "noNotes": "", - "integrationRequired": "", - "updatedAt": "", - "untitled": "", - "edit": "", - "save": "", - "cancel": "", - "readOnlyViewer": "", - "saveForbidden": "", - "saveFailed": "" + "empty": "Выберите заметку для отображения", + "emptyContent": "Эта заметка не содержит текста", + "notFound": "Заметка не найдена", + "noNotes": "Заметки не найдены", + "integrationRequired": "Сначала выберите интеграцию Anchor", + "updatedAt": "Обновлено {date}", + "untitled": "Без названия", + "edit": "Редактировать", + "save": "Сохранить", + "cancel": "Отмена", + "readOnlyViewer": "У вас есть доступ только для просмотра этой заметки. Редактирование отключено.", + "saveForbidden": "У вас нет прав на редактирование этой заметки.", + "saveFailed": "Не удалось сохранить эту заметку. Пожалуйста, повторите попытку." }, "iframe": { "name": "iFrame", @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "Обратная сортировка" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "Не удалось получить статистику контейнеров" + "internalServerError": "Не удалось получить статистику контейнеров", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "ИБП", + "description": "Мониторинг состояния ИБП через сервер NUT", "option": { "showBattery": { - "label": "" + "label": "Показать батарею" }, "showLoad": { - "label": "" + "label": "Показать нагрузку" }, "showVoltage": { - "label": "" + "label": "Показать напряжение" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "В сети", + "onBattery": "От батареи", + "lowBattery": "Низкий заряд батареи", + "charging": "Зарядка", + "unknown": "Неизвестно" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Время работы", + "load": "Нагрузка", + "input": "Вход", + "output": "Выход" }, "error": { - "internalServerError": "" + "internalServerError": "Не удалось получить данные ИБП" } }, "tracearr": { @@ -2560,101 +2571,101 @@ } }, "umami": { - "name": "", - "description": "", - "visitors": "", - "active": "", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "name": "Umami Аналитика", + "description": "Отображает статистику посетителей из вашего экземпляра Umami Analytics", + "visitors": "посетители", + "active": "активно", + "pageviews": "просмотры страниц", + "visits": "посещения", + "bounceRate": "отказы", + "avgDuration": "среднее", "option": { "websiteId": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noWebsites": "", - "configureIntegrationFirst": "" + "label": "Веб-сайт", + "description": "Выберите веб-сайт, отслеживаемый вашим экземпляром Umami", + "placeholder": "Выберите веб-сайт", + "loading": "Загрузка веб-сайтов...", + "noWebsites": "Веб-сайты не найдены", + "configureIntegrationFirst": "Сначала подключите интеграцию Umami" }, "timeFrame": { - "label": "", - "description": "", + "label": "Временной период", + "description": "Временной период для отображения данных о посетителях", "option": { - "today": "", - "24h": "", - "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "today": "Сегодня", + "24h": "Последние 24 часа", + "7d": "Последние 7 дней", + "30d": "Последние 30 дней", + "month": "Этот месяц", + "lastMonth": "Прошлый месяц" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Событие", + "description": "Показать общее количество вхождений определенного события", + "placeholder": "Выберите событие", + "loading": "Загрузка событий...", + "noEvents": "События не найдены", + "none": "Нет событий", + "configureWebsiteFirst": "Сначала выберите веб-сайт для загрузки событий" }, "chartType": { - "label": "", - "description": "", + "label": "Тип диаграммы", + "description": "Стиль отображения диаграммы", "option": { - "bar": "", - "sparkline": "" + "bar": "Столбчатая диаграмма", + "sparkline": "Спарклайн" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Стиль диаграммы", + "description": "Как отображать серии событий на диаграмме", "option": { - "grouped": "", - "overlay": "" + "grouped": "Рядом", + "overlay": "Наложение (подмножество)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Вид", + "description": "Что отображать в теле виджета", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Диаграмма", + "events": "Диаграмма событий", + "topPages": "Топ страниц", + "topReferrers": "Топ рефереров" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "События", + "description": "Выберите одно или несколько событий для диаграммы", + "placeholder": "Выберите события...", + "loading": "Загрузка событий...", + "noEvents": "События не найдены", + "configureWebsiteFirst": "Сначала выберите веб-сайт для загрузки событий" }, "topCount": { - "label": "", - "description": "" + "label": "Элементов для отображения", + "description": "Количество отображаемых верхних элементов (макс. 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "событий", + "label": "событий" }, "topPages": { - "direct": "" + "direct": "Прямой" }, "topReferrers": { - "direct": "" + "direct": "Прямой" }, "events": { - "selectPrompt": "" + "selectPrompt": "Выберите события для диаграммы" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Интеграция с Umami не настроена", + "noWebsite": "Веб-сайт не настроен", + "noData": "Нет данных", + "internalServerError": "Не удалось получить данные Umami" } }, "common": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Показывать только воспроизводимое", "description": "Отключение этой опции не работает для Plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Сейчас воспроизводится", "user": "Пользователь", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Лимит элементов на интеграцию", "description": "Ограничивает количество отображаемых элементов для каждой интеграции, а не глобально" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Выберите столбцы в настройках элементов", - "noCommunications": "Не удалось загрузить данные из интеграции" + "noCommunications": "Не удалось загрузить данные из интеграции", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Текущий индекс в клиенте" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { "columnTitle": "Интеграция" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Время завершения", - "detailsTitle": "Время с/до завершения" + "detailsTitle": "Время с/до завершения", + "eta": "" }, "type": { "columnTitle": "Тип", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Общий рейтинг" + "globalRatio": "Общий рейтинг", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "Медиарелизы", @@ -3383,7 +3436,7 @@ "label": "Скрыть описание" }, "showPosterImage": { - "label": "" + "label": "Показать постер" } } }, @@ -3613,42 +3666,42 @@ } }, "speedtestTracker": { - "name": "", - "description": "", + "name": "Спидтест Трекер", + "description": "Отображает результаты тестов скорости из вашего экземпляра Speedtest Tracker.", "option": { "showLatestResult": { - "label": "" + "label": "Показать последний результат" }, "showStats": { - "label": "" + "label": "Показать средние значения" }, "showRecentResults": { - "label": "" + "label": "Показать недавние результаты" }, "showPingGraph": { - "label": "" + "label": "Показать график пинга" } }, - "latestResult": "", - "averages": "", - "tests": "", - "recentResults": "", - "recentResultsSpeed": "", - "recentResultsPing": "", - "download": "", - "upload": "", - "ping": "", - "status": "", - "avgDownload": "", - "avgUpload": "", - "avgPing": "", - "healthy": "", - "unhealthy": "", - "ok": "", - "fail": "", - "noSectionsEnabled": "", + "latestResult": "Последний результат", + "averages": "Средние значения", + "tests": "{count} тестов", + "recentResults": "Недавние результаты", + "recentResultsSpeed": "Скорость", + "recentResultsPing": "Пинг", + "download": "Загрузка", + "upload": "Отправка", + "ping": "Пинг", + "status": "Статус", + "avgDownload": "Средняя загрузка", + "avgUpload": "Средняя отправка", + "avgPing": "Средний пинг", + "healthy": "Исправно", + "unhealthy": "Неисправен", + "ok": "ОК", + "fail": "Ошибка", + "noSectionsEnabled": "Включите хотя бы один раздел в настройках виджета.", "error": { - "internalServerError": "" + "internalServerError": "Не удалось получить данные теста скорости" } }, "uptimeKuma": { @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Системы Beszel (Таблица)", + "description": "Табличное представление всех систем, отслеживаемых Beszel, с сортируемыми столбцами и индикаторами статуса", "option": { "statusFilter": { - "label": "" + "label": "Фильтр статуса" }, "sortBy": { - "label": "" + "label": "Сортировать по" }, "sortDirection": { - "label": "" + "label": "Направление сортировки" }, "showCpu": { - "label": "" + "label": "Показать ЦП" }, "showMemory": { - "label": "" + "label": "Показать память" }, "showDisk": { - "label": "" + "label": "Показать диск" }, "showGpu": { - "label": "" + "label": "Показать GPU" }, "showLoadAvg": { - "label": "" + "label": "Показать среднюю нагрузку" }, "showNet": { - "label": "" + "label": "Показать сеть" }, "showTemp": { - "label": "" + "label": "Показать температуру" }, "showBattery": { - "label": "" + "label": "Показать батарею" }, "showServices": { - "label": "" + "label": "Показать сервисы" }, "showUptime": { - "label": "" + "label": "Показать время работы" }, "showAgent": { + "label": "Показать версию агента" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Системы не найдены", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Система", + "cpu": "ЦП", + "memory": "Память", + "disk": "Диск", + "gpu": "GPU", + "loadAvg": "Средн. нагрузка", + "net": "Сеть", + "temp": "Темп", + "battery": "Бат", + "services": "Сервисы", + "uptime": "Время работы", + "agent": "Агент" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Системы Beszel (Сетка)", + "description": "Представление в виде сетки карточек всех систем, отслеживаемых Beszel, с метриками в реальном времени", "option": { "statusFilter": { - "label": "" + "label": "Фильтр статуса" }, "showCpu": { - "label": "" + "label": "Показать ЦП" }, "showMemory": { - "label": "" + "label": "Показать память" }, "showDisk": { - "label": "" + "label": "Показать диск" }, "showGpu": { - "label": "" + "label": "Показать GPU" }, "showLoadAvg": { - "label": "" + "label": "Показать среднюю нагрузку" }, "showNet": { - "label": "" + "label": "Показать сеть" }, "showTemp": { - "label": "" + "label": "Показать температуру" }, "showBattery": { - "label": "" + "label": "Показать батарею" }, "showServices": { - "label": "" + "label": "Показать сервисы" }, "showUptime": { - "label": "" + "label": "Показать время работы" }, "showAgent": { - "label": "" + "label": "Показать версию агента" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "ЦП", + "memory": "Память", + "disk": "Диск", + "gpu": "GPU", + "loadAvg": "Средн. нагрузка", + "net": "Сеть", + "temp": "Темп", + "battery": "Бат", + "services": "Сервисы", + "uptime": "Время работы", + "agent": "Агент" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Оповещения Beszel", + "description": "Просмотр конфигураций и истории оповещений Beszel", "option": { "showHistory": { - "label": "" + "label": "Показать историю оповещений" }, "maxHistoryItems": { - "label": "" + "label": "Макс. элементов истории" } }, - "empty": "", + "empty": "Нет настроенных оповещений", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "История", + "resolved": "Решено", "status": { - "triggered": "", - "ok": "" + "triggered": "Сработало", + "ok": "ОК" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Статистика системы Beszel", + "description": "Графики временных рядов для метрик ЦП, памяти, диска, сети и контейнеров Docker", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Период времени" }, "showCpu": { - "label": "" + "label": "Показать график ЦП" }, "showMemory": { - "label": "" + "label": "Показать график памяти" }, "showDisk": { - "label": "" + "label": "Показать график диска" }, "showDiskIO": { - "label": "" + "label": "Показать график ввода-вывода диска" }, "showNetwork": { - "label": "" + "label": "Показать график сети" }, "showDockerCpu": { - "label": "" + "label": "Показать график ЦП Docker" }, "showDockerMemory": { - "label": "" + "label": "Показать график памяти Docker" }, "showDockerNetwork": { - "label": "" + "label": "Показать график сети Docker" } }, - "selectSystem": "", + "selectSystem": "Выберите систему", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "Использование ЦП", + "subtitle": "Средняя загрузка ЦП всей системы", + "series": "ЦП" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Использование памяти", + "subtitle": "Точное использование в записанный момент времени", + "series": "Использовано", + "cache": "Кэш/Буферы" }, "disk": { - "title": "", + "title": "Использование диска", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Ввод-вывод диска", + "subtitle": "Пропускная способность корневой файловой системы", + "read": "Чтение", + "write": "Запись" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Пропускная способность", + "subtitle": "Сетевой трафик публичных интерфейсов", + "sent": "Отправлено", + "recv": "Получено" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Использование ЦП Docker", + "subtitle": "Средняя загрузка ЦП контейнеров" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Использование памяти Docker", + "subtitle": "Использование памяти контейнеров Docker" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Ввод-вывод сети Docker", + "subtitle": "Сетевой трафик контейнеров Docker" } } } @@ -4528,7 +4575,7 @@ "api": "API", "certificates": "Сертификаты", "tasks": "Задачи", - "backup": "" + "backup": "Резервное копирование" } }, "settings": "Настройки", @@ -4609,7 +4656,7 @@ "private": "Эта панель приватная" }, "noResults": { - "title": "" + "title": "Панелей ещё нет" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Первый день недели", "accessibility": "Специальные возможности", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Обучающие туры", + "description": "Сбросьте обучающие туры, чтобы увидеть их снова при следующем посещении области управления или панели.", + "reset": "Сбросить обучающие туры", "resetSuccess": { - "title": "", - "message": "" + "title": "Туры сброшены", + "message": "Обучающие туры снова появятся при следующем посещении" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Завершено", + "notStarted": "Не начато" }, "name": { - "management": "", - "dashboard": "" + "management": "Управление", + "dashboard": "Панель" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "Цветовая схема по умолчанию", "options": { - "auto": "", + "auto": "Авто", "light": "Светлая", "dark": "Тёмная" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Полное резервное копирование базы данных", + "metaTitle": "Резервное копирование и восстановление", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Экспорт базы данных", + "description": "Загрузите полную резервную копию вашей базы данных SQLite, включая все настройки, пользователей, панели и зашифрованные секреты интеграций. Резервная копия упакована в ZIP-файл с ключом шифрования и метаданными.", + "button": "Скачать резервную копию", + "error": "Ошибка экспорта", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Экспорт конфиденциальных данных", + "warningTitle": "Этот экспорт содержит всю вашу базу данных.", + "warningBody": "Резервная копия включает всех пользователей, секреты интеграций (зашифрованные), API-ключи, настройки панелей и данные приложений. Храните экспортированный файл в безопасности и не делитесь им.", + "typePrompt": "Введите \"{phrase}\" для продолжения", + "submit": "Экспорт базы данных", + "cancel": "Отмена" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Восстановить базу данных", + "description": "Загрузите ранее экспортированный ZIP-архив для восстановления базы данных. Это полностью заменит вашу базу данных. Если резервная копия была создана с другим ключом шифрования, секреты будут автоматически перешифрованы.", + "warning": "Восстановление резервной копии полностью заменит вашу текущую базу данных и перезапустит приложение. Это действие нельзя отменить.", "dropzone": { - "title": "", - "description": "" + "title": "Перетащите ZIP-файл с резервной копией сюда или нажмите для выбора", + "description": "Принимаются только .zip файлы из резервной копии SQLite Homarr" }, - "changeFile": "", - "button": "", + "changeFile": "Изменить файл", + "button": "Восстановить базу данных", "success": { - "title": "", - "message": "" + "title": "Восстановление завершено", + "message": "База данных успешно восстановлена. Приложение перезапускается..." }, - "error": "" + "error": "Ошибка импорта" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Содержимое резервной копии", + "exported": "Экспортировано {date}", + "loading": "Анализ файла резервной копии...", + "errorTitle": "Ошибка предпросмотра", + "entity": "Сущность", + "count": "Количество", + "boards": "Панели", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Панели", + "user": "Пользователи", + "app": "Приложения", + "integration": "Интеграции", + "item": "Виджеты", + "media": "Медиа", + "search_engine": "Поисковые системы" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Не удалось проанализировать файл резервной копии", + "invalidMissingMetadata": "Недействительная резервная копия: отсутствует metadata.json", + "invalidMissingDb": "Недействительная резервная копия: отсутствует db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Перетащите ZIP-файл с резервной копией сюда", + "description": "Принимаются .zip файлы из резервной копии SQLite Homarr (макс. 256 МБ)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Анализ резервной копии...", + "changeFile": "Изменить файл", + "continueToRestore": "Перейти к восстановлению", + "tryAgain": "Попробовать снова", + "analysisError": "Ошибка анализа", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Содержимое резервной копии", + "exported": "Экспортировано {date}", + "entity": "Сущность", + "count": "Количество", + "boards": "Панели", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Панели", + "user": "Пользователи", + "app": "Приложения", + "integration": "Интеграции", + "item": "Виджеты", + "media": "Медиа", + "search_engine": "Поисковые системы" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "Применена {count} миграция", + "migrationsAppliedPlural": "Применено {count} миграций", + "migrationsOlderVersion": "Эта резервная копия была из более старой версии Homarr. Была применена {count} миграция схемы для обновления.", + "migrationsOlderVersionPlural": "Эта резервная копия была из более старой версии Homarr. Было применено {count} миграций схемы для обновления.", + "migrationsUpToDate": "Схема базы данных актуальна (применено {count} миграций)", + "upToDate": "Актуально", + "migrationsPending": "{count} ожидает" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Применение миграций ({current}/{total})", + "migrationLabel": "Миграция {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Деструктивное действие", + "warningTitle": "Это безвозвратно заменит всю вашу базу данных.", + "warningBody": "Все текущие панели, пользователи, приложения, интеграции, настройки и сеансы будут потеряны. Это действие нельзя отменить. Приложение перезапустится после восстановления.", + "typePrompt": "Введите \"{phrase}\" для продолжения", + "cancel": "Отмена", + "submit": "Восстановить базу данных" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Восстановление базы данных...", + "extracting": "Извлечение архива резервной копии", + "migrating": "Применение миграций базы данных", + "encrypting": "Перешифрование секретов интеграций", + "swapping": "Замена файла базы данных", + "restarting": "Перезапуск сервера" }, "complete": { - "title": "", - "message": "" + "title": "Восстановление завершено", + "message": "База данных успешно восстановлена. Сервер перезапускается — обновите страницу через несколько секунд." }, "failed": { - "title": "" + "title": "Восстановление не удалось" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Недействительная резервная копия: отсутствует metadata.json", + "invalidMissingDb": "Недействительная резервная копия: отсутствует db.sqlite", + "analyzeError": "Не удалось проанализировать резервную копию" } } }, @@ -5207,8 +5254,8 @@ "subtitle": "{count} помогают с переводами на разные языки" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "Спонсоры", + "subtitle": "{count} поддерживают проект финансово" }, "libraries": { "title": "Библиотеки", @@ -5277,15 +5324,15 @@ "label": "Порты" }, "host": { - "label": "" + "label": "Хост" } }, "action": { "title": "Действия", "logs": { - "label": "", + "label": "Просмотреть логи", "page": { - "title": "" + "title": "Логи {name}" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Удалить", + "confirm": "", "notification": { "success": { "title": "Контейнеры удалены", @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "Логи" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "Глобальные команды", "option": { "colorScheme": { - "auto": "", + "auto": "Переключить режим оформления", "light": "Переключить на светлую тему", "dark": "Переключить на тёмную тему" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Настройки", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Выберите настройку для изменения", + "backHint": "Нажмите Backspace или используйте кнопку назад для возврата", + "backAction": "Назад" } }, "notification": { "error": { - "message": "" + "message": "Не удалось обновить настройку" } }, "option": { "preferences": { - "label": "" + "label": "Открыть настройки" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Включено", + "disabled": "Отключено" }, "board": { - "none": "", - "unavailable": "" + "none": "Нет", + "unavailable": "Выбрано в настоящее время (недоступно)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Нет", + "unavailable": "Выбрано в настоящее время (недоступно)" }, "colorScheme": { - "label": "", + "label": "Цветовая схема", "children": { "detail": { - "title": "" + "title": "Выберите цветовую схему" } } }, "locale": { - "label": "", + "label": "Язык", "children": { "detail": { - "title": "" + "title": "Выберите предпочитаемый язык" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Поисковая система по умолчанию", "children": { "detail": { - "title": "" + "title": "Выберите поисковую систему по умолчанию" } } }, "openSearchInNewTab": { - "label": "", + "label": "Открывать результаты поиска в новой вкладке", "children": { "detail": { - "title": "" + "title": "Открывать результаты поиска в новой вкладке" } } }, "ddgBangs": { - "label": "", + "label": "Включить DuckDuckGo bangs", "children": { "detail": { - "title": "" + "title": "Включить DuckDuckGo bangs" } } }, "firstDayOfWeek": { - "label": "", + "label": "Первый день недели", "children": { "detail": { - "title": "" + "title": "Выберите первый день недели" } } }, "homeBoardId": { - "label": "", + "label": "Домашняя панель", "children": { "detail": { - "title": "" + "title": "Выберите домашнюю панель" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Мобильная домашняя панель", "children": { "detail": { - "title": "" + "title": "Выберите мобильную домашнюю панель" } } }, "pingIconsEnabled": { - "label": "", + "label": "Использовать индикаторы доступности", "children": { "detail": { - "title": "" + "title": "Использовать индикаторы доступности" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Открыть полную страницу настроек" } } } } }, "media": { - "help": "", + "help": "Искать фильмы или сериалы для запроса", "requestMovie": "Запросить фильм", "requestSeries": "Запросить сериал", "openIn": "Открыть в {kind}", "group": { - "title": "" + "title": "Фильмы и сериалы" }, "action": { "search": { - "label": "", - "description": "", + "label": "Искать фильмы или сериалы", + "description": "Начните вводить для поиска в интеграциях медиа-запросов", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Добавьте интеграцию Overseerr, Jellyseerr или Seerr для включения поиска медиа.", + "scoped": "У этого виджета нет доступной интеграции медиа-запросов." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Доступно", + "partiallyAvailable": "Частично", + "processing": "Обработка", + "requested": "Запрошено", + "pending": "Запрошено" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "Поисковые системы", - "tipDdgBangs": "", + "tipDdgBangs": "Совет: Вы также можете использовать любые DuckDuckGo bangs, например !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Искать \"{query}\" с {label}", + "pressEnterToOpen": "Нажмите Enter, чтобы открыть", + "engineSelected": "{label} выбрано (!{bang})", + "typeQueryToContinue": "Введите поисковый запрос для продолжения", + "emptyBangHint": "Введите bang, например !yt, затем нажмите пробел для выбора" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "Сезон", "episodes": "Серии", - "status": "" + "status": "Статус" }, "status": { - "requested": "" + "requested": "Запрошено" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Читать документацию", + "next": "Далее", + "prev": "Назад", + "done": "Готово", + "skip": "Пропустить тур", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Добро пожаловать в Homarr!", + "description": "Это ваш центр управления. Здесь вы управляете панелями, приложениями, интеграциями, пользователями и настройками сервера. Давайте пройдем тур по каждому разделу." }, "boardsList": { - "title": "", - "description": "" + "title": "Ваши панели", + "description": "Здесь все ваши панели. Каждая панель имеет свой макет, фон и настройки доступа. Вы можете видеть, кто создал каждую и является ли она публичной или частной." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Создать панель", + "description": "Нажмите здесь, чтобы создать новую панель или импортировать из предыдущей установки Homarr. Каждая панель получает свой URL, которым можно поделиться." }, "appsList": { - "title": "", - "description": "" + "title": "Ваши приложения", + "description": "Это все добавленные вами приложения — ссылки на ваши собственные сервисы. Каждое приложение имеет значок, опциональную проверку здоровья и значок статуса на панели." }, "appsCreate": { - "title": "", - "description": "" + "title": "Добавить приложение", + "description": "Зарегистрируйте новый сервис здесь. Дайте ему имя, URL и значок — он появится в виде плитки на ваших панелях с мониторингом статуса в реальном времени." }, "integrationsList": { - "title": "", - "description": "" + "title": "Ваши интеграции", + "description": "Это сервисы, подключенные к Homarr — Sonarr, Radarr, Plex, Jellyfin и более 50 других. Все учетные данные зашифрованы." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Добавить интеграцию", + "description": "Подключите новый сервис здесь. Выберите тип, введите URL и API-ключ — Homarr проверит соединение перед сохранением." }, "usersList": { - "title": "", - "description": "" + "title": "Ваши пользователи", + "description": "Смотрите всех, у кого есть доступ. Организуйте пользователей в группы и управляйте тем, кто может просматривать или редактировать каждую панель." }, "usersCreate": { - "title": "", - "description": "" + "title": "Создать пользователя", + "description": "Добавьте нового пользователя здесь. Вы также можете использовать ссылки-приглашения для легкого входа. Это тур — теперь вы готовы!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Это ваша панель", + "description": "Перетаскиваемая панель, где вы размещаете приложения и виджеты. Нажмите Ctrl+K в любое время для поиска приложений, панелей и действий." }, "editMode": { - "title": "", - "description": "" + "title": "Режим редактирования", + "description": "Нажмите здесь, чтобы войти в режим редактирования. Затем вы можете добавлять виджеты, приложения и секции — перетаскивайте для перемещения, изменяйте размер за угол. Нажмите еще раз, чтобы сохранить изменения." }, "settings": { - "title": "", - "description": "" + "title": "Настройки панели", + "description": "Измените имя панели, количество столбцов, фон, цвета и доступ. Каждая панель может быть публичной или частной." }, "switcher": { - "title": "", - "description": "" + "title": "Переключить панели", + "description": "Переключайтесь между панелями. Создавайте отдельные панели для разных целей — медиа, сети, пользователей или что угодно." }, "userMenu": { - "title": "", - "description": "" + "title": "Ваш профиль", + "description": "Измените цветовую схему, язык, домашнюю панель и настройки. Также можете перейти в область управления отсюда." } } } diff --git a/packages/translation/src/lang/sk.json b/packages/translation/src/lang/sk.json index 9d5d661d7..c19915673 100644 --- a/packages/translation/src/lang/sk.json +++ b/packages/translation/src/lang/sk.json @@ -8,9 +8,9 @@ "action": { "scratch": "Začať odznova", "importOldmarr": "Import z Homarr pred 1.0", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Obnoviť zo zálohy SQLite", + "restoreSqliteDescription": "Nahrajte úplnú zálohu databázy SQLite z predchádzajúcej inštancie Homarr. Tým sa obnovia všetky dosky, používatelia, aplikácie, integrácie a nastavenia.", + "backToOptions": "← Späť na možnosti nastavenia" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "Nakonfigurujte nastavenia servera." }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Integrácie", + "subtitle": "Vyberte služby, ktoré používate.", + "description": "Vyberte integrácie, ktoré chcete pripojiť. Automaticky nastavíme prístrojovú dosku so zodpovedajúcimi miniaplikáciami.", "action": { - "continue": "", - "skip": "" + "continue": "Pokračovať", + "skip": "Teraz preskočiť" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} z {total}", + "skip": "Preskočiť túto integráciu", + "finishing": "Nastavuje sa prístrojová doska...", "error": { - "title": "", - "message": "" + "title": "Nastavenie zlyhalo", + "message": "Pri nastavovaní prístrojovej dosky sa niečo pokazilo. Skúste to znova." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "Pomocníci URL", + "description": "Títo pomocníci sa snažia uhádnuť adresu URL pre vaše služby. Ak to nefunguje, jednoducho napíšte adresu ručne." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Základná adresa URL", + "placeholder": "homelab.local alebo 192.168.1.1", + "hint": "Zadajte svoju základnú doménu alebo IP, aby sa automaticky vyplnili adresy URL integrácií", + "warning": "Nastavením základnej adresy URL teraz sa automaticky vyplnia všetky adresy URL integrácií, čím ušetríte čas počas nastavovania", + "preview": "napr. {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Subdoména", + "hostPort": "Hostiteľ:Port" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker rozpoznal {count} služieb", + "detectedBreakdown": "{integrations} integrácií · {apps} aplikácií", + "summary": "Homarr rozpoznal {apps} aplikácií, z ktorých {integrations} má vstavané integrácie", + "appBadge": "Aplikácia", + "appSectionLabel": "Aplikácie, ktoré sa pridajú na prístrojovú dosku ({count} vybratých)", + "scanning": "Skenuje sa Docker...", + "scanningDescription": "Hľadajú sa spustené kontajnery vo vašom systéme" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "Heslo", - "suggestionsTitle": "", + "suggestionsTitle": "Návrhy hesiel", "suggestion": { "length": "Obsahuje aspoň 8 znakov", "lowercase": "Zahŕňa malé písmeno", @@ -209,7 +209,7 @@ "label": "Otvoriť výsledky vyhľadávania na novej karte" }, "ddgBangs": { - "label": "" + "label": "Povoliť príkazy DuckDuckGo bang" } }, "error": { @@ -302,10 +302,10 @@ "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "Príkazy DuckDuckGo bang boli úspešne prepnuté" }, "error": { - "message": "" + "message": "Nemožno prepnúť príkazy DuckDuckGo bang" } } }, @@ -691,190 +691,190 @@ "customWidget": { "page": { "list": { - "title": "", - "noResults": "", - "loading": "" + "title": "Vlastné widgety", + "noResults": "Zatiaľ žiadne vlastné widgety. Vytvorte svoj prvý!", + "loading": "Nahrávam..." }, "create": { - "title": "", - "subtitle": "" + "title": "Vytvoriť vlastný widget", + "subtitle": "Definujte URL API, autentifikáciu a spôsob zobrazenia údajov odpovede." }, "edit": { - "title": "" + "title": "Upraviť vlastný widget" } }, "action": { - "create": "", - "import": "", - "save": "", - "delete": "", - "deleteConfirm": "", - "export": "", - "addMapping": "", - "addColumn": "", - "edit": "", - "removeMapping": "", - "removeColumn": "", - "addItem": "", - "removeItem": "", - "addBar": "", - "duplicate": "", - "copyAiPrompt": "", - "enable": "", - "disable": "", - "menu": "" + "create": "Vytvoriť", + "import": "Importovať", + "save": "Uložiť", + "delete": "Odstrániť vlastný widget", + "deleteConfirm": "Naozaj chcete odstrániť \"{name}\"? Táto akcia sa nedá vrátiť späť.", + "export": "Exportovať", + "addMapping": "Pridať mapovanie", + "addColumn": "Pridať stĺpec", + "edit": "Upraviť", + "removeMapping": "Odstrániť mapovanie", + "removeColumn": "Odstrániť stĺpec", + "addItem": "Pridať položku", + "removeItem": "Odstrániť položku", + "addBar": "Pridať pruh", + "duplicate": "Duplikovať", + "copyAiPrompt": "Kopírovať AI prompt", + "enable": "Povoliť", + "disable": "Zakázať", + "menu": "Akcie" }, "field": { - "name": "", - "description": "", - "iconUrl": "", - "url": "", - "authType": "", - "headerName": "", - "method": "", - "requestBody": "", - "displayType": "", - "jsonPath": "", - "jsonPathHint": "", - "label": "", - "unit": "", - "mappings": "", - "tablePath": "", - "tablePathHint": "", - "columns": "", - "header": "", - "items": "", - "gridColumns": "", - "cardStyle": "", - "bars": "", - "valuePath": "", - "maxPath": "", - "showPercentage": "", - "barSize": "", - "goodValues": "", - "dotSize": "", - "valueSize": "", - "labelPosition": "", - "kvLayout": "", - "striped": "", - "compact": "", - "maxHeight": "", - "color": "", - "buttonLabel": "", - "buttonColor": "", - "confirmText": "", - "confirmTextHint": "", - "successMessage": "", - "successMessageHint": "", - "enabled": "", + "name": "Názov", + "description": "Popis", + "iconUrl": "URL ikony", + "url": "URL", + "authType": "Typ autentifikácie", + "headerName": "Názov hlavičky/parametra dotazu", + "method": "Metóda", + "requestBody": "Telo požiadavky", + "displayType": "Typ zobrazenia", + "jsonPath": "JSON cesta", + "jsonPathHint": "Použite syntax JSONPath na extrakciu hodnôt, napr. $.data.teplota alebo $.polozky[0].nazov", + "label": "Označenie", + "unit": "Jednotka", + "mappings": "Mapovania", + "tablePath": "JSON cesta poľa", + "tablePathHint": "Cesta k poľu v odpovedi, napr. $.data.polozky", + "columns": "Stĺpce", + "header": "Hlavička", + "items": "Položky", + "gridColumns": "Stĺpce mriežky", + "cardStyle": "Štýl karty", + "bars": "Pruhy", + "valuePath": "JSON cesta hodnoty", + "maxPath": "JSON cesta maximálnej hodnoty", + "showPercentage": "Zobraziť percentá", + "barSize": "Veľkosť pruhu", + "goodValues": "Dobré hodnoty (oddelené čiarkou)", + "dotSize": "Veľkosť bodky", + "valueSize": "Veľkosť hodnoty", + "labelPosition": "Pozícia označenia", + "kvLayout": "Rozloženie", + "striped": "Pruhované riadky", + "compact": "Kompaktný režim", + "maxHeight": "Max. výška (px)", + "color": "Farba", + "buttonLabel": "Označenie tlačidla", + "buttonColor": "Farba tlačidla", + "confirmText": "Text potvrdenia", + "confirmTextHint": "Ak je nastavený, pred vykonaním požiadavky sa zobrazí dialóg potvrdenia", + "successMessage": "Správa o úspechu", + "successMessageHint": "Správa zobrazená po úspešnom vykonaní", + "enabled": "Povolené", "template": { - "label": "", - "description": "" + "label": "JSX šablóna", + "description": "Mantine JSX šablóna. Prístup k poliam odpovede API cez dátové väzby (napr. data.nazov). Používajte iba whitelistované komponenty. Zakázané: constructor, __proto__, eval, Function, window, document." } }, "placeholder": { - "exampleLabel": "", - "exampleLabelShort": "", - "exampleHeader": "", - "exampleUnit": "", - "iconUrl": "", - "url": "", - "headerName": "", - "jsonPath": "", - "tablePath": "", - "columnJsonPath": "", - "valuePath": "", - "maxPath": "", - "goodValues": "", - "color": "" + "exampleLabel": "Teplota CPU", + "exampleLabelShort": "Teplota CPU", + "exampleHeader": "Názov", + "exampleUnit": "°C", + "iconUrl": "https://...", + "url": "https://api.priklad.com/api/v1/status", + "headerName": "X-API-Key", + "jsonPath": "$.data.hodnota", + "tablePath": "$.data.polozky", + "columnJsonPath": "$.nazov", + "valuePath": "$.data.pouzite", + "maxPath": "$.data.celkom", + "goodValues": "online, true, up", + "color": "modrá" }, "cardStyleOption": { - "filled": "", - "outline": "", - "subtle": "" + "filled": "Vyplnené", + "outline": "Obrys", + "subtle": "Jemný" }, "layoutOption": { - "list": "", - "grid": "" + "list": "Zoznam", + "grid": "Mriežka" }, "sizeOption": { - "sm": "", - "md": "", - "lg": "", - "xl": "" + "sm": "Malé", + "md": "Stredné", + "lg": "Veľké", + "xl": "Extra veľké" }, "labelPositionOption": { - "above": "", - "below": "" + "above": "Nad", + "below": "Pod" }, "fieldset": { - "general": "", - "connection": "", - "display": "" + "general": "Všeobecné", + "connection": "Pripojenie API", + "display": "Konfigurácia zobrazenia" }, "displayTypeDescription": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Zobraziť jednu extrahovanú hodnotu s označením a jednotkou", + "keyValue": "Zobraziť viacero označených hodnôt vedľa seba", + "table": "Zobraziť riadky údajov vo formáte tabuľky", + "statGrid": "Farebné karty štatistík v mriežke – ako widgety Pi-Hole alebo Speedtest", + "progressBars": "Pruhy postupu zobrazujúce využitie alebo dokončenie – pre disk, pamäť, kvóty", + "statusIndicator": "Farebné bodky stavu zobrazujúce online/offline alebo stavy zdravia", + "countGrid": "Kompaktné počítadlá číslo + označenie v tesnej mriežke", + "raw": "Prehľadne formátovaný JSON výstup pre ladenie", + "actionButton": "Tlačidlo, ktoré po kliknutí spustí požiadavku", + "customJsx": "Vlastné rozloženie JSX pomocou whitelistovaných komponentov Mantine s plnou väzbou API dát" }, "method": { - "GET": "", - "POST": "", - "PUT": "", - "DELETE": "", - "PATCH": "" + "GET": "GET", + "POST": "POST", + "PUT": "PUT", + "DELETE": "DELETE", + "PATCH": "PATCH" }, "authType": { - "none": "", - "bearer": "", - "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "none": "Žiadna", + "bearer": "Bearer token", + "basic": "Basic Auth", + "apiKeyHeader": "API kľúč (hlavička)", + "apiKeyQuery": "API kľúč (dotaz)" }, "displayType": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Jedna hodnota", + "keyValue": "Kľúč-hodnota", + "table": "Tabuľka", + "statGrid": "Mriežka štatistík", + "progressBars": "Pruhy postupu", + "statusIndicator": "Indikátor stavu", + "countGrid": "Mriežka počtu", + "raw": "Surové JSON", + "actionButton": "Akčné tlačidlo", + "customJsx": "Vlastné JSX" }, "secret": { - "apiKey": "", - "username": "", - "password": "", - "savedPlaceholder": "" + "apiKey": "API kľúč / token", + "username": "Používateľské meno", + "password": "Heslo", + "savedPlaceholder": "••••••• (uložené, ponechajte prázdne pre zachovanie)" }, "preview": { - "title": "", - "test": "", - "hint": "", - "rawResponse": "" + "title": "Náhľad", + "test": "Test", + "hint": "Kliknite na Test pre náhľad odpovede API s vašou aktuálnou konfiguráciou.", + "rawResponse": "Surová JSON odpoveď" }, "notification": { - "created": "", - "updated": "", - "deleted": "", + "created": "Widget \"{name}\" bol úspešne vytvorený.", + "updated": "Widget \"{name}\" bol úspešne aktualizovaný.", + "deleted": "Widget \"{name}\" bol odstránený.", "imported": "", - "aiPromptCopied": "", - "aiPromptDescription": "", - "aiPromptCopy": "", - "aiPromptNoResponse": "", - "aiPromptCopyError": "", - "createError": "", - "updateError": "", - "importError": "", + "aiPromptCopied": "AI prompt skopírovaný do schránky", + "aiPromptDescription": "Skopírujte pripravený prompt a vložte ho do akéhokoľvek AI chatbota (ChatGPT, Claude, Gemini...). Obsahuje úplnú schému widgetu a vašu odpoveď API, aby AI mohla vygenerovať pripravenú JSON konfiguráciu na import.", + "aiPromptCopy": "Skopírovať do schránky", + "aiPromptNoResponse": "Tip: Najprv spustite test, aby ste zahrnuli odpoveď API do výzvy pre lepšie výsledky.", + "aiPromptCopyError": "Nepodarilo sa skopírovať výzvu do schránky. Váš prehliadač možno nepodporuje túto funkciu.", + "createError": "Nepodarilo sa vytvoriť widget. Skontrolujte, či je váš API endpoint dostupný.", + "updateError": "Nepodarilo sa aktualizovať widget. Vaše zmeny neboli uložené.", + "importError": "Nepodarilo sa importovať widget. Uistite sa, že súbor je platný JSON export vlastného widgetu.", "exportError": "", "duplicated": "", "duplicateError": "", @@ -987,47 +987,47 @@ "placeholder": "Adresa URL vlastnej aplikácie" }, "apiKeySettings": { - "label": "" + "label": "Získať kľúč API" } }, "action": { "create": "Nová integrácia" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} miniaplikácií", + "noWidgets": "Žiadne miniaplikácie", + "detected": "Zistené pomocou Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Médiá", + "calendar": "Kalendár", + "mediaSearch": "Vyhľadávanie", + "mediaRelease": "Vydania", + "mediaRequest": "Požiadavky", + "downloadClient": "Sťahovanie", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Rôzne", + "smartHomeServer": "Inteligentná domácnosť", + "indexerManager": "Indexer", + "healthMonitoring": "Zdravie", + "search": "Vyhľadávanie", + "mediaTranscoding": "Prekódovanie", + "networkController": "Sieť", + "releasesProvider": "Vydania", + "notifications": "Upozornenia", + "firewall": "Firewall", + "timetable": "Rozvrh", + "photoService": "Fotografie", + "documents": "Dokumenty", + "notes": "Poznámky", + "mediaMonitoring": "Monitorovanie", + "speedtest": "Test rýchlosti", + "analytics": "Analytika", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Knižnica médií", + "uptimeMonitoring": "Monitorovanie dostupnosti" }, "testConnection": { "action": { @@ -1310,8 +1310,8 @@ "newLabel": "" }, "slug": { - "label": "", - "newLabel": "" + "label": "Slug stavovej stránky", + "newLabel": "Nový slug stavovej stránky" } } }, @@ -1321,22 +1321,22 @@ "full": "Úplný prístup k integrácii" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Samostatne hosťovaný server audiokníh a podcastov" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Samostatne hosťovaný server na streamovanie hudby s kompatibilitou so Subsonic API" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Samostatne hosťované monitorovanie dostupnosti s verejnými stavovými stránkami", "secret": { "slug": { - "description": "" + "description": "Slug vašej verejnej stavovej stránky. Predvolená hodnota je \"default\", ak nie je nastavená." }, "apiKey": { - "description": "" + "description": "Voliteľný API kľúč pre autentifikovaný prístup k /metrics" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Systém správy dokumentov na archiváciu a organizáciu naskenovaných dokumentov" }, "patchmon": { "name": "", @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Neboli nahrané žiadne médiá" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Pridať", "apply": "Použiť", "backToOverview": "Späť na prehľad", - "skip": "", + "skip": "Preskočiť", "change": "", "create": "Vytvoriť", "createAnother": "Vytvorte a začnite odznova", @@ -1431,8 +1431,8 @@ "checkLogs": "Ďalšie podrobnosti nájdete v protokoloch", "tryAgain": "Skúste znova", "loading": "Nahrávam", - "show": "", - "hide": "" + "show": "Zobraziť", + "hide": "Skryť" }, "here": "tu", "iconPicker": { @@ -1444,7 +1444,7 @@ }, "colorScheme": { "options": { - "auto": "", + "auto": "Automaticky", "light": "Svetlý", "dark": "Tmavý" } @@ -1602,7 +1602,7 @@ "label": { "create": "Nová kategória", "changePosition": "Zmeniť pozíciu", - "settings": "" + "settings": "Nastavenia" } }, "openAllInNewTabs": { @@ -1659,11 +1659,11 @@ "edit": { "title": "Upraviť položku", "tab": { - "widget": "", - "app": "" + "widget": "Upraviť miniaplikáciu", + "app": "Upraviť aplikáciu" }, "app": { - "propagationNotice": "" + "propagationNotice": "Zmeny tejto aplikácie sa prejavia všade, kde sa používa na všetkých nástenkách." }, "advancedOptions": { "label": "Pokročilé možnosti", @@ -1776,7 +1776,7 @@ "label": "Otvoriť na novej karte" }, "withBorder": { - "label": "" + "label": "Zobraziť ohraničenie" }, "items": { "label": "Záložky", @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "Nepodarilo sa načítať štatistiky kontajnerov" + "internalServerError": "Nepodarilo sa načítať štatistiky kontajnerov", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Sledujte stav vašich zariadení UPS prostredníctvom servera NUT", "option": { "showBattery": { - "label": "" + "label": "Zobraziť batériu" }, "showLoad": { - "label": "" + "label": "Zobraziť zaťaženie" }, "showVoltage": { - "label": "" + "label": "Zobraziť napätie" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Online", + "onBattery": "Na batérii", + "lowBattery": "Nízka batéria", + "charging": "Nabíjanie", + "unknown": "Neznámy" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Výdrž", + "load": "Zaťaženie", + "input": "Vstup", + "output": "Výstup" }, "error": { - "internalServerError": "" + "internalServerError": "Nepodarilo sa načítať údaje UPS" } }, "tracearr": { @@ -2584,77 +2595,77 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Posledných 30 dní", + "month": "Tento mesiac", + "lastMonth": "Minulý mesiac" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Udalosť", + "description": "Zobraziť celkový počet výskytov konkrétnej udalosti", + "placeholder": "Vyberte udalosť", + "loading": "Načítavajú sa udalosti...", + "noEvents": "Nenašli sa žiadne udalosti", + "none": "Žiadna udalosť", + "configureWebsiteFirst": "Najprv vyberte webovú stránku, aby sa načítali udalosti" }, "chartType": { - "label": "", - "description": "", + "label": "Typ grafu", + "description": "Štýl zobrazenia grafu", "option": { - "bar": "", - "sparkline": "" + "bar": "Stĺpcový graf", + "sparkline": "Sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Štýl grafu", + "description": "Ako zobraziť sériu udalostí v grafe", "option": { - "grouped": "", - "overlay": "" + "grouped": "Vedľa seba", + "overlay": "Prekrytie (podmnožina)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Zobrazenie", + "description": "Čo zobraziť v tele miniaplikácie", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Graf", + "events": "Graf udalostí", + "topPages": "Najčastejšie stránky", + "topReferrers": "Najčastejší odporúčatelia" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Udalosti", + "description": "Vyberte jednu alebo viac udalostí na vytvorenie grafu", + "placeholder": "Vyberte udalosti...", + "loading": "Načítavajú sa udalosti...", + "noEvents": "Nenašli sa žiadne udalosti", + "configureWebsiteFirst": "Najprv vyberte webovú stránku, aby sa načítali udalosti" }, "topCount": { - "label": "", - "description": "" + "label": "Počet zobrazených položiek", + "description": "Počet najlepších položiek na zobrazenie (max. 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "udalosti", + "label": "udalosti" }, "topPages": { - "direct": "" + "direct": "Priame" }, "topReferrers": { - "direct": "" + "direct": "Priame" }, "events": { - "selectPrompt": "" + "selectPrompt": "Vyberte udalosti na graf" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Nie je nakonfigurovaná žiadna integrácia Umami", + "noWebsite": "Nie je nakonfigurovaná žiadna webová stránka", + "noData": "Nie sú k dispozícii žiadne údaje", + "internalServerError": "Nepodarilo sa načítať údaje Umami" } }, "common": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "Zobraziť len aktuálne prehrávanú", "description": "Zakázanie tohto nebude fungovať pre plex" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "Momentálne sa prehráva", "user": "Používateľ", @@ -2734,6 +2757,9 @@ "id": "Id", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,48 +2784,48 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Prehľad vášho archívu dokumentov Paperless-ngx", + "documentsTotal": "Celkový počet dokumentov", + "documentsInbox": "Schránka", + "correspondents": "Korešpondenti", + "tags": "Štítky", + "documentTypes": "Typy dokumentov", + "inboxRatio": "Pomer schránky", + "inbox": "schránka", + "total": "celkom", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Zobraziť pomer schránky", + "description": "Zobraziť pomer dokumentov v schránke k celkovému počtu v sekcii hrdinu" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Zobraziť krúžok schránky", + "description": "Zobraziť kruhový ukazovateľ vedľa pomeru schránky" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Zobraziť celkový počet dokumentov", + "description": "Zobraziť celkový počet dokumentov vo vašom archíve" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Zobraziť počet v schránke", + "description": "Zobraziť počet nespracovaných dokumentov v schránke" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Zobraziť korešpondentov", + "description": "Zobraziť celkový počet korešpondentov" }, "showTags": { - "label": "", - "description": "" + "label": "Zobraziť štítky", + "description": "Zobraziť celkový počet štítkov" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Zobraziť typy dokumentov", + "description": "Zobraziť celkový počet typov dokumentov" } }, "error": { - "internalServerError": "" + "internalServerError": "Nepodarilo sa načítať údaje Paperless-ngx" } }, "patchmon": { @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Obmedzte položky na integráciu", "description": "Tým sa obmedzí počet položiek zobrazených na integráciu, nie globálne" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Vyberte položku Stĺpce v položkách", - "noCommunications": "Nie je možné načítať údaje z integrácie" + "noCommunications": "Nie je možné načítať údaje z integrácie", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "Aktuálny index v rámci klienta" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { "columnTitle": "Integrácia" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Čas ukončenia", - "detailsTitle": "Čas od/do dokončenia" + "detailsTitle": "Čas od/do dokončenia", + "eta": "" }, "type": { "columnTitle": "Typ", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Globálny pomer" + "globalRatio": "Globálny pomer", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3652,43 +3705,43 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Monitorovať štatistiky dostupnosti z vašej stavovej stránky Uptime Kuma", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Zobraziť priemernú dostupnosť", + "description": "Zobraziť kombinované percento priemernej dostupnosti za 24 hodín" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Zobraziť krúžok dostupnosti", + "description": "Zobraziť kruhový ukazovateľ vedľa hodnoty priemernej dostupnosti" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Zobraziť celkový počet monitorov", + "description": "Zobraziť celkový počet nakonfigurovaných monitorov" }, "showUpCount": { - "label": "", - "description": "" + "label": "Zobraziť počet dostupných", + "description": "Zobraziť, koľko monitorov je momentálne dostupných" }, "showDownCount": { - "label": "", - "description": "" + "label": "Zobraziť počet nedostupných", + "description": "Zobraziť, koľko monitorov je momentálne nedostupných" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Zobraziť počet pozastavených", + "description": "Zobraziť, koľko monitorov je momentálne pozastavených" } }, - "averageUptime": "", + "averageUptime": "Priemerná dostupnosť (24h)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Celkový počet monitorov", + "upCount": "Dostupné", + "downCount": "Nedostupné", + "pausedCount": "Pozastavené" }, "error": { - "internalServerError": "" + "internalServerError": "Nepodarilo sa načítať údaje o dostupnosti" } }, "traefik": { @@ -3726,70 +3779,56 @@ } }, "audioStats": { - "name": "", - "description": "", + "name": "Audio štatistiky", + "description": "Štatistiky knižnice a prehrávania z Navidrome alebo Audiobookshelf", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Zobraziť interpretov", + "description": "Zobraziť celkový počet interpretov vo vašej hudobnej knižnici (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Zobraziť albumy", + "description": "Zobraziť celkový počet albumov vo vašej hudobnej knižnici (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "Zobraziť skladby", + "description": "Zobraziť celkový počet skladieb vo vašej hudobnej knižnici (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Zobraziť počet knižníc", + "description": "Zobraziť počet knižníc na vašej inštancii (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Zobraziť audioknihy", + "description": "Zobraziť celkový počet audiokníh vo všetkých knižniciach (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Zobraziť podcasty", + "description": "Zobraziť celkový počet podcastov vo všetkých knižniciach (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "Zobraziť čas počúvania", + "description": "Zobraziť váš celkový čas počúvania (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "Zobraziť aktívne relácie", + "description": "Zobraziť počet momentálne aktívnych relácií prehrávania (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "Kompaktný režim", + "description": "Použiť hustejšie rozloženie s menšími dlaždicami, ideálne pre malé veľkosti widgetov" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "Interpreti", + "albums": "Albumy", + "songs": "Skladby", + "libraryCount": "Knižnice", + "audiobooks": "Audioknihy", + "podcasts": "Podcasty", + "listeningTime": "Čas počúvania", + "activeSessions": "Aktívne relácie", "error": { - "internalServerError": "" + "internalServerError": "Nepodarilo sa načítať údaje audio štatistík" } }, "systemResources": { @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel systémy (tabuľka)", + "description": "Tabuľkový pohľad všetkých systémov monitorovaných Beszel s triediteľnými stĺpcami a indikátormi stavu", "option": { "statusFilter": { - "label": "" + "label": "Filter stavu" }, "sortBy": { - "label": "" + "label": "Triediť podľa" }, "sortDirection": { - "label": "" + "label": "Smer triedenia" }, "showCpu": { - "label": "" + "label": "Zobraziť CPU" }, "showMemory": { - "label": "" + "label": "Zobraziť pamäť" }, "showDisk": { - "label": "" + "label": "Zobraziť disk" }, "showGpu": { - "label": "" + "label": "Zobraziť GPU" }, "showLoadAvg": { - "label": "" + "label": "Zobraziť priemerné zaťaženie" }, "showNet": { - "label": "" + "label": "Zobraziť sieť" }, "showTemp": { - "label": "" + "label": "Zobraziť teplotu" }, "showBattery": { - "label": "" + "label": "Zobraziť batériu" }, "showServices": { - "label": "" + "label": "Zobraziť služby" }, "showUptime": { - "label": "" + "label": "Zobraziť dobu prevádzky" }, "showAgent": { + "label": "Zobraziť verziu agenta" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Nenašli sa žiadne systémy", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Systém", + "cpu": "Procesor", + "memory": "Pamäť", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Priem. zaťaženie", + "net": "Sieť", + "temp": "Teplota", + "battery": "Batéria", + "services": "Služby", + "uptime": "Doba prevádzky", + "agent": "Agent" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel systémy (mriežka)", + "description": "Zobrazenie mriežky kariet všetkých systémov monitorovaných Beszel s metrikami v reálnom čase", "option": { "statusFilter": { - "label": "" + "label": "Filter stavu" }, "showCpu": { - "label": "" + "label": "Zobraziť CPU" }, "showMemory": { - "label": "" + "label": "Zobraziť pamäť" }, "showDisk": { - "label": "" + "label": "Zobraziť disk" }, "showGpu": { - "label": "" + "label": "Zobraziť GPU" }, "showLoadAvg": { - "label": "" + "label": "Zobraziť priemerné zaťaženie" }, "showNet": { - "label": "" + "label": "Zobraziť sieť" }, "showTemp": { - "label": "" + "label": "Zobraziť teplotu" }, "showBattery": { - "label": "" + "label": "Zobraziť batériu" }, "showServices": { - "label": "" + "label": "Zobraziť služby" }, "showUptime": { - "label": "" + "label": "Zobraziť dobu prevádzky" }, "showAgent": { - "label": "" + "label": "Zobraziť verziu agenta" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "Procesor", + "memory": "Pamäť", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Priem. zaťaženie", + "net": "Sieť", + "temp": "Teplota", + "battery": "Bat", + "services": "Služby", + "uptime": "Doba prevádzky", + "agent": "Agent" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel Upozornenia", + "description": "Zobraziť konfigurácie a históriu Beszel upozornení", "option": { "showHistory": { - "label": "" + "label": "Zobraziť históriu upozornení" }, "maxHistoryItems": { - "label": "" + "label": "Max. počet položiek histórie" } }, - "empty": "", + "empty": "Žiadne nakonfigurované upozornenia", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "História", + "resolved": "Vyriešené", "status": { - "triggered": "", - "ok": "" + "triggered": "Spustené", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel Systémové štatistiky", + "description": "Časové grafy pre CPU, pamäť, disk, sieť a metriky Docker kontajnerov", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Časové obdobie" }, "showCpu": { - "label": "" + "label": "Zobraziť graf CPU" }, "showMemory": { - "label": "" + "label": "Zobraziť graf pamäte" }, "showDisk": { - "label": "" + "label": "Zobraziť graf disku" }, "showDiskIO": { - "label": "" + "label": "Zobraziť graf I/O disku" }, "showNetwork": { - "label": "" + "label": "Zobraziť graf siete" }, "showDockerCpu": { - "label": "" + "label": "Zobraziť graf CPU Docker" }, "showDockerMemory": { - "label": "" + "label": "Zobraziť graf pamäte Docker" }, "showDockerNetwork": { - "label": "" + "label": "Zobraziť graf siete Docker" } }, - "selectSystem": "", + "selectSystem": "Vybrať systém", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "Využitie CPU", + "subtitle": "Priemerné využitie CPU v celom systéme", + "series": "Procesor" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Využitie pamäte", + "subtitle": "Presné využitie v zaznamenanom čase", + "series": "Použité", + "cache": "Cache/Buffery" }, "disk": { - "title": "", + "title": "Využitie disku", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "I/O disku", + "subtitle": "Prenosová rýchlosť koreňového súborového systému", + "read": "Čítanie", + "write": "Zápis" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Šírka pásma", + "subtitle": "Sieťová prevádzka verejných rozhraní", + "sent": "Odoslané", + "recv": "Prijaté" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Využitie CPU Docker", + "subtitle": "Priemerné využitie CPU kontajnerov" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Využitie pamäte Docker", + "subtitle": "Využitie pamäte Docker kontajnerov" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "I/O siete Docker", + "subtitle": "Sieťová prevádzka Docker kontajnerov" } } } @@ -4528,7 +4575,7 @@ "api": "API", "certificates": "Certifikáty", "tasks": "Úlohy", - "backup": "" + "backup": "Záloha" } }, "settings": "Nastavenia", @@ -4609,7 +4656,7 @@ "private": "Táto tabuľa je súkromná" }, "noResults": { - "title": "" + "title": "Zatiaľ žiadne dosky" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Prvý deň v týždni", "accessibility": "Prístupnosť", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Sprievodcovia", + "description": "Obnovte sprievodcov, aby sa vám zobrazili pri ďalšej návšteve ovládacieho panela alebo prístrojovej dosky.", + "reset": "Obnoviť sprievodcov", "resetSuccess": { - "title": "", - "message": "" + "title": "Sprievodcovia obnovení", + "message": "Sprievodcovia sa pri ďalšej návšteve zobrazia znova" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Dokončené", + "notStarted": "Nezačaté" }, "name": { - "management": "", - "dashboard": "" + "management": "Administrácia", + "dashboard": "Prístrojová doska" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "Predvolená farebná schéma", "options": { - "auto": "", + "auto": "Automaticky", "light": "Svetlý", "dark": "Tmavý" } @@ -4984,213 +5031,213 @@ } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "AI / MCP", + "title": "Integrácia AI", + "subtitle": "Server Model Context Protocol (MCP)", + "description": "Pripojte AI asistentov k vašej inštancii Homarr a ovládajte celý svoj homelab pomocou prirodzeného jazyka. Vyhľadávajte a požadujte médiá na Overseerr, spravujte Docker kontajnery, prepínajte Pi-hole, kontrolujte zdravie servera, ovládajte zariadenia Home Assistant a ďalšie – všetko od vášho AI asistenta.", + "noApiKey": "Na autentifikáciu so serverom MCP potrebujete API kľúč.", + "createApiKeyButton": "Vytvoriť API kľúč", "endpoint": { - "title": "" + "title": "Koncový bod MCP" }, "authentication": { - "title": "", - "intro": "", + "title": "Autentifikácia", + "intro": "So serverom MCP sa môžete autentifikovať pomocou API kľúča alebo OAuth. Obe metódy udeľujú rovnakú úroveň prístupu.", "apiKey": { - "title": "", - "description": "" + "title": "API kľúč (manuálne)", + "description": "Odovzdajte hlavičku ApiKey s vaším úplným API kľúčom v konfigurácii klienta MCP." }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (prihlásenie cez prehliadač)", + "description": "Klienti, ktorí podporujú OAuth (ako Claude Code, opencode alebo Cursor), sa môžu autentifikovať otvorením okna prehliadača. Spustite príkaz auth vo vašom klientovi, prihláste sa do Homarr v prehliadači a ste pripojení – API kľúč sa vytvorí automaticky.", + "hint": "Tokeny OAuth sa zobrazujú ako bežné API kľúče na karte Autentifikácia. Môžete ich kedykoľvek odvolať." }, - "permissions": "" + "permissions": "API kľúč určuje oprávnenia dostupné pre AI – funguje s rovnakou úrovňou prístupu ako vlastník kľúča." }, "clientConfig": { - "title": "", + "title": "Konfigurácia klienta", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "Odporúčané", + "title": "Streamovateľné HTTP", + "worksWith": "Funguje s: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", + "addToConfig": "Pridajte do konfiguračného súboru vášho klienta MCP:", + "cursor": "{name}: {file} v nastaveniach vášho projektu alebo globálnych nastaveniach", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} alebo použite {command}", + "vsCodeCopilot": "{name}: {file} v nastaveniach pracovného priestoru", + "replaceHint": "Nahraďte zástupný symbol kľúčom API, ktorý ste dostali pri jeho vytváraní." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (starší klienti cez mcp-remote bridge)", + "description": "Pre klientov, ktorí podporujú iba stdio transport. Vyžaduje lokálne nainštalovaný {dependency} (Node.js):" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "Otestujte svoje pripojenie", + "description": "Spustite toto vo vašom termináli na overenie, či je koncový bod dosiahnuteľný a váš API kľúč funguje:", + "hint": "Úspešná odpoveď vráti schopnosti servera MCP. Ak uvidíte chybu, skontrolujte JSON odpoveď pre rady." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "Dostupné nástroje", + "description": "{count} nástrojov k dispozícii. Rozbaľte kategóriu, aby ste videli jednotlivé nástroje a ich popisy.", + "columnType": "Typ", + "columnName": "Nástroj", + "columnDescription": "Popis" }, "troubleshooting": { - "title": "", + "title": "Riešenie problémov", "missingHeader": { - "title": "", - "description": "" + "title": "\"Chýbajúca hlavička ApiKey\"", + "description": "Váš klient neodosiela hlavičku {header}. Overte, či je sekcia {section} vo vašej konfigurácii MCP správna. Niektorí klienti vyžadujú reštart po zmenách konfigurácie." }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"Neplatný formát ApiKey\"", + "description": "Uistite sa, že ste skopírovali celý API kľúč, nielen jeho časť." }, "invalidKey": { - "title": "", - "description": "" + "title": "\"Neplatný API kľúč\"", + "description": "ID kľúča sa nenašlo alebo je token nesprávny. API kľúče je možné zobraziť iba raz pri vytvorení. Ak ste ho stratili, odstráňte starý kľúč a vytvorte nový." }, "connectionRefused": { - "title": "", - "description": "" + "title": "Odmietnuté pripojenie / časový limit", + "description": "Uistite sa, že URL je dosiahnuteľné z vášho AI klienta. Ak Homarr beží za reverzným proxy alebo v Dockeri, použite externú URL (nie {localhost}). Overte, či je port správny (predvolený: 7575 pre Docker)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "Nástroje sa nezobrazujú", + "description": "Niektoré nástroje vyžadujú nakonfigurovanie špecifických integrácií (napr. Docker, Overseerr). Zoznam nástrojov závisí od toho, čo je k dispozícii vo vašej inštancii Homarr." } }, - "copy": "", + "copy": "Kopírovať", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "Nainštalovať jedným kliknutím", + "subtitle": "Používa OAuth – autentifikujte sa vo svojom prehliadači pri prvom použití", + "vsCode": "Nainštalovať do VS Code", + "cursor": "Nainštalovať do Cursor", + "copyUrl": "Kopírovať URL MCP", + "copied": "Skopírované!", + "copyHint": "Pre ChatGPT, Claude Code alebo akéhokoľvek klienta MCP", + "manualConfig": "Manuálna konfigurácia" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Úplná záloha databázy", + "metaTitle": "Zálohovanie a obnovenie", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Exportovať databázu", + "description": "Stiahnite si úplnú zálohu vašej databázy SQLite vrátane všetkých nastavení, používateľov, dosiek a šifrovaných tajomstiev integrácií. Záloha je zabalená ako súbor ZIP s šifrovacím kľúčom a metadátami.", + "button": "Stiahnuť zálohu", + "error": "Export zlyhal", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Export citlivých údajov", + "warningTitle": "Tento export obsahuje celú vašu databázu.", + "warningBody": "Záloha obsahuje všetkých používateľov, tajomstvá integrácií (šifrované), kľúče API, konfigurácie dosiek a údaje aplikácií. Exportovaný súbor bezpečne uložte a nezdieľajte ho.", + "typePrompt": "Napíšte \"{phrase}\" pre pokračovanie", + "submit": "Exportovať databázu", + "cancel": "Zrušiť" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Obnoviť databázu", + "description": "Nahrajte predtým exportovanú zálohu ZIP na obnovenie databázy. Tým sa nahradí celá vaša databáza. Ak bola záloha vytvorená s iným šifrovacím kľúčom, tajomstvá budú automaticky znovu zašifrované.", + "warning": "Obnovením zálohy sa úplne nahradí vaša aktuálna databáza a reštartuje sa aplikácia. Túto akciu nie je možné vrátiť späť.", "dropzone": { - "title": "", - "description": "" + "title": "Sem presuňte svoju zálohu ZIP alebo kliknutím prehliadajte", + "description": "Prijímajú sa iba súbory .zip zo zálohy SQLite Homarr" }, - "changeFile": "", - "button": "", + "changeFile": "Zmeniť súbor", + "button": "Obnoviť databázu", "success": { - "title": "", - "message": "" + "title": "Obnovenie dokončené", + "message": "Databáza bola úspešne obnovená. Aplikácia sa reštartuje..." }, - "error": "" + "error": "Import zlyhal" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Obsah zálohy", + "exported": "Exportované {date}", + "loading": "Analyzuje sa súbor zálohy...", + "errorTitle": "Chyba ukážky", + "entity": "Entita", + "count": "Počet", + "boards": "Dosky", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Dosky", + "user": "Používatelia", + "app": "Aplikácie", + "integration": "Integrácie", + "item": "Miniaplikácie", + "media": "Médiá", + "search_engine": "Vyhľadávače" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Nepodarilo sa analyzovať súbor zálohy", + "invalidMissingMetadata": "Neplatná záloha: chýba metadata.json", + "invalidMissingDb": "Neplatná záloha: chýba db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Sem presuňte svoju zálohu ZIP", + "description": "Prijímajú sa súbory .zip zo zálohy SQLite Homarr (max. 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analyzuje sa záloha...", + "changeFile": "Zmeniť súbor", + "continueToRestore": "Pokračovať na obnovenie", + "tryAgain": "Skúste znova", + "analysisError": "Chyba analýzy", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Obsah zálohy", + "exported": "Exportované {date}", + "entity": "Entita", + "count": "Počet", + "boards": "Dosky", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Dosky", + "user": "Používatelia", + "app": "Aplikácie", + "integration": "Integrácie", + "item": "Miniaplikácie", + "media": "Médiá", + "search_engine": "Vyhľadávače" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "Použitá {count} migrácia", + "migrationsAppliedPlural": "Použitých {count} migrácií", + "migrationsOlderVersion": "Táto záloha pochádza zo staršej verzie Homarr. Bola použitá {count} migrácia schémy na jej aktualizáciu.", + "migrationsOlderVersionPlural": "Táto záloha pochádza zo staršej verzie Homarr. Bolo použitých {count} migrácií schémy na jej aktualizáciu.", + "migrationsUpToDate": "Databázová schéma je aktuálna (použitých {count} migrácií)", + "upToDate": "Aktuálny", + "migrationsPending": "{count} čakajúcich" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Aplikujú sa migrácie ({current}/{total})", + "migrationLabel": "Migrácia {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Deštruktívna akcia", + "warningTitle": "Týmto sa natrvalo nahradí celá vaša databáza.", + "warningBody": "Všetky aktuálne dosky, používatelia, aplikácie, integrácie, nastavenia a relácie budú stratené. Túto akciu nie je možné vrátiť späť. Aplikácia sa po obnovení reštartuje.", + "typePrompt": "Napíšte \"{phrase}\" pre pokračovanie", + "cancel": "Zrušiť", + "submit": "Obnoviť databázu" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Obnovuje sa databáza...", + "extracting": "Rozbaľuje sa archív zálohy", + "migrating": "Aplikujú sa databázové migrácie", + "encrypting": "Znova sa šifrujú tajomstvá integrácií", + "swapping": "Nahrádza sa databázový súbor", + "restarting": "Reštartuje sa server" }, "complete": { - "title": "", - "message": "" + "title": "Obnovenie dokončené", + "message": "Databáza bola úspešne obnovená. Server sa reštartuje – o niekoľko sekúnd obnovte stránku." }, "failed": { - "title": "" + "title": "Obnovenie zlyhalo" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Neplatná záloha: chýba metadata.json", + "invalidMissingDb": "Neplatná záloha: chýba db.sqlite", + "analyzeError": "Nepodarilo sa analyzovať zálohu" } } }, @@ -5277,15 +5324,15 @@ "label": "Porty" }, "host": { - "label": "" + "label": "Hostiteľ" } }, "action": { "title": "Úkony", "logs": { - "label": "", + "label": "Zobraziť denníky", "page": { - "title": "" + "title": "{name} denníky" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Odstrániť", + "confirm": "", "notification": { "success": { "title": "Kontajnery boli odstránené", @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "Denníky" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "Globálne príkazy", "option": { "colorScheme": { - "auto": "", + "auto": "Prepnúť režim vzhľadu", "light": "Prepnúť na svetlý motív", "dark": "Prepnúť na tmavý motív" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Preferencie", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Vyberte preferenciu, ktorú chcete zmeniť", + "backHint": "Stlačte Backspace alebo použite tlačidlo Späť na vrátenie", + "backAction": "Späť" } }, "notification": { "error": { - "message": "" + "message": "Nepodarilo sa aktualizovať preferenciu" } }, "option": { "preferences": { - "label": "" + "label": "Otvoriť preferencie" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Povolené", + "disabled": "Zakázané" }, "board": { - "none": "", - "unavailable": "" + "none": "Žiadne", + "unavailable": "Aktuálne vybraté (nedostupné)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Žiadne", + "unavailable": "Aktuálne vybraté (nedostupné)" }, "colorScheme": { - "label": "", + "label": "Farebná schéma", "children": { "detail": { - "title": "" + "title": "Vyberte farebnú schému" } } }, "locale": { - "label": "", + "label": "Jazyk", "children": { "detail": { - "title": "" + "title": "Vyberte preferovaný jazyk" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Predvolený vyhľadávací nástroj", "children": { "detail": { - "title": "" + "title": "Vyberte predvolený vyhľadávací nástroj" } } }, "openSearchInNewTab": { - "label": "", + "label": "Otvoriť výsledky vyhľadávania na novej karte", "children": { "detail": { - "title": "" + "title": "Otvoriť výsledky vyhľadávania na novej karte" } } }, "ddgBangs": { - "label": "", + "label": "Povoliť príkazy DuckDuckGo bang", "children": { "detail": { - "title": "" + "title": "Povoliť príkazy DuckDuckGo bang" } } }, "firstDayOfWeek": { - "label": "", + "label": "Prvý deň v týždni", "children": { "detail": { - "title": "" + "title": "Vyberte prvý deň v týždni" } } }, "homeBoardId": { - "label": "", + "label": "Domáca doska", "children": { "detail": { - "title": "" + "title": "Vyberte domácu dosku" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobilná domáca doska", "children": { "detail": { - "title": "" + "title": "Vyberte mobilnú domácu dosku" } } }, "pingIconsEnabled": { - "label": "", + "label": "Používať ikony pre pingy", "children": { "detail": { - "title": "" + "title": "Používať ikony pre pingy" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Otvoriť celú stránku preferencií" } } } } }, "media": { - "help": "", + "help": "Vyhľadajte filmy alebo seriály na vyžiadanie", "requestMovie": "Vyžiadať film", "requestSeries": "Vyžiadať seriál", "openIn": "Otvoriť v {kind}", "group": { - "title": "" + "title": "Filmy a seriály" }, "action": { "search": { - "label": "", - "description": "", + "label": "Vyhľadajte filmy alebo seriály", + "description": "Začnite písať, aby ste vyhľadali svoje integrácie žiadostí o médiá", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Pridajte integráciu Overseerr, Jellyseerr alebo Seerr, aby ste umožnili vyhľadávanie médií.", + "scoped": "Táto miniaplikácia nemá prístupnú integráciu žiadostí o médiá." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "K dispozícii", + "partiallyAvailable": "Čiastočne", + "processing": "Spracováva sa", + "requested": "Vyžiadané", + "pending": "Vyžiadané" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "Vyhľadávače", - "tipDdgBangs": "", + "tipDdgBangs": "Tip: Môžete tu použiť aj akékoľvek príkazy DuckDuckGo bang, napr. !niečo", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Vyhľadať \"{query}\" pomocou {label}", + "pressEnterToOpen": "Stlačením Enter otvoriť", + "engineSelected": "{label} vybrané (!{bang})", + "typeQueryToContinue": "Ak chcete pokračovať, zadajte vyhľadávací dotaz", + "emptyBangHint": "Napíšte bang, napr. !yt, a stlačte medzeru na výber" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "Séria", "episodes": "Epizódy", - "status": "" + "status": "Stav" }, "status": { - "requested": "" + "requested": "Vyžiadané" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Prečítať si dokumentáciu", + "next": "Ďalej", + "prev": "Späť", + "done": "Hotovo", + "skip": "Preskočiť prehliadku", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Vitajte v Homarr!", + "description": "Toto je vaše riadiace centrum. Odtiaľto spravujete dosky, aplikácie, integrácie, používateľov a nastavenia servera. Poďme si prejsť jednotlivé sekcie." }, "boardsList": { - "title": "", - "description": "" + "title": "Vaše dosky", + "description": "Tu sú všetky vaše prístrojové dosky. Každá doska má vlastné rozloženie, pozadie a nastavenia prístupu. Môžete vidieť, kto ktorú vytvoril a či je verejná alebo súkromná." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Vytvoriť dosku", + "description": "Kliknutím sem vytvoríte novú prístrojovú dosku alebo importujete z predchádzajúcej inštalácie Homarr. Každá doska dostane vlastnú adresu URL, ktorú môžete zdieľať." }, "appsList": { - "title": "", - "description": "" + "title": "Vaše aplikácie", + "description": "Toto sú všetky pridané aplikácie – odkazy na vaše self-hosted služby. Každá aplikácia má ikonu, voliteľnú kontrolu stavu a odznak stavu na prístrojovej doske." }, "appsCreate": { - "title": "", - "description": "" + "title": "Pridať aplikáciu", + "description": "Tu zaregistrujte novú službu. Zadajte názov, URL a ikonu – zobrazí sa ako dlaždica na vašich doskách so živým monitorovaním stavu." }, "integrationsList": { - "title": "", - "description": "" + "title": "Vaše integrácie", + "description": "Toto sú služby pripojené k Homarr – Sonarr, Radarr, Plex, Jellyfin a viac ako 50 ďalších. Všetky prihlasovacie údaje sú šifrované v pokoji." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Pridať integráciu", + "description": "Tu pripojte novú službu. Vyberte typ, zadajte URL a kľúč API – Homarr pred uložením overí pripojenie." }, "usersList": { - "title": "", - "description": "" + "title": "Vaši používatelia", + "description": "Pozrite sa na všetkých, ktorí majú prístup. Organizujte používateľov do skupín a kontrolujte, kto môže zobraziť alebo upraviť každú dosku." }, "usersCreate": { - "title": "", - "description": "" + "title": "Vytvoriť používateľa", + "description": "Tu pridajte nové používateľské konto. Môžete tiež použiť pozývacie odkazy na jednoduché pripojenie. To je koniec prehliadky – ste pripravení!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Toto je vaša doska", + "description": "Prístrojová doska drag-and-drop, kde usporiadate aplikácie a miniaplikácie. Kedykoľvek stlačte Ctrl+K na vyhľadávanie aplikácií, dosiek a akcií." }, "editMode": { - "title": "", - "description": "" + "title": "Režim úprav", + "description": "Kliknutím sem vstúpte do režimu úprav. Potom môžete pridávať miniaplikácie, aplikácie a sekcie – potiahnutím premiestnite, zmeňte veľkosť pomocou rohového úchytu. Opätovným kliknutím uložíte zmeny." }, "settings": { - "title": "", - "description": "" + "title": "Nastavenia dosky", + "description": "Zmeňte názov, stĺpce, pozadie, farby tejto dosky a kto k nej má prístup. Každá doska môže byť verejná alebo súkromná." }, "switcher": { - "title": "", - "description": "" + "title": "Prepnúť dosky", + "description": "Skákať medzi doskami. Vytvorte samostatné prístrojové dosky na rôzne účely – médiá, sieťovanie, na používateľa alebo čokoľvek, čo sa vám páči." }, "userMenu": { - "title": "", - "description": "" + "title": "Váš profil", + "description": "Zmeňte farebnú schému, jazyk, domovskú dosku a preferencie. Odtiaľto môžete tiež prejsť do ovládacieho panela." } } } diff --git a/packages/translation/src/lang/sl.json b/packages/translation/src/lang/sl.json index 75741509e..9490c28d1 100644 --- a/packages/translation/src/lang/sl.json +++ b/packages/translation/src/lang/sl.json @@ -8,9 +8,9 @@ "action": { "scratch": "", "importOldmarr": "", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Obnovi iz varnostne kopije SQLite", + "restoreSqliteDescription": "Naložite celotno varnostno kopijo baze podatkov SQLite iz prejšnjega primerka Homarr. To bo obnovilo vse table, uporabnike, aplikacije, integracije in nastavitve.", + "backToOptions": "← Nazaj na možnosti nastavitve" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "" }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Integracije", + "subtitle": "Izberite storitve, ki jih uporabljate.", + "description": "Izberite integracije, ki jih želite povezati. Samodejno bomo nastavili vašo nadzorno ploščo z ustreznimi gradniki.", "action": { - "continue": "", - "skip": "" + "continue": "Nadaljuj", + "skip": "Zaenkrat preskoči" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} od {total}", + "skip": "Preskoči to integracijo", + "finishing": "Nastavljanje vaše nadzorne plošče ...", "error": { - "title": "", - "message": "" + "title": "Nastavitev ni uspela", + "message": "Pri nastavljanju vaše nadzorne plošče je prišlo do napake. Poskusite znova." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "Pomočniki URL", + "description": "Ti pomočniki poskušajo uganiti URL za vaše storitve. Če ne deluje, preprosto ročno vnesite naslov." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Osnovni URL", + "placeholder": "homelab.local ali 192.168.1.1", + "hint": "Vnesite svojo osnovno domeno ali IP za samodejno izpolnjevanje URL-jev integracij", + "warning": "Če zdaj nastavite osnovni URL, bodo vsi URL-ji integracij samodejno izpolnjeni, kar vam prihrani čas med nastavljanjem", + "preview": "npr. {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Pod-domena", + "hostPort": "Gostitelj:Vrata" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker zazna {count} storitev", + "detectedBreakdown": "{integrations} integracij · {apps} aplikacij", + "summary": "Homarr je zaznal {apps} aplikacij, od katerih ima {integrations} vgrajene integracije", + "appBadge": "Aplikacija", + "appSectionLabel": "Aplikacije za dodajanje na nadzorno ploščo ({count} izbranih)", + "scanning": "Skeniranje Dockerja ...", + "scanningDescription": "Iskanje tekočih vsebnikov v vašem sistemu" } }, "finish": { @@ -158,32 +158,32 @@ "subtitle": "Dobrodošli nazaj! Prosimo vnesite svoje podatke" }, "invite": { - "title": "", - "subtitle": "", - "description": "" + "title": "Pridruži se Homarr", + "subtitle": "Dobrodošli v Homarr! Prosimo, ustvarite svoj račun", + "description": "Povabil vas je {username}" }, "init": { - "title": "", - "subtitle": "" + "title": "Nova namestitev Homarr", + "subtitle": "Prosimo, ustvarite začetnega skrbniškega uporabnika" } }, "field": { "email": { "label": "E-naslov", - "verified": "" + "verified": "Preverjeno" }, "username": { "label": "Uporabniško ime" }, "password": { "label": "Geslo", - "suggestionsTitle": "", + "suggestionsTitle": "Predlogi gesla", "suggestion": { - "length": "", + "length": "Vsaj 8 znakov", "lowercase": "Vključuje male črke", "uppercase": "Vključuje velike tiskane črke", "number": "Vključuje število", - "special": "" + "special": "Vključuje poseben simbol" } }, "passwordConfirm": { @@ -193,10 +193,10 @@ "label": "Prejšnje geslo" }, "homeBoard": { - "label": "" + "label": "Domača tabla" }, "pingIconsEnabled": { - "label": "" + "label": "Uporabi ikone za ping" }, "enableRightClickOnWidgets": { "label": "", @@ -209,24 +209,24 @@ "label": "" }, "ddgBangs": { - "label": "" + "label": "Omogoči DuckDuckGo bange" } }, "error": { - "usernameTaken": "" + "usernameTaken": "Uporabniško ime je že zasedeno" }, "action": { "login": { "label": "Prijava", - "labelWith": "", + "labelWith": "Prijava z {provider}", "notification": { "success": { "title": "Prijava uspešna", "message": "Zdaj ste prijavljeni" }, "error": { - "title": "", - "message": "" + "title": "Prijava ni uspela", + "message": "Vaša prijava ni uspela" } }, "forgotPassword": { @@ -239,11 +239,11 @@ "notification": { "success": { "title": "Ustvarjen račun", - "message": "" + "message": "Za nadaljevanje se prosimo prijavite" }, "error": { - "title": "", - "message": "" + "title": "Ustvarjanje računa ni uspelo", + "message": "Vašega računa ni bilo mogoče ustvariti" } } }, @@ -252,20 +252,20 @@ "label": "Spremeni geslo", "notification": { "success": { - "message": "" + "message": "Geslo je bilo uspešno spremenjeno" }, "error": { - "message": "" + "message": "Gesla ni mogoče spremeniti" } } }, "changeHomeBoard": { "notification": { "success": { - "message": "" + "message": "Domača tabla je bila uspešno spremenjena" }, "error": { - "message": "" + "message": "Domače table ni mogoče spremeniti" } } }, @@ -282,58 +282,58 @@ "changeFirstDayOfWeek": { "notification": { "success": { - "message": "" + "message": "Prvi dan v tednu je bil uspešno spremenjen" }, "error": { - "message": "" + "message": "Prvega dne v tednu ni mogoče spremeniti" } } }, "changePingIconsEnabled": { "notification": { "success": { - "message": "" + "message": "Ikone za ping so uspešno preklopljene" }, "error": { - "message": "" + "message": "Ikon za ping ni mogoče preklopiti" } } }, "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo bangi uspešno preklopljeni" }, "error": { - "message": "" + "message": "Preklop DuckDuckGo bangov ni mogoč" } } }, "manageAvatar": { "changeImage": { - "label": "", + "label": "Spremeni sliko", "notification": { "success": { - "message": "" + "message": "Slika je bila uspešno spremenjena" }, "error": { - "message": "" + "message": "Slike ni mogoče spremeniti" }, "toLarge": { - "title": "", - "message": "" + "title": "Slika je prevelika", + "message": "Največja velikost slike je {size}" } } }, "removeImage": { "label": "Odstrani sliko", - "confirm": "", + "confirm": "Ali ste prepričani, da želite odstraniti sliko?", "notification": { "success": { - "message": "" + "message": "Slika je bila uspešno odstranjena" }, "error": { - "message": "" + "message": "Slike ni mogoče odstraniti" } } } @@ -341,34 +341,34 @@ "editProfile": { "notification": { "success": { - "message": "" + "message": "Profil je bil uspešno posodobljen" }, "error": { - "message": "" + "message": "Profila ni mogoče posodobiti" } } }, "delete": { - "label": "", - "description": "", - "confirm": "" + "label": "Trajno izbriši uporabnika", + "description": "Izbriše tega uporabnika skupaj z njegovimi nastavitvami. Ne bo izbrisal nobenih tabel. Uporabnik ne bo obveščen.", + "confirm": "Ali ste prepričani, da želite izbrisati uporabnika {username} z njegovimi nastavitvami?" }, "select": { "label": "Izberi uporabnika", - "notFound": "" + "notFound": "Uporabnika ni mogoče najti" }, "transfer": { - "label": "" + "label": "Izberi novega lastnika" } } }, "group": { - "title": "", - "name": "", - "search": "", + "title": "Skupine", + "name": "Skupina", + "search": "Poišči skupino", "field": { "name": "Ime", - "members": "", + "members": "Člani", "homeBoard": { "label": "", "description": "" @@ -380,11 +380,11 @@ }, "permission": { "admin": { - "title": "", + "title": "Skrbnik", "item": { "admin": { - "label": "", - "description": "" + "label": "Skrbnik", + "description": "Člani s tem dovoljenjem imajo popoln dostop do vseh funkcij in nastavitev" } } }, @@ -392,20 +392,20 @@ "title": "Aplikacije", "item": { "create": { - "label": "", - "description": "" + "label": "Ustvari aplikacije", + "description": "Članom dovoli ustvarjanje aplikacij" }, "use-all": { - "label": "", - "description": "" + "label": "Uporabi vse aplikacije", + "description": "Članom dovoli dodajanje vseh aplikacij na njihove table" }, "modify-all": { - "label": "", - "description": "" + "label": "Spremeni vse aplikacije", + "description": "Članom dovoli spreminjanje vseh aplikacij" }, "full-all": { - "label": "", - "description": "" + "label": "Popoln dostop do aplikacij", + "description": "Članom dovoli upravljanje, uporabo in brisanje vseh aplikacij" } } }, @@ -413,165 +413,165 @@ "title": "Deske", "item": { "create": { - "label": "", - "description": "" + "label": "Ustvari table", + "description": "Članom dovoli ustvarjanje tabel" }, "view-all": { - "label": "", - "description": "" + "label": "Ogled vseh tabel", + "description": "Članom dovoli ogled vseh tabel" }, "modify-all": { - "label": "", - "description": "" + "label": "Spremeni vse table", + "description": "Članom dovoli spreminjanje vseh tabel (ne vključuje nadzora dostopa in nevarnega območja)" }, "full-all": { - "label": "", - "description": "" + "label": "Popoln dostop do tabel", + "description": "Članom dovoli ogled, spreminjanje in brisanje vseh tabel (vključno z nadzorom dostopa in nevarnim območjem)" } } }, "integration": { - "title": "", + "title": "Integracije", "item": { "create": { - "label": "", - "description": "" + "label": "Ustvari integracije", + "description": "Članom dovoli ustvarjanje integracij" }, "use-all": { - "label": "", - "description": "" + "label": "Uporabi vse integracije", + "description": "Članom dovoli dodajanje vseh integracij na njihove table" }, "interact-all": { - "label": "", - "description": "" + "label": "Interakcija s katero koli integracijo", + "description": "Članom dovoli interakcijo s katero koli integracijo" }, "full-all": { - "label": "", - "description": "" + "label": "Popoln dostop do integracij", + "description": "Članom dovoli upravljanje, uporabo in interakcijo s katero koli integracijo" } } }, "media": { - "title": "", + "title": "Mediji", "item": { "upload": { - "label": "", - "description": "" + "label": "Naloži medije", + "description": "Članom dovoli nalaganje medijev" }, "view-all": { - "label": "", - "description": "" + "label": "Ogled vseh medijev", + "description": "Članom dovoli ogled vseh medijev" }, "full-all": { - "label": "", - "description": "" + "label": "Popoln dostop do medijev", + "description": "Članom dovoli upravljanje in brisanje katerega koli medija" } } }, "other": { - "title": "", + "title": "Drugo", "item": { "view-logs": { - "label": "", - "description": "" + "label": "Ogled dnevnikov", + "description": "Članom dovoli ogled dnevnikov" } } }, "search-engine": { - "title": "", + "title": "Iskalniki", "item": { "create": { - "label": "", - "description": "" + "label": "Ustvari iskalnike", + "description": "Članom dovoli ustvarjanje iskalnikov" }, "modify-all": { - "label": "", - "description": "" + "label": "Spremeni vse iskalnike", + "description": "Članom dovoli spreminjanje vseh iskalnikov" }, "full-all": { - "label": "", - "description": "" + "label": "Popoln dostop do iskalnikov", + "description": "Članom dovoli upravljanje in brisanje katerega koli iskalnika" } } } }, "memberNotice": { - "mixed": "", - "external": "" + "mixed": "Nekateri člani so iz zunanjih ponudnikov in jih tukaj ni mogoče upravljati", + "external": "Vsi člani so iz zunanjih ponudnikov in jih tukaj ni mogoče upravljati" }, "reservedNotice": { - "message": "" + "message": "Ta skupina je rezervirana za sistemsko uporabo in omejuje nekatera dejanja. " }, "action": { "create": { - "label": "", + "label": "Nova skupina", "notification": { "success": { - "message": "" + "message": "Skupina je bila uspešno ustvarjena" }, "error": { - "message": "" + "message": "Skupine ni bilo mogoče ustvariti" } } }, "transfer": { - "label": "", - "description": "", - "confirm": "", + "label": "Prenos lastništva", + "description": "Prenesite lastništvo te skupine na drugega uporabnika.", + "confirm": "Ali ste prepričani, da želite prenesti lastništvo skupine {name} na {username}?", "notification": { "success": { - "message": "" + "message": "Lastništvo skupine {group} je bilo uspešno preneseno na {user}" }, "error": { - "message": "" + "message": "Lastništva ni mogoče prenesti" } } }, "addMember": { - "label": "" + "label": "Dodaj člana" }, "removeMember": { - "label": "", - "confirm": "" + "label": "Odstrani člana", + "confirm": "Ali ste prepričani, da želite odstraniti {user} iz te skupine?" }, "delete": { - "label": "", - "description": "", - "confirm": "", + "label": "Izbriši skupino", + "description": "Ko izbrišete skupino, ni poti nazaj. Prosimo, bodite prepričani.", + "confirm": "Ali ste prepričani, da želite izbrisati skupino {name}?", "notification": { "success": { - "message": "" + "message": "Skupina {name} je bila uspešno izbrisana" }, "error": { - "message": "" + "message": "Skupine {name} ni mogoče izbrisati" } } }, "changePermissions": { "notification": { "success": { - "title": "", - "message": "" + "title": "Dovoljenja shranjena", + "message": "Dovoljenja so bila uspešno shranjena" }, "error": { - "title": "", - "message": "" + "title": "Dovoljenja niso shranjena", + "message": "Dovoljenja niso bila shranjena" } } }, "update": { "notification": { "success": { - "message": "" + "message": "Skupina {name} je bila uspešno shranjena" }, "error": { - "message": "" + "message": "Skupine {name} ni mogoče shraniti" } } }, "select": { - "label": "", - "notFound": "" + "label": "Izberi skupino", + "notFound": "Ni najdene skupine" }, "settings": { "board": { @@ -609,47 +609,47 @@ "list": { "title": "Aplikacije", "noResults": { - "title": "", - "action": "" + "title": "Ni še nobenih aplikacij", + "action": "Ustvari svojo prvo aplikacijo" } }, "create": { - "title": "", + "title": "Nova aplikacija", "notification": { "success": { - "title": "", - "message": "" + "title": "Ustvarjanje uspešno", + "message": "Aplikacija je bila uspešno ustvarjena" }, "error": { - "title": "", - "message": "" + "title": "Ustvarjanje ni uspelo", + "message": "Aplikacije ni bilo mogoče ustvariti" } } }, "edit": { - "title": "", + "title": "Uredi aplikacijo", "notification": { "success": { - "title": "", - "message": "" + "title": "Spremembe so bile uspešno uveljavljene", + "message": "Aplikacija je bila uspešno shranjena" }, "error": { - "title": "", - "message": "" + "title": "Sprememb ni mogoče uveljaviti", + "message": "Aplikacije ni bilo mogoče shraniti" } } }, "delete": { - "title": "", - "message": "", + "title": "Izbriši aplikacijo", + "message": "Ali ste prepričani, da želite izbrisati aplikacijo {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Brisanje uspešno", + "message": "Aplikacija je bila uspešno izbrisana" }, "error": { - "title": "", - "message": "" + "title": "Brisanje ni uspelo", + "message": "Aplikacije ni mogoče izbrisati" } } } @@ -659,10 +659,10 @@ "label": "Ime" }, "description": { - "label": "" + "label": "Opis" }, "url": { - "label": "" + "label": "Url" }, "useDifferentUrlForPing": { "checkbox": { @@ -673,8 +673,8 @@ }, "action": { "select": { - "label": "", - "notFound": "", + "label": "Izberi aplikacijo", + "notFound": "Ni najdene aplikacije", "search": "", "noResults": "", "action": "", @@ -896,22 +896,22 @@ "integration": { "page": { "list": { - "title": "", - "search": "", + "title": "Integracije", + "search": "Išči integracije", "noResults": { - "title": "" + "title": "Ni še nobenih integracij" } }, "create": { - "title": "", + "title": "Nova integracija {name}", "notification": { "success": { - "title": "", - "message": "" + "title": "Ustvarjanje uspešno", + "message": "Integracija je bila uspešno ustvarjena" }, "error": { - "title": "", - "message": "" + "title": "Ustvarjanje ni uspelo", + "message": "Integracije ni bilo mogoče ustvariti" } }, "app": { @@ -931,15 +931,15 @@ } }, "edit": { - "title": "", + "title": "Uredi integracijo {name}", "notification": { "success": { - "title": "", - "message": "" + "title": "Spremembe uspešno uveljavljene", + "message": "Integracija je bila uspešno shranjena" }, "error": { - "title": "", - "message": "" + "title": "Sprememb ni mogoče uveljaviti", + "message": "Integracije ni bilo mogoče shraniti" } }, "app": { @@ -951,16 +951,16 @@ } }, "delete": { - "title": "", - "message": "", + "title": "Izbriši integracijo", + "message": "Ali ste prepričani, da želite izbrisati integracijo {name}?", "notification": { "success": { - "title": "", - "message": "" + "title": "Brisanje uspešno", + "message": "Integracija je bila uspešno izbrisana" }, "error": { - "title": "", - "message": "" + "title": "Brisanje ni uspelo", + "message": "Integracije ni mogoče izbrisati" } } } @@ -970,7 +970,7 @@ "label": "Ime" }, "url": { - "label": "" + "label": "Url" }, "attemptSearchEngineCreation": { "label": "", @@ -987,52 +987,52 @@ "placeholder": "" }, "apiKeySettings": { - "label": "" + "label": "Pridobi API ključ" } }, "action": { - "create": "" + "create": "Nova integracija" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count, plural, one {# gradnik} two {# gradnika} few {# gradniki} other {# gradnikov}}", + "noWidgets": "Ni gradnikov", + "detected": "Zaznano prek Dockerja" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", + "dnsHole": "DNS", + "mediaService": "Mediji", + "calendar": "Koledar", + "mediaSearch": "Iskanje", + "mediaRelease": "Izdaje", + "mediaRequest": "Zahteve", + "downloadClient": "Prenosi", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Razno", + "smartHomeServer": "Pametni dom", + "indexerManager": "Indeksirnik", + "healthMonitoring": "Zdravje", + "search": "Iskanje", + "mediaTranscoding": "Prekodiranje", + "networkController": "Omrežje", + "releasesProvider": "Izdaje", + "notifications": "Obvestila", + "firewall": "Požarni zid", + "timetable": "Urnik", + "photoService": "Fotografije", "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "notes": "Zapiski", + "mediaMonitoring": "Nadzor", + "speedtest": "Test hitrosti", + "analytics": "Analitika", "vpn": "", "mediaLibrary": "", "uptimeMonitoring": "" }, "testConnection": { "action": { - "create": "", - "edit": "" + "create": "Preizkusi povezavo in ustvari", + "edit": "Preizkusi povezavo in shrani" }, "error": { "common": { @@ -1160,71 +1160,71 @@ } } }, - "alertNotice": "", + "alertNotice": "Gumb Shrani je omogočen, ko je vzpostavljena uspešna povezava", "notification": { "success": { - "title": "", - "message": "" + "title": "Povezava uspešna", + "message": "Povezava je bila uspešno vzpostavljena" }, "invalidUrl": { "title": "Nepravilen URL", - "message": "" + "message": "URL je neveljaven" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "Manjkajo poverilnice", + "message": "Niso bile vnesene vse poverilnice" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "Neveljavne poverilnice", + "message": "Poverilnice so neveljavne" }, "commonError": { - "title": "", - "message": "" + "title": "Povezava ni uspela", + "message": "Povezave ni bilo mogoče vzpostaviti" }, "badRequest": { - "title": "", - "message": "" + "title": "Slaba zahteva", + "message": "Zahteva je bila nepravilno oblikovana" }, "unauthorized": { - "title": "", - "message": "" + "title": "Nepooblaščeno", + "message": "Verjetno napačne poverilnice" }, "forbidden": { - "title": "", - "message": "" + "title": "Prepovedano", + "message": "Verjetno manjkajo dovoljenja" }, "notFound": { - "title": "", - "message": "" + "title": "Ni najdeno", + "message": "Verjetno napačen url ali pot" }, "internalServerError": { - "title": "", - "message": "" + "title": "Notranja napaka strežnika", + "message": "Strežnik je naletel na napako" }, "serviceUnavailable": { - "title": "", - "message": "" + "title": "Storitev ni na voljo", + "message": "Strežnik trenutno ni na voljo" }, "connectionAborted": { - "title": "", - "message": "" + "title": "Povezava prekinjena", + "message": "Povezava je bila prekinjena" }, "domainNotFound": { - "title": "", - "message": "" + "title": "Domena ni najdena", + "message": "Domene ni bilo mogoče najti" }, "connectionRefused": { - "title": "", - "message": "" + "title": "Povezava zavrnjena", + "message": "Povezava je bila zavrnjena" }, "invalidJson": { - "title": "", - "message": "" + "title": "Neveljaven JSON", + "message": "Odgovor ni veljaven JSON" }, "wrongPath": { - "title": "", - "message": "" + "title": "Napačna pot", + "message": "Pot verjetno ni pravilna" }, "tooManyRequests": { "title": "", @@ -1233,29 +1233,29 @@ } }, "secrets": { - "title": "", - "lastUpdated": "", + "title": "Skrivnosti", + "lastUpdated": "Nazadnje posodobljeno {date}", "notSet": { "label": "", "tooltip": "" }, - "secureNotice": "", + "secureNotice": "Te skrivnosti po ustvarjanju ni mogoče pridobiti", "reset": { - "title": "", - "message": "" + "title": "Ponastavi skrivnost", + "message": "Ali ste prepričani, da želite ponastaviti to skrivnost?" }, "noSecretsRequired": { - "segmentTitle": "", - "text": "" + "segmentTitle": "Ni skrivnosti", + "text": "Za to integracijo niso potrebne skrivnosti" }, "kind": { "username": { "label": "Uporabniško ime", - "newLabel": "" + "newLabel": "Novo uporabniško ime" }, "apiKey": { - "label": "", - "newLabel": "" + "label": "API ključ", + "newLabel": "Nov API ključ" }, "password": { "label": "Geslo", @@ -1316,9 +1316,9 @@ } }, "permission": { - "use": "", - "interact": "", - "full": "" + "use": "Izberi integracije v elementih", + "interact": "Interakcija z integracijami", + "full": "Popoln dostop do integracij" }, "audiobookshelf": { "name": "", @@ -1358,8 +1358,8 @@ } }, "media": { - "plural": "", - "search": "", + "plural": "Mediji", + "search": "Poišči medij", "field": { "name": "Ime", "size": "Velikost", @@ -1367,54 +1367,54 @@ }, "action": { "upload": { - "label": "", - "file": "", + "label": "Naloži medij", + "file": "Izberi datoteko", "notification": { "success": { - "message": "" + "message": "Medij je bil uspešno naložen" }, "error": { - "message": "" + "message": "Medija ni bilo mogoče naložiti" } } }, "delete": { - "label": "", - "description": "", + "label": "Izbriši medij", + "description": "Ali ste prepričani, da želite izbrisati medij ?", "notification": { "success": { - "message": "" + "message": "Medij je bil uspešno izbrisan" }, "error": { - "message": "" + "message": "Medija ni bilo mogoče izbrisati" } } }, "copy": { - "label": "" + "label": "Kopiraj URL" }, "open": { "label": "" } }, "noResults": { - "title": "" + "title": "Ni naloženih medijev" } }, "common": { "success": "", - "beta": "", + "beta": "Preizkusna", "error": "Napaka", "action": { "add": "Dodaj", "apply": "Uporabi", - "backToOverview": "", - "skip": "", + "backToOverview": "Nazaj na pregled", + "skip": "Preskoči", "change": "", "create": "Ustvarite spletno stran", "createAnother": "", "edit": "Uredi", - "import": "", + "import": "Uvozi", "insert": "Vstavite", "remove": "Odstrani", "save": "Shrani", @@ -1424,72 +1424,72 @@ "discard": "Zapusti", "close": "", "confirm": "Potrdi", - "continue": "", + "continue": "Nadaljuj", "previous": "Prejšnji", "next": "Naslednji", - "checkoutDocs": "", + "checkoutDocs": "Preverite dokumentacijo", "checkLogs": "", "tryAgain": "Poskusite znova", - "loading": "", - "show": "", - "hide": "" + "loading": "Nalaganje", + "show": "Prikaži", + "hide": "Skrij" }, - "here": "", + "here": "tukaj", "iconPicker": { - "label": "", - "header": "", + "label": "URL ikone", + "header": "Vnesite ime ali predmete za filtriranje ikon... Homarr bo za vas iskal med {countIcons} ikonami.", "headerLoading": "", "noResults": "", "error": "" }, "colorScheme": { "options": { - "auto": "", + "auto": "Samodejno", "light": "", "dark": "" } }, "information": { - "min": "", - "max": "", - "days": "", - "hours": "", - "minutes": "" + "min": "Najmanj", + "max": "Največ", + "days": "Dnevi", + "hours": "Ure", + "minutes": "Minute" }, "notification": { "create": { - "success": "", - "error": "" + "success": "Ustvarjanje uspešno", + "error": "Ustvarjanje ni uspelo" }, "delete": { - "success": "", - "error": "" + "success": "Brisanje uspešno", + "error": "Brisanje ni uspelo" }, "update": { - "success": "", - "error": "" + "success": "Spremembe uspešno uveljavljene", + "error": "Sprememb ni mogoče uveljaviti" }, "transfer": { - "success": "", - "error": "" + "success": "Prenos uspešen", + "error": "Prenos ni uspel" } }, "multiSelect": { - "placeholder": "" + "placeholder": "Izberite eno ali več vrednosti" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "Dodajte več vrednosti", + "addLabel": "Dodaj {value}" }, "select": { - "placeholder": "", + "placeholder": "Izberi vrednost", "badge": { - "recommended": "" + "recommended": "Priporočeno" } }, "userAvatar": { "menu": { - "switchToDarkMode": "", + "switchToDarkMode": "Preklopi na temni način", "switchToLightMode": "Svetli način", "management": "Nastavitve", "docker": "", @@ -1508,8 +1508,8 @@ "applications": "", "services": "", "preview": { - "show": "", - "hide": "" + "show": "Pokaži predogled", + "hide": "Skrij predogled" }, "zod": { "errors": { @@ -1519,7 +1519,7 @@ "startsWith": "To polje se mora začeti s {startsWith}.", "endsWith": "To polje se mora končati s {endsWith}.", "includes": "To polje mora vsebovati {includes}.", - "invalidEmail": "" + "invalidEmail": "To polje mora biti veljaven e-poštni naslov" }, "tooSmall": { "string": "To polje mora biti dolgo vsaj {minimum} znakov.", @@ -1530,13 +1530,13 @@ "number": "To polje mora biti manjše ali enako {maximum}." }, "custom": { - "passwordsDoNotMatch": "", - "passwordRequirements": "", - "boardAlreadyExists": "", - "invalidFileType": "", + "passwordsDoNotMatch": "Gesli se ne ujemata", + "passwordRequirements": "Geslo ne izpolnjuje zahtev", + "boardAlreadyExists": "Tabla s tem imenom že obstaja", + "invalidFileType": "Neveljavna vrsta datoteke, pričakovana {expected}", "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", + "fileTooLarge": "Datoteka je prevelika, največja velikost je {maxSize}", + "invalidConfiguration": "Neveljavna konfiguracija", "groupNameTaken": "" } } @@ -1552,7 +1552,7 @@ "dynamic": { "action": { "create": "Nova dinamična vsebina", - "remove": "" + "remove": "Odstrani dinamični odsek" }, "option": { "title": { @@ -1566,8 +1566,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Odstrani dinamični odsek", + "message": "Ali ste prepričani, da želite odstraniti ta dinamični odsek? Elementi bodo premaknjeni na isto mesto v nadrejenem odseku." } }, "category": { @@ -1578,31 +1578,31 @@ }, "action": { "create": "Nova kategorija", - "edit": "", - "remove": "", + "edit": "Preimenuj kategorijo", + "remove": "Odstrani kategorijo", "moveUp": "Premaknite se navzgor", "moveDown": "Premaknite se navzdol", - "createAbove": "", - "createBelow": "", + "createAbove": "Nova kategorija zgoraj", + "createBelow": "Nova kategorija spodaj", "openAllInNewTabs": "" }, "create": { - "title": "", - "submit": "" + "title": "Nova kategorija", + "submit": "Dodaj kategorijo" }, "remove": { - "title": "", - "message": "" + "title": "Odstrani kategorijo", + "message": "Ali ste prepričani, da želite odstraniti kategorijo {name}?" }, "edit": { - "title": "", - "submit": "" + "title": "Preimenuj kategorijo", + "submit": "Preimenuj kategorijo" }, "menu": { "label": { - "create": "", + "create": "Nova kategorija", "changePosition": "Spremeni položaj", - "settings": "" + "settings": "Nastavitve" } }, "openAllInNewTabs": { @@ -1614,7 +1614,7 @@ "item": { "action": { "create": "Nova vsebina", - "import": "", + "import": "Uvozi element", "edit": "Uredi gradnik", "moveResize": "Premakni/spremeni", "duplicate": "Podvoji", @@ -1635,12 +1635,12 @@ } }, "create": { - "title": "", + "title": "Izberite element za dodajanje", "search": "", - "addToBoard": "" + "addToBoard": "Dodaj na tablo" }, "moveResize": { - "title": "", + "title": "Premakni / spremeni velikost elementa", "field": { "width": { "label": "Širina" @@ -1649,35 +1649,35 @@ "label": "Višina" }, "xOffset": { - "label": "" + "label": "Odmik X" }, "yOffset": { - "label": "" + "label": "Odmik Y" } } }, "edit": { - "title": "", + "title": "Uredi element", "tab": { - "widget": "", - "app": "" + "widget": "Uredi gradnik", + "app": "Uredi aplikacijo" }, "app": { - "propagationNotice": "" + "propagationNotice": "Spremembe te aplikacije bodo uporabljene povsod, kjer se uporablja na vseh nadzornih ploščah." }, "advancedOptions": { - "label": "", - "title": "" + "label": "Napredne možnosti", + "title": "Napredne možnosti elementa" }, "field": { "integrations": { - "label": "" + "label": "Integracije" }, "title": { "label": "" }, "customCssClasses": { - "label": "" + "label": "Razredi css po meri" }, "borderColor": { "label": "" @@ -1685,8 +1685,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Odstrani element", + "message": "Ali ste prepričani, da želite odstraniti ta element?" } }, "widget": { @@ -1698,17 +1698,17 @@ "loadError": "" }, "app": { - "name": "", - "description": "", + "name": "Aplikacija", + "description": "Vgradi aplikacijo v tablo.", "option": { "appId": { - "label": "" + "label": "Izberi aplikacijo" }, "openInNewTab": { "label": "Odprite v novem zavihku" }, "showTitle": { - "label": "" + "label": "Pokaži ime aplikacije" }, "pingEnabled": { "label": "" @@ -1734,17 +1734,17 @@ }, "error": { "notFound": { - "label": "", - "tooltip": "" + "label": "Ni aplikacije", + "tooltip": "Nimate izbrane veljavne aplikacije" } } }, "bookmarks": { - "name": "", - "description": "", + "name": "Zaznamki", + "description": "Prikaže več povezav aplikacij", "option": { "title": { - "label": "" + "label": "Naslov" }, "layout": { "label": "Postavitev", @@ -1756,7 +1756,7 @@ "label": "Navpično" }, "grid": { - "label": "" + "label": "Mreža" }, "gridHorizontal": { "label": "" @@ -1776,11 +1776,11 @@ "label": "" }, "withBorder": { - "label": "" + "label": "Pokaži obrobo" }, "items": { - "label": "", - "add": "" + "label": "Zaznamki", + "add": "Dodaj zaznamek" } } }, @@ -1794,8 +1794,8 @@ } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "Povzetek DNS luknje", + "description": "Prikaže povzetek vaše DNS luknje", "option": { "layout": { "label": "Postavitev", @@ -1807,28 +1807,28 @@ "label": "Navpično" }, "grid": { - "label": "" + "label": "Mreža" } } }, "usePiHoleColors": { - "label": "" + "label": "Uporabi barve Pi-Hole" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "Pridobivanje povzetka DNS luknje ni uspelo", + "integrationsDisconnected": "Ni podatkov, vse integracije so prekinjene" }, "data": { "adsBlockedToday": "Blokirano danes", "adsBlockedTodayPercentage": "Blokirano danes", "dnsQueriesToday": "Poizvedbe danes", - "domainsBeingBlocked": "" + "domainsBeingBlocked": "Domene na blokiranem seznamu" }, "domainsTooltip": "" }, "dnsHoleControls": { - "name": "", + "name": "Nadzor DNS luknje", "description": "Nadzorujte PiHole ali AdGuard iz nadzorne plošče", "option": { "layout": { @@ -1841,62 +1841,62 @@ "label": "Navpično" }, "grid": { - "label": "" + "label": "Mreža" } } }, "showToggleAllButtons": { - "label": "" + "label": "Pokaži gumbe za preklop vseh" } }, "error": { - "internalServerError": "" + "internalServerError": "Nadzor DNS luknje ni uspel" }, "controls": { - "enableAll": "", - "disableAll": "", - "setTimer": "", - "set": "", + "enableAll": "Omogoči vse", + "disableAll": "Onemogoči vse", + "setTimer": "Nastavi časovnik", + "set": "Nastavi", "enabled": "Omogočeno", "disabled": "Invalidi", - "processing": "", - "disconnected": "", - "hours": "", - "minutes": "", - "unlimited": "" + "processing": "Obdelovanje", + "disconnected": "Prekinjeno", + "hours": "Ure", + "minutes": "Minute", + "unlimited": "Pustite prazno za neomejeno" } }, "clock": { - "name": "", + "name": "Datum in čas", "description": "Prikaže trenutni datum in čas.", "option": { "customTitleToggle": { - "label": "", - "description": "" + "label": "Prikaz naslova/mesta po meri", + "description": "Prikažite naslov po meri ali ime mesta/države na vrhu ure." }, "customTitle": { - "label": "" + "label": "Naslov" }, "is24HourFormat": { - "label": "", - "description": "" + "label": "24-urni format", + "description": "Uporabi 24-urni format namesto 12-urnega" }, "showSeconds": { - "label": "" + "label": "Prikaži sekunde" }, "useCustomTimezone": { - "label": "" + "label": "Uporabi fiksni časovni pas" }, "timezone": { "label": "Časovni pas", - "description": "" + "description": "Izberite časovni pas po standardu IANA" }, "showDate": { - "label": "" + "label": "Pokaži datum" }, "dateFormat": { - "label": "", - "description": "" + "label": "Oblika datuma", + "description": "Kako naj bo datum videti" }, "customTimeFormat": { "label": "", @@ -1953,7 +1953,7 @@ }, "notebook": { "name": "Beležnica", - "description": "", + "description": "Preprost pripomoček za beležnico, ki podpira markdown", "option": { "showToolbar": { "label": "Prikaži orodno vrstico za pomoč pri pisanju markdowna" @@ -2001,7 +2001,7 @@ }, "align": { "left": "Leva stran", - "center": "", + "center": "Sredina", "right": "Desno" }, "popover": { @@ -2052,7 +2052,7 @@ "saveFailed": "" }, "iframe": { - "name": "", + "name": "iFrame", "description": "Vstavite katero koli vsebino iz interneta. Nekatera spletna mesta lahko omejijo dostop.", "option": { "embedUrl": { @@ -2087,38 +2087,38 @@ } }, "error": { - "noUrl": "", + "noUrl": "URL iFrame ni podan", "unsupportedProtocol": "", "noBrowerSupport": "Vaš brskalnik ne podpira iframov. Posodobite svoj brskalnik." } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "Stanje entitete", + "description": "Prikažite stanje entitete in jo po želji preklopite", "option": { "entityId": { "label": "ID subjekta" }, "displayName": { - "label": "" + "label": "Prikazno ime" }, "entityUnit": { - "label": "" + "label": "Enota entitete" }, "clickable": { - "label": "" + "label": "Klikljivo" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "Izvedi avtomatizacijo", + "description": "Z enim klikom sprožite avtomatizacijo", "option": { "displayName": { "label": "Prikaži ime" }, "automationId": { - "label": "" + "label": "ID avtomatizacije" } }, "spotlightAction": { @@ -2203,7 +2203,7 @@ }, "calendar": { "name": "Koledar", - "description": "", + "description": "Prikažite dogodke iz svojih integracij v koledarskem pogledu v določenem relativnem časovnem obdobju", "duration": { "allDay": "" }, @@ -2211,16 +2211,16 @@ "releaseType": { "label": "Tip sprostitve Radarr", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "V kinematografih", + "digitalRelease": "Digitalna izdaja", + "physicalRelease": "Fizična izdaja" } }, "filterPastMonths": { - "label": "" + "label": "Začetek od" }, "filterFutureMonths": { - "label": "" + "label": "Konec ob" }, "showUnmonitored": { "label": "" @@ -2232,7 +2232,7 @@ "description": "Prikaže trenutne vremenske informacije za določeno lokacijo.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Temperatura v Fahrenheitu" }, "disableTemperatureDecimals": { "label": "" @@ -2248,18 +2248,18 @@ "label": "Lokacija vremena" }, "showCity": { - "label": "" + "label": "Prikaži mesto" }, "hasForecast": { - "label": "" + "label": "Prikaži napoved" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Število dni napovedi", + "description": "Ko pripomoček ni dovolj širok, je prikazanih manj dni" }, "dateFormat": { - "label": "", - "description": "" + "label": "Oblika datuma", + "description": "Kako naj bo datum videti" } }, "currentWindSpeed": "", @@ -2288,35 +2288,35 @@ } }, "indexerManager": { - "name": "", - "description": "", + "name": "Stanje upravitelja indekserjev", + "description": "Stanje vaših indekserjev", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Odpri stran indekserja v novem zavihku" } }, - "title": "", - "testAll": "", + "title": "Upravitelj indekserjev", + "testAll": "Preizkusi vse", "error": { - "internalServerError": "" + "internalServerError": "Pridobivanje stanja indekserjev ni uspelo" } }, "healthMonitoring": { - "name": "", - "description": "", + "name": "Spremljanje zdravja sistema", + "description": "Prikaže informacije o zdravju in stanju vaših sistemov.", "tab": { "system": "", "cluster": "" }, "option": { "fahrenheit": { - "label": "" + "label": "Temperatura CPU v Fahrenheitu" }, "cpu": { - "label": "" + "label": "Prikaži informacije o CPU" }, "memory": { - "label": "" + "label": "Prikaži informacije o pomnilniku" }, "gpu": { "label": "" @@ -2325,7 +2325,7 @@ "label": "" }, "fileSystem": { - "label": "" + "label": "Prikaži informacije o datotečnem sistemu" }, "visibleStorageVolumes": { "label": "", @@ -2343,22 +2343,22 @@ } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", + "information": "Informacije", + "processor": "Procesor: {cpuModelName}", + "memory": "Pomnilnik: {memory}GiB", + "memoryAvailable": "Na voljo: {memoryAvailable}GiB ({percent}%)", + "version": "Različica: {version}", "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", - "available": "", - "lastSeen": "" + "loadAverage": "Povprečna obremenitev:", + "minute": "1 minuta", + "minutes": "{count} minut", + "used": "Uporabljeno", + "available": "Na voljo", + "lastSeen": "Zadnja posodobitev stanja: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "Pridobivanje stanja zdravja ni uspelo" }, "cluster": { "summary": { @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Spremljajte stanje svojih UPS naprav prek strežnika NUT", "option": { "showBattery": { - "label": "" + "label": "Pokaži baterijo" }, "showLoad": { - "label": "" + "label": "Pokaži obremenitev" }, "showVoltage": { - "label": "" + "label": "Pokaži napetost" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Na omrežju", + "onBattery": "Na bateriji", + "lowBattery": "Nizka baterija", + "charging": "Polnjenje", + "unknown": "Neznano" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Čas delovanja", + "load": "Obremenitev", + "input": "Vhod", + "output": "Izhod" }, "error": { - "internalServerError": "" + "internalServerError": "Pridobivanje podatkov UPS ni uspelo" } }, "tracearr": { @@ -2584,96 +2595,96 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Zadnjih 30 dni", + "month": "Ta mesec", + "lastMonth": "Prejšnji mesec" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Dogodek", + "description": "Pokaži skupno število pojavitev določenega dogodka", + "placeholder": "Izberite dogodek", + "loading": "Nalaganje dogodkov ...", + "noEvents": "Ni najdenih dogodkov", + "none": "Ni dogodka", + "configureWebsiteFirst": "Najprej izberite spletno mesto za nalaganje dogodkov" }, "chartType": { - "label": "", - "description": "", + "label": "Vrsta grafikona", + "description": "Slog prikaza grafikona", "option": { - "bar": "", - "sparkline": "" + "bar": "Stolpčni grafikon", + "sparkline": "Sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Slog grafikona", + "description": "Kako prikazati serijo dogodkov v grafikonu", "option": { - "grouped": "", - "overlay": "" + "grouped": "Vzporedno", + "overlay": "Prekrivno (podmnožica)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Pogled", + "description": "Kaj prikazati v telesu gradnika", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Grafikon", + "events": "Grafikon dogodkov", + "topPages": "Najboljše strani", + "topReferrers": "Največ napotiteljev" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Dogodki", + "description": "Izberite enega ali več dogodkov za grafikon", + "placeholder": "Izberite dogodke ...", + "loading": "Nalaganje dogodkov ...", + "noEvents": "Ni najdenih dogodkov", + "configureWebsiteFirst": "Najprej izberite spletno mesto za nalaganje dogodkov" }, "topCount": { - "label": "", - "description": "" + "label": "Elementi za prikaz", + "description": "Število najboljših elementov za prikaz (največ 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "dogodki", + "label": "dogodki" }, "topPages": { - "direct": "" + "direct": "Neposredno" }, "topReferrers": { - "direct": "" + "direct": "Neposredno" }, "events": { - "selectPrompt": "" + "selectPrompt": "Izberite dogodke za grafikon" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Integracija Umami ni konfigurirana", + "noWebsite": "Spletno mesto ni konfigurirano", + "noData": "Ni razpoložljivih podatkov", + "internalServerError": "Pridobivanje podatkov Umami ni uspelo" } }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", + "query": "Mesto / poštna številka", + "latitude": "Zemljepisna širina", + "longitude": "Zemljepisna dolžina", + "disabledTooltip": "Prosimo, vnesite mesto ali poštno številko", + "unknownLocation": "Neznana lokacija", "search": "Iskanje", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "Mesto", + "country": "Država", + "coordinates": "Koordinate", + "population": "Prebivalstvo" }, "action": { - "select": "" + "select": "Izberi {city}, {countryCode}" }, "population": { "fallback": "Neznano" @@ -2681,17 +2692,17 @@ } }, "integration": { - "noData": "", - "description": "" + "noData": "Ni najdene integracije", + "description": "Kliknite , da ustvarite novo integracijo" }, "app": { - "noData": "", - "description": "", + "noData": "Ni najdene aplikacije", + "description": "Kliknite , da ustvarite novo aplikacijo", "quickCreate": "" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "Nobena integracija ni izbrana", + "noData": "Ni podatkov o integraciji" }, "option": {} }, @@ -2704,29 +2715,41 @@ }, "hasAutoPlay": { "label": "Samodejno predvajanje", - "description": "" + "description": "Samodejno predvajanje deluje samo, ko je utišano, zaradi omejitev brskalnika" }, "isMuted": { - "label": "" + "label": "Utišano" }, "hasControls": { - "label": "" + "label": "Prikaži kontrolnike" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "URL videa ni podan", + "forYoutubeUseIframe": "Za videoposnetke YouTube uporabite možnost iframe" } }, "mediaServer": { - "name": "", - "description": "", + "name": "Trenutni tokovi predstavnostnega strežnika", + "description": "Prikaži trenutne tokove na vaših predstavnostnih strežnikih", "option": { "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3040,87 +3066,97 @@ "noPhotos": "" }, "downloads": { - "name": "", - "description": "", + "name": "Odjemalec za prenose", + "description": "Omogoča ogled in upravljanje prenosov iz odjemalcev Torrent in Usenet.", "option": { "columns": { - "label": "" + "label": "Stolpci za prikaz" }, "enableRowSorting": { - "label": "" + "label": "Omogoči razvrščanje elementov" }, "defaultSort": { - "label": "" + "label": "Privzeto uporabljen stolpec za razvrščanje" }, "descendingDefaultSort": { - "label": "" + "label": "Obrni razvrščanje" }, "showCompletedUsenet": { - "label": "" + "label": "Prikaži vnose usenet, označene kot dokončane" }, "showCompletedTorrent": { - "label": "" + "label": "Prikaži vnose torrent, označene kot dokončane" }, "showCompletedHttp": { "label": "" }, "activeTorrentThreshold": { - "label": "" + "label": "Skrij dokončane torrente pod tem pragom (v kiB/s)" }, "categoryFilter": { - "label": "" + "label": "Kategorije/oznake za filtriranje" }, "filterIsWhitelist": { - "label": "" + "label": "Filtriraj kot bel seznam" }, "applyFilterToRatio": { - "label": "" + "label": "Uporabi filter za izračun razmerja" }, "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { - "noColumns": "", - "noCommunications": "" + "noColumns": "Izberite stolpce v elementih", + "noCommunications": "Ni mogoče naložiti podatkov iz integracije", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { - "columnTitle": "" + "columnTitle": "Kontrolniki" }, "added": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Dodano", + "detailsTitle": "Datum dodajanja" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Dodatki", + "detailsTitle": "Kategorije (ali dodatne informacije)" }, "downSpeed": { "columnTitle": "Dol", "detailsTitle": "Hitrost prenosa" }, "index": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Št.", + "detailsTitle": "Trenutni indeks znotraj odjemalca" }, "id": { - "columnTitle": "" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "Integracija" }, "name": { - "columnTitle": "" + "columnTitle": "Ime opravila" }, "progress": { "columnTitle": "Napredek", - "detailsTitle": "" + "detailsTitle": "Napredek prenosa" }, "ratio": { "columnTitle": "Razmerje", - "detailsTitle": "" + "detailsTitle": "Razmerje torren (prejeto/poslano)" }, "received": { "columnTitle": "", @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "", + "eta": "" }, "type": { "columnTitle": "", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "" + "globalRatio": "", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel sistemi (tabela)", + "description": "Tabelarni pogled vseh sistemov, ki jih spremlja Beszel, z razvrščljivimi stolpci in indikatorji stanja", "option": { "statusFilter": { - "label": "" + "label": "Filter stanja" }, "sortBy": { - "label": "" + "label": "Razvrsti po" }, "sortDirection": { - "label": "" + "label": "Smer razvrščanja" }, "showCpu": { - "label": "" + "label": "Pokaži CPU" }, "showMemory": { - "label": "" + "label": "Pokaži pomnilnik" }, "showDisk": { - "label": "" + "label": "Pokaži disk" }, "showGpu": { - "label": "" + "label": "Pokaži GPU" }, "showLoadAvg": { - "label": "" + "label": "Pokaži povprečno obremenitev" }, "showNet": { - "label": "" + "label": "Pokaži omrežje" }, "showTemp": { - "label": "" + "label": "Pokaži temperaturo" }, "showBattery": { - "label": "" + "label": "Pokaži baterijo" }, "showServices": { - "label": "" + "label": "Pokaži storitve" }, "showUptime": { - "label": "" + "label": "Pokaži čas delovanja" }, "showAgent": { + "label": "Pokaži različico agenta" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Ni najdenih sistemov", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Sistem", + "cpu": "CPU", + "memory": "Pomnilnik", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Povp. obr.", + "net": "Omrežje", + "temp": "Temp", + "battery": "Bat", + "services": "Storitve", + "uptime": "Čas delovanja", + "agent": "Agent" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel sistemi (mreža)", + "description": "Mrežni pogled kartic vseh sistemov, ki jih spremlja Beszel, z meritvami v realnem času", "option": { "statusFilter": { - "label": "" + "label": "Filter stanja" }, "showCpu": { - "label": "" + "label": "Pokaži CPU" }, "showMemory": { - "label": "" + "label": "Pokaži pomnilnik" }, "showDisk": { - "label": "" + "label": "Pokaži disk" }, "showGpu": { - "label": "" + "label": "Pokaži GPU" }, "showLoadAvg": { - "label": "" + "label": "Pokaži povprečno obremenitev" }, "showNet": { - "label": "" + "label": "Pokaži omrežje" }, "showTemp": { - "label": "" + "label": "Pokaži temperaturo" }, "showBattery": { - "label": "" + "label": "Pokaži baterijo" }, "showServices": { - "label": "" + "label": "Pokaži storitve" }, "showUptime": { - "label": "" + "label": "Pokaži čas delovanja" }, "showAgent": { - "label": "" + "label": "Pokaži različico agenta" } }, "error": { @@ -3996,21 +4043,21 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Pomnilnik", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Povp. obr.", + "net": "Omrežje", + "temp": "Temp", + "battery": "Bat", + "services": "Storitve", + "uptime": "Čas delovanja", + "agent": "Agent" } }, "beszelAlerts": { - "name": "", + "name": "Beszel opozorila", "description": "", "option": { "showHistory": { @@ -4528,7 +4575,7 @@ "api": "", "certificates": "", "tasks": "", - "backup": "" + "backup": "Varnostno kopiranje" } }, "settings": "Nastavitve", @@ -4609,7 +4656,7 @@ "private": "" }, "noResults": { - "title": "" + "title": "Še ni tabel" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Prvi dan v tednu", "accessibility": "Dostopnost", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Vodniki za uvajanje", + "description": "Ponastavite vodnike za uvajanje, da jih boste ob naslednjem obisku upravljalnega območja ali nadzorne plošče videli znova.", + "reset": "Ponastavi vodnike za uvajanje", "resetSuccess": { - "title": "", - "message": "" + "title": "Vodniki ponastavljeni", + "message": "Vodniki za uvajanje se bodo ob naslednjem obisku spet prikazali" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Dokončano", + "notStarted": "Ni začeto" }, "name": { - "management": "", - "dashboard": "" + "management": "Upravljanje", + "dashboard": "Nadzorna plošča" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "", "options": { - "auto": "", + "auto": "Samodejno", "light": "", "dark": "" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Celotna varnostna kopija baze podatkov", + "metaTitle": "Varnostno kopiranje in obnovitev", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Izvozi bazo podatkov", + "description": "Prenesite celotno varnostno kopijo svoje baze podatkov SQLite, vključno z vsemi nastavitvami, uporabniki, tablami in šifriranimi skrivnostmi integracij. Varnostna kopija je zapakirana kot datoteka ZIP s šifrirnim ključem in metapodatki.", + "button": "Prenesi varnostno kopijo", + "error": "Izvoz ni uspel", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Izvoz občutljivih podatkov", + "warningTitle": "Ta izvoz vsebuje celotno vašo bazo podatkov.", + "warningBody": "Varnostna kopija vključuje vse uporabnike, skrivnosti integracij (šifrirane), API ključe, konfiguracije tabel in podatke aplikacij. Izvoženo datoteko shranite varno in je ne delite.", + "typePrompt": "Vnesite »{phrase}« za nadaljevanje", + "submit": "Izvozi bazo podatkov", + "cancel": "Prekliči" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Obnovi bazo podatkov", + "description": "Naložite predhodno izvoženo varnostno kopijo ZIP za obnovitev vaše baze podatkov. To bo zamenjalo celotno vašo bazo podatkov. Če je bila varnostna kopija ustvarjena z drugim šifrirnim ključem, bodo skrivnosti samodejno ponovno šifrirane.", + "warning": "Obnovitev varnostne kopije bo popolnoma zamenjala vašo trenutno bazo podatkov in znova zagnala aplikacijo. Tega dejanja ni mogoče razveljaviti.", "dropzone": { - "title": "", - "description": "" + "title": "Spustite svojo varnostno kopijo ZIP tukaj ali kliknite za brskanje", + "description": "Sprejete so samo datoteke .zip iz varnostne kopije SQLite Homarr" }, - "changeFile": "", - "button": "", + "changeFile": "Spremeni datoteko", + "button": "Obnovi bazo podatkov", "success": { - "title": "", - "message": "" + "title": "Obnovitev končana", + "message": "Baza podatkov je bila uspešno obnovljena. Aplikacija se ponovno zaganja ..." }, - "error": "" + "error": "Uvoz ni uspel" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Vsebina varnostne kopije", + "exported": "Izvoženo {date}", + "loading": "Analiziranje datoteke varnostne kopije ...", + "errorTitle": "Napaka predogleda", + "entity": "Entiteta", + "count": "Število", + "boards": "Table", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Table", + "user": "Uporabniki", + "app": "Aplikacije", + "integration": "Integracije", + "item": "Gradniki", + "media": "Mediji", + "search_engine": "Iskalniki" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Analiza datoteke varnostne kopije ni uspela", + "invalidMissingMetadata": "Neveljavna varnostna kopija: manjka metadata.json", + "invalidMissingDb": "Neveljavna varnostna kopija: manjka db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Spustite svojo varnostno kopijo ZIP tukaj", + "description": "Sprejema datoteke .zip iz varnostne kopije SQLite Homarr (največ 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analiziranje varnostne kopije ...", + "changeFile": "Spremeni datoteko", + "continueToRestore": "Nadaljujte na obnovitev", + "tryAgain": "Poskusite znova", + "analysisError": "Napaka analize", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Vsebina varnostne kopije", + "exported": "Izvoženo {date}", + "entity": "Entiteta", + "count": "Število", + "boards": "Table", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Table", + "user": "Uporabniki", + "app": "Aplikacije", + "integration": "Integracije", + "item": "Gradniki", + "media": "Mediji", + "search_engine": "Iskalniki" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count, plural, one {# migracija uporabljena} two {# migraciji uporabljeni} few {# migracije uporabljene} other {# migracij uporabljenih}}", + "migrationsAppliedPlural": "{count, plural, one {# migracija uporabljena} two {# migraciji uporabljeni} few {# migracije uporabljene} other {# migracij uporabljenih}}", + "migrationsOlderVersion": "Ta varnostna kopija je bila iz starejše različice Homarr. Uporabljena je bila {count, plural, one {# shematska migracija} two {# shematski migraciji} few {# shematske migracije} other {# shematskih migracij}}, da se posodobi.", + "migrationsOlderVersionPlural": "Ta varnostna kopija je bila iz starejše različice Homarr. Uporabljenih je bilo {count, plural, one {# shematska migracija} two {# shematski migraciji} few {# shematske migracije} other {# shematskih migracij}}, da se posodobi.", + "migrationsUpToDate": "Shema baze podatkov je posodobljena ({count, plural, one {# migracija uporabljena} two {# migraciji uporabljeni} few {# migracije uporabljene} other {# migracij uporabljenih}})", + "upToDate": "Posodobljeno", + "migrationsPending": "{count, plural, one {# čaka} two {# čakata} few {# čakajo} other {# čaka}}" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Uporabljanje migracij ({current}/{total})", + "migrationLabel": "Migracija {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Uničujoče dejanje", + "warningTitle": "To bo trajno zamenjalo celotno vašo bazo podatkov.", + "warningBody": "Vse trenutne table, uporabniki, aplikacije, integracije, nastavitve in seje bodo izgubljene. Tega dejanja ni mogoče razveljaviti. Aplikacija se bo po obnovitvi znova zagnala.", + "typePrompt": "Vnesite »{phrase}« za nadaljevanje", + "cancel": "Prekliči", + "submit": "Obnovi bazo podatkov" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Obnavljanje baze podatkov ...", + "extracting": "Razširjanje arhiva varnostne kopije", + "migrating": "Uporabljanje migracij baze podatkov", + "encrypting": "Ponovno šifriranje skrivnosti integracij", + "swapping": "Zamenjava datoteke baze podatkov", + "restarting": "Ponovni zagon strežnika" }, "complete": { - "title": "", - "message": "" + "title": "Obnovitev končana", + "message": "Baza podatkov je bila uspešno obnovljena. Strežnik se ponovno zaganja – osvežite stran čez nekaj sekund." }, "failed": { - "title": "" + "title": "Obnovitev ni uspela" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Neveljavna varnostna kopija: manjka metadata.json", + "invalidMissingDb": "Neveljavna varnostna kopija: manjka db.sqlite", + "analyzeError": "Analiza varnostne kopije ni uspela" } } }, @@ -5277,15 +5324,15 @@ "label": "Vrata" }, "host": { - "label": "" + "label": "Gostitelj" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Ogled dnevnikov", "page": { - "title": "" + "title": "Dnevniki {name}" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Odstrani", + "confirm": "", "notification": { "success": { "title": "", @@ -5715,7 +5763,7 @@ "docker": { "label": "", "logs": { - "label": "" + "label": "Dnevniki" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Preklopi način videza", "light": "", "dark": "" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Nastavitve", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Izberite nastavitev za spremembo", + "backHint": "Pritisnite Backspace ali uporabite gumb za nazaj", + "backAction": "Nazaj" } }, "notification": { "error": { - "message": "" + "message": "Nastavitve ni bilo mogoče posodobiti" } }, "option": { "preferences": { - "label": "" + "label": "Odpri nastavitve" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Omogočeno", + "disabled": "Onemogočeno" }, "board": { - "none": "", - "unavailable": "" + "none": "Brez", + "unavailable": "Trenutno izbrano (ni na voljo)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Brez", + "unavailable": "Trenutno izbrano (ni na voljo)" }, "colorScheme": { - "label": "", + "label": "Barvna shema", "children": { "detail": { - "title": "" + "title": "Izberite barvno shemo" } } }, "locale": { - "label": "", + "label": "Jezik", "children": { "detail": { - "title": "" + "title": "Izberite želeni jezik" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Privzeti iskalnik", "children": { "detail": { - "title": "" + "title": "Izberite privzeti iskalnik" } } }, "openSearchInNewTab": { - "label": "", + "label": "Odpri rezultate iskanja v novem zavihku", "children": { "detail": { - "title": "" + "title": "Odpri rezultate iskanja v novem zavihku" } } }, "ddgBangs": { - "label": "", + "label": "Omogoči DuckDuckGo bange", "children": { "detail": { - "title": "" + "title": "Omogoči DuckDuckGo bange" } } }, "firstDayOfWeek": { - "label": "", + "label": "Prvi dan v tednu", "children": { "detail": { - "title": "" + "title": "Izberite prvi dan v tednu" } } }, "homeBoardId": { - "label": "", + "label": "Domača tabla", "children": { "detail": { - "title": "" + "title": "Izberite domačo tablo" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobilna domača tabla", "children": { "detail": { - "title": "" + "title": "Izberite mobilno domačo tablo" } } }, "pingIconsEnabled": { - "label": "", + "label": "Uporabi ikone za ping", "children": { "detail": { - "title": "" + "title": "Uporabi ikone za ping" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Odpri celotno stran z nastavitvami" } } } } }, "media": { - "help": "", + "help": "Iščite filme ali oddaje za zahtevo", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Filmi in oddaje" }, "action": { "search": { - "label": "", - "description": "", + "label": "Iščite filme ali oddaje", + "description": "Začnite tipkati za iskanje svojih integracij za zahteve medijev", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Dodajte integracijo Overseerr, Jellyseerr ali Seerr za omogočanje iskanja medijev.", + "scoped": "Ta gradnik nima dostopne integracije za zahteve medijev." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Na voljo", + "partiallyAvailable": "Delno", + "processing": "Obdelava", + "requested": "Zahtevano", + "pending": "Zahtevano" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Namig: tukaj lahko uporabite tudi kateri koli DuckDuckGo bang, npr. !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Išči »{query}« s/z {label}", + "pressEnterToOpen": "Pritisnite Enter za odpiranje", + "engineSelected": "{label} izbran (!{bang})", + "typeQueryToContinue": "Vnesite iskalno poizvedbo za nadaljevanje", + "emptyBangHint": "Vnesite bang, npr. !yt, nato pritisnite presledek za izbiro" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Stanje" }, "status": { - "requested": "" + "requested": "Zahtevano" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Preberite dokumentacijo", + "next": "Naprej", + "prev": "Nazaj", + "done": "Končano", + "skip": "Preskoči vodnik", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Dobrodošli v Homarr!", + "description": "To je vaš nadzorni center. Od tu upravljate table, aplikacije, integracije, uporabnike in strežniške nastavitve. Oglejmo si vsak razdelek." }, "boardsList": { - "title": "", - "description": "" + "title": "Vaše table", + "description": "Tukaj so vse vaše nadzorne plošče. Vsaka tabla ima svojo postavitev, ozadje in nastavitve dostopa. Vidite lahko, kdo je katero ustvaril in ali je javna ali zasebna." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Ustvarite tablo", + "description": "Kliknite tukaj za ustvarjanje nove nadzorne plošče ali uvoz iz prejšnje namestitve Homarr. Vsaka tabla dobi svoj URL, ki ga lahko delite." }, "appsList": { - "title": "", - "description": "" + "title": "Vaše aplikacije", + "description": "To so vse aplikacije, ki ste jih dodali – povezave do vaših samo-gostovanih storitev. Vsaka aplikacija ima ikono, izbirno preverjanje stanja in značko stanja na nadzorni plošči." }, "appsCreate": { - "title": "", - "description": "" + "title": "Dodajte aplikacijo", + "description": "Tukaj registrirajte novo storitev. Poimenujte jo, dodajte URL in ikono – prikazala se bo kot ploščica na vaših tablah s spremljanjem stanja v živo." }, "integrationsList": { - "title": "", - "description": "" + "title": "Vaše integracije", + "description": "To so storitve, povezane s Homarr – Sonarr, Radarr, Plex, Jellyfin in več kot 50 drugih. Vsa poverilnice so šifrirane." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Dodajte integracijo", + "description": "Tukaj povežite novo storitev. Izberite vrsto, vnesite URL in API ključ – Homarr pred shranjevanjem preveri povezavo." }, "usersList": { - "title": "", - "description": "" + "title": "Vaši uporabniki", + "description": "Oglejte si vse, ki imajo dostop. Organizirajte uporabnike v skupine in nadzorujte, kdo lahko vidi ali ureja posamezno tablo." }, "usersCreate": { - "title": "", - "description": "" + "title": "Ustvarite uporabnika", + "description": "Tukaj dodajte nov uporabniški račun. Uporabite lahko tudi povezave za povabila za enostavno uvajanje. To je vse – pripravljeni ste!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "To je vaša tabla", + "description": "Povleci-in-spusti nadzorna plošča, kjer razporejate aplikacije in gradnike. Kadarkoli pritisnite Ctrl+K za iskanje aplikacij, tabel in dejanj." }, "editMode": { - "title": "", - "description": "" + "title": "Način urejanja", + "description": "Kliknite tukaj za vstop v način urejanja. Nato lahko dodajate gradnike, aplikacije in razdelke – povlecite za premikanje, spremenite velikost s kotnim ročajem. Znova kliknite za shranjevanje sprememb." }, "settings": { - "title": "", - "description": "" + "title": "Nastavitve table", + "description": "Spremenite ime te table, stolpce, ozadje, barve in kdo lahko do nje dostopa. Vsaka tabla je lahko javna ali zasebna." }, "switcher": { - "title": "", - "description": "" + "title": "Preklopi table", + "description": "Skačite med tablami. Ustvarite ločene nadzorne plošče za različne namene – medije, omrežje, po uporabniku ali karkoli drugega." }, "userMenu": { - "title": "", - "description": "" + "title": "Vaš profil", + "description": "Spremenite barvno shemo, jezik, domačo tablo in nastavitve. Od tu lahko tudi skočite v upravljalno območje." } } } diff --git a/packages/translation/src/lang/sv.json b/packages/translation/src/lang/sv.json index 019caca3a..e77420845 100644 --- a/packages/translation/src/lang/sv.json +++ b/packages/translation/src/lang/sv.json @@ -8,9 +8,9 @@ "action": { "scratch": "Börja från början", "importOldmarr": "Importera från Homarr äldre än version 1.0", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Återställ från SQLite-säkerhetskopia", + "restoreSqliteDescription": "Ladda upp en fullständig SQLite-databassäkerhetskopia från en tidigare Homarr-instans. Detta återställer alla tavlor, användare, appar, integrationer och inställningar.", + "backToOptions": "← Tillbaka till installationsalternativ" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "Konfigurera serverinställningar." }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Integrationer", + "subtitle": "Välj de tjänster du använder.", + "description": "Välj de integrationer du vill ansluta. Vi konfigurerar automatiskt instrumentpanelen med matchande widgetar.", "action": { - "continue": "", - "skip": "" + "continue": "Fortsätt", + "skip": "Hoppa över för nu" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} av {total}", + "skip": "Hoppa över denna integration", + "finishing": "Konfigurerar instrumentpanelen...", "error": { - "title": "", - "message": "" + "title": "Konfigurationen misslyckades", + "message": "Något gick fel vid konfigurationen av instrumentpanelen. Försök igen." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "URL-hjälpare", + "description": "Dessa hjälpare gissar URL: en för dina tjänster. Om det inte fungerar, ange adressen manuellt." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Bas-URL", + "placeholder": "homelab.local eller 192.168.1.1", + "hint": "Ange din basdomän eller IP för att automatiskt fylla i integrations-URL: er", + "warning": "Om du anger din bas-URL nu fylls alla integrations-URL: er i automatiskt, vilket sparar tid under installationen", + "preview": "t.ex. {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Subdomän", + "hostPort": "Värd:Port" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker upptäckte {count} tjänster", + "detectedBreakdown": "{integrations} integrationer · {apps} appar", + "summary": "Homarr upptäckte {apps} appar, varav {integrations} har inbyggda integrationer", + "appBadge": "Applikation", + "appSectionLabel": "Appar att lägga till på instrumentpanelen ({count} valda)", + "scanning": "Söker igenom Docker...", + "scanningDescription": "Letar efter körande behållare på ditt system" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "Lösenord", - "suggestionsTitle": "", + "suggestionsTitle": "Lösenordsförslag", "suggestion": { "length": "Använd minst 8 tecken", "lowercase": "Använd liten bokstav", @@ -987,47 +987,47 @@ "placeholder": "Egen app-URL" }, "apiKeySettings": { - "label": "" + "label": "Hämta API-nyckel" } }, "action": { "create": "Ny integration" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widgetar", + "noWidgets": "Inga widgetar", + "detected": "Upptäckt via Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "DNS", + "mediaService": "Media", + "calendar": "Kalender", + "mediaSearch": "Sökning", + "mediaRelease": "Releaser", + "mediaRequest": "Begäranden", + "downloadClient": "Nedladdningar", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Övrigt", + "smartHomeServer": "Smart hem", + "indexerManager": "Indexerare", + "healthMonitoring": "Hälsa", + "search": "Sökning", + "mediaTranscoding": "Omkodning", + "networkController": "Nätverk", + "releasesProvider": "Releaser", + "notifications": "Notiser", + "firewall": "Brandvägg", + "timetable": "Schema", + "photoService": "Foton", + "documents": "Dokument", + "notes": "Anteckningar", + "mediaMonitoring": "Övervakning", + "speedtest": "Hastighetstest", + "analytics": "Analys", "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "mediaLibrary": "Mediebibliotek", + "uptimeMonitoring": "Uppetidsövervakning" }, "testConnection": { "action": { @@ -1310,8 +1310,8 @@ "newLabel": "" }, "slug": { - "label": "", - "newLabel": "" + "label": "Status-sidans slug", + "newLabel": "Ny status-sidans slug" } } }, @@ -1321,22 +1321,22 @@ "full": "" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Självhostad ljudboks- och podcastserver" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Självhostad musikstreamingserver med Subsonic API-kompatibilitet" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Självhostad uppetidsövervakning med offentliga statussidor", "secret": { "slug": { - "description": "" + "description": "Sluggen för din offentliga statussida. Standardvärdet är \"default\" om det inte anges." }, "apiKey": { - "description": "" + "description": "Valfri API-nyckel för autentiserad /metrics-åtkomst" } } }, @@ -1345,8 +1345,8 @@ "description": "" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Dokumenthanteringssystem för arkivering och organisering av skannade dokument" }, "patchmon": { "name": "", @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Inget media har laddats upp" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Lägg till", "apply": "Använd", "backToOverview": "Tillbaka till översikten", - "skip": "", + "skip": "Hoppa över", "change": "", "create": "Addera", "createAnother": "Addera och börja om", @@ -1431,8 +1431,8 @@ "checkLogs": "", "tryAgain": "Försök igen", "loading": "", - "show": "", - "hide": "" + "show": "Visa", + "hide": "Dölj" }, "here": "", "iconPicker": { @@ -1444,7 +1444,7 @@ }, "colorScheme": { "options": { - "auto": "", + "auto": "Automatisk", "light": "", "dark": "" } @@ -1602,7 +1602,7 @@ "label": { "create": "", "changePosition": "Ändra position", - "settings": "" + "settings": "Inställningar" } }, "openAllInNewTabs": { @@ -1659,11 +1659,11 @@ "edit": { "title": "Redigera objekt", "tab": { - "widget": "", - "app": "" + "widget": "Redigera widget", + "app": "Redigera app" }, "app": { - "propagationNotice": "" + "propagationNotice": "Ändringar av denna app tillämpas överallt där den används på alla instrumentpaneler." }, "advancedOptions": { "label": "Avancerade inställningar", @@ -1776,7 +1776,7 @@ "label": "Öppna i en ny flik" }, "withBorder": { - "label": "" + "label": "Visa kantlinje" }, "items": { "label": "Bokmärken", @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Övervaka statusen för dina UPS-enheter via en NUT-server", "option": { "showBattery": { - "label": "" + "label": "Visa batteri" }, "showLoad": { - "label": "" + "label": "Visa belastning" }, "showVoltage": { - "label": "" + "label": "Visa spänning" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Online", + "onBattery": "På batteri", + "lowBattery": "Lågt batteri", + "charging": "Laddar", + "unknown": "Okänt" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Driftstid", + "load": "Belastning", + "input": "Ingång", + "output": "Utgång" }, "error": { - "internalServerError": "" + "internalServerError": "Kunde inte hämta UPS-data" } }, "tracearr": { @@ -2584,77 +2595,77 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "Senaste 30 dagarna", + "month": "Denna månad", + "lastMonth": "Förra månaden" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Händelse", + "description": "Visa totala förekomster av en specifik händelse", + "placeholder": "Välj en händelse", + "loading": "Laddar händelser...", + "noEvents": "Inga händelser hittades", + "none": "Ingen händelse", + "configureWebsiteFirst": "Välj en webbplats först för att ladda händelser" }, "chartType": { - "label": "", - "description": "", + "label": "Diagramtyp", + "description": "Visningsstil för diagrammet", "option": { - "bar": "", - "sparkline": "" + "bar": "Stapeldiagram", + "sparkline": "Minidiagram" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Diagramstil", + "description": "Hur händelseserien ska visas i diagrammet", "option": { - "grouped": "", - "overlay": "" + "grouped": "Sida vid sida", + "overlay": "Överlagring (delmängd)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Vy", + "description": "Vad som ska visas i widgetens innehåll", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Diagram", + "events": "Händelsediagram", + "topPages": "Toppsidor", + "topReferrers": "Toppreferenser" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Händelser", + "description": "Välj en eller flera händelser att visa", + "placeholder": "Välj händelser...", + "loading": "Laddar händelser...", + "noEvents": "Inga händelser hittades", + "configureWebsiteFirst": "Välj en webbplats först för att ladda händelser" }, "topCount": { - "label": "", - "description": "" + "label": "Objekt att visa", + "description": "Antal toppobjekt att visa (max 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "händelser", + "label": "händelser" }, "topPages": { - "direct": "" + "direct": "Direkt" }, "topReferrers": { - "direct": "" + "direct": "Direkt" }, "events": { - "selectPrompt": "" + "selectPrompt": "Välj händelser att visa i diagram" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Ingen Umami-integration konfigurerad", + "noWebsite": "Ingen webbplats konfigurerad", + "noData": "Ingen data tillgänglig", + "internalServerError": "Kunde inte hämta Umami-data" } }, "common": { @@ -2725,8 +2736,20 @@ "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -2758,24 +2784,24 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Översikt över ditt Paperless-ngx-dokumentarkiv", + "documentsTotal": "Totalt antal dokument", + "documentsInbox": "Inkorg", + "correspondents": "Avsändare", + "tags": "Taggar", + "documentTypes": "Dokumenttyper", + "inboxRatio": "Inkorgskvot", + "inbox": "inkorg", + "total": "totalt", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Visa inkorgskvot", + "description": "Visa förhållandet mellan inkorg och totalt antal dokument i hjältesektionen" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Visa inkorgsring", + "description": "Visa en framstegsring bredvid inkorgskvoten" }, "showDocumentsTotal": { "label": "", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "", - "noCommunications": "" + "noCommunications": "", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "" }, "id": { - "columnTitle": "" + "columnTitle": "", + "detailsTitle": "" }, "integration": { "columnTitle": "" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "", - "detailsTitle": "" + "detailsTitle": "", + "eta": "" }, "type": { "columnTitle": "", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "" + "globalRatio": "", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel-system (tabell)", + "description": "Tabellvy över alla Beszel-övervakade system med sorterbara kolumner och statusindikatorer", "option": { "statusFilter": { - "label": "" + "label": "Statusfilter" }, "sortBy": { - "label": "" + "label": "Sortera efter" }, "sortDirection": { - "label": "" + "label": "Sorteringsriktning" }, "showCpu": { - "label": "" + "label": "Visa CPU" }, "showMemory": { - "label": "" + "label": "Visa minne" }, "showDisk": { - "label": "" + "label": "Visa disk" }, "showGpu": { - "label": "" + "label": "Visa GPU" }, "showLoadAvg": { - "label": "" + "label": "Visa lastmedel" }, "showNet": { - "label": "" + "label": "Visa nätverk" }, "showTemp": { - "label": "" + "label": "Visa temperatur" }, "showBattery": { - "label": "" + "label": "Visa batteri" }, "showServices": { - "label": "" + "label": "Visa tjänster" }, "showUptime": { - "label": "" + "label": "Visa drifttid" }, "showAgent": { + "label": "Visa agentversion" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Inga system hittades", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "System", + "cpu": "CPU", + "memory": "Minne", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Lastmedel", + "net": "Nät", + "temp": "Temp", + "battery": "Bat", + "services": "Tjänster", + "uptime": "Drifttid", + "agent": "Agent" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel-system (rutnät)", + "description": "Kortrutnätsvy över alla Beszel-övervakade system med realtidsmått", "option": { "statusFilter": { - "label": "" + "label": "Statusfilter" }, "showCpu": { - "label": "" + "label": "Visa CPU" }, "showMemory": { - "label": "" + "label": "Visa minne" }, "showDisk": { - "label": "" + "label": "Visa disk" }, "showGpu": { - "label": "" + "label": "Visa GPU" }, "showLoadAvg": { - "label": "" + "label": "Visa lastmedel" }, "showNet": { - "label": "" + "label": "Visa nätverk" }, "showTemp": { - "label": "" + "label": "Visa temperatur" }, "showBattery": { - "label": "" + "label": "Visa batteri" }, "showServices": { - "label": "" + "label": "Visa tjänster" }, "showUptime": { - "label": "" + "label": "Visa drifttid" }, "showAgent": { - "label": "" + "label": "Visa agentversion" } }, "error": { @@ -3996,78 +4043,78 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Minne", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Lastmedel", + "net": "Nät", + "temp": "Temp", + "battery": "Bat", + "services": "Tjänster", + "uptime": "Drifttid", + "agent": "Agent" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel-larm", + "description": "Visa Beszel-larmkonfigurationer och historik", "option": { "showHistory": { - "label": "" + "label": "Visa larmhistorik" }, "maxHistoryItems": { - "label": "" + "label": "Max antal historikposter" } }, - "empty": "", + "empty": "Inga larm konfigurerade", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Historik", + "resolved": "Löst", "status": { - "triggered": "", - "ok": "" + "triggered": "Utlöst", + "ok": "OK" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel-systemstatistik", + "description": "Tidsseriediagram för CPU, minne, disk, nätverk och Docker-behållarmått", "option": { "systemId": { "label": "", "description": "" }, "timePeriod": { - "label": "" + "label": "Tidsperiod" }, "showCpu": { - "label": "" + "label": "Visa CPU-diagram" }, "showMemory": { - "label": "" + "label": "Visa minnesdiagram" }, "showDisk": { - "label": "" + "label": "Visa diskdiagram" }, "showDiskIO": { - "label": "" + "label": "Visa disk I/O-diagram" }, "showNetwork": { - "label": "" + "label": "Visa nätverksdiagram" }, "showDockerCpu": { - "label": "" + "label": "Visa Docker CPU-diagram" }, "showDockerMemory": { - "label": "" + "label": "Visa Docker minnesdiagram" }, "showDockerNetwork": { - "label": "" + "label": "Visa Docker nätverksdiagram" } }, - "selectSystem": "", + "selectSystem": "Välj system", "empty": { "noSystems": "" }, @@ -4079,26 +4126,26 @@ }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU-användning", + "subtitle": "Genomsnittlig systemomfattande CPU-användning", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Minnesanvändning", + "subtitle": "Exakt användning vid inspelningstidpunkten", + "series": "Använt", + "cache": "Cache/Buffertar" }, "disk": { - "title": "", + "title": "Diskanvändning", "subtitle": "", "series": "" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Disk I/O", + "subtitle": "Genomströmning av rotfilsystem", + "read": "Läs", + "write": "Skriv" }, "storage": { "title": "", @@ -4106,22 +4153,22 @@ "series": "" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Bandbredd", + "subtitle": "Nätverkstrafik för offentliga gränssnitt", + "sent": "Skickat", + "recv": "Mottaget" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU-användning", + "subtitle": "Genomsnittlig CPU-användning för behållare" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker minnesanvändning", + "subtitle": "Minnesanvändning för docker-behållare" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker nätverks-I/O", + "subtitle": "Nätverkstrafik för docker-behållare" } } } @@ -4528,7 +4575,7 @@ "api": "API", "certificates": "Certifikat", "tasks": "Uppgifter", - "backup": "" + "backup": "Säkerhetskopiering" } }, "settings": "Inställningar", @@ -4609,7 +4656,7 @@ "private": "Den här tavlan är privat" }, "noResults": { - "title": "" + "title": "Inga tavlor än" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Första dag på veckan", "accessibility": "Tillgänglighet", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Introduktionsturer", + "description": "Återställ introduktionsturerna för att se dem igen vid nästa besök i administrationsområdet eller på instrumentpanelen.", + "reset": "Återställ introduktionsturer", "resetSuccess": { - "title": "", - "message": "" + "title": "Turer återställda", + "message": "Introduktionsturerna visas igen vid nästa besök" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Slutförd", + "notStarted": "Inte startad" }, "name": { - "management": "", - "dashboard": "" + "management": "Administration", + "dashboard": "Instrumentpanel" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "", "options": { - "auto": "", + "auto": "Automatisk", "light": "Ljus", "dark": "Mörk" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Fullständig databassäkerhetskopiering", + "metaTitle": "Säkerhetskopiering och återställning", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Exportera databas", + "description": "Ladda ner en fullständig säkerhetskopia av din SQLite-databas inklusive alla inställningar, användare, tavlor och krypterade integrationshemligheter. Säkerhetskopian paketeras som en ZIP-fil med krypteringsnyckeln och metadata.", + "button": "Ladda ner säkerhetskopia", + "error": "Export misslyckades", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Export av känslig data", + "warningTitle": "Denna export innehåller hela din databas.", + "warningBody": "Säkerhetskopian inkluderar alla användare, integrationshemligheter (krypterade), API-nycklar, tavelkonfigurationer och appdata. Förvara den exporterade filen säkert och dela den inte.", + "typePrompt": "Skriv \"{phrase}\" för att fortsätta", + "submit": "Exportera databas", + "cancel": "Avbryt" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Återställ databas", + "description": "Ladda upp en tidigare exporterad säkerhetskopia ZIP för att återställa din databas. Detta ersätter hela din databas. Om säkerhetskopian skapades med en annan krypteringsnyckel kommer hemligheter automatiskt att krypteras om.", + "warning": "Att återställa en säkerhetskopia kommer helt att ersätta din nuvarande databas och starta om applikationen. Denna åtgärd kan inte ångras.", "dropzone": { - "title": "", - "description": "" + "title": "Släpp din säkerhetskopia ZIP här eller klicka för att bläddra", + "description": "Endast .zip-filer från en Homarr SQLite-säkerhetskopia accepteras" }, - "changeFile": "", - "button": "", + "changeFile": "Byt fil", + "button": "Återställ databas", "success": { - "title": "", - "message": "" + "title": "Återställning slutförd", + "message": "Databasen har återställts framgångsrikt. Applikationen startar om..." }, - "error": "" + "error": "Import misslyckades" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Innehåll i säkerhetskopian", + "exported": "Exporterad {date}", + "loading": "Analyserar säkerhetskopian...", + "errorTitle": "Förhandsgranskningsfel", + "entity": "Entitet", + "count": "Antal", + "boards": "Tavlor", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Tavlor", + "user": "Användare", + "app": "Appar", + "integration": "Integrationer", + "item": "Widgetar", + "media": "Media", + "search_engine": "Sökmotorer" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Kunde inte analysera säkerhetskopian", + "invalidMissingMetadata": "Ogiltig säkerhetskopia: metadata.json saknas", + "invalidMissingDb": "Ogiltig säkerhetskopia: db.sqlite saknas" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Släpp din säkerhetskopia ZIP här", + "description": "Accepterar .zip-filer från en Homarr SQLite-säkerhetskopia (max 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Analyserar säkerhetskopia...", + "changeFile": "Byt fil", + "continueToRestore": "Fortsätt till återställning", + "tryAgain": "Försök igen", + "analysisError": "Analysfel", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Innehåll i säkerhetskopian", + "exported": "Exporterad {date}", + "entity": "Entitet", + "count": "Antal", + "boards": "Tavlor", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Tavlor", + "user": "Användare", + "app": "Appar", + "integration": "Integrationer", + "item": "Widgetar", + "media": "Media", + "search_engine": "Sökmotorer" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} migrering tillämpad", + "migrationsAppliedPlural": "{count} migreringar tillämpade", + "migrationsOlderVersion": "Denna säkerhetskopia var från en äldre Homarr-version. {count} schemamigrering tillämpades för att uppdatera den.", + "migrationsOlderVersionPlural": "Denna säkerhetskopia var från en äldre Homarr-version. {count} schemamigreringar tillämpades för att uppdatera den.", + "migrationsUpToDate": "Databasschemat är uppdaterat ({count} migreringar tillämpade)", + "upToDate": "Uppdaterad", + "migrationsPending": "{count} väntar" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Tillämpar migreringar ({current}/{total})", + "migrationLabel": "Migrering {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Destruktiv åtgärd", + "warningTitle": "Detta kommer permanent att ersätta hela din databas.", + "warningBody": "Alla nuvarande tavlor, användare, appar, integrationer, inställningar och sessioner kommer att förloras. Denna åtgärd kan inte ångras. Applikationen kommer att starta om efter återställningen.", + "typePrompt": "Skriv \"{phrase}\" för att fortsätta", + "cancel": "Avbryt", + "submit": "Återställ databas" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Återställer databasen...", + "extracting": "Extraherar säkerhetskopian", + "migrating": "Tillämpar databasmigreringar", + "encrypting": "Krypterar om integrationshemligheter", + "swapping": "Ersätter databasfilen", + "restarting": "Startar om servern" }, "complete": { - "title": "", - "message": "" + "title": "Återställning slutförd", + "message": "Databasen har återställts framgångsrikt. Servern startar om — vänligen uppdatera sidan om några sekunder." }, "failed": { - "title": "" + "title": "Återställning misslyckades" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Ogiltig säkerhetskopia: metadata.json saknas", + "invalidMissingDb": "Ogiltig säkerhetskopia: db.sqlite saknas", + "analyzeError": "Kunde inte analysera säkerhetskopian" } } }, @@ -5277,15 +5324,15 @@ "label": "Portar" }, "host": { - "label": "" + "label": "Värd" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Visa loggar", "page": { - "title": "" + "title": "{name} loggar" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Ta bort", + "confirm": "", "notification": { "success": { "title": "", @@ -5715,7 +5763,7 @@ "docker": { "label": "", "logs": { - "label": "" + "label": "Loggar" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Växla utseendeläge", "light": "Byt till ljust läge", "dark": "Byt till mörkt läge" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Inställningar", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Välj en inställning att ändra", + "backHint": "Tryck på Backsteg eller använd bakåtknappen för att gå tillbaka", + "backAction": "Gå tillbaka" } }, "notification": { "error": { - "message": "" + "message": "Det gick inte att uppdatera inställningen" } }, "option": { "preferences": { - "label": "" + "label": "Öppna inställningar" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Aktiverad", + "disabled": "Inaktiverad" }, "board": { - "none": "", - "unavailable": "" + "none": "Ingen", + "unavailable": "För närvarande vald (otillgänglig)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Ingen", + "unavailable": "För närvarande vald (otillgänglig)" }, "colorScheme": { - "label": "", + "label": "Färgschema", "children": { "detail": { - "title": "" + "title": "Välj ditt färgschema" } } }, "locale": { - "label": "", + "label": "Språk", "children": { "detail": { - "title": "" + "title": "Välj ditt föredragna språk" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Förvald sökmotor", "children": { "detail": { - "title": "" + "title": "Välj din förvalda sökmotor" } } }, "openSearchInNewTab": { - "label": "", + "label": "Öppna sökresultat i ny flik", "children": { "detail": { - "title": "" + "title": "Öppna sökresultat i ny flik" } } }, "ddgBangs": { - "label": "", + "label": "Aktivera DuckDuckGo bangs", "children": { "detail": { - "title": "" + "title": "Aktivera DuckDuckGo bangs" } } }, "firstDayOfWeek": { - "label": "", + "label": "Första dag på veckan", "children": { "detail": { - "title": "" + "title": "Välj den första dagen i veckan" } } }, "homeBoardId": { - "label": "", + "label": "Starttavla", "children": { "detail": { - "title": "" + "title": "Välj din starttavla" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobil starttavla", "children": { "detail": { - "title": "" + "title": "Välj din mobila starttavla" } } }, "pingIconsEnabled": { - "label": "", + "label": "Använd ikoner för pings", "children": { "detail": { - "title": "" + "title": "Använd ikoner för pings" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Öppna fullständiga inställningar" } } } } }, "media": { - "help": "", + "help": "Sök efter filmer eller serier att begära", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Filmer och serier" }, "action": { "search": { - "label": "", - "description": "", + "label": "Sök efter filmer eller serier", + "description": "Börja skriva för att söka i dina mediaintegrationer", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Lägg till en Overseerr-, Jellyseerr- eller Seerr-integration för att aktivera mediasökning.", + "scoped": "Denna widget har ingen tillgänglig mediaintegration för begäran." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Tillgänglig", + "partiallyAvailable": "Delvis", + "processing": "Bearbetar", + "requested": "Begärd", + "pending": "Begärd" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Tips: Du kan också använda DuckDuckGo bangs här, t.ex. !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Sök \"{query}\" med {label}", + "pressEnterToOpen": "Tryck på Retur för att öppna", + "engineSelected": "{label} vald (!{bang})", + "typeQueryToContinue": "Skriv din sökfråga för att fortsätta", + "emptyBangHint": "Skriv en bang, t.ex. !yt, och tryck sedan på Blanksteg för att välja" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Status" }, "status": { - "requested": "" + "requested": "Begärd" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Läs dokumentationen", + "next": "Nästa", + "prev": "Bakåt", + "done": "Klar", + "skip": "Hoppa över tur", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Välkommen till Homarr!", + "description": "Detta är ditt kontrollcenter. Härifrån hanterar du tavlor, appar, integrationer, användare och serverinställningar. Låt oss ta en rundtur i varje avsnitt." }, "boardsList": { - "title": "", - "description": "" + "title": "Dina tavlor", + "description": "Här är alla dina instrumentpaneler. Varje tavla har sin egen layout, bakgrund och åtkomstinställningar. Du kan se vem som skapade varje och om den är offentlig eller privat." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Skapa en tavla", + "description": "Klicka här för att skapa en ny instrumentpanel eller importera en från en tidigare Homarr-installation. Varje tavla får en egen URL som du kan dela." }, "appsList": { - "title": "", - "description": "" + "title": "Dina appar", + "description": "Dessa är alla appar du har lagt till — länkar till dina självhostade tjänster. Varje app har en ikon, valfri hälsokontroll och en statusmärkning på instrumentpanelen." }, "appsCreate": { - "title": "", - "description": "" + "title": "Lägg till en app", + "description": "Registrera en ny tjänst här. Ge den ett namn, URL och ikon — den kommer att visas som en ruta på dina tavlor med live-statusövervakning." }, "integrationsList": { - "title": "", - "description": "" + "title": "Dina integrationer", + "description": "Detta är de tjänster som är anslutna till Homarr — Sonarr, Radarr, Plex, Jellyfin och 50+ till. Alla autentiseringsuppgifter är krypterade i vila." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Lägg till en integration", + "description": "Anslut en ny tjänst här. Välj typ, ange URL och API-nyckel — Homarr validerar anslutningen innan den sparas." }, "usersList": { - "title": "", - "description": "" + "title": "Dina användare", + "description": "Se alla som har åtkomst. Organisera användare i grupper och kontrollera vem som kan visa eller redigera varje tavla." }, "usersCreate": { - "title": "", - "description": "" + "title": "Skapa en användare", + "description": "Lägg till ett nytt användarkonto här. Du kan också använda inbjudningslänkar för enkel introduktion. Det var turen — du är redo!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Detta är din tavla", + "description": "En dra-och-släpp-instrumentpanel där du arrangerar appar och widgetar. Tryck Ctrl+K när som helst för att söka efter appar, tavlor och åtgärder." }, "editMode": { - "title": "", - "description": "" + "title": "Redigeringsläge", + "description": "Klicka här för att gå till redigeringsläge. Du kan sedan lägga till widgetar, appar och sektioner — dra för att ompositionera, ändra storlek med hörnhandtaget. Klicka igen för att spara dina ändringar." }, "settings": { - "title": "", - "description": "" + "title": "Tavelinställningar", + "description": "Ändra denna tavlas namn, kolumner, bakgrund, färger och vem som kan komma åt den. Varje tavla kan vara offentlig eller privat." }, "switcher": { - "title": "", - "description": "" + "title": "Byt tavla", + "description": "Hoppa mellan tavlor. Skapa separata instrumentpaneler för olika ändamål — media, nätverk, per användare eller vad du vill." }, "userMenu": { - "title": "", - "description": "" + "title": "Din profil", + "description": "Ändra ditt färgschema, språk, starttavla och inställningar. Du kan också hoppa till administrationsområdet härifrån." } } } diff --git a/packages/translation/src/lang/tr.json b/packages/translation/src/lang/tr.json index 726831cf4..46296c573 100644 --- a/packages/translation/src/lang/tr.json +++ b/packages/translation/src/lang/tr.json @@ -8,9 +8,9 @@ "action": { "scratch": "Sıfırdan Başla", "importOldmarr": "Homarr 1.0'dan Önceki Yedeğinizi İçe Aktarın", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "SQLite yedeklemesinden geri yükle", + "restoreSqliteDescription": "Önceki bir Homarr örneğinden tam SQLite veritabanı yedeklemesi yükleyin. Bu, tüm panoları, kullanıcıları, uygulamaları, entegrasyonları ve ayarları geri yükler.", + "backToOptions": "← Kurulum seçeneklerine geri dön" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "Sunucu ayarlarınızı yapılandırın." }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Entegrasyonlar", + "subtitle": "Kullandığınız hizmetleri seçin.", + "description": "Bağlanmak istediğiniz entegrasyonları seçin. Panonuzu eşleşen widget'larla otomatik olarak kuracağız.", "action": { - "continue": "", - "skip": "" + "continue": "Devam Et", + "skip": "Şimdilik atla" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} / {total}", + "skip": "Bu entegrasyonu atla", + "finishing": "Panonuz kuruluyor...", "error": { - "title": "", - "message": "" + "title": "Kurulum başarısız oldu", + "message": "Panonuzu kurarken bir şeyler yanlış gitti. Lütfen tekrar deneyin." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "URL yardımcıları", + "description": "Bu yardımcılar, hizmetlerinizin URL'sini tahmin etmeye çalışır. Çalışmazsa, adresi manuel olarak yazın." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "Temel URL", + "placeholder": "homelab.local veya 192.168.1.1", + "hint": "Entegrasyon URL'lerini otomatik doldurmak için temel alan adınızı veya IP'nizi girin", + "warning": "Temel URL'nizi şimdi ayarlamak, tüm entegrasyon URL'lerini otomatik olarak dolduracak ve kurulum sırasında zaman kazandıracak", + "preview": "örn. {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Alt alan adı", + "hostPort": "Ana Bilgisayar:Port" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker {count} hizmet tespit etti", + "detectedBreakdown": "{integrations} entegrasyon · {apps} uygulama", + "summary": "Homarr {apps} uygulama tespit etti, bunların {integrations} tanesinde entegrasyon yerleşik", + "appBadge": "Uygulama", + "appSectionLabel": "Panoya eklenecek uygulamalar ({count} seçili)", + "scanning": "Docker taranıyor...", + "scanningDescription": "Sisteminizdeki çalışan konteynerler aranıyor" } }, "finish": { @@ -143,7 +143,7 @@ "goToBoard": "{name} Paneline Git", "createBoard": "İlk Panelinizi Oluşturun", "inviteUser": "Yeni Kullanıcı Davet Et", - "docs": "Dökümanları Oku" + "docs": "Dokümanları Oku" } } }, @@ -169,15 +169,15 @@ }, "field": { "email": { - "label": "E-Posta", + "label": "E-posta", "verified": "Doğrulandı" }, "username": { "label": "Kullanıcı adı" }, "password": { - "label": "Şifre", - "suggestionsTitle": "", + "label": "Parola", + "suggestionsTitle": "Parola önerileri", "suggestion": { "length": "En az 8 karakter içermeli", "lowercase": "Küçük harf içermeli", @@ -187,10 +187,10 @@ } }, "passwordConfirm": { - "label": "Şifreyi Onayla" + "label": "Parolayı Onayla" }, "previousPassword": { - "label": "Eski Şifre" + "label": "Eski Parola" }, "homeBoard": { "label": "Ana panel" @@ -199,8 +199,8 @@ "label": "Pingler İçin Simge Kullanın" }, "enableRightClickOnWidgets": { - "label": "", - "description": "" + "label": "Widget'lara sağ tıklamayı etkinleştir", + "description": "Bir widget'a sağ tıklandığında Homarr bağlam menüsünü gösterir. Tarayıcının varsayılan menüsünü (ör. “Bağlantıyı yeni sekmede aç”) kullanmak için devre dışı bırakın." }, "defaultSearchEngine": { "label": "Öntanımlı arama motoru" @@ -209,7 +209,7 @@ "label": "Arama sonucunu yeni sekmede aç" }, "ddgBangs": { - "label": "" + "label": "DuckDuckGo bang'lerini etkinleştir" } }, "error": { @@ -302,10 +302,10 @@ "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo bang'leri başarıyla değiştirildi" }, "error": { - "message": "" + "message": "DuckDuckGo bang'leri değiştirilemiyor" } } }, @@ -662,7 +662,7 @@ "label": "Tanım" }, "url": { - "label": "Url" + "label": "URL" }, "useDifferentUrlForPing": { "checkbox": { @@ -691,206 +691,206 @@ "customWidget": { "page": { "list": { - "title": "", - "noResults": "", - "loading": "" + "title": "Özel Widget'lar", + "noResults": "Henüz özel widget yok. İlk widget'ınızı oluşturun!", + "loading": "Yükleniyor..." }, "create": { - "title": "", - "subtitle": "" + "title": "Özel Widget Oluştur", + "subtitle": "API URL'sini, kimlik doğrulamasını ve yanıt verilerinin nasıl görüntüleneceğini tanımlayın." }, "edit": { - "title": "" + "title": "Özel Widget'ı Düzenle" } }, "action": { - "create": "", - "import": "", - "save": "", - "delete": "", - "deleteConfirm": "", - "export": "", - "addMapping": "", - "addColumn": "", - "edit": "", - "removeMapping": "", - "removeColumn": "", - "addItem": "", - "removeItem": "", - "addBar": "", - "duplicate": "", - "copyAiPrompt": "", - "enable": "", - "disable": "", - "menu": "" + "create": "Oluştur", + "import": "İçe aktar", + "save": "Kaydet", + "delete": "Özel Widget'ı Sil", + "deleteConfirm": "“{name}” adlı widget'ı silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "export": "Dışa aktar", + "addMapping": "Eşleme Ekle", + "addColumn": "Sütun Ekle", + "edit": "Düzenle", + "removeMapping": "Eşlemeyi kaldır", + "removeColumn": "Sütunu kaldır", + "addItem": "Öğe Ekle", + "removeItem": "Öğeyi kaldır", + "addBar": "Çubuk Ekle", + "duplicate": "Çoğalt", + "copyAiPrompt": "Yapay zekâ istemini kopyala", + "enable": "Etkinleştir", + "disable": "Devre dışı bırak", + "menu": "Eylemler" }, "field": { - "name": "", - "description": "", - "iconUrl": "", - "url": "", - "authType": "", - "headerName": "", - "method": "", - "requestBody": "", - "displayType": "", - "jsonPath": "", - "jsonPathHint": "", - "label": "", - "unit": "", - "mappings": "", - "tablePath": "", - "tablePathHint": "", - "columns": "", - "header": "", - "items": "", - "gridColumns": "", - "cardStyle": "", - "bars": "", - "valuePath": "", - "maxPath": "", - "showPercentage": "", - "barSize": "", - "goodValues": "", - "dotSize": "", - "valueSize": "", - "labelPosition": "", - "kvLayout": "", - "striped": "", - "compact": "", - "maxHeight": "", - "color": "", - "buttonLabel": "", - "buttonColor": "", - "confirmText": "", - "confirmTextHint": "", - "successMessage": "", - "successMessageHint": "", - "enabled": "", + "name": "Ad", + "description": "Açıklama", + "iconUrl": "Simge URL'si", + "url": "URL", + "authType": "Kimlik Doğrulama Türü", + "headerName": "Üst Bilgi/Sorgu Parametresi Adı", + "method": "Yöntem", + "requestBody": "İstek Gövdesi", + "displayType": "Görüntüleme Türü", + "jsonPath": "JSON Yolu", + "jsonPathHint": "Değerleri ayıklamak için JSONPath söz dizimini kullanın; ör. $.data.temperature veya $.items[0].name", + "label": "Etiket", + "unit": "Birim", + "mappings": "Eşlemeler", + "tablePath": "Dizi JSON Yolu", + "tablePathHint": "Yanıttaki dizinin yolu; ör. $.data.items", + "columns": "Sütunlar", + "header": "Başlık", + "items": "Öğeler", + "gridColumns": "Izgara Sütunları", + "cardStyle": "Kart Stili", + "bars": "Çubuklar", + "valuePath": "Değer JSON Yolu", + "maxPath": "En Yüksek Değer JSON Yolu", + "showPercentage": "Yüzdeyi Göster", + "barSize": "Çubuk Boyutu", + "goodValues": "İyi Değerler (virgülle ayrılmış)", + "dotSize": "Nokta Boyutu", + "valueSize": "Değer Boyutu", + "labelPosition": "Etiket Konumu", + "kvLayout": "Düzen", + "striped": "Şeritli Satırlar", + "compact": "Kompakt Mod", + "maxHeight": "En Fazla Yükseklik (px)", + "color": "Renk", + "buttonLabel": "Düğme Etiketi", + "buttonColor": "Düğme Rengi", + "confirmText": "Onay Metni", + "confirmTextHint": "Ayarlanırsa istek yürütülmeden önce bir onay iletişim kutusu gösterilir", + "successMessage": "Başarı Mesajı", + "successMessageHint": "Başarılı yürütmeden sonra gösterilecek mesaj", + "enabled": "Etkin", "template": { - "label": "", - "description": "" + "label": "JSX Şablonu", + "description": "Mantine JSX şablonu. API yanıt alanlarına veri bağlamalarıyla (ör. data.name) erişin. Yalnızca izin verilen bileşenleri kullanın. Yasak: constructor, __proto__, eval, Function, window, document." } }, "placeholder": { - "exampleLabel": "", - "exampleLabelShort": "", - "exampleHeader": "", - "exampleUnit": "", - "iconUrl": "", - "url": "", - "headerName": "", - "jsonPath": "", - "tablePath": "", - "columnJsonPath": "", - "valuePath": "", - "maxPath": "", - "goodValues": "", - "color": "" + "exampleLabel": "CPU Sıcaklığı", + "exampleLabelShort": "CPU Sıcaklığı", + "exampleHeader": "Ad", + "exampleUnit": "°C", + "iconUrl": "https://...", + "url": "https://api.example.com/api/v1/status", + "headerName": "X-API-Key", + "jsonPath": "$.data.value", + "tablePath": "$.data.items", + "columnJsonPath": "$.name", + "valuePath": "$.data.used", + "maxPath": "$.data.total", + "goodValues": "online, true, up", + "color": "mavi" }, "cardStyleOption": { - "filled": "", - "outline": "", - "subtle": "" + "filled": "Dolu", + "outline": "Çerçeveli", + "subtle": "Hafif" }, "layoutOption": { - "list": "", - "grid": "" + "list": "Liste", + "grid": "Izgara" }, "sizeOption": { - "sm": "", - "md": "", - "lg": "", - "xl": "" + "sm": "Küçük", + "md": "Orta", + "lg": "Büyük", + "xl": "Çok Büyük" }, "labelPositionOption": { - "above": "", - "below": "" + "above": "Üstte", + "below": "Altta" }, "fieldset": { - "general": "", - "connection": "", - "display": "" + "general": "Genel", + "connection": "API Bağlantısı", + "display": "Görüntüleme Yapılandırması" }, "displayTypeDescription": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Ayıklanan tek bir değeri etiket ve birimle gösterir", + "keyValue": "Birden fazla etiketli değeri yan yana gösterir", + "table": "Veri satırlarını tablo biçiminde gösterir", + "statGrid": "Pi-hole veya Speedtest widget'ları gibi, ızgara içinde renkli istatistik kartları gösterir", + "progressBars": "Disk, bellek veya kotalar için kullanımı ya da tamamlanmayı gösteren ilerleme çubukları", + "statusIndicator": "Çevrimiçi/çevrimdışı ya da sağlık durumlarını gösteren renkli durum noktaları", + "countGrid": "Sıkı bir ızgarada kompakt sayı ve etiket sayaçları", + "raw": "Hata ayıklama için okunaklı biçimlendirilmiş JSON çıktısı", + "actionButton": "Tıklandığında istek başlatan bir düğme", + "customJsx": "Tam API veri bağlamasıyla izin verilen Mantine bileşenlerini kullanan özel JSX düzeni" }, "method": { - "GET": "", - "POST": "", - "PUT": "", - "DELETE": "", - "PATCH": "" + "GET": "GET", + "POST": "POST", + "PUT": "PUT", + "DELETE": "DELETE", + "PATCH": "PATCH" }, "authType": { - "none": "", - "bearer": "", - "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "none": "Yok", + "bearer": "Bearer Token", + "basic": "Temel Kimlik Doğrulama", + "apiKeyHeader": "API Anahtarı (Üst Bilgi)", + "apiKeyQuery": "API Anahtarı (Sorgu)" }, "displayType": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Tek Değer", + "keyValue": "Anahtar-Değer", + "table": "Tablo", + "statGrid": "İstatistik Izgarası", + "progressBars": "İlerleme Çubukları", + "statusIndicator": "Durum Göstergesi", + "countGrid": "Sayaç Izgarası", + "raw": "Ham JSON", + "actionButton": "Eylem Düğmesi", + "customJsx": "Özel JSX" }, "secret": { - "apiKey": "", - "username": "", - "password": "", - "savedPlaceholder": "" + "apiKey": "API Anahtarı / Token", + "username": "Kullanıcı adı", + "password": "Parola", + "savedPlaceholder": "••••••• (kaydedildi, korumak için boş bırakın)" }, "preview": { - "title": "", - "test": "", - "hint": "", - "rawResponse": "" + "title": "Önizleme", + "test": "Test Et", + "hint": "Geçerli yapılandırmanızla API yanıtını önizlemek için Test Et'e tıklayın.", + "rawResponse": "Ham JSON yanıtı" }, "notification": { - "created": "", - "updated": "", - "deleted": "", - "imported": "", - "aiPromptCopied": "", - "aiPromptDescription": "", - "aiPromptCopy": "", - "aiPromptNoResponse": "", - "aiPromptCopyError": "", - "createError": "", - "updateError": "", - "importError": "", - "exportError": "", - "duplicated": "", - "duplicateError": "", - "toggleError": "", - "deleteError": "", - "previewError": "", - "executed": "", - "executeError": "" + "created": "“{name}” widget'ı başarıyla oluşturuldu.", + "updated": "“{name}” widget'ı başarıyla güncellendi.", + "deleted": "“{name}” widget'ı silindi.", + "imported": "Widget başarıyla içe aktarıldı.", + "aiPromptCopied": "Yapay zekâ istemi panoya kopyalandı", + "aiPromptDescription": "Herhangi bir yapay zekâ sohbet botuna (ChatGPT, Claude, Gemini...) yapıştırmak üzere önceden hazırlanmış bir istemi kopyalayın. İstem, yapay zekânın içe aktarmaya hazır bir JSON yapılandırması oluşturabilmesi için widget şemasının tamamını ve API yanıtınızı içerir.", + "aiPromptCopy": "Panoya kopyala", + "aiPromptNoResponse": "İpucu: Daha iyi sonuçlar için önce bir test çalıştırarak API yanıtınızı isteme ekleyin.", + "aiPromptCopyError": "İstem panoya kopyalanamadı. Tarayıcınız bu özelliği desteklemiyor olabilir.", + "createError": "Widget oluşturulamadı. API uç noktanızın erişilebilir olduğunu kontrol edin.", + "updateError": "Widget güncellenemedi. Değişiklikleriniz kaydedilmedi.", + "importError": "Widget içe aktarılamadı. Dosyanın geçerli bir özel widget JSON dışa aktarımı olduğundan emin olun.", + "exportError": "Widget dışa aktarılamadı.", + "duplicated": "“{name}” widget'ı çoğaltıldı.", + "duplicateError": "Widget çoğaltılamadı.", + "toggleError": "Widget durumu değiştirilemedi.", + "deleteError": "Widget silinemedi.", + "previewError": "Önizleme alınamadı. URL'yi kontrol edip yeniden deneyin.", + "executed": "Eylem başarıyla yürütüldü.", + "executeError": "Eylem başarısız oldu: {error}" }, "table": { - "name": "", - "url": "", - "display": "" + "name": "Ad", + "url": "URL", + "display": "Görüntüleme" }, "widget": { - "disabled": "" + "disabled": "Bu widget devre dışı" } }, "integration": { @@ -970,7 +970,7 @@ "label": "İsim" }, "url": { - "label": "Url" + "label": "URL" }, "attemptSearchEngineCreation": { "label": "Arama Motoru Oluştur", @@ -987,47 +987,47 @@ "placeholder": "Özel Uygulama URL'si" }, "apiKeySettings": { - "label": "" + "label": "API anahtarı al" } }, "action": { "create": "Yeni Entegrasyon" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widget", + "noWidgets": "Widget yok", + "detected": "Docker üzerinden tespit edildi" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", - "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "dnsHole": "DNS", + "mediaService": "Medya", + "calendar": "Takvim", + "mediaSearch": "Arama", + "mediaRelease": "Sürümler", + "mediaRequest": "Talepler", + "downloadClient": "İndirmeler", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Diğer", + "smartHomeServer": "Akıllı Ev", + "indexerManager": "İndeksleyici", + "healthMonitoring": "Sağlık", + "search": "Arama", + "mediaTranscoding": "Kod Dönüştürme", + "networkController": "Ağ", + "releasesProvider": "Sürümler", + "notifications": "Bildirimler", + "firewall": "Güvenlik Duvarı", + "timetable": "Zaman Çizelgesi", + "photoService": "Fotoğraflar", + "documents": "Belgeler", + "notes": "Notlar", + "mediaMonitoring": "İzleme", + "speedtest": "Hız Testi", + "analytics": "Analiz", + "vpn": "VPN", + "mediaLibrary": "Medya Kütüphanesi", + "uptimeMonitoring": "Çalışma Süresi İzleme" }, "testConnection": { "action": { @@ -1196,7 +1196,7 @@ }, "notFound": { "title": "Bulunamadı", - "message": "Muhtemelen yanlış Url veya yol" + "message": "Muhtemelen yanlış URL veya yol" }, "internalServerError": { "title": "İç Sunucu Hatası", @@ -1278,7 +1278,7 @@ "newLabel": "Yeni konu" }, "url": { - "label": "Url", + "label": "URL", "newLabel": "Yeni url" }, "opnsenseApiKey": { @@ -1290,12 +1290,12 @@ "newLabel": "Yeni API Anahtarı (Gizli Anahtar)" }, "patchmonApiKey": { - "label": "", - "newLabel": "" + "label": "API Anahtarı", + "newLabel": "Yeni API Anahtarı" }, "patchmonApiSecret": { - "label": "", - "newLabel": "" + "label": "API Gizli Anahtarı", + "newLabel": "Yeni API Gizli Anahtarı" }, "githubAppId": { "label": "Uygulama Kimliği", @@ -1310,8 +1310,8 @@ "newLabel": "Yeni özel anahtar" }, "slug": { - "label": "", - "newLabel": "" + "label": "Durum sayfası kısa adı", + "newLabel": "Yeni durum sayfası kısa adı" } } }, @@ -1321,40 +1321,40 @@ "full": "Tam entegrasyon erişimi" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "Kendi sunucunuzda barındırılan sesli kitap ve podcast sunucusu" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "Subsonic API uyumlu, kendi sunucunuzda barındırılan müzik akış sunucusu" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Herkese açık durum sayfaları sunan, kendi sunucunuzda barındırılan çalışma süresi izleme sistemi", "secret": { "slug": { - "description": "" + "description": "Herkese açık durum sayfanızın kısa adı. Ayarlanmazsa varsayılan olarak “default” kullanılır." }, "apiKey": { - "description": "" + "description": "Kimlik doğrulamalı /metrics erişimi için isteğe bağlı API anahtarı" } } }, "traefik": { - "name": "", - "description": "" + "name": "Traefik", + "description": "Bulut tabanlı ters proxy ve yük dengeleyici" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "Taranmış belgeleri arşivlemek ve düzenlemek için belge yönetim sistemi" }, "patchmon": { - "name": "", - "description": "" + "name": "PatchMon", + "description": "Linux ana makineleri için yama yönetimi ve izleme" }, "bazarr": { - "name": "", - "description": "" + "name": "Bazarr", + "description": "Altyazıları yöneten ve indiren Sonarr ve Radarr yardımcı uygulaması" } }, "media": { @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "Yüklenmiş medya yok" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "Ekle", "apply": "Uygula", "backToOverview": "Genel bakışa dön", - "skip": "", + "skip": "Atla", "change": "Değiştir", "create": "Oluştur", "createAnother": "Kaydet ve Yeni Oluştur", @@ -1427,24 +1427,24 @@ "continue": "Devam Et", "previous": "Önceki", "next": "İleri", - "checkoutDocs": "Dökümanlara göz at", + "checkoutDocs": "Dokümanlara göz at", "checkLogs": "Daha fazla ayrıntı için günlükleri kontrol edin", "tryAgain": "Tekrar Deneyin", "loading": "Yükleniyor", - "show": "", - "hide": "" + "show": "Göster", + "hide": "Gizle" }, "here": "buraya", "iconPicker": { "label": "Simge URL'si", "header": "Simgeleri filtrelemek için isim veya nesne yazın... Homarr sizin için {countIcons} simge arasında arama yapacaktır.", - "headerLoading": "", - "noResults": "", - "error": "" + "headerLoading": "Simge aramak için yazın…", + "noResults": "“{search}” aramasıyla eşleşen simge yok.", + "error": "Simgeler yüklenemedi." }, "colorScheme": { "options": { - "auto": "", + "auto": "Otomatik", "light": "Aydınlık", "dark": "Koyu" } @@ -1492,7 +1492,7 @@ "switchToDarkMode": "Koyu Temaya Geç", "switchToLightMode": "Aydınlık Temaya Geç", "management": "Yönetim", - "docker": "", + "docker": "Docker", "preferences": "Tercihleriniz", "logout": "Oturumu kapat", "login": "Giriş", @@ -1543,8 +1543,8 @@ }, "unit": { "speed": { - "kilometersPerHour": "km/h", - "milesPerHour": "mph" + "kilometersPerHour": "km/sa", + "milesPerHour": "mil/sa" } } }, @@ -1602,7 +1602,7 @@ "label": { "create": "Yeni Kategori", "changePosition": "Pozisyonu değiştir", - "settings": "" + "settings": "Ayarlar" } }, "openAllInNewTabs": { @@ -1623,15 +1623,15 @@ "menu": { "label": { "settings": "Ayarlar", - "refresh": "", - "options": "", - "actions": "" + "refresh": "Yenile", + "options": "Seçenekler", + "actions": "Eylemler" }, "status": { - "success": "", - "error": "", - "loading": "", - "idle": "" + "success": "Tamam", + "error": "Hata", + "loading": "Yükleniyor", + "idle": "Boşta" } }, "create": { @@ -1659,11 +1659,11 @@ "edit": { "title": "Öğeyi Düzenle", "tab": { - "widget": "", - "app": "" + "widget": "Widget'ı düzenle", + "app": "Uygulamayı düzenle" }, "app": { - "propagationNotice": "" + "propagationNotice": "Bu uygulamada yapılan değişiklikler, tüm panolarda kullanıldığı her yerde uygulanacaktır." }, "advancedOptions": { "label": "Gelişmiş seçenekler", @@ -1691,11 +1691,11 @@ }, "widget": { "integrationSelect": { - "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "configureIntegrationFirst": "Önce bir entegrasyon bağlayın", + "loading": "Yükleniyor...", + "placeholder": "Bir seçenek belirleyin", + "noResults": "Sonuç bulunamadı", + "loadError": "Seçenekler yüklenemedi" }, "app": { "name": "Uygulama", @@ -1776,7 +1776,7 @@ "label": "Yeni sekmede aç" }, "withBorder": { - "label": "" + "label": "Kenarlık göster" }, "items": { "label": "Yer İmleri", @@ -1785,11 +1785,11 @@ } }, "archiveTeamWarrior": { - "name": "", - "description": "", + "name": "ArchiveTeam Warrior", + "description": "ArchiveTeam Warrior durumunu, projelerini ve etkin arşivleme işlerini izleyin.", "option": { "showBroadcastMessage": { - "label": "" + "label": "Yayın mesajlarını göster" } } }, @@ -1907,14 +1907,14 @@ "description": "Tarih biçimini değiştirmek için ISO 8601 standardını kullanın (bu diğer seçenekleri geçersiz kılacaktır)" }, "showWeather": { - "label": "", - "description": "" + "label": "Hava durumunu göster", + "description": "Kartın köşesinde küçük, hareketli bir hava durumu simgesi ve sıcaklık gösterir" }, "weatherLocation": { - "label": "" + "label": "Hava durumu konumu" }, "isWeatherFormatFahrenheit": { - "label": "" + "label": "Fahrenhayt kullan" } } }, @@ -1944,7 +1944,7 @@ "noStation": "İstasyon seçilmedi", "option": { "baseUrl": { - "label": "" + "label": "Search.ch URL'si" }, "station": { "label": "İstasyon" @@ -1976,8 +1976,8 @@ "clear": "Biçimlendirmeyi temizle", "heading": "Başlık {level}", "align": "Metin hizalama: {position}", - "directionLtr": "", - "directionRtl": "", + "directionLtr": "Metin yönünü soldan sağa ayarla", + "directionRtl": "Metin yönünü sağdan sola ayarla", "blockquote": "Blok alıntı", "horizontalLine": "Yatay çizgi", "bulletList": "Maddeli liste", @@ -2083,7 +2083,7 @@ "label": "Coğrafi konuma izin ver (geolocation)" }, "allowModals": { - "label": "Allow modals" + "label": "İletişim kutularına izin ver" } }, "error": { @@ -2242,7 +2242,7 @@ "description": "Yalnızca mevcut hava durumunda" }, "useImperialSpeed": { - "label": "Use mph for windspeed" + "label": "Rüzgâr hızı için mil/sa kullan" }, "location": { "label": "Hava durumu konumu" @@ -2262,13 +2262,13 @@ "description": "Görüntülenecek tarihin biçimi" } }, - "currentWindSpeed": "{currentWindSpeed} km/s", + "currentWindSpeed": "{currentWindSpeed} {unit}", "dailyForecast": { "sunrise": "Gün Doğumu", "sunset": "Gün Batımı", - "maxWindSpeed": "Maks. Rüzgar Hızı: {maxWindSpeed} km/s", - "maxWindGusts": "Maks. Rüzgar Hamlesi: {maxWindGusts} km/s", - "humidity": "" + "maxWindSpeed": "En yüksek rüzgâr hızı: {maxWindSpeed} {unit}", + "maxWindGusts": "En yüksek rüzgâr hamlesi: {maxWindGusts} {unit}", + "humidity": "Nem: %{humidity}" }, "kind": { "clear": "Açık", @@ -2319,7 +2319,7 @@ "label": "Bellek Bilgilerini Göster" }, "gpu": { - "label": "Show GPU Info" + "label": "GPU bilgilerini göster" }, "showUptime": { "label": "Çalışma Süresini Göster" @@ -2328,9 +2328,9 @@ "label": "Dosya Sistemi Bilgilerini Göster" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "Görünür depolama birimleri", + "description": "Yalnızca seçilen entegrasyonların tümü Synology olduğunda kullanılabilir. Algılanan tüm depolama birimlerini göstermek için boş bırakın.", + "placeholder": "Depolama birimlerini seçin" }, "defaultTab": { "label": "Varsayılan sekme" @@ -2348,7 +2348,7 @@ "memory": "Bellek: {memory}GiB", "memoryAvailable": "Kullanılabilir: {memoryAvailable} GiB ({percent}%)", "version": "Sürüm: {version}", - "uptime": "Çalışma Süresi: {days} Gün, {hours} Saat, {minutes} Dakika", + "uptime": "Çalışma süresi: {months} Ay, {days} Gün, {hours} Saat, {minutes} Dakika", "loadAverage": "Ortalama yük:", "minute": "1 dakika", "minutes": "{count} dakika", @@ -2367,7 +2367,7 @@ }, "resource": { "node": { - "name": "Nodes" + "name": "Düğümler" }, "qemu": { "name": "VM's" @@ -2381,7 +2381,7 @@ }, "popover": { "rightSection": { - "node": "Node", + "node": "Düğüm", "vmId": "VM Kimliği", "plugin": "Eklenti" }, @@ -2402,7 +2402,7 @@ "name": "İsim", "cpu": "İşlemci", "memory": "BELLEK", - "node": "Node" + "node": "Düğüm" } } } @@ -2412,249 +2412,260 @@ "description": "Konteynerlerinizin istatistikleri (Bu widget yalnızca yönetici ayrıcalıklarıyla eklenebilir)", "option": { "columns": { - "label": "" + "label": "Gösterilecek sütunlar" }, "enableRowSorting": { - "label": "Enable items sorting" + "label": "Öğeleri sıralamayı etkinleştir" }, "defaultSort": { - "label": "Column used for sorting by default", + "label": "Varsayılan sıralama sütunu", "option": { - "name": "Name", - "state": "State", - "cpuUsage": "CPU usage", - "memoryUsage": "Memory usage" + "name": "Ad", + "state": "Durum", + "cpuUsage": "CPU kullanımı", + "memoryUsage": "Bellek kullanımı" } }, "descendingDefaultSort": { - "label": "Invert sorting" + "label": "Sıralamayı ters çevir" + }, + "columnOrder": { + "label": "Sütun sırası" + }, + "columnWidths": { + "label": "Sütun genişlikleri" } }, "error": { - "internalServerError": "Konteyner istatistikleri alınamadı" + "internalServerError": "Konteyner istatistikleri alınamadı", + "layoutSaveTitle": "Tablo düzeni kaydedilemedi", + "layoutSaveMessage": "Docker tablo düzeni kaydedilemedi. Sütunu yeniden taşımayı veya boyutlandırmayı deneyin." + }, + "empty": { + "noContainers": "Konteyner bulunamadı" } }, "coolify": { "name": "Coolify", - "description": "Overview of your Coolify instance with servers and applications", + "description": "Sunucular ve uygulamalarla birlikte Coolify örneğinizin genel görünümü", "option": { "showServers": { - "label": "Show servers" + "label": "Sunucuları göster" }, "showApplications": { - "label": "Show applications" + "label": "Uygulamaları göster" }, "showServices": { - "label": "Show services" + "label": "Hizmetleri göster" } }, "empty": { - "servers": "No servers found", - "applications": "No applications found", - "services": "No services found" + "servers": "Sunucu bulunamadı", + "applications": "Uygulama bulunamadı", + "services": "Hizmet bulunamadı" }, "footer": { - "updated": "Updated {when}" + "updated": "Güncellendi: {when}" }, "error": { - "noIntegration": "No Coolify integration configured", - "internalServerError": "Failed to fetch Coolify data" + "noIntegration": "Yapılandırılmış Coolify entegrasyonu yok", + "internalServerError": "Coolify verileri alınamadı" }, "server": { - "buildServer": "Build" + "buildServer": "Derleme" }, "instances": { - "title": "Instances" + "title": "Örnekler" } }, "vpn": { - "name": "", - "description": "", - "serviceUnavailable": "", + "name": "VPN", + "description": "VPN bağlantılarınızın genel görünümü", + "serviceUnavailable": "VPN kullanılamıyor", "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Bir NUT sunucusu aracılığıyla UPS cihazlarınızın durumunu izleyin", "option": { "showBattery": { - "label": "" + "label": "Pili göster" }, "showLoad": { - "label": "" + "label": "Yükü göster" }, "showVoltage": { - "label": "" + "label": "Voltajı göster" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Çevrimiçi", + "onBattery": "Pilde", + "lowBattery": "Düşük pil", + "charging": "Şarj oluyor", + "unknown": "Bilinmeyen" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Çalışma Süresi", + "load": "Yük", + "input": "Giriş", + "output": "Çıkış" }, "error": { - "internalServerError": "" + "internalServerError": "UPS verileri alınamadı" } }, "tracearr": { "name": "Tracearr", - "description": "Enhanced media server monitoring with detailed stream and transcoding data", + "description": "Ayrıntılı yayın ve kod dönüştürme verileriyle gelişmiş medya sunucusu izleme", "option": { "showStreams": { - "label": "Show active streams" + "label": "Etkin yayınları göster" }, "showStats": { - "label": "Show stats summary" + "label": "İstatistik özetini göster" }, "showRecentActivity": { - "label": "Show recent activity" + "label": "Son etkinlikleri göster" }, "showViolations": { - "label": "Show violations" + "label": "İhlalleri göster" } }, "stats": { - "activeStreams": "Active Streams", - "totalUsers": "Total Users", - "transcodes": "Transcodes", - "bandwidth": "Bandwidth" + "activeStreams": "Etkin Yayınlar", + "totalUsers": "Toplam Kullanıcı", + "transcodes": "Kod Dönüştürmeler", + "bandwidth": "Bant Genişliği" }, "streams": { - "empty": "No active streams", - "user": "User", - "media": "Media", - "state": "State", - "quality": "Quality", - "device": "Device", - "progress": "Progress", + "empty": "Etkin yayın yok", + "user": "Kullanıcı", + "media": "Medya", + "state": "Durum", + "quality": "Kalite", + "device": "Cihaz", + "progress": "İlerleme", "videoDecision": { - "directPlay": "Direct Play", - "transcode": "Transcode", - "directStream": "Direct Stream" + "directPlay": "Doğrudan Oynatma", + "transcode": "Kod Dönüştürme", + "directStream": "Doğrudan Yayın" } }, "recentActivity": { - "title": "Recent Activity", - "empty": "No recent activity", - "watched": "Watched", - "partial": "Partial" + "title": "Son Etkinlikler", + "empty": "Yakın zamanda etkinlik yok", + "watched": "İzlendi", + "partial": "Kısmi" }, "violations": { - "title": "Violations", - "empty": "No recent violations", - "rule": "Rule", - "user": "User" + "title": "İhlaller", + "empty": "Yakın zamanda ihlal yok", + "rule": "Kural", + "user": "Kullanıcı" }, - "noSectionsEnabled": "No sections enabled", + "noSectionsEnabled": "Etkinleştirilmiş bölüm yok", "error": { - "noIntegration": "No Tracearr integration configured", - "internalServerError": "Failed to fetch Tracearr data" + "noIntegration": "Yapılandırılmış Tracearr entegrasyonu yok", + "internalServerError": "Tracearr verileri alınamadı" } }, "umami": { - "name": "", - "description": "", - "visitors": "", - "active": "", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "name": "Umami Analytics", + "description": "Umami analiz kurulumunuzdaki ziyaretçi istatistiklerini gösterir", + "visitors": "ziyaretçiler", + "active": "etkin", + "pageviews": "sayfa görüntüleme", + "visits": "ziyaretler", + "bounceRate": "hemen çıkma", + "avgDuration": "ort.", "option": { "websiteId": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noWebsites": "", - "configureIntegrationFirst": "" + "label": "Web sitesi", + "description": "Umami kurulumunuz tarafından izlenen bir web sitesi seçin", + "placeholder": "Bir web sitesi seçin", + "loading": "Web siteleri yükleniyor...", + "noWebsites": "Web sitesi bulunamadı", + "configureIntegrationFirst": "Önce bir Umami entegrasyonu bağlayın" }, "timeFrame": { - "label": "", - "description": "", + "label": "Zaman aralığı", + "description": "Ziyaretçi verilerinin görüntüleneceği zaman aralığı", "option": { - "today": "", - "24h": "", - "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "today": "Bugün", + "24h": "Son 24 saat", + "7d": "Son 7 gün", + "30d": "Son 30 gün", + "month": "Bu ay", + "lastMonth": "Geçen ay" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Etkinlik", + "description": "Belirli bir etkinliğin toplam oluşum sayısını göster", + "placeholder": "Bir etkinlik seçin", + "loading": "Etkinlikler yükleniyor...", + "noEvents": "Etkinlik bulunamadı", + "none": "Etkinlik yok", + "configureWebsiteFirst": "Etkinlikleri yüklemek için önce bir web sitesi seçin" }, "chartType": { - "label": "", - "description": "", + "label": "Grafik türü", + "description": "Grafik için görüntüleme stili", "option": { - "bar": "", - "sparkline": "" + "bar": "Çubuk grafik", + "sparkline": "Mini Grafik" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Grafik stili", + "description": "Etkinlik serilerinin grafikte nasıl gösterileceği", "option": { - "grouped": "", - "overlay": "" + "grouped": "Yan yana", + "overlay": "Bindirme (alt kümelenme)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Görünüm", + "description": "Widget gövdesinde ne gösterileceği", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Grafik", + "events": "Etkinlik grafiği", + "topPages": "En çok ziyaret edilen sayfalar", + "topReferrers": "En çok yönlendirenler" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Etkinlikler", + "description": "Grafik için bir veya daha fazla etkinlik seçin", + "placeholder": "Etkinlik seç...", + "loading": "Etkinlikler yükleniyor...", + "noEvents": "Etkinlik bulunamadı", + "configureWebsiteFirst": "Etkinlikleri yüklemek için önce bir web sitesi seçin" }, "topCount": { - "label": "", - "description": "" + "label": "Gösterilecek öğeler", + "description": "Gösterilecek en fazla öğe sayısı (en çok 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "etkinlik", + "label": "etkinlik" }, "topPages": { - "direct": "" + "direct": "Doğrudan" }, "topReferrers": { - "direct": "" + "direct": "Doğrudan" }, "events": { - "selectPrompt": "" + "selectPrompt": "Grafik için etkinlik seçin" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Umami entegrasyonu yapılandırılmadı", + "noWebsite": "Web sitesi yapılandırılmadı", + "noData": "Veri yok", + "internalServerError": "Umami verileri alınamadı" } }, "common": { @@ -2725,18 +2736,33 @@ "showOnlyPlaying": { "label": "Yalnızca şu an oynatılanı göster", "description": "Bunu devre dışı bırakmak plex için işe yaramayacaktır" + }, + "showBitrate": { + "label": "Bit hızını göster", + "description": "Geçerli oynatma bit hızını konumun yanında gösterir" + }, + "showLocation": { + "label": "Konumu göster", + "description": "Yayının LAN'da mı yoksa WAN'da mı olduğunu gösterir" } }, + "footer": { + "streams": "{count, plural, one {# etkin yayın} other {# etkin yayın}}", + "totalBitrate": "Toplam: {bitrate}" + }, "items": { "currentlyPlaying": "Şuan Oynatılan", "user": "Kullanıcı", "name": "İsim", "id": "Kimlik", - "status": "", - "directPlay": "", - "transcoding": "", - "paused": "", - "remaining": "", + "status": "Durum", + "directPlay": "Doğrudan oynatma", + "directStream": "Doğrudan yayın", + "transcodeVideo": "Video kodu dönüştürülüyor", + "transcodeAudio": "Ses kodu dönüştürülüyor", + "transcoding": "Kod dönüştürülüyor", + "paused": "Duraklatıldı", + "remaining": "{minutes} dk kaldı", "metadata": { "title": "Meraklısı için istatistikler", "video": { @@ -2758,286 +2784,286 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "Paperless-ngx belge arşivinizin genel görünümü", + "documentsTotal": "Toplam Belge", + "documentsInbox": "Gelen Kutusu", + "correspondents": "Muhataplar", + "tags": "Etiketler", + "documentTypes": "Belge Türleri", + "inboxRatio": "Gelen Kutusu Oranı", + "inbox": "gelen kutusu", + "total": "toplam", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Gelen kutusu oranını göster", + "description": "Gelen kutusundaki belgelerin toplam belgelere oranını öne çıkan bölümde gösterir" }, "showInboxRing": { - "label": "", - "description": "" + "label": "Gelen kutusu halkasını göster", + "description": "Gelen kutusu oranının yanında bir ilerleme halkası gösterir" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Toplam belge sayısını göster", + "description": "Arşivinizdeki toplam belge sayısını gösterir" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Gelen kutusu sayısını göster", + "description": "Gelen kutusundaki işlenmemiş belge sayısını gösterir" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Muhatapları göster", + "description": "Toplam muhatap sayısını gösterir" }, "showTags": { - "label": "", - "description": "" + "label": "Etiketleri göster", + "description": "Toplam etiket sayısını gösterir" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Belge türlerini göster", + "description": "Toplam belge türü sayısını gösterir" } }, "error": { - "internalServerError": "" + "internalServerError": "Paperless-ngx verileri alınamadı" } }, "patchmon": { - "name": "", - "description": "", - "title": "", - "totalHosts": "", - "hostsNeedingUpdates": "", - "securityUpdates": "", - "upToDateHosts": "", - "hostsWithSecurityUpdates": "", - "recentUpdates24h": "", - "totalOutdatedPackages": "", - "totalRepos": "", - "osDistribution": "", - "compliance": "", - "complianceRatio": "", - "lastUpdated": "", + "name": "PatchMon", + "description": "PatchMon'daki ana makine yama durumunun genel görünümü", + "title": "PatchMon İstatistikleri", + "totalHosts": "Toplam Ana Makine", + "hostsNeedingUpdates": "Güncelleme Gerekiyor", + "securityUpdates": "Güvenlik Güncellemeleri", + "upToDateHosts": "Güncel Ana Makineler", + "hostsWithSecurityUpdates": "Güvenlik Güncellemesi Olan Ana Makineler", + "recentUpdates24h": "Güncellemeler (24 sa.)", + "totalOutdatedPackages": "Güncel Olmayan Paketler", + "totalRepos": "Depolar", + "osDistribution": "İşletim Sistemi Dağılımı", + "compliance": "Yama Uyumluluğu", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Güncellendi: {time}", "option": { "showTotalHosts": { - "label": "", - "description": "" + "label": "Toplam ana makine sayısını göster", + "description": "İzlenen toplam ana makine sayısını gösterir" }, "showHostsNeedingUpdates": { - "label": "", - "description": "" + "label": "Güncelleme gereken ana makineleri göster", + "description": "En az bir güncel olmayan paketi bulunan ana makineleri gösterir" }, "showSecurityUpdates": { - "label": "", - "description": "" + "label": "Güvenlik güncellemelerini göster", + "description": "Kullanılabilir toplam güvenlik güncellemesi sayısını gösterir" }, "showUpToDateHosts": { - "label": "", - "description": "" + "label": "Güncel ana makineleri göster", + "description": "Güncel olmayan paketi bulunmayan ana makineleri gösterir" }, "showHostsWithSecurityUpdates": { - "label": "", - "description": "" + "label": "Güvenlik güncellemesi olan ana makineleri göster", + "description": "Güvenlik yaması gereken ana makineleri gösterir" }, "showRecentUpdates24h": { - "label": "", - "description": "" + "label": "Son güncellemeleri göster (24 sa.)", + "description": "Son 24 saatte uygulanan güncelleme sayısını gösterir" }, "showTotalOutdatedPackages": { - "label": "", - "description": "" + "label": "Güncel olmayan paketleri göster", + "description": "Tüm ana makinelerdeki güncel olmayan paketlerin toplam sayısını gösterir" }, "showTotalRepos": { - "label": "", - "description": "" + "label": "Depoları göster", + "description": "İzlenen etkin depo sayısını gösterir" }, "enableThresholdColors": { - "label": "", - "description": "" + "label": "Eşik renklerini etkinleştir", + "description": "İstatistik değerlerini önem düzeyi ön ayarlarına göre yeşil, sarı veya kırmızı renklendirir" }, "useCustomThresholds": { - "label": "", - "description": "" + "label": "Gelişmiş eşikler", + "description": "Her istatistik için uyarı ve kritik eşikleri mutlak sayılarla veya toplam ana makine yüzdesiyle özelleştirin" }, "thresholdMode": { "option": { - "absolute": "", - "percent": "" + "absolute": "Mutlak sayı", + "percent": "Toplam ana makinelerin yüzdesi" } }, "hostsNeedingUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Güncelleme gereksinimi eşik modu", + "description": "Güncelleme gerekenlerin sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Güncelleme gereksinimi uyarı eşiği", + "description": "Değer bu eşiğe ulaştığında sarı renge geçer" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Güncelleme gereksinimi kritik eşiği", + "description": "Değer bu eşiğe ulaştığında kırmızı renge geçer" }, "securityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Güvenlik güncellemeleri eşik modu", + "description": "Güvenlik güncellemesi sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Güvenlik güncellemeleri uyarı eşiği", + "description": "Değer bu eşiğe ulaştığında sarı renge geçer" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Güvenlik güncellemeleri kritik eşiği", + "description": "Değer bu eşiğe ulaştığında kırmızı renge geçer" }, "hostsWithSecurityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Güvenlik güncellemesi olan ana makineler için eşik modu", + "description": "Ana makine sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Güvenlik güncellemesi olan ana makineler için uyarı eşiği", + "description": "Değer bu eşiğe ulaştığında sarı renge geçer" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Güvenlik güncellemesi olan ana makineler için kritik eşik", + "description": "Değer bu eşiğe ulaştığında kırmızı renge geçer" }, "upToDateHostsThresholdMode": { - "label": "", - "description": "" + "label": "Güncel ana makineler için eşik modu", + "description": "Güncel ana makine sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" }, "upToDateHostsWarningAt": { - "label": "", - "description": "" + "label": "Güncel ana makineler için uyarı eşiği", + "description": "Değer bu eşikte veya üzerinde, ancak tam kapsamanın altındaysa sarı renge geçer" }, "upToDateHostsCriticalAt": { - "label": "", - "description": "" + "label": "Güncel ana makineler için kritik eşik", + "description": "Değer bu eşiğin altına düştüğünde kırmızı renge geçer" }, "totalOutdatedPackagesThresholdMode": { - "label": "", - "description": "" + "label": "Güncel olmayan paketler için eşik modu", + "description": "Güncel olmayan paketlerin sayısını mutlak değer veya toplam ana makinelerin yüzdesi olarak karşılaştırır" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "Güncel olmayan paketler için uyarı eşiği", + "description": "Değer bu eşiğe ulaştığında sarı renge geçer" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "Güncel olmayan paketler için kritik eşik", + "description": "Değer bu eşiğe ulaştığında kırmızı renge geçer" }, "showOsDistribution": { - "label": "", - "description": "" + "label": "İşletim sistemi dağılımını göster", + "description": "İzlenen ana makinelerin işletim sistemine göre dağılımını gösterir" }, "osDistributionLimit": { - "label": "", - "description": "", + "label": "İşletim sistemi dağılımı sınırı", + "description": "Gösterilecek en fazla işletim sistemi sayısı", "option": { - "3": "", - "5": "", - "10": "", - "all": "" + "3": "İlk 3", + "5": "İlk 5", + "10": "İlk 10", + "all": "Tümü" } }, "showOsVersion": { - "label": "", - "description": "" + "label": "İşletim sistemi sürümünü göster", + "description": "Mevcut olduğunda işletim sistemi sürümünü her dağılım etiketine ekler" }, "showComplianceHero": { - "label": "", - "description": "" + "label": "Uyumluluk özetini göster", + "description": "Güncel ana makinelerin yüzdesini gösteren bir uyumluluk halkası görüntüler" }, "osDisplayMode": { - "label": "", - "description": "", + "label": "İşletim sistemi görüntüleme modu", + "description": "İşletim sistemi dağılımının nasıl gösterileceğini seçin", "option": { - "bars": "", - "donut": "" + "bars": "Yatay çubuklar", + "donut": "Halka grafik" } } }, "error": { - "internalServerError": "" + "internalServerError": "PatchMon verileri alınamadı" } }, "bazarr": { - "name": "", - "description": "", - "episodes": "", - "movies": "", - "providers": "", - "status": "", + "name": "Bazarr", + "description": "Bazarr örneğinizdeki eksik altyazıların ve sağlık durumunun genel görünümü", + "episodes": "Eksik Bölümler", + "movies": "Eksik Filmler", + "providers": "Sağlayıcı Sorunları", + "status": "Sağlık Sorunları", "option": { "showMissingEpisodes": { - "label": "", - "description": "" + "label": "Eksik bölümleri göster", + "description": "Altyazısı eksik bölüm sayısını gösterir" }, "showMissingMovies": { - "label": "", - "description": "" + "label": "Eksik filmleri göster", + "description": "Altyazısı eksik film sayısını gösterir" }, "showProviderIssues": { - "label": "", - "description": "" + "label": "Sağlayıcı sorunlarını göster", + "description": "Sorun yaşayan altyazı sağlayıcılarının sayısını gösterir" }, "showHealthIssues": { - "label": "", - "description": "" + "label": "Sağlık sorunlarını göster", + "description": "Bazarr sağlık sorunlarının sayısını gösterir" } }, "error": { - "internalServerError": "" + "internalServerError": "Bazarr verileri alınamadı" } }, "immich-serverStats": { - "name": "Immich Server Stats", - "description": "Information about your Immich instance", + "name": "Immich Sunucu İstatistikleri", + "description": "Immich örneğiniz hakkında bilgiler", "option": { "showUsers": { - "label": "Show users", - "description": "Show count of users on your instance" + "label": "Kullanıcıları göster", + "description": "Örneğinizdeki kullanıcı sayısını gösterir" }, "showPhotos": { - "label": "Show photos", - "description": "Show count of photos on your instance" + "label": "Fotoğrafları göster", + "description": "Örneğinizdeki fotoğraf sayısını gösterir" }, "showVideos": { - "label": "Show videos", - "description": "Show count of videos on your instance" + "label": "Videoları göster", + "description": "Örneğinizdeki video sayısını gösterir" }, "showStorage": { - "label": "Show storage", - "description": "Show the total amount of storage used" + "label": "Depolamayı göster", + "description": "Kullanılan toplam depolama alanını gösterir" } }, - "users": "Users", - "photos": "Photos", - "videos": "Videos", - "storage": "Used Storage" + "users": "Kullanıcılar", + "photos": "Fotoğraflar", + "videos": "Videolar", + "storage": "Kullanılan Depolama" }, "immich-albumCarousel": { - "name": "Immich Album", - "allPhotos": "", + "name": "Immich Albümü", + "allPhotos": "Tüm fotoğraflar", "option": { "albumId": { - "label": "Album ID", - "description": "This is a unique ID which refers to your Immich album. You can find this id by opening an album and copying the unique string from the URL, for example 'a21aca09-9f05-47dc-b1a1-7b53c547226e'" + "label": "Albüm", + "description": "Bir Immich albümü veya Tüm fotoğraflar seçeneğini belirleyin. Seçimi boş bırakmak da tüm kütüphanenizden rastgele fotoğraflar gösterir." }, "rotationIntervalSeconds": { - "label": "Interval in seconds", - "description": "Rotate between pictures in the album every X seconds. Must be at least 1. Must be below 3600." + "label": "Saniye cinsinden aralık", + "description": "Albümdeki resimler arasında her X saniyede bir geçiş yapar. Değer en az 1 ve 3600'den küçük olmalıdır." }, "showPhotoInfo": { - "label": "Show photo info", - "description": "Display date of the picture and the current index at the bottom of the slideshow" + "label": "Fotoğraf bilgilerini göster", + "description": "Slayt gösterisinin altında resmin tarihini ve geçerli sıra numarasını gösterir" }, "randomizePhotos": { - "label": "", - "description": "" + "label": "Fotoğrafları rastgele sırala", + "description": "Her zaman aynı albüm sırasından başlamak yerine fotoğrafları rastgele sırada gösterir." } }, - "description": "Slideshow of pictures in your Immich album", - "noPhotos": "No photos in this album" + "description": "Bir Immich albümündeki veya tüm kütüphanenizdeki fotoğrafların slayt gösterisi", + "noPhotos": "Fotoğraf bulunamadı" }, "downloads": { "name": "İndirme İstemcisi", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "Her entegrasyon için öğe sınırı", "description": "Bu, gösterilecek öğe sayısını tüm entegrasyonlar için değil, her entegrasyon özelinde sınırlar" + }, + "columnOrder": { + "label": "Sütun sırası" + }, + "columnWidths": { + "label": "Sütun genişlikleri" } }, "errors": { "noColumns": "Öğelerdeki Sütunları Seç", - "noCommunications": "Entegrasyondan veri yüklenemiyor" + "noCommunications": "Entegrasyondan veri yüklenemiyor", + "noItems": "İndirme bulunamadı", + "actionFailed": "Eylem başarısız oldu", + "actionFailedMessage": "Eylem tamamlanamadı. Lütfen yeniden deneyin." }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "İstemci içindeki mevcut endeks" }, "id": { - "columnTitle": "İd" + "columnTitle": "İd", + "detailsTitle": "Öğe Kimliği" }, "integration": { "columnTitle": "Entegrasyon" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Bitiş zamanı", - "detailsTitle": "Tamamlanmasından bu yana geçen süre" + "detailsTitle": "Tamamlanmasından bu yana geçen süre", + "eta": "Tahmini Kalan Süre" }, "type": { "columnTitle": "Tür", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "Genel Oran" + "globalRatio": "Genel Oran", + "contextMenu": { + "copyName": "Adı kopyala", + "copyId": "Kimliği kopyala", + "clearFilters": "Filtreleri temizle" + }, + "footer": { + "filter": "İndirmeleri filtrele" + }, + "stats": { + "show": "Genel istatistikleri göster", + "hide": "Genel istatistikleri gizle", + "overallProgress": "Genel kuyruk ilerlemesi", + "totalSize": "Toplam kuyruk boyutu", + "clients": "{count, plural, one {# istemci} other {# istemci}}" + }, + "disconnected": "(bağlantı kesildi)" }, "mediaReleases": { "name": "Medya yayınları", @@ -3223,10 +3276,10 @@ "label": "Bağlantıları yeni sekmede aç" }, "statusFilter": { - "label": "" + "label": "Gösterilecek durumlar" }, "recentDays": { - "label": "" + "label": "Yalnızca son talepleri göster" } }, "pending": { @@ -3238,7 +3291,7 @@ "unknown": "Bilinmeyen", "pending": "Bekleyen", "processing": "İşlemde", - "requested": "Requested", + "requested": "Talep Edildi", "partiallyAvailable": "Kısmi", "available": "Mevcut", "blacklisted": "Engellenenler", @@ -3335,33 +3388,33 @@ } }, "mediaMissing": { - "name": "", - "description": "", + "name": "Eksik ve Kuyruktaki Medya", + "description": "Radarr ve Sonarr'daki eksik ve kuyruğa alınmış film ve bölümleri gösterir", "option": { "showMissing": { - "label": "" + "label": "Eksik öğeleri göster" }, "showQueued": { - "label": "" + "label": "Kuyruktaki öğeleri göster" }, "pageSize": { - "label": "" + "label": "Sayfa başına öğe" } }, "tab": { - "missing": "", - "queued": "" + "missing": "Eksik", + "queued": "Kuyrukta" }, "type": { - "movie": "", - "episode": "" + "movie": "Film", + "episode": "Bölüm" }, "empty": { - "missing": "", - "queued": "", - "noTabsEnabled": "" + "missing": "Eksik öğe yok", + "queued": "Kuyrukta öğe yok", + "noTabsEnabled": "Widget ayarlarında en az bir sekmeyi etkinleştirin" }, - "timeLeft": "" + "timeLeft": "Kalan süre" }, "rssFeed": { "name": "RSS Beslemeleri", @@ -3383,7 +3436,7 @@ "label": "Açıklamayı gizle" }, "showPosterImage": { - "label": "Show poster image" + "label": "Afiş görselini göster" } } }, @@ -3433,7 +3486,7 @@ "label": "Sağlayıcı" }, "providerUrl": { - "label": "" + "label": "Sağlayıcı URL'si" }, "identifier": { "label": "Tanımlayıcı", @@ -3484,11 +3537,11 @@ "tooltip": "Sağlayıcı çözümlenemedi, lütfen görselleri içe aktardıktan sonra elle ayarlayın" }, "tokens": { - "label": "", - "token": "", - "configured": "", - "notConfigured": "", - "save": "" + "label": "Sağlayıcı Tokenları", + "token": "Token", + "configured": "Token yapılandırıldı", + "notConfigured": "Token ayarlanmadı", + "save": "Kaydet" } } }, @@ -3511,9 +3564,9 @@ "invalidIdentifier": "Geçersiz tanımlayıcı", "noMatchingVersion": "Eşleşen sürüm bulunamadı", "noReleasesFound": "Hiçbir sürüm bulunamadı", - "noProviderSelected": "", + "noProviderSelected": "Sağlayıcı seçilmedi", "noProviderResponse": "Sağlayıcıdan yanıt alınamadı", - "unexpected": "" + "unexpected": "Beklenmeyen sağlayıcı hatası" } } }, @@ -3608,188 +3661,174 @@ "noItems": "Görüntülenecek bildirim yok.", "option": { "hideLogos": { - "label": "" + "label": "Logoları gizle" } } }, "speedtestTracker": { "name": "Speedtest Tracker", - "description": "Displays speed test results from your Speedtest Tracker instance.", + "description": "Speedtest Tracker örneğinizdeki hız testi sonuçlarını gösterir.", "option": { "showLatestResult": { - "label": "Show latest result" + "label": "Son sonucu göster" }, "showStats": { - "label": "Show averages" + "label": "Ortalamaları göster" }, "showRecentResults": { - "label": "Show recent results" + "label": "Son sonuçları göster" }, "showPingGraph": { - "label": "Show ping graph" + "label": "Ping grafiğini göster" } }, - "latestResult": "Latest Result", - "averages": "Averages", - "tests": "{count} tests", - "recentResults": "Recent Results", - "recentResultsSpeed": "Speed", + "latestResult": "Son Sonuç", + "averages": "Ortalamalar", + "tests": "{count} test", + "recentResults": "Son Sonuçlar", + "recentResultsSpeed": "Hız", "recentResultsPing": "Ping", - "download": "Download", - "upload": "Upload", + "download": "İndirme", + "upload": "Yükleme", "ping": "Ping", - "status": "Status", - "avgDownload": "Avg Download", - "avgUpload": "Avg Upload", - "avgPing": "Avg Ping", - "healthy": "Healthy", - "unhealthy": "Unhealthy", - "ok": "OK", - "fail": "Fail", - "noSectionsEnabled": "Enable at least one section in widget options.", + "status": "Durum", + "avgDownload": "Ort. İndirme", + "avgUpload": "Ort. Yükleme", + "avgPing": "Ort. Ping", + "healthy": "Sağlıklı", + "unhealthy": "Sağlıksız", + "ok": "Tamam", + "fail": "Başarısız", + "noSectionsEnabled": "Widget seçeneklerinde en az bir bölümü etkinleştirin.", "error": { - "internalServerError": "Failed to fetch speedtest data" + "internalServerError": "Hız testi verileri alınamadı" } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "Uptime Kuma durum sayfanızdaki çalışma süresi istatistiklerini izleyin", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Ortalama çalışma süresini göster", + "description": "Birleşik 24 saatlik ortalama çalışma süresi yüzdesini gösterir" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Çalışma süresi halkasını göster", + "description": "Ortalama çalışma süresi değerinin yanında bir ilerleme halkası gösterir" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Toplam izleyici sayısını göster", + "description": "Yapılandırılmış toplam izleyici sayısını gösterir" }, "showUpCount": { - "label": "", - "description": "" + "label": "Çalışanların sayısını göster", + "description": "Şu anda kaç izleyicinin çalıştığını gösterir" }, "showDownCount": { - "label": "", - "description": "" + "label": "Çalışmayanların sayısını göster", + "description": "Şu anda kaç izleyicinin çalışmadığını gösterir" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Duraklatılanların sayısını göster", + "description": "Şu anda kaç izleyicinin duraklatıldığını gösterir" } }, - "averageUptime": "", + "averageUptime": "Ortalama çalışma süresi (24 sa.)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Toplam izleyici", + "upCount": "Çalışıyor", + "downCount": "Çalışmıyor", + "pausedCount": "Duraklatıldı" }, "error": { - "internalServerError": "" + "internalServerError": "Çalışma süresi verileri alınamadı" } }, "traefik": { - "name": "", - "description": "", + "name": "Traefik", + "description": "Traefik yönlendiricilerinin, hizmetlerinin, ara yazılımlarının ve giriş noktalarının genel görünümü", "option": { "showTcp": { - "label": "" + "label": "TCP'yi göster" }, "showUdp": { - "label": "" + "label": "UDP'yi göster" }, "showEntryPoints": { - "label": "" + "label": "Giriş noktalarını göster" } }, - "instances": "", - "versionUnknown": "", + "instances": "Traefik örnekleri", + "versionUnknown": "Sürüm bilinmiyor", "summary": { - "routers": "", - "entryPoints": "" + "routers": "Yönlendiriciler", + "entryPoints": "Giriş noktaları" }, "resource": { - "routers": "", - "services": "", - "middlewares": "" + "routers": "Yönlendiriciler", + "services": "Hizmetler", + "middlewares": "Ara Yazılımlar" }, "status": { - "healthy": "", - "errors": "", - "warnings": "" + "healthy": "Sağlıklı", + "errors": "{count} hata", + "warnings": "{count} uyarı" }, "error": { - "internalServerError": "" + "internalServerError": "Traefik verileri alınamadı" } }, "audioStats": { - "name": "", - "description": "", + "name": "Ses İstatistikleri", + "description": "Navidrome veya Audiobookshelf'ten kütüphane ve oynatma istatistikleri", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Sanatçıları göster", + "description": "Müzik kütüphanenizdeki toplam sanatçı sayısını gösterir (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Albümleri göster", + "description": "Müzik kütüphanenizdeki toplam albüm sayısını gösterir (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "Şarkıları göster", + "description": "Müzik kütüphanenizdeki toplam şarkı sayısını gösterir (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Kütüphane sayısını göster", + "description": "Örneğinizdeki kütüphane sayısını gösterir (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Sesli kitapları göster", + "description": "Tüm kütüphanelerdeki toplam sesli kitap sayısını gösterir (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Podcast'leri göster", + "description": "Tüm kütüphanelerdeki toplam podcast sayısını gösterir (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "Dinleme süresini göster", + "description": "Toplam dinleme sürenizi gösterir (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "Etkin oturumları göster", + "description": "Şu anda etkin olan oynatma oturumlarının sayısını gösterir (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "Kompakt mod", + "description": "Küçük widget boyutları için ideal olan, daha küçük kutucuklara sahip daha sıkı bir düzen kullanır" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "Sanatçılar", + "albums": "Albümler", + "songs": "Şarkılar", + "libraryCount": "Kütüphaneler", + "audiobooks": "Sesli Kitaplar", + "podcasts": "Podcast'ler", + "listeningTime": "Dinleme Süresi", + "activeSessions": "Etkin Oturumlar", "error": { - "internalServerError": "" + "internalServerError": "Ses istatistikleri verileri alınamadı" } }, "systemResources": { @@ -3829,299 +3868,307 @@ } }, "systemDisks": { - "name": "System disks", - "description": "Disk usage of your system", + "name": "Sistem Diskleri", + "description": "Sisteminizin disk kullanımı", "option": { "showTemperatureIfAvailable": { - "label": "Show temperature if available" + "label": "Mevcutsa sıcaklığı göster" }, "displayMode": { - "label": "Display mode", + "label": "Görüntüleme modu", "option": { "percentage": { - "label": "Percentage (e.g., 76%)" + "label": "Yüzde (ör. %76)" }, "absolute": { - "label": "Absolute values (e.g., 800GB / 1TB)" + "label": "Mutlak değerler (ör. 800 GB / 1 TB)" }, "free": { - "label": "Free space percentage (e.g., 24% free)" + "label": "Boş alan yüzdesi (ör. %24 boş)" } } }, "showBackgroundBar": { - "label": "Show background usage bar" + "label": "Arka plan kullanım çubuğunu göster" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "Görünür depolama birimleri", + "description": "Yalnızca seçilen entegrasyonların tümü Synology olduğunda kullanılabilir. Algılanan tüm depolama birimlerini göstermek için boş bırakın.", + "placeholder": "Depolama birimlerini seçin" } }, "status": { - "unhealthy": "Unhealthy" + "unhealthy": "Sağlıksız" } }, "customApi": { - "name": "", - "description": "", + "name": "Özel API", + "description": "Özel yapılandırmayla herhangi bir harici API'den veri gösterir.", "option": { "definitionId": { - "label": "" + "label": "Tanım Kimliği" }, "refreshInterval": { - "label": "", - "description": "" + "label": "Yenileme aralığı", + "description": "Verilerin API'den hangi sıklıkta yeniden alınacağı (saniye)" } }, - "noDefinition": "", - "definitionNotFound": "", - "noDisplayOutput": "", - "executeConfirm": "", - "executing": "", - "executeSuccess": "", - "executeFailed": "" + "noDefinition": "Tanım seçilmedi", + "definitionNotFound": "Widget tanımı bulunamadı. Silinmiş olabilir.", + "noDisplayOutput": "Görüntülenecek çıktı yok", + "executeConfirm": "Bu eylemi yürütmek istediğinizden emin misiniz?", + "executing": "Yürütülüyor...", + "executeSuccess": "Eylem başarıyla yürütüldü", + "executeFailed": "Eylem başarısız oldu. Widget yapılandırmasını kontrol edin." }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel Sistemleri (Tablo)", + "description": "Sıralanabilir sütunlar ve durum göstergeleri ile tüm Beszel tarafından izlenen sistemlerin tablo görünümü", "option": { "statusFilter": { - "label": "" + "label": "Durum filtresi" }, "sortBy": { - "label": "" + "label": "Sıralama ölçütü" }, "sortDirection": { - "label": "" + "label": "Sıralama yönü" }, "showCpu": { - "label": "" + "label": "CPU'yu göster" }, "showMemory": { - "label": "" + "label": "Belleği göster" }, "showDisk": { - "label": "" + "label": "Disk göster" }, "showGpu": { - "label": "" + "label": "GPU'yu göster" }, "showLoadAvg": { - "label": "" + "label": "Yük ortalamasını göster" }, "showNet": { - "label": "" + "label": "Ağı göster" }, "showTemp": { - "label": "" + "label": "Sıcaklığı göster" }, "showBattery": { - "label": "" + "label": "Pili göster" }, "showServices": { - "label": "" + "label": "Hizmetleri göster" }, "showUptime": { - "label": "" + "label": "Çalışma süresini göster" }, "showAgent": { - "label": "" + "label": "Ajan sürümünü göster" + }, + "columnOrder": { + "label": "Sütun sırası" + }, + "columnWidths": { + "label": "Sütun genişlikleri" } }, - "noRecords": "", + "noRecords": "Sistem bulunamadı", "error": { - "internalServerError": "" + "internalServerError": "Beszel'e bağlanılamadı. Entegrasyon ayarlarınızı kontrol edin.", + "layoutSaveTitle": "Tablo düzeni kaydedilemedi", + "layoutSaveMessage": "Sütun sırası veya genişlikleri kaydedilemedi. Lütfen yeniden deneyin." }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Sistem", + "cpu": "İşlemci", + "memory": "Bellek", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Yük Ort", + "net": "Ağ", + "temp": "Sıc", + "battery": "Pil", + "services": "Hizmetler", + "uptime": "Çalışma Süresi", + "agent": "Ajan" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel Sistemleri (Izgara)", + "description": "Gerçek zamanlı metrikler ile tüm Beszel tarafından izlenen sistemlerin kart ızgara görünümü", "option": { "statusFilter": { - "label": "" + "label": "Durum filtresi" }, "showCpu": { - "label": "" + "label": "CPU'yu göster" }, "showMemory": { - "label": "" + "label": "Belleği göster" }, "showDisk": { - "label": "" + "label": "Disk göster" }, "showGpu": { - "label": "" + "label": "GPU'yu göster" }, "showLoadAvg": { - "label": "" + "label": "Yük ortalamasını göster" }, "showNet": { - "label": "" + "label": "Ağı göster" }, "showTemp": { - "label": "" + "label": "Sıcaklığı göster" }, "showBattery": { - "label": "" + "label": "Pili göster" }, "showServices": { - "label": "" + "label": "Hizmetleri göster" }, "showUptime": { - "label": "" + "label": "Çalışma süresini göster" }, "showAgent": { - "label": "" + "label": "Ajan sürümünü göster" } }, "error": { - "internalServerError": "" + "internalServerError": "Beszel'e bağlanılamadı. Entegrasyon ayarlarınızı kontrol edin." }, "empty": { - "noSystems": "" + "noSystems": "Sistem bulunamadı" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Bellek", + "disk": "Disk", + "gpu": "GPU", + "loadAvg": "Ort. Yük", + "net": "Ağ", + "temp": "Sıcaklık", + "battery": "Pil", + "services": "Hizmetler", + "uptime": "Çalışma Süresi", + "agent": "Ajan" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel Uyarıları", + "description": "Beszel uyarı yapılandırmalarını ve geçmişini görüntüleyin", "option": { "showHistory": { - "label": "" + "label": "Uyarı geçmişini göster" }, "maxHistoryItems": { - "label": "" + "label": "En fazla geçmiş öğesi" } }, - "empty": "", + "empty": "Yapılandırılmış uyarı yok", "error": { - "internalServerError": "" + "internalServerError": "Beszel'e bağlanılamadı. Entegrasyon ayarlarınızı kontrol edin." }, - "history": "", - "resolved": "", + "history": "Geçmiş", + "resolved": "Çözüldü", "status": { - "triggered": "", - "ok": "" + "triggered": "Tetiklendi", + "ok": "Tamam" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel Sistem İstatistikleri", + "description": "CPU, bellek, disk, ağ ve Docker konteyner ölçümleri için zaman serisi grafikleri", "option": { "systemId": { - "label": "", - "description": "" + "label": "Sistem", + "description": "İstatistikleri gösterilecek Beszel sistemini seçin" }, "timePeriod": { - "label": "" + "label": "Zaman aralığı" }, "showCpu": { - "label": "" + "label": "CPU grafiğini göster" }, "showMemory": { - "label": "" + "label": "Bellek grafiğini göster" }, "showDisk": { - "label": "" + "label": "Disk grafiğini göster" }, "showDiskIO": { - "label": "" + "label": "Disk G/Ç grafiğini göster" }, "showNetwork": { - "label": "" + "label": "Ağ grafiğini göster" }, "showDockerCpu": { - "label": "" + "label": "Docker CPU grafiğini göster" }, "showDockerMemory": { - "label": "" + "label": "Docker bellek grafiğini göster" }, "showDockerNetwork": { - "label": "" + "label": "Docker ağ grafiğini göster" } }, - "selectSystem": "", + "selectSystem": "Sistem seçin", "empty": { - "noSystems": "" + "noSystems": "Sistem bulunamadı" }, "error": { - "internalServerError": "", - "liveConnectionFailed": "", - "switchToHistorical": "", - "systemNotFound": "" + "internalServerError": "Beszel'e bağlanılamadı. Entegrasyon ayarlarınızı kontrol edin.", + "liveConnectionFailed": "Canlı bağlantı başarısız oldu. Beszel örneğiniz gerçek zamanlı akışı desteklemiyor olabilir.", + "switchToHistorical": "Geçmiş görünümüne geç", + "systemNotFound": "Seçilen sistem bulunamadı. Farklı bir sistem seçin." }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU Kullanımı", + "subtitle": "Sistem genelindeki ortalama CPU kullanımı", + "series": "CPU" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "Bellek Kullanımı", + "subtitle": "Kaydedilen andaki kesin kullanım oranı", + "series": "Kullanılan", + "cache": "Önbellek/Tamponlar" }, "disk": { - "title": "", - "subtitle": "", - "series": "" + "title": "Disk Kullanımı", + "subtitle": "Dosya sistemine göre kullanım", + "series": "Kök" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "Disk G/Ç", + "subtitle": "Kök dosya sisteminin aktarım hızı", + "read": "Okuma", + "write": "Yazma" }, "storage": { - "title": "", - "subtitle": "", - "series": "" + "title": "Depolama", + "subtitle": "Dosya sistemi başına disk kullanımı", + "series": "Kullanılan" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Bant Genişliği", + "subtitle": "Genel ağ arayüzlerinin trafiği", + "sent": "Gönderilen", + "recv": "Alınan" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU Kullanımı", + "subtitle": "Konteynerlerin ortalama CPU kullanımı" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker Bellek Kullanımı", + "subtitle": "Docker konteynerlerinin bellek kullanımı" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker Ağ G/Ç", + "subtitle": "Docker konteynerlerinin ağ trafiği" } } } @@ -4498,9 +4545,9 @@ "text": "İstenen kaynak bulunamadı" }, "error": { - "title": "", - "text": "", - "digest": "" + "title": "Bu sayfa yüklenemedi", + "text": "Bu sayfa yüklenirken beklenmeyen bir hata oluştu. Gezinme menüsü hâlâ kullanılabilir; sayfayı yeniden yüklemeyi deneyin veya kenar çubuğundan başka bir bölüme geçin.", + "digest": "Hata başvurusu: {digest}" }, "navbar": { "items": { @@ -4508,7 +4555,7 @@ "boards": "Paneller", "apps": "Uygulamalar", "integrations": "Entegrasyonlar", - "customWidgets": "", + "customWidgets": "Özel Widget'lar", "searchEngies": "Arama Motorları", "medias": "Medyalar", "users": { @@ -4525,10 +4572,10 @@ "docker": "Docker", "kubernetes": "Kubernetes", "logs": "Günlükler", - "api": "API", + "api": "API ve MCP", "certificates": "Sertifikalar", "tasks": "Görevler", - "backup": "" + "backup": "Yedekleme" } }, "settings": "Ayarlar", @@ -4553,8 +4600,8 @@ "integration": "Entegrasyonlar", "app": "Uygulamalar", "group": "Gruplar", - "searchEngine": "Search engines", - "media": "Medias" + "searchEngine": "Arama motorları", + "media": "Medya" }, "statisticLabel": { "boards": "Paneller", @@ -4563,8 +4610,8 @@ "authorization": "Yetkilendirme" }, "heroBanner": { - "title": "Welcome back to your", - "subtitle": "{app} Board" + "title": "Tekrar hoş geldiniz", + "subtitle": "{app} Panosu" } }, "board": { @@ -4609,7 +4656,7 @@ "private": "Bu panel özeldir" }, "noResults": { - "title": "" + "title": "Henüz panel yok" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Haftanın ilk günü", "accessibility": "Erişilebilirlik", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Kurulum Turları", + "description": "Yönetim alanına veya panoya bir sonraki ziyaretinizde bunları tekrar görmek için kurulum turlarını sıfırlayın.", + "reset": "Kurulum turlarını sıfırla", "resetSuccess": { - "title": "", - "message": "" + "title": "Turlar sıfırlandı", + "message": "Kurulum turları bir sonraki ziyaretinizde tekrar gösterilecek" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Tamamlandı", + "notStarted": "Başlamadı" }, "name": { - "management": "", - "dashboard": "" + "management": "Yönetim", + "dashboard": "Panel" } } } @@ -4782,8 +4829,8 @@ "analytics": { "title": "Analiz", "general": { - "title": "Anonim analizler gönder", - "text": "Homarr, açık kaynaklı yazılım Umami'yi kullanarak anonimleştirilmiş analizler gönderecektir. Hiçbir zaman kişisel bilgi toplamaz ve bu nedenle tamamen GDPR ve CCPA uyumludur. Analizleri etkinleştirmenizi öneririz çünkü, açık kaynak yazılım ekibimizin sorunları daha hızlı belirlemesine ve birikmiş işlerimizi önceliklendirmesine yardımcı olmaktadır." + "title": "Homarr'ı geliştirmemize yardımcı olun", + "text": "Bu, kullanıcıların gerçekte neleri kullandığını anlamamıza ve zamanımızı nereye ayıracağımıza karar vermemize yardımcı olur. Kaç widget veya entegrasyona sahip olduğunuz, Homarr sürümünüz ve kullandığınız veritabanı gibi bilgileri görürüz. Hepsi bu; kişisel bilgi, URL, ad ya da sizi veya kurulumunuzu tanımlayabilecek hiçbir şey toplanmaz." } }, "crawlingAndIndexing": { @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "Öntanımlı Renk Düzeni", "options": { - "auto": "", + "auto": "Otomatik", "light": "Aydınlık", "dark": "Koyu" } @@ -4984,213 +5031,213 @@ } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "Yapay Zekâ / MCP", + "title": "Yapay Zekâ Entegrasyonu", + "subtitle": "Model Context Protocol (MCP) Sunucusu", + "description": "Yapay zekâ asistanlarını Homarr örneğinize bağlayın ve tüm homelab ortamınızı doğal dille yönetin. Overseerr'da medya arayıp talep edin, Docker konteynerlerini yönetin, Pi-hole'u açıp kapatın, sunucu sağlığını denetleyin, Home Assistant cihazlarını kontrol edin ve daha fazlasını doğrudan yapay zekâ asistanınızdan gerçekleştirin.", + "noApiKey": "MCP sunucusunda kimlik doğrulamak için bir API anahtarı gerekir.", + "createApiKeyButton": "API Anahtarı Oluştur", "endpoint": { - "title": "" + "title": "MCP Uç Noktası" }, "authentication": { - "title": "", - "intro": "", + "title": "Kimlik Doğrulama", + "intro": "MCP sunucunuzda API anahtarı veya OAuth kullanarak kimlik doğrulayabilirsiniz. Her iki yöntem de aynı erişim düzeyini sağlar.", "apiKey": { - "title": "", - "description": "" + "title": "API Anahtarı (manuel)", + "description": "MCP istemci yapılandırmasında ApiKey üst bilgisini tam API anahtarınızla gönderin." }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (tarayıcıyla giriş)", + "description": "OAuth destekleyen istemciler (Claude Code, opencode veya Cursor gibi) bir tarayıcı penceresi açarak kimlik doğrulayabilir. İstemcinizde auth komutunu çalıştırın, tarayıcıda Homarr'a giriş yapın; bağlantı kurulur ve otomatik olarak bir API anahtarı oluşturulur.", + "hint": "OAuth tokenları Kimlik Doğrulama sekmesinde normal API anahtarları olarak görünür. Bunları istediğiniz zaman iptal edebilirsiniz." }, - "permissions": "" + "permissions": "API anahtarı, yapay zekânın kullanabileceği izinleri belirler; yapay zekâ anahtar sahibiyle aynı erişim düzeyinde çalışır." }, "clientConfig": { - "title": "", + "title": "İstemci Yapılandırması", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "Önerilen", + "title": "Akış Destekli HTTP", + "worksWith": "Şunlarla çalışır: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Claude Code", + "addToConfig": "MCP istemci yapılandırma dosyanıza ekleyin:", + "cursor": "{name}: projenizdeki veya genel ayarlardaki {file}", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} veya {command} komutunu kullanın", + "vsCodeCopilot": "{name}: çalışma alanı ayarlarındaki {file}", + "replaceHint": "Yer tutucuyu, oluştururken aldığınız API anahtarıyla değiştirin." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (mcp-remote köprüsü üzerinden eski istemciler)", + "description": "Yalnızca stdio aktarımını destekleyen istemciler içindir. Yerel olarak {dependency} (Node.js) kurulu olmalıdır:" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "Bağlantınızı Test Edin", + "description": "Uç noktanın erişilebilir ve API anahtarınızın çalışır olduğunu doğrulamak için bunu terminalinizde çalıştırın:", + "hint": "Başarılı bir yanıt MCP sunucusunun yeteneklerini döndürür. Hata görürseniz ipuçları için JSON yanıtını inceleyin." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "Kullanılabilir Araçlar", + "description": "{count} araç kullanılabilir. Araçları ve açıklamalarını görmek için bir kategoriyi genişletin.", + "columnType": "Tür", + "columnName": "Araç", + "columnDescription": "Açıklama" }, "troubleshooting": { - "title": "", + "title": "Sorun Giderme", "missingHeader": { - "title": "", - "description": "" + "title": "“ApiKey üst bilgisi eksik”", + "description": "İstemciniz {header} üst bilgisini göndermiyor. MCP yapılandırmanızdaki {section} bölümünün doğru olduğunu doğrulayın. Bazı istemcilerin yapılandırma değişikliklerinden sonra yeniden başlatılması gerekir." }, "invalidFormat": { - "title": "", - "description": "" + "title": "“Geçersiz ApiKey biçimi”", + "description": "API anahtarının yalnızca bir bölümünü değil tamamını kopyaladığınızdan emin olun." }, "invalidKey": { - "title": "", - "description": "" + "title": "“Geçersiz API anahtarı”", + "description": "Anahtar kimliği bulunamadı veya token yanlış. API anahtarları oluşturulduklarında yalnızca bir kez görüntülenebilir. Anahtarı kaybettiyseniz eskisini silip yenisini oluşturun." }, "connectionRefused": { - "title": "", - "description": "" + "title": "Bağlantı reddedildi / zaman aşımı", + "description": "URL'nin yapay zekâ istemcinizden erişilebilir olduğundan emin olun. Homarr ters proxy arkasında veya Docker'da çalışıyorsa {localhost} yerine harici URL'yi kullanın. Portun doğru olduğunu doğrulayın (Docker için varsayılan: 7575)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "Araçlar görünmüyor", + "description": "Bazı araçlar belirli entegrasyonların yapılandırılmasını gerektirir (ör. Docker, Overseerr). Araç listesi Homarr örneğinizde kullanılabilir olanlara bağlıdır." } }, - "copy": "", + "copy": "Kopyala", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "Tek Tıkla Kur", + "subtitle": "OAuth kullanır; ilk kullanımda tarayıcınızda kimlik doğrulayın", + "vsCode": "VS Code'a Kur", + "cursor": "Cursor'a Kur", + "copyUrl": "MCP URL'sini Kopyala", + "copied": "Kopyalandı!", + "copyHint": "ChatGPT, Claude Code veya herhangi bir MCP istemcisi için", + "manualConfig": "Manuel Yapılandırma" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Tam Veritabanı Yedekleme", + "metaTitle": "Yedekleme ve Geri Yükleme", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Veritabanını Dışa Aktar", + "description": "Tüm ayarlar, kullanıcılar, panolar ve şifrelenmiş entegrasyon gizli anahtarları dahil olmak üzere SQLite veritabanınızın tam yedeklemesini indirin. Yedekleme, şifreleme anahtarı ve meta verilerle birlikte bir ZIP dosyası olarak paketlenir.", + "button": "Yedeği İndir", + "error": "Dışa aktarma başarısız oldu", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Hassas veri dışa aktarımı", + "warningTitle": "Bu dışa aktarma tüm veritabanınızı içerir.", + "warningBody": "Yedekleme, tüm kullanıcıları, entegrasyon gizli anahtarlarını (şifrelenmiş), API anahtarlarını, panel yapılandırmalarını ve uygulama verilerini içerir. Dışa aktarılan dosyayı güvenli bir şekilde saklayın ve paylaşmayın.", + "typePrompt": "Devam etmek için \"{phrase}\" yazın", + "submit": "Veritabanını Dışa Aktar", + "cancel": "İptal" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Veritabanını Geri Yükle", + "description": "Veritabanınızı geri yüklemek için daha önce dışa aktarılmış bir yedek ZIP dosyası yükleyin. Bu, tüm veritabanınızı değiştirir. Yedekleme farklı bir şifreleme anahtarıyla oluşturulmuşsa, gizli anahtarlar otomatik olarak yeniden şifrelenir.", + "warning": "Bir yedeklemeyi geri yüklemek, mevcut veritabanınızı tamamen değiştirir ve uygulamayı yeniden başlatır. Bu eylem geri alınamaz.", "dropzone": { - "title": "", - "description": "" + "title": "Yedekleme ZIP dosyanızı buraya bırakın veya göz atmak için tıklayın", + "description": "Yalnızca bir Homarr SQLite yedeklemesinden gelen .zip dosyaları kabul edilir" }, - "changeFile": "", - "button": "", + "changeFile": "Dosyayı değiştir", + "button": "Veritabanını Geri Yükle", "success": { - "title": "", - "message": "" + "title": "Geri Yükleme Tamamlandı", + "message": "Veritabanı başarıyla geri yüklendi. Uygulama yeniden başlatılıyor..." }, - "error": "" + "error": "İçe aktarma başarısız oldu" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Yedekleme İçeriği", + "exported": "Dışa aktarıldı {date}", + "loading": "Yedekleme dosyası analiz ediliyor...", + "errorTitle": "Önizleme Hatası", + "entity": "Varlık", + "count": "Sayı", + "boards": "Paneller", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Paneller", + "user": "Kullanıcılar", + "app": "Uygulamalar", + "integration": "Entegrasyonlar", + "item": "Widget'lar", + "media": "Medya", + "search_engine": "Arama Motorları" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Yedekleme dosyası analiz edilemedi", + "invalidMissingMetadata": "Geçersiz yedekleme: metadata.json eksik", + "invalidMissingDb": "Geçersiz yedekleme: db.sqlite eksik" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Yedekleme ZIP dosyanızı buraya bırakın", + "description": "Homarr SQLite yedeklemesinden .zip dosyalarını kabul eder (maks 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Yedekleme analiz ediliyor...", + "changeFile": "Dosyayı değiştir", + "continueToRestore": "Geri yüklemeye devam et", + "tryAgain": "Tekrar dene", + "analysisError": "Analiz Hatası", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Yedekleme İçeriği", + "exported": "Dışa aktarıldı {date}", + "entity": "Varlık", + "count": "Sayı", + "boards": "Paneller", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Paneller", + "user": "Kullanıcılar", + "app": "Uygulamalar", + "integration": "Entegrasyonlar", + "item": "Widget'lar", + "media": "Medya", + "search_engine": "Arama Motorları" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} geçiş uygulandı", + "migrationsAppliedPlural": "{count} geçiş uygulandı", + "migrationsOlderVersion": "Bu yedekleme daha eski bir Homarr sürümündendi. Güncellemek için {count} şema geçişi uygulandı.", + "migrationsOlderVersionPlural": "Bu yedekleme daha eski bir Homarr sürümündendi. Güncellemek için {count} şema geçişi uygulandı.", + "migrationsUpToDate": "Veritabanı şeması güncel ({count} geçiş uygulandı)", + "upToDate": "Güncel", + "migrationsPending": "{count} bekleyen" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Geçişler uygulanıyor ({current}/{total})", + "migrationLabel": "Geçiş {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Yıkıcı eylem", + "warningTitle": "Bu, tüm veritabanınızı kalıcı olarak değiştirir.", + "warningBody": "Tüm mevcut panolar, kullanıcılar, uygulamalar, entegrasyonlar, ayarlar ve oturumlar kaybolacaktır. Bu eylem geri alınamaz. Uygulama, geri yüklemeden sonra yeniden başlatılacaktır.", + "typePrompt": "Devam etmek için \"{phrase}\" yazın", + "cancel": "İptal", + "submit": "Veritabanını Geri Yükle" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Veritabanı geri yükleniyor...", + "extracting": "Yedekleme arşivi çıkarılıyor", + "migrating": "Veritabanı geçişleri uygulanıyor", + "encrypting": "Entegrasyon gizli anahtarları yeniden şifreleniyor", + "swapping": "Veritabanı dosyası değiştiriliyor", + "restarting": "Sunucu yeniden başlatılıyor" }, "complete": { - "title": "", - "message": "" + "title": "Geri Yükleme Tamamlandı", + "message": "Veritabanı başarıyla geri yüklendi. Sunucu yeniden başlatılıyor — lütfen birkaç saniye içinde sayfayı yenileyin." }, "failed": { - "title": "" + "title": "Geri Yükleme Başarısız Oldu" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Geçersiz yedekleme: metadata.json eksik", + "invalidMissingDb": "Geçersiz yedekleme: db.sqlite eksik", + "analyzeError": "Yedekleme analiz edilemedi" } } }, @@ -5207,8 +5254,8 @@ "subtitle": "Birçok kişi Homarr'ın {count} dile çevrilmesine katkı sağlıyor" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "Sponsorlar", + "subtitle": "{count} projeyi finansal olarak destekliyor" }, "libraries": { "title": "Kütüphaneler", @@ -5238,13 +5285,13 @@ "table": { "updated": "{when} Güncellendi", "refresh": { - "lastUpdated": "" + "lastUpdated": "Son yenileme: {when}" }, "search": "{count} konteyner içinde ara", "selected": "{selectCount} / {totalCount} konteyner seçildi", "footer": "Toplam {count} konteyner", - "totalCpu": "", - "totalMemory": "" + "totalCpu": "Toplam CPU: %{cpu}", + "totalMemory": "Toplam Bellek: {memory}" }, "field": { "name": { @@ -5277,15 +5324,15 @@ "label": "Bağlantı noktaları" }, "host": { - "label": "" + "label": "Ana Bilgisayar" } }, "action": { "title": "Eylemler", "logs": { - "label": "", + "label": "Günlükleri görüntüle", "page": { - "title": "" + "title": "{name} günlükleri" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Kaldır", + "confirm": "Kalıcı olarak kaldırmak için yeniden tıklayın", "notification": { "success": { "title": "Konteynerler kaldırıldı", @@ -5372,7 +5420,7 @@ }, "error": { "internalServerError": "Docker konteynerlerları getirilemedi", - "noColumns": "" + "noColumns": "Widget ayarlarında en az bir sütun seçin" } }, "kubernetes": { @@ -5391,7 +5439,7 @@ }, "resources": { "title": "Kaynaklar", - "nodes": "Nodes", + "nodes": "Düğümler", "namespaces": "İsim Alanları", "ingresses": "Ingress'ler", "services": "Hizmetler", @@ -5681,14 +5729,14 @@ } }, "custom-widgets": { - "label": "", + "label": "Özel widget'lar", "new": { - "label": "" + "label": "Yeni" }, "edit": { - "label": "", + "label": "Düzenle", "flow": { - "label": "" + "label": "Akış" } } }, @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "Günlükler" } }, "kubernetes": { @@ -5778,7 +5826,7 @@ "children": { "action": { "open": { - "label": "Uygulama Url'sini aç" + "label": "Uygulama URL'sini aç" }, "edit": { "label": "Uygulamayı düzenle" @@ -5826,7 +5874,7 @@ "title": "Genel komutlar", "option": { "colorScheme": { - "auto": "", + "auto": "Görünüm modunu değiştir", "light": "Aydınlık Temaya Geç", "dark": "Koyu Temaya Geç" }, @@ -5867,146 +5915,146 @@ } }, "preferences": { - "title": "", + "title": "Tercihler", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Değiştirmek için bir tercih seçin", + "backHint": "Geri dönmek için Backspace tuşuna basın veya geri düğmesini kullanın", + "backAction": "Geri dön" } }, "notification": { "error": { - "message": "" + "message": "Tercih güncellenemiyor" } }, "option": { "preferences": { - "label": "" + "label": "Tercihleri aç" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Etkin", + "disabled": "Pasif" }, "board": { - "none": "", - "unavailable": "" + "none": "Hiçbiri", + "unavailable": "Şu anda seçili (kullanılamıyor)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Hiçbiri", + "unavailable": "Şu anda seçili (kullanılamıyor)" }, "colorScheme": { - "label": "", + "label": "Renk şeması", "children": { "detail": { - "title": "" + "title": "Renk şemanızı seçin" } } }, "locale": { - "label": "", + "label": "Dil", "children": { "detail": { - "title": "" + "title": "Tercih ettiğiniz dili seçin" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Öntanımlı arama motoru", "children": { "detail": { - "title": "" + "title": "Öntanımlı arama motorunuzu seçin" } } }, "openSearchInNewTab": { - "label": "", + "label": "Arama sonuçlarını yeni sekmede aç", "children": { "detail": { - "title": "" + "title": "Arama sonuçlarını yeni sekmede aç" } } }, "ddgBangs": { - "label": "", + "label": "DuckDuckGo bang'lerini etkinleştir", "children": { "detail": { - "title": "" + "title": "DuckDuckGo bang'lerini etkinleştir" } } }, "firstDayOfWeek": { - "label": "", + "label": "Haftanın ilk günü", "children": { "detail": { - "title": "" + "title": "Haftanın ilk gününü seçin" } } }, "homeBoardId": { - "label": "", + "label": "Ana Panel", "children": { "detail": { - "title": "" + "title": "Ana panelinizi seçin" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Mobil ana panel", "children": { "detail": { - "title": "" + "title": "Mobil ana panelinizi seçin" } } }, "pingIconsEnabled": { - "label": "", + "label": "Pingler için simge kullan", "children": { "detail": { - "title": "" + "title": "Pingler için simge kullan" } } }, "enableRightClickOnWidgets": { - "label": "", + "label": "Widget'lara sağ tıklamayı etkinleştir", "children": { "detail": { - "title": "" + "title": "Widget'lara sağ tıklamayı etkinleştir" } } }, "fullPreferencesPage": { - "label": "" + "label": "Tam tercihler sayfasını aç" } } } } }, "media": { - "help": "", + "help": "Talep etmek için film veya dizi ara", "requestMovie": "Filmi Talep Et", "requestSeries": "Diziyi Talep Et", "openIn": "{kind} üzerinde göster", "group": { - "title": "" + "title": "Filmler ve diziler" }, "action": { "search": { - "label": "", - "description": "", + "label": "Film veya dizi ara", + "description": "Medya talep entegrasyonlarınızı aramak için yazmaya başlayın", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Medya aramasını etkinleştirmek için bir Overseerr, Jellyseerr veya Seerr entegrasyonu ekleyin.", + "scoped": "Bu widget'ın erişilebilir bir medya talep entegrasyonu yok." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Mevcut", + "partiallyAvailable": "Kısmen mevcut", + "processing": "İşleniyor", + "requested": "Talep edildi", + "pending": "Talep edildi" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "Arama Motorları", - "tipDdgBangs": "", + "tipDdgBangs": "İpucu: Burada DuckDuckGo bang'lerini de kullanabilirsiniz, örn. !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "\"{query}\" ifadesini {label} ile ara", + "pressEnterToOpen": "Açmak için Enter'a basın", + "engineSelected": "{label} seçildi (!{bang})", + "typeQueryToContinue": "Devam etmek için arama sorgunuzu yazın", + "emptyBangHint": "Bir bang yazın, örn. !yt, ardından seçmek için Boşluk tuşuna basın" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "Sezon", "episodes": "Bölüm", - "status": "" + "status": "Durum" }, "status": { - "requested": "" + "requested": "Talep edildi" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Belgeleri oku", + "next": "İleri", + "prev": "Geri", + "done": "Tamam", + "skip": "Turu atla", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Homarr'a Hoş Geldiniz!", + "description": "Burası sizin kontrol merkeziniz. Buradan panoları, uygulamaları, entegrasyonları, kullanıcıları ve sunucu ayarlarını yönetirsiniz. Her bölümün turuna çıkalım." }, "boardsList": { - "title": "", - "description": "" + "title": "Panelleriniz", + "description": "Tüm panolarınız burada. Her panonun kendi düzeni, arka planı ve erişim ayarları vardır. Her birini kimin oluşturduğunu ve herkese açık mı yoksa özel mi olduğunu görebilirsiniz." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Panel Oluştur", + "description": "Yeni bir panel oluşturmak veya önceki bir Homarr kurulumundan içe aktarmak için buraya tıklayın. Her panel, paylaşabileceğiniz kendi URL'sini alır." }, "appsList": { - "title": "", - "description": "" + "title": "Uygulamalarınız", + "description": "Bunlar, eklediğiniz tüm uygulamalardır — kendi barındırdığınız hizmetlere bağlantılar. Her uygulamanın bir simgesi, isteğe bağlı sağlık kontrolü ve panoda bir durum rozeti vardır." }, "appsCreate": { - "title": "", - "description": "" + "title": "Uygulama Ekle", + "description": "Buraya yeni bir hizmet kaydedin. Bir ad, URL ve simge verin — canlı durum izleme ile panolarınızda bir kutucuk olarak görünecektir." }, "integrationsList": { - "title": "", - "description": "" + "title": "Entegrasyonlarınız", + "description": "Bunlar Homarr'a bağlı hizmetlerdir — Sonarr, Radarr, Plex, Jellyfin ve 50'den fazlası. Tüm kimlik bilgileri depolanırken şifrelenir." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Entegrasyon Ekle", + "description": "Buraya yeni bir hizmet bağlayın. Türü seçin, URL ve API anahtarını girin — Homarr kaydetmeden önce bağlantıyı doğrular." }, "usersList": { - "title": "", - "description": "" + "title": "Kullanıcılarınız", + "description": "Erişimi olan herkesi görün. Kullanıcıları gruplara ayırın ve her panoyu kimlerin görüntüleyebileceğini veya düzenleyebileceğini kontrol edin." }, "usersCreate": { - "title": "", - "description": "" + "title": "Kullanıcı Oluştur", + "description": "Buraya yeni bir kullanıcı hesabı ekleyin. Kolay katılım için davet bağlantılarını da kullanabilirsiniz. Tur bu kadar — artık hazırsınız!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Bu sizin paneliniz", + "description": "Uygulamaları ve widget'ları düzenlediğiniz sürükle-bırak bir panel. Uygulamalar, panolar ve eylemler arasında arama yapmak için istediğiniz zaman Ctrl+K tuşlarına basın." }, "editMode": { - "title": "", - "description": "" + "title": "Düzenleme Modu", + "description": "Düzenleme moduna girmek için buraya tıklayın. Ardından widget'lar, uygulamalar ve bölümler ekleyebilirsiniz — yeniden konumlandırmak için sürükleyin, köşe tutacağı ile yeniden boyutlandırın. Değişikliklerinizi kaydetmek için tekrar tıklayın." }, "settings": { - "title": "", - "description": "" + "title": "Panel Ayarları", + "description": "Bu panelin adını, sütunlarını, arka planını, renklerini ve kimlerin erişebileceğini değiştirin. Her panel herkese açık veya özel olabilir." }, "switcher": { - "title": "", - "description": "" + "title": "Panoları Değiştir", + "description": "Panolar arasında geçiş yapın. Farklı amaçlar için ayrı panolar oluşturun — medya, ağ, kullanıcı başına veya istediğiniz herhangi bir şey." }, "userMenu": { - "title": "", - "description": "" + "title": "Profiliniz", + "description": "Renk şemanızı, dilinizi, ana panelinizi ve tercihlerinizi değiştirin. Buradan yönetim alanına da geçebilirsiniz." } } } diff --git a/packages/translation/src/lang/uk.json b/packages/translation/src/lang/uk.json index 18515569e..fd87688e4 100644 --- a/packages/translation/src/lang/uk.json +++ b/packages/translation/src/lang/uk.json @@ -102,9 +102,9 @@ "skip": "Пропустити поки що" }, "configure": { - "progress": "{поточний} з {загальний}", + "progress": "{current} з {total}", "skip": "Пропустити цю інтеграцію", - "finishing": "Налаштування панелі інструментів..", + "finishing": "Налаштування панелі інструментів...", "error": { "title": "Не вдалося налаштувати", "message": "Під час налаштування вашої інформаційної панелі сталася помилка. Спробуйте ще раз." @@ -116,7 +116,7 @@ }, "urlTemplate": { "label": "Базовий URL", - "placeholder": "homelab.local чи 192.168.1.1", + "placeholder": "homelab.local або 192.168.1.1", "hint": "Введіть свій базовий домен або IP-адресу для автоматичного заповнення URL-адрес інтеграції", "warning": "Якщо встановити базову URL-адресу зараз, усі URL-адреси інтеграції будуть автоматично заповнені, що заощадить ваш час під час налаштування", "preview": "напр. {example}", @@ -199,7 +199,7 @@ "label": "Використовувати значки для ping" }, "enableRightClickOnWidgets": { - "label": "", + "label": "Увімкнути клацанням правою кнопкою миші на віджетах", "description": "Показувати контекстне меню Homarr при клацанні правою кнопкою миші на віджеті. Вимкніть, щоб використовувати меню браузера за замовчуванням (наприклад, «Відкрити посилання в новій вкладці»)." }, "defaultSearchEngine": { @@ -692,205 +692,205 @@ "page": { "list": { "title": "Власні віджети", - "noResults": "", - "loading": "" + "noResults": "Поки що немає власних віджетів. Створіть свій перший!", + "loading": "Завантаження..." }, "create": { - "title": "", - "subtitle": "" + "title": "Створити власний віджет", + "subtitle": "Визначте URL-адресу API, автентифікацію та спосіб показу даних відповіді." }, "edit": { - "title": "" + "title": "Редагувати власний віджет" } }, "action": { - "create": "", - "import": "", - "save": "", - "delete": "", - "deleteConfirm": "", - "export": "", - "addMapping": "", - "addColumn": "", - "edit": "", - "removeMapping": "", - "removeColumn": "", - "addItem": "", - "removeItem": "", - "addBar": "", - "duplicate": "", - "copyAiPrompt": "", - "enable": "", - "disable": "", - "menu": "" + "create": "Створити", + "import": "Імпорт", + "save": "Зберегти", + "delete": "Видалити власний віджет", + "deleteConfirm": "Ви впевнені, що хочете видалити \"{name}\"? Цю дію неможливо скасувати.", + "export": "Експорт", + "addMapping": "Додати зіставлення", + "addColumn": "Додати стовпець", + "edit": "Редагувати", + "removeMapping": "Видалити зіставлення", + "removeColumn": "Видалити стовпець", + "addItem": "Додати елемент", + "removeItem": "Видалити елемент", + "addBar": "Додати бар", + "duplicate": "Дублікат", + "copyAiPrompt": "Копіювати запит AI", + "enable": "Увімкнути", + "disable": "Вимкнути", + "menu": "Дії" }, "field": { - "name": "", - "description": "", - "iconUrl": "", - "url": "", - "authType": "", - "headerName": "", - "method": "", - "requestBody": "", - "displayType": "", - "jsonPath": "", - "jsonPathHint": "", - "label": "", - "unit": "", - "mappings": "", - "tablePath": "", - "tablePathHint": "", - "columns": "", - "header": "", - "items": "", - "gridColumns": "", - "cardStyle": "", - "bars": "", - "valuePath": "", - "maxPath": "", - "showPercentage": "", - "barSize": "", - "goodValues": "", - "dotSize": "", - "valueSize": "", - "labelPosition": "", - "kvLayout": "", - "striped": "", - "compact": "", - "maxHeight": "", - "color": "", - "buttonLabel": "", - "buttonColor": "", - "confirmText": "", - "confirmTextHint": "", - "successMessage": "", - "successMessageHint": "", - "enabled": "", + "name": "Назва", + "description": "Опис", + "iconUrl": "URL іконки", + "url": "URL-адреса", + "authType": "Тип авторизації", + "headerName": "Назва параметра заголовок/запиту", + "method": "Метод", + "requestBody": "Текст запиту", + "displayType": "Тип для показу", + "jsonPath": "Шлях до JSON", + "jsonPathHint": "Використовуйте синтаксис JSONPath для вилучення значень, наприклад, $.data.temperature або $.items[0].name", + "label": "Мітка", + "unit": "Одиниця", + "mappings": "Зіставлення", + "tablePath": "Шлях масиву JSON", + "tablePathHint": "Шлях до масиву у відповідь, наприклад, $.data.items", + "columns": "Стовпці", + "header": "Заголовок", + "items": "Елементи", + "gridColumns": "Стовпці сітки", + "cardStyle": "Стиль картки", + "bars": "Бари", + "valuePath": "Значення JSON шлях", + "maxPath": "Макс. значення JSON шляху", + "showPercentage": "Показувати відсоток", + "barSize": "Розмір панелі", + "goodValues": "Хороші значення (розділені комами)", + "dotSize": "Розмір точки", + "valueSize": "Розмір значення", + "labelPosition": "Позиція мітки", + "kvLayout": "Макет", + "striped": "Смугасті рядки", + "compact": "Компактний режим", + "maxHeight": "Макс висота (пікс.)", + "color": "Колір", + "buttonLabel": "Підпис кнопки", + "buttonColor": "Колір кнопки", + "confirmText": "Текст підтвердження", + "confirmTextHint": "Якщо встановлено, перед виконанням запиту з’явиться діалогове вікно підтвердження", + "successMessage": "Повідомлення про успіх", + "successMessageHint": "Повідомлення яке відображається після успішного виконання", + "enabled": "Увімкнено", "template": { - "label": "", - "description": "" + "label": "Шаблон JSX", + "description": "Шаблон Mantine JSX. Доступ до полів відповіді API через прив'язки даних (наприклад, data.name). Використовуйте лише компоненти з білого списку. Заборонено: constructor, __proto__, eval, Function, window, document." } }, "placeholder": { - "exampleLabel": "", - "exampleLabelShort": "", - "exampleHeader": "", - "exampleUnit": "", - "iconUrl": "", - "url": "", - "headerName": "", - "jsonPath": "", - "tablePath": "", - "columnJsonPath": "", - "valuePath": "", - "maxPath": "", - "goodValues": "", - "color": "" + "exampleLabel": "Температура ЦП", + "exampleLabelShort": "Темп процесора", + "exampleHeader": "Назва", + "exampleUnit": "°C", + "iconUrl": "https://...", + "url": "https://api.example.com/api/v1/status", + "headerName": "X-API-Key", + "jsonPath": "$.data.value", + "tablePath": "$.data.items", + "columnJsonPath": "$.name", + "valuePath": "$.data.used", + "maxPath": "$.data.total", + "goodValues": "онлайн, правда, вгору", + "color": "синій" }, "cardStyleOption": { - "filled": "", - "outline": "", - "subtle": "" + "filled": "Заповнений", + "outline": "Контур", + "subtle": "Тонкий" }, "layoutOption": { - "list": "", - "grid": "" + "list": "Список", + "grid": "Сітка" }, "sizeOption": { - "sm": "", - "md": "", - "lg": "", - "xl": "" + "sm": "Малий", + "md": "Середній", + "lg": "Великий", + "xl": "Дуже великий" }, "labelPositionOption": { - "above": "", - "below": "" + "above": "Вище", + "below": "Нижче" }, "fieldset": { - "general": "", - "connection": "", - "display": "" + "general": "Загальне", + "connection": "API підключення", + "display": "Конфігурації дисплея" }, "displayTypeDescription": { - "singleValue": "", - "keyValue": "", - "table": "", + "singleValue": "Показати одне витягнуте значення з міткою та одиницею вимірювання", + "keyValue": "Показати кілька позначених значень поруч", + "table": "Показати рядки даних у форматі таблиці", "statGrid": "Кольорові картки статистики в сітці — як-от віджети Pi-Hole або Speedtest", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "progressBars": "Індикатори виконання, що показують використання або завершення — для диска, пам'яті, квот", + "statusIndicator": "Кольорові крапки стану показують онлайн/оффлайн або охорони здоров'я", + "countGrid": "Компактне число + лічильники міток у вигляді сітки", + "raw": "Гарно надрукований JSON-вивід для налагодження", + "actionButton": "Кнопка яка виконує запит при натисканні", + "customJsx": "Користувацький макет JSX з пов'язування повним API даних з білого списку" }, "method": { - "GET": "", - "POST": "", - "PUT": "", - "DELETE": "", - "PATCH": "" + "GET": "ОТРИМАТИ", + "POST": "СТВОРИТИ", + "PUT": "Розміщення", + "DELETE": "ВИДАЛИТИ", + "PATCH": "ПАТЧ" }, "authType": { - "none": "", - "bearer": "", - "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "none": "Немає", + "bearer": "Пред'явити токен", + "basic": "Базова авторизація", + "apiKeyHeader": "Ключ API (Заголовок)", + "apiKeyQuery": "Ключ API (запит)" }, "displayType": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "Одиночні Значення", + "keyValue": "Значення ключа", + "table": "Таблиця", + "statGrid": "Статистична сітка", + "progressBars": "Індикатори прогресу", + "statusIndicator": "Індикатор стану", + "countGrid": "Кількість сіток", + "raw": "Необроблений JSON", + "actionButton": "Кнопка дії", + "customJsx": "Користувацький JSX" }, "secret": { - "apiKey": "", - "username": "", - "password": "", - "savedPlaceholder": "" + "apiKey": "Ключ API / Токен", + "username": "Ім'я користувача", + "password": "Пароль", + "savedPlaceholder": "• • • • • • (збережено, залиште порожнім, щоб зберегти)" }, "preview": { - "title": "", - "test": "", - "hint": "", - "rawResponse": "" + "title": "Попередній перегляд", + "test": "Перевірка", + "hint": "Натисніть Тест, щоб переглянути відповідь API з поточною конфігурацією.", + "rawResponse": "Необроблена відповідь JSON" }, "notification": { - "created": "", - "updated": "", - "deleted": "", + "created": "Віджет \"{name}\" успішно створено.", + "updated": "Віджет \"{name}\" успішно оновлено.", + "deleted": "Віджет \"{name}\" видалено.", "imported": "Віджет успішно імпортовано.", - "aiPromptCopied": "", - "aiPromptDescription": "", - "aiPromptCopy": "", - "aiPromptNoResponse": "", - "aiPromptCopyError": "", - "createError": "", - "updateError": "", - "importError": "", - "exportError": "", - "duplicated": "", - "duplicateError": "", + "aiPromptCopied": "Запит ШІ скопійовано до буферу обміну", + "aiPromptDescription": "Скопіюйте запит на вставку в будь-який AI чатбот (ChatGPT, Claude, Gemini ...). Вона включає в себе повну схему віджетів і вашу API відповідь, щоб ШІ могла генерувати конфігурацію AI для вашого коректного імпортування.", + "aiPromptCopy": "Скопіювати в буфер обміну", + "aiPromptNoResponse": "Порада: Спочатку запустіть тест, щоб включити відповідь API в командний рядок для отримання кращих результатів.", + "aiPromptCopyError": "Не вдалося скопіювати запит до буфера обміну. Можливо, ваш браузер не підтримує цю функцію.", + "createError": "Не вдалося створити віджет. Перевірте кінцеву точку API.", + "updateError": "Неможливо оновити віджет. Зміни не збережено.", + "importError": "Неможливо імпортувати віджет. Переконайтеся, що файл є допустимим експортом користувацьких віджетів JSON.", + "exportError": "Не вдалося експортувати віджет.", + "duplicated": "Віджет \"{name}\" продубльовано.", + "duplicateError": "Не вдалося продублювати віджет.", "toggleError": "Не вдалося змінити стан віджету.", - "deleteError": "", - "previewError": "", + "deleteError": "Не вдалося видалити віджет.", + "previewError": "Не вдалося отримати попередній перегляд. Перевірте URL-адресу та повторіть спробу.", "executed": "Дію успішно виконано.", - "executeError": "" + "executeError": "Дію не виконано: {error}" }, "table": { - "name": "", - "url": "", - "display": "" + "name": "Назва", + "url": "URL", + "display": "Показати" }, "widget": { - "disabled": "" + "disabled": "Цей віджет вимкнено" } }, "integration": { @@ -917,14 +917,14 @@ "app": { "option": { "existing": { - "title": "", - "label": "" + "title": "Наявний", + "label": "Виберіть наявний застосунок" }, "new": { - "title": "", + "title": "Новий", "url": { - "label": "", - "description": "" + "label": "URL-адреса додатку", + "description": "URL-адреса додатку відкриється при доступі до панелі керування" } } } @@ -944,9 +944,9 @@ }, "app": { "action": { - "add": "", - "remove": "", - "select": "" + "add": "Прив'язати програму", + "remove": "Відв'язати", + "select": "Виберіть додаток для посилання" } } }, @@ -970,64 +970,64 @@ "label": "Ім’я" }, "url": { - "label": "" + "label": "URL-адреса" }, "attemptSearchEngineCreation": { "label": "Створення пошукових систем", - "description": "" + "description": "Інтеграцію \"{kind}\" можна використовувати з пошуковими системами. Позначте цей пункт, щоб автоматично налаштувати пошукову систему." }, "app": { - "sectionTitle": "" + "sectionTitle": "Зв'язаний застосунок" }, "createApp": { - "label": "", - "description": "" + "label": "Створити застосунок", + "description": "Створіть застосунок з такою ж назвою та піктограмою, як і інтеграція. Залиште поле введення нижче порожнім, щоб створити застосунок з URL-адресою інтеграції." }, "appHref": { - "placeholder": "" + "placeholder": "Власний URL додатку" }, "apiKeySettings": { - "label": "" + "label": "Отримати API ключ" } }, "action": { "create": "Нова інтеграція" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "Віджети {count}", + "noWidgets": "Без віджетів", + "detected": "Виявлено через Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "dnsHole": "ДНС", + "mediaService": "Медіа", + "calendar": "Календар", + "mediaSearch": "Пошук", + "mediaRelease": "Версії", + "mediaRequest": "Запити", + "downloadClient": "Завантаження", + "usenet": "Юзенет", + "torrent": "Торент", + "miscellaneous": "Різне", + "smartHomeServer": "Розумний Будинок", + "indexerManager": "Індексатор", + "healthMonitoring": "Здоров'я", + "search": "Пошук", + "mediaTranscoding": "Транскодування", + "networkController": "Мережа", + "releasesProvider": "Версії", + "notifications": "Сповіщення", + "firewall": "Брандмауер", + "timetable": "Розклад", + "photoService": "Фото", + "documents": "Документи", + "notes": "Нотатки", + "mediaMonitoring": "Моніторинг", + "speedtest": "Тест швидкості", + "analytics": "Аналітика", "vpn": "VPN", "mediaLibrary": "Медіа бібліотека", - "uptimeMonitoring": "" + "uptimeMonitoring": "Моніторинг безперебійної роботи" }, "testConnection": { "action": { @@ -1037,125 +1037,125 @@ "error": { "common": { "cause": { - "title": "" + "title": "Причини з детальною інформацією" } }, "unknown": { - "title": "", - "description": "" + "title": "Невідома помилка", + "description": "Сталася невідома помилка, відкрийте причину нижче, щоб побачити більше деталей" }, "parse": { - "title": "", - "description": "" + "title": "Синтаксична помилка", + "description": "Не вдалося проаналізувати відповідь. Перевірте, чи URL-адреса вказує на основний URL сервісу." }, "authorization": { - "title": "", - "description": "" + "title": "Помилка авторизації", + "description": "Запит не авторизовано. Перевірте правильність облікових даних та їх налаштування з достатніми правами." }, "statusCode": { - "title": "", - "description": "", - "otherDescription": "", + "title": "Помилка відповіді", + "description": "Отримано неочікувану відповідь {statusCode} ({reason}) від . Будь ласка, перевірте, що URL-адреса вказує на базовий URL інтеграції.", + "otherDescription": "Отримано несподівану відповідь {statusCode} від . Переконайтеся, що URL-адреса вказує на базовий URL інтеграції.", "reason": { - "badRequest": "", - "notFound": "", - "tooManyRequests": "", - "internalServerError": "", - "serviceUnavailable": "", - "gatewayTimeout": "" + "badRequest": "Невірний запит", + "notFound": "Не знайдено", + "tooManyRequests": "Забагато запитів", + "internalServerError": "Внутрішня помилка сервера", + "serviceUnavailable": "Служба недоступна", + "gatewayTimeout": "Шлюз не відповідає" } }, "certificate": { - "title": "", + "title": "Помилка сертифіката", "description": { - "expired": "", - "notYetValid": "", - "untrusted": "", - "hostnameMismatch": "" + "expired": "Термін дії сертифіката минув.", + "notYetValid": "Сертифікат ще не дійсний.", + "untrusted": "Сертифікат не є надійним.", + "hostnameMismatch": "Назва хоста сертифікату не відповідає URL-адресі." }, "alert": { "permission": { - "title": "", - "message": "" + "title": "Недостатньо прав доступу.", + "message": "Вам не дозволено довіряти або завантажувати сертифікати. Зверніться до адміністратора, щоб завантажити необхідний кореневий сертифікат." }, "hostnameMismatch": { - "title": "", - "message": "" + "title": "Невідповідність назві хоста", + "message": "Назва хоста в сертифікаті не відповідає імені хоста, до якого ви підключаєтесь. Це може свідчити про ризик безпеці, але ви все одно можете довіряти цьому сертифікату." }, "extract": { - "title": "", - "message": "" + "title": "Не вдалося отримати сертифікат ЦС", + "message": "Автоматично можна отримати лише самопідписані сертифікати без ланцюжка. Якщо ви використовуєте самопідписаний сертифікат, обов’язково завантажте сертифікат ЦС вручну. Інструкції щодо цього можна знайти за посиланням ." } }, "action": { "retry": { - "label": "" + "label": "Повторити створення" }, "trust": { - "label": "" + "label": "Сертифікат довіри" }, "upload": { - "label": "" + "label": "Завантажити сертифікат" } }, "hostnameMismatch": { "confirm": { - "title": "", - "message": "" + "title": "Невідповідність назві надійного хосту", + "message": "Ви дійсно хочете довіряти сертифікату з невідповідністю назві хоста?" }, "notification": { "success": { - "title": "", - "message": "" + "title": "Довірені сертифікати", + "message": "Назва хоста додано до списку довірених сертифікатів" }, "error": { - "title": "", - "message": "" + "title": "Не вдалося довіряти сертифікату", + "message": "Сертифікат із невідповідністю назві хоста не можна вважати надійним" } } }, "selfSigned": { "confirm": { - "title": "", - "message": "" + "title": "Довіряти самопідписаному сертифікату", + "message": "Ви дійсно хочете довіряти цьому самопідписаному сертифікату?" }, "notification": { "success": { - "title": "", - "message": "" + "title": "Довірені сертифікати", + "message": "Додано сертифікат до списку довірених сертифікатів" }, "error": { - "title": "", - "message": "" + "title": "Не вдалося довіряти сертифікату", + "message": "Не вдалося додати сертифікат до списку довірених сертифікатів" } } }, "details": { - "title": "", - "description": "", + "title": "Деталі", + "description": "Перегляньте інформацію про сертифікат, перш ніж вирішити, чи довіряти йому.", "content": { - "action": "", - "title": "" + "action": "Показати вміст", + "title": "PEM сертифікат" } } }, "request": { - "title": "", + "title": "Помилка запиту", "description": { "connection": { - "hostUnreachable": "", + "hostUnreachable": "Не вдалося знайти сервер. Зазвичай це означає, що хост не підключений до мережі або недоступний з вашої мережі.", "networkUnreachable": "Мережа недоступна. Перевірте підключення до Інтернету або налаштування мережі.", "refused": "Сервер відхилив з'єднання. Він не може працювати або відхиляти запити до вказаного порту.", - "reset": "" + "reset": "З'єднання було несподівано закрито. Це може статися, якщо сервер нестабільний або перезапущений." }, "dns": { - "notFound": "", - "timeout": "", - "noAnswer": "" + "notFound": "Адреса сервера не знайдена. Будь ласка, перевірте URL-адресу на помилки або неправильні доменні імена.", + "timeout": "Час очікування DNS-пошуку минув. Це може бути тимчасова проблема — спробуйте ще раз через кілька хвилин.", + "noAnswer": "DNS-сервер не повернув дійсну відповідь. Домен може існувати, але не має дійсних записів." }, "timeout": { - "aborted": "", - "timeout": "" + "aborted": "Запит було перервано до її завершення. Це може бути пов'язано з діями користувача або системним тайм-аутом.", + "timeout": "Запит оброблявся занадто довго, і час очікування минув. Перевірте свою мережу або повторіть спробу пізніше." } } } @@ -1171,12 +1171,12 @@ "message": "Невірна URL-адреса" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "Відсутні облікові дані", + "message": "Не всі облікові дані були надані" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "Недійсні облікові дані", + "message": "Облікові дані недійсні" }, "commonError": { "title": "Помилка підключення", @@ -1184,11 +1184,11 @@ }, "badRequest": { "title": "Невірний запит", - "message": "" + "message": "Запит був неправильно сформований" }, "unauthorized": { - "title": "", - "message": "" + "title": "Не авторизовано", + "message": "Ймовірно неправильні облікові дані" }, "forbidden": { "title": "Заборонено", @@ -1196,7 +1196,7 @@ }, "notFound": { "title": "Не знайдено", - "message": "" + "message": "Напевно, неправильна URL-адреса або шлях" }, "internalServerError": { "title": "Внутрішня помилка сервера", @@ -1220,20 +1220,20 @@ }, "invalidJson": { "title": "Невірний JSON", - "message": "" + "message": "Відповідь не була дійсною JSON" }, "wrongPath": { "title": "Неправильний шлях", "message": "Ймовірно, шлях не правильний" }, "tooManyRequests": { - "title": "", - "message": "" + "title": "Занадто багато запитів за певний час", + "message": "Було забагато запитів. Ймовірно, цільова система обмежує кількість запитів або відхиляє їх." } } }, "secrets": { - "title": "", + "title": "Секрети", "lastUpdated": "Останнє оновлення {date}", "notSet": { "label": "Значення не вказано", @@ -1262,99 +1262,99 @@ "newLabel": "Новий пароль" }, "tokenId": { - "label": "", - "newLabel": "" + "label": "ID Токена", + "newLabel": "Новий ID токена" }, "realm": { - "label": "", - "newLabel": "" + "label": "Область", + "newLabel": "Нова область" }, "personalAccessToken": { - "label": "", - "newLabel": "" + "label": "Особистий токен доступу", + "newLabel": "Новий особистий токен доступу" }, "topic": { - "label": "", - "newLabel": "" + "label": "Тема", + "newLabel": "Нова тема" }, "url": { - "label": "", - "newLabel": "" + "label": "Url", + "newLabel": "Нова URL-адреса" }, "opnsenseApiKey": { - "label": "", - "newLabel": "" + "label": "Ключ API (ключ)", + "newLabel": "Новий ключ API (ключ)" }, "opnsenseApiSecret": { - "label": "", - "newLabel": "" + "label": "Ключ API (Секрет)", + "newLabel": "Новий ключ API (Секрет)" }, "patchmonApiKey": { - "label": "", - "newLabel": "" + "label": "Ключ API", + "newLabel": "Новий ключ API" }, "patchmonApiSecret": { "label": "Секрет API", "newLabel": "Новий cекрет API" }, "githubAppId": { - "label": "", - "newLabel": "" + "label": " ID додатку", + "newLabel": "Новий ID додатку" }, "githubInstallationId": { - "label": "", - "newLabel": "" + "label": "ID інсталяції", + "newLabel": "Новий ID інсталяції" }, "privateKey": { - "label": "", - "newLabel": "" + "label": "Приватний ключ", + "newLabel": "Новий приватний ключ" }, "slug": { - "label": "", - "newLabel": "" + "label": "Слаг сторінки статусу", + "newLabel": "Новий слаг сторінки статусу" } } }, "permission": { - "use": "", + "use": "Виберіть інтеграції в елементах", "interact": "Взаємодія з інтеграціями", "full": "Повний доступ до інтеграції" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Аудіокнижкова полиця", + "description": "Авторизований аудіо і сервер подкастів" }, "navidrome": { - "name": "", - "description": "" + "name": "Навідром", + "description": "Сервер трансляції музичних трансляцій з сумісністю з підзвуковим API" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Час безперебійної роботи Кума", + "description": "Моніторинг безвідмовної роботи на власному хостингу з публічними сторінками стану", "secret": { "slug": { - "description": "" + "description": "Слаґ вашої публічної сторінки статусу. За замовчуванням \"default\", якщо не вказано." }, "apiKey": { - "description": "" + "description": "Необов'язковий ключ API для авторизованого доступу до /metrics" } } }, "traefik": { - "name": "", - "description": "" + "name": "Traefik", + "description": "Хмарний зворотний проксі-сервер та балансувальник навантаження" }, "paperlessNgx": { "name": "Безпаперовий ngx", - "description": "" + "description": "Система керування документами для архівування та організації відсканованих документів" }, "patchmon": { - "name": "", - "description": "" + "name": "PatchMon", + "description": "Керування та моніторинг патчів для хостів Linux" }, "bazarr": { "name": "Bazarr", - "description": "" + "description": "Супутній додаток до Sonarr та Radarr, який керує субтитрами та завантажує їх" } }, "media": { @@ -1367,7 +1367,7 @@ }, "action": { "upload": { - "label": "", + "label": "Завантажити медіа", "file": "Виберіть файл", "notification": { "success": { @@ -1391,28 +1391,28 @@ } }, "copy": { - "label": "" + "label": "Копіювати URL" }, "open": { "label": "Відкрити медіа" } }, "noResults": { - "title": "" + "title": "Медіафайл не завантажений" } }, "common": { - "success": "", + "success": "Успішно", "beta": "Бета-версія", "error": "Помилка", "action": { "add": "Додати", "apply": "Застосувати", "backToOverview": "Назад до огляду", - "skip": "", - "change": "", + "skip": "Пропустити", + "change": "Змінити", "create": "Створити", - "createAnother": "", + "createAnother": "Створити та почати спочатку", "edit": "Редагувати", "import": "Імпорт", "insert": "Вставити", @@ -1422,7 +1422,7 @@ "cancel": "Скасувати", "delete": "Видалити", "discard": "Відмінити", - "close": "", + "close": "Закрити", "confirm": "Підтвердити", "continue": "Продовжити", "previous": "Попередній", @@ -1431,20 +1431,20 @@ "checkLogs": "Щоб дізнатися більше, перевірте логи", "tryAgain": "Повторіть спробу", "loading": "Завантаження", - "show": "", - "hide": "" + "show": "Показати", + "hide": "Приховати" }, "here": "тут", "iconPicker": { - "label": "", - "header": "", - "headerLoading": "", - "noResults": "", - "error": "" + "label": "URL іконки", + "header": "Введіть назву або об'єкти для фільтрації значків... Homarr виконає пошук серед {countIcons} значків для вас.", + "headerLoading": "Введіть для пошуку іконок…", + "noResults": "Немає іконок, що відповідають{search}\".", + "error": "Не вдалося завантажити іконки." }, "colorScheme": { "options": { - "auto": "", + "auto": "Авто", "light": "Світла", "dark": "Темна" } @@ -1482,7 +1482,7 @@ "addLabel": "Додати {value}" }, "select": { - "placeholder": "", + "placeholder": "Вибрати значення", "badge": { "recommended": "Рекомендовано" } @@ -1492,21 +1492,21 @@ "switchToDarkMode": "Перемикнути на темну тему", "switchToLightMode": "Перемикнути на світлу тему", "management": "Управління", - "docker": "", + "docker": "Docker", "preferences": "Ваші налаштування", "logout": "Вийти", "login": "Логін", "homeBoard": "Ваша домашня дошка", "loggedOut": "Ви вийшли", - "updateAvailable": "" + "updateAvailable": "Доступні оновлення {countUpdates} : {tag}" } }, "dangerZone": "Небезпечна зона", "noResults": "Результатів не знайдено", - "unsavedChanges": "", - "servers": "", - "applications": "", - "services": "", + "unsavedChanges": "Є незбережені зміни!", + "servers": "Сервери", + "applications": "Додатки", + "services": "Сервіси", "preview": { "show": "Показати попередній перегляд", "hide": "Приховати попередній перегляд" @@ -1533,8 +1533,8 @@ "passwordsDoNotMatch": "Паролі не збігаються", "passwordRequirements": "Пароль не відповідає вимогам", "boardAlreadyExists": "Дошка з такою назвою вже існує", - "invalidFileType": "", - "invalidFileName": "", + "invalidFileType": "Недійсний тип файлу, очікувався {expected}", + "invalidFileName": "Невірна назва файлу", "fileTooLarge": "Файл завеликий, максимальний розмір становить {maxSize}", "invalidConfiguration": "Невірна конфігурація", "groupNameTaken": "Назва групи вже зайнята" @@ -1543,31 +1543,31 @@ }, "unit": { "speed": { - "kilometersPerHour": "", - "milesPerHour": "" + "kilometersPerHour": "км/год", + "milesPerHour": "миль/год" } } }, "section": { "dynamic": { "action": { - "create": "", - "remove": "" + "create": "Нова динамічна секція", + "remove": "Видалити динамічну секцію" }, "option": { "title": { - "label": "" + "label": "Заголовок" }, "customCssClasses": { - "label": "" + "label": "Користувацькі css класи" }, "borderColor": { - "label": "" + "label": "Колір контура" } }, "remove": { - "title": "", - "message": "" + "title": "Видалити динамічний розділ", + "message": "Ви впевнені, що хочете видалити цей динамічний розділ? Елементи будуть переміщені в те саме місце в батьківському розділі." } }, "category": { @@ -1584,7 +1584,7 @@ "moveDown": "Перемістити вниз", "createAbove": "Нові категорії зверху", "createBelow": "Нова категорія знизу", - "openAllInNewTabs": "" + "openAllInNewTabs": "Відкрити все у вкладках" }, "create": { "title": "Нова категорія", @@ -1602,12 +1602,12 @@ "label": { "create": "Нова категорія", "changePosition": "Змінити положення", - "settings": "" + "settings": "Налаштування" } }, "openAllInNewTabs": { - "title": "", - "text": "" + "title": "Відкрити все у вкладках", + "text": "Деякі браузери можуть блокувати маркове відкриття вкладок з міркувань безпеки. Homarr не може відкрити всі вікна, тому що ваш браузер заблокував цю дію. Будь ласка, дозвольте \"Відкрити виринаючі вік\" і спробуйте ще раз." } } }, @@ -1623,14 +1623,14 @@ "menu": { "label": { "settings": "Налаштування", - "refresh": "", - "options": "", - "actions": "" + "refresh": "Оновити", + "options": "Опції", + "actions": "Дії" }, "status": { - "success": "", + "success": "OK", "error": "Помилка", - "loading": "", + "loading": "Завантаження", "idle": "Неактивно" } }, @@ -1649,21 +1649,21 @@ "label": "Висота" }, "xOffset": { - "label": "" + "label": "Зміщення по осі X" }, "yOffset": { - "label": "" + "label": "Зміщення по осі Y" } } }, "edit": { "title": "Редагувати елемент", "tab": { - "widget": "", - "app": "" + "widget": "Редагувати віджет", + "app": "Редагувати застосунок" }, "app": { - "propagationNotice": "" + "propagationNotice": "Зміни до цього застосунку будуть застосовані скрізь, де вони використовуються на всіх панелях." }, "advancedOptions": { "label": "Розширені налаштування", @@ -1674,13 +1674,13 @@ "label": "Інтеграції" }, "title": { - "label": "" + "label": "Заголовок" }, "customCssClasses": { "label": "Користувацькі css класи" }, "borderColor": { - "label": "" + "label": "Колір контура" } } }, @@ -1691,11 +1691,11 @@ }, "widget": { "integrationSelect": { - "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "configureIntegrationFirst": "Спочатку під'єднайте інтеграцію", + "loading": "Завантаження...", + "placeholder": "Виберіть значення", + "noResults": "Результатів не знайдено", + "loadError": "Не вдалося завантажити параметри" }, "app": { "name": "Додаток", @@ -1711,23 +1711,23 @@ "label": "Показувати назву додатка" }, "pingEnabled": { - "label": "" + "label": "Увімкнути перевірку статусу" }, "layout": { - "label": "", + "label": "Макет", "option": { - "row": "", + "row": "Горизонтально", "row-reverse": "Горизонтально (зворотнє)", - "column": "", + "column": "Вертикально", "column-reverse": "Вертикальна (перевернута)" } }, "descriptionDisplayMode": { - "label": "", - "description": "", + "label": "Режим відображення опису", + "description": "Виберіть, як відображати опис додатку", "option": { - "normal": "", - "tooltip": "", + "normal": "У віджеті", + "tooltip": "Як підказка", "hidden": "Приховати" } } @@ -1759,15 +1759,15 @@ "label": "Сітка" }, "gridHorizontal": { - "label": "" + "label": "Горизонтальна сітка" } } }, "hideTitle": { - "label": "" + "label": "Сховати заголовок" }, "hideIcon": { - "label": "" + "label": "Сховати значок" }, "hideHostname": { "label": "Приховати імена хостів" @@ -1776,7 +1776,7 @@ "label": "Відкрити в новій вкладці" }, "withBorder": { - "label": "" + "label": "Показати рамку" }, "items": { "label": "Закладки", @@ -1785,17 +1785,17 @@ } }, "archiveTeamWarrior": { - "name": "АрхівTeam Warrior", + "name": "ArchiveTeam Warrior", "description": "Слідкуйте за станом, проєктами та активними архівними завданнями ArchiveTeam Warrior.", "option": { "showBroadcastMessage": { - "label": "" + "label": "Показати розсилку повідомлень" } } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "Звіт DNS-Hole", + "description": "Відображає резюме вашого DNS Hole", "option": { "layout": { "label": "Макет", @@ -1812,7 +1812,7 @@ } }, "usePiHoleColors": { - "label": "" + "label": "Використовувати кольори для Pi-Hole" } }, "error": { @@ -1823,12 +1823,12 @@ "adsBlockedToday": "Заблоковано сьогодні", "adsBlockedTodayPercentage": "Заблоковано сьогодні", "dnsQueriesToday": "Запити за сьогодні", - "domainsBeingBlocked": "" + "domainsBeingBlocked": "Домени в заблокованому списку" }, - "domainsTooltip": "" + "domainsTooltip": "Через численні інтеграції Homarr не може розрахувати точну кількість заблокованих доменів" }, "dnsHoleControls": { - "name": "", + "name": "Управління DNS Hole", "description": "Керуйте PiHole або AdGuard за допомогою головної панелі", "option": { "layout": { @@ -1850,20 +1850,20 @@ } }, "error": { - "internalServerError": "" + "internalServerError": "Помилка контролю над DNS Hole" }, "controls": { - "enableAll": "", - "disableAll": "", + "enableAll": "Увімкнути все", + "disableAll": "Вимкнути все", "setTimer": "Встановити таймер", - "set": "", + "set": "Встановити", "enabled": "Увімкнено", "disabled": "Вимкнено", "processing": "Обробка", "disconnected": "Відключено", "hours": "Годин", "minutes": "Хвилин", - "unlimited": "" + "unlimited": "Залишіть порожнім для необмеженого" } }, "clock": { @@ -1899,22 +1899,22 @@ "description": "Як має виглядати дата" }, "customTimeFormat": { - "label": "", - "description": "" + "label": "Власний формат часу", + "description": "Використовувати ISO 8601 для формату часу (це перевизначить інші параметри)" }, "customDateFormat": { - "label": "", - "description": "" + "label": "Власний формат дати", + "description": "Використовувати ISO 8601 для формату (це перевизначить інші параметри)" }, "showWeather": { - "label": "", - "description": "" + "label": "Відображувати погоду", + "description": "Відображати невелику анімовану піктограму погоди та температуру у кутку карти" }, "weatherLocation": { - "label": "" + "label": "Погода розташування" }, "isWeatherFormatFahrenheit": { - "label": "" + "label": "Температура в Фаренгейтах" } } }, @@ -1938,28 +1938,28 @@ } }, "timetable": { - "name": "", - "description": "", - "title": "", - "noStation": "", + "name": "Розклад", + "description": "Відображає час відправлення для станції", + "title": "Виїзди {station}", + "noStation": "Станція не вибрана", "option": { "baseUrl": { "label": "Шукати URL" }, "station": { - "label": "" + "label": "Станція" } } }, "notebook": { "name": "Блокнот", - "description": "", + "description": "Простий віджет блокнота, який підтримує розмітку", "option": { "showToolbar": { "label": "Показати панель інструментів для допомоги з розміткою" }, "allowReadOnlyCheck": { - "label": "" + "label": "Дозволити позначку в режимі лише для читання" }, "content": { "label": "Зміст зошита" @@ -1971,33 +1971,33 @@ "strikethrough": "Закреслений", "underline": "Підкреслений", "colorText": "Колір тексту", - "colorHighlight": "", + "colorHighlight": "Кольоровий виділений текст", "code": "Код", - "clear": "", - "heading": "", - "align": "", - "directionLtr": "", + "clear": "Очистити форматування", + "heading": "Заголовки {level}", + "align": "Вирівняти текст: {position}", + "directionLtr": "Встановити напрямок тексту зліва направо", "directionRtl": "Встановити напрямок тексту справа наліво", - "blockquote": "", - "horizontalLine": "", - "bulletList": "", - "orderedList": "", - "checkList": "", - "increaseIndent": "", - "decreaseIndent": "", + "blockquote": "Цитата", + "horizontalLine": "Горизонтальна лінія", + "bulletList": "Маркований список", + "orderedList": "Упорядкований список", + "checkList": "Контрольний список", + "increaseIndent": "Збільшити відступ", + "decreaseIndent": "Зменшити відступ", "link": "Посилання", "unlink": "Видалити посилання", - "image": "", + "image": "Вбудувати зображення", "addTable": "Додати таблицю", "deleteTable": "Видалити таблицю", - "colorCell": "", + "colorCell": "Кольорова клітинка", "mergeCell": "Ввімкнути/вимкнути об'єднання клітини", - "addColumnLeft": "", - "addColumnRight": "", - "deleteColumn": "", - "addRowTop": "", - "addRowBelow": "", - "deleteRow": "" + "addColumnLeft": "Додати стовпець перед", + "addColumnRight": "Додати стовпець після", + "deleteColumn": "Видалити стовпець", + "addRowTop": "Додати рядок перед", + "addRowBelow": "Додати рядок після", + "deleteRow": "Видалити рядок" }, "align": { "left": "Ліворуч", @@ -2005,51 +2005,51 @@ "right": "Праворуч" }, "popover": { - "clearColor": "", + "clearColor": "Прибрати колір", "source": "Джерело", - "widthPlaceholder": "", - "columns": "", - "rows": "", + "widthPlaceholder": "Значення в % або пікселях", + "columns": "Стовпці", + "rows": "Рядки", "width": "Ширина", "height": "Висота" }, - "placeholder": "", + "placeholder": "Почніть писати свої нотатки", "dismiss": { - "title": "", - "message": "", + "title": "Відхилити зміни?", + "message": "У вас є незбережені зміни в вашій записниці. Ви дійсно бажаєте скасувати їх?", "action": { - "discard": "", - "keepEditing": "" + "discard": "Відхилити зміни", + "keepEditing": "Продовжити редагування" } } }, "anchorNote": { - "name": "", - "description": "", + "name": "Нотатка прив’язки", + "description": "Відображає вибрану нотатку з прив’язки", "option": { "noteId": { - "label": "" + "label": "Нотатка" }, "showTitle": { - "label": "" + "label": "Показати назву" }, "showUpdatedAt": { - "label": "" + "label": "Показати останні оновлення" } }, - "empty": "", - "emptyContent": "", - "notFound": "", - "noNotes": "", - "integrationRequired": "", - "updatedAt": "", - "untitled": "", - "edit": "", - "save": "", - "cancel": "", - "readOnlyViewer": "", - "saveForbidden": "", - "saveFailed": "" + "empty": "Виберіть нотатку для показу", + "emptyContent": "Ця нотатка не має вмісту", + "notFound": "Нотатку не знайдено", + "noNotes": "Не знайдено жодних нотаток", + "integrationRequired": "Спочатку виберіть інтеграцію з прив’язкою", + "updatedAt": "Оновлено {date}", + "untitled": "Без назви", + "edit": "Редагувати", + "save": "Зберегти", + "cancel": "Скасувати", + "readOnlyViewer": "У вас є доступ до цієї замітки. Редагування вимкнено.", + "saveForbidden": "У вас немає дозволу на редагування цієї нотатки.", + "saveFailed": "Неможливо зберегти цю нотатку. Будь ласка, спробуйте ще раз." }, "iframe": { "name": "iFrame", @@ -2083,18 +2083,18 @@ "label": "Дозволити геолокацію" }, "allowModals": { - "label": "" + "label": "Дозволити модальні вікна" } }, "error": { - "noUrl": "", - "unsupportedProtocol": "", + "noUrl": "Не вказано URL-адресу iFrame", + "unsupportedProtocol": "Надана URL-адреса використовує протокол, що не підтримується. Будь ласка, використовуйте один з ({supportedProtocols})", "noBrowerSupport": "Ваш браузер не підтримує iframe. Будь ласка, оновіть свій браузер." } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "Стан об'єкта", + "description": "Відображення стану сутності і включеного параметру", "option": { "entityId": { "label": "Ідентифікатор об'єкта" @@ -2103,10 +2103,10 @@ "label": "Відображуване ім'я" }, "entityUnit": { - "label": "" + "label": "Одиниця сутності" }, "clickable": { - "label": "" + "label": "Клікабельний" } } }, @@ -2126,73 +2126,73 @@ } }, "stockPrice": { - "name": "", - "description": "", + "name": "Ціна за акції", + "description": "Відображає поточну ціну акції компанії", "option": { "stock": { - "label": "" + "label": "Символ Акцій" }, "timeRange": { - "label": "", + "label": "Діапазон часу", "option": { "1d": { - "label": "" + "label": "1 день" }, "5d": { - "label": "" + "label": "5 днів" }, "1mo": { - "label": "" + "label": "1 місяць" }, "3mo": { - "label": "" + "label": "3 місяці" }, "6mo": { - "label": "" + "label": "6 місяців" }, "ytd": { - "label": "" + "label": "З початку року" }, "1y": { "label": "1 рік" }, "2y": { - "label": "" + "label": "2 роки" }, "5y": { "label": "5 років" }, "10y": { - "label": "" + "label": "10 років" }, "max": { - "label": "" + "label": "Максимально" } } }, "timeInterval": { - "label": "", + "label": "Інтервал часу", "option": { "5m": { - "label": "" + "label": "5 хвилин" }, "15m": { - "label": "" + "label": "15 хвилин" }, "30m": { - "label": "" + "label": "30 хвилин" }, "1h": { - "label": "" + "label": "1 година" }, "1d": { - "label": "" + "label": "1 день" }, "5d": { - "label": "" + "label": "5 днів" }, "1wk": { - "label": "" + "label": "1 тиждень" }, "1mo": { "label": "1 місяць" @@ -2203,9 +2203,9 @@ }, "calendar": { "name": "Календар", - "description": "", + "description": "Відображати події інтеграцій в календарі в межах певного відносного періоду часу", "duration": { - "allDay": "" + "allDay": "Увесь день" }, "option": { "releaseType": { @@ -2220,10 +2220,10 @@ "label": "Почати з" }, "filterFutureMonths": { - "label": "" + "label": "Кінець о" }, "showUnmonitored": { - "label": "" + "label": "Показувати контрольовані" } } }, @@ -2239,10 +2239,10 @@ }, "showCurrentWindSpeed": { "label": "Показати поточну швидкість вітру", - "description": "" + "description": "Тільки при поточній погоді" }, "useImperialSpeed": { - "label": "" + "label": "Використання милі/год для швидкості вітру" }, "location": { "label": "Погодна локація" @@ -2264,11 +2264,11 @@ }, "currentWindSpeed": "{currentWindSpeed} км/год", "dailyForecast": { - "sunrise": "", - "sunset": "", + "sunrise": "Схід сонця", + "sunset": "Захід сонця", "maxWindSpeed": "Максимальна швидкість вітру: {maxWindSpeed} км/год", - "maxWindGusts": "", - "humidity": "" + "maxWindGusts": "Максимальна швидкість вітру: {maxWindGusts} {unit}", + "humidity": "Вологість: {humidity}%" }, "kind": { "clear": "Ясно", @@ -2298,14 +2298,14 @@ "title": "Менеджер індексації", "testAll": "Перевірте все", "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати статус індексування" } }, "healthMonitoring": { "name": "Моніторинг системних ресурсів", - "description": "", + "description": "Відображає інформацію, що показує стан та стан вашої системи.", "tab": { - "system": "", + "system": "Система", "cluster": "Кластер" }, "option": { @@ -2319,36 +2319,36 @@ "label": "Показати інформацію про пам'ять" }, "gpu": { - "label": "" + "label": "Показати інформацію про ЦП" }, "showUptime": { - "label": "" + "label": "Показувати час роботи" }, "fileSystem": { - "label": "" + "label": "Показувати відомості про файл системи" }, "visibleStorageVolumes": { - "label": "", - "description": "", + "label": "Видимі об'єми сховища", + "description": "Доступно лише тоді, коли всі вибрані інтеграції – це Synology. Залиште поле порожнім, щоб відобразити всі виявлені томи сховища.", "placeholder": "Оберіть томи сховища" }, "defaultTab": { - "label": "" + "label": "Вкладка за замовчуванням" }, "visibleClusterSections": { - "label": "" + "label": "Видимі розділи кластеру" }, "sectionIndicatorRequirement": { - "label": "" + "label": "Вимагати індикатора розділу" } }, "popover": { "information": "Інформація", "processor": "Процесор: {cpuModelName}", - "memory": "", - "memoryAvailable": "", + "memory": "Пам'ять: {memory} ГБ", + "memoryAvailable": "Доступно: {memoryAvailable} ГБ ({percent}%)", "version": "Версія: {version}", - "uptime": "", + "uptime": "Час безперебійної роботи: {months} ​​Місяців, {days} Днів, {hours} Годин, {minutes} Хвилин", "loadAverage": "Середнє навантаження:", "minute": "1 хвилина", "minutes": "{count} хвилин(и)", @@ -2363,17 +2363,17 @@ "cluster": { "summary": { "cpu": "ЦП", - "memory": "" + "memory": "Оперативна пам'ять" }, "resource": { "node": { - "name": "" + "name": "Вузли" }, "qemu": { - "name": "" + "name": "Віртуальні машини" }, "lxc": { - "name": "" + "name": "LXCs контейнери" }, "storage": { "name": "Сховище" @@ -2381,8 +2381,8 @@ }, "popover": { "rightSection": { - "node": "", - "vmId": "", + "node": "Вузол", + "vmId": "ID ВМ", "plugin": "Плагін" }, "detail": { @@ -2390,7 +2390,7 @@ "memory": "Пам'ять", "storage": "Сховище", "uptime": "Час роботи", - "haState": "", + "haState": "Ха-стан", "storageType": { "local": "Локальне сховище", "shared": "Спільне сховище" @@ -2401,260 +2401,271 @@ "header": { "name": "Назва", "cpu": "ЦП", - "memory": "", + "memory": "Оперативна пам'ять", "node": "Вузол" } } } }, "dockerContainers": { - "name": "", - "description": "", + "name": "Статистика Docker", + "description": "Статистика ваших контейнерів (цей віджет може бути додано тільки з правами адміністратора)", "option": { "columns": { - "label": "" + "label": "Стовпці для показу" }, "enableRowSorting": { - "label": "" + "label": "Увімкнути сортування елементів" }, "defaultSort": { - "label": "", + "label": "Стовпець для сортування за замовчуванням", "option": { - "name": "", + "name": "Назва", "state": "Стан", - "cpuUsage": "", - "memoryUsage": "" + "cpuUsage": "Використання CPU", + "memoryUsage": "Використання пам’яті" } }, "descendingDefaultSort": { + "label": "Інверсія сортування" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати статистику контейнерів", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { - "name": "", - "description": "", + "name": "Охолодити", + "description": "Огляд вашого Coolify екземпляра з серверами та додатками", "option": { "showServers": { - "label": "" + "label": "Показати сервери" }, "showApplications": { - "label": "" + "label": "Показати додатки" }, "showServices": { - "label": "" + "label": "Показати сервіси" } }, "empty": { - "servers": "", - "applications": "", - "services": "" + "servers": "Серверів не знайдено", + "applications": "Додатки не знайдені", + "services": "Сервіси не знайдені" }, "footer": { - "updated": "" + "updated": "Оновлено {when}" }, "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Інтеграцію Coolify не налаштовано", + "internalServerError": "Не вдалося отримати дані Coolify" }, "server": { - "buildServer": "" + "buildServer": "Побудова" }, "instances": { - "title": "" + "title": "Iнстанси" } }, "vpn": { - "name": "", - "description": "", - "serviceUnavailable": "", + "name": "VPN", + "description": "Огляд ваших VPN з'єднань", + "serviceUnavailable": "VPN недоступний", "option": {} }, "ups": { - "name": "", - "description": "", + "name": "ДБЖ", + "description": "Слідкувати за статусом ваших UPS пристроїв через NUT сервер", "option": { "showBattery": { - "label": "" + "label": "Показати заряд батареї" }, "showLoad": { - "label": "" + "label": "Показати завантаження" }, "showVoltage": { - "label": "" + "label": "Показувати напругу" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Онлайн", + "onBattery": "Робота від акумулятора", + "lowBattery": "Низький заряд батареї", + "charging": "Заряджається", + "unknown": "Невідомо" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Час виконання", + "load": "Завантажити", + "input": "Ввід", + "output": "Вивід" }, "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати дані UPS" } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Покращений моніторинг медіа-сервера з детальними даними потоку та перекодування", "option": { "showStreams": { - "label": "" + "label": "Показати активні потоки" }, "showStats": { - "label": "" + "label": "Показати загальну статистику" }, "showRecentActivity": { - "label": "" + "label": "Показати останні дії" }, "showViolations": { - "label": "" + "label": "Показувати порушення" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Активні потоки", + "totalUsers": "Всього користувачів", + "transcodes": "Перекодування", + "bandwidth": "Пропускна здатність" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "Немає активних потоків", + "user": "Користувач", + "media": "Медіа", + "state": "Стан", + "quality": "Якість", + "device": "Пристрій", + "progress": "Прогрес", "videoDecision": { - "directPlay": "", - "transcode": "", + "directPlay": "Пряме відтворення", + "transcode": "Перекодувати", "directStream": "Прямий потік" } }, "recentActivity": { "title": "Нещодавня активність", - "empty": "", - "watched": "", - "partial": "" + "empty": "Жодних активностей останнім часом", + "watched": "Переглядів", + "partial": "Частково" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Порушення", + "empty": "Немає останніх порушень", + "rule": "Правило", + "user": "Користувач" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "Не ввімкнено розділів", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Інтеграція Tracearr не налаштована", + "internalServerError": "Не вдалося отримати дані Tracearr" } }, "umami": { - "name": "", - "description": "", - "visitors": "", - "active": "", - "pageviews": "", - "visits": "", - "bounceRate": "", - "avgDuration": "", + "name": "Umami Аналітика", + "description": "Відображати статистику користувача в вашій аналітиці Umami", + "visitors": "відвідувачів", + "active": "активні", + "pageviews": "перегляди сторінок", + "visits": "відвідувань", + "bounceRate": "відскок", + "avgDuration": "в середньому", "option": { "websiteId": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noWebsites": "", - "configureIntegrationFirst": "" + "label": "Веб-сайт", + "description": "Оберіть веб-сайт, який відстежується вашим екземпляром Umami", + "placeholder": "Виберіть веб-сайт", + "loading": "Завантаження веб-сайтів...", + "noWebsites": "Веб-сайтів не знайдено", + "configureIntegrationFirst": "Спочатку підключіть інтеграцію з Umami" }, "timeFrame": { - "label": "", - "description": "", + "label": "Часовий інтервал", + "description": "Період відображення даних відвідувача", "option": { - "today": "", - "24h": "", - "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "today": "Сьогодні", + "24h": "Останні 24 години", + "7d": "Останні 7 днів", + "30d": "Останні 30 днів", + "month": "Цей місяць", + "lastMonth": "Останній місяць" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Подія", + "description": "Показати усі входження певної події", + "placeholder": "Виберіть подію", + "loading": "Завантаження подій...", + "noEvents": "Події не знайдено", + "none": "Події відсутні", + "configureWebsiteFirst": "Виберіть спочатку веб-сайт, щоб завантажити події" }, "chartType": { - "label": "", - "description": "", + "label": "Тип графіку", + "description": "Стиль відображення графіку", "option": { - "bar": "", - "sparkline": "" + "bar": "Гістограма", + "sparkline": "Спарклайн" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Стиль графіку", + "description": "Як відображати ряд подій на графіку", "option": { - "grouped": "", - "overlay": "" + "grouped": "Поруч", + "overlay": "Накладання (суб'єкту)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Вигляд", + "description": "Що відображати в тілі віджета", "option": { "chart": "Графік", - "events": "", - "topPages": "", - "topReferrers": "" + "events": "Графік подій", + "topPages": "Кращі сторінки", + "topReferrers": "Кращі реферали" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Події", + "description": "Оберіть одну або кілька подій для графіку", + "placeholder": "Оберіть події...", + "loading": "Завантаження подій...", + "noEvents": "Події не знайдено", + "configureWebsiteFirst": "Виберіть спочатку веб-сайт, щоб завантажити події" }, "topCount": { - "label": "", - "description": "" + "label": "Елементи для показу", + "description": "Кількість найпопулярніших елементів для відображення (максимум 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "події", + "label": "події" }, "topPages": { - "direct": "" + "direct": "Прямий" }, "topReferrers": { - "direct": "" + "direct": "Прямий" }, "events": { - "selectPrompt": "" + "selectPrompt": "Оберіть події для графіку" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Інтеграція Umami не налаштована", + "noWebsite": "Немає налаштованого веб-сайту", + "noData": "Немає доступних даних", + "internalServerError": "Не вдалося отримати дані Umami" } }, "common": { @@ -2687,7 +2698,7 @@ "app": { "noData": "Додаток не знайдено", "description": "Натисніть щоб створити новий додаток", - "quickCreate": "" + "quickCreate": "Створити додаток на льоту" }, "error": { "noIntegration": "Інтеграція не вибрана", @@ -2704,7 +2715,7 @@ }, "hasAutoPlay": { "label": "Автовідтворення", - "description": "" + "description": "Автовідтворення працює лише з вимкненим звуком через обмеження браузера" }, "isMuted": { "label": "Без звуку" @@ -2714,7 +2725,7 @@ } }, "error": { - "noUrl": "", + "noUrl": "URL-адреса відео не вказана", "forYoutubeUseIframe": "Для відео YouTube використовуйте опцію iframe" } }, @@ -2723,117 +2734,132 @@ "description": "Показує поточні потоки з ваших медіасерверів", "option": { "showOnlyPlaying": { + "label": "Показувати тільки поточне відтворення", + "description": "Вимкнення цієї опції не працюватиме для Plex." + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { "label": "", "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { - "currentlyPlaying": "", + "currentlyPlaying": "Зараз відтворюється", "user": "Користувач", "name": "Назва", "id": "Id", - "status": "", - "directPlay": "", - "transcoding": "", - "paused": "", - "remaining": "", + "status": "Статус", + "directPlay": "Пряме відтворення", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", + "transcoding": "Транскодування", + "paused": "Призупинено", + "remaining": "Залишилося {minutes} хв", "metadata": { "title": "Статистика ботів", "video": { - "title": "", - "resolution": "" + "title": "Відео", + "resolution": "Роздільна здатність" }, "audio": { - "title": "", - "channelCount": "", - "codec": "" + "title": "Аудіо", + "channelCount": "Аудіо-канали", + "codec": "Аудіо кодек" }, "transcoding": { - "title": "", - "container": "", - "resolution": "", - "target": "" + "title": "Транскодування", + "container": "Контейнер", + "resolution": "Роздільна здатність", + "target": "Цільовий кодек" } } } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Безпаперовий ngx", + "description": "Огляд архіву документів Paperless-ngx", + "documentsTotal": "Всього документів", + "documentsInbox": "Вхідні", + "correspondents": "Кореспонденти", + "tags": "Теги", + "documentTypes": "Тип документу", + "inboxRatio": "Співвідношення вхідних", + "inbox": "вхідні", + "total": "всього", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "Показувати відношення вхідних", + "description": "Відображати співвідношення вхідних повідомлень до загальної кількості документів у головному розділі" }, "showInboxRing": { "label": "Показувати кільце вхідних повідомлень", - "description": "" + "description": "Відображати кільце прогресу поруч із коефіцієнтом вхідних повідомлень" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "Показати всі документи", + "description": "Показувати загальну кількість документів у вашому архіві" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "Показувати кількість вхідних", + "description": "Показувати кількість необроблених документів у папці \"Вхідні\"" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "Показати відправників", + "description": "Показувати загальну кількість відправників" }, "showTags": { - "label": "", - "description": "" + "label": "Показати теги", + "description": "Показувати загальну кількість тегів" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "Показати типи документів", + "description": "Показати загальну кількість типів документів" } }, "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати дані Paperless-ngx" } }, "patchmon": { - "name": "", - "description": "", - "title": "", - "totalHosts": "", - "hostsNeedingUpdates": "", - "securityUpdates": "", - "upToDateHosts": "", - "hostsWithSecurityUpdates": "", - "recentUpdates24h": "", - "totalOutdatedPackages": "", - "totalRepos": "", - "osDistribution": "", - "compliance": "", - "complianceRatio": "", - "lastUpdated": "", + "name": "ПатчМон", + "description": "Огляд стану патчів хоста від PatchMon", + "title": "Статистика PatchMon", + "totalHosts": "Всього хостів", + "hostsNeedingUpdates": "Потребує оновлення", + "securityUpdates": "Оновлення безпеки", + "upToDateHosts": "Оновлені хости", + "hostsWithSecurityUpdates": "Хости з оновленнями безпеки", + "recentUpdates24h": "Оновлення (24г)", + "totalOutdatedPackages": "Застарілі пакети", + "totalRepos": "Репозитарії", + "osDistribution": "Розподіл ОС", + "compliance": "Відповідність патчам", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Оновлено {time}", "option": { "showTotalHosts": { - "label": "", - "description": "" + "label": "Показати хости загалом", + "description": "Відображати загальну кількість контрольованих хостів" }, "showHostsNeedingUpdates": { - "label": "", - "description": "" + "label": "Показувати потрібні оновлення хостів", + "description": "Відображати хости з принаймні одним застарілим пакетом" }, "showSecurityUpdates": { - "label": "", - "description": "" + "label": "Показати оновлення безпеки", + "description": "Відображати загальну кількість доступних оновлень безпеки" }, "showUpToDateHosts": { - "label": "", - "description": "" + "label": "Показувати актуальні хости", + "description": "Відображати хостингові системи без застарілих пакетів" }, "showHostsWithSecurityUpdates": { "label": "Показувати хости з оновленнями безпеки", @@ -2841,203 +2867,203 @@ }, "showRecentUpdates24h": { "label": "Показати останні оновлення (24h)", - "description": "" + "description": "Відображати кількість оновлень, застосованих за останні 24 години" }, "showTotalOutdatedPackages": { - "label": "", - "description": "" + "label": "Показати застарілі пакети", + "description": "Відображати загальну кількість застарілих пакетів у всіх хостах" }, "showTotalRepos": { "label": "Показати репозиторії", "description": "Відображати кількість активних репозиторіїв, що відслідковуються" }, "enableThresholdColors": { - "label": "", - "description": "" + "label": "Увімкнути кольори порогових значень", + "description": "Значення колірних характеристик: зелений, жовтий або червоний, залежно від пресетів серйозності" }, "useCustomThresholds": { - "label": "", - "description": "" + "label": "Розширені пороги", + "description": "Налаштуйте пороги попереджень та критичних значень для кожної статистики, використовуючи абсолютні показники або відсотки від загальної кількості хостів" }, "thresholdMode": { "option": { - "absolute": "", - "percent": "" + "absolute": "Абсолютна кількість", + "percent": "Відсоток від загальної кількості хостів" } }, "hostsNeedingUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Потрібен поріг оновлення", + "description": "Порівняйте оновлення як абсолютне значення або відсоток від загальної кількості хостів" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Поріг попередження про нові оновлення", + "description": "Вмикається жовтий колір, коли значення досягає цього порогового значення" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Потребує оновлення критичного порогу", + "description": "Вмикається червоний коли значення досягає цього порогу" }, "securityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Режим оновлення системи безпеки", + "description": "Порівняйте оновлення безпеки як абсолютне значення або відсоток від загальної кількості хостів" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Поріг попередження про оновлення безпеки", + "description": "Вмикається жовтий колір, коли значення досягає цього порогового значення" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Критичний поріг оновлення системи безпеки", + "description": "Вмикається червоний коли значення досягає цього порогу" }, "hostsWithSecurityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "Хости з режимом порогу оновлень безпеки", + "description": "Порівняйте кількість хостів як абсолютне значення або відсоток від загальної кількості хостів" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "Хости з попередженням про оновлення безпеки", + "description": "Вмикається жовтий колір коли значення досягає цього порогу" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "Хости з критичним порогом оновлення безпеки", + "description": "Вмикається червоний коли значення досягає цього порогу" }, "upToDateHostsThresholdMode": { - "label": "", - "description": "" + "label": "Оновлений режим порогового хостів", + "description": "Порівняйте актуальний хост як абсолютне значення або відсоток від загальної кількості хостів" }, "upToDateHostsWarningAt": { - "label": "", - "description": "" + "label": "Поріг попередження для актуальних хостів", + "description": "Вмикається жовтий колір, коли значення дорівнює або перевищує цей поріг, але нижче повного покриття." }, "upToDateHostsCriticalAt": { - "label": "", - "description": "" + "label": "Критичний поріг для оновлених хостів", + "description": "Вмикається червоний, коли значення падає нижче цього порогу" }, "totalOutdatedPackagesThresholdMode": { - "label": "", - "description": "" + "label": "Режим порогу застарілих пакетів", + "description": "Порівняйте застарілі пакети як абсолютне значення або відсоток від загальної кількості хостів" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "Поріг попередження про застарілі пакети", + "description": "Вмикається жовтий, коли значення досягає цього порогу" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "Критичний поріг застарілих пакетів", + "description": "Вмикається червоний коли значення досягає цього порогу" }, "showOsDistribution": { - "label": "", - "description": "" + "label": "Показати розподіл ОС", + "description": "Показати розподіл контрольованих хостів операційною системою" }, "osDistributionLimit": { - "label": "", - "description": "", + "label": "Обмеження розподілу ОС", + "description": "Максимальна кількість операційних систем для відображення", "option": { - "3": "", - "5": "", - "10": "", - "all": "" + "3": "Топ 3", + "5": "Тор 5", + "10": "Топ 10", + "all": "Усі" } }, "showOsVersion": { - "label": "", - "description": "" + "label": "Показати версію ОС", + "description": "Додавати версію ОС до кожної мітки дистрибуції, коли вона стане доступною" }, "showComplianceHero": { - "label": "", - "description": "" + "label": "Показати героя відповідності", + "description": "Відображати кільце відповідності, яке показує відсоток оновлених хостів" }, "osDisplayMode": { - "label": "", + "label": "Режим відображення ОС", "description": "Виберіть спосіб відображення дистрибутива операційної системи", "option": { - "bars": "", + "bars": "Горизонтальні смуги", "donut": "Кільцева діаграма" } } }, "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати дані PatchMon" } }, "bazarr": { - "name": "", - "description": "", - "episodes": "", - "movies": "", - "providers": "", - "status": "", + "name": "Bazarr", + "description": "Огляд відсутніх субтитрів та стану справності вашого екземпляра Bazarr", + "episodes": "Відсутні епізоди", + "movies": "Відсутні фільми", + "providers": "Проблеми p постачальником", + "status": "Проблеми зі здоров'ям", "option": { "showMissingEpisodes": { - "label": "", - "description": "" + "label": "Показати відсутні епізоди", + "description": "Відображати кількість епізодів без субтититрів" }, "showMissingMovies": { - "label": "", - "description": "" + "label": "Показати відсутні фільми", + "description": "Відобразити кількість фільмів без субтитрів" }, "showProviderIssues": { - "label": "", - "description": "" + "label": "Показати проблеми постачальника", + "description": "Відображати кількість постачальника субтитрів з проблемами" }, "showHealthIssues": { - "label": "", - "description": "" + "label": "Показувати проблеми зі здоров’ям", + "description": "Відображати кількість проблем зі здоров’ям Bazarr" } }, "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати дані Bazarr" } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Статистика Immich на сервері", + "description": "Інформація про Ваш екземпляр Immich", "option": { "showUsers": { - "label": "", - "description": "" + "label": "Показати користувачів", + "description": "Показати кількість користувачів на вашому екземплярі" }, "showPhotos": { - "label": "", - "description": "" + "label": "Показати фото", + "description": "Показувати кількість фотографій у вашому екземплярі" }, "showVideos": { - "label": "", - "description": "" + "label": "Показати відео", + "description": "Показати кількість відео на вашому екземплярі" }, "showStorage": { - "label": "", - "description": "" + "label": "Показати сховище", + "description": "Показувати загальний обсяг використаної пам'яті" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "Користувачі", + "photos": "Фото", + "videos": "Відео", + "storage": "Використане сховище" }, "immich-albumCarousel": { - "name": "", - "allPhotos": "", + "name": "Immich альбом", + "allPhotos": "Усі фотографії", "option": { "albumId": { - "label": "", - "description": "" + "label": "Альбом", + "description": "Оберіть альбом Immich або всі фотографії. Порожній вибір також показує випадкові фотографії з повної бібліотеки." }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "інтервал в секундах", + "description": "Перемикати зображення в альбомі кожні X секунд. Має бути щонайменше 1. Має бути менше 3600." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "Показати інформацію про фотографію", + "description": "Відображати дату зображення і поточний індекс в нижній частині слайд-шоу" }, "randomizePhotos": { - "label": "", + "label": "Випадкове фото", "description": "Показувати фотографії у випадковому порядку замість того, щоб завжди починатися з того ж порядку альбому." } }, - "description": "", - "noPhotos": "" + "description": "Слайд-шоу зображень з альбому Immich або повної бібліотеки", + "noPhotos": "Фотографії не знайдено" }, "downloads": { "name": "Завантаження", @@ -3056,34 +3082,43 @@ "label": "Зворотнє сортування" }, "showCompletedUsenet": { - "label": "" + "label": "Відображати записи usenet відмічені як завершені" }, "showCompletedTorrent": { - "label": "" + "label": "Відображати торрент записи позначені як завершені" }, "showCompletedHttp": { - "label": "" + "label": "Відображати різні записи, як завершені" }, "activeTorrentThreshold": { "label": "Приховувати завершені торенти нижче за цей поріг (у КіБ/с)" }, "categoryFilter": { - "label": "" + "label": "Категорії/мітки для фільтру" }, "filterIsWhitelist": { - "label": "" + "label": "Додати до білого списку" }, "applyFilterToRatio": { "label": "Використати фільтр при розрахунку рейтингу" }, "limitPerIntegration": { - "label": "", - "description": "" + "label": "Обмежити елементи за інтегрування", + "description": "Це обмежить кількість елементів, що відображаються для кожної інтеграції, а не глобально." + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "Вибір стовпців в елементах", - "noCommunications": "Не вдалося завантажити дані з інтеграції" + "noCommunications": "Не вдалося завантажити дані з інтеграції", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3095,7 +3130,7 @@ }, "category": { "columnTitle": "Додатково", - "detailsTitle": "" + "detailsTitle": "Категорії (Або додаткову інформацію)" }, "downSpeed": { "columnTitle": "Завантаження", @@ -3103,10 +3138,11 @@ }, "index": { "columnTitle": "#", - "detailsTitle": "" + "detailsTitle": "Поточний індекс всередині клієнта" }, "id": { - "columnTitle": "Id" + "columnTitle": "Id", + "detailsTitle": "" }, "integration": { "columnTitle": "Інтеграція" @@ -3120,19 +3156,19 @@ }, "ratio": { "columnTitle": "Співвідношення", - "detailsTitle": "" + "detailsTitle": "Коефіцієнт роздачі (отриманий/надісланий)" }, "received": { - "columnTitle": "", + "columnTitle": "Всього завантажено", "detailsTitle": "Всього завантажено" }, "sent": { - "columnTitle": "", + "columnTitle": "Всього відвантажено", "detailsTitle": "Всього вивантажено" }, "size": { "columnTitle": "Розмір файлу", - "detailsTitle": "" + "detailsTitle": "Загальний розмір вибору/файлів" }, "state": { "columnTitle": "Стан", @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "Час завершення", - "detailsTitle": "" + "detailsTitle": "Час з/до завершення", + "eta": "" }, "type": { "columnTitle": "Тип", @@ -3175,7 +3212,7 @@ }, "item": { "pause": "Призупинити елемент", - "resume": "", + "resume": "Продовжити роботу", "delete": { "title": "Видалити елемент", "modalTitle": "Ви дійсно бажаєте видалити це?", @@ -3184,35 +3221,51 @@ } } }, - "globalRatio": "Загальний рейтинг" + "globalRatio": "Загальний рейтинг", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { - "name": "", - "description": "", + "name": "Медіа випуски", + "description": "Відображає нещодавно додані медіа або майбутні релізи з різних інтеграцій", "option": { "layout": { - "label": "", + "label": "Макет", "option": { "backdrop": { - "label": "" + "label": "Тло" }, "poster": { - "label": "" + "label": "Плакат" } } }, "showDescriptionTooltip": { - "label": "" + "label": "Показати підказку до опису" }, "showType": { - "label": "" + "label": "Показувати значок типу медіа" }, "showSource": { - "label": "" + "label": "Показати вихідну інтеграцію" } }, "length": { - "duration": "" + "duration": "{length}хв" } }, "mediaRequests-requestList": { @@ -3223,35 +3276,35 @@ "label": "Відкрийте посилання в новій вкладці" }, "statusFilter": { - "label": "" + "label": "Статуси для відображення" }, "recentDays": { - "label": "" + "label": "Показати лише останні запити" } }, "pending": { "approve": "Схвалити запит", - "approving": "", + "approving": "Схвалити запиту..", "decline": "Відхилити запит" }, "availability": { "unknown": "Невідомо", "pending": "В очікуванні", "processing": "В обробці", - "requested": "", + "requested": "Запитано", "partiallyAvailable": "Частково доступно", "available": "Доступно", - "blacklisted": "", - "deleted": "" + "blacklisted": "Чорний список", + "deleted": "Видалити" }, "status": { - "pending": "", - "approved": "", - "declined": "", - "failed": "", - "completed": "" + "pending": "Очікує підтвердження", + "approved": "Схвалено", + "declined": "Відхилено", + "failed": "Невдало", + "completed": "Завершено" }, - "toBeDetermined": "" + "toBeDetermined": "Буде визначено" }, "mediaRequests-requestStats": { "name": "Статистика медіазапитів", @@ -3277,7 +3330,7 @@ }, "mediaTranscoding": { "name": "Перекодування медіа", - "description": "", + "description": "Статистика, поточна черга та обробник статусу вашого медіа транскодування", "option": { "defaultView": { "label": "Вигляд за замовчуванням" @@ -3291,9 +3344,9 @@ "queue": "Черга", "statistics": "Статистика" }, - "currentIndex": "", + "currentIndex": "{start}-{end} з {total}", "healthCheck": { - "title": "", + "title": "Перевірка працездатності", "queued": "У черзі", "status": { "healthy": "Здоровий", @@ -3304,11 +3357,11 @@ "statistics": { "empty": "Пусто", "transcodes": "Перекодує", - "transcodesCount": "", - "healthChecksCount": "", - "filesCount": "", - "savedSpace": "", - "healthChecks": "", + "transcodesCount": "Перекодування", + "healthChecksCount": "Перевірка працездатності", + "filesCount": "Файли", + "savedSpace": "Збережений простір", + "healthChecks": "Перевірка працездатності", "videoCodecs": "Кодеки", "videoContainers": "Контейнери", "videoResolutions": "Роздільна здатність" @@ -3320,7 +3373,7 @@ "eta": "Залишилося", "progress": "Прогрес", "transcode": "Перекодувати", - "healthCheck": "" + "healthCheck": "Перевірка працездатності" } }, "queue": { @@ -3329,37 +3382,37 @@ "file": "Файл", "size": "Розмір", "transcode": "Перекодувати", - "healthCheck": "" + "healthCheck": "Перевірка працездатності" } } } }, "mediaMissing": { - "name": "", - "description": "", + "name": "Відсутня медіа в черзі", + "description": "Показує відсутні і в черзі фільми і епізоди з Radarr і Sonarr", "option": { "showMissing": { - "label": "" + "label": "Показати відсутні елементи" }, "showQueued": { - "label": "" + "label": "Показати елементи в черзі" }, "pageSize": { - "label": "" + "label": "Елементів на сторінці" } }, "tab": { - "missing": "", - "queued": "" + "missing": "Відсутні", + "queued": "У черзі" }, "type": { - "movie": "", - "episode": "" + "movie": "Фільм", + "episode": "Епізод" }, "empty": { - "missing": "", - "queued": "", - "noTabsEnabled": "" + "missing": "Немає відсутніх елементів", + "queued": "Немає елементів у черзі", + "noTabsEnabled": "Увімкнути принаймні одну вкладку в налаштуваннях віджету" }, "timeLeft": "Залишилося часу" }, @@ -3368,152 +3421,152 @@ "description": "Моніторинг та відображення однієї або кількох загальних RSS-, ATOM- або JSON-стрічок", "option": { "feedUrls": { - "label": "" + "label": "URL-адреса каналів" }, "enableRtl": { - "label": "" + "label": "Увімкнути RTL" }, "textLinesClamp": { - "label": "" + "label": "Зразки рядка опису" }, "maximumAmountPosts": { - "label": "" + "label": "Обмеження кількості публікацій" }, "hideDescription": { - "label": "" + "label": "Приховати опис" }, "showPosterImage": { - "label": "" + "label": "Показати зображення постеру" } } }, "releases": { - "name": "", - "description": "", + "name": "Релізи", + "description": "Відображає список поточної версії заданих репозиторіїв з заданим регулярним виразом версії.", "option": { "newReleaseWithin": { - "label": "", - "description": "" + "label": "Новий реліз всередині", + "description": "Приклад використання: 1w (1 тиждень), 10m (10 місяців). Допустимі типи одиниц h (години), d (дні), 1 РР), m (місяці), y (роки). Не заповнюйте, щоб не підсвічувати нові релізи." }, "staleReleaseWithin": { - "label": "", - "description": "" + "label": "Застарілий реліз всередині", + "description": "Приклад використання: 1w (1 тиждень), 10m (10 місяців). Допустимі типи одиниць h (години), d (дні), 1 РР), m (місяці), y (роки). Залиште порожнім для підсвічування застарілих релізів." }, "showOnlyHighlighted": { - "label": "", - "description": "" + "label": "Показати лише виділені", + "description": "Показати лише нові або застарілі релізи. Як зазначено вище." }, "showDetails": { - "label": "" + "label": "Показати деталі" }, "showOnlyIcon": { "label": "Показати тільки іконку" }, "topReleases": { "label": "Кращі релізи", - "description": "" + "description": "Максимальна кількість останніх релізів для відображення. Нуль означає відсутність обмежень." }, "repositories": { - "label": "", + "label": "Репозитарії", "addRepository": { - "label": "" + "label": "Добавити репозитарій" }, "importRepositories": { - "label": "", - "loading": "", - "noImagesFound": "", - "listFoundImages": "", - "listAlreadyImportedImages": "", - "allImagesAlreadyImported": "", - "onlyAdminCanImport": "", - "selectAll": "", - "deselectAll": "" + "label": "Імпортувати з docker", + "loading": "Завантаження зображень docker", + "noImagesFound": "Жодного зображення в docker не знайдено", + "listFoundImages": "Список знайдених зображень", + "listAlreadyImportedImages": "Список вже імпортованих зображень", + "allImagesAlreadyImported": "Усі зображення вже імпортовано", + "onlyAdminCanImport": "Лише адміністратори можуть імпортувати з docker", + "selectAll": "Обрати все", + "deselectAll": "Скасувати вибір" }, "provider": { - "label": "" + "label": "Постачальник" }, "providerUrl": { - "label": "" + "label": "URL постачальника" }, "identifier": { - "label": "", - "placeholder": "" + "label": "Ідентифікатор", + "placeholder": "Назва або Власник/Назва" }, "name": { - "label": "" + "label": "Назва" }, "versionFilter": { - "label": "", + "label": "Фільтр версії", "prefix": { - "label": "" + "label": "Префікс" }, "precision": { - "label": "", + "label": "Точність", "options": { - "none": "" + "none": "Немає" } }, "suffix": { - "label": "" + "label": "Суфікс" }, "regex": { - "label": "" + "label": "Регулярний вираз" } }, "edit": { - "label": "" + "label": "Редагувати" }, "editForm": { - "title": "", + "title": "Редагувати репозиторій", "cancel": { - "label": "" + "label": "Скасувати" }, "confirm": { - "label": "" + "label": "Підтвердити" } }, "importForm": { - "title": "" + "title": "Імпортувати з Docker" }, "example": { - "label": "" + "label": "Приклад" }, - "invalid": "", + "invalid": "Неправильне визначення репозиторію, перевірте значення", "noProvider": { - "label": "", - "tooltip": "" + "label": "Без постачальника", + "tooltip": "Не вдалося проаналізувати постачальника, встановіть його вручну після імпорту зображень." }, "tokens": { - "label": "", - "token": "", - "configured": "", - "notConfigured": "", - "save": "" + "label": "Токени постачальника", + "token": "Токен", + "configured": "Токен налаштовано", + "notConfigured": "Токен не встановлено", + "save": "Зберегти" } } }, - "not-found": "", - "pre-release": "", - "archived": "", - "forked": "", - "starsCount": "", - "forksCount": "", - "issuesCount": "", - "markViewed": "", - "openProjectPage": "", - "openReleasePage": "", - "releaseDescription": "", - "projectDescription": "", + "not-found": "Не знайдено", + "pre-release": "Попередній реліз", + "archived": "Архівовано", + "forked": "Роздвоєний", + "starsCount": "Зірки", + "forksCount": "Роздвоєнних", + "issuesCount": "Відкриті питання", + "markViewed": "Позначити переглянуте", + "openProjectPage": "Відкрити сторінку проєкту", + "openReleasePage": "Відкрити сторінку релізу", + "releaseDescription": "Опис релізу", + "projectDescription": "Опис проекту", "created": "Створено", "error": { "label": "Помилка", "messages": { - "invalidIdentifier": "", - "noMatchingVersion": "", - "noReleasesFound": "", - "noProviderSelected": "", - "noProviderResponse": "", - "unexpected": "" + "invalidIdentifier": "Неприпустимий ідентифікатор", + "noMatchingVersion": "Відповідної версії не знайдено", + "noReleasesFound": "Результатів не знайдено", + "noProviderSelected": "Постачальника не обрано.", + "noProviderResponse": "Немає відповіді від провайдера", + "unexpected": "Неочікувана помилка провайдера" } } }, @@ -3521,174 +3574,174 @@ "option": {}, "card": { "vpn": { - "countConnected": "" + "countConnected": "{count} підключено" } }, "error": { - "integrationsDisconnected": "", - "unknownContentOption": "" + "integrationsDisconnected": "Дані недоступні, всі інтеграції відключені", + "unknownContentOption": "Невідомий вміст для віджета зведення мережевого контролера:" }, - "name": "", - "description": "" + "name": "Зведення мережного контролера", + "description": "Відображає зведену інформацію про мережевий контролер (наприклад, UniFi Controller)" }, "networkControllerStatus": { "card": { "variants": { "wired": { - "name": "" + "name": "Дротовий" }, "wifi": { - "name": "" + "name": "Wi-Fi" } }, "users": { - "label": "" + "label": "Користувачі" }, "guests": { - "label": "" + "label": "Гості" } }, "option": { "content": { "option": { "wifi": { - "label": "" + "label": "Wi-Fi" }, "wired": { - "label": "" + "label": "Дротовий" } }, - "label": "" + "label": "Вміст віджету" } }, "error": { - "integrationsDisconnected": "", - "unknownContentOption": "" + "integrationsDisconnected": "Дані недоступні, всі інтеграції відключені", + "unknownContentOption": "Невідомий параметр вмісту для віджету стану мережі: " }, - "name": "", - "description": "" + "name": "Статус мережі", + "description": "Показувати підключені пристрої в мережі" }, "networkController": { "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати зведення мережевого контролера" } }, "firewall": { - "name": "", - "description": "", + "name": "Моніторинг брандмауера", + "description": "Показує зведення брандмауерів", "tab": { - "system": "", - "interfaces": "" + "system": "Система", + "interfaces": "Інтерфейси" }, "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати дані з брандмауера" }, "option": { - "interfaces": "" + "interfaces": "Мережеві інтерфейси для відображення" }, "widget": { - "fwname": "", - "version": "", - "versiontitle": "", - "cputitle": "", - "memorytitle": "", - "cpu": "", - "memory": "", + "fwname": "Назва", + "version": "Версія", + "versiontitle": "Версії", + "cputitle": "Використання CPU", + "memorytitle": "Використання пам’яті", + "cpu": "ЦП", + "memory": "Пам'ять", "interfaces": { - "name": "", - "trans": "", - "recv": "", - "title": "" + "name": "назва", + "trans": "Передано", + "recv": "Отримано", + "title": "Мережеві інтерфейси" } } }, "notifications": { - "name": "", - "description": "", - "noItems": "", + "name": "Сповіщення", + "description": "Відображати історію сповіщень з інтеграції", + "noItems": "Немає сповіщень для показу.", "option": { "hideLogos": { - "label": "" + "label": "Сховати логотипи" } } }, "speedtestTracker": { - "name": "", - "description": "", + "name": "Трекер швидкості", + "description": "Відображає результати тестів швидкості з вашого трекера швидкості.", "option": { "showLatestResult": { - "label": "" + "label": "Показати останній результат" }, "showStats": { - "label": "" + "label": "Показати середні значення" }, "showRecentResults": { - "label": "" + "label": "Показати останні результати" }, "showPingGraph": { - "label": "" + "label": "Показати пінг графік" } }, "latestResult": "Останній результат", - "averages": "", - "tests": "", - "recentResults": "", - "recentResultsSpeed": "", - "recentResultsPing": "", - "download": "", - "upload": "", - "ping": "", - "status": "", - "avgDownload": "", - "avgUpload": "", - "avgPing": "", - "healthy": "", - "unhealthy": "", - "ok": "", - "fail": "", - "noSectionsEnabled": "", + "averages": "Середні значення", + "tests": "Тест {count}", + "recentResults": "Останні результати", + "recentResultsSpeed": "Швидкість", + "recentResultsPing": "Пінг", + "download": "Завантажити", + "upload": "Вивантаж.", + "ping": "Пінг", + "status": "Статус", + "avgDownload": "Середнє завантаження", + "avgUpload": "Середнє вивантаження", + "avgPing": "Середній пінг", + "healthy": "Здоровий", + "unhealthy": "Нездоровий", + "ok": "Добре", + "fail": "Невдало", + "noSectionsEnabled": "Увімкніть принаймні один розділ в налаштуваннях віджету.", "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати дані тесту швидкості" } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Час безперебійної роботи Кума", + "description": "Відстежуйте статистику безвідмовної роботи на сторінці стану Uptime Kuma", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "Показати середній час роботи", + "description": "Відображати сукупний середній відсоток безвідмовної роботи за 24 години" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "Показати кільце робочого часу", + "description": "Відображати кільце прогресу поруч із середнім значенням часу безвідмовної роботи" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "Показати загальну кількість моніторів", + "description": "Відображати загальну кількість налаштованих моніторів" }, "showUpCount": { - "label": "", - "description": "" + "label": "Кількість показів", + "description": "Відображає кількість увімкнених моніторів" }, "showDownCount": { - "label": "", - "description": "" + "label": "Відлік показів", + "description": "Відображати, скільки моніторів зараз не працюють" }, "showPausedCount": { - "label": "", - "description": "" + "label": "Показати призупинену кількість", + "description": "Відображати кількість моніторів зараз призупинено" } }, - "averageUptime": "", + "averageUptime": "Середній час безвідмовної роботи (24 год)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "Всього моніторів", + "upCount": "Віддача", + "downCount": "Завантаження", + "pausedCount": "Призупинено" }, "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати дані про час роботи" } }, "traefik": { @@ -3696,153 +3749,139 @@ "description": "Огляд маршрутизаторів, сервісів, проміжного програмного забезпечення та точок входу Traefik", "option": { "showTcp": { - "label": "" + "label": "Показати TCP" }, "showUdp": { - "label": "" + "label": "Show UDP" }, "showEntryPoints": { - "label": "" + "label": "Показувати точки входу" } }, - "instances": "", - "versionUnknown": "", + "instances": "Traefik екземпляри", + "versionUnknown": "Версія невідома", "summary": { - "routers": "", - "entryPoints": "" + "routers": "Маршрутизатори", + "entryPoints": "Точки входу" }, "resource": { - "routers": "", - "services": "", - "middlewares": "" + "routers": "Маршрутизатори", + "services": "Служби", + "middlewares": "Проміжне програмне забезпечення" }, "status": { - "healthy": "", - "errors": "", - "warnings": "" + "healthy": "Здоровий", + "errors": "{count} помилок", + "warnings": "{count} застережень" }, "error": { "internalServerError": "Неможливо отримати дані Traefik" } }, "audioStats": { - "name": "", - "description": "", + "name": "Статистика аудіо", + "description": "Бібліотека і відтворення статистики з Navidrome або Audiobookf", "option": { "showArtists": { - "label": "", - "description": "" + "label": "Показати виконавців", + "description": "Показати загальну кількість виконавців у вашій музичній бібліотеці (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "Показати альбоми", + "description": "Показати загальну кількість альбомів у вашій музичній бібліотеці (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "Максимум елементів для відтворення", - "description": "" + "label": "Показувати пісні", + "description": "Показати загальну кількість пісень у вашій музичній бібліотеці (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "Показувати кількість бібліотек", + "description": "Показати кількість бібліотек на вашому екземплярі (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "Показати аудіокниги", + "description": "Відображати загальну кількість аудіокниг всіх бібліотеках (Audiobookf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "Показати подкасти", + "description": "Відображати загальну кількість подкастів у всіх бібліотеках (Audiobookf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "Показати час прослуховування", + "description": "Показувати загальний час прослуховування (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "Показати активні сеанси", + "description": "Показати кількість активних сеансів відтворення (Audiobookf)" }, "compactMode": { - "label": "", - "description": "" + "label": "Компактний режим", + "description": "Використовувати щільний макет з меншими плитками, ідеально для малих розмірів віджета" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "Виконавці", + "albums": "Альбоми", + "songs": "Композиції", + "libraryCount": "Бібліотеки", + "audiobooks": "Аудіокниги", + "podcasts": "Подкасти", + "listeningTime": "Час прослуховування", + "activeSessions": "Активні Сесії", "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати статистику аудіо" } }, "systemResources": { - "name": "", - "description": "", + "name": "Системні ресурси", + "description": "Процесор, пам'ять, диск та інше використання системи", "option": { "hasShadow": { - "label": "" + "label": "Увімкнути затінення графіку" }, "visibleCharts": { - "label": "", - "description": "", + "label": "Видимі графіки", + "description": "Оберіть графіки, які хочете бачити.", "option": { - "cpu": "", - "memory": "", - "gpu": "", - "network": "" + "cpu": "ЦП", + "memory": "Оперативна Пам'ять", + "gpu": "Графічний процесор", + "network": "Мережа" } }, "labelDisplayMode": { - "label": "", + "label": "Режим відображення міток", "option": { - "textWithIcon": "", - "text": "", - "icon": "", - "hidden": "" + "textWithIcon": "Показувати текст з іконкою", + "text": "Показати тільки текст", + "icon": "Показати тільки іконку", + "hidden": "Приховати підписи" } } }, "card": { - "cpu": "", - "memory": "", - "gpu": "", - "network": "", - "up": "", - "down": "" + "cpu": "ЦП", + "memory": "ПАМ", + "gpu": "Графічний процесор", + "network": "Мережа", + "up": "Відвантаження", + "down": "Завантаження" } }, "systemDisks": { - "name": "", - "description": "", + "name": "Системні диски", + "description": "Використання диска системи", "option": { "showTemperatureIfAvailable": { - "label": "" + "label": "Показати температуру, якщо вона доступна" }, "displayMode": { - "label": "", + "label": "Режим відображення", "option": { "percentage": { - "label": "" + "label": "Відсоток (напр., 76%)" }, "absolute": { - "label": "" + "label": "Абсолютні значення (напр., 800GB / 1TB)" }, "free": { "label": "Відсоток вільного простору (напр., 24% вільно)" @@ -3850,59 +3889,59 @@ } }, "showBackgroundBar": { - "label": "" + "label": "Показувати фонову панель використання" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "Видимі обсяги сховища", + "description": "Доступно лише тоді, коли всі вибрані інтеграції – це Synology. Залиште поле порожнім, щоб відобразити всі виявлені томи сховища.", + "placeholder": "Оберіть томи сховища" } }, "status": { - "unhealthy": "" + "unhealthy": "Нездоровий" } }, "customApi": { - "name": "", - "description": "", + "name": "Користувацький API", + "description": "Відображення даних з будь-якої зовнішньої API з користувальницької конфігурації.", "option": { "definitionId": { - "label": "" + "label": "Ідентифікатор визначення" }, "refreshInterval": { - "label": "", - "description": "" + "label": "Інтервал оновлення", + "description": "Як часто слід оновлювати дані з API (в секундах)" } }, - "noDefinition": "", - "definitionNotFound": "", - "noDisplayOutput": "", - "executeConfirm": "", - "executing": "", - "executeSuccess": "", - "executeFailed": "" + "noDefinition": "Не обрано визначення", + "definitionNotFound": "Визначення віджета не знайдено. Можливо, його видалено.", + "noDisplayOutput": "Без виводу на екран", + "executeConfirm": "Ви впевнені, що хочете виконати цю дію?", + "executing": "Виконання...", + "executeSuccess": "Дія успішно виконана", + "executeFailed": "Не вдалося виконати дію. Перевірте налаштування віджету." }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel системи (Таблиця)", + "description": "Вид таблиць всіх систем, що контролюються в Beszel, з сортованими стовпцями і індикатори стану", "option": { "statusFilter": { - "label": "" + "label": "Фільтри статусу" }, "sortBy": { - "label": "" + "label": "Сортувати за" }, "sortDirection": { - "label": "" + "label": "Порядок сортування" }, "showCpu": { - "label": "" + "label": "Показати ЦП" }, "showMemory": { - "label": "" + "label": "Показати оперативну пам'ять" }, "showDisk": { - "label": "" + "label": "Показати диск" }, "showGpu": { "label": "Показати графічний процесор" @@ -3917,219 +3956,227 @@ "label": "Показувати температуру" }, "showBattery": { - "label": "Показувати заряд батереї" + "label": "Показати заряд батареї" }, "showServices": { - "label": "" - }, - "showUptime": { - "label": "" - }, - "showAgent": { - "label": "" - } - }, - "noRecords": "", - "error": { - "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції." - }, - "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" - } - }, - "beszelSystemGrid": { - "name": "", - "description": "", - "option": { - "statusFilter": { - "label": "" - }, - "showCpu": { - "label": "" - }, - "showMemory": { - "label": "" - }, - "showDisk": { - "label": "" - }, - "showGpu": { - "label": "" - }, - "showLoadAvg": { - "label": "" - }, - "showNet": { - "label": "" - }, - "showTemp": { - "label": "" - }, - "showBattery": { - "label": "" - }, - "showServices": { - "label": "" + "label": "Показати сервіси" }, "showUptime": { "label": "Показати час роботи" }, "showAgent": { + "label": "Показати версію агента" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, + "noRecords": "Системи не знайдені", "error": { - "internalServerError": "" + "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції.", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "column": { + "system": "Система", + "cpu": "ЦП", + "memory": "Оперативна Пам'ять", + "disk": "Диск", + "gpu": "Графічний процесор", + "loadAvg": "Сер. навантаження", + "net": "Мережа", + "temp": "Темп", + "battery": "Бат", + "services": "Сервіси", + "uptime": "Час роботи", + "agent": "Агент" + } + }, + "beszelSystemGrid": { + "name": "Beszel система (Сітка)", + "description": "Таблиця карток усіх систем, що контролюються Beszel, з показниками в режимі реального часу", + "option": { + "statusFilter": { + "label": "Фільтри статусу" + }, + "showCpu": { + "label": "Показати ЦП" + }, + "showMemory": { + "label": "Показати оперативну пам'ять" + }, + "showDisk": { + "label": "Показати диск" + }, + "showGpu": { + "label": "Показати графічний процесор" + }, + "showLoadAvg": { + "label": "Показати середнє навантаження" + }, + "showNet": { + "label": "Показати мережу" + }, + "showTemp": { + "label": "Показувати температуру" + }, + "showBattery": { + "label": "Показати заряд батареї" + }, + "showServices": { + "label": "Показати сервіси" + }, + "showUptime": { + "label": "Показати час роботи" + }, + "showAgent": { + "label": "Показати версію агента" + } + }, + "error": { + "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції." }, "empty": { - "noSystems": "" + "noSystems": "Системи не знайдені" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", + "cpu": "ЦП", + "memory": "Оперативна Пам'ять", + "disk": "Диск", + "gpu": "Графічний процесор", + "loadAvg": "Сер. навантаження", + "net": "Мережа", + "temp": "Темп", + "battery": "Бат", "services": "Служби", - "uptime": "", - "agent": "" + "uptime": "Час роботи", + "agent": "Агент" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel сповіщення", + "description": "Переглянути конфігурації та історію сповіщень Beszel", "option": { "showHistory": { - "label": "" + "label": "Показати історію сповіщень" }, "maxHistoryItems": { - "label": "" + "label": "Максимальна кількість елементів історії" } }, - "empty": "", + "empty": "Сповіщення не налаштовані", "error": { - "internalServerError": "" + "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції." }, - "history": "", - "resolved": "", + "history": "Історія", + "resolved": "Вирішено", "status": { - "triggered": "", - "ok": "" + "triggered": "Активовано", + "ok": "ОК" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel статус системи", + "description": "Графіки часових серій для ЦП, пам'яті, дисків, мереж та метрик контейнерів", "option": { "systemId": { - "label": "", - "description": "" + "label": "Система", + "description": "Виберіть систему Beszel для відображення статистики" }, "timePeriod": { - "label": "" + "label": "Період часу" }, "showCpu": { - "label": "" + "label": "Показати графік ЦП" }, "showMemory": { - "label": "" + "label": "Показати графік пам'яті" }, "showDisk": { - "label": "" + "label": "Показувати графік диску" }, "showDiskIO": { - "label": "" + "label": "Показувати графік I/O диску" }, "showNetwork": { - "label": "" + "label": "Показати графік мережі" }, "showDockerCpu": { - "label": "" + "label": "Показати графік ЦП Docker" }, "showDockerMemory": { - "label": "" + "label": "Показати графік оперативної пам'яті Docker" }, "showDockerNetwork": { - "label": "" + "label": "Показувати графік мережі Docker" } }, - "selectSystem": "", + "selectSystem": "Оберіть систему", "empty": { - "noSystems": "" + "noSystems": "Системи не знайдені" }, "error": { - "internalServerError": "", - "liveConnectionFailed": "", - "switchToHistorical": "", - "systemNotFound": "" + "internalServerError": "Не вдається підключитися до Beszel. Перевірте параметри інтеграції.", + "liveConnectionFailed": "Помилка з'єднання. Ваш екземпляр Beszel може не підтримувати потоки в реальному часі.", + "switchToHistorical": "Перейти до історії перегляду", + "systemNotFound": "Вибрану систему не знайдено. Виберіть іншу систему." }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "Використання ЦП", + "subtitle": "Середнє системне завантаження ЦП", + "series": "ЦП" }, "memory": { - "title": "", - "subtitle": "", - "series": "", + "title": "Використання пам'яті", + "subtitle": "Точне використання у зафіксований час", + "series": "Використання", "cache": "Кеш/Баффери" }, "disk": { - "title": "", - "subtitle": "", + "title": "Використання диску", + "subtitle": "Використання файловою системою", "series": "Використано" }, "diskIO": { "title": "Диск вводу/виводу", - "subtitle": "", - "read": "", - "write": "" + "subtitle": "Пропускна здатність root файлової системи", + "read": "Читати", + "write": "Записати" }, "storage": { "title": "Сховище", - "subtitle": "", + "subtitle": "Використання диска для кожної файлової системи", "series": "Використано" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "Пропускна здатність", + "subtitle": "Мережевий трафік публічних інтерфейсів", + "sent": "Надіслати", + "recv": "Отримано" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Використання ЦП Docker", + "subtitle": "Середнє використання ЦП контейнерів" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Використання пам'яті Docker", + "subtitle": "Використання пам'яті Docker контейнерів" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Мережа Docker ввід/вивід", + "subtitle": "Мережевий трафік Docker контейнерів" } } } }, "widgetPreview": { "toggle": { - "enabled": "", - "disabled": "" + "enabled": "Режим редагування увімкнено", + "disabled": "Режим редагування вимкнено" }, "dimensions": { "title": "Змінити розміри" @@ -4176,13 +4223,13 @@ }, "error": { "title": "Помилка імпорту", - "message": "" + "message": "Дошка не може бути імпортована, перегляньте журнали для подальших деталей" } }, "form": { "file": { - "label": "", - "invalidError": "" + "label": "Обрати файл JSON", + "invalidError": "Неправильний файл конфігурації" }, "apps": { "label": "Додатки", @@ -4192,7 +4239,7 @@ }, "onlyImportApps": { "label": "Імпортувати лише додатки", - "description": "" + "description": "Додавати лише додатки, дошка повинна бути перестворена вручну" } }, "name": { @@ -4208,16 +4255,16 @@ } }, "sidebarBehavior": { - "label": "", - "description": "", + "label": "Налаштування бічної панелі", + "description": "Бічні панелі видалені з версії 1.0, ви можете вибрати, що має статися з елементами всередині них.", "option": { "lastSection": { - "label": "", - "description": "" + "label": "Останній розділ", + "description": "Бічна панель буде відображатися під останнім розділом" }, "removeItems": { - "label": "", - "description": "" + "label": "Видалити елементи", + "description": "Елементи, що містяться в бічній панелі, будуть видалені" } } } @@ -4225,8 +4272,8 @@ }, "quickCreateApp": { "modal": { - "title": "", - "createAndUse": "" + "title": "Створити програму на льоту", + "createAndUse": "Створити та використати" } } }, @@ -4235,53 +4282,53 @@ "label": "Назва сторінки" }, "metaTitle": { - "label": "" + "label": "Meta-title" }, "logoImageUrl": { - "label": "" + "label": "URL-адреса зображення логотипу" }, "faviconImageUrl": { - "label": "" + "label": "URL-адреса зображення іконки" }, "backgroundImageUrl": { - "label": "", - "placeholder": "", + "label": "URL-адреса фонового зображення", + "placeholder": "Почніть вводити для пошуку локальних зображень", "group": { - "your": "", - "other": "" + "your": "Ваші зображення", + "other": "Інші зображення" } }, "backgroundImageAttachment": { "label": "Прикріплене фонове зображення", "option": { "fixed": { - "label": "", + "label": "Виправлено", "description": "Фон залишається в тому ж положенні." }, "scroll": { - "label": "", - "description": "" + "label": "Прокрутка", + "description": "Фонове прокручування з мишкою." } } }, "backgroundImageRepeat": { - "label": "", + "label": "Повторення фонового зображення", "option": { "repeat": { - "label": "", - "description": "" + "label": "Повторити", + "description": "Зображення повторюється настільки скільки необхідно для покриття всієї області малювання фонів." }, "no-repeat": { - "label": "", - "description": "" + "label": "Не повторювати", + "description": "Зображення не повторюється і може не заповнювати весь простір." }, "repeat-x": { - "label": "", - "description": "" + "label": "Повторити по Х", + "description": "Те саме, що і \"Повторити\", але лише на горизонтальній осі." }, "repeat-y": { - "label": "", - "description": "" + "label": "Повторити по Y", + "description": "Те саме, що і \"Повторити\", але лише на вертикальній осі." } } }, @@ -4289,11 +4336,11 @@ "label": "Розмір фонового зображення", "option": { "cover": { - "label": "", - "description": "" + "label": "Обкладинка", + "description": "Масштабує зображення якомога меншим, щоб покрити ціле вікно, скорочуючи надмірний простір." }, "contain": { - "label": "", + "label": "Містить", "description": "Масштабує зображення максимально великою в межах контейнера без обрізання або розтягування зображення." } } @@ -4308,35 +4355,35 @@ "label": "Непрозорість" }, "iconColor": { - "label": "" + "label": "Колір іконки" }, "clearColor": { - "label": "" + "label": "Очистити колір" }, "customCss": { - "label": "", + "label": "Користувацькі css для цієї дошки", "description": "Крім того, налаштуйте дашборд за допомогою CSS, що рекомендується лише досвідченим користувачам", "customClassesAlert": { - "title": "", - "description": "" + "title": "Користувацькі css класи", + "description": "Ви можете додати власні класи до елементів вашої дошки в розширених опціях кожного товару і використовувати їх в кастомній CSS вище." } }, "disableStatus": { - "label": "", - "description": "" + "label": "Вимкнути статус додатку", + "description": "Вимкнути перевірку стану для всіх додатків на цій дошці" }, "columnCount": { - "label": "" + "label": "Кількість стовпців" }, "itemRadius": { - "label": "", - "description": "", + "label": "Радіус елемента", + "description": "Змінює округлення плиток на вашій дошці", "option": { - "xs": "", - "sm": "", - "md": "", - "lg": "", - "xl": "" + "xs": "Дуже малий", + "sm": "Малий", + "md": "Середній", + "lg": "Великий", + "xl": "Дуже великий" } }, "name": { @@ -4344,25 +4391,25 @@ }, "isPublic": { "label": "Публічний", - "description": "" + "description": "Публічні дошки доступні всім, навіть без облікового запису." } }, "content": { - "metaTitle": "" + "metaTitle": "{boardName} дошка" }, "setting": { - "title": "", + "title": "Налаштування для дошки {boardName}", "section": { "general": { "title": "Загальне", - "unrecognizedLink": "" + "unrecognizedLink": "Надане посилання не розпізнано та не відтворюється в попередньому перегляді, можливо, воно все ще працюватиме." }, "layout": { "title": "Макет", "responsive": { - "title": "", + "title": "Адаптивні макети", "action": { - "add": "" + "add": "Додати розміщення" } } }, @@ -4370,13 +4417,13 @@ "title": "Фон" }, "appearance": { - "title": "" + "title": "Вигляд" }, "customCss": { - "title": "" + "title": "Власний css" }, "behavior": { - "title": "" + "title": "Поведінка" }, "access": { "title": "Управління доступом", @@ -4399,7 +4446,7 @@ "action": { "rename": { "label": "Перейменувати дошку", - "description": "", + "description": "Зміна назви призведе до розірвання всіх посилань на цю дошку.", "button": "Змінити назву", "modal": { "title": "Перейменувати дошку" @@ -4418,10 +4465,10 @@ "confirm": { "public": { "title": "Зробити дошку приватною", - "description": "" + "description": "Ви впевнені, що хочете зробити цю дошку приватною? Це приховає дошку від публічного списку. Посилання для гостей зламаються." }, "private": { - "title": "", + "title": "Зробити дошку загальнодоступною", "description": "Ви впевнені, що хочете зробити цю дошку публічною? Це зробить дошку доступною для всіх." } } @@ -4456,13 +4503,13 @@ "title": "Немає домашньої дошки", "admin": { "description": "Ви ще не встановили домашню дошку для сервера.", - "link": "", + "link": "Налаштувати головну дошку для сервера", "notice": "Щоб змусити цю сторінку зникнути для всіх користувачів, встановіть домашню плату для сервера" }, "user": { "description": "Ви ще не встановили домашню дошку.", "link": "Налаштуйте домашню дошку", - "notice": "" + "notice": "Щоб ця сторінка зникла, вкажіть домашню дошку у своїх налаштуваннях" }, "anonymous": { "description": "Адміністратор сервера ще не встановив домашню дошку.", @@ -4475,19 +4522,19 @@ "layout": { "field": { "name": { - "label": "" + "label": "Назва" }, "columnCount": { - "label": "" + "label": "Кількість стовпців" }, "breakpoint": { - "label": "", - "description": "" + "label": "Точка зупинки", + "description": "Макет буде використовуватися на всіх екранах більше, ніж ця точка зупинки до більшої точки зупинки." } } }, "management": { - "metaTitle": "", + "metaTitle": "Управління", "title": { "morning": "Доброго ранку, {username}", "afternoon": "Доброго дня, {username}", @@ -4498,9 +4545,9 @@ "text": "Не вдалося знайти запитуваний ресурс" }, "error": { - "title": "", - "text": "", - "digest": "" + "title": "Не вдалося завантажити цю сторінку", + "text": "Під час завантаження цієї сторінки сталася непередбачувана помилка. Навігація ще доступна — спробуйте перезавантажити або скористайтеся іншим розділом з бічної панелі.", + "digest": "Посилання на помилку: {digest}" }, "navbar": { "items": { @@ -4508,7 +4555,7 @@ "boards": "Дошки", "apps": "Додатки", "integrations": "Інтеграції", - "customWidgets": "", + "customWidgets": "Власні віджети", "searchEngies": "Пошукові системи", "medias": "Медіа", "users": { @@ -4523,12 +4570,12 @@ "label": "Інструменти", "items": { "docker": "Докер", - "kubernetes": "", + "kubernetes": "Kubernetes", "logs": "Логи", "api": "API", "certificates": "Сертифікати", "tasks": "Завдання", - "backup": "" + "backup": "Резервна копія" } }, "settings": "Налаштування", @@ -4553,8 +4600,8 @@ "integration": "Інтеграції", "app": "Додатки", "group": "Групи", - "searchEngine": "", - "media": "" + "searchEngine": "Пошукові системи", + "media": "Медіа" }, "statisticLabel": { "boards": "Дошки", @@ -4563,8 +4610,8 @@ "authorization": "Авторизація" }, "heroBanner": { - "title": "", - "subtitle": "" + "title": "З поверненням до", + "subtitle": "{app} дошка" } }, "board": { @@ -4625,8 +4672,8 @@ "includeFromAllUsers": "Включити медіа від усіх користувачів" }, "user": { - "back": "", - "fieldsDisabledExternalProvider": "", + "back": "Назад до користувачів", + "fieldsDisabledExternalProvider": "Деякі поля вимкнено через управління зовнішньою автентифікацією провайдера.", "setting": { "general": { "title": "Загальне", @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Перший день тижня", "accessibility": "Доступність", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Онбординг-тури", + "description": "Скиньте налаштування вбудованих турів, щоб побачити їх знову під час наступного відвідування області керування або панелі інструментів.", + "reset": "Скинути вбудовані тури", "resetSuccess": { - "title": "", - "message": "" + "title": "Скинути тури", + "message": "Вбудовані тури будуть показані знову при наступному відвідуванні" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Завершено", + "notStarted": "Не розпочато" }, "name": { - "management": "", - "dashboard": "" + "management": "Управління", + "dashboard": "Панель керування" } } } @@ -4688,7 +4735,7 @@ "groups": { "label": "Групи", "title": "Виберіть усі групи, учасником яких має бути користувач", - "description": "" + "description": "Група {everyoneGroup} призначена усім користувачам і не може бути видалена." }, "review": { "label": "Огляд" @@ -4714,7 +4761,7 @@ }, "copy": { "title": "Копіювати запрошення", - "description": "", + "description": "Ваше запрошення згенеровано. Після закриття цього модального вікна ви більше не зможете скопіювати це посилання. Якщо ви більше не бажаєте запрошувати цю особу, ви можете видалити це запрошення будь-коли.", "link": "Посилання на запрошення", "button": "Копіювати та закрити" }, @@ -4749,10 +4796,10 @@ "ownerOfGroupDeleted": "Власника цієї групи видалено. Наразі не має власника." }, "setting": { - "title": "", - "alert": "", + "title": "Налаштування", + "alert": "Налаштування групи є пріоритетними за порядком груп у списку. Верхні налаштування перезаписують нижні налаштування.", "board": { - "title": "" + "title": "Дошки" } }, "members": { @@ -4817,19 +4864,19 @@ "title": "Статус додатка", "enableStatusByDefault": { "label": "Увімкнути статус за замовчуванням", - "description": "" + "description": "Під час додавання елемента програми статус буде ввімкнено за замовчуванням" }, "forceDisableStatus": { - "label": "", - "description": "" + "label": "Примусово вимкнути статус", + "description": "Статус для програм буде вимкнено для всіх користувачів і його не можна буде ввімкнути" } } }, "user": { - "title": "", + "title": "Користувачі", "enableGravatar": { - "label": "", - "description": "" + "label": "Увімкнути Gravatar", + "description": "Повертається до аватарів користувачів з Libravatar/Gravatar, якщо не встановлено власний аватар, а налаштовано електронну адресу." } }, "search": { @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "Стандартна кольорова тема", "options": { - "auto": "", + "auto": "Авто", "light": "Світла", "dark": "Темна" } @@ -4862,14 +4909,14 @@ "tasks": { "title": "Завдання", "status": { - "idle": "", + "idle": "Неактивне", "running": "Запущено", "error": "Помилка", - "disabled": "" + "disabled": "Вимкнено" }, "job": { "iconsUpdater": { - "label": "" + "label": "Іконки оновлення" }, "analytics": { "label": "Аналітика" @@ -4879,74 +4926,74 @@ } }, "interval": { - "seconds": "", - "minutes": "", - "hours": "", - "midnight": "", - "weeklyMonday": "", + "seconds": "Кожні {interval, plural, =1 {секунда} other {# секунд}}", + "minutes": "Кожні {interval, plural, =1 {хвилина} other {# хвилин}}", + "hours": "Кожні {interval, plural, =1 {година} other {# годин}}", + "midnight": "Кожного дня опівночі", + "weeklyMonday": "Кожного тижня в понеділок", "update": { "success": { - "message": "" + "message": "Інтервал успішно оновлено" }, "error": { - "message": "" + "message": "Не вдалося оновити інтервал" } } }, "settings": { - "title": "" + "title": "Налаштування завдання для {jobName}" }, "field": { "name": { - "label": "" + "label": "Назва" }, "interval": { - "label": "" + "label": "Інтервал розкладу" }, "lastExecution": { - "label": "" + "label": "Останнє виконання" }, "actions": { - "label": "" + "label": "Дії" } }, "table": { - "search": "" + "search": "Шукати завдання {count}..." }, "action": { "refresh": { - "label": "" + "label": "Оновити" } }, "refresh": { "success": { - "message": "" + "message": "Завдання успішно оновлені" }, "error": { - "message": "" + "message": "Не вдалося оновити завдання" } }, "trigger": { "success": { - "message": "" + "message": "Завдання успішно запущено" }, "error": { - "message": "" + "message": "Не вдалося запустити завдання" } }, "enable": { "success": { - "message": "" + "message": "Завдання успішно ввімкнене" } }, "disable": { "success": { - "message": "" + "message": "Завдання успішно вимкнуто" } }, "toggle": { "error": { - "message": "" + "message": "Не вдалося змінити статус завдання" } } }, @@ -4971,226 +5018,226 @@ }, "modal": { "delete": { - "title": "", - "text": "" + "title": "Видалити API токен", + "text": "Це остаточно видалить токен API. Клієнти API, які використовують цей токен, більше не зможуть автентифікуватися та виконувати запити API. Цю дію не можна скасувати." } }, "table": { "header": { "id": "ІДЕНТИФІКАТОР", "createdBy": "Створено", - "actions": "" + "actions": "Дії" } } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "ШІ / MCP", + "title": "Інтеграція з ШІ", + "subtitle": "Контекстний протокол моделі (MCP) сервер", + "description": "Підключіть помічників штучного інтелекту до вашого екземпляра Homarr та керуйте всією домашньою лабораторією за допомогою природної мови. Шукайте та запитуйте медіафайли на Overseerr, керуйте контейнерами Docker, перемикайте Pi-hole, перевіряйте стан сервера, керуйте пристроями Home Assistant та багато іншого — все це за допомогою вашого помічника штучного інтелекту.", + "noApiKey": "Для аутентифікації на сервері MCP вам потрібен ключ API.", + "createApiKeyButton": "Створити API-ключ", "endpoint": { - "title": "" + "title": "Кінцева точка MCP" }, "authentication": { "title": "Аутентифікація", "intro": "Ви можете автентифікувати свій MCP-сервер, використовуючи або ключ API, або OAuth. Обидва методи дають той же рівень доступу.", "apiKey": { - "title": "", - "description": "" + "title": "Ключ API (вручну)", + "description": "Передавати повний API ключ в заголовку ApiKey в конфігурації клієнта MCP." }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (логін браузера)", + "description": "Клієнти, які підтримують OAuth (такі як Claude Code, opencode або Cursor), можуть автентифікуватися, відкривши вікно браузера. Виконайте команду auth у вашому клієнті, увійдіть до Homarr у браузері, і ви підключені — ключ API створюється автоматично.", + "hint": "На вкладці API ключі аутентифікації з'являються як звичайні ключі. Ви можете відкликати їх у будь-який час." }, - "permissions": "" + "permissions": "Ключ API визначає дозволи для AI - він працює з тим же рівнем доступу, що і власник ключа." }, "clientConfig": { - "title": "", + "title": "Налаштування клієнтів", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "Рекомендовано", + "title": "Потоковий HTTP", + "worksWith": "Працює з: Cursor, Claude Desktop, VS Code, Copilot, Windsurf, Claude Code", + "addToConfig": "Додайте до вашого файлу конфігурації MCP:", + "cursor": "{name}: {file} в вашому проекті або в глобальних налаштуваннях", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} або використовуйте {command}", + "vsCodeCopilot": "{name}: {file} в налаштуваннях робочого простору", + "replaceHint": "Замініть заповнювач ключем API, який отримали при створенні його." }, "stdio": { - "title": "", - "description": "" + "title": "stdio (legacy clients через mcp-віддалений міст)", + "description": "Для клієнтів, які підтримують лише транспорт stdio. Потрібно локально встановити {dependency} (Node.js):" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "Перевірте своє з'єднання", + "description": "Виконайте це у вашому терміналі, щоб перевірити кінцеву точку доступно, і ваш ключ API працює:", + "hint": "Успішна відповідь повертає можливості сервера MCP. Якщо ви бачите помилку, перевірте JSON відповідь на підказки." }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "Доступні інструменти", + "description": "Інструменти {count} доступні. Розширте категорію, щоб побачити окремі інструменти та їх описи.", + "columnType": "Тип", + "columnName": "Інструмент", + "columnDescription": "Опис" }, "troubleshooting": { - "title": "", + "title": "Усунення несправностей", "missingHeader": { - "title": "", - "description": "" + "title": "\"Відсутній заголовок ApiKey\"", + "description": "Ваш клієнт не надсилає заголовок {header}. Перевірте правильність розділу {section} у конфігурації MCP. Деякі клієнти потребують перезавантаження після змін конфігурації." }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"Неприпустимий формат ApiKey\"", + "description": "Переконайтеся, що ви скопіювали повний ключ API, а не просто його частину." }, "invalidKey": { - "title": "", - "description": "" + "title": "\"Неправильний ключ API\"", + "description": "Ідентифікатор ключа не знайдено або токен неправильний. Ключі API можна переглядати лише один раз при створенні. Якщо ви його втратили, видаліть старий ключ і створіть новий." }, "connectionRefused": { - "title": "", - "description": "" + "title": "Тайм-аут з'єднання розірваного / час очікування", + "description": "Переконайтеся, що URL-адреса доступна з вашого клієнта штучного інтелекту. Якщо Homarr працює за зворотним проксі-сервером або в Docker, використовуйте зовнішню URL-адресу (не {localhost}). Перевірте правильність порту (за замовчуванням: 7575 для Docker)." }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "Інструменти не відображаються", + "description": "Деякі інструменти потребують настроювання спеціальних інтеграцій (напр. Docker, Overseerr). Список інструментів залежить від того, що є у вашому екземплярі Homarr." } }, - "copy": "", + "copy": "Копіювати", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "Встановити в один дотик", + "subtitle": "Використовує OAuth - авторизація в браузері при першому використанні", + "vsCode": "Встановити у VS Code", + "cursor": "Встановити в курсор", + "copyUrl": "Копіювати URL-адресу MCP", + "copied": "Скопійовано!", + "copyHint": "Для ChatGPT, Claude Code, або будь-якого MCP клієнта", + "manualConfig": "Ручне налаштування" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Повна резервна копія бази даних", + "metaTitle": "Резервне копіювання та відновлення", "export": { - "title": "", + "title": "Експорт бази даних", "description": "Завантажте повну резервну копію вашої бази даних SQLite, включаючи всі налаштування, користувачів, дошки та зашифровані секрети інтеграції. Резервна копія містить ключ шифрування та метадані у вигляді ZIP-файлу.", "button": "Завантажити резервну копію", "error": "Помилка експорту", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Експорт конфіденційних даних", + "warningTitle": "Цей експорт містить всю вашу базу даних.", + "warningBody": "Резервне копіювання включає в себе всіх користувачів, секрети інтегрування (зашифровані), ключі API, конфігурації сайту і дані застосунків. Зберігайте експортований файл надійно і не поширюйте його.", + "typePrompt": "Введіть \"{phrase}\", щоб продовжити", + "submit": "Експорт бази даних", + "cancel": "Скасувати" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Відновлення бази даних", + "description": "Завантажити раніше експортовану резервну копію ZIP для відновлення бази даних. Це замінить усю вашу базу даних. Якщо резервне копіювання було створено за допомогою іншого ключа шифрування, секрети будуть автоматично зашифровані.", + "warning": "Відновлення резервної копії повністю замінить поточну базу даних і перезавантаже додаток. Цю дію не можна скасувати.", "dropzone": { - "title": "", - "description": "" + "title": "Перетягніть резервну копію ZIP сюди або натисніть, щоб переглянути його", + "description": "Дозволені лише .zip файли з резервної копії Homarr SQLite" }, - "changeFile": "", - "button": "", + "changeFile": "Змінити файл", + "button": "Відновлення бази даних", "success": { - "title": "", - "message": "" + "title": "Відновлення завершено", + "message": "База даних була успішно відновлена. Програма перезавантажується..." }, - "error": "" + "error": "Помилка імпорту" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Вміст резервної копії", + "exported": "Експортовано {date}", + "loading": "Аналіз файлу резервної копії...", + "errorTitle": "Помилка попереднього перегляду", + "entity": "Сутність", + "count": "Кількість", + "boards": "Контури", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Контури", + "user": "Користувачі", + "app": "Додатки", + "integration": "Інтеграції", + "item": "Віджети", + "media": "Медіа", + "search_engine": "Пошукові системи" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Не вдалося проаналізувати файл резервної копії", + "invalidMissingMetadata": "Неправильна резервна копія: метадатa.json немає", + "invalidMissingDb": "Неправильна резервна копія: відсутній db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Перетягніть сюди резервну копію ZIP", + "description": "Приймає .zip файли з резервної копії Homarr SQLite (максимум 256 Мб)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Аналіз резервної копії...", + "changeFile": "Змінити файл", + "continueToRestore": "Перейти до відновлення", + "tryAgain": "Повторіть спробу", + "analysisError": "Помилка Аналізу", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Вміст резервної копії", + "exported": "Експортовано {date}", + "entity": "Сутність", + "count": "Кількість", + "boards": "Контури", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", + "board": "Контури", + "user": "Користувачі", + "app": "Додатки", + "integration": "Інтеграції", + "item": "Віджети", "media": "Медіа", "search_engine": "Пошукові системи" }, "migrationsApplied": "Застосовано міграцію {count}", "migrationsAppliedPlural": "Застосовано міграції {count}", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsOlderVersion": "Цей бекап був із старої версії Homarr. Для її оновлення було застосовано {count} міграцію схеми.", + "migrationsOlderVersionPlural": "Ця резервна копія була зі старішої версії Homarr. Для її оновлення було застосовано {count} міграцій схеми.", + "migrationsUpToDate": "Схема бази даних є актуальною (застосовується{count} міграцій)", + "upToDate": "Остання версія", + "migrationsPending": "{count} очікується" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Застосування міграцій ({current}/{total})", + "migrationLabel": "Міграція {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Руйнівна дія", + "warningTitle": "Це назавжди замінить всю вашу базу даних.", + "warningBody": "Усі поточні дошки, користувачі, програми, інтеграції, налаштування і сеанси буде втрачено. Цю дію не можна скасувати. Програма буде перезавантажена після відновлення.", + "typePrompt": "Введіть \"{phrase}\", щоб продовжити", + "cancel": "Скасувати", + "submit": "Відновлення бази даних" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Відновлення бази даних...", + "extracting": "Розпакування архіву резервної копії", + "migrating": "Застосування міграцій бази даних", + "encrypting": "Повторне шифрування інтеграційних секретів", + "swapping": "Заміна файлу бази даних", + "restarting": "Перезапуск сервера" }, "complete": { - "title": "", - "message": "" + "title": "Відновлення завершено", + "message": "База даних була успішно відновлена. Сервер перезавантажиться - будь ласка, оновіть сторінку за декілька секунд." }, "failed": { - "title": "" + "title": "Помилка відновлення" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Неправильна резервна копія: метадатa.json немає", + "invalidMissingDb": "Неправильна резервна копія: відсутній db.sqlite", + "analyzeError": "Не вдалося проаналізувати резервну копію" } } }, @@ -5207,27 +5254,27 @@ "subtitle": "{count} - стільки людей допомагають перекладати багатьма мовами" }, "sponsors": { - "title": "", - "subtitle": "" + "title": "Спонсори", + "subtitle": "{count} , що підтримує проект фінансово" }, "libraries": { "title": "Бібліотеки", "subtitle": "{count} - стільки бібліотек використано в коді Homarr" }, "hotkeys": { - "title": "", - "subtitle": "", + "title": "Гарячі клавіші", + "subtitle": "Клавіатурні скорочення для покращення робочого процесу", "field": { - "shortcut": "", - "action": "" + "shortcut": "Скорочення", + "action": "Дія" }, "action": { - "toggleBoardEdit": "", - "toggleColorScheme": "", - "saveNotebook": "", - "openSpotlight": "" + "toggleBoardEdit": "Перемикання режиму редагування дошки", + "toggleColorScheme": "Увімкнути або вимкнути світлий/темний режим", + "saveNotebook": "Зберегти блокнот (тільки всередині віджету)", + "openSpotlight": "Відкрити пошук" }, - "note": "" + "note": "Порада: Mod стосується як клавіші Ctrl, так і клавіші ⌘ у macOS." } } } @@ -5238,13 +5285,13 @@ "table": { "updated": "Оновлено {when}", "refresh": { - "lastUpdated": "" + "lastUpdated": "Останнє оновлення {when}" }, - "search": "", + "search": "Пошук контейнерів ({count})", "selected": "Вибрано {selectCount} із {totalCount} контейнерів", - "footer": "", - "totalCpu": "", - "totalMemory": "" + "footer": "Всього {count} контейнерів ", + "totalCpu": "Всього ЦП: {cpu}%", + "totalMemory": "Всього Оперативної Пам'яті: {cpu}%" }, "field": { "name": { @@ -5257,17 +5304,17 @@ "running": "Запущено", "paused": "Призупинено", "restarting": "Перезапуск", - "exited": "", + "exited": "Вийшов", "removing": "Видалення", "dead": "Несправний" } }, "stats": { "cpu": { - "label": "" + "label": "ЦП" }, "memory": { - "label": "" + "label": "Оперативна Пам'ять" } }, "containerImage": { @@ -5277,15 +5324,15 @@ "label": "Порти" }, "host": { - "label": "" + "label": "Хост" } }, "action": { - "title": "", + "title": "Дії", "logs": { - "label": "", + "label": "Перегляд журналу", "page": { - "title": "" + "title": "Журнал {name}" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Видалити", + "confirm": "", "notification": { "success": { "title": "Контейнери видалено", @@ -5378,215 +5426,215 @@ "kubernetes": { "cluster": { "title": "Панель кластера", - "label": "", - "providers": "", - "version": "", - "architecture": "", + "label": "Кластер", + "providers": "Постачальники", + "version": "Версія", + "architecture": "Архітектура", "capacity": { - "title": "", + "title": "Місткість", "resource": { - "reserved": "", - "used": "" + "reserved": "Зарезервовано", + "used": "Використано" } }, "resources": { - "title": "", - "nodes": "", - "namespaces": "", - "ingresses": "", - "services": "", - "pods": "", - "configmaps": "", - "secrets": "", - "volumes": "" + "title": "Ресурси", + "nodes": "Вузли", + "namespaces": "Простори імен", + "ingresses": "Вхідні дані", + "services": "Служби", + "pods": "Стручки", + "configmaps": "Карти конфігурації", + "secrets": "Секрети", + "volumes": "Гучність" } }, "nodes": { - "label": "", + "label": "Вузли", "field": { "name": { - "label": "" + "label": "Назва" }, "state": { - "label": "", + "label": "Область", "option": { - "ready": "", - "NotReady": "" + "ready": "Готово", + "NotReady": "Не готово" } }, "cpu": { - "label": "" + "label": "ЦП" }, "memory": { - "label": "" + "label": "Оперативна пам'ять" }, "pods": { - "label": "" + "label": "Стручки" }, "operatingSystem": { - "label": "" + "label": "ОС" }, "architecture": { - "label": "" + "label": "Архітектура" }, "kubernetesVersion": { - "label": "" + "label": "Версія Kubernetes" }, "creationTimestamp": { - "label": "" + "label": "Створено" } }, "table": { - "search": "" + "search": "Шукати вузли {count}" } }, "namespaces": { - "label": "", + "label": "Простори назв", "field": { "name": { - "label": "" + "label": "Назва" }, "state": { - "label": "", + "label": "Область", "option": { - "active": "", - "terminating": "" + "active": "Активно", + "terminating": "Завершення" } }, "creationTimestamp": { - "label": "" + "label": "Створено" } }, "table": { - "search": "" + "search": "Шукати простори назв {count}" } }, "ingresses": { - "label": "", + "label": "Вхідні дані", "field": { "name": { - "label": "" + "label": "Назва" }, "namespace": { - "label": "" + "label": "Простір назв" }, "className": { - "label": "" + "label": "Назва класу" }, "rulesAndPaths": { - "label": "" + "label": "Правила та шляхи" }, "creationTimestamp": { - "label": "" + "label": "Створено" } }, "table": { - "search": "" + "search": "Шукати в {count} вхідні дані" } }, "services": { - "label": "", + "label": "Служби", "field": { "name": { - "label": "" + "label": "Назва" }, "namespace": { - "label": "" + "label": "Простір назв" }, "type": { - "label": "" + "label": "Тип" }, "ports": { - "label": "" + "label": "Стручки" }, "targetPorts": { - "label": "" + "label": "Цільовий порт" }, "clusterIP": { "label": "Кластер IP" }, "creationTimestamp": { - "label": "" + "label": "Створено" } }, "table": { - "search": "" + "search": "Пошук в службах {count}" } }, "pods": { - "label": "", + "label": "Капсули", "field": { "name": { - "label": "" + "label": "Назва" }, "namespace": { - "label": "" + "label": "Простір імен" }, "image": { - "label": "" + "label": "Зображення" }, "applicationType": { - "label": "" + "label": "Тип застосунку" }, "status": { - "label": "" + "label": "Статус" }, "creationTimestamp": { - "label": "" + "label": "Створено" } }, "table": { - "search": "" + "search": "Шукати {count} капсули" } }, "secrets": { - "label": "", + "label": "Секрети", "field": { "name": { - "label": "" + "label": "Назва" }, "namespace": { - "label": "" + "label": "простір імен" }, "type": { - "label": "" + "label": "тип" }, "creationTimestamp": { - "label": "" + "label": "Створено" } }, "table": { - "search": "" + "search": "Шукати секрети {count}" } }, "configmaps": { - "label": "", + "label": "Карти конфігурації", "field": { "name": { - "label": "" + "label": "Назва" }, "namespace": { - "label": "" + "label": "простір імен" }, "creationTimestamp": { - "label": "" + "label": "Створено" } }, "table": { - "search": "" + "search": "Шукати карти конфігурацій {count}" } }, "volumes": { - "label": "", + "label": "Гучність", "field": { "name": { - "label": "" + "label": "Назва" }, "namespace": { - "label": "" + "label": "Простір імен" }, "accessModes": { - "label": "" + "label": "Режим доступу" }, "storage": { "label": "Сховище" @@ -5595,24 +5643,24 @@ "label": "Назва класу сховища" }, "volumeMode": { - "label": "" + "label": "Режим гучності" }, "volumeName": { - "label": "" + "label": "Назва тому" }, "status": { - "label": "" + "label": "Статус" }, "creationTimestamp": { - "label": "" + "label": "Створено" } }, "table": { - "search": "" + "search": "Пошук томів {count}" } }, "error": { - "internalServerError": "" + "internalServerError": "Не вдалося отримати дані Kubernetes" } }, "permission": { @@ -5681,14 +5729,14 @@ } }, "custom-widgets": { - "label": "", + "label": "Користувальницькі віджети", "new": { - "label": "" + "label": "Новий" }, "edit": { - "label": "", + "label": "Редагувати", "flow": { - "label": "" + "label": "Потік" } } }, @@ -5710,39 +5758,39 @@ "tools": { "label": "Інструменти", "tasks": { - "label": "" + "label": "Завдання" }, "docker": { "label": "Докер", "logs": { - "label": "" + "label": "Журнали" } }, "kubernetes": { - "label": "", + "label": "Kubernetes", "nodes": { - "label": "" + "label": "Вузли" }, "namespaces": { - "label": "" + "label": "Простори імен" }, "ingresses": { - "label": "" + "label": "Вхідні дані" }, "services": { - "label": "" + "label": "Служби" }, "pods": { - "label": "" + "label": "капсули" }, "configmaps": { - "label": "" + "label": "Карти конфігурації" }, "secrets": { - "label": "" + "label": "Секрети" }, "volumes": { - "label": "" + "label": "Гучність" } }, "logs": { @@ -5751,7 +5799,7 @@ "certificates": { "label": "Сертифікати", "hostnames": { - "label": "" + "label": "Назви хостів" } } }, @@ -5764,10 +5812,10 @@ } }, "search": { - "placeholder": "", + "placeholder": "Пошук всього", "nothingFound": "Нічого не знайдено", "error": { - "fetch": "" + "fetch": "Під час отримання даних сталася помилка." }, "mode": { "appIntegrationBoard": { @@ -5785,7 +5833,7 @@ } }, "detail": { - "title": "" + "title": "Оберіть дію для застосунку" } } }, @@ -5807,7 +5855,7 @@ } }, "detail": { - "title": "" + "title": "Оберіть дію для дошки" } } }, @@ -5826,7 +5874,7 @@ "title": "Глобальні команди", "option": { "colorScheme": { - "auto": "", + "auto": "Перемкнути режим вигляду", "light": "Перемикнути на світлу тему", "dark": "Перемикнути на темну тему" }, @@ -5834,7 +5882,7 @@ "label": "Змінити мову", "children": { "detail": { - "title": "" + "title": "Оберіть бажану мову" } } }, @@ -5867,69 +5915,69 @@ } }, "preferences": { - "title": "", + "title": "Налаштування", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Оберіть налаштування для зміни", + "backHint": "Натисніть на Backspace або натисніть кнопку \"Назад\", щоб повернутися", + "backAction": "Повернутись назад" } }, "notification": { "error": { - "message": "" + "message": "Не вдається оновити налаштування" } }, "option": { "preferences": { - "label": "" + "label": "Відкрити налаштування" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Увімкнено", + "disabled": "Вимкнено" }, "board": { - "none": "", - "unavailable": "" + "none": "Немає", + "unavailable": "Зараз вибрано (недоступно)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Немає", + "unavailable": "Наразі вибрано (недоступно)" }, "colorScheme": { - "label": "", + "label": "Кольорова схема", "children": { "detail": { - "title": "" + "title": "Виберіть колірну схему" } } }, "locale": { - "label": "", + "label": "Мова", "children": { "detail": { - "title": "" + "title": "Виберіть бажану мову" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Пошукова система за умовчанням", "children": { "detail": { - "title": "" + "title": "Обрати пошукову систему за умовчанням" } } }, "openSearchInNewTab": { - "label": "", + "label": "Відкрити результати пошуку в новій вкладці", "children": { "detail": { - "title": "" + "title": "Відкрити результати пошуку в новій вкладці" } } }, "ddgBangs": { - "label": "", + "label": "Увімкнути Бан DuckGos", "children": { "detail": { "title": "Увімкнути Бан DuckGos" @@ -5937,7 +5985,7 @@ } }, "firstDayOfWeek": { - "label": "", + "label": "Перший день тижня", "children": { "detail": { "title": "Оберіть перший день тижня" @@ -5948,65 +5996,65 @@ "label": "Домашня дошка", "children": { "detail": { - "title": "" + "title": "Виберіть вашу домашню дошку" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Мобільна домашня дошка", "children": { "detail": { - "title": "" + "title": "Оберіть мобільну домашню дошку" } } }, "pingIconsEnabled": { - "label": "", + "label": "Використовувати значки для пінгу", "children": { "detail": { - "title": "" + "title": "Використовувати значки для пінгу" } } }, "enableRightClickOnWidgets": { - "label": "", + "label": "Увімкнути клацання правою кнопкою миші на віджетах", "children": { "detail": { - "title": "" + "title": "Увімкнути клацання правою кнопкою миші на віджетах" } } }, "fullPreferencesPage": { - "label": "" + "label": "Відкрити сторінку всіх налаштувань" } } } } }, "media": { - "help": "", + "help": "Шукайте фільми або шоу для запиту", "requestMovie": "Запросити фільм", "requestSeries": "Запросити серіал", "openIn": "Відкрити в {kind}", "group": { - "title": "" + "title": "Фільми і шоу" }, "action": { "search": { - "label": "", - "description": "", + "label": "Пошук фільмів або шоу", + "description": "Почніть вводити для пошуку інтеграції запитів", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Додати інтеграцію Overseerr, Jellyseerr, або Seerr, щоб увімкнути пошук медіа.", + "scoped": "Цей віджет не має доступної інтеграції запитів до медіа." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Доступно", + "partiallyAvailable": "Частково", + "processing": "Обробка", + "requested": "Запитано", + "pending": "Запитано" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "Пошукові системи", - "tipDdgBangs": "", + "tipDdgBangs": "Порада: можна використовувати і будь-які банди DuckDuckGo тут, наприклад, !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Шукати \"{query}\" з {label}", + "pressEnterToOpen": "Натисніть Enter, щоб відкрити", + "engineSelected": "{label} обрано (!{bang})", + "typeQueryToContinue": "Для продовження введіть пошуковий запит", + "emptyBangHint": "Введіть символ, наприклад, !yt, потім натисніть пробіл, щоб вибрати" }, "children": { "action": { @@ -6050,7 +6098,7 @@ }, "torrent": { "name": "Torrent", - "description": "" + "description": "Пошук торрентів на torrentdownloads.pro" }, "youTube": { "name": "YouTube", @@ -6091,7 +6139,7 @@ }, "no-default": { "label": "Немає стандартної пошукової системи", - "description": "" + "description": "Встановіть пошукову систему за замовчуванням у налаштуваннях" }, "search": { "label": "Пошук \"{query}\" з {name}" @@ -6113,46 +6161,46 @@ "title": "Сторінки", "option": { "manageHome": { - "label": "" + "label": "Керування домашньою сторінкою" }, "manageBoard": { - "label": "" + "label": "Керування дошками" }, "manageApp": { - "label": "" + "label": "Керування додатками" }, "manageIntegration": { - "label": "" + "label": "Керування інтеграціями" }, "manageSearchEngine": { - "label": "" + "label": "Керування пошуковими системами" }, "manageMedia": { - "label": "" + "label": "Керування медіафайлами" }, "manageUser": { "label": "Керування користувачами" }, "manageInvite": { - "label": "" + "label": "Керування запрошеннями" }, "manageGroup": { - "label": "" + "label": "Керування групами" }, "manageDocker": { - "label": "" + "label": "Керування docker" }, "manageApi": { - "label": "" + "label": "Swagger API" }, "manageLog": { - "label": "" + "label": "Переглянути журнали" }, "manageTask": { - "label": "" + "label": "Управління завданнями" }, "manageSettings": { - "label": "" + "label": "Глобальні налаштування" }, "about": { "label": "Про програму" @@ -6175,11 +6223,11 @@ "children": { "action": { "detail": { - "label": "" + "label": "Показати подробиці користувача" } }, "detail": { - "title": "" + "title": "Виберіть дію для користувача" } } }, @@ -6206,16 +6254,16 @@ } }, "engine": { - "search": "", + "search": "Знайти пошукову систему", "field": { "name": { "label": "Ім’я" }, "short": { - "label": "" + "label": "Короткий" }, "urlTemplate": { - "label": "" + "label": "Шаблон пошуку URL-адрес" }, "description": { "label": "Опис" @@ -6225,10 +6273,10 @@ "list": { "title": "Пошукові системи", "noResults": { - "title": "", - "action": "" + "title": "Пошукових систем поки що немає", + "action": "Створити свою першу пошукову систему" }, - "interactive": "" + "interactive": "Інтерактивне, використовує інтеграцію" }, "create": { "title": "Нова пошукова система", @@ -6257,7 +6305,7 @@ }, "configControl": "Конфігурація", "searchEngineType": { - "generic": "", + "generic": "Загальне", "fromIntegration": "З інтеграції" } }, @@ -6284,7 +6332,7 @@ "header": { "season": "Сезон", "episodes": "Серії", - "status": "" + "status": "Статус" }, "status": { "requested": "Запитано" @@ -6304,45 +6352,45 @@ "label": "Назва хоста" }, "subject": { - "label": "" + "label": "Тема" }, "issuer": { - "label": "" + "label": "Емітент" }, "validFrom": { - "label": "" + "label": "Діє з" }, "validTo": { - "label": "" + "label": "Діє до" }, "serialNumber": { - "label": "" + "label": "Серійний номер" }, "fingerprint": { - "label": "" + "label": "Відбиток пальця" } }, "page": { "list": { - "title": "", - "description": "", + "title": "Довірені сертифікати", + "description": "Використовується Homarr для запиту даних з інтеграцій.", "noResults": { "title": "Сертифікати відсутні" }, "invalid": { - "title": "", - "description": "" + "title": "Недійсний сертифікат", + "description": "Не вдалося розпізнати сертифікат" }, - "expires": "", - "toHostnames": "" + "expires": "Термін дії закінчується {when}", + "toHostnames": "Довірені назви хостів" }, "hostnames": { "title": "Довірені назви хостів сертифікатів", - "description": "", + "description": "Деякі сертифікати не дозволяють використовувати спеціальний домен Homarr для їх запиту, через усі довірені хости з їх псевдонімами сертифікату використовуються для обходу цих обмежень.", "noResults": { - "title": "" + "title": "Поки що немає назв хостів" }, - "toCertificates": "" + "toCertificates": "Сертифікати" } }, "action": { @@ -6374,16 +6422,16 @@ } }, "removeHostname": { - "label": "", - "confirm": "", + "label": "Вилучити довірену назву хоста", + "confirm": "Ви впевнені, що хочете видалити цю довірену назву хоста? Це може призвести до того, що деякі інтеграції перестануть працювати.", "notification": { "success": { - "title": "", - "message": "" + "title": "Назву хоста видалено", + "message": "Назву хосту успішно видалено" }, "error": { - "title": "", - "message": "" + "title": "Назву хосту не видалено", + "message": "Не вдалося видалити назву хосту" } } } @@ -6392,77 +6440,77 @@ "log": { "level": { "option": { - "debug": "", - "info": "", - "warn": "", - "error": "" + "debug": "Налагодження", + "info": "Інформація", + "warn": "Попередження", + "error": "Помилка" } } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Переглянути документацію", + "next": "Далі", + "prev": "Назад", + "done": "Готово", + "skip": "Пропустити тур", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Ласкаво просимо до Homarr!", + "description": "Це ваш центр керування. Звідси ви керуєте дошками, програмами, інтеграціями, користувачами та налаштуваннями сервера. Давайте розглянемо кожен розділ." }, "boardsList": { - "title": "", - "description": "" + "title": "Ваші дошки", + "description": "Тут перелічені всі ваші інформаційні панелі. Кожна дошка має власний макет, фон і налаштування доступу. Ви можете побачити, хто створив кожну з них і чи є вона публічною чи приватною." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Створити дошку", + "description": "Натисніть тут, щоб створити нову панель інструментів або імпортувати її з попередньої інсталяції Homarr. Кожна дошка отримує власну URL-адресу, якою ви можете поділитися." }, "appsList": { - "title": "", - "description": "" + "title": "Ваші додатки", + "description": "Це всі додані вами програми — посилання на ваші самостійно розміщені служби. Кожна програма має значок, додаткову перевірку справності та значок стану на панелі інструментів." }, "appsCreate": { - "title": "", - "description": "" + "title": "Додати додаток", + "description": "Зареєструйте тут новий сервіс. Дайте йому назву, URL-адресу та значок — він відображатиметься як плитка на ваших дошках із моніторингом статусу в реальному часі." }, "integrationsList": { - "title": "", - "description": "" + "title": "Ваші інтеграції", + "description": "Це сервіси, підключені до Homarr — Sonarr, Radarr, Plex, Jellyfin та ще 50. Усі облікові дані зашифровані в стані спокою." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Додати інтеграцію", + "description": "Підключіть новий сервіс тут. Виберіть тип, введіть URL-адресу та ключ API — Homarr перевіряє підключення перед збереженням." }, "usersList": { - "title": "", - "description": "" + "title": "Ваші користувачі", + "description": "Переглядайте всіх, хто має доступ. Організуйте користувачів у групи та контролюйте, хто може переглядати або редагувати кожну дошку." }, "usersCreate": { - "title": "", - "description": "" + "title": "Створити користувача", + "description": "Додайте тут новий обліковий запис користувача. Ви також можете використовувати посилання-запрошення для легкої реєстрації. Ось і все — все готово!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Це ваша дошка", + "description": "Інформаційна панель із можливістю перетягування, на якій ви впорядковуєте програми та віджети. Натисніть Ctrl K будь-коли, щоб шукати програми, дошки та дії." }, "editMode": { - "title": "", - "description": "" + "title": "Режим редагування", + "description": "Натисніть тут, щоб увійти в режим редагування. Ви можете додати віджети, додатки та розділи - перетягніть до зміщення за кутовим регулятором. Натисніть ще раз, щоб зберегти зміни." }, "settings": { - "title": "", - "description": "" + "title": "Налаштування дошки", + "description": "Змініть назву цієї дошки, стовпці, фон, кольори та тих, хто матиме до неї доступ. Кожна дошка може бути публічною або приватною." }, "switcher": { - "title": "", - "description": "" + "title": "Переключити дошки", + "description": "Перейти між дошками. Створіть окремі панелі для різних цілей - медіа, мережа, користувача для кожного іншого." }, "userMenu": { - "title": "", - "description": "" + "title": "Ваш профіль", + "description": "Змініть свою схему кольорів, мову, домашню дошку та налаштування. Ви також можете перейти до області керування звідси." } } } diff --git a/packages/translation/src/lang/vi.json b/packages/translation/src/lang/vi.json index 3725a7c49..017569e36 100644 --- a/packages/translation/src/lang/vi.json +++ b/packages/translation/src/lang/vi.json @@ -8,9 +8,9 @@ "action": { "scratch": "Bắt đầu từ đầu", "importOldmarr": "Nhập dữ liệu từ Homarr phiên bản trước 1.0", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Khôi phục từ bản sao lưu SQLite", + "restoreSqliteDescription": "Tải lên bản sao lưu cơ sở dữ liệu SQLite đầy đủ từ phiên bản Homarr trước. Thao tác này sẽ khôi phục tất cả bảng, người dùng, ứng dụng, tích hợp và cài đặt.", + "backToOptions": "← Quay lại tùy chọn thiết lập" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "Cấu hình cài đặt máy chủ." }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Tích hợp", + "subtitle": "Chọn dịch vụ bạn dùng.", + "description": "Chọn các tích hợp bạn muốn kết nối. Chúng tôi sẽ tự động thiết lập bảng với widget phù hợp.", "action": { - "continue": "", - "skip": "" + "continue": "Tiếp tục", + "skip": "Bỏ qua lúc này" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current} của {total}", + "skip": "Bỏ qua tích hợp này", + "finishing": "Đang thiết lập bảng của bạn...", "error": { - "title": "", - "message": "" + "title": "Thiết lập thất bại", + "message": "Đã xảy ra lỗi khi thiết lập bảng. Vui lòng thử lại." }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "Trợ giúp URL", + "description": "Những trợ giúp này cố gắng đoán URL cho dịch vụ của bạn. Nếu không hiệu quả, hãy nhập địa chỉ thủ công." } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "URL cơ sở", + "placeholder": "homelab.local hoặc 192.168.1.1", + "hint": "Nhập tên miền cơ sở hoặc IP để tự động điền URL tích hợp", + "warning": "Đặt URL cơ sở bây giờ sẽ tự động điền tất cả URL tích hợp, tiết kiệm thời gian thiết lập", + "preview": "ví dụ: {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "Tên miền phụ", + "hostPort": "Máy:Cổng" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker phát hiện {count} dịch vụ", + "detectedBreakdown": "{integrations} tích hợp · {apps} ứng dụng", + "summary": "Homarr phát hiện {apps} ứng dụng, {integrations} trong đó có tích hợp sẵn", + "appBadge": "Ứng dụng", + "appSectionLabel": "Ứng dụng thêm vào bảng ({count} đã chọn)", + "scanning": "Đang quét Docker...", + "scanningDescription": "Đang tìm container đang chạy trên hệ thống của bạn" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "Mật khẩu", - "suggestionsTitle": "", + "suggestionsTitle": "Gợi ý mật khẩu", "suggestion": { "length": "Bao gồm ít nhất 8 kí tự", "lowercase": "Bao gồm chữ thường", @@ -193,10 +193,10 @@ "label": "Mật khẩu trước đây" }, "homeBoard": { - "label": "" + "label": "Bảng chính" }, "pingIconsEnabled": { - "label": "" + "label": "Sử dụng biểu tượng cho ping" }, "enableRightClickOnWidgets": { "label": "", @@ -209,7 +209,7 @@ "label": "Mở kết quả tìm kiếm trong thẻ mới" }, "ddgBangs": { - "label": "" + "label": "Bật DuckDuckGo bangs" } }, "error": { @@ -231,7 +231,7 @@ }, "forgotPassword": { "label": "Bạn đã quên mật khẩu?", - "description": "" + "description": "Quản trị viên có thể sử dụng lệnh sau để đặt lại mật khẩu của bạn:" } }, "register": { @@ -262,10 +262,10 @@ "changeHomeBoard": { "notification": { "success": { - "message": "" + "message": "Đã thay đổi bảng chính thành công" }, "error": { - "message": "" + "message": "Không thể thay đổi bảng chính" } } }, @@ -292,20 +292,20 @@ "changePingIconsEnabled": { "notification": { "success": { - "message": "" + "message": "Đã bật/tắt biểu tượng ping thành công" }, "error": { - "message": "" + "message": "Không thể bật/tắt biểu tượng ping" } } }, "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "Đã bật/tắt DuckDuckGo bangs thành công" }, "error": { - "message": "" + "message": "Không thể bật/tắt DuckDuckGo bangs" } } }, @@ -397,14 +397,14 @@ }, "use-all": { "label": "Sử dụng tất cả các ứng dụng", - "description": "" + "description": "Cho phép thành viên thêm bất kỳ ứng dụng nào vào bảng của họ" }, "modify-all": { - "label": "", - "description": "" + "label": "Sửa đổi tất cả ứng dụng", + "description": "Cho phép thành viên sửa đổi tất cả ứng dụng" }, "full-all": { - "label": "", + "label": "Toàn quyền truy cập ứng dụng", "description": "Cho phép thành viên quản lý, tạo và xóa mọi ứng dụng" } } @@ -413,50 +413,50 @@ "title": "Bảng", "item": { "create": { - "label": "", - "description": "" + "label": "Tạo bảng", + "description": "Cho phép thành viên tạo bảng" }, "view-all": { - "label": "", - "description": "" + "label": "Xem tất cả bảng", + "description": "Cho phép thành viên xem tất cả bảng" }, "modify-all": { - "label": "", - "description": "" + "label": "Sửa đổi tất cả bảng", + "description": "Cho phép thành viên sửa đổi tất cả bảng (Không bao gồm kiểm soát truy cập và vùng nguy hiểm)" }, "full-all": { - "label": "", - "description": "" + "label": "Toàn quyền truy cập bảng", + "description": "Cho phép thành viên xem, sửa đổi và xóa tất cả bảng (Bao gồm kiểm soát truy cập và vùng nguy hiểm)" } } }, "integration": { - "title": "", + "title": "Tích hợp", "item": { "create": { - "label": "", - "description": "" + "label": "Tạo tích hợp", + "description": "Cho phép thành viên tạo tích hợp" }, "use-all": { - "label": "", - "description": "" + "label": "Sử dụng tất cả tích hợp", + "description": "Cho phép thành viên thêm bất kỳ tích hợp nào vào bảng của họ" }, "interact-all": { - "label": "", - "description": "" + "label": "Tương tác với bất kỳ tích hợp nào", + "description": "Cho phép thành viên tương tác với bất kỳ tích hợp nào" }, "full-all": { - "label": "", - "description": "" + "label": "Toàn quyền truy cập tích hợp", + "description": "Cho phép thành viên quản lý, sử dụng và tương tác với bất kỳ tích hợp nào" } } }, "media": { - "title": "", + "title": "Media", "item": { "upload": { - "label": "", - "description": "" + "label": "Tải lên media", + "description": "Cho phép thành viên tải lên media" }, "view-all": { "label": "Xem tất cả media", @@ -489,18 +489,18 @@ "description": "Cho phép thành viên nhóm này sửa đổi tất cả công cụ tìm kiếm" }, "full-all": { - "label": "", - "description": "" + "label": "Toàn quyền truy cập công cụ tìm kiếm", + "description": "Cho phép thành viên quản lý và xóa mọi công cụ tìm kiếm" } } } }, "memberNotice": { - "mixed": "", - "external": "" + "mixed": "Một số thành viên đến từ nhà cung cấp bên ngoài và không thể quản lý tại đây", + "external": "Tất cả thành viên đến từ nhà cung cấp bên ngoài và không thể quản lý tại đây" }, "reservedNotice": { - "message": "" + "message": "Nhóm này dành riêng cho hệ thống sử dụng và hạn chế một số hành động. " }, "action": { "create": { @@ -523,7 +523,7 @@ "message": "Đã chuyển thành công quyền sở hữu nhóm {group} cho {username}" }, "error": { - "message": "" + "message": "Không thể chuyển quyền sở hữu" } } }, @@ -532,46 +532,46 @@ }, "removeMember": { "label": "Xóa thành viên khỏi nhóm", - "confirm": "" + "confirm": "Bạn có chắc chắn muốn xóa {user} khỏi nhóm này không?" }, "delete": { "label": "Xóa nhóm", - "description": "", + "description": "Khi bạn xóa một nhóm, không thể hoàn tác. Hãy chắc chắn.", "confirm": "Bạn chắc chắn muốn xóa nhóm {name}?", "notification": { "success": { "message": "Đã xóa nhóm {name} thành công" }, "error": { - "message": "" + "message": "Không thể xóa nhóm {name}" } } }, "changePermissions": { "notification": { "success": { - "title": "", - "message": "" + "title": "Đã lưu quyền", + "message": "Quyền đã được lưu thành công" }, "error": { - "title": "", - "message": "" + "title": "Quyền chưa được lưu", + "message": "Quyền chưa được lưu" } } }, "update": { "notification": { "success": { - "message": "" + "message": "Nhóm {name} đã được lưu thành công" }, "error": { - "message": "" + "message": "Không thể lưu nhóm {name}" } } }, "select": { - "label": "", - "notFound": "" + "label": "Chọn nhóm", + "notFound": "Không tìm thấy nhóm" }, "settings": { "board": { @@ -617,39 +617,39 @@ "title": "Ứng dụng mới", "notification": { "success": { - "title": "", - "message": "" + "title": "Tạo thành công", + "message": "Ứng dụng đã được tạo thành công" }, "error": { - "title": "", - "message": "" + "title": "Tạo không thành công", + "message": "Không thể tạo ứng dụng" } } }, "edit": { - "title": "", + "title": "Chỉnh sửa ứng dụng", "notification": { "success": { - "title": "", - "message": "" + "title": "Thay đổi đã được áp dụng thành công", + "message": "Ứng dụng đã được lưu thành công" }, "error": { - "title": "", - "message": "" + "title": "Không thể áp dụng thay đổi", + "message": "Không thể lưu ứng dụng" } } }, "delete": { - "title": "", - "message": "", + "title": "Xóa ứng dụng", + "message": "Bạn có chắc chắn muốn xóa ứng dụng {name} không?", "notification": { "success": { - "title": "", - "message": "" + "title": "Xóa thành công", + "message": "Ứng dụng đã được xóa thành công" }, "error": { - "title": "", - "message": "" + "title": "Xóa không thành công", + "message": "Không thể xóa ứng dụng" } } } @@ -896,22 +896,22 @@ "integration": { "page": { "list": { - "title": "", - "search": "", + "title": "Tích hợp", + "search": "Tìm kiếm tích hợp", "noResults": { - "title": "" + "title": "Chưa có tích hợp nào" } }, "create": { - "title": "", + "title": "Tích hợp {name} mới", "notification": { "success": { - "title": "", - "message": "" + "title": "Tạo thành công", + "message": "Tích hợp đã được tạo thành công" }, "error": { - "title": "", - "message": "" + "title": "Tạo không thành công", + "message": "Không thể tạo tích hợp" } }, "app": { @@ -931,15 +931,15 @@ } }, "edit": { - "title": "", + "title": "Chỉnh sửa tích hợp {name}", "notification": { "success": { - "title": "", - "message": "" + "title": "Thay đổi đã được áp dụng thành công", + "message": "Tích hợp đã được lưu thành công" }, "error": { - "title": "", - "message": "" + "title": "Không thể áp dụng thay đổi", + "message": "Không thể lưu tích hợp" } }, "app": { @@ -951,16 +951,16 @@ } }, "delete": { - "title": "", - "message": "", + "title": "Xóa tích hợp", + "message": "Bạn có chắc chắn muốn xóa tích hợp {name} không?", "notification": { "success": { - "title": "", - "message": "" + "title": "Xóa thành công", + "message": "Tích hợp đã được xóa thành công" }, "error": { - "title": "", - "message": "" + "title": "Xóa không thành công", + "message": "Không thể xóa tích hợp" } } } @@ -987,44 +987,44 @@ "placeholder": "" }, "apiKeySettings": { - "label": "" + "label": "Lấy khóa API" } }, "action": { - "create": "" + "create": "Tích hợp mới" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} widget", + "noWidgets": "Không có widget", + "detected": "Phát hiện qua Docker" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", + "dnsHole": "DNS", + "mediaService": "Phương tiện", + "calendar": "Lịch", + "mediaSearch": "Tìm kiếm", + "mediaRelease": "Phát hành", + "mediaRequest": "Yêu cầu", + "downloadClient": "Tải xuống", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "Khác", + "smartHomeServer": "Nhà thông minh", + "indexerManager": "Bộ lập chỉ mục", + "healthMonitoring": "Sức khỏe", + "search": "Tìm kiếm", + "mediaTranscoding": "Chuyển mã", + "networkController": "Mạng", + "releasesProvider": "Phát hành", + "notifications": "Thông báo", + "firewall": "Tường lửa", + "timetable": "Thời khóa biểu", + "photoService": "Ảnh", "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", + "notes": "Ghi chú", + "mediaMonitoring": "Giám sát", + "speedtest": "Kiểm tra tốc độ", + "analytics": "Phân tích", "vpn": "", "mediaLibrary": "", "uptimeMonitoring": "" @@ -1160,71 +1160,71 @@ } } }, - "alertNotice": "", + "alertNotice": "Nút Lưu được kích hoạt sau khi kết nối thành công", "notification": { "success": { - "title": "", - "message": "" + "title": "Kết nối thành công", + "message": "Kết nối đã được thiết lập thành công" }, "invalidUrl": { "title": "URL không hợp lệ", - "message": "" + "message": "URL không hợp lệ" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "Thiếu thông tin xác thực", + "message": "Chưa cung cấp đầy đủ thông tin xác thực" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "Thông tin xác thực không hợp lệ", + "message": "Thông tin xác thực không hợp lệ" }, "commonError": { - "title": "", - "message": "" + "title": "Kết nối không thành công", + "message": "Không thể thiết lập kết nối" }, "badRequest": { - "title": "", - "message": "" + "title": "Yêu cầu không hợp lệ", + "message": "Yêu cầu bị sai định dạng" }, "unauthorized": { - "title": "", - "message": "" + "title": "Trái phép", + "message": "Có thể sai thông tin xác thực" }, "forbidden": { - "title": "", - "message": "" + "title": "Bị cấm", + "message": "Có thể thiếu quyền" }, "notFound": { - "title": "", - "message": "" + "title": "Không tìm thấy", + "message": "Có thể sai url hoặc đường dẫn" }, "internalServerError": { - "title": "", - "message": "" + "title": "Lỗi máy chủ nội bộ", + "message": "Máy chủ gặp lỗi" }, "serviceUnavailable": { - "title": "", - "message": "" + "title": "Dịch vụ không khả dụng", + "message": "Máy chủ hiện không khả dụng" }, "connectionAborted": { - "title": "", - "message": "" + "title": "Kết nối bị hủy", + "message": "Kết nối đã bị hủy" }, "domainNotFound": { - "title": "", - "message": "" + "title": "Không tìm thấy tên miền", + "message": "Không thể tìm thấy tên miền" }, "connectionRefused": { - "title": "", - "message": "" + "title": "Kết nối bị từ chối", + "message": "Kết nối đã bị từ chối" }, "invalidJson": { "title": "JSON không hợp lệ", - "message": "" + "message": "Phản hồi không phải JSON hợp lệ" }, "wrongPath": { - "title": "", - "message": "" + "title": "Sai đường dẫn", + "message": "Đường dẫn có thể không chính xác" }, "tooManyRequests": { "title": "", @@ -1233,29 +1233,29 @@ } }, "secrets": { - "title": "", - "lastUpdated": "", + "title": "Bí mật", + "lastUpdated": "Cập nhật lần cuối {date}", "notSet": { "label": "", "tooltip": "" }, - "secureNotice": "", + "secureNotice": "Bí mật này không thể truy xuất sau khi tạo", "reset": { - "title": "", - "message": "" + "title": "Đặt lại bí mật", + "message": "Bạn có chắc chắn muốn đặt lại bí mật này không?" }, "noSecretsRequired": { - "segmentTitle": "", - "text": "" + "segmentTitle": "Không có bí mật", + "text": "Tích hợp này không yêu cầu bí mật" }, "kind": { "username": { "label": "Tên người dùng", - "newLabel": "" + "newLabel": "Tên người dùng mới" }, "apiKey": { - "label": "", - "newLabel": "" + "label": "Khóa API", + "newLabel": "Khóa API mới" }, "password": { "label": "Mật khẩu", @@ -1316,9 +1316,9 @@ } }, "permission": { - "use": "", - "interact": "", - "full": "" + "use": "Chọn tích hợp trong các mục", + "interact": "Tương tác với tích hợp", + "full": "Toàn quyền truy cập tích hợp" }, "audiobookshelf": { "name": "", @@ -1358,8 +1358,8 @@ } }, "media": { - "plural": "", - "search": "", + "plural": "Media", + "search": "Tìm media", "field": { "name": "Tên", "size": "Kích cỡ", @@ -1367,137 +1367,137 @@ }, "action": { "upload": { - "label": "", - "file": "", + "label": "Tải lên media", + "file": "Chọn tệp", "notification": { "success": { - "message": "" + "message": "Media đã được tải lên thành công" }, "error": { - "message": "" + "message": "Không thể tải lên media" } } }, "delete": { - "label": "", - "description": "", + "label": "Xóa media", + "description": "Bạn có chắc chắn muốn xóa media không?", "notification": { "success": { - "message": "" + "message": "Media đã được xóa thành công" }, "error": { - "message": "" + "message": "Không thể xóa media" } } }, "copy": { - "label": "" + "label": "Sao chép URL" }, "open": { "label": "" } }, "noResults": { - "title": "" + "title": "Chưa tải lên phương tiện" } }, "common": { "success": "", - "beta": "", + "beta": "Bản beta", "error": "Lỗi", "action": { "add": "Thêm", "apply": "Áp dụng", "backToOverview": "Trở về mục tổng quan", - "skip": "", + "skip": "Bỏ qua", "change": "", "create": "Tạo nên", "createAnother": "", "edit": "Sửa", - "import": "", + "import": "Nhập", "insert": "Thêm", "remove": "Xóa", "save": "Lưu", "saveChanges": "Lưu thay đổi", "cancel": "Hủy", "delete": "Xóa", - "discard": "", + "discard": "Hủy bỏ", "close": "", "confirm": "Xác nhận", - "continue": "", + "continue": "Tiếp tục", "previous": "Trước", "next": "Kế tiếp", - "checkoutDocs": "", + "checkoutDocs": "Xem tài liệu", "checkLogs": "", "tryAgain": "Thử lại", - "loading": "", - "show": "", - "hide": "" + "loading": "Đang tải", + "show": "Hiện", + "hide": "Ẩn" }, - "here": "", + "here": "tại đây", "iconPicker": { - "label": "", - "header": "", + "label": "URL biểu tượng", + "header": "Nhập tên hoặc đối tượng để lọc biểu tượng... Homarr sẽ tìm qua {countIcons} biểu tượng cho bạn.", "headerLoading": "", "noResults": "", "error": "" }, "colorScheme": { "options": { - "auto": "", + "auto": "Tự động", "light": "", "dark": "" } }, "information": { - "min": "", - "max": "", - "days": "", + "min": "Tối thiểu", + "max": "Tối đa", + "days": "Ngày", "hours": "Giờ", "minutes": "Phút" }, "notification": { "create": { - "success": "", - "error": "" + "success": "Tạo thành công", + "error": "Tạo không thành công" }, "delete": { - "success": "", - "error": "" + "success": "Xóa thành công", + "error": "Xóa không thành công" }, "update": { - "success": "", - "error": "" + "success": "Thay đổi đã được áp dụng thành công", + "error": "Không thể áp dụng thay đổi" }, "transfer": { - "success": "", - "error": "" + "success": "Chuyển thành công", + "error": "Chuyển không thành công" } }, "multiSelect": { - "placeholder": "" + "placeholder": "Chọn một hoặc nhiều giá trị" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "Thêm giá trị khác", + "addLabel": "Thêm {value}" }, "select": { - "placeholder": "", + "placeholder": "Chọn giá trị", "badge": { - "recommended": "" + "recommended": "Được đề xuất" } }, "userAvatar": { "menu": { - "switchToDarkMode": "", + "switchToDarkMode": "Chuyển sang chế độ tối", "switchToLightMode": "Đổi qua chế độ nền sáng", - "management": "", + "management": "Quản lý", "docker": "", "preferences": "Cá nhân hoá", - "logout": "", + "logout": "Đăng xuất", "login": "Đăng nhập", - "homeBoard": "", - "loggedOut": "", + "homeBoard": "Bảng chính của bạn", + "loggedOut": "Đã đăng xuất", "updateAvailable": "" } }, @@ -1508,8 +1508,8 @@ "applications": "", "services": "", "preview": { - "show": "", - "hide": "" + "show": "Hiển thị xem trước", + "hide": "Ẩn xem trước" }, "zod": { "errors": { @@ -1519,7 +1519,7 @@ "startsWith": "Trường này phải bắt đầu bằng {startsWith}", "endsWith": "Trường này phải kết thúc bằng {endsWith}", "includes": "Trường này phải bao gồm {includes}", - "invalidEmail": "" + "invalidEmail": "Trường này phải là email hợp lệ" }, "tooSmall": { "string": "Trường này phải dài ít nhất {minimum} ký tự", @@ -1530,13 +1530,13 @@ "number": "Trường này phải nhỏ hơn hoặc bằng {maximum}" }, "custom": { - "passwordsDoNotMatch": "", - "passwordRequirements": "", - "boardAlreadyExists": "", - "invalidFileType": "", + "passwordsDoNotMatch": "Mật khẩu không khớp", + "passwordRequirements": "Mật khẩu không đáp ứng yêu cầu", + "boardAlreadyExists": "Bảng có tên này đã tồn tại", + "invalidFileType": "Loại tệp không hợp lệ, dự kiến {expected}", "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", + "fileTooLarge": "Tệp quá lớn, kích thước tối đa là {maxSize}", + "invalidConfiguration": "Cấu hình không hợp lệ", "groupNameTaken": "" } } @@ -1551,8 +1551,8 @@ "section": { "dynamic": { "action": { - "create": "", - "remove": "" + "create": "Phần động mới", + "remove": "Xóa phần động" }, "option": { "title": { @@ -1566,8 +1566,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Xóa phần động", + "message": "Bạn có chắc chắn muốn xóa phần động này không? Các mục sẽ được chuyển đến cùng vị trí trong phần cha." } }, "category": { @@ -1577,32 +1577,32 @@ } }, "action": { - "create": "", - "edit": "", - "remove": "", + "create": "Danh mục mới", + "edit": "Đổi tên danh mục", + "remove": "Xóa danh mục", "moveUp": "Đi lên", "moveDown": "Đi xuống", - "createAbove": "", - "createBelow": "", + "createAbove": "Danh mục mới phía trên", + "createBelow": "Danh mục mới phía dưới", "openAllInNewTabs": "" }, "create": { - "title": "", - "submit": "" + "title": "Danh mục mới", + "submit": "Thêm danh mục" }, "remove": { - "title": "", - "message": "" + "title": "Xóa danh mục", + "message": "Bạn có chắc chắn muốn xóa danh mục {name} không?" }, "edit": { - "title": "", - "submit": "" + "title": "Đổi tên danh mục", + "submit": "Đổi tên danh mục" }, "menu": { "label": { - "create": "", + "create": "Danh mục mới", "changePosition": "Đổi vị trí", - "settings": "" + "settings": "Cài đặt" } }, "openAllInNewTabs": { @@ -1613,12 +1613,12 @@ }, "item": { "action": { - "create": "", - "import": "", - "edit": "", - "moveResize": "", - "duplicate": "", - "remove": "" + "create": "Mục mới", + "import": "Nhập mục", + "edit": "Chỉnh sửa mục", + "moveResize": "Di chuyển / đổi cỡ mục", + "duplicate": "Nhân bản mục", + "remove": "Xóa mục" }, "menu": { "label": { @@ -1635,12 +1635,12 @@ } }, "create": { - "title": "", + "title": "Chọn mục để thêm", "search": "", - "addToBoard": "" + "addToBoard": "Thêm vào bảng" }, "moveResize": { - "title": "", + "title": "Di chuyển / đổi cỡ mục", "field": { "width": { "label": "Chiều rộng" @@ -1649,35 +1649,35 @@ "label": "Chiều cao" }, "xOffset": { - "label": "" + "label": "Dịch chuyển X" }, "yOffset": { - "label": "" + "label": "Dịch chuyển Y" } } }, "edit": { - "title": "", + "title": "Chỉnh sửa mục", "tab": { - "widget": "", - "app": "" + "widget": "Chỉnh sửa widget", + "app": "Chỉnh sửa ứng dụng" }, "app": { - "propagationNotice": "" + "propagationNotice": "Thay đổi ứng dụng này sẽ áp dụng cho mọi nơi nó được dùng trên tất cả bảng." }, "advancedOptions": { - "label": "", - "title": "" + "label": "Tùy chọn nâng cao", + "title": "Tùy chọn mục nâng cao" }, "field": { "integrations": { - "label": "" + "label": "Tích hợp" }, "title": { "label": "" }, "customCssClasses": { - "label": "" + "label": "Lớp css tùy chỉnh" }, "borderColor": { "label": "" @@ -1685,8 +1685,8 @@ } }, "remove": { - "title": "", - "message": "" + "title": "Xóa mục", + "message": "Bạn có chắc chắn muốn xóa mục này không?" } }, "widget": { @@ -1698,17 +1698,17 @@ "loadError": "" }, "app": { - "name": "", - "description": "", + "name": "Ứng dụng", + "description": "Nhúng một ứng dụng vào bảng.", "option": { "appId": { - "label": "" + "label": "Chọn ứng dụng" }, "openInNewTab": { "label": "Mở trong tab mới" }, "showTitle": { - "label": "" + "label": "Hiện tên ứng dụng" }, "pingEnabled": { "label": "" @@ -1734,17 +1734,17 @@ }, "error": { "notFound": { - "label": "", - "tooltip": "" + "label": "Không có ứng dụng", + "tooltip": "Bạn chưa chọn ứng dụng hợp lệ" } } }, "bookmarks": { - "name": "", - "description": "", + "name": "Dấu trang", + "description": "Hiển thị nhiều liên kết ứng dụng", "option": { "title": { - "label": "" + "label": "Tiêu đề" }, "layout": { "label": "Bố cục", @@ -1756,7 +1756,7 @@ "label": "Thẳng đứng" }, "grid": { - "label": "" + "label": "Lưới" }, "gridHorizontal": { "label": "" @@ -1776,11 +1776,11 @@ "label": "" }, "withBorder": { - "label": "" + "label": "Hiển thị viền" }, "items": { - "label": "", - "add": "" + "label": "Dấu trang", + "add": "Thêm dấu trang" } } }, @@ -1794,8 +1794,8 @@ } }, "dnsHoleSummary": { - "name": "", - "description": "", + "name": "Tổng quan DNS Hole", + "description": "Hiển thị tổng quan về DNS Hole của bạn", "option": { "layout": { "label": "Bố cục", @@ -1807,28 +1807,28 @@ "label": "Thẳng đứng" }, "grid": { - "label": "" + "label": "Lưới" } } }, "usePiHoleColors": { - "label": "" + "label": "Sử dụng màu Pi-Hole" } }, "error": { - "internalServerError": "", - "integrationsDisconnected": "" + "internalServerError": "Không thể lấy Tổng quan DNS Hole", + "integrationsDisconnected": "Không có dữ liệu, tất cả tích hợp bị ngắt kết nối" }, "data": { "adsBlockedToday": "Đã chặn hôm nay", "adsBlockedTodayPercentage": "Đã chặn hôm nay", "dnsQueriesToday": "Truy vấn hôm nay", - "domainsBeingBlocked": "" + "domainsBeingBlocked": "Tên miền trong danh sách chặn" }, "domainsTooltip": "" }, "dnsHoleControls": { - "name": "", + "name": "Điều khiển DNS Hole", "description": "Kiểm soát PiHole hoặc AdGuard từ bảng điều khiển của bạn", "option": { "layout": { @@ -1841,62 +1841,62 @@ "label": "Thẳng đứng" }, "grid": { - "label": "" + "label": "Lưới" } } }, "showToggleAllButtons": { - "label": "" + "label": "Hiện nút Bật/Tắt Tất cả" } }, "error": { - "internalServerError": "" + "internalServerError": "Không thể điều khiển DNS Hole" }, "controls": { - "enableAll": "", - "disableAll": "", - "setTimer": "", + "enableAll": "Bật tất cả", + "disableAll": "Tắt tất cả", + "setTimer": "Đặt hẹn giờ", "set": "Đặt", "enabled": "Bật", "disabled": "Tắt", - "processing": "", - "disconnected": "", + "processing": "Đang xử lý", + "disconnected": "Đã ngắt kết nối", "hours": "Giờ", "minutes": "Phút", - "unlimited": "" + "unlimited": "Để trống để không giới hạn" } }, "clock": { - "name": "", + "name": "Ngày và giờ", "description": "Hiện thị ngày giờ hiện tại.", "option": { "customTitleToggle": { - "label": "", - "description": "" + "label": "Hiển thị tiêu đề/thành phố tùy chỉnh", + "description": "Hiển thị tiêu đề tùy chỉnh hoặc tên thành phố/quốc gia phía trên đồng hồ." }, "customTitle": { - "label": "" + "label": "Tiêu đề" }, "is24HourFormat": { - "label": "", - "description": "" + "label": "Định dạng 24 giờ", + "description": "Sử dụng định dạng 24 giờ thay vì 12 giờ" }, "showSeconds": { - "label": "" + "label": "Hiển thị giây" }, "useCustomTimezone": { - "label": "" + "label": "Sử dụng múi giờ cố định" }, "timezone": { "label": "Múi giờ", - "description": "" + "description": "Chọn múi giờ theo tiêu chuẩn IANA" }, "showDate": { - "label": "" + "label": "Hiển thị ngày" }, "dateFormat": { - "label": "", - "description": "" + "label": "Định dạng ngày", + "description": "Ngày tháng sẽ hiển thị như thế nào" }, "customTimeFormat": { "label": "", @@ -1953,7 +1953,7 @@ }, "notebook": { "name": "Ghi chú", - "description": "", + "description": "Một widget sổ tay đơn giản hỗ trợ markdown", "option": { "showToolbar": { "label": "Hiển thị thanh công cụ giúp bạn viết markdown" @@ -2052,7 +2052,7 @@ "saveFailed": "" }, "iframe": { - "name": "", + "name": "iFrame", "description": "Nhúng bất kỳ nội dung nào từ internet. Một số trang web có thể hạn chế quyền truy cập.", "option": { "embedUrl": { @@ -2087,32 +2087,32 @@ } }, "error": { - "noUrl": "", + "noUrl": "Chưa cung cấp URL iFrame", "unsupportedProtocol": "", "noBrowerSupport": "Trình duyệt của bạn không hỗ trợ iframe. Vui lòng cập nhật trình duyệt của bạn." } }, "smartHome-entityState": { - "name": "", - "description": "", + "name": "Trạng thái Thực thể", + "description": "Hiển thị trạng thái của một thực thể và có thể bật/tắt nó", "option": { "entityId": { "label": "ID thực thể" }, "displayName": { - "label": "" + "label": "Tên hiển thị" }, "entityUnit": { - "label": "" + "label": "Đơn vị Thực thể" }, "clickable": { - "label": "" + "label": "Có thể nhấp" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "Thực thi Tự động hóa", + "description": "Kích hoạt một tự động hóa chỉ với một cú nhấp", "option": { "displayName": { "label": "Tên hiển thị" @@ -2203,7 +2203,7 @@ }, "calendar": { "name": "Lịch", - "description": "", + "description": "Hiển thị sự kiện từ các tích hợp của bạn trong chế độ xem lịch trong một khoảng thời gian tương đối nhất định", "duration": { "allDay": "" }, @@ -2211,16 +2211,16 @@ "releaseType": { "label": "Loại phát hành Radarr", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "Tại rạp", + "digitalRelease": "Phát hành kỹ thuật số", + "physicalRelease": "Phát hành vật lý" } }, "filterPastMonths": { - "label": "" + "label": "Bắt đầu từ" }, "filterFutureMonths": { - "label": "" + "label": "Kết thúc tại" }, "showUnmonitored": { "label": "" @@ -2232,7 +2232,7 @@ "description": "Hiển thị thông tin thời tiết của vị trí được đặt.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Nhiệt độ theo Fahrenheit" }, "disableTemperatureDecimals": { "label": "" @@ -2248,18 +2248,18 @@ "label": "Vị trí thời tiết" }, "showCity": { - "label": "" + "label": "Hiển thị thành phố" }, "hasForecast": { - "label": "" + "label": "Hiển thị dự báo" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Số ngày dự báo", + "description": "Khi widget không đủ rộng, sẽ hiển thị ít ngày hơn" }, "dateFormat": { - "label": "", - "description": "" + "label": "Định dạng ngày", + "description": "Ngày tháng sẽ hiển thị như thế nào" } }, "currentWindSpeed": "", @@ -2288,35 +2288,35 @@ } }, "indexerManager": { - "name": "", - "description": "", + "name": "Trạng thái quản lý indexer", + "description": "Trạng thái của các indexer của bạn", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Mở trang indexer trong tab mới" } }, - "title": "", - "testAll": "", + "title": "Quản lý indexer", + "testAll": "Kiểm tra tất cả", "error": { - "internalServerError": "" + "internalServerError": "Không thể lấy trạng thái indexer" } }, "healthMonitoring": { "name": "Giám sát tình trạng hệ thống", - "description": "", + "description": "Hiển thị thông tin về tình trạng và trạng thái hệ thống của bạn.", "tab": { "system": "", "cluster": "" }, "option": { "fahrenheit": { - "label": "" + "label": "Nhiệt độ CPU theo Fahrenheit" }, "cpu": { - "label": "" + "label": "Hiển thị thông tin CPU" }, "memory": { - "label": "" + "label": "Hiển thị thông tin Bộ nhớ" }, "gpu": { "label": "" @@ -2325,7 +2325,7 @@ "label": "" }, "fileSystem": { - "label": "" + "label": "Hiển thị thông tin Hệ thống tệp" }, "visibleStorageVolumes": { "label": "", @@ -2343,22 +2343,22 @@ } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", + "information": "Thông tin", + "processor": "Bộ xử lý: {cpuModelName}", + "memory": "Bộ nhớ: {memory}GiB", + "memoryAvailable": "Khả dụng: {memoryAvailable}GiB ({percent}%)", + "version": "Phiên bản: {version}", "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", + "loadAverage": "Tải trung bình:", + "minute": "1 phút", + "minutes": "{count} phút", + "used": "Đã sử dụng", "available": "Khả dụng", - "lastSeen": "" + "lastSeen": "Cập nhật trạng thái lần cuối: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "Không thể lấy trạng thái sức khỏe" }, "cluster": { "summary": { @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2474,34 +2485,34 @@ "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "Giám sát trạng thái thiết bị UPS qua máy chủ NUT", "option": { "showBattery": { - "label": "" + "label": "Hiển thị pin" }, "showLoad": { - "label": "" + "label": "Hiển thị tải" }, "showVoltage": { - "label": "" + "label": "Hiển thị điện áp" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "Trực tuyến", + "onBattery": "Đang dùng pin", + "lowBattery": "Pin yếu", + "charging": "Đang sạc", + "unknown": "Không rõ" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "Thời gian chạy", + "load": "Tải", + "input": "Đầu vào", + "output": "Đầu ra" }, "error": { - "internalServerError": "" + "internalServerError": "Không thể lấy dữ liệu UPS" } }, "tracearr": { @@ -2584,96 +2595,96 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "30 ngày qua", + "month": "Tháng này", + "lastMonth": "Tháng trước" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "Sự kiện", + "description": "Hiển thị tổng số lần xuất hiện của một sự kiện cụ thể", + "placeholder": "Chọn một sự kiện", + "loading": "Đang tải sự kiện...", + "noEvents": "Không tìm thấy sự kiện", + "none": "Không có sự kiện", + "configureWebsiteFirst": "Chọn một trang web trước để tải sự kiện" }, "chartType": { - "label": "", - "description": "", + "label": "Loại biểu đồ", + "description": "Kiểu hiển thị cho biểu đồ", "option": { - "bar": "", - "sparkline": "" + "bar": "Biểu đồ cột", + "sparkline": "Sparkline" } }, "chartStyle": { - "label": "", - "description": "", + "label": "Kiểu biểu đồ", + "description": "Cách hiển thị chuỗi sự kiện trong biểu đồ", "option": { - "grouped": "", - "overlay": "" + "grouped": "Cạnh nhau", + "overlay": "Lớp phủ (tập con)" } }, "viewMode": { - "label": "", - "description": "", + "label": "Chế độ xem", + "description": "Hiển thị gì trong thân widget", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "Biểu đồ", + "events": "Biểu đồ sự kiện", + "topPages": "Trang hàng đầu", + "topReferrers": "Giới thiệu hàng đầu" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "Sự kiện", + "description": "Chọn một hoặc nhiều sự kiện để vẽ biểu đồ", + "placeholder": "Chọn sự kiện...", + "loading": "Đang tải sự kiện...", + "noEvents": "Không tìm thấy sự kiện", + "configureWebsiteFirst": "Chọn một trang web trước để tải sự kiện" }, "topCount": { - "label": "", - "description": "" + "label": "Số mục hiển thị", + "description": "Số mục hàng đầu cần hiển thị (tối đa 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "sự kiện", + "label": "sự kiện" }, "topPages": { - "direct": "" + "direct": "Trực tiếp" }, "topReferrers": { - "direct": "" + "direct": "Trực tiếp" }, "events": { - "selectPrompt": "" + "selectPrompt": "Chọn sự kiện để vẽ biểu đồ" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "Chưa cấu hình tích hợp Umami", + "noWebsite": "Chưa cấu hình trang web", + "noData": "Không có dữ liệu", + "internalServerError": "Không thể lấy dữ liệu Umami" } }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", + "query": "Thành phố / Mã bưu chính", + "latitude": "Vĩ độ", + "longitude": "Kinh độ", + "disabledTooltip": "Vui lòng nhập thành phố hoặc mã bưu chính", + "unknownLocation": "Vị trí không xác định", "search": "Tìm kiếm", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "Thành phố", + "country": "Quốc gia", + "coordinates": "Tọa độ", + "population": "Dân số" }, "action": { - "select": "" + "select": "Chọn {city}, {countryCode}" }, "population": { "fallback": "Không rõ" @@ -2681,17 +2692,17 @@ } }, "integration": { - "noData": "", - "description": "" + "noData": "Không tìm thấy tích hợp", + "description": "Nhấp để tạo tích hợp mới" }, "app": { - "noData": "", - "description": "", + "noData": "Không tìm thấy ứng dụng", + "description": "Nhấp để tạo ứng dụng mới", "quickCreate": "" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "Chưa chọn tích hợp", + "noData": "Không có dữ liệu tích hợp" }, "option": {} }, @@ -2704,29 +2715,41 @@ }, "hasAutoPlay": { "label": "Tự động phát", - "description": "" + "description": "Tự động phát chỉ hoạt động khi tắt tiếng do hạn chế của trình duyệt" }, "isMuted": { - "label": "" + "label": "Tắt tiếng" }, "hasControls": { - "label": "" + "label": "Hiển thị điều khiển" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "Chưa cung cấp URL Video", + "forYoutubeUseIframe": "Đối với video YouTube, hãy sử dụng tùy chọn iframe" } }, "mediaServer": { - "name": "", - "description": "", + "name": "Luồng máy chủ media hiện tại", + "description": "Hiển thị các luồng hiện tại trên máy chủ media của bạn", "option": { "showOnlyPlaying": { "label": "", "description": "" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "", "user": "", @@ -2734,6 +2757,9 @@ "id": "", "status": "", "directPlay": "", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", "transcoding": "", "paused": "", "remaining": "", @@ -3040,151 +3066,178 @@ "noPhotos": "" }, "downloads": { - "name": "", - "description": "", + "name": "Trình tải xuống", + "description": "Cho phép bạn xem và quản lý các tải xuống từ cả Torrent và Usenet.", "option": { "columns": { - "label": "" + "label": "Các cột cần hiển thị" }, "enableRowSorting": { - "label": "" + "label": "Bật sắp xếp mục" }, "defaultSort": { - "label": "" + "label": "Cột dùng để sắp xếp mặc định" }, "descendingDefaultSort": { - "label": "" + "label": "Đảo ngược sắp xếp" }, "showCompletedUsenet": { - "label": "" + "label": "Hiển thị các mục usenet đã hoàn thành" }, "showCompletedTorrent": { - "label": "" + "label": "Hiển thị các mục torrent đã hoàn thành" }, "showCompletedHttp": { "label": "" }, "activeTorrentThreshold": { - "label": "" + "label": "Ẩn torrent đã hoàn thành dưới ngưỡng này (kiB/s)" }, "categoryFilter": { - "label": "" + "label": "Danh mục/nhãn để lọc" }, "filterIsWhitelist": { - "label": "" + "label": "Lọc như danh sách trắng" }, "applyFilterToRatio": { - "label": "" + "label": "Sử dụng bộ lọc để tính Tỷ lệ" }, "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { - "noColumns": "", - "noCommunications": "" + "noColumns": "Chọn Cột trong Mục", + "noCommunications": "Không thể tải dữ liệu từ tích hợp", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { - "columnTitle": "" + "columnTitle": "Điều khiển" }, "added": { - "columnTitle": "", + "columnTitle": "Đã thêm", "detailsTitle": "Ngày thêm" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Bổ sung", + "detailsTitle": "Danh mục (Hoặc thông tin bổ sung)" }, "downSpeed": { "columnTitle": "Tải xuống", "detailsTitle": "Tốc độ tải" }, "index": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "STT", + "detailsTitle": "Chỉ mục hiện tại trong client" }, "id": { - "columnTitle": "" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "Tích hợp" }, "name": { - "columnTitle": "" + "columnTitle": "Tên công việc" }, "progress": { "columnTitle": "Tiến độ", - "detailsTitle": "" + "detailsTitle": "Tiến độ tải xuống" }, "ratio": { "columnTitle": "Tỉ lệ", - "detailsTitle": "" + "detailsTitle": "Tỷ lệ torrent (nhận/gửi)" }, "received": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Tổng tải xuống", + "detailsTitle": "Tổng dung lượng đã tải xuống" }, "sent": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Tổng tải lên", + "detailsTitle": "Tổng dung lượng đã tải lên" }, "size": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Kích thước tệp", + "detailsTitle": "Tổng kích thước lựa chọn/tệp" }, "state": { "columnTitle": "Trạng thái", - "detailsTitle": "" + "detailsTitle": "Trạng thái công việc" }, "time": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Thời gian hoàn thành", + "detailsTitle": "Thời gian từ/đến khi hoàn thành", + "eta": "" }, "type": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Loại", + "detailsTitle": "Loại Trình tải xuống" }, "upSpeed": { "columnTitle": "Tải lên", - "detailsTitle": "" + "detailsTitle": "Tốc độ tải lên" } }, "states": { "downloading": "Đang tải", - "queued": "", + "queued": "Đã xếp hàng", "paused": "Tạm dừng", "completed": "Đã hoàn thành", - "failed": "", - "processing": "", - "leeching": "", - "stalled": "", + "failed": "Thất bại", + "processing": "Đang xử lý", + "leeching": "Đang tải", + "stalled": "Đình trệ", "unknown": "Không rõ", - "seeding": "" + "seeding": "Đang chia sẻ" }, "actions": { "clients": { - "modalTitle": "", - "pause": "", - "resume": "" + "modalTitle": "Danh sách trình tải xuống", + "pause": "Tạm dừng tất cả client/mục", + "resume": "Tiếp tục tất cả client/mục" }, "client": { - "pause": "", - "resume": "" + "pause": "Tạm dừng client", + "resume": "Tiếp tục client" }, "item": { - "pause": "", - "resume": "", + "pause": "Tạm dừng mục", + "resume": "Tiếp tục mục", "delete": { - "title": "", - "modalTitle": "", - "entry": "", - "entryAndFiles": "" + "title": "Xóa mục", + "modalTitle": "Bạn có chắc chắn muốn xóa công việc này không?", + "entry": "Xóa mục nhập", + "entryAndFiles": "Xóa mục nhập và (các) tệp" } } }, - "globalRatio": "" + "globalRatio": "Tỷ lệ toàn cục", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3216,7 +3269,7 @@ } }, "mediaRequests-requestList": { - "name": "", + "name": "Danh sách Yêu cầu Media", "description": "Xem danh sách các yêu cầu đa phương tiện từ Overseerr hoặc Jellyseerr của bạn", "option": { "linksTargetNewTab": { @@ -3230,14 +3283,14 @@ } }, "pending": { - "approve": "", - "approving": "", - "decline": "" + "approve": "Phê duyệt yêu cầu", + "approving": "Đang phê duyệt yêu cầu...", + "decline": "Từ chối yêu cầu" }, "availability": { "unknown": "Không rõ", - "pending": "", - "processing": "", + "pending": "Đang chờ", + "processing": "Đang xử lý", "requested": "", "partiallyAvailable": "Một phần", "available": "Khả dụng", @@ -3251,10 +3304,10 @@ "failed": "", "completed": "" }, - "toBeDetermined": "" + "toBeDetermined": "Chưa xác định" }, "mediaRequests-requestStats": { - "name": "", + "name": "Thống kê Yêu cầu Media", "description": "Thống kê về các yêu cầu đa phương tiện của bạn", "option": {}, "titles": { @@ -3262,16 +3315,16 @@ "main": "Thống kê truyền thông", "approved": "Đã được phê duyệt", "pending": "Chờ duyệt", - "processing": "", - "declined": "", - "available": "", + "processing": "Đang xử lý", + "declined": "Đã bị từ chối", + "available": "Đã có sẵn", "tv": "Yêu cầu TV", "movie": "Yêu cầu phim", "total": "Tổng cộng" }, "users": { "main": "Người dùng hàng đầu", - "requests": "" + "requests": "Yêu cầu" } } }, @@ -3364,20 +3417,20 @@ "timeLeft": "" }, "rssFeed": { - "name": "", - "description": "", + "name": "Nguồn cấp RSS", + "description": "Giám sát và hiển thị một hoặc nhiều nguồn cấp RSS, ATOM hoặc JSON chung", "option": { "feedUrls": { - "label": "" + "label": "URL nguồn cấp" }, "enableRtl": { - "label": "" + "label": "Bật RTL" }, "textLinesClamp": { - "label": "" + "label": "Giới hạn dòng mô tả" }, "maximumAmountPosts": { - "label": "" + "label": "Giới hạn số lượng bài đăng" }, "hideDescription": { "label": "" @@ -3741,18 +3794,6 @@ "label": "", "description": "" }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, "showLibraryCount": { "label": "", "description": "" @@ -3786,8 +3827,6 @@ "podcasts": "", "listeningTime": "", "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", "error": { "internalServerError": "" } @@ -3883,110 +3922,118 @@ "executeFailed": "" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel Systems (Bảng)", + "description": "Dạng bảng của tất cả hệ thống được Beszel giám sát với các cột có thể sắp xếp và chỉ báo trạng thái", "option": { "statusFilter": { - "label": "" + "label": "Bộ lọc trạng thái" }, "sortBy": { - "label": "" + "label": "Sắp xếp theo" }, "sortDirection": { - "label": "" + "label": "Hướng sắp xếp" }, "showCpu": { - "label": "" + "label": "Hiển thị CPU" }, "showMemory": { - "label": "" + "label": "Hiển thị bộ nhớ" }, "showDisk": { - "label": "" + "label": "Hiển thị đĩa" }, "showGpu": { - "label": "" + "label": "Hiển thị GPU" }, "showLoadAvg": { - "label": "" + "label": "Hiển thị tải trung bình" }, "showNet": { - "label": "" + "label": "Hiển thị mạng" }, "showTemp": { - "label": "" + "label": "Hiển thị nhiệt độ" }, "showBattery": { - "label": "" + "label": "Hiển thị pin" }, "showServices": { - "label": "" + "label": "Hiển thị dịch vụ" }, "showUptime": { - "label": "" + "label": "Hiển thị thời gian hoạt động" }, "showAgent": { + "label": "Hiển thị phiên bản tác tử" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "Không tìm thấy hệ thống", "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "Hệ thống", + "cpu": "CPU", + "memory": "Bộ nhớ", + "disk": "Đĩa", + "gpu": "GPU", + "loadAvg": "Tải Trung Bình", + "net": "Mạng", + "temp": "Nhiệt độ", + "battery": "Pin", + "services": "Dịch vụ", + "uptime": "Thời gian hoạt động", + "agent": "Tác tử" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel Systems (Lưới)", + "description": "Dạng lưới thẻ của tất cả hệ thống được Beszel giám sát với các số liệu thời gian thực", "option": { "statusFilter": { - "label": "" + "label": "Bộ lọc trạng thái" }, "showCpu": { - "label": "" + "label": "Hiển thị CPU" }, "showMemory": { - "label": "" + "label": "Hiển thị bộ nhớ" }, "showDisk": { - "label": "" + "label": "Hiển thị đĩa" }, "showGpu": { - "label": "" + "label": "Hiển thị GPU" }, "showLoadAvg": { - "label": "" + "label": "Hiển thị tải trung bình" }, "showNet": { - "label": "" + "label": "Hiển thị mạng" }, "showTemp": { - "label": "" + "label": "Hiển thị nhiệt độ" }, "showBattery": { - "label": "" + "label": "Hiển thị pin" }, "showServices": { - "label": "" + "label": "Hiển thị dịch vụ" }, "showUptime": { - "label": "" + "label": "Hiển thị thời gian hoạt động" }, "showAgent": { - "label": "" + "label": "Hiển thị phiên bản tác tử" } }, "error": { @@ -3996,39 +4043,39 @@ "noSystems": "" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "CPU", + "memory": "Bộ nhớ", + "disk": "Đĩa", + "gpu": "GPU", + "loadAvg": "Tải Trung Bình", + "net": "Mạng", + "temp": "Nhiệt độ", + "battery": "Pin", + "services": "Dịch vụ", + "uptime": "Thời gian hoạt động", + "agent": "Tác tử" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Cảnh báo Beszel", + "description": "Xem cấu hình và lịch sử cảnh báo Beszel", "option": { "showHistory": { - "label": "" + "label": "Hiển thị lịch sử cảnh báo" }, "maxHistoryItems": { - "label": "" + "label": "Mục lịch sử tối đa" } }, - "empty": "", + "empty": "Không có cảnh báo nào được cấu hình", "error": { "internalServerError": "" }, - "history": "", - "resolved": "", + "history": "Lịch sử", + "resolved": "Đã giải quyết", "status": { - "triggered": "", - "ok": "" + "triggered": "Đã kích hoạt", + "ok": "OK" } }, "beszelSystemStats": { @@ -4128,11 +4175,11 @@ }, "widgetPreview": { "toggle": { - "enabled": "", - "disabled": "" + "enabled": "Đã bật chế độ chỉnh sửa", + "disabled": "Đã tắt chế độ chỉnh sửa" }, "dimensions": { - "title": "" + "title": "Thay đổi kích thước" } }, "board": { @@ -4154,52 +4201,52 @@ "edit": { "notification": { "success": { - "title": "", - "message": "" + "title": "Thay đổi đã được áp dụng thành công", + "message": "Bảng đã được lưu thành công" }, "error": { - "title": "", - "message": "" + "title": "Không thể áp dụng thay đổi", + "message": "Không thể lưu bảng" } }, "confirmLeave": { - "title": "", - "message": "" + "title": "Thay đổi chưa lưu", + "message": "Bạn có thay đổi chưa lưu, bạn có chắc chắn muốn rời đi không?" } }, "oldImport": { - "label": "", + "label": "Nhập từ Homarr trước 1.0.0", "notification": { "success": { - "title": "", - "message": "" + "title": "Nhập thành công", + "message": "Bảng đã được nhập thành công" }, "error": { - "title": "", - "message": "" + "title": "Nhập không thành công", + "message": "Không thể nhập bảng, kiểm tra nhật ký để biết chi tiết" } }, "form": { "file": { - "label": "", - "invalidError": "" + "label": "Chọn tệp JSON", + "invalidError": "Tệp cấu hình không hợp lệ" }, "apps": { "label": "Ứng dụng", "avoidDuplicates": { - "label": "", - "description": "" + "label": "Tránh trùng lặp", + "description": "Bỏ qua ứng dụng nếu đã có ứng dụng cùng href" }, "onlyImportApps": { - "label": "", - "description": "" + "label": "Chỉ nhập ứng dụng", + "description": "Chỉ thêm ứng dụng, cần tạo lại bảng thủ công" } }, "name": { - "label": "" + "label": "Tên bảng" }, "screenSize": { - "label": "", + "label": "Kích thước màn hình", "description": "", "option": { "sm": "Bé nhỏ", @@ -4208,16 +4255,16 @@ } }, "sidebarBehavior": { - "label": "", - "description": "", + "label": "Hành vi thanh bên", + "description": "Thanh bên đã bị loại bỏ trong 1.0, bạn có thể chọn điều gì xảy ra với các mục bên trong.", "option": { "lastSection": { - "label": "", - "description": "" + "label": "Phần cuối cùng", + "description": "Thanh bên sẽ hiển thị bên dưới phần cuối cùng" }, "removeItems": { - "label": "", - "description": "" + "label": "Xóa mục", + "description": "Các mục trong thanh bên sẽ bị xóa" } } } @@ -4232,19 +4279,19 @@ }, "field": { "pageTitle": { - "label": "" + "label": "Tiêu đề trang" }, "metaTitle": { - "label": "" + "label": "Tiêu đề meta" }, "logoImageUrl": { - "label": "" + "label": "URL hình ảnh logo" }, "faviconImageUrl": { - "label": "" + "label": "URL favicon" }, "backgroundImageUrl": { - "label": "", + "label": "URL hình ảnh nền", "placeholder": "", "group": { "your": "", @@ -4255,24 +4302,24 @@ "label": "Vị trí ảnh nền", "option": { "fixed": { - "label": "", - "description": "" + "label": "Cố định", + "description": "Hình nền giữ nguyên vị trí." }, "scroll": { - "label": "", - "description": "" + "label": "Cuộn", + "description": "Hình nền cuộn theo chuột." } } }, "backgroundImageRepeat": { - "label": "", + "label": "Lặp hình nền", "option": { "repeat": { - "label": "", - "description": "" + "label": "Lặp", + "description": "Hình ảnh được lặp lại khi cần để phủ toàn bộ khu vực nền." }, "no-repeat": { - "label": "", + "label": "Không lặp", "description": "" }, "repeat-x": { @@ -4528,7 +4575,7 @@ "api": "", "certificates": "", "tasks": "", - "backup": "" + "backup": "Sao lưu" } }, "settings": "Cài đặt", @@ -4609,7 +4656,7 @@ "private": "" }, "noResults": { - "title": "" + "title": "Chưa có bảng" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "Ngày đầu tiên trong tuần", "accessibility": "Trợ năng", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "Hướng dẫn giới thiệu", + "description": "Đặt lại hướng dẫn giới thiệu để xem lại vào lần truy cập khu vực quản lý hoặc bảng tiếp theo.", + "reset": "Đặt lại hướng dẫn giới thiệu", "resetSuccess": { - "title": "", - "message": "" + "title": "Đã đặt lại hướng dẫn", + "message": "Hướng dẫn giới thiệu sẽ hiển thị lại vào lần truy cập tiếp theo" }, "status": { - "completed": "", - "notStarted": "" + "completed": "Đã hoàn thành", + "notStarted": "Chưa bắt đầu" }, "name": { - "management": "", - "dashboard": "" + "management": "Quản lý", + "dashboard": "Bảng" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "", "options": { - "auto": "", + "auto": "Tự động", "light": "", "dark": "" } @@ -5075,122 +5122,122 @@ } }, "backup": { - "title": "", - "metaTitle": "", + "title": "Sao lưu toàn bộ cơ sở dữ liệu", + "metaTitle": "Sao lưu & Khôi phục", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "Xuất cơ sở dữ liệu", + "description": "Tải xuống bản sao lưu đầy đủ của cơ sở dữ liệu SQLite bao gồm tất cả cài đặt, người dùng, bảng và bí mật tích hợp đã mã hóa. Bản sao lưu được đóng gói dưới dạng tệp ZIP với khóa mã hóa và siêu dữ liệu.", + "button": "Tải xuống bản sao lưu", + "error": "Xuất thất bại", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "Xuất dữ liệu nhạy cảm", + "warningTitle": "Bản xuất này chứa toàn bộ cơ sở dữ liệu của bạn.", + "warningBody": "Bản sao lưu bao gồm tất cả người dùng, bí mật tích hợp (đã mã hóa), khóa API, cấu hình bảng và dữ liệu ứng dụng. Lưu trữ tệp đã xuất an toàn và không chia sẻ.", + "typePrompt": "Nhập \"{phrase}\" để tiếp tục", + "submit": "Xuất cơ sở dữ liệu", + "cancel": "Hủy" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "Khôi phục cơ sở dữ liệu", + "description": "Tải lên tệp ZIP sao lưu đã xuất trước đó để khôi phục cơ sở dữ liệu. Điều này sẽ thay thế toàn bộ cơ sở dữ liệu của bạn. Nếu bản sao lưu được tạo với khóa mã hóa khác, bí mật sẽ được tự động mã hóa lại.", + "warning": "Khôi phục bản sao lưu sẽ thay thế hoàn toàn cơ sở dữ liệu hiện tại và khởi động lại ứng dụng. Hành động này không thể hoàn tác.", "dropzone": { - "title": "", - "description": "" + "title": "Kéo tệp ZIP sao lưu vào đây hoặc nhấp để duyệt", + "description": "Chỉ chấp nhận tệp .zip từ bản sao lưu SQLite của Homarr" }, - "changeFile": "", - "button": "", + "changeFile": "Thay đổi tập tin", + "button": "Khôi phục cơ sở dữ liệu", "success": { - "title": "", - "message": "" + "title": "Khôi phục hoàn tất", + "message": "Cơ sở dữ liệu đã được khôi phục thành công. Ứng dụng đang khởi động lại..." }, - "error": "" + "error": "Nhập thất bại" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "Nội dung bản sao lưu", + "exported": "Đã xuất {date}", + "loading": "Đang phân tích tệp sao lưu...", + "errorTitle": "Lỗi xem trước", + "entity": "Thực thể", + "count": "Số lượng", + "boards": "Bảng", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Bảng", + "user": "Người dùng", + "app": "Ứng dụng", + "integration": "Tích hợp", + "item": "Widget", + "media": "Phương tiện", + "search_engine": "Công cụ tìm kiếm" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "Không thể phân tích tệp sao lưu", + "invalidMissingMetadata": "Sao lưu không hợp lệ: thiếu metadata.json", + "invalidMissingDb": "Sao lưu không hợp lệ: thiếu db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "Kéo tệp ZIP sao lưu vào đây", + "description": "Chấp nhận tệp .zip từ bản sao lưu SQLite của Homarr (tối đa 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "Đang phân tích bản sao lưu...", + "changeFile": "Thay đổi tập tin", + "continueToRestore": "Tiếp tục khôi phục", + "tryAgain": "Thử lại", + "analysisError": "Lỗi phân tích", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "Nội dung bản sao lưu", + "exported": "Đã xuất {date}", + "entity": "Thực thể", + "count": "Số lượng", + "boards": "Bảng", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "Bảng", + "user": "Người dùng", + "app": "Ứng dụng", + "integration": "Tích hợp", + "item": "Widget", + "media": "Phương tiện", + "search_engine": "Công cụ tìm kiếm" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "{count} di chuyển đã áp dụng", + "migrationsAppliedPlural": "{count} di chuyển đã áp dụng", + "migrationsOlderVersion": "Bản sao lưu này từ phiên bản Homarr cũ hơn. {count} lần di chuyển lược đồ đã được áp dụng để cập nhật.", + "migrationsOlderVersionPlural": "Bản sao lưu này từ phiên bản Homarr cũ hơn. {count} lần di chuyển lược đồ đã được áp dụng để cập nhật.", + "migrationsUpToDate": "Lược đồ cơ sở dữ liệu đã cập nhật ({count} lần di chuyển đã áp dụng)", + "upToDate": "Đã cập nhật", + "migrationsPending": "{count} đang chờ" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "Đang áp dụng di chuyển ({current}/{total})", + "migrationLabel": "Di chuyển {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "Hành động hủy diệt", + "warningTitle": "Điều này sẽ thay thế vĩnh viễn toàn bộ cơ sở dữ liệu của bạn.", + "warningBody": "Tất cả bảng, người dùng, ứng dụng, tích hợp, cài đặt và phiên hiện tại sẽ bị mất. Hành động này không thể hoàn tác. Ứng dụng sẽ khởi động lại sau khi khôi phục.", + "typePrompt": "Nhập \"{phrase}\" để tiếp tục", + "cancel": "Hủy", + "submit": "Khôi phục cơ sở dữ liệu" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "Đang khôi phục cơ sở dữ liệu...", + "extracting": "Đang giải nén lưu trữ sao lưu", + "migrating": "Đang áp dụng di chuyển cơ sở dữ liệu", + "encrypting": "Đang mã hóa lại bí mật tích hợp", + "swapping": "Đang thay thế tệp cơ sở dữ liệu", + "restarting": "Đang khởi động lại máy chủ" }, "complete": { - "title": "", - "message": "" + "title": "Khôi phục hoàn tất", + "message": "Cơ sở dữ liệu đã được khôi phục thành công. Máy chủ đang khởi động lại — vui lòng làm mới trang sau vài giây." }, "failed": { - "title": "" + "title": "Khôi phục thất bại" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "Sao lưu không hợp lệ: thiếu metadata.json", + "invalidMissingDb": "Sao lưu không hợp lệ: thiếu db.sqlite", + "analyzeError": "Không thể phân tích bản sao lưu" } } }, @@ -5277,15 +5324,15 @@ "label": "Cổng" }, "host": { - "label": "" + "label": "Máy chủ" } }, "action": { "title": "", "logs": { - "label": "", + "label": "Xem nhật ký", "page": { - "title": "" + "title": "Nhật ký {name}" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "Xóa", + "confirm": "", "notification": { "success": { "title": "", @@ -5715,7 +5763,7 @@ "docker": { "label": "", "logs": { - "label": "" + "label": "Nhật ký" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "", "option": { "colorScheme": { - "auto": "", + "auto": "Chuyển đổi chế độ giao diện", "light": "", "dark": "" }, @@ -5867,104 +5915,104 @@ } }, "preferences": { - "title": "", + "title": "Tùy chọn", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "Chọn một tùy chọn để thay đổi", + "backHint": "Nhấn Backspace hoặc dùng nút quay lại để trở về", + "backAction": "Quay lại" } }, "notification": { "error": { - "message": "" + "message": "Không thể cập nhật tùy chọn" } }, "option": { "preferences": { - "label": "" + "label": "Mở tùy chọn" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "Bật", + "disabled": "Tắt" }, "board": { - "none": "", - "unavailable": "" + "none": "Không", + "unavailable": "Đang chọn (không khả dụng)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "Không", + "unavailable": "Đang chọn (không khả dụng)" }, "colorScheme": { - "label": "", + "label": "Bảng màu", "children": { "detail": { - "title": "" + "title": "Chọn bảng màu của bạn" } } }, "locale": { - "label": "", + "label": "Ngôn ngữ", "children": { "detail": { - "title": "" + "title": "Chọn ngôn ngữ ưa thích của bạn" } } }, "defaultSearchEngineId": { - "label": "", + "label": "Công cụ tìm kiếm mặc định", "children": { "detail": { - "title": "" + "title": "Chọn công cụ tìm kiếm mặc định" } } }, "openSearchInNewTab": { - "label": "", + "label": "Mở kết quả tìm kiếm trong thẻ mới", "children": { "detail": { - "title": "" + "title": "Mở kết quả tìm kiếm trong thẻ mới" } } }, "ddgBangs": { - "label": "", + "label": "Bật DuckDuckGo bangs", "children": { "detail": { - "title": "" + "title": "Bật DuckDuckGo bangs" } } }, "firstDayOfWeek": { - "label": "", + "label": "Ngày đầu tiên trong tuần", "children": { "detail": { - "title": "" + "title": "Chọn ngày đầu tiên trong tuần" } } }, "homeBoardId": { - "label": "", + "label": "Bảng chính", "children": { "detail": { - "title": "" + "title": "Chọn bảng chính của bạn" } } }, "mobileHomeBoardId": { - "label": "", + "label": "Bảng chính cho di động", "children": { "detail": { - "title": "" + "title": "Chọn bảng chính cho di động" } } }, "pingIconsEnabled": { - "label": "", + "label": "Dùng biểu tượng cho ping", "children": { "detail": { - "title": "" + "title": "Dùng biểu tượng cho ping" } } }, @@ -5977,36 +6025,36 @@ } }, "fullPreferencesPage": { - "label": "" + "label": "Mở trang tùy chọn đầy đủ" } } } } }, "media": { - "help": "", + "help": "Tìm kiếm phim hoặc chương trình để yêu cầu", "requestMovie": "", "requestSeries": "", "openIn": "", "group": { - "title": "" + "title": "Phim và chương trình" }, "action": { "search": { - "label": "", - "description": "", + "label": "Tìm kiếm phim hoặc chương trình", + "description": "Bắt đầu nhập để tìm kiếm tích hợp yêu cầu phương tiện của bạn", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "Thêm tích hợp Overseerr, Jellyseerr, hoặc Seerr để bật tìm kiếm phương tiện.", + "scoped": "Widget này không có tích hợp yêu cầu phương tiện có thể truy cập." } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "Khả dụng", + "partiallyAvailable": "Một phần", + "processing": "Đang xử lý", + "requested": "Đã yêu cầu", + "pending": "Đã yêu cầu" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "", - "tipDdgBangs": "", + "tipDdgBangs": "Mẹo: Bạn có thể dùng bất kỳ DuckDuckGo bang nào ở đây, ví dụ: !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "Tìm kiếm \"{query}\" với {label}", + "pressEnterToOpen": "Nhấn Enter để mở", + "engineSelected": "Đã chọn {label} (!{bang})", + "typeQueryToContinue": "Nhập truy vấn tìm kiếm để tiếp tục", + "emptyBangHint": "Nhập một bang, ví dụ: !yt, sau đó nhấn Space để chọn" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "", "episodes": "", - "status": "" + "status": "Trạng thái" }, "status": { - "requested": "" + "requested": "Đã yêu cầu" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "Đọc tài liệu", + "next": "Kế tiếp", + "prev": "Quay lại", + "done": "Xong", + "skip": "Bỏ qua hướng dẫn", "manage": { "welcome": { - "title": "", - "description": "" + "title": "Chào mừng đến với Homarr!", + "description": "Đây là trung tâm điều khiển của bạn. Từ đây bạn quản lý bảng, ứng dụng, tích hợp, người dùng và cài đặt máy chủ. Hãy tham quan từng phần." }, "boardsList": { - "title": "", - "description": "" + "title": "Bảng của bạn", + "description": "Đây là tất cả bảng của bạn. Mỗi bảng có bố cục, nền và cài đặt truy cập riêng. Bạn có thể thấy ai tạo từng bảng và nó công khai hay riêng tư." }, "boardsCreate": { - "title": "", - "description": "" + "title": "Tạo bảng", + "description": "Nhấp vào đây để tạo bảng mới hoặc nhập từ bản cài đặt Homarr trước đó. Mỗi bảng có URL riêng bạn có thể chia sẻ." }, "appsList": { - "title": "", - "description": "" + "title": "Ứng dụng của bạn", + "description": "Đây là tất cả ứng dụng bạn đã thêm — liên kết đến dịch vụ tự lưu trữ. Mỗi ứng dụng có biểu tượng, kiểm tra sức khỏe tùy chọn và huy hiệu trạng thái trên bảng." }, "appsCreate": { - "title": "", - "description": "" + "title": "Thêm ứng dụng", + "description": "Đăng ký dịch vụ mới ở đây. Đặt tên, URL và biểu tượng — nó sẽ xuất hiện dưới dạng ô trên bảng với giám sát trạng thái trực tiếp." }, "integrationsList": { - "title": "", - "description": "" + "title": "Tích hợp của bạn", + "description": "Đây là các dịch vụ kết nối với Homarr — Sonarr, Radarr, Plex, Jellyfin và hơn 50 nữa. Tất cả thông tin đăng nhập được mã hóa khi lưu trữ." }, "integrationsCreate": { - "title": "", - "description": "" + "title": "Thêm tích hợp", + "description": "Kết nối dịch vụ mới ở đây. Chọn loại, nhập URL và khóa API — Homarr xác thực kết nối trước khi lưu." }, "usersList": { - "title": "", - "description": "" + "title": "Người dùng của bạn", + "description": "Xem tất cả những ai có quyền truy cập. Sắp xếp người dùng thành nhóm và kiểm soát ai có thể xem hoặc chỉnh sửa từng bảng." }, "usersCreate": { - "title": "", - "description": "" + "title": "Tạo người dùng", + "description": "Thêm tài khoản người dùng mới ở đây. Bạn cũng có thể dùng liên kết mời để dễ dàng giới thiệu. Hết hướng dẫn — bạn đã sẵn sàng!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "Đây là bảng của bạn", + "description": "Một bảng kéo-thả nơi bạn sắp xếp ứng dụng và widget. Nhấn Ctrl+K bất cứ lúc nào để tìm kiếm ứng dụng, bảng và hành động." }, "editMode": { - "title": "", - "description": "" + "title": "Chế độ chỉnh sửa", + "description": "Nhấp vào đây để vào chế độ chỉnh sửa. Sau đó bạn có thể thêm widget, ứng dụng và phần — kéo để đặt lại vị trí, đổi kích thước bằng núm góc. Nhấp lần nữa để lưu thay đổi." }, "settings": { - "title": "", - "description": "" + "title": "Cài đặt bảng", + "description": "Thay đổi tên, cột, nền, màu sắc và ai có thể truy cập bảng này. Mỗi bảng có thể công khai hoặc riêng tư." }, "switcher": { - "title": "", - "description": "" + "title": "Chuyển bảng", + "description": "Chuyển đổi giữa các bảng. Tạo bảng riêng cho các mục đích khác nhau — phương tiện, mạng, mỗi người dùng, hoặc bất cứ gì bạn thích." }, "userMenu": { - "title": "", - "description": "" + "title": "Hồ sơ của bạn", + "description": "Thay đổi bảng màu, ngôn ngữ, bảng chính và tùy chọn. Bạn cũng có thể chuyển đến khu vực quản lý từ đây." } } } diff --git a/packages/translation/src/lang/zh.json b/packages/translation/src/lang/zh.json index b5ea05ad6..58e679768 100644 --- a/packages/translation/src/lang/zh.json +++ b/packages/translation/src/lang/zh.json @@ -8,9 +8,9 @@ "action": { "scratch": "重新開始", "importOldmarr": "從 1.0 版本的 Homarr 匯入設定", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "從 SQLite 備份還原", + "restoreSqliteDescription": "上傳先前 Homarr 執行個體的完整 SQLite 資料庫備份。這將還原所有面板、使用者、應用程式、整合和設定。", + "backToOptions": "← 返回設定選項" } }, "import": { @@ -94,45 +94,45 @@ "subtitle": "設定伺服器的設定" }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "整合", + "subtitle": "選取你使用的服務。", + "description": "選擇你要連接的整合。我們將會自動為你的儀表板設定相符的小工具。", "action": { - "continue": "", - "skip": "" + "continue": "繼續", + "skip": "暫時略過" }, "configure": { - "progress": "", - "skip": "", - "finishing": "", + "progress": "{current}/{total}", + "skip": "略過此整合", + "finishing": "正在設定你的儀表板……", "error": { - "title": "", - "message": "" + "title": "設定失敗", + "message": "設定儀表板時發生錯誤。請再試一次。" }, "helpers": { - "tooltip": "", - "description": "" + "tooltip": "URL 幫手", + "description": "這些幫手會嘗試猜測你的服務 URL。如果無效,請手動輸入位址。" } }, "urlTemplate": { - "label": "", - "placeholder": "", - "hint": "", - "warning": "", - "preview": "", + "label": "基礎 URL", + "placeholder": "homelab.local 或 192.168.1.1", + "hint": "輸入你的基礎網域或 IP 以自動填寫整合 URL", + "warning": "現在設定你的基礎 URL 將會自動填寫所有整合 URL,在設定過程中節省你的時間", + "preview": "例如 {example}", "mode": { - "subdomain": "", - "hostPort": "" + "subdomain": "子網域", + "hostPort": "主機:連接埠" } }, "docker": { - "detected": "", - "detectedBreakdown": "", - "summary": "", - "appBadge": "", - "appSectionLabel": "", - "scanning": "", - "scanningDescription": "" + "detected": "Docker 偵測到 {count} 個服務", + "detectedBreakdown": "{integrations} 個整合 · {apps} 個應用程式", + "summary": "Homarr 偵測到 {apps} 個應用程式,其中 {integrations} 個具有內建整合", + "appBadge": "應用程式", + "appSectionLabel": "要新增至儀表板的應用程式(已選取 {count} 個)", + "scanning": "正在掃描 Docker……", + "scanningDescription": "正在尋找系統上執行的容器" } }, "finish": { @@ -177,7 +177,7 @@ }, "password": { "label": "密碼", - "suggestionsTitle": "", + "suggestionsTitle": "密碼建議", "suggestion": { "length": "至少包含 8 個字符", "lowercase": "包含小寫字母", @@ -199,8 +199,8 @@ "label": "為 Pings 使用 icon" }, "enableRightClickOnWidgets": { - "label": "", - "description": "" + "label": "啟用小工具右鍵選單", + "description": "在右鍵點擊小工具時顯示 Homarr 的上下文選單。停用以使用瀏覽器的預設選單 (例如「在新分頁中開啟連結」)。" }, "defaultSearchEngine": { "label": "預設搜尋引擎" @@ -209,7 +209,7 @@ "label": "於新分頁中開啟搜尋結果" }, "ddgBangs": { - "label": "" + "label": "啟用 DuckDuckGo bangs" } }, "error": { @@ -302,10 +302,10 @@ "changeDdgBangs": { "notification": { "success": { - "message": "" + "message": "DuckDuckGo bangs 切換成功" }, "error": { - "message": "" + "message": "無法切換 DuckDuckGo bangs" } } }, @@ -691,206 +691,206 @@ "customWidget": { "page": { "list": { - "title": "", - "noResults": "", - "loading": "" + "title": "自訂小工具", + "noResults": "尚無自訂小工具。建立您的第一個!", + "loading": "正在讀取……" }, "create": { - "title": "", - "subtitle": "" + "title": "建立自訂小工具", + "subtitle": "定義 API URL、驗證方式以及如何顯示回應資料。" }, "edit": { - "title": "" + "title": "編輯自訂小工具" } }, "action": { - "create": "", - "import": "", - "save": "", - "delete": "", - "deleteConfirm": "", - "export": "", - "addMapping": "", - "addColumn": "", - "edit": "", - "removeMapping": "", - "removeColumn": "", - "addItem": "", - "removeItem": "", - "addBar": "", - "duplicate": "", - "copyAiPrompt": "", - "enable": "", - "disable": "", - "menu": "" + "create": "建立", + "import": "匯入", + "save": "儲存", + "delete": "刪除自訂小工具", + "deleteConfirm": "確定要刪除 \"{name}\" 嗎?此動作無法復原。", + "export": "匯出", + "addMapping": "新增對應", + "addColumn": "新增欄", + "edit": "編輯", + "removeMapping": "移除對應", + "removeColumn": "移除欄", + "addItem": "新增項目", + "removeItem": "移除項目", + "addBar": "新增長條", + "duplicate": "複製", + "copyAiPrompt": "複製 AI 提示", + "enable": "啟用", + "disable": "停用", + "menu": "動作" }, "field": { - "name": "", - "description": "", - "iconUrl": "", - "url": "", - "authType": "", - "headerName": "", - "method": "", - "requestBody": "", - "displayType": "", - "jsonPath": "", - "jsonPathHint": "", - "label": "", - "unit": "", - "mappings": "", - "tablePath": "", - "tablePathHint": "", - "columns": "", - "header": "", - "items": "", - "gridColumns": "", - "cardStyle": "", - "bars": "", - "valuePath": "", - "maxPath": "", - "showPercentage": "", - "barSize": "", - "goodValues": "", - "dotSize": "", - "valueSize": "", - "labelPosition": "", - "kvLayout": "", - "striped": "", - "compact": "", - "maxHeight": "", - "color": "", - "buttonLabel": "", - "buttonColor": "", - "confirmText": "", - "confirmTextHint": "", - "successMessage": "", - "successMessageHint": "", - "enabled": "", + "name": "名稱", + "description": "描述", + "iconUrl": "圖示網址", + "url": "網址", + "authType": "驗證類型", + "headerName": "標頭/查詢參數名稱", + "method": "方法", + "requestBody": "請求主體", + "displayType": "顯示類型", + "jsonPath": "JSON 路徑", + "jsonPathHint": "使用 JSONPath 語法來擷取值,例如 $.data.temperature 或 $.items[0].name", + "label": "標籤", + "unit": "單位", + "mappings": "對應", + "tablePath": "陣列 JSON 路徑", + "tablePathHint": "回應中陣列的路徑,例如 $.data.items", + "columns": "欄", + "header": "標頭", + "items": "項目", + "gridColumns": "網格欄", + "cardStyle": "卡片樣式", + "bars": "長條", + "valuePath": "值 JSON 路徑", + "maxPath": "最大值 JSON 路徑", + "showPercentage": "顯示百分比", + "barSize": "長條大小", + "goodValues": "良好值 (逗號分隔)", + "dotSize": "點大小", + "valueSize": "值大小", + "labelPosition": "標籤位置", + "kvLayout": "佈局", + "striped": "條紋列", + "compact": "精簡模式", + "maxHeight": "最大高度 (像素)", + "color": "顏色", + "buttonLabel": "按鈕標籤", + "buttonColor": "按鈕顏色", + "confirmText": "確認文字", + "confirmTextHint": "若設定,執行請求前會顯示確認對話框", + "successMessage": "成功訊息", + "successMessageHint": "執行成功後顯示的訊息", + "enabled": "已啟用", "template": { - "label": "", - "description": "" + "label": "JSX 樣板", + "description": "Mantine JSX 樣板。透過資料綁定存取 API 回應欄位 (例如 data.name)。僅使用白名單中的組件。禁止: constructor, __proto__, eval, Function, window, document。" } }, "placeholder": { - "exampleLabel": "", - "exampleLabelShort": "", - "exampleHeader": "", - "exampleUnit": "", - "iconUrl": "", - "url": "", - "headerName": "", - "jsonPath": "", - "tablePath": "", - "columnJsonPath": "", - "valuePath": "", - "maxPath": "", - "goodValues": "", - "color": "" + "exampleLabel": "CPU 溫度", + "exampleLabelShort": "CPU 溫度", + "exampleHeader": "名稱", + "exampleUnit": "°C", + "iconUrl": "https://……", + "url": "https://api.example.com/api/v1/status", + "headerName": "X-API-Key", + "jsonPath": "$.data.value", + "tablePath": "$.data.items", + "columnJsonPath": "$.name", + "valuePath": "$.data.used", + "maxPath": "$.data.total", + "goodValues": "online, true, up", + "color": "blue" }, "cardStyleOption": { - "filled": "", - "outline": "", - "subtle": "" + "filled": "填滿", + "outline": "外框", + "subtle": "細微" }, "layoutOption": { - "list": "", - "grid": "" + "list": "清單", + "grid": "網格" }, "sizeOption": { - "sm": "", - "md": "", - "lg": "", - "xl": "" + "sm": "小", + "md": "中", + "lg": "大", + "xl": "特大" }, "labelPositionOption": { - "above": "", - "below": "" + "above": "上方", + "below": "下方" }, "fieldset": { - "general": "", - "connection": "", - "display": "" + "general": "一般", + "connection": "API 連線", + "display": "顯示設定" }, "displayTypeDescription": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "顯示一個帶有標籤和單位的擷取值", + "keyValue": "並排顯示多個帶有標籤的值", + "table": "以表格格式顯示資料列", + "statGrid": "以網格形式顯示彩色統計卡 — 類似 Pi-Hole 或 Speedtest 小工具", + "progressBars": "顯示使用量或完成度的進度條 — 適用於磁碟、記憶體、配額", + "statusIndicator": "彩色狀態點顯示線上/離線或健康狀態", + "countGrid": "在緊湊的網格中顯示精簡的數字 + 標籤計數器", + "raw": "用於偵錯的美化 JSON 輸出", + "actionButton": "點擊時觸發請求的按鈕", + "customJsx": "使用白名單 Mantine 組件的自訂 JSX 佈局,具有完整的 API 資料綁定" }, "method": { - "GET": "", - "POST": "", - "PUT": "", - "DELETE": "", - "PATCH": "" + "GET": "GET", + "POST": "POST", + "PUT": "PUT", + "DELETE": "DELETE", + "PATCH": "PATCH" }, "authType": { - "none": "", - "bearer": "", - "basic": "", - "apiKeyHeader": "", - "apiKeyQuery": "" + "none": "無", + "bearer": "Bearer 令牌", + "basic": "基本驗證", + "apiKeyHeader": "API 金鑰 (標頭)", + "apiKeyQuery": "API 金鑰 (查詢)" }, "displayType": { - "singleValue": "", - "keyValue": "", - "table": "", - "statGrid": "", - "progressBars": "", - "statusIndicator": "", - "countGrid": "", - "raw": "", - "actionButton": "", - "customJsx": "" + "singleValue": "單一值", + "keyValue": "鍵值", + "table": "表格", + "statGrid": "統計網格", + "progressBars": "進度條", + "statusIndicator": "狀態指示器", + "countGrid": "計數網格", + "raw": "原始 JSON", + "actionButton": "動作按鈕", + "customJsx": "自訂 JSX" }, "secret": { - "apiKey": "", - "username": "", - "password": "", - "savedPlaceholder": "" + "apiKey": "API 金鑰 / 令牌", + "username": "使用者名稱", + "password": "密碼", + "savedPlaceholder": "••••••• (已儲存,留空則保持不變)" }, "preview": { - "title": "", - "test": "", - "hint": "", - "rawResponse": "" + "title": "預覽", + "test": "測試", + "hint": "點擊「測試」以用目前設定預覽 API 回應。", + "rawResponse": "原始 JSON 回應" }, "notification": { - "created": "", - "updated": "", - "deleted": "", - "imported": "", - "aiPromptCopied": "", - "aiPromptDescription": "", - "aiPromptCopy": "", - "aiPromptNoResponse": "", - "aiPromptCopyError": "", - "createError": "", - "updateError": "", - "importError": "", - "exportError": "", - "duplicated": "", - "duplicateError": "", - "toggleError": "", - "deleteError": "", - "previewError": "", - "executed": "", - "executeError": "" + "created": "小工具 \"{name}\" 建立成功。", + "updated": "小工具 \"{name}\" 更新成功。", + "deleted": "小工具 \"{name}\" 已刪除。", + "imported": "小工具匯入成功。", + "aiPromptCopied": "AI 提示已複製到剪貼簿", + "aiPromptDescription": "複製預先構建的提示,貼到任何 AI 聊天機器人 (ChatGPT、Claude、Gemini...)。其中包含完整的小工具綱要和您的 API 回應,讓 AI 能為您產生可直接匯入的 JSON 設定。", + "aiPromptCopy": "複製到剪貼簿", + "aiPromptNoResponse": "提示: 先執行測試將您的 API 回應包含在提示中,以獲得更好的結果。", + "aiPromptCopyError": "無法將提示複製到剪貼簿。您的瀏覽器可能不支援此功能。", + "createError": "建立小工具失敗。請檢查 API 端點是否可達。", + "updateError": "更新小工具失敗。您的變更未被儲存。", + "importError": "匯入小工具失敗。請確保檔案是有效的自訂小工具 JSON 匯出。", + "exportError": "匯出小工具失敗。", + "duplicated": "小工具 \"{name}\" 已複製。", + "duplicateError": "複製小工具失敗。", + "toggleError": "切換小工具狀態失敗。", + "deleteError": "刪除小工具失敗。", + "previewError": "無法取得預覽。請檢查網址並重試。", + "executed": "動作執行成功。", + "executeError": "動作失敗: {error}" }, "table": { - "name": "", - "url": "", - "display": "" + "name": "名稱", + "url": "網址", + "display": "顯示" }, "widget": { - "disabled": "" + "disabled": "此小工具已停用" } }, "integration": { @@ -987,47 +987,47 @@ "placeholder": "自訂應用程式網址" }, "apiKeySettings": { - "label": "" + "label": "取得 API 金鑰" } }, "action": { "create": "創建集成" }, "grid": { - "widgetCount": "", - "noWidgets": "", - "detected": "" + "widgetCount": "{count} 個小工具", + "noWidgets": "無小工具", + "detected": "透過 Docker 偵測到" }, "category": { - "dnsHole": "", - "mediaService": "", - "calendar": "", - "mediaSearch": "", - "mediaRelease": "", - "mediaRequest": "", - "downloadClient": "", - "usenet": "", - "torrent": "", - "miscellaneous": "", - "smartHomeServer": "", - "indexerManager": "", - "healthMonitoring": "", - "search": "", - "mediaTranscoding": "", - "networkController": "", - "releasesProvider": "", - "notifications": "", - "firewall": "", - "timetable": "", - "photoService": "", - "documents": "", - "notes": "", - "mediaMonitoring": "", - "speedtest": "", - "analytics": "", - "vpn": "", - "mediaLibrary": "", - "uptimeMonitoring": "" + "dnsHole": "DNS", + "mediaService": "媒體", + "calendar": "日曆", + "mediaSearch": "搜尋", + "mediaRelease": "發佈", + "mediaRequest": "請求", + "downloadClient": "下載", + "usenet": "Usenet", + "torrent": "Torrent", + "miscellaneous": "其他", + "smartHomeServer": "智慧家庭", + "indexerManager": "索引器", + "healthMonitoring": "健康", + "search": "搜尋", + "mediaTranscoding": "轉碼", + "networkController": "網路", + "releasesProvider": "發佈", + "notifications": "通知", + "firewall": "防火牆", + "timetable": "時間表", + "photoService": "相片", + "documents": "文件", + "notes": "筆記", + "mediaMonitoring": "監控", + "speedtest": "速度測試", + "analytics": "分析", + "vpn": "VPN", + "mediaLibrary": "媒體庫", + "uptimeMonitoring": "運作時間監控" }, "testConnection": { "action": { @@ -1290,12 +1290,12 @@ "newLabel": "" }, "patchmonApiKey": { - "label": "", - "newLabel": "" + "label": "API 金鑰", + "newLabel": "新 API 金鑰" }, "patchmonApiSecret": { - "label": "", - "newLabel": "" + "label": "API 密鑰", + "newLabel": "新 API 密鑰" }, "githubAppId": { "label": "", @@ -1310,8 +1310,8 @@ "newLabel": "" }, "slug": { - "label": "", - "newLabel": "" + "label": "狀態頁面 slug", + "newLabel": "新狀態頁面 slug" } } }, @@ -1321,40 +1321,40 @@ "full": "完整的集成訪問權限" }, "audiobookshelf": { - "name": "", - "description": "" + "name": "Audiobookshelf", + "description": "自託管有聲書和播客伺服器" }, "navidrome": { - "name": "", - "description": "" + "name": "Navidrome", + "description": "具有 Subsonic API 相容性的自託管音樂串流伺服器" }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "帶有公開狀態頁面的自託管運作時間監控", "secret": { "slug": { - "description": "" + "description": "你的公開狀態頁面的 slug。如果未設定,預設為 \"default\"。" }, "apiKey": { - "description": "" + "description": "用於已驗證 /metrics 存取的可選 API 金鑰" } } }, "traefik": { - "name": "", - "description": "" + "name": "Traefik", + "description": "雲原生反向代理和負載平衡器" }, "paperlessNgx": { - "name": "", - "description": "" + "name": "Paperless-ngx", + "description": "用於歸檔和組織掃描文件的文件管理系統" }, "patchmon": { - "name": "", - "description": "" + "name": "PatchMon", + "description": "Linux 主機的修補程式管理和監控" }, "bazarr": { - "name": "", - "description": "" + "name": "Bazarr", + "description": "Sonarr 和 Radarr 的配套應用程式,管理和下載字幕" } }, "media": { @@ -1398,7 +1398,7 @@ } }, "noResults": { - "title": "" + "title": "尚未上傳媒體" } }, "common": { @@ -1409,7 +1409,7 @@ "add": "新增", "apply": "應用", "backToOverview": "返回總覽", - "skip": "", + "skip": "略過", "change": "", "create": "創建", "createAnother": "創建並重新開始", @@ -1431,20 +1431,20 @@ "checkLogs": "檢查 Logs 以取得更多詳情", "tryAgain": "重試", "loading": "正在讀取", - "show": "", - "hide": "" + "show": "顯示", + "hide": "隱藏" }, "here": "此處", "iconPicker": { "label": "Icon 網址", "header": "輸入名稱或物件來篩選 icons,Homarr 會自動搜尋 {countIcons}", - "headerLoading": "", - "noResults": "", - "error": "" + "headerLoading": "輸入以搜尋圖示…", + "noResults": "沒有符合 \"{search}\" 的圖示。", + "error": "無法載入圖示。" }, "colorScheme": { "options": { - "auto": "", + "auto": "自動", "light": "日間", "dark": "暗黑" } @@ -1492,7 +1492,7 @@ "switchToDarkMode": "切換至暗黑模式", "switchToLightMode": "切換至日間模式", "management": "管理中心", - "docker": "", + "docker": "Docker", "preferences": "偏好設定", "logout": "登出", "login": "登入", @@ -1602,7 +1602,7 @@ "label": { "create": "創建分類", "changePosition": "變更位置", - "settings": "" + "settings": "設定" } }, "openAllInNewTabs": { @@ -1623,15 +1623,15 @@ "menu": { "label": { "settings": "設定", - "refresh": "", - "options": "", - "actions": "" + "refresh": "重新整理", + "options": "選項", + "actions": "動作" }, "status": { - "success": "", - "error": "", - "loading": "", - "idle": "" + "success": "確定", + "error": "錯誤", + "loading": "正在讀取", + "idle": "閒置" } }, "create": { @@ -1659,11 +1659,11 @@ "edit": { "title": "編輯項目", "tab": { - "widget": "", - "app": "" + "widget": "編輯小工具", + "app": "編輯應用程式" }, "app": { - "propagationNotice": "" + "propagationNotice": "對此應用程式的變更將會套用到所有使用它的儀表板。" }, "advancedOptions": { "label": "進階選項", @@ -1691,11 +1691,11 @@ }, "widget": { "integrationSelect": { - "configureIntegrationFirst": "", - "loading": "", - "placeholder": "", - "noResults": "", - "loadError": "" + "configureIntegrationFirst": "先連線整合", + "loading": "正在讀取……", + "placeholder": "選擇一個選項", + "noResults": "未找到結果", + "loadError": "載入選項失敗" }, "app": { "name": "應用程式", @@ -1776,7 +1776,7 @@ "label": "於新分頁開啟" }, "withBorder": { - "label": "" + "label": "顯示邊框" }, "items": { "label": "書籤", @@ -1785,11 +1785,11 @@ } }, "archiveTeamWarrior": { - "name": "", - "description": "", + "name": "ArchiveTeam Warrior", + "description": "監控 ArchiveTeam Warrior 狀態、專案和活躍的存檔作業。", "option": { "showBroadcastMessage": { - "label": "" + "label": "顯示廣播訊息" } } }, @@ -1907,14 +1907,14 @@ "description": "使用 ISO 8601 格式化日期 (此操作將覆蓋其他選項)" }, "showWeather": { - "label": "", - "description": "" + "label": "顯示天氣", + "description": "在卡片角落顯示小型動畫天氣圖示和溫度" }, "weatherLocation": { - "label": "" + "label": "天氣位置" }, "isWeatherFormatFahrenheit": { - "label": "" + "label": "使用華氏溫度" } } }, @@ -1944,7 +1944,7 @@ "noStation": "", "option": { "baseUrl": { - "label": "" + "label": "Search.ch 網址" }, "station": { "label": "" @@ -1976,8 +1976,8 @@ "clear": "清除格式", "heading": "標題 {level}", "align": "對齊文字:{position}", - "directionLtr": "", - "directionRtl": "", + "directionLtr": "將文字方向設為由左至右", + "directionRtl": "將文字方向設為由右至左", "blockquote": "引用", "horizontalLine": "橫線", "bulletList": "符號列表", @@ -2268,7 +2268,7 @@ "sunset": "日落", "maxWindSpeed": "最大風速:{maxWindSpeed} 公里/時", "maxWindGusts": "最大陣風:{maxWindGusts} 公里/時", - "humidity": "" + "humidity": "濕度: {humidity}%" }, "kind": { "clear": "晴朗", @@ -2328,9 +2328,9 @@ "label": "顯示檔案系統訊息" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "可見儲存磁碟區", + "description": "僅在所有選取的整合均為 Synology 時可用。留空則顯示所有偵測到的儲存磁碟區。", + "placeholder": "選擇儲存磁碟區" }, "defaultTab": { "label": "預設頁面" @@ -2412,7 +2412,7 @@ "description": "", "option": { "columns": { - "label": "" + "label": "要顯示的欄" }, "enableRowSorting": { "label": "" @@ -2428,10 +2428,21 @@ }, "descendingDefaultSort": { "label": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "error": { - "internalServerError": "" + "internalServerError": "", + "layoutSaveTitle": "", + "layoutSaveMessage": "" + }, + "empty": { + "noContainers": "" } }, "coolify": { @@ -2468,40 +2479,40 @@ } }, "vpn": { - "name": "", - "description": "", - "serviceUnavailable": "", + "name": "VPN", + "description": "VPN 連線概覽", + "serviceUnavailable": "VPN 不可用", "option": {} }, "ups": { - "name": "", - "description": "", + "name": "UPS", + "description": "透過 NUT 伺服器監控 UPS 裝置的狀態", "option": { "showBattery": { - "label": "" + "label": "顯示電池" }, "showLoad": { - "label": "" + "label": "顯示負載" }, "showVoltage": { - "label": "" + "label": "顯示電壓" } }, "status": { - "online": "", - "onBattery": "", - "lowBattery": "", - "charging": "", - "unknown": "" + "online": "在線", + "onBattery": "使用電池", + "lowBattery": "低電池", + "charging": "充電中", + "unknown": "未知" }, "field": { - "runtime": "", - "load": "", - "input": "", - "output": "" + "runtime": "執行時間", + "load": "負載", + "input": "輸入", + "output": "輸出" }, "error": { - "internalServerError": "" + "internalServerError": "無法取得 UPS 資料" } }, "tracearr": { @@ -2584,77 +2595,77 @@ "today": "", "24h": "", "7d": "", - "30d": "", - "month": "", - "lastMonth": "" + "30d": "過去 30 天", + "month": "本月", + "lastMonth": "上個月" } }, "eventName": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "none": "", - "configureWebsiteFirst": "" + "label": "事件", + "description": "顯示特定事件的總出現次數", + "placeholder": "選擇一個事件", + "loading": "正在載入事件……", + "noEvents": "未找到事件", + "none": "無事件", + "configureWebsiteFirst": "請先選擇網站以載入事件" }, "chartType": { - "label": "", - "description": "", + "label": "圖表類型", + "description": "圖表的顯示樣式", "option": { - "bar": "", - "sparkline": "" + "bar": "長條圖", + "sparkline": "折線圖" } }, "chartStyle": { - "label": "", - "description": "", + "label": "圖表樣式", + "description": "如何在圖表中顯示事件系列", "option": { - "grouped": "", - "overlay": "" + "grouped": "並排", + "overlay": "疊加(子集)" } }, "viewMode": { - "label": "", - "description": "", + "label": "檢視", + "description": "要在小工具主體中顯示的內容", "option": { - "chart": "", - "events": "", - "topPages": "", - "topReferrers": "" + "chart": "圖表", + "events": "事件圖表", + "topPages": "熱門頁面", + "topReferrers": "熱門推薦來源" } }, "eventNames": { - "label": "", - "description": "", - "placeholder": "", - "loading": "", - "noEvents": "", - "configureWebsiteFirst": "" + "label": "事件", + "description": "選取一或多個事件來繪製圖表", + "placeholder": "選取事件……", + "loading": "正在載入事件……", + "noEvents": "未找到事件", + "configureWebsiteFirst": "請先選擇網站以載入事件" }, "topCount": { - "label": "", - "description": "" + "label": "顯示項目數", + "description": "要顯示的熱門項目數量(最多 500)" } }, "event": { - "occurrences": "", - "label": "" + "occurrences": "事件", + "label": "事件" }, "topPages": { - "direct": "" + "direct": "直接" }, "topReferrers": { - "direct": "" + "direct": "直接" }, "events": { - "selectPrompt": "" + "selectPrompt": "選取要繪製圖表的事件" }, "error": { - "noIntegration": "", - "noWebsite": "", - "noData": "", - "internalServerError": "" + "noIntegration": "未設定 Umami 整合", + "noWebsite": "未設定網站", + "noData": "無可用資料", + "internalServerError": "無法取得 Umami 資料" } }, "common": { @@ -2725,18 +2736,33 @@ "showOnlyPlaying": { "label": "只顯示目前播放中的項目", "description": "停用此功能將無法在 Plex 上運作" + }, + "showBitrate": { + "label": "", + "description": "" + }, + "showLocation": { + "label": "", + "description": "" } }, + "footer": { + "streams": "", + "totalBitrate": "" + }, "items": { "currentlyPlaying": "目前播放中", "user": "使用者", "name": "名稱", "id": "ID", - "status": "", - "directPlay": "", - "transcoding": "", - "paused": "", - "remaining": "", + "status": "狀態", + "directPlay": "直接播放", + "directStream": "", + "transcodeVideo": "", + "transcodeAudio": "", + "transcoding": "轉碼中", + "paused": "已暫停", + "remaining": "剩餘 {minutes} 分鐘", "metadata": { "title": "", "video": { @@ -2758,235 +2784,235 @@ } }, "paperlessNgx": { - "name": "", - "description": "", - "documentsTotal": "", - "documentsInbox": "", - "correspondents": "", - "tags": "", - "documentTypes": "", - "inboxRatio": "", - "inbox": "", - "total": "", + "name": "Paperless-ngx", + "description": "你的 Paperless-ngx 文件歸檔概覽", + "documentsTotal": "文件總數", + "documentsInbox": "收件匣", + "correspondents": "寄件者", + "tags": "標籤", + "documentTypes": "文件類型", + "inboxRatio": "收件匣比率", + "inbox": "收件匣", + "total": "總計", "option": { "showInboxRatio": { - "label": "", - "description": "" + "label": "顯示收件匣比率", + "description": "在主圖示區域中顯示收件匣與總文件數的比率" }, "showInboxRing": { - "label": "", - "description": "" + "label": "顯示收件匣環", + "description": "在收件匣比率旁顯示進度環" }, "showDocumentsTotal": { - "label": "", - "description": "" + "label": "顯示文件總數", + "description": "顯示你歸檔中的文件總數" }, "showDocumentsInbox": { - "label": "", - "description": "" + "label": "顯示收件匣計數", + "description": "顯示收件匣中未處理文件的數量" }, "showCorrespondents": { - "label": "", - "description": "" + "label": "顯示寄件者", + "description": "顯示寄件者總數" }, "showTags": { - "label": "", - "description": "" + "label": "顯示標籤", + "description": "顯示標籤總數" }, "showDocumentTypes": { - "label": "", - "description": "" + "label": "顯示文件類型", + "description": "顯示文件類型總數" } }, "error": { - "internalServerError": "" + "internalServerError": "無法取得 Paperless-ngx 資料" } }, "patchmon": { - "name": "", - "description": "", - "title": "", - "totalHosts": "", - "hostsNeedingUpdates": "", - "securityUpdates": "", - "upToDateHosts": "", - "hostsWithSecurityUpdates": "", - "recentUpdates24h": "", - "totalOutdatedPackages": "", - "totalRepos": "", - "osDistribution": "", - "compliance": "", - "complianceRatio": "", - "lastUpdated": "", + "name": "PatchMon", + "description": "來自 PatchMon 的主機修補狀態概覽", + "title": "PatchMon 統計", + "totalHosts": "主機總數", + "hostsNeedingUpdates": "需要更新", + "securityUpdates": "安全性更新", + "upToDateHosts": "已更新至最新", + "hostsWithSecurityUpdates": "有安全性更新的主機", + "recentUpdates24h": "更新 (24h)", + "totalOutdatedPackages": "過時套件", + "totalRepos": "儲存庫", + "osDistribution": "作業系統分佈", + "compliance": "修補合規性", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "更新於 {time}", "option": { "showTotalHosts": { - "label": "", - "description": "" + "label": "顯示主機總數", + "description": "顯示受監控的主機總數" }, "showHostsNeedingUpdates": { - "label": "", - "description": "" + "label": "顯示需要更新的主機", + "description": "顯示至少有一個過時套件的主機" }, "showSecurityUpdates": { - "label": "", - "description": "" + "label": "顯示安全性更新總數", + "description": "顯示可用的安全性更新總數" }, "showUpToDateHosts": { - "label": "", - "description": "" + "label": "顯示已更新至最新主機", + "description": "顯示沒有任何過時套件的主機" }, "showHostsWithSecurityUpdates": { - "label": "", - "description": "" + "label": "顯示有安全性更新的主機", + "description": "顯示需要安全性修補的主機" }, "showRecentUpdates24h": { - "label": "", - "description": "" + "label": "顯示近期更新 (24h)", + "description": "顯示過去 24 小時內已套用的更新數量" }, "showTotalOutdatedPackages": { - "label": "", - "description": "" + "label": "顯示過時套件總數", + "description": "顯示所有主機上過時套件的總數" }, "showTotalRepos": { - "label": "", - "description": "" + "label": "顯示儲存庫數量", + "description": "顯示正在監控的活躍儲存庫數量" }, "enableThresholdColors": { - "label": "", - "description": "" + "label": "啟用閾值顏色", + "description": "根據嚴重性預設將統計值著色為綠色、黃色或紅色" }, "useCustomThresholds": { - "label": "", - "description": "" + "label": "進階閾值", + "description": "使用絕對計數或主機總數百分比,對每個統計值自訂警告和嚴重閾值" }, "thresholdMode": { "option": { - "absolute": "", - "percent": "" + "absolute": "絕對計數", + "percent": "主機總數百分比" } }, "hostsNeedingUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "需要更新閾值模式", + "description": "以絕對值或主機總數百分比比較需要更新的計數" }, "hostsNeedingUpdatesWarningAt": { - "label": "", - "description": "" + "label": "需要更新警告閾值", + "description": "數值達到此閾值時轉為黃色" }, "hostsNeedingUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "需要更新嚴重閾值", + "description": "數值達到此閾值時轉為紅色" }, "securityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "安全性更新閾值模式", + "description": "以絕對值或主機總數百分比比較安全性更新的計數" }, "securityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "安全性更新警告閾值", + "description": "數值達到此閾值時轉為黃色" }, "securityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "安全性更新嚴重閾值", + "description": "數值達到此閾值時轉為紅色" }, "hostsWithSecurityUpdatesThresholdMode": { - "label": "", - "description": "" + "label": "有安全性更新主機閾值模式", + "description": "以絕對值或主機總數百分比比較主機計數" }, "hostsWithSecurityUpdatesWarningAt": { - "label": "", - "description": "" + "label": "有安全性更新主機警告閾值", + "description": "數值達到此閾值時轉為黃色" }, "hostsWithSecurityUpdatesCriticalAt": { - "label": "", - "description": "" + "label": "有安全性更新主機嚴重閾值", + "description": "數值達到此閾值時轉為紅色" }, "upToDateHostsThresholdMode": { - "label": "", - "description": "" + "label": "已更新至最新主機閾值模式", + "description": "以絕對值或主機總數百分比比較已更新至最新主機計數" }, "upToDateHostsWarningAt": { - "label": "", - "description": "" + "label": "已更新至最新主機警告閾值", + "description": "數值達到或高於此閾值但低於全覆蓋時轉為黃色" }, "upToDateHostsCriticalAt": { - "label": "", - "description": "" + "label": "已更新至最新主機嚴重閾值", + "description": "數值低於此閾值時轉為紅色" }, "totalOutdatedPackagesThresholdMode": { - "label": "", - "description": "" + "label": "過時套件閾值模式", + "description": "以絕對值或主機總數百分比比較過時套件計數" }, "totalOutdatedPackagesWarningAt": { - "label": "", - "description": "" + "label": "過時套件警告閾值", + "description": "數值達到此閾值時轉為黃色" }, "totalOutdatedPackagesCriticalAt": { - "label": "", - "description": "" + "label": "過時套件嚴重閾值", + "description": "數值達到此閾值時轉為紅色" }, "showOsDistribution": { - "label": "", - "description": "" + "label": "顯示作業系統分佈", + "description": "顯示按作業系統細分的受監控主機" }, "osDistributionLimit": { - "label": "", - "description": "", + "label": "作業系統分佈限制", + "description": "最多顯示的作業系統數量", "option": { - "3": "", - "5": "", - "10": "", - "all": "" + "3": "前 3 名", + "5": "前 5 名", + "10": "前 10 名", + "all": "全部" } }, "showOsVersion": { - "label": "", - "description": "" + "label": "顯示作業系統版本", + "description": "當可用時,在每個分佈標籤後附加作業系統版本" }, "showComplianceHero": { - "label": "", - "description": "" + "label": "顯示合規性英雄", + "description": "顯示一個合規性環,展示已更新至最新主機的百分比" }, "osDisplayMode": { - "label": "", - "description": "", + "label": "作業系統顯示模式", + "description": "選擇如何顯示作業系統分佈", "option": { - "bars": "", - "donut": "" + "bars": "水平長條", + "donut": "甜甜圈圖" } } }, "error": { - "internalServerError": "" + "internalServerError": "無法擷取 PatchMon 資料" } }, "bazarr": { - "name": "", - "description": "", - "episodes": "", - "movies": "", - "providers": "", - "status": "", + "name": "Bazarr", + "description": "來自 Bazarr 實例的缺少字幕和健康狀態概覽", + "episodes": "缺少的集數", + "movies": "缺少的電影", + "providers": "提供者問題", + "status": "健康問題", "option": { "showMissingEpisodes": { - "label": "", - "description": "" + "label": "顯示缺少的集數", + "description": "顯示缺少字幕的集數數量" }, "showMissingMovies": { - "label": "", - "description": "" + "label": "顯示缺少的電影", + "description": "顯示缺少字幕的電影數量" }, "showProviderIssues": { - "label": "", - "description": "" + "label": "顯示提供者問題", + "description": "顯示有問題的字幕提供者數量" }, "showHealthIssues": { - "label": "", - "description": "" + "label": "顯示健康問題", + "description": "顯示 Bazarr 健康問題的數量" } }, "error": { - "internalServerError": "" + "internalServerError": "無法擷取 Bazarr 資料" } }, "immich-serverStats": { @@ -3017,11 +3043,11 @@ }, "immich-albumCarousel": { "name": "", - "allPhotos": "", + "allPhotos": "所有照片", "option": { "albumId": { - "label": "", - "description": "" + "label": "相簿", + "description": "選擇 Immich 相簿或所有照片。留空也將從您的完整圖庫中隨機顯示照片。" }, "rotationIntervalSeconds": { "label": "", @@ -3032,12 +3058,12 @@ "description": "" }, "randomizePhotos": { - "label": "", - "description": "" + "label": "隨機播放照片", + "description": "以隨機順序顯示照片,而非始終以相同的相簿順序開始。" } }, - "description": "", - "noPhotos": "" + "description": "來自 Immich 相簿或完整圖庫的照片幻燈片", + "noPhotos": "找不到照片" }, "downloads": { "name": "下載器", @@ -3079,11 +3105,20 @@ "limitPerIntegration": { "label": "", "description": "" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { + "label": "" } }, "errors": { "noColumns": "於項目中選擇列", - "noCommunications": "無法從集成中加載數據" + "noCommunications": "無法從集成中加載數據", + "noItems": "", + "actionFailed": "", + "actionFailedMessage": "" }, "items": { "actions": { @@ -3106,7 +3141,8 @@ "detailsTitle": "下載器中的當前索引" }, "id": { - "columnTitle": "ID" + "columnTitle": "ID", + "detailsTitle": "" }, "integration": { "columnTitle": "集成" @@ -3140,7 +3176,8 @@ }, "time": { "columnTitle": "完成時間", - "detailsTitle": "剩餘完成時間" + "detailsTitle": "剩餘完成時間", + "eta": "" }, "type": { "columnTitle": "類型", @@ -3184,7 +3221,23 @@ } } }, - "globalRatio": "全局速率" + "globalRatio": "全局速率", + "contextMenu": { + "copyName": "", + "copyId": "", + "clearFilters": "" + }, + "footer": { + "filter": "" + }, + "stats": { + "show": "", + "hide": "", + "overallProgress": "", + "totalSize": "", + "clients": "" + }, + "disconnected": "" }, "mediaReleases": { "name": "", @@ -3223,10 +3276,10 @@ "label": "於新分頁中開啟鏈結" }, "statusFilter": { - "label": "" + "label": "要顯示的狀態" }, "recentDays": { - "label": "" + "label": "僅顯示最近的請求" } }, "pending": { @@ -3335,33 +3388,33 @@ } }, "mediaMissing": { - "name": "", - "description": "", + "name": "缺少和佇列中的媒體", + "description": "顯示來自 Radarr 和 Sonarr 的缺少和佇列中的電影及影集", "option": { "showMissing": { - "label": "" + "label": "顯示缺少的項目" }, "showQueued": { - "label": "" + "label": "顯示佇列中的項目" }, "pageSize": { - "label": "" + "label": "每頁項目數" } }, "tab": { - "missing": "", - "queued": "" + "missing": "缺少", + "queued": "佇列中" }, "type": { - "movie": "", - "episode": "" + "movie": "電影", + "episode": "集數" }, "empty": { - "missing": "", - "queued": "", - "noTabsEnabled": "" + "missing": "沒有缺少的項目", + "queued": "沒有佇列中的項目", + "noTabsEnabled": "在小工具設定中至少啟用一個分頁" }, - "timeLeft": "" + "timeLeft": "剩餘時間" }, "rssFeed": { "name": "RSS 訂閱", @@ -3433,7 +3486,7 @@ "label": "提供者" }, "providerUrl": { - "label": "" + "label": "提供者網址" }, "identifier": { "label": "識別碼", @@ -3484,11 +3537,11 @@ "tooltip": "" }, "tokens": { - "label": "", - "token": "", - "configured": "", - "notConfigured": "", - "save": "" + "label": "提供者令牌", + "token": "令牌", + "configured": "令牌已設定", + "notConfigured": "未設定令牌", + "save": "儲存" } } }, @@ -3511,9 +3564,9 @@ "invalidIdentifier": "", "noMatchingVersion": "找不到匹配的版本", "noReleasesFound": "", - "noProviderSelected": "", + "noProviderSelected": "未選擇提供者", "noProviderResponse": "", - "unexpected": "" + "unexpected": "未預期的提供者錯誤" } } }, @@ -3608,7 +3661,7 @@ "noItems": "", "option": { "hideLogos": { - "label": "" + "label": "隱藏標誌" } } }, @@ -3652,144 +3705,130 @@ } }, "uptimeKuma": { - "name": "", - "description": "", + "name": "Uptime Kuma", + "description": "從你的 Uptime Kuma 狀態頁面監控運作時間統計資料", "option": { "showAverageUptime": { - "label": "", - "description": "" + "label": "顯示平均運作時間", + "description": "顯示合併的 24 小時平均運作時間百分比" }, "showUptimeRing": { - "label": "", - "description": "" + "label": "顯示運作時間環", + "description": "在平均運作時間值旁顯示進度環" }, "showTotalMonitors": { - "label": "", - "description": "" + "label": "顯示監視器總數", + "description": "顯示已設定監視器的總數" }, "showUpCount": { - "label": "", - "description": "" + "label": "顯示正常數量", + "description": "顯示目前正常運作的監視器數量" }, "showDownCount": { - "label": "", - "description": "" + "label": "顯示異常數量", + "description": "顯示目前異常的監視器數量" }, "showPausedCount": { - "label": "", - "description": "" + "label": "顯示暫停數量", + "description": "顯示目前暫停的監視器數量" } }, - "averageUptime": "", + "averageUptime": "平均運作時間(24 小時)", "stats": { - "totalMonitors": "", - "upCount": "", - "downCount": "", - "pausedCount": "" + "totalMonitors": "監視器總數", + "upCount": "正常", + "downCount": "異常", + "pausedCount": "已暫停" }, "error": { - "internalServerError": "" + "internalServerError": "無法取得運作時間資料" } }, "traefik": { - "name": "", - "description": "", + "name": "Traefik", + "description": "Traefik 路由器、服務、中間件和入口點概覽", "option": { "showTcp": { - "label": "" + "label": "顯示 TCP" }, "showUdp": { - "label": "" + "label": "顯示 UDP" }, "showEntryPoints": { - "label": "" + "label": "顯示入口點" } }, - "instances": "", - "versionUnknown": "", + "instances": "Traefik 實例", + "versionUnknown": "版本未知", "summary": { - "routers": "", - "entryPoints": "" + "routers": "路由器", + "entryPoints": "入口點" }, "resource": { - "routers": "", - "services": "", - "middlewares": "" + "routers": "路由器", + "services": "服務", + "middlewares": "中間件" }, "status": { - "healthy": "", - "errors": "", - "warnings": "" + "healthy": "健康", + "errors": "{count} 個錯誤", + "warnings": "{count} 個警告" }, "error": { - "internalServerError": "" + "internalServerError": "無法擷取 Traefik 資料" } }, "audioStats": { - "name": "", - "description": "", + "name": "音訊統計", + "description": "來自 Navidrome 或 Audiobookshelf 的資料庫和播放統計資料", "option": { "showArtists": { - "label": "", - "description": "" + "label": "顯示藝人", + "description": "顯示音樂庫中的藝人總數 (Navidrome)" }, "showAlbums": { - "label": "", - "description": "" + "label": "顯示專輯", + "description": "顯示音樂庫中的專輯總數 (Navidrome)" }, "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" + "label": "顯示歌曲", + "description": "顯示音樂庫中的歌曲總數 (Navidrome)" }, "showLibraryCount": { - "label": "", - "description": "" + "label": "顯示庫數量", + "description": "顯示你的執行個體上的庫數量 (Audiobookshelf)" }, "showAudiobooks": { - "label": "", - "description": "" + "label": "顯示有聲書", + "description": "顯示所有庫中的有聲書總數 (Audiobookshelf)" }, "showPodcasts": { - "label": "", - "description": "" + "label": "顯示播客", + "description": "顯示所有庫中的播客總數 (Audiobookshelf)" }, "showListeningTime": { - "label": "", - "description": "" + "label": "顯示聆聽時間", + "description": "顯示你的總聆聽時間 (Audiobookshelf)" }, "showActiveSessions": { - "label": "", - "description": "" + "label": "顯示活動工作階段", + "description": "顯示目前正在播放的會話數量 (Audiobookshelf)" }, "compactMode": { - "label": "", - "description": "" + "label": "精簡模式", + "description": "使用較密集的佈局,以較小的方塊顯示,適合小尺寸小工具" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "artists": "藝術家", + "albums": "專輯", + "songs": "歌曲", + "libraryCount": "資料庫", + "audiobooks": "有聲書", + "podcasts": "播客", + "listeningTime": "聆聽時間", + "activeSessions": "活躍會話", "error": { - "internalServerError": "" + "internalServerError": "無法擷取音訊統計資料" } }, "systemResources": { @@ -3853,9 +3892,9 @@ "label": "" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "可見儲存磁碟區", + "description": "僅在所有選取的整合均為 Synology 時可用。留空則顯示所有偵測到的儲存磁碟區。", + "placeholder": "選擇儲存磁碟區" } }, "status": { @@ -3863,265 +3902,273 @@ } }, "customApi": { - "name": "", - "description": "", + "name": "自訂 API", + "description": "使用自訂設定顯示來自任何外部 API 的資料。", "option": { "definitionId": { - "label": "" + "label": "定義 ID" }, "refreshInterval": { - "label": "", - "description": "" + "label": "重新整理間隔", + "description": "從 API 重新擷取資料的頻率 (秒)" } }, - "noDefinition": "", - "definitionNotFound": "", - "noDisplayOutput": "", - "executeConfirm": "", - "executing": "", - "executeSuccess": "", - "executeFailed": "" + "noDefinition": "未選擇定義", + "definitionNotFound": "找不到小工具定義。可能已被刪除。", + "noDisplayOutput": "無顯示輸出", + "executeConfirm": "確定要執行此動作嗎?", + "executing": "正在執行……", + "executeSuccess": "動作執行成功", + "executeFailed": "動作失敗。請檢查小工具設定。" }, "beszelSystemTable": { - "name": "", - "description": "", + "name": "Beszel 系統(表格)", + "description": "所有 Beszel 監控系統的表格檢視,帶有可排序的欄位和狀態指示器", "option": { "statusFilter": { - "label": "" + "label": "狀態篩選" }, "sortBy": { - "label": "" + "label": "排序依據" }, "sortDirection": { - "label": "" + "label": "排序方向" }, "showCpu": { - "label": "" + "label": "顯示 CPU" }, "showMemory": { - "label": "" + "label": "顯示記憶體" }, "showDisk": { - "label": "" + "label": "顯示磁碟" }, "showGpu": { - "label": "" + "label": "顯示 GPU" }, "showLoadAvg": { - "label": "" + "label": "顯示平均負載" }, "showNet": { - "label": "" + "label": "顯示網路" }, "showTemp": { - "label": "" + "label": "顯示溫度" }, "showBattery": { - "label": "" + "label": "顯示電池" }, "showServices": { - "label": "" + "label": "顯示服務" }, "showUptime": { - "label": "" + "label": "顯示運作時間" }, "showAgent": { + "label": "顯示代理版本" + }, + "columnOrder": { + "label": "" + }, + "columnWidths": { "label": "" } }, - "noRecords": "", + "noRecords": "找不到系統", "error": { - "internalServerError": "" + "internalServerError": "無法連線到 Beszel。請檢查整合設定。", + "layoutSaveTitle": "", + "layoutSaveMessage": "" }, "column": { - "system": "", - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "system": "系統", + "cpu": "處理器", + "memory": "記憶體", + "disk": "磁碟", + "gpu": "GPU", + "loadAvg": "平均負載", + "net": "網路", + "temp": "溫度", + "battery": "電池", + "services": "服務", + "uptime": "運作時間", + "agent": "代理" } }, "beszelSystemGrid": { - "name": "", - "description": "", + "name": "Beszel 系統(網格)", + "description": "所有 Beszel 監控系統的卡片網格檢視,帶有即時指標", "option": { "statusFilter": { - "label": "" + "label": "狀態篩選" }, "showCpu": { - "label": "" + "label": "顯示 CPU" }, "showMemory": { - "label": "" + "label": "顯示記憶體" }, "showDisk": { - "label": "" + "label": "顯示磁碟" }, "showGpu": { - "label": "" + "label": "顯示 GPU" }, "showLoadAvg": { - "label": "" + "label": "顯示平均負載" }, "showNet": { - "label": "" + "label": "顯示網路" }, "showTemp": { - "label": "" + "label": "顯示溫度" }, "showBattery": { - "label": "" + "label": "顯示電池" }, "showServices": { - "label": "" + "label": "顯示服務" }, "showUptime": { - "label": "" + "label": "顯示運作時間" }, "showAgent": { - "label": "" + "label": "顯示代理版本" } }, "error": { - "internalServerError": "" + "internalServerError": "無法連線到 Beszel。請檢查整合設定。" }, "empty": { - "noSystems": "" + "noSystems": "找不到系統" }, "metric": { - "cpu": "", - "memory": "", - "disk": "", - "gpu": "", - "loadAvg": "", - "net": "", - "temp": "", - "battery": "", - "services": "", - "uptime": "", - "agent": "" + "cpu": "處理器", + "memory": "記憶體", + "disk": "磁碟", + "gpu": "GPU", + "loadAvg": "平均負載", + "net": "網路", + "temp": "溫度", + "battery": "電池", + "services": "服務", + "uptime": "運作時間", + "agent": "代理" } }, "beszelAlerts": { - "name": "", - "description": "", + "name": "Beszel 警報", + "description": "檢視 Beszel 警報設定和歷程記錄", "option": { "showHistory": { - "label": "" + "label": "顯示警報歷程記錄" }, "maxHistoryItems": { - "label": "" + "label": "最大歷程記錄項目數" } }, - "empty": "", + "empty": "未設定警報", "error": { - "internalServerError": "" + "internalServerError": "無法連線到 Beszel。請檢查整合設定。" }, - "history": "", - "resolved": "", + "history": "歷程記錄", + "resolved": "已解決", "status": { - "triggered": "", - "ok": "" + "triggered": "已觸發", + "ok": "正常" } }, "beszelSystemStats": { - "name": "", - "description": "", + "name": "Beszel 系統統計", + "description": "CPU、記憶體、磁碟、網路和 Docker 容器指標的時間序列圖表", "option": { "systemId": { - "label": "", - "description": "" + "label": "系統", + "description": "選擇要顯示統計資料的 Beszel 系統" }, "timePeriod": { - "label": "" + "label": "時間週期" }, "showCpu": { - "label": "" + "label": "顯示 CPU 圖表" }, "showMemory": { - "label": "" + "label": "顯示記憶體圖表" }, "showDisk": { - "label": "" + "label": "顯示磁碟圖表" }, "showDiskIO": { - "label": "" + "label": "顯示磁碟 I/O 圖表" }, "showNetwork": { - "label": "" + "label": "顯示網路圖表" }, "showDockerCpu": { - "label": "" + "label": "顯示 Docker CPU 圖表" }, "showDockerMemory": { - "label": "" + "label": "顯示 Docker 記憶體圖表" }, "showDockerNetwork": { - "label": "" + "label": "顯示 Docker 網路圖表" } }, - "selectSystem": "", + "selectSystem": "選取系統", "empty": { - "noSystems": "" + "noSystems": "找不到系統" }, "error": { - "internalServerError": "", - "liveConnectionFailed": "", - "switchToHistorical": "", - "systemNotFound": "" + "internalServerError": "無法連線到 Beszel。請檢查整合設定。", + "liveConnectionFailed": "即時連線失敗。您的 Beszel 實例可能不支援即時串流。", + "switchToHistorical": "切換到歷史檢視", + "systemNotFound": "找不到所選的系統。請選擇其他系統。" }, "chart": { "cpu": { - "title": "", - "subtitle": "", - "series": "" + "title": "CPU 使用率", + "subtitle": "平均系統範圍 CPU 使用率", + "series": "處理器" }, "memory": { - "title": "", - "subtitle": "", - "series": "", - "cache": "" + "title": "記憶體使用率", + "subtitle": "記錄時間的精確使用率", + "series": "已使用", + "cache": "快取/緩衝區" }, "disk": { - "title": "", - "subtitle": "", - "series": "" + "title": "磁碟使用率", + "subtitle": "檔案系統使用量", + "series": "根" }, "diskIO": { - "title": "", - "subtitle": "", - "read": "", - "write": "" + "title": "磁碟 I/O", + "subtitle": "根檔案系統的吞吐量", + "read": "讀取", + "write": "寫入" }, "storage": { - "title": "", - "subtitle": "", - "series": "" + "title": "儲存", + "subtitle": "每個檔案系統的磁碟使用量", + "series": "已使用" }, "network": { - "title": "", - "subtitle": "", - "sent": "", - "recv": "" + "title": "頻寬", + "subtitle": "公開介面的網路流量", + "sent": "已傳送", + "recv": "已接收" }, "dockerCpu": { - "title": "", - "subtitle": "" + "title": "Docker CPU 使用率", + "subtitle": "容器的平均 CPU 使用率" }, "dockerMemory": { - "title": "", - "subtitle": "" + "title": "Docker 記憶體使用率", + "subtitle": "Docker 容器的記憶體使用量" }, "dockerNetwork": { - "title": "", - "subtitle": "" + "title": "Docker 網路 I/O", + "subtitle": "Docker 容器的網路流量" } } } @@ -4498,9 +4545,9 @@ "text": "找不到請求的資源" }, "error": { - "title": "", - "text": "", - "digest": "" + "title": "此頁面無法載入", + "text": "載入此頁面時發生未預期的錯誤。您的導航仍然可用 — 請嘗試重新載入,或使用側邊欄的其他區塊。", + "digest": "錯誤參考: {digest}" }, "navbar": { "items": { @@ -4508,7 +4555,7 @@ "boards": "面板", "apps": "應用程式", "integrations": "集成", - "customWidgets": "", + "customWidgets": "自訂小工具", "searchEngies": "搜尋引擎", "medias": "多媒體", "users": { @@ -4528,7 +4575,7 @@ "api": "API", "certificates": "憑證", "tasks": "任務", - "backup": "" + "backup": "備份" } }, "settings": "設定", @@ -4609,7 +4656,7 @@ "private": "此面板是私人的" }, "noResults": { - "title": "" + "title": "尚無面板" }, "modal": { "createBoard": { @@ -4643,20 +4690,20 @@ "firstDayOfWeek": "一周的第一天", "accessibility": "無障礙服務", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "入門導覽", + "description": "重設入門導覽,以便在下次造訪管理區域或儀表板時再次看到它們。", + "reset": "重設入門導覽", "resetSuccess": { - "title": "", - "message": "" + "title": "導覽已重設", + "message": "入門導覽將在你下次造訪時再次顯示" }, "status": { - "completed": "", - "notStarted": "" + "completed": "已完成", + "notStarted": "未開始" }, "name": { - "management": "", - "dashboard": "" + "management": "管理", + "dashboard": "儀表板" } } } @@ -4844,7 +4891,7 @@ "defaultColorScheme": { "label": "預設配色方案", "options": { - "auto": "", + "auto": "自動", "light": "日間", "dark": "暗黑" } @@ -4984,213 +5031,213 @@ } }, "mcp": { - "label": "", - "title": "", - "subtitle": "", - "description": "", - "noApiKey": "", - "createApiKeyButton": "", + "label": "AI / MCP", + "title": "AI 整合", + "subtitle": "模型上下文協定 (MCP) 伺服器", + "description": "將 AI 助手連接到您的 Homarr 實例,並透過自然語言控制整個家庭實驗室。在 Overseerr 上搜尋和請求媒體、管理 Docker 容器、切換 Pi-hole、檢查伺服器健康狀態、控制 Home Assistant 裝置等 — 一切都可以透過 AI 助手完成。", + "noApiKey": "您需要一個 API 金鑰來與 MCP 伺服器進行驗證。", + "createApiKeyButton": "建立 API 金鑰", "endpoint": { - "title": "" + "title": "MCP 端點" }, "authentication": { - "title": "", - "intro": "", + "title": "驗證", + "intro": "您可以使用 API 金鑰或 OAuth 對 MCP 伺服器進行驗證。兩種方法授予相同的存取層級。", "apiKey": { - "title": "", - "description": "" + "title": "API 金鑰 (手動)", + "description": "在 MCP 客戶端設定中傳遞包含完整 API 金鑰的 ApiKey 標頭。" }, "oauth": { - "title": "", - "description": "", - "hint": "" + "title": "OAuth (瀏覽器登入)", + "description": "支援 OAuth 的客戶端 (例如 Claude Code、opencode 或 Cursor) 可以透過開啟瀏覽器視窗進行驗證。在客戶端執行 auth 命令,在瀏覽器中登入 Homarr,即可連線 — 系統會自動建立 API 金鑰。", + "hint": "OAuth 令牌在「驗證」標籤中顯示為一般的 API 金鑰。您可以隨時撤銷它們。" }, - "permissions": "" + "permissions": "API 金鑰決定 AI 可用的權限 — 其運作權限等同於金鑰擁有者的存取層級。" }, "clientConfig": { - "title": "", + "title": "客戶端設定", "streamableHttp": { - "recommended": "", - "title": "", - "worksWith": "", - "addToConfig": "", - "cursor": "", - "claudeDesktop": "", - "claudeCode": "", - "vsCodeCopilot": "", - "replaceHint": "" + "recommended": "建議", + "title": "可串流 HTTP", + "worksWith": "適用於: Cursor、Claude Desktop、VS Code Copilot、Windsurf、Claude Code", + "addToConfig": "新增至您的 MCP 客戶端設定檔:", + "cursor": "{name}: 您的專案或全域設定中的 {file}", + "claudeDesktop": "{name}: {file}", + "claudeCode": "{name}: {file} 或使用 {command}", + "vsCodeCopilot": "{name}: 工作區設定中的 {file}", + "replaceHint": "將預留位置替換為建立時收到的 API 金鑰。" }, "stdio": { - "title": "", - "description": "" + "title": "stdio (透過 mcp-remote 橋接器的舊版客戶端)", + "description": "對於僅支援 stdio 傳輸的客戶端。需要在本地安裝 {dependency} (Node.js):" } }, "testConnection": { - "title": "", - "description": "", - "hint": "" + "title": "測試您的連線", + "description": "在終端機中執行此命令以確認端點可達且您的 API 金鑰有效:", + "hint": "成功回應會傳回 MCP 伺服器功能。如果看到錯誤,請檢查 JSON 回應中的提示。" }, "availableTools": { - "title": "", - "description": "", - "columnType": "", - "columnName": "", - "columnDescription": "" + "title": "可用工具", + "description": "{count} 個工具可用。展開類別以查看個別工具及其描述。", + "columnType": "類型", + "columnName": "工具", + "columnDescription": "描述" }, "troubleshooting": { - "title": "", + "title": "疑難排解", "missingHeader": { - "title": "", - "description": "" + "title": "\"缺少 ApiKey 標頭\"", + "description": "您的客戶端未傳送 {header} 標頭。請確認 MCP 設定中的 {section} 區段是否正確。某些客戶端在設定變更後需要重新啟動。" }, "invalidFormat": { - "title": "", - "description": "" + "title": "\"無效的 ApiKey 格式\"", + "description": "請確保您完整複製了 API 金鑰,而非僅複製一部分。" }, "invalidKey": { - "title": "", - "description": "" + "title": "\"無效的 API 金鑰\"", + "description": "找不到金鑰 ID 或令牌錯誤。API 金鑰在建立時僅顯示一次。如果遺失,請刪除舊金鑰並建立一個新的。" }, "connectionRefused": { - "title": "", - "description": "" + "title": "連線拒絕 / 逾時", + "description": "請確保該 URL 可從您的 AI 客戶端存取。如果 Homarr 在反向代理或 Docker 後執行,請使用外部 URL (而非 {localhost})。確認連接埠正確 (預設: Docker 為 7575)。" }, "toolsNotAppearing": { - "title": "", - "description": "" + "title": "工具未顯示", + "description": "某些工具需要設定特定的整合 (例如 Docker、Overseerr)。工具清單取決於您 Homarr 實例中可用的內容。" } }, - "copy": "", + "copy": "複製", "oneClick": { - "title": "", - "subtitle": "", - "vsCode": "", - "cursor": "", - "copyUrl": "", - "copied": "", - "copyHint": "", - "manualConfig": "" + "title": "一鍵安裝", + "subtitle": "使用 OAuth — 首次使用時在瀏覽器中進行驗證", + "vsCode": "在 VS Code 中安裝", + "cursor": "在 Cursor 中安裝", + "copyUrl": "複製 MCP 網址", + "copied": "已複製!", + "copyHint": "適用於 ChatGPT、Claude Code 或任何 MCP 客戶端", + "manualConfig": "手動設定" } } } }, "backup": { - "title": "", - "metaTitle": "", + "title": "完整資料庫備份", + "metaTitle": "備份與還原", "export": { - "title": "", - "description": "", - "button": "", - "error": "", + "title": "匯出資料庫", + "description": "下載你的 SQLite 資料庫的完整備份,包含所有設定、使用者、面板和加密的整合密鑰。備份會與加密金鑰和中繼資料一起打包成 ZIP 檔案。", + "button": "下載備份", + "error": "匯出失敗", "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "submit": "", - "cancel": "" + "title": "敏感資料匯出", + "warningTitle": "此匯出包含你的整個資料庫。", + "warningBody": "備份包含所有使用者、整合密鑰(已加密)、API 金鑰、面板設定和應用程式資料。請安全儲存匯出的檔案,且不要分享它。", + "typePrompt": "輸入 \"{phrase}\" 以繼續", + "submit": "匯出資料庫", + "cancel": "取消" } }, "import": { - "title": "", - "description": "", - "warning": "", + "title": "還原資料庫", + "description": "上傳先前匯出的備份 ZIP 以還原你的資料庫。這將取代你的整個資料庫。如果備份是使用不同的加密金鑰建立的,密鑰將會自動重新加密。", + "warning": "還原備份將會完全取代你目前的資料庫並重新啟動應用程式。此動作無法復原。", "dropzone": { - "title": "", - "description": "" + "title": "將備份 ZIP 拖曳至此處,或點擊以瀏覽", + "description": "僅接受來自 Homarr SQLite 備份的 .zip 檔案" }, - "changeFile": "", - "button": "", + "changeFile": "更換檔案", + "button": "還原資料庫", "success": { - "title": "", - "message": "" + "title": "還原完成", + "message": "資料庫已成功還原。應用程式正在重新啟動……" }, - "error": "" + "error": "匯入失敗" }, "preview": { - "title": "", - "exported": "", - "loading": "", - "errorTitle": "", - "entity": "", - "count": "", - "boards": "", + "title": "備份內容", + "exported": "匯出於 {date}", + "loading": "正在分析備份檔案……", + "errorTitle": "預覽錯誤", + "entity": "實體", + "count": "計數", + "boards": "面板", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "面板", + "user": "使用者", + "app": "應用程式", + "integration": "整合", + "item": "小工具", + "media": "媒體", + "search_engine": "搜尋引擎" }, - "analyzeError": "", - "invalidMissingMetadata": "", - "invalidMissingDb": "" + "analyzeError": "無法分析備份檔案", + "invalidMissingMetadata": "無效備份:缺少 metadata.json", + "invalidMissingDb": "無效備份:缺少 db.sqlite" }, "restore": { "dropzone": { - "title": "", - "description": "" + "title": "將備份 ZIP 拖曳至此處", + "description": "接受來自 Homarr SQLite 備份的 .zip 檔案(最大 256 MB)" }, - "analyzing": "", - "changeFile": "", - "continueToRestore": "", - "tryAgain": "", - "analysisError": "", + "analyzing": "正在分析備份……", + "changeFile": "更換檔案", + "continueToRestore": "繼續還原", + "tryAgain": "再試一次", + "analysisError": "分析錯誤", "preview": { - "title": "", - "exported": "", - "entity": "", - "count": "", - "boards": "", + "title": "備份內容", + "exported": "匯出於 {date}", + "entity": "實體", + "count": "計數", + "boards": "面板", "entities": { - "board": "", - "user": "", - "app": "", - "integration": "", - "item": "", - "media": "", - "search_engine": "" + "board": "面板", + "user": "使用者", + "app": "應用程式", + "integration": "整合", + "item": "小工具", + "media": "媒體", + "search_engine": "搜尋引擎" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", - "migrationsOlderVersion": "", - "migrationsOlderVersionPlural": "", - "migrationsUpToDate": "", - "upToDate": "", - "migrationsPending": "" + "migrationsApplied": "已套用 {count} 個遷移", + "migrationsAppliedPlural": "已套用 {count} 個遷移", + "migrationsOlderVersion": "此備份來自較舊的 Homarr 版本。已套用 {count} 個結構遷移以使其更新。", + "migrationsOlderVersionPlural": "此備份來自較舊的 Homarr 版本。已套用 {count} 個結構遷移以使其更新。", + "migrationsUpToDate": "資料庫結構為最新(已套用 {count} 個遷移)", + "upToDate": "最新", + "migrationsPending": "{count} 個待處理" }, "migration": { - "title": "", - "migrationLabel": "" + "title": "正在套用遷移({current}/{total})", + "migrationLabel": "遷移 {index}" }, "confirm": { - "title": "", - "warningTitle": "", - "warningBody": "", - "typePrompt": "", - "cancel": "", - "submit": "" + "title": "破壞性動作", + "warningTitle": "這將永久取代你的整個資料庫。", + "warningBody": "所有當前的面板、使用者、應用程式、整合、設定和工作階段都將遺失。此動作無法復原。應用程式將在還原後重新啟動。", + "typePrompt": "輸入 \"{phrase}\" 以繼續", + "cancel": "取消", + "submit": "還原資料庫" }, "progress": { - "title": "", - "extracting": "", - "migrating": "", - "encrypting": "", - "swapping": "", - "restarting": "" + "title": "正在還原資料庫……", + "extracting": "正在解壓縮備份檔案", + "migrating": "正在套用資料庫遷移", + "encrypting": "正在重新加密整合密鑰", + "swapping": "正在取代資料庫檔案", + "restarting": "重新啟動伺服器" }, "complete": { - "title": "", - "message": "" + "title": "還原完成", + "message": "資料庫已成功還原。伺服器正在重新啟動 — 請在幾秒後重新整理頁面。" }, "failed": { - "title": "" + "title": "還原失敗" }, - "invalidMissingMetadata": "", - "invalidMissingDb": "", - "analyzeError": "" + "invalidMissingMetadata": "無效備份:缺少 metadata.json", + "invalidMissingDb": "無效備份:缺少 db.sqlite", + "analyzeError": "無法分析備份" } } }, @@ -5238,13 +5285,13 @@ "table": { "updated": "已更新於 {when}", "refresh": { - "lastUpdated": "" + "lastUpdated": "上次更新 {when}" }, "search": "搜尋 {count} 容器", "selected": "{totalCount} 容器的 {selectCount}", "footer": "", - "totalCpu": "", - "totalMemory": "" + "totalCpu": "總 CPU: {cpu}%", + "totalMemory": "總記憶體: {memory}" }, "field": { "name": { @@ -5277,15 +5324,15 @@ "label": "端口" }, "host": { - "label": "" + "label": "主機" } }, "action": { "title": "", "logs": { - "label": "", + "label": "檢視日誌", "page": { - "title": "" + "title": "{name} 日誌" } }, "start": { @@ -5329,6 +5376,7 @@ }, "remove": { "label": "移除", + "confirm": "", "notification": { "success": { "title": "容器已移除", @@ -5372,7 +5420,7 @@ }, "error": { "internalServerError": "取得 Docker 容器失敗", - "noColumns": "" + "noColumns": "在小工具設定中至少選擇一欄" } }, "kubernetes": { @@ -5681,14 +5729,14 @@ } }, "custom-widgets": { - "label": "", + "label": "自訂小工具", "new": { - "label": "" + "label": "新增" }, "edit": { - "label": "", + "label": "編輯", "flow": { - "label": "" + "label": "流程" } } }, @@ -5715,7 +5763,7 @@ "docker": { "label": "Docker", "logs": { - "label": "" + "label": "日誌" } }, "kubernetes": { @@ -5826,7 +5874,7 @@ "title": "全局命令", "option": { "colorScheme": { - "auto": "", + "auto": "切換外觀模式", "light": "切換日間模式", "dark": "切換暗黑模式" }, @@ -5867,146 +5915,146 @@ } }, "preferences": { - "title": "", + "title": "偏好設定", "children": { "detail": { - "title": "", - "backHint": "", - "backAction": "" + "title": "選取要變更的偏好設定", + "backHint": "按退格鍵或使用返回按鈕返回", + "backAction": "返回" } }, "notification": { "error": { - "message": "" + "message": "無法更新偏好設定" } }, "option": { "preferences": { - "label": "" + "label": "開啟偏好設定" }, "boolean": { - "enabled": "", - "disabled": "" + "enabled": "已啟用", + "disabled": "已停用" }, "board": { - "none": "", - "unavailable": "" + "none": "無", + "unavailable": "目前選取(不可用)" }, "searchEngine": { - "none": "", - "unavailable": "" + "none": "無", + "unavailable": "目前選取(不可用)" }, "colorScheme": { - "label": "", + "label": "色彩方案", "children": { "detail": { - "title": "" + "title": "選取你的色彩方案" } } }, "locale": { - "label": "", + "label": "語言", "children": { "detail": { - "title": "" + "title": "選取你的偏好語言" } } }, "defaultSearchEngineId": { - "label": "", + "label": "預設搜尋引擎", "children": { "detail": { - "title": "" + "title": "選取你的預設搜尋引擎" } } }, "openSearchInNewTab": { - "label": "", + "label": "在新分頁中開啟搜尋結果", "children": { "detail": { - "title": "" + "title": "在新分頁中開啟搜尋結果" } } }, "ddgBangs": { - "label": "", + "label": "啟用 DuckDuckGo bangs", "children": { "detail": { - "title": "" + "title": "啟用 DuckDuckGo bangs" } } }, "firstDayOfWeek": { - "label": "", + "label": "一週的第一天", "children": { "detail": { - "title": "" + "title": "選取一週的第一天" } } }, "homeBoardId": { - "label": "", + "label": "首頁面板", "children": { "detail": { - "title": "" + "title": "選取你的首頁面板" } } }, "mobileHomeBoardId": { - "label": "", + "label": "行動裝置首頁面板", "children": { "detail": { - "title": "" + "title": "選取你的行動裝置首頁面板" } } }, "pingIconsEnabled": { - "label": "", + "label": "使用圖示顯示 Ping", "children": { "detail": { - "title": "" + "title": "使用圖示顯示 Ping" } } }, "enableRightClickOnWidgets": { - "label": "", + "label": "啟用小工具右鍵選單", "children": { "detail": { - "title": "" + "title": "啟用小工具右鍵選單" } } }, "fullPreferencesPage": { - "label": "" + "label": "開啟完整偏好設定頁面" } } } } }, "media": { - "help": "", + "help": "搜尋電影或節目以提出請求", "requestMovie": "請求電影", "requestSeries": "請求系列", "openIn": "開啟於 {kind}", "group": { - "title": "" + "title": "電影和節目" }, "action": { "search": { - "label": "", - "description": "", + "label": "搜尋電影或節目", + "description": "開始輸入以搜尋你的媒體請求整合", "disabled": { - "noIntegration": "", - "scoped": "" + "noIntegration": "新增 Overseerr、Jellyseerr 或 Seerr 整合以啟用媒體搜尋。", + "scoped": "此小工具沒有可存取的媒體請求整合。" } } }, "availability": { - "available": "", - "partiallyAvailable": "", - "processing": "", - "requested": "", - "pending": "" + "available": "可用", + "partiallyAvailable": "部分", + "processing": "處理中", + "requested": "已請求", + "pending": "已請求" } }, "external": { @@ -6014,13 +6062,13 @@ "group": { "searchEngine": { "title": "搜尋引擎", - "tipDdgBangs": "", + "tipDdgBangs": "提示:你也可以在此使用任何 DuckDuckGo bangs,例如 !something", "bang": { - "searchWithQuery": "", - "pressEnterToOpen": "", - "engineSelected": "", - "typeQueryToContinue": "", - "emptyBangHint": "" + "searchWithQuery": "使用 {label} 搜尋 \"{query}\"", + "pressEnterToOpen": "按 Enter 開啟", + "engineSelected": "已選取 {label} (!{bang})", + "typeQueryToContinue": "輸入搜尋查詢以繼續", + "emptyBangHint": "輸入一個 bang,例如 !yt,然後按空格鍵選取" }, "children": { "action": { @@ -6284,10 +6332,10 @@ "header": { "season": "季", "episodes": "劇集", - "status": "" + "status": "狀態" }, "status": { - "requested": "" + "requested": "已請求" } }, "button": { @@ -6400,69 +6448,69 @@ } }, "onboardingTour": { - "learnMore": "", - "next": "", - "prev": "", - "done": "", - "skip": "", + "learnMore": "閱讀文件", + "next": "下一步", + "prev": "返回", + "done": "完成", + "skip": "略過導覽", "manage": { "welcome": { - "title": "", - "description": "" + "title": "歡迎來到 Homarr!", + "description": "這是你的控制中心。從這裡你可以管理面板、應用程式、整合、使用者和伺服器設定。讓我們瀏覽每個區塊。" }, "boardsList": { - "title": "", - "description": "" + "title": "你的面板", + "description": "這裡是你所有的儀表板。每個面板都有自己的佈局、背景和存取設定。你可以看到誰建立了每個面板,以及它是公開還是私密的。" }, "boardsCreate": { - "title": "", - "description": "" + "title": "建立面板", + "description": "點擊此處以建立新的儀表板,或從先前的 Homarr 安裝匯入一個。每個面板都會有自己你可分享的 URL。" }, "appsList": { - "title": "", - "description": "" + "title": "你的應用程式", + "description": "這些是你已新增的所有應用程式 — 連結到你的自託管服務。每個應用程式都有一個圖示、選用的健康檢查,並在儀表板上顯示狀態徽章。" }, "appsCreate": { - "title": "", - "description": "" + "title": "新增應用程式", + "description": "在此註冊新的服務。給它一個名稱、URL 和圖示 — 它將作為一個帶有即時狀態監控的方塊顯示在你的面板上。" }, "integrationsList": { - "title": "", - "description": "" + "title": "你的整合", + "description": "這些是連接到 Homarr 的服務 — Sonarr、Radarr、Plex、Jellyfin 等超過 50 個服務。所有憑證在靜置時都經過加密。" }, "integrationsCreate": { - "title": "", - "description": "" + "title": "新增整合", + "description": "在此連接新的服務。選擇類型,輸入 URL 和 API 金鑰 — Homarr 會在儲存前驗證連接。" }, "usersList": { - "title": "", - "description": "" + "title": "你的使用者", + "description": "查看每一位有存取權的人。將使用者組織成群組,並控制誰可以檢視或編輯每個面板。" }, "usersCreate": { - "title": "", - "description": "" + "title": "建立使用者", + "description": "在此新增新的使用者帳戶。你也可以使用邀請連結輕鬆上手。導覽到此結束 — 你已設定完成!" } }, "board": { "welcome": { - "title": "", - "description": "" + "title": "這是你的面板", + "description": "一個拖放式儀表板,你可以在其中排列應用程式和小工具。隨時按下 Ctrl+K 搜尋應用程式、面板和動作。" }, "editMode": { - "title": "", - "description": "" + "title": "編輯模式", + "description": "點擊此處進入編輯模式。然後你可以新增小工具、應用程式和區塊 — 拖曳以重新定位,使用角落控點調整大小。再次點擊以儲存變更。" }, "settings": { - "title": "", - "description": "" + "title": "面板設定", + "description": "變更此面板的名稱、欄數、背景、色彩,以及誰可以存取它。每個面板都可以是公開或私密的。" }, "switcher": { - "title": "", - "description": "" + "title": "切換面板", + "description": "在面板之間跳轉。為不同目的建立獨立的儀表板 — 媒體、網路、每位使用者,或任何你喜歡的。" }, "userMenu": { - "title": "", - "description": "" + "title": "你的個人資料", + "description": "變更你的色彩方案、語言、首頁面板和偏好設定。你也可以從這裡跳轉到管理區域。" } } } diff --git a/packages/validation/src/app.ts b/packages/validation/src/app.ts index 21a4335be..dfc7652a7 100644 --- a/packages/validation/src/app.ts +++ b/packages/validation/src/app.ts @@ -3,8 +3,7 @@ import { z } from "zod/v4"; export const appHrefSchema = z .string() .trim() - .url() - .regex(/^(?!javascript)[a-zA-Z]*:\/\//i) // javascript: is not allowed, i for case insensitive (so Javascript: is also not allowed) + .refine((val) => !/^javascript:/i.test(val), "JavaScript URIs are not permitted") .or(z.literal("")) .transform((value) => (value.length === 0 ? null : value)) .nullable(); diff --git a/packages/widgets/src/beszel-system-table/component.spec.ts b/packages/widgets/src/beszel-system-table/component.spec.ts new file mode 100644 index 000000000..0dd3e655d --- /dev/null +++ b/packages/widgets/src/beszel-system-table/component.spec.ts @@ -0,0 +1,34 @@ +import { describe, expect, test } from "vitest"; + +import { parseColumnOrder, parseColumnWidths } from "../common/use-persisted-table-layout"; + +const columnAccessors = ["name", "cpu", "memory", "disk", "temp"]; + +describe("Beszel table column layout options", () => { + test("ignores malformed column layout JSON", () => { + expect(parseColumnOrder("{", columnAccessors)).toEqual([]); + expect(parseColumnWidths("[]", columnAccessors)).toEqual({}); + }); + + test("removes stale and duplicate column accessors", () => { + expect(parseColumnOrder(JSON.stringify(["memory", "removed", "cpu", "memory"]), columnAccessors)).toEqual([ + "memory", + "cpu", + ]); + }); + + test("keeps only finite positive widths for known columns", () => { + expect( + parseColumnWidths( + JSON.stringify({ + cpu: 140, + memory: -1, + disk: "160px", + removed: 100, + temp: null, + }), + columnAccessors, + ), + ).toEqual({ cpu: 140 }); + }); +}); diff --git a/packages/widgets/src/beszel-system-table/component.tsx b/packages/widgets/src/beszel-system-table/component.tsx index 5352eb170..8286335a6 100644 --- a/packages/widgets/src/beszel-system-table/component.tsx +++ b/packages/widgets/src/beszel-system-table/component.tsx @@ -1,11 +1,8 @@ "use client"; -import "./styles.css"; - -import { useMemo, useState } from "react"; +import { useCallback, useEffect, useMemo, useState } from "react"; import { Center, Group, Indicator, Loader, Progress, Text } from "@mantine/core"; import type { DataTableColumn, DataTableSortStatus } from "mantine-datatable"; -import { DataTable } from "mantine-datatable"; import { Activity, Battery, @@ -20,10 +17,16 @@ import { } from "lucide-react"; import { clientApi } from "@homarr/api/client"; +import { useSession } from "@homarr/auth/client"; +import { constructBoardPermissions } from "@homarr/auth/shared"; +import { useOptionalBoard } from "@homarr/boards/context"; import { useModalAction } from "@homarr/modals"; +import { showErrorNotification } from "@homarr/notifications"; import { useScopedI18n } from "@homarr/translation/client"; import type { WidgetComponentProps } from "../definition"; +import { HomarrDataTable } from "../common/homarr-data-table"; +import { usePersistedTableLayout, useTableLayoutPersistence } from "../common/use-persisted-table-layout"; import type { BeszelSystemRow } from "../beszel/_shared/types"; import { loadAvgColor, statusColorMap, thresholdColor } from "../beszel/_shared/colors"; import { @@ -43,6 +46,21 @@ const directionMultiplier: Record = { asc: 1, desc: -1 }; type SystemRowWithKey = BeszelSystemRow & { _key: string }; +const columnAccessors = [ + "name", + "cpu", + "memory", + "disk", + "gpu", + "loadAvg", + "netBytes", + "temp", + "battery", + "services", + "uptime", + "agentVersion", +] as const satisfies readonly (keyof BeszelSystemRow)[]; + interface SizeConfig { iconSize: number; fontSize: "xs" | "sm"; @@ -75,15 +93,36 @@ export default function BeszelSystemTableWidget({ integrationIds, isEditMode, width, + boardId, + itemId, + setOptions, }: WidgetComponentProps<"beszelSystemTable">) { const t = useScopedI18n("widget.beszelSystemTable"); const { openModal } = useModalAction(BeszelSystemStatsModal); + const board = useOptionalBoard(); + const { data: session } = useSession(); + const hasChangeAccess = board ? constructBoardPermissions(board, session).hasChangeAccess : false; const { data: results = [], error: systemsError, isPending, } = clientApi.widget.beszel.getSystems.useQuery({ integrationIds }); - const size = getSizeConfig(width); + const size = useMemo(() => getSizeConfig(width), [width]); + + const { mutate: saveItemOptions } = clientApi.widget.options.saveItemOptions.useMutation({ + onError: () => + showErrorNotification({ + title: t("error.layoutSaveTitle"), + message: t("error.layoutSaveMessage"), + }), + }); + const persistLayout = useTableLayoutPersistence({ + boardId, + hasChangeAccess, + itemId, + saveItemOptions, + setOptions, + }); const filteredSystems = useBeszelFilteredSystems(results, options.statusFilter); @@ -91,6 +130,12 @@ export default function BeszelSystemTableWidget({ columnAccessor: options.sortBy, direction: options.sortDirection as "asc" | "desc", }); + useEffect(() => { + setSortStatus({ + columnAccessor: options.sortBy, + direction: options.sortDirection as "asc" | "desc", + }); + }, [options.sortBy, options.sortDirection]); const sortedSystems = useMemo(() => { const accessor = sortStatus.columnAccessor as keyof BeszelSystemRow; @@ -122,6 +167,8 @@ export default function BeszelSystemTableWidget({ const cols: (DataTableColumn | false)[] = [ { accessor: "name", + width: 160, + ellipsis: true, title: ( @@ -130,7 +177,7 @@ export default function BeszelSystemTableWidget({ ), sortable: true, render: (record) => ( - + {record.name} @@ -140,6 +187,7 @@ export default function BeszelSystemTableWidget({ }, options.showCpu && { accessor: "cpu", + width: 140, title: ( @@ -151,6 +199,7 @@ export default function BeszelSystemTableWidget({ }, options.showMemory && { accessor: "memory", + width: 140, title: ( @@ -162,6 +211,7 @@ export default function BeszelSystemTableWidget({ }, options.showDisk && { accessor: "disk", + width: 160, title: ( @@ -181,6 +231,7 @@ export default function BeszelSystemTableWidget({ }, options.showGpu && { accessor: "gpu", + width: 140, title: ( @@ -192,6 +243,7 @@ export default function BeszelSystemTableWidget({ }, options.showLoadAvg && { accessor: "loadAvg", + width: 100, title: ( @@ -208,6 +260,7 @@ export default function BeszelSystemTableWidget({ }, options.showNet && { accessor: "netBytes", + width: 100, title: ( @@ -223,6 +276,7 @@ export default function BeszelSystemTableWidget({ }, options.showTemp && { accessor: "temp", + width: 80, title: ( @@ -234,6 +288,7 @@ export default function BeszelSystemTableWidget({ }, options.showBattery && { accessor: "battery", + width: 70, title: ( @@ -244,6 +299,7 @@ export default function BeszelSystemTableWidget({ }, options.showServices && { accessor: "services", + width: 80, title: ( @@ -255,6 +311,7 @@ export default function BeszelSystemTableWidget({ }, options.showUptime && { accessor: "uptime", + width: 90, title: ( @@ -266,6 +323,7 @@ export default function BeszelSystemTableWidget({ }, options.showAgent && { accessor: "agentVersion", + width: 90, title: ( @@ -278,12 +336,39 @@ export default function BeszelSystemTableWidget({ ]; return cols.filter(Boolean) as DataTableColumn[]; - }, [options, t, size]); + }, [ + options.showAgent, + options.showBattery, + options.showCpu, + options.showDisk, + options.showGpu, + options.showLoadAvg, + options.showMemory, + options.showNet, + options.showServices, + options.showTemp, + options.showUptime, + size, + t, + ]); - const handleRowClick = ({ record }: { record: SystemRowWithKey }) => { - const integrationId = record._key.split(":")[0] ?? ""; - openModal({ integrationId, systemId: record.id }, { title: record.name }); - }; + const { effectiveColumns, storeKey } = usePersistedTableLayout({ + columns, + columnAccessors, + columnOrder: options.columnOrder, + columnWidths: options.columnWidths, + itemId, + storeKeyPrefix: "beszel-system-table", + onLayoutChange: persistLayout, + }); + + const handleRowClick = useCallback( + ({ record }: { record: SystemRowWithKey }) => { + const integrationId = record._key.split(":")[0] ?? ""; + openModal({ integrationId, systemId: record.id }, { title: record.name }); + }, + [openModal], + ); if (systemsError) throw systemsError; @@ -300,20 +385,17 @@ export default function BeszelSystemTableWidget({
- diff --git a/packages/widgets/src/beszel-system-table/index.ts b/packages/widgets/src/beszel-system-table/index.ts index ba90cb5e9..e31bbc597 100644 --- a/packages/widgets/src/beszel-system-table/index.ts +++ b/packages/widgets/src/beszel-system-table/index.ts @@ -29,28 +29,36 @@ export const { definition, componentLoader } = createWidgetDefinition("beszelSys supportedIntegrations: ["beszel", "mock"], integrationsRequired: true, createOptions() { - return optionsBuilder.from((factory) => ({ - statusFilter: factory.select({ - defaultValue: "all", - options: statusOptions, + return optionsBuilder.from( + (factory) => ({ + statusFilter: factory.select({ + defaultValue: "all", + options: statusOptions, + }), + sortBy: factory.select({ defaultValue: "name", options: sortOptions }), + sortDirection: factory.select({ + defaultValue: "asc", + options: sortDirectionOptions, + }), + showCpu: factory.switch({ defaultValue: true }), + showMemory: factory.switch({ defaultValue: true }), + showDisk: factory.switch({ defaultValue: true }), + showGpu: factory.switch({ defaultValue: true }), + showLoadAvg: factory.switch({ defaultValue: true }), + showNet: factory.switch({ defaultValue: true }), + showTemp: factory.switch({ defaultValue: true }), + showBattery: factory.switch({ defaultValue: true }), + showServices: factory.switch({ defaultValue: true }), + showUptime: factory.switch({ defaultValue: true }), + showAgent: factory.switch({ defaultValue: true }), + columnOrder: factory.text({ defaultValue: "" }), + columnWidths: factory.text({ defaultValue: "" }), }), - sortBy: factory.select({ defaultValue: "name", options: sortOptions }), - sortDirection: factory.select({ - defaultValue: "asc", - options: sortDirectionOptions, - }), - showCpu: factory.switch({ defaultValue: true }), - showMemory: factory.switch({ defaultValue: true }), - showDisk: factory.switch({ defaultValue: true }), - showGpu: factory.switch({ defaultValue: true }), - showLoadAvg: factory.switch({ defaultValue: true }), - showNet: factory.switch({ defaultValue: true }), - showTemp: factory.switch({ defaultValue: true }), - showBattery: factory.switch({ defaultValue: true }), - showServices: factory.switch({ defaultValue: true }), - showUptime: factory.switch({ defaultValue: true }), - showAgent: factory.switch({ defaultValue: true }), - })); + { + columnOrder: { shouldHide: () => true }, + columnWidths: { shouldHide: () => true }, + }, + ); }, errors: { INTERNAL_SERVER_ERROR: { diff --git a/packages/widgets/src/beszel-system-table/styles.css b/packages/widgets/src/beszel-system-table/styles.css deleted file mode 100644 index cdfd682f9..000000000 --- a/packages/widgets/src/beszel-system-table/styles.css +++ /dev/null @@ -1,47 +0,0 @@ -/* Make the DataTable transparent so the board card's opacity-controlled - background shows through. The mantine-datatable defaults to - var(--mantine-color-body) which is opaque. */ -.beszel-table, -.beszel-table .mantine-datatable-table, -.beszel-table .mantine-datatable-table thead, -.beszel-table .mantine-datatable-table tbody, -.beszel-table .mantine-datatable-table tfoot, -.beszel-table th, -.beszel-table td { - background-color: transparent !important; -} - -.beszel-table .mantine-datatable-table tr { - background-color: transparent; -} - -.beszel-table .mantine-datatable-table tbody tr:hover { - background-color: color-mix(in srgb, var(--mantine-color-default-hover) 40%, transparent) !important; -} - -.beszel-table th { - white-space: nowrap; - background-color: color-mix(in srgb, var(--mantine-color-body) 60%, transparent) !important; - backdrop-filter: blur(8px); -} - -.beszel-table td { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.beszel-table td .mantine-Text-root, -.beszel-table td .mantine-Group-root { - white-space: nowrap; - flex-wrap: nowrap; -} - -.beszel-table .mantine-datatable-header-cell-sortable-icon { - opacity: 0; - transition: opacity 150ms; -} - -.beszel-table th:hover .mantine-datatable-header-cell-sortable-icon { - opacity: 1; -} diff --git a/packages/widgets/src/common/homarr-data-table.css b/packages/widgets/src/common/homarr-data-table.css new file mode 100644 index 000000000..0e9d7d7c5 --- /dev/null +++ b/packages/widgets/src/common/homarr-data-table.css @@ -0,0 +1,52 @@ +.homarr-data-table, +.homarr-data-table .mantine-datatable-table, +.homarr-data-table .mantine-datatable-table thead, +.homarr-data-table .mantine-datatable-table tbody, +.homarr-data-table .mantine-datatable-table tfoot, +.homarr-data-table th, +.homarr-data-table td { + background-color: transparent !important; +} + +.homarr-data-table .mantine-datatable-table tr { + background-color: transparent; +} + +.homarr-data-table .mantine-datatable-table tbody tr:hover { + background-color: color-mix(in srgb, var(--mantine-color-default-hover) 40%, transparent) !important; +} + +.homarr-data-table th { + white-space: nowrap; + background-color: color-mix(in srgb, var(--mantine-color-body) 60%, transparent) !important; + backdrop-filter: blur(8px); +} + +.homarr-data-table td { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.homarr-data-table td .mantine-Text-root, +.homarr-data-table td .mantine-Group-root { + white-space: nowrap; + flex-wrap: nowrap; +} + +.homarr-data-table .mantine-datatable-header-cell-sortable-icon, +.homarr-data-table .mantine-datatable-header-cell-draggable-action-icon { + opacity: 0; + transition: opacity 150ms ease-out; +} + +.homarr-data-table th:hover .mantine-datatable-header-cell-sortable-icon, +.homarr-data-table th:hover .mantine-datatable-header-cell-draggable-action-icon, +.homarr-data-table .mantine-datatable-header-cell-draggable-action-icon:focus-visible, +.homarr-data-table .mantine-datatable-header-cell-drag-over .mantine-datatable-header-cell-draggable-action-icon { + opacity: 1; +} + +.homarr-data-table-row-cursor-default .mantine-datatable-context-menu-cursor { + cursor: default; +} diff --git a/packages/widgets/src/common/homarr-data-table.tsx b/packages/widgets/src/common/homarr-data-table.tsx new file mode 100644 index 000000000..0941a9305 --- /dev/null +++ b/packages/widgets/src/common/homarr-data-table.tsx @@ -0,0 +1,57 @@ +"use client"; + +import "./homarr-data-table.css"; + +import type { DataTableProps } from "mantine-datatable"; +import { DataTable } from "mantine-datatable"; + +type HomarrDataTableProps = DataTableProps & { + isEditMode: boolean; + cellPadding: string; + rowCursor?: "auto" | "default"; +}; + +export function HomarrDataTable({ + isEditMode, + cellPadding, + rowCursor = "auto", + className, + defaultColumnProps, + scrollAreaProps, + style, + ...props +}: HomarrDataTableProps) { + const mergedClassName = [ + "homarr-data-table", + rowCursor === "default" ? "homarr-data-table-row-cursor-default" : undefined, + className, + ] + .filter(Boolean) + .join(" "); + + return ( + + withTableBorder={false} + borderRadius={0} + highlightOnHover + striped="odd" + stripedColor={{ dark: "dark.7", light: "gray.0" }} + highlightOnHoverColor={{ dark: "dark.5", light: "gray.1" }} + verticalAlign="center" + loaderBackgroundBlur={2} + textSelectionDisabled + height="100%" + {...props} + className={mergedClassName} + style={[{ pointerEvents: isEditMode ? "none" : undefined }, style]} + defaultColumnProps={{ + ...defaultColumnProps, + noWrap: defaultColumnProps?.noWrap ?? true, + draggable: !isEditMode, + resizable: !isEditMode, + cellsStyle: defaultColumnProps?.cellsStyle ?? (() => ({ padding: cellPadding })), + }} + scrollAreaProps={{ type: "auto", scrollbarSize: 6, ...scrollAreaProps }} + /> + ); +} diff --git a/packages/widgets/src/common/use-persisted-table-layout.spec.ts b/packages/widgets/src/common/use-persisted-table-layout.spec.ts new file mode 100644 index 000000000..0e1297b88 --- /dev/null +++ b/packages/widgets/src/common/use-persisted-table-layout.spec.ts @@ -0,0 +1,83 @@ +import { act, createElement } from "react"; +import { createRoot } from "react-dom/client"; +import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; + +import type { Root } from "react-dom/client"; +import type { DataTableColumn } from "mantine-datatable"; + +const tableState = vi.hoisted(() => ({ + columnsOrder: ["name", "state"], + columnsWidth: [] as Record[], +})); + +vi.mock("mantine-datatable", () => ({ + useDataTableColumns: ({ columns }: { columns: DataTableColumn[] }) => ({ + effectiveColumns: columns, + columnsOrder: tableState.columnsOrder, + columnsWidth: tableState.columnsWidth, + setColumnsOrder: vi.fn(), + setMultipleColumnWidths: vi.fn(), + }), +})); + +import { usePersistedTableLayout } from "./use-persisted-table-layout"; + +const columns: DataTableColumn<{ name: string; state: string }>[] = [{ accessor: "name" }, { accessor: "state" }]; +const columnAccessors = ["name", "state"] as const; + +const LayoutHarness = ({ itemId, onLayoutChange }: { itemId: string; onLayoutChange: (layout: unknown) => void }) => { + usePersistedTableLayout({ + columns, + columnAccessors, + columnOrder: "", + columnWidths: "", + itemId, + storeKeyPrefix: "test-table", + onLayoutChange, + }); + return null; +}; + +describe("usePersistedTableLayout", () => { + let container: HTMLDivElement; + let root: Root; + + beforeAll(() => { + Object.defineProperty(globalThis, "IS_REACT_ACT_ENVIRONMENT", { value: true, writable: true }); + }); + + beforeEach(() => { + vi.useFakeTimers(); + tableState.columnsOrder = ["name", "state"]; + tableState.columnsWidth = []; + container = document.createElement("div"); + root = createRoot(container); + }); + + afterEach(async () => { + await act(async () => root.unmount()); + vi.useRealTimers(); + }); + + test("flushes a pending layout through the callback for its originating item", async () => { + const firstItemLayoutChange = vi.fn(); + const secondItemLayoutChange = vi.fn(); + + await act(async () => { + root.render(createElement(LayoutHarness, { itemId: "first", onLayoutChange: firstItemLayoutChange })); + }); + + tableState.columnsOrder = ["state", "name"]; + await act(async () => { + root.render(createElement(LayoutHarness, { itemId: "first", onLayoutChange: firstItemLayoutChange })); + }); + expect(firstItemLayoutChange).not.toHaveBeenCalled(); + + await act(async () => { + root.render(createElement(LayoutHarness, { itemId: "second", onLayoutChange: secondItemLayoutChange })); + }); + + expect(firstItemLayoutChange).toHaveBeenCalledWith({ columnOrder: JSON.stringify(["state", "name"]) }); + expect(secondItemLayoutChange).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/widgets/src/common/use-persisted-table-layout.ts b/packages/widgets/src/common/use-persisted-table-layout.ts new file mode 100644 index 000000000..9a126f076 --- /dev/null +++ b/packages/widgets/src/common/use-persisted-table-layout.ts @@ -0,0 +1,233 @@ +"use client"; + +import { useCallback, useEffect, useMemo, useRef } from "react"; +import type { DataTableColumn } from "mantine-datatable"; +import { useDataTableColumns } from "mantine-datatable"; + +interface TableLayoutOptions extends Record { + columnOrder?: string; + columnWidths?: string; +} + +interface PendingTableLayout { + layout: TableLayoutOptions; + onLayoutChange: (layout: TableLayoutOptions) => void; + storeKey: string; +} + +interface UseTableLayoutPersistenceProps { + boardId: string | undefined; + hasChangeAccess: boolean; + itemId: string | undefined; + saveItemOptions: (input: { boardId: string; itemId: string; newOptions: TableLayoutOptions }) => void; + setOptions: (input: { newOptions: TableLayoutOptions }) => void; +} + +interface UsePersistedTableLayoutProps { + columns: DataTableColumn[]; + columnAccessors: readonly string[]; + columnOrder: string; + columnWidths: string; + itemId: string | undefined; + storeKeyPrefix: string; + onLayoutChange: (layout: TableLayoutOptions) => void; +} + +const layoutSaveDelay = 350; + +export const useTableLayoutPersistence = ({ + boardId, + hasChangeAccess, + itemId, + saveItemOptions, + setOptions, +}: UseTableLayoutPersistenceProps) => + useCallback( + (newOptions: TableLayoutOptions) => { + setOptions({ newOptions }); + if (hasChangeAccess && boardId && itemId) saveItemOptions({ boardId, itemId, newOptions }); + }, + [boardId, hasChangeAccess, itemId, saveItemOptions, setOptions], + ); + +const toPixelWidth = (width: string | number): number | undefined => { + if (typeof width === "number" && Number.isFinite(width) && width > 0) return width; + if (typeof width !== "string" || !width.endsWith("px")) return undefined; + + const parsedWidth = Number.parseInt(width, 10); + return Number.isFinite(parsedWidth) && parsedWidth > 0 ? parsedWidth : undefined; +}; + +const getColumnWidthMap = ( + columnsWidth: Record[], + visibleAccessorSet: ReadonlySet, +): Record => { + const widths: Record = {}; + for (const entry of columnsWidth) { + for (const [accessor, width] of Object.entries(entry)) { + if (!visibleAccessorSet.has(accessor)) continue; + const pixelWidth = toPixelWidth(width); + if (pixelWidth !== undefined) widths[accessor] = pixelWidth; + } + } + return widths; +}; + +export const parseColumnOrder = (value: string, columnAccessors: readonly string[]): string[] => { + if (!value) return []; + try { + const parsed: unknown = JSON.parse(value); + if (!Array.isArray(parsed)) return []; + + const allowed = new Set(columnAccessors); + return parsed.filter( + (accessor, index): accessor is string => + typeof accessor === "string" && allowed.has(accessor) && parsed.indexOf(accessor) === index, + ); + } catch { + return []; + } +}; + +export const parseColumnWidths = (value: string, columnAccessors: readonly string[]): Record => { + if (!value) return {}; + try { + const parsed: unknown = JSON.parse(value); + if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return {}; + + const allowed = new Set(columnAccessors); + return Object.fromEntries( + Object.entries(parsed).filter( + (entry): entry is [string, number] => + allowed.has(entry[0]) && typeof entry[1] === "number" && Number.isFinite(entry[1]) && entry[1] > 0, + ), + ); + } catch { + return {}; + } +}; + +export const usePersistedTableLayout = ({ + columns, + columnAccessors, + columnOrder, + columnWidths, + itemId, + storeKeyPrefix, + onLayoutChange, +}: UsePersistedTableLayoutProps) => { + const savedOrder = useMemo(() => parseColumnOrder(columnOrder, columnAccessors), [columnAccessors, columnOrder]); + const savedWidths = useMemo(() => parseColumnWidths(columnWidths, columnAccessors), [columnAccessors, columnWidths]); + const visibleAccessors = useMemo(() => columns.map(({ accessor }) => String(accessor)), [columns]); + const visibleAccessorSet = useMemo(() => new Set(visibleAccessors), [visibleAccessors]); + const restoredOrder = useMemo( + () => [ + ...savedOrder.filter((accessor) => visibleAccessorSet.has(accessor)), + ...visibleAccessors.filter((accessor) => !savedOrder.includes(accessor)), + ], + [savedOrder, visibleAccessors, visibleAccessorSet], + ); + const storeKey = `${storeKeyPrefix}-${itemId ?? "preview"}-${[...visibleAccessors].toSorted().join(",")}`; + const { effectiveColumns, columnsOrder, columnsWidth, setColumnsOrder, setMultipleColumnWidths } = + useDataTableColumns({ + key: storeKey, + columns, + }); + + const lastStoreKey = useRef(storeKey); + const hydrated = useRef(false); + const previousOrder = useRef(columnsOrder); + const previousWidths = useRef(columnsWidth); + useEffect(() => { + if (lastStoreKey.current !== storeKey) { + lastStoreKey.current = storeKey; + hydrated.current = false; + } + if (hydrated.current) return; + + const orderMatches = + columnsOrder.length === restoredOrder.length && + columnsOrder.every((accessor, index) => accessor === restoredOrder[index]); + const currentWidths = getColumnWidthMap(columnsWidth, visibleAccessorSet); + const visibleWidths = Object.entries(savedWidths).filter(([accessor]) => visibleAccessorSet.has(accessor)); + const widthsMatch = visibleWidths.every(([accessor, width]) => currentWidths[accessor] === width); + + if (orderMatches && widthsMatch) { + previousOrder.current = columnsOrder; + previousWidths.current = columnsWidth; + hydrated.current = true; + return; + } + + if (!orderMatches) setColumnsOrder(restoredOrder); + if (!widthsMatch) { + setMultipleColumnWidths(visibleWidths.map(([accessor, width]) => ({ accessor, width }))); + } + }, [ + columnsOrder, + columnsWidth, + restoredOrder, + savedWidths, + setColumnsOrder, + setMultipleColumnWidths, + storeKey, + visibleAccessorSet, + ]); + + const pendingLayout = useRef(undefined); + const saveTimeout = useRef(undefined); + const flushPendingLayout = useCallback(() => { + const pending = pendingLayout.current; + pendingLayout.current = undefined; + window.clearTimeout(saveTimeout.current); + saveTimeout.current = undefined; + if (pending) pending.onLayoutChange(pending.layout); + }, []); + useEffect(() => { + if (pendingLayout.current && pendingLayout.current.storeKey !== storeKey) flushPendingLayout(); + }, [flushPendingLayout, storeKey]); + useEffect(() => () => flushPendingLayout(), [flushPendingLayout]); + useEffect(() => { + if (!hydrated.current) return; + + const orderChanged = JSON.stringify(columnsOrder) !== JSON.stringify(previousOrder.current); + const widthsChanged = JSON.stringify(columnsWidth) !== JSON.stringify(previousWidths.current); + previousOrder.current = columnsOrder; + previousWidths.current = columnsWidth; + if (!orderChanged && !widthsChanged) return; + + const newLayout: TableLayoutOptions = {}; + if (orderChanged) { + const fullOrder = [...savedOrder, ...columnAccessors.filter((accessor) => !savedOrder.includes(accessor))]; + const reorderedVisibleColumns = [...columnsOrder]; + const mergedOrder = fullOrder.map((accessor) => + visibleAccessorSet.has(accessor) ? (reorderedVisibleColumns.shift() ?? accessor) : accessor, + ); + newLayout.columnOrder = JSON.stringify(mergedOrder); + } + if (widthsChanged) { + const widthMap: Record = { ...savedWidths }; + Object.assign(widthMap, getColumnWidthMap(columnsWidth, visibleAccessorSet)); + newLayout.columnWidths = JSON.stringify(widthMap); + } + + if (pendingLayout.current && pendingLayout.current.storeKey !== storeKey) flushPendingLayout(); + pendingLayout.current = pendingLayout.current + ? { ...pendingLayout.current, layout: { ...pendingLayout.current.layout, ...newLayout } } + : { layout: newLayout, onLayoutChange, storeKey }; + window.clearTimeout(saveTimeout.current); + saveTimeout.current = window.setTimeout(flushPendingLayout, layoutSaveDelay); + }, [ + columnAccessors, + columnsOrder, + columnsWidth, + flushPendingLayout, + onLayoutChange, + savedOrder, + savedWidths, + storeKey, + visibleAccessorSet, + ]); + + return { effectiveColumns, storeKey }; +}; diff --git a/packages/widgets/src/docker/component.spec.ts b/packages/widgets/src/docker/component.spec.ts new file mode 100644 index 000000000..4be915c5a --- /dev/null +++ b/packages/widgets/src/docker/component.spec.ts @@ -0,0 +1,33 @@ +import { describe, expect, test } from "vitest"; + +import { parseColumnOrder, parseColumnWidths } from "../common/use-persisted-table-layout"; + +const columnAccessors = ["name", "state", "host", "cpuUsage", "memoryUsage", "actions"]; + +describe("Docker table column layout options", () => { + test("ignores malformed column layout JSON", () => { + expect(parseColumnOrder("{", columnAccessors)).toEqual([]); + expect(parseColumnWidths("[]", columnAccessors)).toEqual({}); + }); + + test("removes stale and duplicate column accessors", () => { + expect( + parseColumnOrder(JSON.stringify(["memoryUsage", "removed", "name", "memoryUsage"]), columnAccessors), + ).toEqual(["memoryUsage", "name"]); + }); + + test("keeps only finite positive widths for known columns", () => { + expect( + parseColumnWidths( + JSON.stringify({ + name: 180, + state: -1, + host: "120px", + removed: 100, + actions: null, + }), + columnAccessors, + ), + ).toEqual({ name: 180 }); + }); +}); diff --git a/packages/widgets/src/docker/component.tsx b/packages/widgets/src/docker/component.tsx index e56cd5cf7..576a80d9d 100644 --- a/packages/widgets/src/docker/component.tsx +++ b/packages/widgets/src/docker/component.tsx @@ -1,22 +1,57 @@ "use client"; -import { useMemo } from "react"; -import { ActionIcon, Avatar, Badge, Center, Group, Stack, Text, Tooltip } from "@mantine/core"; -import type { IconProps } from "@tabler/icons-react"; -import { IconBrandDocker, IconPlayerPlay, IconPlayerStop, IconRefresh, IconRotateClockwise } from "@tabler/icons-react"; -import type { MRT_ColumnDef, MRT_VisibilityState } from "mantine-react-table"; -import { MantineReactTable } from "mantine-react-table"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { ActionIcon, Avatar, Badge, Box, Center, Group, Menu, Portal, Stack, Text, Tooltip } from "@mantine/core"; +import { + IconBrandDocker, + IconCategoryPlus, + IconDots, + IconFileText, + IconPlayerPlay, + IconPlayerStop, + IconRefresh, + IconRotateClockwise, + IconTrash, +} from "@tabler/icons-react"; +import type { DataTableColumn, DataTableSortStatus } from "mantine-datatable"; import type { RouterOutputs } from "@homarr/api"; import { clientApi } from "@homarr/api/client"; +import { useSession } from "@homarr/auth/client"; +import { constructBoardPermissions } from "@homarr/auth/shared"; +import { useOptionalBoard } from "@homarr/boards/context"; import { formatBytes, useTimeAgo } from "@homarr/common"; import type { ContainerState } from "@homarr/docker"; import { containerStateColorMap, cpuUsageColor, memoryUsageColor, safeValue } from "@homarr/docker/shared"; +import { useModalAction } from "@homarr/modals"; +import { AddDockerAppToHomarr } from "@homarr/modals-collection"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { useScopedI18n } from "@homarr/translation/client"; -import { useTranslatedMantineReactTable } from "@homarr/ui/hooks"; import type { WidgetComponentProps } from "../definition"; +import { HomarrDataTable } from "../common/homarr-data-table"; +import { usePersistedTableLayout, useTableLayoutPersistence } from "../common/use-persisted-table-layout"; + +type DockerContainer = RouterOutputs["docker"]["getContainers"]["containers"][number]; +type ContainerAction = "start" | "stop" | "restart" | "remove"; + +interface ContextMenuState { + x: number; + y: number; + container: DockerContainer; +} + +interface ContainerActionHandlers { + onAction: (action: ContainerAction, container: DockerContainer) => void; + onAddToHomarr: (container: DockerContainer) => void; + onOpenLogs: (container: DockerContainer) => void; +} + +const columnAccessors = ["name", "state", "host", "cpuUsage", "memoryUsage", "actions"] as const; +const containerMenuWidth = 240; + +const createContainerLogsPath = (container: Pick) => + `/manage/tools/docker/logs/${container.id}?name=${encodeURIComponent(container.name)}`; const ContainerStateBadge = ({ state }: { state: ContainerState }) => { const t = useScopedI18n("docker.field.state.option"); @@ -28,276 +63,293 @@ const ContainerStateBadge = ({ state }: { state: ContainerState }) => { ); }; -const actionIconIconStyle: IconProps["style"] = { - height: "var(--ai-icon-size)", - width: "var(--ai-icon-size)", -}; - const createColumns = ( t: ReturnType>, -): MRT_ColumnDef[] => [ + handlers: ContainerActionHandlers, + sortingEnabled: boolean, +): DataTableColumn[] => [ { - id: "name", - accessorKey: "name", - header: t("field.name.label"), - Cell({ renderedCellValue, row }) { - return ( - - - - {renderedCellValue} - - - ); - }, - }, - { - id: "state", - accessorKey: "state", - size: 100, - header: t("field.state.label"), - Cell({ row }) { - return ; - }, - }, - { - id: "host", - accessorKey: "host", - size: 100, - header: t("field.host.label"), - Cell({ row }) { - return ( - - {row.original.host} + accessor: "name", + title: t("field.name.label"), + width: 180, + ellipsis: true, + sortable: sortingEnabled, + render: (container) => ( + + + {container.name.at(0)?.toUpperCase()} + + + {container.name} - ); - }, + + ), }, { - id: "cpuUsage", - sortingFn: (rowA, rowB) => { - const cpuUsageA = safeValue(rowA.original.cpuUsage); - const cpuUsageB = safeValue(rowB.original.cpuUsage); - - return cpuUsageA - cpuUsageB; - }, - accessorKey: "cpuUsage", - size: 80, - header: t("field.stats.cpu.label"), - Cell({ row }) { - const cpuUsage = safeValue(row.original.cpuUsage); - + accessor: "state", + title: t("field.state.label"), + width: 100, + sortable: sortingEnabled, + render: (container) => , + }, + { + accessor: "host", + title: t("field.host.label"), + width: 120, + sortable: sortingEnabled, + ellipsis: true, + render: (container) => ( + + {container.host} + + ), + }, + { + accessor: "cpuUsage", + title: t("field.stats.cpu.label"), + width: 80, + sortable: sortingEnabled, + render: (container) => { + const cpuUsage = safeValue(container.cpuUsage); return ( - + {cpuUsage.toFixed(2)}% ); }, }, { - id: "memoryUsage", - sortingFn: (rowA, rowB) => { - const memoryUsageA = safeValue(rowA.original.memoryUsage); - const memoryUsageB = safeValue(rowB.original.memoryUsage); - - return memoryUsageA - memoryUsageB; - }, - accessorKey: "memoryUsage", - size: 80, - header: t("field.stats.memory.label"), - Cell({ row }) { - const bytesUsage = safeValue(row.original.memoryUsage); - + accessor: "memoryUsage", + title: t("field.stats.memory.label"), + width: 100, + sortable: sortingEnabled, + render: (container) => { + const memoryUsage = safeValue(container.memoryUsage); return ( - - {formatBytes(bytesUsage)} + + {formatBytes(memoryUsage)} ); }, }, { - id: "actions", - accessorKey: "actions", - size: 80, - header: t("action.title"), - enableSorting: false, - Cell({ row }) { - const utils = clientApi.useUtils(); - // eslint-disable-next-line no-restricted-syntax - const onSettled = async () => { - await utils.docker.getContainers.invalidate(); - }; - const { mutateAsync: startContainer } = clientApi.docker.startAll.useMutation({ onSettled }); - const { mutateAsync: stopContainer } = clientApi.docker.stopAll.useMutation({ onSettled }); - const { mutateAsync: restartContainer } = clientApi.docker.restartAll.useMutation({ onSettled }); - - const handleActionAsync = async (action: "start" | "stop" | "restart") => { - const mutation = action === "start" ? startContainer : action === "stop" ? stopContainer : restartContainer; - - await mutation( - { ids: [row.original.id] }, - { - onSuccess() { - showSuccessNotification({ - title: t(`action.${action}.notification.success.title`), - message: t(`action.${action}.notification.success.message`), - }); - }, - onError() { - showErrorNotification({ - title: t(`action.${action}.notification.error.title`), - message: t(`action.${action}.notification.error.message`), - }); - }, - }, - ); - }; - - return ( - - - handleActionAsync(row.original.state === "running" ? "stop" : "start")} - > - {row.original.state === "running" ? ( - - ) : ( - - )} - - - - handleActionAsync("restart")}> - - - - - ); - }, + accessor: "actions", + title: "", + width: 44, + textAlign: "right", + render: (container) => , }, ]; -export default function DockerWidget({ options, width, isEditMode }: WidgetComponentProps<"dockerContainers">) { +const compareContainers = ( + first: DockerContainer, + second: DockerContainer, + accessor: DataTableSortStatus["columnAccessor"], +) => { + if (accessor === "cpuUsage") return safeValue(first.cpuUsage) - safeValue(second.cpuUsage); + if (accessor === "memoryUsage") return safeValue(first.memoryUsage) - safeValue(second.memoryUsage); + + const firstValue = first[accessor as "name" | "state" | "host"]; + const secondValue = second[accessor as "name" | "state" | "host"]; + return String(firstValue ?? "").localeCompare(String(secondValue ?? "")); +}; + +const useContainerAction = (action: ContainerAction) => { + const t = useScopedI18n("docker.action"); + const utils = clientApi.useUtils(); + + return clientApi.docker[`${action}All`].useMutation({ + async onSettled() { + await utils.docker.getContainers.invalidate(); + }, + onSuccess() { + showSuccessNotification({ + title: t(`${action}.notification.success.title`), + message: t(`${action}.notification.success.message`), + }); + }, + onError() { + showErrorNotification({ + title: t(`${action}.notification.error.title`), + message: t(`${action}.notification.error.message`), + }); + }, + }); +}; + +export default function DockerWidget({ + options, + width, + isEditMode, + boardId, + itemId, + setOptions, +}: WidgetComponentProps<"dockerContainers">) { const t = useScopedI18n("docker"); + const tWidget = useScopedI18n("widget.dockerContainers"); + const { openModal } = useModalAction(AddDockerAppToHomarr); + const board = useOptionalBoard(); + const { data: session } = useSession(); + const hasChangeAccess = board ? constructBoardPermissions(board, session).hasChangeAccess : false; const isTiny = width <= 256; const { data, refetch, isFetching } = clientApi.docker.getContainers.useQuery(); - const containers = data?.containers ?? []; + const containers = useMemo(() => data?.containers ?? [], [data?.containers]); const timestamp = useMemo(() => data?.timestamp ?? new Date(), [data?.timestamp]); const relativeTime = useTimeAgo(timestamp); - const totalContainers = containers.length; + const { mutate: startContainer } = useContainerAction("start"); + const { mutate: stopContainer } = useContainerAction("stop"); + const { mutate: restartContainer } = useContainerAction("restart"); + const { mutate: removeContainer } = useContainerAction("remove"); + const handleContainerAction = useCallback( + (action: ContainerAction, container: DockerContainer) => { + if (action === "start") startContainer({ ids: [container.id] }); + else if (action === "stop") stopContainer({ ids: [container.id] }); + else if (action === "restart") restartContainer({ ids: [container.id] }); + else removeContainer({ ids: [container.id] }); + }, + [removeContainer, restartContainer, startContainer, stopContainer], + ); + const handleOpenLogs = useCallback( + (container: DockerContainer) => window.location.assign(createContainerLogsPath(container)), + [], + ); + const handleAddToHomarr = useCallback( + (container: DockerContainer) => openModal({ selectedContainers: [container] }), + [openModal], + ); + const actionHandlers = useMemo( + () => ({ + onAction: handleContainerAction, + onAddToHomarr: handleAddToHomarr, + onOpenLogs: handleOpenLogs, + }), + [handleAddToHomarr, handleContainerAction, handleOpenLogs], + ); - const totals = useMemo(() => { - return containers.reduce( - (acc, container) => { - acc.cpu += safeValue(container.cpuUsage); - acc.memory += safeValue(container.memoryUsage); - return acc; - }, - { cpu: 0, memory: 0 }, - ); - }, [containers]); - - const columns = useMemo(() => createColumns(t), [t]); - - const columnVisibility: MRT_VisibilityState = { - name: options.columns.includes("name"), - state: options.columns.includes("state"), - host: options.columns.includes("host"), - cpuUsage: options.columns.includes("cpuUsage"), - memoryUsage: options.columns.includes("memoryUsage"), - actions: options.columns.includes("actions"), - }; - - const table = useTranslatedMantineReactTable({ - columns, - data: containers, - enablePagination: false, - enableTopToolbar: false, - enableBottomToolbar: false, - enableColumnActions: false, - enableSorting: options.enableRowSorting && !isEditMode, - enableStickyHeader: false, - enableColumnOrdering: false, - enableRowSelection: false, - enableFullScreenToggle: false, - enableGlobalFilter: false, - enableDensityToggle: false, - enableFilters: false, - enableHiding: false, - initialState: { - sorting: [{ id: options.defaultSort, desc: options.descendingDefaultSort }], - density: "xs", - }, - state: { - columnVisibility, - }, - mantinePaperProps: { - flex: 1, - withBorder: false, - shadow: undefined, - }, - mantineTableProps: { - className: "docker-widget-table", - style: { - tableLayout: "fixed", - }, - }, - mantineTableHeadProps: { - fz: "xs", - }, - mantineTableHeadCellProps: { - p: 4, - }, - mantineTableBodyCellProps: { - p: 4, - }, - mantineTableContainerProps: { - style: { - height: "100%", - }, - }, + const { mutate: saveItemOptions } = clientApi.widget.options.saveItemOptions.useMutation({ + onError: () => + showErrorNotification({ + title: tWidget("error.layoutSaveTitle"), + message: tWidget("error.layoutSaveMessage"), + }), + }); + const persistLayout = useTableLayoutPersistence({ + boardId, + hasChangeAccess, + itemId, + saveItemOptions, + setOptions, }); - if (options.columns.length === 0) + const defaultDirection = options.descendingDefaultSort ? "desc" : "asc"; + const [sortStatus, setSortStatus] = useState>({ + columnAccessor: options.defaultSort, + direction: defaultDirection, + }); + useEffect(() => { + setSortStatus({ columnAccessor: options.defaultSort, direction: defaultDirection }); + }, [defaultDirection, options.defaultSort]); + + const sortedContainers = useMemo(() => { + const multiplier = sortStatus.direction === "desc" ? -1 : 1; + return [...containers].toSorted( + (first, second) => compareContainers(first, second, sortStatus.columnAccessor) * multiplier, + ); + }, [containers, sortStatus]); + + const totals = useMemo( + () => + containers.reduce( + (acc, container) => { + acc.cpu += safeValue(container.cpuUsage); + acc.memory += safeValue(container.memoryUsage); + return acc; + }, + { cpu: 0, memory: 0 }, + ), + [containers], + ); + + const selectedColumns = useMemo(() => new Set(options.columns), [options.columns]); + const columns = useMemo(() => { + const sortingEnabled = options.enableRowSorting && !isEditMode; + return createColumns(t, actionHandlers, sortingEnabled).filter(({ accessor }) => + selectedColumns.has(String(accessor)), + ); + }, [actionHandlers, isEditMode, options.enableRowSorting, selectedColumns, t]); + const { effectiveColumns, storeKey } = usePersistedTableLayout({ + columns, + columnAccessors, + columnOrder: options.columnOrder, + columnWidths: options.columnWidths, + itemId, + storeKeyPrefix: "docker-containers", + onLayoutChange: persistLayout, + }); + + const [contextMenu, setContextMenu] = useState(null); + const closeContextMenu = useCallback(() => setContextMenu(null), []); + const handleContextMenu = useCallback(({ record, event }: { record: DockerContainer; event: React.MouseEvent }) => { + event.preventDefault(); + setContextMenu({ x: event.clientX, y: event.clientY, container: record }); + }, []); + + if (options.columns.length === 0) { return (
{t("error.noColumns")}
); + } return ( - - + + + { + if (contextMenu) closeContextMenu(); + }} + /> + {!isTiny && ( - + - - {t("table.footer", { count: totalContainers.toString() })} + + {t("table.footer", { count: containers.length.toString() })} - + {t("table.totalCpu", { cpu: totals.cpu.toFixed(2) })} - {t("table.totalMemory", { memory: formatBytes(totals.memory) })} - void refetch()} aria-label={t("table.refresh.lastUpdated", { when: relativeTime })} > - + )} + + {contextMenu && } ); } + +function ContainerMenuButton({ + container, + handlers, +}: { + container: DockerContainer; + handlers: ContainerActionHandlers; +}) { + const t = useScopedI18n("docker.action"); + const [opened, setOpened] = useState(false); + const close = () => setOpened(false); + + return ( + + + event.stopPropagation()} + > + + + + + + + + ); +} + +function ContainerActionItems({ + container, + handlers, + onClose, +}: { + container: DockerContainer; + handlers: ContainerActionHandlers; + onClose: () => void; +}) { + const t = useScopedI18n("docker.action"); + const [confirmRemove, setConfirmRemove] = useState(false); + const stateAction = container.state === "running" ? "stop" : "start"; + const StateIcon = stateAction === "stop" ? IconPlayerStop : IconPlayerPlay; + + const invokeAction = (action: ContainerAction) => { + handlers.onAction(action, container); + onClose(); + }; + + return ( + <> + + {container.name} + + } + onClick={() => { + handlers.onOpenLogs(container); + onClose(); + }} + > + {t("logs.label")} + + + } + onClick={() => invokeAction(stateAction)} + > + {t(`${stateAction}.label`)} + + } onClick={() => invokeAction("restart")}> + {t("restart.label")} + + {!confirmRemove ? ( + } onClick={() => setConfirmRemove(true)}> + {t("remove.label")} + + ) : ( + } onClick={() => invokeAction("remove")}> + {t("remove.confirm")} + + )} + + } + onClick={() => { + handlers.onAddToHomarr(container); + onClose(); + }} + > + {t("addToHomarr.label")} + + + ); +} + +function ContainerContextMenu({ + state, + handlers, + onClose, +}: { + state: ContextMenuState; + handlers: ContainerActionHandlers; + onClose: () => void; +}) { + return ( + + { + event.preventDefault(); + onClose(); + }} + > + + + + + event.stopPropagation()} + > + + + + + + ); +} diff --git a/packages/widgets/src/docker/index.ts b/packages/widgets/src/docker/index.ts index 4a988c779..bc229fed5 100644 --- a/packages/widgets/src/docker/index.ts +++ b/packages/widgets/src/docker/index.ts @@ -26,30 +26,39 @@ const columnTranslationKeyMap = { export const { definition, componentLoader } = createWidgetDefinition("dockerContainers", { icon: IconBrandDocker, queryKey: [["docker", "getContainers"]], + refetchInterval: 30, createOptions() { - return optionsBuilder.from((factory) => ({ - columns: factory.multiSelect({ - defaultValue: [...allColumnsList], - options: allColumnsList.map((value) => ({ - value, - label: (t) => t(columnTranslationKeyMap[value]), - })), - searchable: true, + return optionsBuilder.from( + (factory) => ({ + columns: factory.multiSelect({ + defaultValue: [...allColumnsList], + options: allColumnsList.map((value) => ({ + value, + label: (t) => t(columnTranslationKeyMap[value]), + })), + searchable: true, + }), + enableRowSorting: factory.switch({ + defaultValue: false, + }), + defaultSort: factory.select({ + defaultValue: "name", + options: columnsList.map((value) => ({ + value, + label: (t) => t(`widget.dockerContainers.option.defaultSort.option.${value}`), + })), + }), + descendingDefaultSort: factory.switch({ + defaultValue: false, + }), + columnOrder: factory.text({ defaultValue: "" }), + columnWidths: factory.text({ defaultValue: "" }), }), - enableRowSorting: factory.switch({ - defaultValue: false, - }), - defaultSort: factory.select({ - defaultValue: "name", - options: columnsList.map((value) => ({ - value, - label: (t) => t(`widget.dockerContainers.option.defaultSort.option.${value}`), - })), - }), - descendingDefaultSort: factory.switch({ - defaultValue: false, - }), - })); + { + columnOrder: { shouldHide: () => true }, + columnWidths: { shouldHide: () => true }, + }, + ); }, errors: { INTERNAL_SERVER_ERROR: { diff --git a/packages/widgets/src/downloads/component.tsx b/packages/widgets/src/downloads/component.tsx index e03c937bf..939293ed5 100644 --- a/packages/widgets/src/downloads/component.tsx +++ b/packages/widgets/src/downloads/component.tsx @@ -3,7 +3,7 @@ import "../widgets-common.css"; import "./styles.css"; -import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { useCallback, useEffect, useMemo, useState } from "react"; import { ActionIcon, Avatar, @@ -41,10 +41,11 @@ import { import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; import type { DataTableColumn, DataTableSortStatus } from "mantine-datatable"; -import { DataTable, useDataTableColumns } from "mantine-datatable"; import { clientApi } from "@homarr/api/client"; -import { useIntegrationsWithInteractAccess } from "@homarr/auth/client"; +import { useIntegrationsWithInteractAccess, useSession } from "@homarr/auth/client"; +import { constructBoardPermissions } from "@homarr/auth/shared"; +import { useOptionalBoard } from "@homarr/boards/context"; import { formatByteRate, formatBytes, useIntegrationConnected } from "@homarr/common"; import { getIconUrl, getIntegrationKindsByCategory } from "@homarr/definitions"; import type { ExtendedClientStatus, ExtendedDownloadClientItem } from "@homarr/integrations"; @@ -52,6 +53,8 @@ import { showErrorNotification } from "@homarr/notifications"; import { useScopedI18n } from "@homarr/translation/client"; import type { WidgetComponentProps } from "../definition"; +import { HomarrDataTable } from "../common/homarr-data-table"; +import { usePersistedTableLayout, useTableLayoutPersistence } from "../common/use-persisted-table-layout"; dayjs.extend(relativeTime); @@ -162,14 +165,23 @@ function progressColor(state: DownloadState, progress: number): string { return "blue"; } -function parseJsonOption(value: string | undefined, fallback: T): T { - if (!value) return fallback; - try { - return JSON.parse(value) as T; - } catch { - return fallback; - } -} +const columnAccessors = [ + "name", + "progress", + "size", + "downSpeed", + "upSpeed", + "time", + "state", + "added", + "ratio", + "received", + "sent", + "category", + "integration", + "index", + "type", +] as const; function toCategoryArray(category: string | string[]): string[] { if (Array.isArray(category)) return category; @@ -288,6 +300,9 @@ export default function DownloadClientsWidget({ width, }: WidgetComponentProps<"downloads">) { const allInteractAccess = useIntegrationsWithInteractAccess(); + const board = useOptionalBoard(); + const { data: session } = useSession(); + const hasChangeAccess = board ? constructBoardPermissions(board, session).hasChangeAccess : false; const integrationInteractSet = useMemo( () => new Set(allInteractAccess.filter(({ id }) => integrationIds.includes(id)).map(({ id }) => id)), [allInteractAccess, integrationIds], @@ -323,19 +338,13 @@ export default function DownloadClientsWidget({ const { mutate: saveItemOptions } = clientApi.widget.options.saveItemOptions.useMutation({ onError: () => showErrorNotification({ title: t("errors.actionFailed"), message: t("errors.actionFailedMessage") }), }); - const persistOption = useCallback( - (newOptions: Partial>) => { - setOptions({ newOptions }); - if (boardId && itemId) saveItemOptions({ boardId, itemId, newOptions }); - }, - [setOptions, boardId, itemId, saveItemOptions], - ); - - const savedOrder = useMemo(() => parseJsonOption(options.columnOrder, [] as string[]), [options.columnOrder]); - const savedWidths = useMemo( - () => parseJsonOption(options.columnWidths, {} as Record), - [options.columnWidths], - ); + const persistOption = useTableLayoutPersistence({ + boardId, + hasChangeAccess, + itemId, + saveItemOptions, + setOptions, + }); let defaultSortDirection: DataTableSortStatus["direction"] = "asc"; if (options.descendingDefaultSort) defaultSortDirection = "desc"; @@ -659,54 +668,15 @@ export default function DownloadClientsWidget({ return cols.filter(Boolean) as DataTableColumn[]; }, [columnContext, t, size, progressColumnWidth]); - const storeKey = `downloads-${itemId ?? "preview"}-${[...options.columns].toSorted().join(",")}`; - const { effectiveColumns, columnsOrder, columnsWidth, setColumnsOrder, setMultipleColumnWidths } = - useDataTableColumns({ - key: storeKey, - columns, - }); - - const lastStoreKey = useRef(storeKey); - const hydrated = useRef(false); - useEffect(() => { - if (lastStoreKey.current !== storeKey) { - lastStoreKey.current = storeKey; - hydrated.current = false; - } - if (hydrated.current) return; - if (savedOrder.length > 0) setColumnsOrder(savedOrder); - if (Object.keys(savedWidths).length > 0) { - setMultipleColumnWidths(Object.entries(savedWidths).map(([accessor, w]) => ({ accessor, width: w }))); - } - // ponytail: defer hydrated flag so the persist effect skips the restore echo - requestAnimationFrame(() => { - hydrated.current = true; - }); - }, [storeKey, savedOrder, savedWidths, setColumnsOrder, setMultipleColumnWidths]); - - const prevOrder = useRef(columnsOrder); - const prevWidths = useRef(columnsWidth); - useEffect(() => { - if (!hydrated.current) return; - const orderChanged = JSON.stringify(columnsOrder) !== JSON.stringify(prevOrder.current); - const widthsChanged = JSON.stringify(columnsWidth) !== JSON.stringify(prevWidths.current); - prevOrder.current = columnsOrder; - prevWidths.current = columnsWidth; - - if (!orderChanged && !widthsChanged) return; - if (orderChanged) persistOption({ columnOrder: JSON.stringify(columnsOrder) }); - if (widthsChanged) { - const widthMap: Record = {}; - for (const entry of columnsWidth) { - const key = Object.keys(entry)[0]; - if (!key) continue; - const w = entry[key as keyof typeof entry]; - if (typeof w === "number") widthMap[key] = w; - else if (typeof w === "string" && w.endsWith("px")) widthMap[key] = parseInt(w, 10); - } - persistOption({ columnWidths: JSON.stringify(widthMap) }); - } - }, [columnsOrder, columnsWidth, persistOption]); + const { effectiveColumns, storeKey } = usePersistedTableLayout({ + columns, + columnAccessors, + columnOrder: options.columnOrder, + columnWidths: options.columnWidths, + itemId, + storeKeyPrefix: "downloads", + onLayoutChange: persistOption, + }); const handleContextMenu = useCallback( ({ record, event }: { record: ExtendedDownloadClientItem; event: React.MouseEvent }) => { @@ -761,9 +731,6 @@ export default function DownloadClientsWidget({ ); } - let tablePointerEvents: React.CSSProperties["pointerEvents"]; - if (isEditMode) tablePointerEvents = "none"; - let rowContextMenuHandler: typeof handleContextMenu | undefined = handleContextMenu; if (isEditMode) rowContextMenuHandler = undefined; @@ -781,35 +748,19 @@ export default function DownloadClientsWidget({ )} - `${record.integration.id}:${record.id}`} - height="100%" className="downloads-table" - defaultColumnProps={{ - noWrap: true, - draggable: true, - resizable: true, - cellsStyle: () => ({ padding: `${size.cellPadding}px 8px` }), - }} - scrollAreaProps={{ type: "auto", scrollbarSize: 6 }} customRowAttributes={(_, index) => ({ "data-row-index": index })} onRowContextMenu={rowContextMenuHandler} rowBackgroundColor={(record) => rowBgAlpha[record.state]} diff --git a/packages/widgets/src/downloads/styles.css b/packages/widgets/src/downloads/styles.css index 98991c9f2..0caffa099 100644 --- a/packages/widgets/src/downloads/styles.css +++ b/packages/widgets/src/downloads/styles.css @@ -1,51 +1,3 @@ -/* Make the DataTable transparent so the board card's opacity-controlled - background shows through. The mantine-datatable defaults to - var(--mantine-color-body) which is opaque. */ -.downloads-table, -.downloads-table .mantine-datatable-table, -.downloads-table .mantine-datatable-table thead, -.downloads-table .mantine-datatable-table tbody, -.downloads-table .mantine-datatable-table tfoot, -.downloads-table th, -.downloads-table td { - background-color: transparent !important; -} - -.downloads-table .mantine-datatable-table tr { - background-color: transparent; -} - -.downloads-table .mantine-datatable-table tbody tr:hover { - background-color: color-mix(in srgb, var(--mantine-color-default-hover) 40%, transparent) !important; -} - -.downloads-table th { - white-space: nowrap; - background-color: color-mix(in srgb, var(--mantine-color-body) 60%, transparent) !important; - backdrop-filter: blur(8px); -} - -.downloads-table td { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.downloads-table td .mantine-Text-root, -.downloads-table td .mantine-Group-root { - white-space: nowrap; - flex-wrap: nowrap; -} - -.downloads-table .mantine-datatable-header-cell-sortable-icon { - opacity: 0; - transition: opacity 150ms; -} - -.downloads-table th:hover .mantine-datatable-header-cell-sortable-icon { - opacity: 1; -} - /* Row expansion styling */ .downloads-table .mantine-datatable-row-expansion-cell { background-color: color-mix(in srgb, var(--mantine-color-body) 40%, transparent) !important; diff --git a/packages/widgets/src/media-server/component.tsx b/packages/widgets/src/media-server/component.tsx index 439857a8f..2b127a234 100644 --- a/packages/widgets/src/media-server/component.tsx +++ b/packages/widgets/src/media-server/component.tsx @@ -26,6 +26,35 @@ import { useTranslatedMantineReactTable } from "@homarr/ui/hooks"; import type { WidgetComponentProps } from "../definition"; +type TranscodingDecision = NonNullable< + NonNullable["metadata"] +>["transcoding"]; + +type PlaybackStatus = "directPlay" | "directStream" | "transcodeVideo" | "transcodeAudio" | "transcoding"; + +function getPlaybackStatus(transcoding: TranscodingDecision | undefined): PlaybackStatus { + if (!transcoding) return "directPlay"; + const { isVideoDirect, isAudioDirect, containerChanged } = transcoding; + + if (isVideoDirect && isAudioDirect) return containerChanged ? "directStream" : "directPlay"; + if (!isVideoDirect && isAudioDirect) return "transcodeVideo"; + if (isVideoDirect && !isAudioDirect) return "transcodeAudio"; + return "transcoding"; +} + +const playbackStatusColorMap = { + directPlay: "green", + directStream: "teal", + transcodeVideo: "orange", + transcodeAudio: "yellow", + transcoding: "red", +} satisfies Record; + +function formatBitrate(bitrateKbps: number | null | undefined): string | null { + if (!bitrateKbps || bitrateKbps <= 0) return null; + return bitrateKbps >= 1000 ? `${(bitrateKbps / 1000).toFixed(1)} Mbps` : `${Math.round(bitrateKbps)} kbps`; +} + export default function MediaServerWidget({ options, integrationIds }: WidgetComponentProps<"mediaServer">) { const { data: currentStreams = [] } = clientApi.widget.mediaServer.getCurrentStreams.useQuery({ integrationIds, @@ -122,23 +151,30 @@ export default function MediaServerWidget({ options, integrationIds }: WidgetCom const currentlyPlaying = row.original.currentlyPlaying; if (!currentlyPlaying) return null; - const isTranscoding = Boolean( - currentlyPlaying.metadata?.transcoding.target.videoCodec ?? - currentlyPlaying.metadata?.transcoding.target.audioCodec ?? - currentlyPlaying.metadata?.transcoding.container, - ); + const status = getPlaybackStatus(currentlyPlaying.metadata?.transcoding); + const bitrateLabel = formatBitrate(currentlyPlaying.metadata?.bitrateKbps); return ( - - {isTranscoding ? t("items.transcoding") : t("items.directPlay")} + + {t(`items.${status}` as never)} - {currentlyPlaying.location && ( - - {currentlyPlaying.location === "lan" ? : } - - {currentlyPlaying.location} - + {(currentlyPlaying.location ?? bitrateLabel) && ( + + + {currentlyPlaying.location && + (currentlyPlaying.location === "lan" ? : )} + {currentlyPlaying.location && ( + + {currentlyPlaying.location} + + )} + + {bitrateLabel && ( + + {bitrateLabel} + + )} )} @@ -238,6 +274,12 @@ export default function MediaServerWidget({ options, integrationIds }: WidgetCom }; }); + const totalBitrateKbps = flatSessions.reduce( + (sum, session) => sum + (session.currentlyPlaying?.metadata?.bitrateKbps ?? 0), + 0, + ); + const totalBitrateLabel = options.showBitrate ? formatBitrate(totalBitrateKbps) : null; + return ( @@ -246,19 +288,34 @@ export default function MediaServerWidget({ options, integrationIds }: WidgetCom h={30} px="xs" pr="md" - justify="flex-end" + justify="space-between" style={{ borderTop: "1px solid var(--border-color)", }} > - {uniqueIntegrations.map((integration) => ( - - - - {integration.integrationName} + + + + {(t as unknown as (key: string, params?: { count: number }) => string)("footer.streams", { + count: flatSessions.length, + })} + + {totalBitrateLabel && ( + + {t("footer.totalBitrate", { bitrate: totalBitrateLabel })} - - ))} + )} + + + {uniqueIntegrations.map((integration) => ( + + + + {integration.integrationName} + + + ))} +
); diff --git a/packages/widgets/src/media-server/index.ts b/packages/widgets/src/media-server/index.ts index 54f00476c..ef746e921 100644 --- a/packages/widgets/src/media-server/index.ts +++ b/packages/widgets/src/media-server/index.ts @@ -11,6 +11,8 @@ export const { componentLoader, definition } = createWidgetDefinition("mediaServ createOptions() { return optionsBuilder.from((factory) => ({ showOnlyPlaying: factory.switch({ defaultValue: true, withDescription: true }), + showBitrate: factory.switch({ defaultValue: true, withDescription: true }), + showLocation: factory.switch({ defaultValue: true, withDescription: true }), })); }, supportedIntegrations: getIntegrationKindsByCategory("mediaService"), diff --git a/packages/widgets/src/notifications/index.ts b/packages/widgets/src/notifications/index.ts index 17fd13393..553ef5d9f 100644 --- a/packages/widgets/src/notifications/index.ts +++ b/packages/widgets/src/notifications/index.ts @@ -7,7 +7,6 @@ import { optionsBuilder } from "../options"; export const { componentLoader, definition } = createWidgetDefinition("notifications", { icon: IconMessage, - refetchInterval: null, createOptions() { return optionsBuilder.from((factory) => ({ hideLogos: factory.switch({ defaultValue: false }), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f7fafc619..2e49bb680 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -103,14 +103,14 @@ catalogs: specifier: ^0.9.54 version: 0.9.54 '@semantic-release/changelog': - specifier: ^6.0.3 - version: 6.0.3 + specifier: ^7.0.0 + version: 7.0.0 '@semantic-release/commit-analyzer': specifier: ^13.0.1 version: 13.0.1 '@semantic-release/git': - specifier: ^10.0.1 - version: 10.0.1 + specifier: ^11.0.1 + version: 11.0.1 '@semantic-release/github': specifier: ^12.0.9 version: 12.0.9 @@ -597,25 +597,25 @@ importers: version: 1.61.1 '@semantic-release/changelog': specifier: 'catalog:' - version: 6.0.3(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) + version: 7.0.0(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2)) '@semantic-release/commit-analyzer': specifier: 'catalog:' - version: 13.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) + version: 13.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2) '@semantic-release/git': specifier: 'catalog:' - version: 10.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) + version: 11.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2) '@semantic-release/github': specifier: 'catalog:' - version: 12.0.9(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) + version: 12.0.9(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2) '@semantic-release/npm': specifier: 'catalog:' - version: 13.1.5(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) + version: 13.1.5(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2)) '@semantic-release/release-notes-generator': specifier: 'catalog:' - version: 14.1.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) + version: 14.1.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2) '@testcontainers/redis': specifier: 'catalog:' - version: 12.0.4 + version: 12.0.4(supports-color@10.2.2) '@turbo/gen': specifier: 'catalog:' version: 2.10.4(@types/node@24.13.3) @@ -648,10 +648,10 @@ importers: version: 1.73.0 semantic-release: specifier: 'catalog:' - version: 25.0.5(@typescript/typescript6@6.0.2) + version: 25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2) testcontainers: specifier: 'catalog:' - version: 12.0.4 + version: 12.0.4(supports-color@10.2.2) turbo: specifier: 'catalog:' version: 2.10.4 @@ -663,7 +663,7 @@ importers: version: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.101.0)(sugarss@5.0.0(postcss@8.5.16))(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) vite-tsconfig-paths: specifier: 'catalog:' - version: 6.1.1(@typescript/typescript6@6.0.2)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.101.0)(sugarss@5.0.0(postcss@8.5.16))(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) + version: 6.1.1(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.101.0)(sugarss@5.0.0(postcss@8.5.16))(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) vitest: specifier: 'catalog:' version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(jsdom@29.1.1(@noble/hashes@2.0.1))(msw@2.14.6(@types/node@24.13.3)(@typescript/typescript6@6.0.2))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.101.0)(sugarss@5.0.0(postcss@8.5.16))(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) @@ -672,25 +672,25 @@ importers: dependencies: '@docusaurus/core': specifier: ^3.10.1 - version: 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/faster': specifier: ^3.10.1 - version: 3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16) + version: 3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3) '@docusaurus/plugin-content-docs': specifier: ^3.10.1 - version: 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/plugin-sitemap': specifier: ^3.10.1 - version: 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/preset-classic': specifier: ^3.10.1 - version: 3.10.1(@algolia/client-search@5.53.0)(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3) + version: 3.10.1(@algolia/client-search@5.53.0)(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/theme-common': specifier: ^3.10.1 - version: 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 3.10.1(693648dca07bcb0a42a6196192ee56b1) '@docusaurus/theme-mermaid': specifier: ^3.10.1 - version: 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 3.10.1(c336c9d98c1f4baf3a75901518d97959) '@homarr/definitions': specifier: workspace:^ version: link:../../packages/definitions @@ -702,10 +702,10 @@ importers: version: 0.99.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.54(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(react@19.2.7)(tailwindcss@4.3.2)(zod@4.4.3) + version: 0.9.54(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(react@19.2.7)(supports-color@10.2.2)(tailwindcss@4.3.2)(zod@4.4.3) '@signalwire/docusaurus-plugin-llms-txt': specifier: ^1.2.2 - version: 1.2.2(@docusaurus/core@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + version: 1.2.2(@docusaurus/core@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(supports-color@10.2.2) '@tabler/icons-react': specifier: 'catalog:' version: 3.44.0(react@19.2.7) @@ -720,7 +720,7 @@ importers: version: 1.11.21 docusaurus-plugin-image-zoom: specifier: ^3.0.1 - version: 3.0.1(@docusaurus/theme-classic@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + version: 3.0.1(@docusaurus/theme-classic@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)) leader-line-new: specifier: ^1.1.9 version: 1.1.9 @@ -751,13 +751,13 @@ importers: devDependencies: '@docusaurus/module-type-aliases': specifier: ^3.10.1 - version: 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/tsconfig': specifier: ^3.10.1 version: 3.10.1 '@docusaurus/types': specifier: ^3.10.1 - version: 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@fec/remark-a11y-emoji': specifier: ^4.0.2 version: 4.0.2 @@ -910,10 +910,10 @@ importers: version: 9.4.1(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(@tiptap/extension-link@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@tiptap/react@3.27.3(@floating-ui/dom@1.7.6)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@modelcontextprotocol/sdk': specifier: 'catalog:' - version: 1.29.0(zod@4.4.3) + version: 1.29.0(supports-color@10.2.2)(zod@4.4.3) '@scalar/api-reference-react': specifier: 'catalog:' - version: 0.9.54(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(react@19.2.7)(tailwindcss@4.3.2)(zod@4.4.3) + version: 0.9.54(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(react@19.2.7)(supports-color@10.2.2)(tailwindcss@4.3.2)(zod@4.4.3) '@tabler/icons-react': specifier: 'catalog:' version: 3.44.0(react@19.2.7) @@ -928,7 +928,7 @@ importers: version: 5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(react@19.2.7) '@tanstack/react-query-next-experimental': specifier: 'catalog:' - version: 5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7) + version: 5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7) '@tanstack/react-query-persist-client': specifier: 'catalog:' version: 5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(react@19.2.7) @@ -937,7 +937,7 @@ importers: version: 11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2) '@trpc/next': specifier: 'catalog:' - version: 11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/react-query@11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(react@19.2.7))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/react-query@11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(react@19.2.7))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@trpc/react-query': specifier: 'catalog:' version: 11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(react@19.2.7) @@ -976,7 +976,7 @@ importers: version: 17.4.2 drizzle-orm: specifier: 'catalog:' - version: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) + version: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) flag-icons: specifier: 'catalog:' version: 7.5.0 @@ -988,7 +988,7 @@ importers: version: 3.18.0(@noble/hashes@2.0.1) jotai: specifier: 'catalog:' - version: 2.20.1(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.17)(react@19.2.7) + version: 2.20.1(@babel/core@7.29.0(supports-color@10.2.2))(@babel/template@7.29.7)(@types/react@19.2.17)(react@19.2.7) jszip: specifier: 'catalog:' version: 3.10.1 @@ -1003,10 +1003,10 @@ importers: version: mantine-react-table-open@9.0.3(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/dates@9.4.1(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(@tabler/icons-react@3.44.0(react@19.2.7))(clsx@2.1.1)(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) mcp-handler: specifier: 'catalog:' - version: 1.1.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)) + version: 1.1.0(@modelcontextprotocol/sdk@1.29.0(supports-color@10.2.2)(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)) next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) postcss-preset-mantine: specifier: 'catalog:' version: 1.18.0(postcss@8.5.16) @@ -1039,7 +1039,7 @@ importers: version: 2.2.6 trpc-to-mcp: specifier: 'catalog:' - version: 1.3.2(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(better-auth@1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)))(mcp-handler@1.1.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)))(zod@4.4.3) + version: 1.3.2(6bd31c056f397ffcf9e77883340c3ff9) use-deep-compare-effect: specifier: 'catalog:' version: 1.8.1(react@19.2.7) @@ -1079,7 +1079,7 @@ importers: version: 10.0.3 node-loader: specifier: 'catalog:' - version: 2.1.0(webpack@5.107.1(esbuild@0.28.1)(postcss@8.5.16)) + version: 2.1.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) typescript: specifier: 'catalog:' version: '@typescript/typescript6@6.0.2' @@ -1310,7 +1310,7 @@ importers: version: link:../validation '@kubernetes/client-node': specifier: 'catalog:' - version: 1.4.0 + version: 1.4.0(supports-color@10.2.2) '@tanstack/react-query': specifier: 'catalog:' version: 5.101.2(react@19.2.7) @@ -1334,7 +1334,7 @@ importers: version: 4.5.0 next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: specifier: 'catalog:' version: 19.2.7 @@ -1346,10 +1346,10 @@ importers: version: 2.2.6 trpc-to-mcp: specifier: 'catalog:' - version: 1.3.2(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(better-auth@1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)))(mcp-handler@1.1.0(@modelcontextprotocol/sdk@1.26.0(zod@4.4.3))(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)))(zod@4.4.3) + version: 1.3.2(20caeb9169922dd2adb62d9d2fa0352f) trpc-to-openapi: specifier: 'catalog:' - version: 3.3.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(zod-openapi@5.3.0(zod@4.4.3))(zod@4.4.3) + version: 3.3.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(zod-openapi@5.4.6(zod@4.4.3))(zod@4.4.3) zod: specifier: 'catalog:' version: 4.4.3 @@ -1395,10 +1395,10 @@ importers: version: 8.1.8 next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) next-auth: specifier: 'catalog:' - version: 5.0.0-beta.31(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7) + version: 5.0.0-beta.31(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7) react: specifier: 'catalog:' version: 19.2.7 @@ -1488,7 +1488,7 @@ importers: version: 1.11.21 next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) octokit: specifier: 'catalog:' version: 5.0.5 @@ -1528,10 +1528,10 @@ importers: version: 0.2.9 drizzle-orm: specifier: 'catalog:' - version: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) + version: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) ioredis: specifier: 'catalog:' - version: 5.11.1 + version: 5.11.1(supports-color@10.2.2) mysql2: specifier: 'catalog:' version: 3.22.6(@types/node@24.13.3) @@ -1688,10 +1688,10 @@ importers: version: 3.3.0 '@testcontainers/mysql': specifier: 'catalog:' - version: 12.0.4 + version: 12.0.4(supports-color@10.2.2) '@testcontainers/postgresql': specifier: 'catalog:' - version: 12.0.4 + version: 12.0.4(supports-color@10.2.2) better-sqlite3: specifier: 'catalog:' version: 12.11.1 @@ -1703,10 +1703,10 @@ importers: version: 0.31.10 drizzle-orm: specifier: 'catalog:' - version: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) + version: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) drizzle-zod: specifier: 'catalog:' - version: 0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(zod@4.4.3) + version: 0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(zod@4.4.3) mysql2: specifier: 'catalog:' version: 3.22.6(@types/node@24.13.3) @@ -1771,7 +1771,7 @@ importers: version: link:../core dockerode: specifier: 'catalog:' - version: 5.0.1 + version: 5.0.1(supports-color@10.2.2) devDependencies: '@homarr/tsconfig': specifier: workspace:^0.1.0 @@ -1923,7 +1923,7 @@ importers: version: link:../image-proxy '@homarr/node-unifi': specifier: 'catalog:' - version: 2.6.0(undici@7.28.0) + version: 2.6.0(debug@4.4.3(supports-color@10.2.2))(undici@7.28.0) '@homarr/redis': specifier: workspace:^0.1.0 version: link:../redis @@ -1938,7 +1938,7 @@ importers: version: 3.0.2 '@jellyfin/sdk': specifier: 'catalog:' - version: 0.13.0(axios@1.15.0) + version: 0.13.0(axios@1.15.0(debug@4.4.3(supports-color@10.2.2))) ical.js: specifier: 'catalog:' version: 2.2.1 @@ -1956,7 +1956,7 @@ importers: version: 2.2.1 tsdav: specifier: 'catalog:' - version: 2.3.0 + version: 2.3.0(supports-color@10.2.2) undici: specifier: 'catalog:' version: 7.28.0 @@ -2057,7 +2057,7 @@ importers: version: 1.11.21 next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: specifier: 'catalog:' version: 19.2.7 @@ -2140,7 +2140,7 @@ importers: version: 0.5.18 next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: specifier: 'catalog:' version: 19.2.7 @@ -2215,7 +2215,7 @@ importers: version: link:../definitions ioredis: specifier: 'catalog:' - version: 5.11.1 + version: 5.11.1(supports-color@10.2.2) superjson: specifier: 'catalog:' version: 2.2.6 @@ -2305,7 +2305,7 @@ importers: version: 9.4.1(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: specifier: 'catalog:' version: 19.2.7 @@ -2369,10 +2369,10 @@ importers: version: 3.44.0(react@19.2.7) jotai: specifier: 'catalog:' - version: 2.20.1(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.17)(react@19.2.7) + version: 2.20.1(@babel/core@7.29.0(supports-color@10.2.2))(@babel/template@7.29.7)(@types/react@19.2.17)(react@19.2.7) next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: specifier: 'catalog:' version: 19.2.7 @@ -2409,10 +2409,10 @@ importers: version: mantine-react-table-open@9.0.3(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/dates@9.4.1(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(@tabler/icons-react@3.44.0(react@19.2.7))(clsx@2.1.1)(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) next-intl: specifier: 'catalog:' - version: 4.13.1(@typescript/typescript6@6.0.2)(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7) + version: 4.13.1(@typescript/typescript6@6.0.2)(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7) react: specifier: 'catalog:' version: 19.2.7 @@ -2464,7 +2464,7 @@ importers: version: mantine-react-table-open@9.0.3(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/dates@9.4.1(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(@tabler/icons-react@3.44.0(react@19.2.7))(clsx@2.1.1)(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: specifier: 'catalog:' version: 19.2.7 @@ -2664,7 +2664,7 @@ importers: version: mantine-react-table-open@9.0.3(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/dates@9.4.1(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(@tabler/icons-react@3.44.0(react@19.2.7))(clsx@2.1.1)(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) next: specifier: 'catalog:' - version: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + version: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: specifier: 'catalog:' version: 19.2.7 @@ -2676,7 +2676,7 @@ importers: version: 2.4.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react-markdown: specifier: 'catalog:' - version: 10.1.0(@types/react@19.2.17)(react@19.2.7) + version: 10.1.0(@types/react@19.2.17)(react@19.2.7)(supports-color@10.2.2) react-quill-new: specifier: 'catalog:' version: 3.8.3(quill-delta@5.1.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -6800,11 +6800,11 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@semantic-release/changelog@6.0.3': - resolution: {integrity: sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==} - engines: {node: '>=14.17'} + '@semantic-release/changelog@7.0.0': + resolution: {integrity: sha512-TNPyag5db24o7jWjre7UwKB4EcL8oJxbRhnDQ7hmZRAYqzreAc6PgdxQuU3pppp5xQinYtiumL0iG8SSKvnlzg==} + engines: {node: ^22.22.2 || >=24.15} peerDependencies: - semantic-release: '>=18.0.0' + semantic-release: '>=20.1.0' '@semantic-release/commit-analyzer@13.0.1': resolution: {integrity: sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==} @@ -6812,19 +6812,15 @@ packages: peerDependencies: semantic-release: '>=20.1.0' - '@semantic-release/error@3.0.0': - resolution: {integrity: sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==} - engines: {node: '>=14.17'} - '@semantic-release/error@4.0.0': resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} engines: {node: '>=18'} - '@semantic-release/git@10.0.1': - resolution: {integrity: sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==} - engines: {node: '>=14.17'} + '@semantic-release/git@11.0.1': + resolution: {integrity: sha512-Zr8BUYCTZMc8V6wDKN2dpR7nJgewd9I6THL3ydLTnp3OEdTo1/4RBLNYaeRucYMsjMv+BXoCNfXA0NADj1kwhw==} + engines: {node: ^22.22.2 || >=24.15} peerDependencies: - semantic-release: '>=18.0.0' + semantic-release: '>=20.1.0' '@semantic-release/github@12.0.9': resolution: {integrity: sha512-ODIqb0V3QqndipryEEiaBxUQCFjvv7Oese5Dt4omMGa60YRNEW0Sx3K+zri0uac2Y6S9nOlMehciWIzvvRCTGQ==} @@ -10128,6 +10124,10 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} + execa@10.0.0: + resolution: {integrity: sha512-Cxl6MKxB1dr1H0FHmiizJ+lavKF7pV+fcDZFyqMB8d5m7qUPm/OtZYcD5vPWePKxSnTQ57KuBd9mtdZ3oNCvyQ==} + engines: {node: '>=22'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -10815,6 +10815,10 @@ packages: resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} engines: {node: '>=18.18.0'} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + hyperdyperid@1.2.0: resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} engines: {node: '>=10.18'} @@ -12426,10 +12430,6 @@ packages: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} - p-reduce@2.1.0: - resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==} - engines: {node: '>=8'} - p-reduce@3.0.0: resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} engines: {node: '>=12'} @@ -15147,6 +15147,11 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-command@0.1.0: + resolution: {integrity: sha512-XZyoF5/5hZtXitIwzrU4NKK+Wtbb9aB9CezUEw2Q0wlYK8NUYQxC1rRXgNueYLtBAJwXIb+/tFVk4dozciNJMA==} + engines: {node: '>=22'} + hasBin: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -15318,6 +15323,10 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} @@ -15327,8 +15336,8 @@ packages: peerDependencies: zod: '>= 3.25.0' - zod-openapi@5.3.0: - resolution: {integrity: sha512-hv3DU37kV39v0MEiQ0vcL06NLS9bTHTb7FNtuFk2zhuATsi+UNcNN6y03z7qbI9NdC6LJS+Knk5shOSCUMwsDQ==} + zod-openapi@5.4.6: + resolution: {integrity: sha512-P2jsOOBAq/6hCwUsMCjUATZ8szkMsV5VAwZENfyxp2Hc/XPJQpVwAgevWZc65xZauCwWB9LAn7zYeiCJFAEL+A==} engines: {node: '>=20'} peerDependencies: zod: ^3.25.74 || ^4.0.0 @@ -15590,20 +15599,20 @@ snapshots: '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.0': + '@babel/core@7.29.0(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helpers': 7.29.2 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -15638,32 +15647,32 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.0)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.0)': + '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)': + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) lodash.debounce: 4.0.8 resolve: 1.22.12 transitivePeerDependencies: @@ -15673,26 +15682,26 @@ snapshots: '@babel/helper-globals@7.29.7': {} - '@babel/helper-member-expression-to-functions@7.29.7': + '@babel/helper-member-expression-to-functions@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.29.7': + '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.0)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -15704,27 +15713,27 @@ snapshots: '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.29.0)': + '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-wrap-function': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/helper-wrap-function': 7.29.7(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.0)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -15735,10 +15744,10 @@ snapshots: '@babel/helper-validator-option@7.29.7': {} - '@babel/helper-wrap-function@7.29.7': + '@babel/helper-wrap-function@7.29.7(supports-color@10.2.2)': dependencies: '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -15752,578 +15761,578 @@ snapshots: dependencies: '@babel/types': 7.29.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-arrow-functions@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-arrow-functions@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-async-generator-functions@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-async-generator-functions@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.0) - '@babel/traverse': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-async-to-generator@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.0) + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoped-functions@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-globals': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.0) - '@babel/traverse': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 '@babel/template': 7.29.7 - '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-duplicate-keys@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-duplicate-keys@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-dynamic-import@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-dynamic-import@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-for-of@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-for-of@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-function-name@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-literals@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-literals@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-member-expression-literals@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-member-expression-literals@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-modules-amd@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-amd@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-systemjs@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-umd@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-new-target@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-new-target@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.0) - '@babel/traverse': 7.29.7 + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-object-super@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.0) + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-constant-elements@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-react-constant-elements@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-display-name@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-react-display-name@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-jsx-development@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-react-jsx-development@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-module-imports': 7.29.7 + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-react-pure-annotations@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-reserved-words@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-reserved-words@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-shorthand-properties@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-spread@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-spread@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-sticky-regex@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-template-literals@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-template-literals@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typeof-symbol@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-typeof-symbol@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-escapes@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) '@babel/helper-plugin-utils': 7.29.7 - '@babel/preset-env@7.29.7(@babel/core@7.29.0)': + '@babel/preset-env@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: '@babel/compat-data': 7.29.7 - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) - '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) - '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-block-scoped-functions': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-dotall-regex': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-duplicate-keys': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-dynamic-import': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-explicit-resource-management': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-exponentiation-operator': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-json-strings': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-member-expression-literals': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-modules-amd': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-modules-systemjs': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-modules-umd': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-new-target': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-object-super': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-property-literals': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-reserved-words': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-typeof-symbol': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-escapes': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-property-regex': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-sets-regex': 7.29.7(@babel/core@7.29.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) - babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-block-scoped-functions': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-dotall-regex': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-duplicate-keys': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-dynamic-import': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-explicit-resource-management': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-exponentiation-operator': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-json-strings': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-member-expression-literals': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-modules-amd': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-modules-systemjs': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-modules-umd': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-new-target': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-object-super': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-property-literals': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-reserved-words': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-typeof-symbol': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-unicode-escapes': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-unicode-property-regex': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-unicode-sets-regex': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0(supports-color@10.2.2)) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) core-js-compat: 3.49.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 '@babel/types': 7.29.7 esutils: 2.0.3 - '@babel/preset-react@7.29.7(@babel/core@7.29.0)': + '@babel/preset-react@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-react-pure-annotations': 7.29.7(@babel/core@7.29.0) + '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-react-pure-annotations': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.29.7(@babel/core@7.29.0)': + '@babel/preset-typescript@7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -16341,7 +16350,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@babel/traverse@7.29.0': + '@babel/traverse@7.29.0(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.0 @@ -16349,11 +16358,11 @@ snapshots: '@babel/parser': 7.29.7 '@babel/template': 7.28.6 '@babel/types': 7.29.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.7(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -16361,7 +16370,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/template': 7.29.7 '@babel/types': 7.29.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -16388,12 +16397,12 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 - '@better-auth/drizzle-adapter@1.6.15(@better-auth/core@1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))': + '@better-auth/drizzle-adapter@1.6.15(@better-auth/core@1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))': dependencies: '@better-auth/core': 1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) '@better-auth/utils': 0.4.1 optionalDependencies: - drizzle-orm: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) + drizzle-orm: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) '@better-auth/kysely-adapter@1.6.15(@better-auth/core@1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.29.2)': dependencies: @@ -16976,19 +16985,19 @@ snapshots: - '@algolia/client-search' - algoliasearch - '@docusaurus/babel@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/babel@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/generator': 7.29.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.0) - '@babel/preset-env': 7.29.7(@babel/core@7.29.0) - '@babel/preset-react': 7.29.7(@babel/core@7.29.0) - '@babel/preset-typescript': 7.29.7(@babel/core@7.29.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/preset-env': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/preset-react': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) '@babel/runtime': 7.29.7 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.0(supports-color@10.2.2) '@docusaurus/logger': 3.10.1 - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) babel-plugin-dynamic-import-node: 2.3.3 fs-extra: 11.2.0 tslib: 2.8.1 @@ -17010,34 +17019,34 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/bundler@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(csso@5.0.5)(esbuild@0.28.0)(lightningcss@1.32.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@babel/core': 7.29.0 - '@docusaurus/babel': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@docusaurus/babel': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/cssnano-preset': 3.10.1 '@docusaurus/logger': 3.10.1 - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + babel-loader: 9.2.1(@babel/core@7.29.0(supports-color@10.2.2))(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) clean-css: 5.3.3 - copy-webpack-plugin: 11.0.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) - css-loader: 6.11.0(@rspack/core@1.7.11(@swc/helpers@0.5.15))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(esbuild@0.28.0)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + copy-webpack-plugin: 11.0.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) + css-loader: 6.11.0(@rspack/core@1.7.11)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(csso@5.0.5)(esbuild@0.28.0)(lightningcss@1.32.0)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) cssnano: 6.1.2(postcss@8.5.16) - file-loader: 6.2.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + file-loader: 6.2.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) html-minifier-terser: 7.2.0 - mini-css-extract-plugin: 2.10.2(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) - null-loader: 4.0.1(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + mini-css-extract-plugin: 2.10.2(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) + null-loader: 4.0.1(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) postcss: 8.5.16 - postcss-loader: 7.3.4(@typescript/typescript6@6.0.2)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + postcss-loader: 7.3.4(@typescript/typescript6@6.0.2)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) postcss-preset-env: 10.6.1(postcss@8.5.16) - terser-webpack-plugin: 5.6.0(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.0)(html-minifier-terser@7.2.0)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + terser-webpack-plugin: 5.6.0(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.0)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) - webpackbar: 7.0.0(@rspack/core@1.7.11(@swc/helpers@0.5.15))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)))(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) + webpackbar: 7.0.0(@rspack/core@1.7.11)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) optionalDependencies: - '@docusaurus/faster': 3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16) + '@docusaurus/faster': 3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - '@minify-html/node' - '@parcel/css' @@ -17055,15 +17064,15 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/core@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/core@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/babel': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/bundler': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/babel': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/bundler': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(csso@5.0.5)(esbuild@0.28.0)(lightningcss@1.32.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) boxen: 6.2.1 chalk: 4.1.2 @@ -17072,14 +17081,14 @@ snapshots: combine-promises: 1.2.0 commander: 5.1.0 core-js: 3.49.0 - detect-port: 1.6.1 + detect-port: 1.6.1(supports-color@10.2.2) escape-html: 1.0.3 eta: 2.2.0 eval: 0.1.8 execa: 5.1.1 fs-extra: 11.2.0 html-tags: 3.3.1 - html-webpack-plugin: 5.6.7(@rspack/core@1.7.11(@swc/helpers@0.5.15))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + html-webpack-plugin: 5.6.7(@rspack/core@1.7.11)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) leven: 3.1.0 lodash: 4.18.1 open: 8.4.2 @@ -17089,7 +17098,7 @@ snapshots: react-dom: 19.2.7(react@19.2.7) react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)' react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.7)' - react-loadable-ssr-addon-v5-slorber: 1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.7))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + react-loadable-ssr-addon-v5-slorber: 1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.7))(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) react-router: 5.3.4(react@19.2.7) react-router-config: 5.1.1(react-router@5.3.4(react@19.2.7))(react@19.2.7) react-router-dom: 5.3.4(react@19.2.7) @@ -17098,12 +17107,12 @@ snapshots: tinypool: 1.1.1 tslib: 2.8.1 update-notifier: 6.0.2 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 5.2.4(tslib@2.8.1)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + webpack-dev-server: 5.2.4(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(tslib@2.8.1)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) webpack-merge: 6.0.1 optionalDependencies: - '@docusaurus/faster': 3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16) + '@docusaurus/faster': 3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - '@minify-html/node' - '@parcel/css' @@ -17133,18 +17142,18 @@ snapshots: postcss-sort-media-queries: 5.2.0(postcss@8.5.16) tslib: 2.8.1 - '@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16)': + '@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3)': dependencies: - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@rspack/core': 1.7.11(@swc/helpers@0.5.15) - '@swc/core': 1.15.3(@swc/helpers@0.5.15) + '@swc/core': 1.15.3 '@swc/html': 1.15.40 browserslist: 4.28.2 lightningcss: 1.32.0 semver: 7.7.4 - swc-loader: 0.2.7(@swc/core@1.15.3(@swc/helpers@0.5.15))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + swc-loader: 0.2.7(@swc/core@1.15.3)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) tslib: 2.8.1 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(@swc/html@1.15.40)(esbuild@0.28.1)(lightningcss@1.32.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - '@minify-html/node' - '@swc/css' @@ -17163,34 +17172,34 @@ snapshots: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/mdx-loader@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: '@docusaurus/logger': 3.10.1 - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@mdx-js/mdx': 3.1.1 + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@mdx-js/mdx': 3.1.1(supports-color@10.2.2) '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.5.0 - file-loader: 6.2.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + file-loader: 6.2.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) fs-extra: 11.2.0 image-size: 2.0.2 - mdast-util-mdx: 3.0.0 + mdast-util-mdx: 3.0.0(supports-color@10.2.2) mdast-util-to-string: 4.0.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) rehype-raw: 7.0.0 - remark-directive: 3.0.1 + remark-directive: 3.0.1(supports-color@10.2.2) remark-emoji: 4.0.1 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.1 + remark-frontmatter: 5.0.0(supports-color@10.2.2) + remark-gfm: 4.0.1(supports-color@10.2.2) stringify-object: 3.3.0 tslib: 2.8.1 unified: 11.0.5 unist-util-visit: 5.1.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)))(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) vfile: 6.0.3 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - '@minify-html/node' - '@swc/core' @@ -17207,9 +17216,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/module-type-aliases@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@types/history': 4.7.11 '@types/react': 19.2.17 '@types/react-router-config': 5.0.11 @@ -17234,17 +17243,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-content-blog@3.10.1(c336c9d98c1f4baf3a75901518d97959)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/theme-common': 3.10.1(693648dca07bcb0a42a6196192ee56b1) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) cheerio: 1.0.0-rc.12 combine-promises: 1.2.0 feed: 4.2.2 @@ -17257,7 +17266,7 @@ snapshots: tslib: 2.8.1 unist-util-visit: 5.1.0 utility-types: 3.11.0 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -17282,17 +17291,17 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/theme-common': 3.10.1(693648dca07bcb0a42a6196192ee56b1) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.2.0 @@ -17303,7 +17312,7 @@ snapshots: schema-dts: 1.1.5 tslib: 2.8.1 utility-types: 3.11.0 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -17328,18 +17337,18 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-pages@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-content-pages@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) fs-extra: 11.2.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -17364,12 +17373,12 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-css-cascade-layers@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-css-cascade-layers@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -17397,11 +17406,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-debug@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-debug@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) fs-extra: 11.2.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -17431,11 +17440,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-analytics@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-google-analytics@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 @@ -17463,11 +17472,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-gtag@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-google-gtag@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@types/gtag.js': 0.0.20 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -17496,11 +17505,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-google-tag-manager@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 @@ -17528,14 +17537,14 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-sitemap@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-sitemap@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) fs-extra: 11.2.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -17565,18 +17574,18 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-svgr@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/plugin-svgr@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@svgr/core': 8.1.0(@typescript/typescript6@6.0.2) - '@svgr/webpack': 8.1.0(@typescript/typescript6@6.0.2) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@svgr/core': 8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) + '@svgr/webpack': 8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) tslib: 2.8.1 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -17601,23 +17610,23 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/preset-classic@3.10.1(@algolia/client-search@5.53.0)(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)': + '@docusaurus/preset-classic@3.10.1(@algolia/client-search@5.53.0)(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-content-blog': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-content-pages': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-css-cascade-layers': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-debug': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-google-analytics': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-google-gtag': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-google-tag-manager': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-sitemap': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-svgr': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/theme-classic': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/theme-search-algolia': 3.10.1(@algolia/client-search@5.53.0)(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-content-blog': 3.10.1(c336c9d98c1f4baf3a75901518d97959) + '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-content-pages': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-css-cascade-layers': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-debug': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-google-analytics': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-google-gtag': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-google-tag-manager': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-sitemap': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-svgr': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/theme-classic': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/theme-common': 3.10.1(693648dca07bcb0a42a6196192ee56b1) + '@docusaurus/theme-search-algolia': 3.10.1(@algolia/client-search@5.53.0)(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) transitivePeerDependencies: @@ -17652,21 +17661,21 @@ snapshots: '@types/react': 19.2.17 react: 19.2.7 - '@docusaurus/theme-classic@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/theme-classic@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-content-blog': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-content-pages': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-content-blog': 3.10.1(c336c9d98c1f4baf3a75901518d97959) + '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-content-pages': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/theme-common': 3.10.1(693648dca07bcb0a42a6196192ee56b1) '@docusaurus/theme-translations': 3.10.1 - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) clsx: 2.1.1 copy-text-to-clipboard: 3.2.2 @@ -17705,13 +17714,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-common@3.10.1(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/theme-common@3.10.1(693648dca07bcb0a42a6196192ee56b1)': dependencies: - '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/mdx-loader': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@types/history': 4.7.11 '@types/react': 19.2.17 '@types/react-router-config': 5.0.11 @@ -17738,13 +17747,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-mermaid@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/theme-mermaid@3.10.1(c336c9d98c1f4baf3a75901518d97959)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/module-type-aliases': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/theme-common': 3.10.1(693648dca07bcb0a42a6196192ee56b1) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) mermaid: 11.15.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -17774,17 +17783,17 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-search-algolia@3.10.1(@algolia/client-search@5.53.0)(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)': + '@docusaurus/theme-search-algolia@3.10.1(@algolia/client-search@5.53.0)(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: '@algolia/autocomplete-core': 1.19.8(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3) '@docsearch/react': 4.6.3(@algolia/client-search@5.53.0)(@types/react@19.2.17)(algoliasearch@5.53.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(search-insights@2.17.3) - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) '@docusaurus/logger': 3.10.1 - '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/theme-common': 3.10.1(@docusaurus/plugin-content-docs@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/plugin-content-docs': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/theme-common': 3.10.1(693648dca07bcb0a42a6196192ee56b1) '@docusaurus/theme-translations': 3.10.1 - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-validation': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) algoliasearch: 5.53.0 algoliasearch-helper: 3.29.1(algoliasearch@5.53.0) clsx: 2.1.1 @@ -17829,9 +17838,9 @@ snapshots: '@docusaurus/tsconfig@3.10.1': {} - '@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@mdx-js/mdx': 3.1.1 + '@mdx-js/mdx': 3.1.1(supports-color@10.2.2) '@types/history': 4.7.11 '@types/mdast': 4.0.4 '@types/react': 19.2.17 @@ -17841,7 +17850,7 @@ snapshots: react-dom: 19.2.7(react@19.2.7) react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)' utility-types: 3.11.0 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) webpack-merge: 5.10.0 transitivePeerDependencies: - '@minify-html/node' @@ -17859,9 +17868,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/utils-common@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) tslib: 2.8.1 transitivePeerDependencies: - '@minify-html/node' @@ -17881,11 +17890,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/utils-validation@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: '@docusaurus/logger': 3.10.1 - '@docusaurus/utils': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/utils': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) fs-extra: 11.2.0 joi: 17.13.3 js-yaml: 4.1.1 @@ -17909,14 +17918,14 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@docusaurus/utils@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)': dependencies: '@docusaurus/logger': 3.10.1 - '@docusaurus/types': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/types': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) + '@docusaurus/utils-common': 3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) escape-string-regexp: 4.0.0 execa: 5.1.1 - file-loader: 6.2.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + file-loader: 6.2.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) fs-extra: 11.2.0 github-slugger: 1.5.0 globby: 11.1.0 @@ -17929,9 +17938,9 @@ snapshots: prompts: 2.4.2 resolve-pathname: 3.0.0 tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)))(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) utility-types: 3.11.0 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - '@minify-html/node' - '@swc/core' @@ -18450,9 +18459,9 @@ snapshots: '@homarr/gridstack@1.12.0': {} - '@homarr/node-unifi@2.6.0(undici@7.28.0)': + '@homarr/node-unifi@2.6.0(debug@4.4.3(supports-color@10.2.2))(undici@7.28.0)': dependencies: - axios: 1.9.0 + axios: 1.9.0(debug@4.4.3(supports-color@10.2.2)) eventemitter2: 6.4.9 http-cookie-agent: 6.0.8(tough-cookie@5.1.2)(undici@7.28.0) tough-cookie: 5.1.2 @@ -18754,9 +18763,9 @@ snapshots: '@isaacs/cliui@9.0.0': {} - '@jellyfin/sdk@0.13.0(axios@1.15.0)': + '@jellyfin/sdk@0.13.0(axios@1.15.0(debug@4.4.3(supports-color@10.2.2)))': dependencies: - axios: 1.15.0 + axios: 1.15.0(debug@4.4.3(supports-color@10.2.2)) '@jest/schemas@29.6.3': dependencies: @@ -18932,7 +18941,7 @@ snapshots: '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) tslib: 2.8.1 - '@kubernetes/client-node@1.4.0': + '@kubernetes/client-node@1.4.0(supports-color@10.2.2)': dependencies: '@types/js-yaml': 4.0.9 '@types/node': 24.13.2 @@ -18946,7 +18955,7 @@ snapshots: node-fetch: 2.7.0 openid-client: 6.3.3 rfc4648: 1.5.4 - socks-proxy-agent: 8.0.5 + socks-proxy-agent: 8.0.5(supports-color@10.2.2) stream-buffers: 3.0.3 tar-fs: 3.1.2 ws: 8.21.0 @@ -18957,9 +18966,9 @@ snapshots: - supports-color - utf-8-validate - '@kwsites/file-exists@1.1.1': + '@kwsites/file-exists@1.1.1(supports-color@10.2.2)': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -19114,7 +19123,7 @@ snapshots: '@marijn/find-cluster-break@1.0.2': {} - '@mdx-js/mdx@3.1.1': + '@mdx-js/mdx@3.1.1(supports-color@10.2.2)': dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 @@ -19126,14 +19135,14 @@ snapshots: estree-util-is-identifier-name: 3.0.0 estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 + hast-util-to-jsx-runtime: 2.3.6(supports-color@10.2.2) markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 recma-jsx: 1.0.1(acorn@8.16.0) recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.1.1 - remark-parse: 11.0.0 + rehype-recma: 1.0.0(supports-color@10.2.2) + remark-mdx: 3.1.1(supports-color@10.2.2) + remark-parse: 11.0.0(supports-color@10.2.2) remark-rehype: 11.1.2 source-map: 0.7.6 unified: 11.0.5 @@ -19154,7 +19163,7 @@ snapshots: dependencies: '@chevrotain/types': 11.1.2 - '@modelcontextprotocol/sdk@1.26.0(zod@4.4.3)': + '@modelcontextprotocol/sdk@1.26.0(supports-color@10.2.2)(zod@4.4.3)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.24) ajv: 8.18.0 @@ -19164,8 +19173,8 @@ snapshots: cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.1.0 - express: 5.2.1 - express-rate-limit: 8.5.2(express@5.2.1) + express: 5.2.1(supports-color@10.2.2) + express-rate-limit: 8.5.2(express@5.2.1(supports-color@10.2.2)) hono: 4.12.24 jose: 6.2.3 json-schema-typed: 8.0.2 @@ -19176,7 +19185,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': + '@modelcontextprotocol/sdk@1.29.0(supports-color@10.2.2)(zod@4.4.3)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.24) ajv: 8.18.0 @@ -19186,8 +19195,8 @@ snapshots: cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.1.0 - express: 5.2.1 - express-rate-limit: 8.5.2(express@5.2.1) + express: 5.2.1(supports-color@10.2.2) + express-rate-limit: 8.5.2(express@5.2.1(supports-color@10.2.2)) hono: 4.12.24 jose: 6.2.3 json-schema-typed: 8.0.2 @@ -20123,11 +20132,11 @@ snapshots: '@rvf/set-get@7.0.1': {} - '@scalar/agent-chat@0.12.18(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(tailwindcss@4.3.2)(zod@4.4.3)': + '@scalar/agent-chat@0.12.18(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(supports-color@10.2.2)(tailwindcss@4.3.2)(zod@4.4.3)': dependencies: '@ai-sdk/vue': 3.0.33(vue@3.5.35(@typescript/typescript6@6.0.2))(zod@4.4.3) - '@scalar/api-client': 3.13.3(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(tailwindcss@4.3.2) - '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2) + '@scalar/api-client': 3.13.3(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(supports-color@10.2.2)(tailwindcss@4.3.2) + '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2) '@scalar/helpers': 0.9.0 '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/json-magic': 0.12.17 @@ -20161,17 +20170,17 @@ snapshots: - universal-cookie - zod - '@scalar/api-client@3.13.3(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(tailwindcss@4.3.2)': + '@scalar/api-client@3.13.3(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(supports-color@10.2.2)(tailwindcss@4.3.2)': dependencies: '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.3.2) '@headlessui/vue': 1.7.23(vue@3.5.35(@typescript/typescript6@6.0.2)) - '@scalar/blocks': 0.1.4(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2) - '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2) + '@scalar/blocks': 0.1.4(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2) + '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2) '@scalar/helpers': 0.9.0 '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/oas-utils': 0.19.4(@typescript/typescript6@6.0.2) '@scalar/openapi-types': 0.9.1 - '@scalar/sidebar': 0.9.29(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2) + '@scalar/sidebar': 0.9.29(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2) '@scalar/snippetz': 0.9.21 '@scalar/themes': 0.16.2 '@scalar/typebox': 0.1.3 @@ -20209,9 +20218,9 @@ snapshots: - typescript - universal-cookie - '@scalar/api-reference-react@0.9.54(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(react@19.2.7)(tailwindcss@4.3.2)(zod@4.4.3)': + '@scalar/api-reference-react@0.9.54(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(react@19.2.7)(supports-color@10.2.2)(tailwindcss@4.3.2)(zod@4.4.3)': dependencies: - '@scalar/api-reference': 1.62.5(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(tailwindcss@4.3.2)(zod@4.4.3) + '@scalar/api-reference': 1.62.5(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(supports-color@10.2.2)(tailwindcss@4.3.2)(zod@4.4.3) '@scalar/types': 0.16.2 react: 19.2.7 transitivePeerDependencies: @@ -20231,19 +20240,19 @@ snapshots: - universal-cookie - zod - '@scalar/api-reference@1.62.5(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(tailwindcss@4.3.2)(zod@4.4.3)': + '@scalar/api-reference@1.62.5(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(supports-color@10.2.2)(tailwindcss@4.3.2)(zod@4.4.3)': dependencies: '@headlessui/vue': 1.7.23(vue@3.5.35(@typescript/typescript6@6.0.2)) - '@scalar/agent-chat': 0.12.18(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(tailwindcss@4.3.2)(zod@4.4.3) - '@scalar/api-client': 3.13.3(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(tailwindcss@4.3.2) - '@scalar/blocks': 0.1.4(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2) - '@scalar/code-highlight': 0.4.1 - '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2) + '@scalar/agent-chat': 0.12.18(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(supports-color@10.2.2)(tailwindcss@4.3.2)(zod@4.4.3) + '@scalar/api-client': 3.13.3(@typescript/typescript6@6.0.2)(nprogress@0.2.0)(supports-color@10.2.2)(tailwindcss@4.3.2) + '@scalar/blocks': 0.1.4(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2) + '@scalar/code-highlight': 0.4.1(supports-color@10.2.2) + '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2) '@scalar/helpers': 0.9.0 '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/oas-utils': 0.19.4(@typescript/typescript6@6.0.2) '@scalar/schemas': 0.7.2 - '@scalar/sidebar': 0.9.29(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2) + '@scalar/sidebar': 0.9.29(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2) '@scalar/snippetz': 0.9.21 '@scalar/themes': 0.16.2 '@scalar/types': 0.16.2 @@ -20279,9 +20288,9 @@ snapshots: dependencies: '@scalar/helpers': 0.9.0 - '@scalar/blocks@0.1.4(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2)': + '@scalar/blocks@0.1.4(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2)': dependencies: - '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2) + '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2) '@scalar/helpers': 0.9.0 '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/snippetz': 0.9.21 @@ -20297,7 +20306,7 @@ snapshots: - tailwindcss - typescript - '@scalar/code-highlight@0.4.1': + '@scalar/code-highlight@0.4.1(supports-color@10.2.2)': dependencies: hast-util-to-text: 4.0.2 highlight.js: 11.11.1 @@ -20308,8 +20317,8 @@ snapshots: rehype-raw: 7.0.0 rehype-sanitize: 6.0.0 rehype-stringify: 10.0.1 - remark-gfm: 4.0.1 - remark-parse: 11.0.0 + remark-gfm: 4.0.1(supports-color@10.2.2) + remark-parse: 11.0.0(supports-color@10.2.2) remark-rehype: 11.1.2 remark-stringify: 11.0.0 unified: 11.0.5 @@ -20317,13 +20326,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@scalar/components@0.27.6(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2)': + '@scalar/components@0.27.6(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2)': dependencies: '@floating-ui/utils': 0.2.10 '@floating-ui/vue': 1.1.9(vue@3.5.35(@typescript/typescript6@6.0.2)) '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.3.2) '@headlessui/vue': 1.7.23(vue@3.5.35(@typescript/typescript6@6.0.2)) - '@scalar/code-highlight': 0.4.1 + '@scalar/code-highlight': 0.4.1(supports-color@10.2.2) '@scalar/helpers': 0.9.0 '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/themes': 0.16.2 @@ -20379,9 +20388,9 @@ snapshots: '@scalar/helpers': 0.9.0 '@scalar/validation': 0.6.0 - '@scalar/sidebar@0.9.29(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2)': + '@scalar/sidebar@0.9.29(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2)': dependencies: - '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(tailwindcss@4.3.2) + '@scalar/components': 0.27.6(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(tailwindcss@4.3.2) '@scalar/helpers': 0.9.0 '@scalar/icons': 0.7.3(@typescript/typescript6@6.0.2) '@scalar/themes': 0.16.2 @@ -20476,47 +20485,44 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/changelog@6.0.3(semantic-release@25.0.5(@typescript/typescript6@6.0.2))': + '@semantic-release/changelog@7.0.0(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))': dependencies: - '@semantic-release/error': 3.0.0 - aggregate-error: 3.1.0 - fs-extra: 11.2.0 - lodash: 4.18.1 - semantic-release: 25.0.5(@typescript/typescript6@6.0.2) + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + lodash-es: 4.17.21 + semantic-release: 25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2) - '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2))': + '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.4.3 - import-from-esm: 2.0.0 + debug: 4.4.3(supports-color@10.2.2) + import-from-esm: 2.0.0(supports-color@10.2.2) lodash-es: 4.17.21 micromatch: 4.0.8 - semantic-release: 25.0.5(@typescript/typescript6@6.0.2) + semantic-release: 25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@semantic-release/error@3.0.0': {} - '@semantic-release/error@4.0.0': {} - '@semantic-release/git@10.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2))': + '@semantic-release/git@11.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@semantic-release/error': 3.0.0 - aggregate-error: 3.1.0 - debug: 4.4.3 + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + debug: 4.4.3(supports-color@10.2.2) dir-glob: 3.0.1 - execa: 5.1.1 - lodash: 4.18.1 + execa: 10.0.0 + lodash-es: 4.17.21 micromatch: 4.0.8 - p-reduce: 2.1.0 - semantic-release: 25.0.5(@typescript/typescript6@6.0.2) + p-reduce: 3.0.0 + semantic-release: 25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@semantic-release/github@12.0.9(semantic-release@25.0.5(@typescript/typescript6@6.0.2))': + '@semantic-release/github@12.0.9(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: '@octokit/core': 7.0.6 '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) @@ -20524,22 +20530,22 @@ snapshots: '@octokit/plugin-throttling': 11.0.3(@octokit/core@7.0.6) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) dir-glob: 3.0.1 - http-proxy-agent: 9.0.0 - https-proxy-agent: 9.0.0 + http-proxy-agent: 9.0.0(supports-color@10.2.2) + https-proxy-agent: 9.0.0(supports-color@10.2.2) issue-parser: 7.0.1 lodash-es: 4.17.21 mime: 4.0.4 p-filter: 4.1.0 - semantic-release: 25.0.5(@typescript/typescript6@6.0.2) + semantic-release: 25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2) tinyglobby: 0.2.17 undici: 7.28.0 url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@13.1.5(semantic-release@25.0.5(@typescript/typescript6@6.0.2))': + '@semantic-release/npm@13.1.5(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))': dependencies: '@actions/core': 3.0.0 '@semantic-release/error': 4.0.0 @@ -20554,21 +20560,21 @@ snapshots: rc: 1.2.8 read-pkg: 10.0.0 registry-auth-token: 5.0.2 - semantic-release: 25.0.5(@typescript/typescript6@6.0.2) + semantic-release: 25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2) semver: 7.7.4 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.1.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2))': + '@semantic-release/release-notes-generator@14.1.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.4.3 - import-from-esm: 2.0.0 + debug: 4.4.3(supports-color@10.2.2) + import-from-esm: 2.0.0(supports-color@10.2.2) lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 25.0.5(@typescript/typescript6@6.0.2) + semantic-release: 25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -20580,9 +20586,9 @@ snapshots: '@sideway/pinpoint@2.0.0': {} - '@signalwire/docusaurus-plugin-llms-txt@1.2.2(@docusaurus/core@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + '@signalwire/docusaurus-plugin-llms-txt@1.2.2(@docusaurus/core@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(supports-color@10.2.2)': dependencies: - '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/core': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) fs-extra: 11.2.0 hast-util-select: 6.0.4 hast-util-to-html: 9.0.5 @@ -20590,7 +20596,7 @@ snapshots: p-map: 7.0.3 rehype-parse: 9.0.1 rehype-remark: 10.0.1 - remark-gfm: 4.0.1 + remark-gfm: 4.0.1(supports-color@10.2.2) remark-stringify: 11.0.0 string-width: 5.1.2 unified: 11.0.5 @@ -20631,54 +20637,54 @@ snapshots: '@standard-schema/utils@0.3.0': {} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) - '@svgr/babel-preset@8.1.0(@babel/core@7.29.0)': + '@svgr/babel-preset@8.1.0(@babel/core@7.29.0(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.0(supports-color@10.2.2)) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0(supports-color@10.2.2)) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0(supports-color@10.2.2)) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.0(supports-color@10.2.2)) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.0(supports-color@10.2.2)) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.0(supports-color@10.2.2)) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0(supports-color@10.2.2)) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0(supports-color@10.2.2)) - '@svgr/core@8.1.0(@typescript/typescript6@6.0.2)': + '@svgr/core@8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0(supports-color@10.2.2)) camelcase: 6.3.0 cosmiconfig: 8.3.6(@typescript/typescript6@6.0.2) snake-case: 3.0.4 @@ -20691,35 +20697,35 @@ snapshots: '@babel/types': 7.29.7 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(@typescript/typescript6@6.0.2))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) - '@svgr/core': 8.1.0(@typescript/typescript6@6.0.2) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0(supports-color@10.2.2)) + '@svgr/core': 8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(@typescript/typescript6@6.0.2)': dependencies: - '@svgr/core': 8.1.0(@typescript/typescript6@6.0.2) + '@svgr/core': 8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) cosmiconfig: 8.3.6(@typescript/typescript6@6.0.2) deepmerge: 4.3.1 svgo: 3.3.3 transitivePeerDependencies: - typescript - '@svgr/webpack@8.1.0(@typescript/typescript6@6.0.2)': + '@svgr/webpack@8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-constant-elements': 7.29.7(@babel/core@7.29.0) - '@babel/preset-env': 7.29.7(@babel/core@7.29.0) - '@babel/preset-react': 7.29.7(@babel/core@7.29.0) - '@babel/preset-typescript': 7.29.7(@babel/core@7.29.0) - '@svgr/core': 8.1.0(@typescript/typescript6@6.0.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(@typescript/typescript6@6.0.2)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/plugin-transform-react-constant-elements': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2)) + '@babel/preset-env': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/preset-react': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) + '@svgr/core': 8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(@typescript/typescript6@6.0.2) transitivePeerDependencies: - supports-color - typescript @@ -20754,7 +20760,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.15.3': optional: true - '@swc/core@1.15.3(@swc/helpers@0.5.15)': + '@swc/core@1.15.3': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.25 @@ -20769,7 +20775,6 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.15.3 '@swc/core-win32-ia32-msvc': 1.15.3 '@swc/core-win32-x64-msvc': 1.15.3 - '@swc/helpers': 0.5.15 '@swc/counter@0.1.3': {} @@ -20951,10 +20956,10 @@ snapshots: '@tanstack/react-query': 5.101.2(react@19.2.7) react: 19.2.7 - '@tanstack/react-query-next-experimental@5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7)': + '@tanstack/react-query-next-experimental@5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7)': dependencies: '@tanstack/react-query': 5.101.2(react@19.2.7) - next: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + next: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: 19.2.7 '@tanstack/react-query-persist-client@5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(react@19.2.7)': @@ -20991,23 +20996,23 @@ snapshots: '@tanstack/virtual-core': 3.17.0 vue: 3.5.35(@typescript/typescript6@6.0.2) - '@testcontainers/mysql@12.0.4': + '@testcontainers/mysql@12.0.4(supports-color@10.2.2)': dependencies: - testcontainers: 12.0.4 + testcontainers: 12.0.4(supports-color@10.2.2) transitivePeerDependencies: - bare-buffer - supports-color - '@testcontainers/postgresql@12.0.4': + '@testcontainers/postgresql@12.0.4(supports-color@10.2.2)': dependencies: - testcontainers: 12.0.4 + testcontainers: 12.0.4(supports-color@10.2.2) transitivePeerDependencies: - bare-buffer - supports-color - '@testcontainers/redis@12.0.4': + '@testcontainers/redis@12.0.4(supports-color@10.2.2)': dependencies: - testcontainers: 12.0.4 + testcontainers: 12.0.4(supports-color@10.2.2) transitivePeerDependencies: - bare-buffer - supports-color @@ -21238,11 +21243,11 @@ snapshots: '@trpc/server': 11.18.0(@typescript/typescript6@6.0.2) typescript: '@typescript/typescript6@6.0.2' - '@trpc/next@11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/react-query@11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(react@19.2.7))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@trpc/next@11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/react-query@11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(react@19.2.7))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: '@trpc/client': 11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2) '@trpc/server': 11.18.0(@typescript/typescript6@6.0.2) - next: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + next: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) typescript: '@typescript/typescript6@6.0.2' @@ -22267,17 +22272,17 @@ snapshots: aws-ssl-profiles@1.1.2: {} - axios@1.15.0: + axios@1.15.0(debug@4.4.3(supports-color@10.2.2)): dependencies: - follow-redirects: 1.16.0 + follow-redirects: 1.16.0(debug@4.4.3(supports-color@10.2.2)) form-data: 4.0.6 proxy-from-env: 2.1.0 transitivePeerDependencies: - debug - axios@1.9.0: + axios@1.9.0(debug@4.4.3(supports-color@10.2.2)): dependencies: - follow-redirects: 1.16.0 + follow-redirects: 1.16.0(debug@4.4.3(supports-color@10.2.2)) form-data: 4.0.6 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -22285,46 +22290,46 @@ snapshots: b4a@1.6.6: {} - babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + babel-loader@9.2.1(@babel/core@7.29.0(supports-color@10.2.2))(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) find-cache-dir: 4.0.0 schema-utils: 4.3.3 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) babel-plugin-dynamic-import-node@2.3.3: dependencies: object.assign: 4.1.7 - babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2): dependencies: '@babel/compat-data': 7.29.7 - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + '@babel/core': 7.29.0(supports-color@10.2.2) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -22384,10 +22389,10 @@ snapshots: before-after-hook@4.0.0: {} - better-auth@1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)): + better-auth@1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)): dependencies: '@better-auth/core': 1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.15(@better-auth/core@1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1)) + '@better-auth/drizzle-adapter': 1.6.15(@better-auth/core@1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1)) '@better-auth/kysely-adapter': 1.6.15(@better-auth/core@1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.29.2) '@better-auth/memory-adapter': 1.6.15(@better-auth/core@1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1) '@better-auth/mongo-adapter': 1.6.15(@better-auth/core@1.6.15(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1) @@ -22406,9 +22411,9 @@ snapshots: optionalDependencies: better-sqlite3: 12.11.1 drizzle-kit: 0.31.10 - drizzle-orm: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) + drizzle-orm: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) mysql2: 3.22.6(@types/node@24.13.3) - next: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + next: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) pg: 8.22.0 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -22454,11 +22459,11 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - body-parser@1.20.5: + body-parser@1.20.5(supports-color@10.2.2): dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 2.6.9 + debug: 2.6.9(supports-color@10.2.2) depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.1 @@ -22471,11 +22476,11 @@ snapshots: transitivePeerDependencies: - supports-color - body-parser@2.2.2: + body-parser@2.2.2(supports-color@10.2.2): dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) http-errors: 2.0.1 iconv-lite: 0.7.2 on-finished: 2.4.1 @@ -22847,11 +22852,11 @@ snapshots: dependencies: mime-db: 1.54.0 - compression@1.8.1: + compression@1.8.1(supports-color@10.2.2): dependencies: bytes: 3.1.2 compressible: 2.0.18 - debug: 2.6.9 + debug: 2.6.9(supports-color@10.2.2) negotiator: 0.6.4 on-headers: 1.1.0 safe-buffer: 5.2.1 @@ -22948,7 +22953,7 @@ snapshots: copy-text-to-clipboard@3.2.2: {} - copy-webpack-plugin@11.0.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + copy-webpack-plugin@11.0.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -22956,7 +22961,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 6.0.2 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) core-js-compat@3.49.0: dependencies: @@ -23051,7 +23056,7 @@ snapshots: postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - css-loader@6.11.0(@rspack/core@1.7.11(@swc/helpers@0.5.15))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + css-loader@6.11.0(@rspack/core@1.7.11)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: icss-utils: 5.1.0(postcss@8.5.16) postcss: 8.5.16 @@ -23063,9 +23068,9 @@ snapshots: semver: 7.7.4 optionalDependencies: '@rspack/core': 1.7.11(@swc/helpers@0.5.15) - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.28.0)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(csso@5.0.5)(esbuild@0.28.0)(lightningcss@1.32.0)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.1.2(postcss@8.5.16) @@ -23073,10 +23078,12 @@ snapshots: postcss: 8.5.16 schema-utils: 4.3.3 serialize-javascript: 6.0.2 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) optionalDependencies: clean-css: 5.3.3 + csso: 5.0.5 esbuild: 0.28.0 + lightningcss: 1.32.0 css-prefers-color-scheme@10.0.0(postcss@8.5.16): dependencies: @@ -23391,13 +23398,17 @@ snapshots: debounce@1.2.1: {} - debug@2.6.9: + debug@2.6.9(supports-color@10.2.2): dependencies: ms: 2.0.0 + optionalDependencies: + supports-color: 10.2.2 - debug@4.4.3: + debug@4.4.3(supports-color@10.2.2): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 decimal.js-light@2.5.1: {} @@ -23473,10 +23484,10 @@ snapshots: detect-node@2.1.0: {} - detect-port@1.6.1: + detect-port@1.6.1(supports-color@10.2.2): dependencies: address: 1.2.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -23502,40 +23513,40 @@ snapshots: dependencies: yaml: 2.9.0 - docker-modem@5.0.7: + docker-modem@5.0.7(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) readable-stream: 3.6.2 split-ca: 1.0.1 ssh2: 1.16.0 transitivePeerDependencies: - supports-color - dockerode@5.0.0: + dockerode@5.0.0(supports-color@10.2.2): dependencies: '@balena/dockerignore': 1.0.2 '@grpc/grpc-js': 1.12.5 '@grpc/proto-loader': 0.7.13 - docker-modem: 5.0.7 + docker-modem: 5.0.7(supports-color@10.2.2) protobufjs: 7.4.0 tar-fs: 2.1.4 transitivePeerDependencies: - supports-color - dockerode@5.0.1: + dockerode@5.0.1(supports-color@10.2.2): dependencies: '@balena/dockerignore': 1.0.2 '@grpc/grpc-js': 1.12.5 '@grpc/proto-loader': 0.7.13 - docker-modem: 5.0.7 + docker-modem: 5.0.7(supports-color@10.2.2) protobufjs: 7.4.0 tar-fs: 2.1.4 transitivePeerDependencies: - supports-color - docusaurus-plugin-image-zoom@3.0.1(@docusaurus/theme-classic@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)): + docusaurus-plugin-image-zoom@3.0.1(@docusaurus/theme-classic@3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3)): dependencies: - '@docusaurus/theme-classic': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@swc/helpers@0.5.15)(esbuild@0.28.1)(postcss@8.5.16))(@rspack/core@1.7.11(@swc/helpers@0.5.15))(@swc/core@1.15.3(@swc/helpers@0.5.15))(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@docusaurus/theme-classic': 3.10.1(@docusaurus/faster@3.10.1(@docusaurus/types@3.10.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3))(@swc/helpers@0.5.15)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(uglify-js@3.19.3))(@rspack/core@1.7.11)(@swc/core@1.15.3)(@swc/html@1.15.40)(@types/react@19.2.17)(@typescript/typescript6@6.0.2)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(debug@4.4.3(supports-color@10.2.2))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(supports-color@10.2.2)(uglify-js@3.19.3) medium-zoom: 1.1.0 validate-peer-dependencies: 2.2.0 @@ -23623,22 +23634,22 @@ snapshots: esbuild: 0.25.12 tsx: 4.21.0 - drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1): + drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1): optionalDependencies: '@libsql/client-wasm': 0.14.0 '@opentelemetry/api': 1.9.0 '@types/better-sqlite3': 7.6.13 '@types/pg': 8.20.0 better-sqlite3: 12.11.1 - gel: 2.0.0 + gel: 2.0.0(supports-color@10.2.2) kysely: 0.29.2 mysql2: 3.22.6(@types/node@24.13.3) pg: 8.22.0 sql.js: 1.14.1 - drizzle-zod@0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(zod@4.4.3): + drizzle-zod@0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(zod@4.4.3): dependencies: - drizzle-orm: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) + drizzle-orm: 0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1) zod: 4.4.3 dunder-proto@1.0.1: @@ -23966,6 +23977,22 @@ snapshots: dependencies: eventsource-parser: 3.1.0 + execa@10.0.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + path-key: 4.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + which-command: 0.1.0 + yoctocolors: 2.1.2 + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -24009,26 +24036,26 @@ snapshots: expect-type@1.3.0: {} - express-rate-limit@8.5.2(express@5.2.1): + express-rate-limit@8.5.2(express@5.2.1(supports-color@10.2.2)): dependencies: - express: 5.2.1 + express: 5.2.1(supports-color@10.2.2) ip-address: 10.2.0 - express@4.22.2: + express@4.22.2(supports-color@10.2.2): dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.5 + body-parser: 1.20.5(supports-color@10.2.2) content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.0.7 - debug: 2.6.9 + debug: 2.6.9(supports-color@10.2.2) depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.2 + finalhandler: 1.3.2(supports-color@10.2.2) fresh: 0.5.2 http-errors: 2.0.1 merge-descriptors: 1.0.3 @@ -24040,8 +24067,8 @@ snapshots: qs: 6.15.2 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.19.2 - serve-static: 1.16.3 + send: 0.19.2(supports-color@10.2.2) + serve-static: 1.16.3(supports-color@10.2.2) setprototypeof: 1.2.0 statuses: 2.0.2 type-is: 1.6.18 @@ -24050,20 +24077,20 @@ snapshots: transitivePeerDependencies: - supports-color - express@5.2.1: + express@5.2.1(supports-color@10.2.2): dependencies: accepts: 2.0.0 - body-parser: 2.2.2 + body-parser: 2.2.2(supports-color@10.2.2) content-disposition: 1.1.0 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.1 + finalhandler: 2.1.1(supports-color@10.2.2) fresh: 2.0.0 http-errors: 2.0.1 merge-descriptors: 2.0.0 @@ -24074,9 +24101,9 @@ snapshots: proxy-addr: 2.0.7 qs: 6.15.2 range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 + router: 2.2.0(supports-color@10.2.2) + send: 1.2.1(supports-color@10.2.2) + serve-static: 2.2.1(supports-color@10.2.2) statuses: 2.0.2 type-is: 2.1.0 vary: 1.1.2 @@ -24213,11 +24240,11 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) file-selector@2.1.2: dependencies: @@ -24229,9 +24256,9 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.3.2: + finalhandler@1.3.2(supports-color@10.2.2): dependencies: - debug: 2.6.9 + debug: 2.6.9(supports-color@10.2.2) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -24241,9 +24268,9 @@ snapshots: transitivePeerDependencies: - supports-color - finalhandler@2.1.1: + finalhandler@2.1.1(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -24291,7 +24318,9 @@ snapshots: dependencies: tabbable: 6.4.0 - follow-redirects@1.16.0: {} + follow-redirects@1.16.0(debug@4.4.3(supports-color@10.2.2)): + optionalDependencies: + debug: 4.4.3(supports-color@10.2.2) foreground-child@3.3.1: dependencies: @@ -24338,10 +24367,10 @@ snapshots: fuse.js@7.4.2: {} - gel@2.0.0: + gel@2.0.0(supports-color@10.2.2): dependencies: '@petamoriken/float16': 3.9.3 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) env-paths: 3.0.0 semver: 7.7.4 shell-quote: 1.8.4 @@ -24661,7 +24690,7 @@ snapshots: unist-util-visit: 5.1.0 zwitch: 2.0.4 - hast-util-to-estree@3.1.3: + hast-util-to-estree@3.1.3(supports-color@10.2.2): dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 @@ -24671,9 +24700,9 @@ snapshots: estree-util-attach-comments: 3.0.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@10.2.2) + mdast-util-mdx-jsx: 3.2.0(supports-color@10.2.2) + mdast-util-mdxjs-esm: 2.0.1(supports-color@10.2.2) property-information: 7.0.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.16 @@ -24696,7 +24725,7 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 - hast-util-to-jsx-runtime@2.3.6: + hast-util-to-jsx-runtime@2.3.6(supports-color@10.2.2): dependencies: '@types/estree': 1.0.8 '@types/hast': 3.0.4 @@ -24705,9 +24734,9 @@ snapshots: devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@10.2.2) + mdast-util-mdx-jsx: 3.2.0(supports-color@10.2.2) + mdast-util-mdxjs-esm: 2.0.1(supports-color@10.2.2) property-information: 7.0.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.16 @@ -24850,7 +24879,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.7(@rspack/core@1.7.11(@swc/helpers@0.5.15))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + html-webpack-plugin@5.6.7(@rspack/core@1.7.11)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -24859,7 +24888,7 @@ snapshots: tapable: 2.3.3 optionalDependencies: '@rspack/core': 1.7.11(@swc/helpers@0.5.15) - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) html-whitespace-sensitive-tag-names@3.0.1: {} @@ -24913,17 +24942,17 @@ snapshots: http-parser-js@0.5.10: {} - http-proxy-agent@9.0.0: + http-proxy-agent@9.0.0(supports-color@10.2.2): dependencies: agent-base: 9.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color - http-proxy-middleware@2.0.9(@types/express@4.17.25): + http-proxy-middleware@2.0.9(@types/express@4.17.25)(debug@4.4.3(supports-color@10.2.2)): dependencies: '@types/http-proxy': 1.17.17 - http-proxy: 1.18.1 + http-proxy: 1.18.1(debug@4.4.3(supports-color@10.2.2)) is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 @@ -24932,10 +24961,10 @@ snapshots: transitivePeerDependencies: - debug - http-proxy@1.18.1: + http-proxy@1.18.1(debug@4.4.3(supports-color@10.2.2)): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.16.0 + follow-redirects: 1.16.0(debug@4.4.3(supports-color@10.2.2)) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -24945,10 +24974,10 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@9.0.0: + https-proxy-agent@9.0.0(supports-color@10.2.2): dependencies: agent-base: 9.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -24958,6 +24987,8 @@ snapshots: human-signals@8.0.0: {} + human-signals@8.0.1: {} + hyperdyperid@1.2.0: {} ical.js@2.2.1: {} @@ -25005,9 +25036,9 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-from-esm@2.0.0: + import-from-esm@2.0.0(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) import-meta-resolve: 4.2.0 transitivePeerDependencies: - supports-color @@ -25051,11 +25082,11 @@ snapshots: dependencies: loose-envify: 1.4.0 - ioredis@5.11.1: + ioredis@5.11.1(supports-color@10.2.2): dependencies: '@ioredis/commands': 1.10.0 cluster-key-slot: 1.1.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) denque: 2.1.0 redis-errors: 1.2.0 redis-parser: 3.0.0 @@ -25286,9 +25317,9 @@ snapshots: jose@6.2.3: {} - jotai@2.20.1(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.17)(react@19.2.7): + jotai@2.20.1(@babel/core@7.29.0(supports-color@10.2.2))(@babel/template@7.29.7)(@types/react@19.2.17)(react@19.2.7): optionalDependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) '@babel/template': 7.29.7 '@types/react': 19.2.17 react: 19.2.7 @@ -25659,31 +25690,31 @@ snapshots: math-intrinsics@1.1.0: {} - mcp-handler@1.1.0(@modelcontextprotocol/sdk@1.26.0(zod@4.4.3))(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)): + mcp-handler@1.1.0(@modelcontextprotocol/sdk@1.26.0(supports-color@10.2.2)(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)): dependencies: - '@modelcontextprotocol/sdk': 1.26.0(zod@4.4.3) + '@modelcontextprotocol/sdk': 1.26.0(supports-color@10.2.2)(zod@4.4.3) chalk: 5.6.2 commander: 11.1.0 redis: 4.7.1 optionalDependencies: - next: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + next: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) - mcp-handler@1.1.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)): + mcp-handler@1.1.0(@modelcontextprotocol/sdk@1.29.0(supports-color@10.2.2)(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)): dependencies: - '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + '@modelcontextprotocol/sdk': 1.29.0(supports-color@10.2.2)(zod@4.4.3) chalk: 5.6.2 commander: 11.1.0 redis: 4.7.1 optionalDependencies: - next: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + next: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) - mdast-util-directive@3.1.0: + mdast-util-directive@3.1.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -25704,14 +25735,14 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - mdast-util-from-markdown@2.0.2: + mdast-util-from-markdown@2.0.2(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.1.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 + micromark: 4.0.2(supports-color@10.2.2) micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -25721,12 +25752,12 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-frontmatter@2.0.1: + mdast-util-frontmatter@2.0.1(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: @@ -25740,67 +25771,67 @@ snapshots: mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 - mdast-util-gfm-footnote@2.1.0: + mdast-util-gfm-footnote@2.1.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color - mdast-util-gfm-strikethrough@2.0.0: + mdast-util-gfm-strikethrough@2.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-table@2.0.0: + mdast-util-gfm-table@2.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-task-list-item@2.0.0: + mdast-util-gfm-task-list-item@2.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm@3.1.0: + mdast-util-gfm@3.1.0(supports-color@10.2.2): dependencies: - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-gfm-footnote: 2.1.0(supports-color@10.2.2) + mdast-util-gfm-strikethrough: 2.0.0(supports-color@10.2.2) + mdast-util-gfm-table: 2.0.0(supports-color@10.2.2) + mdast-util-gfm-task-list-item: 2.0.0(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.1: + mdast-util-mdx-expression@2.0.1(supports-color@10.2.2): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.2.0: + mdast-util-mdx-jsx@3.2.0(supports-color@10.2.2): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 @@ -25808,7 +25839,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -25817,23 +25848,23 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx@3.0.0: + mdast-util-mdx@3.0.0(supports-color@10.2.2): dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) + mdast-util-mdx-expression: 2.0.1(supports-color@10.2.2) + mdast-util-mdx-jsx: 3.2.0(supports-color@10.2.2) + mdast-util-mdxjs-esm: 2.0.1(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdxjs-esm@2.0.1: + mdast-util-mdxjs-esm@2.0.1(supports-color@10.2.2): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -26211,10 +26242,10 @@ snapshots: micromark-util-types@2.0.2: {} - micromark@4.0.2: + micromark@4.0.2(supports-color@10.2.2): dependencies: '@types/debug': 4.1.12 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) decode-named-character-reference: 1.1.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -26272,11 +26303,11 @@ snapshots: dependencies: dom-walk: 0.1.2 - mini-css-extract-plugin@2.10.2(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + mini-css-extract-plugin@2.10.2(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: schema-utils: 4.3.3 tapable: 2.3.3 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) minimalistic-assert@1.0.1: {} @@ -26403,22 +26434,22 @@ snapshots: neverpanic@0.0.8: {} - next-auth@5.0.0-beta.31(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7): + next-auth@5.0.0-beta.31(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7): dependencies: '@auth/core': 0.41.2 - next: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + next: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) react: 19.2.7 next-intl-swc-plugin-extractor@4.13.1: {} - next-intl@4.13.1(@typescript/typescript6@6.0.2)(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7): + next-intl@4.13.1(@typescript/typescript6@6.0.2)(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(react@19.2.7): dependencies: '@formatjs/intl-localematcher': 0.8.1 '@parcel/watcher': 2.4.1 - '@swc/core': 1.15.3(@swc/helpers@0.5.15) + '@swc/core': 1.15.3 icu-minify: 4.13.1 negotiator: 1.0.0 - next: 16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) + next: 16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0) next-intl-swc-plugin-extractor: 4.13.1 po-parser: 2.1.1 react: 19.2.7 @@ -26428,7 +26459,7 @@ snapshots: transitivePeerDependencies: - '@swc/helpers' - next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0): + next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0): dependencies: '@next/env': 16.2.10 '@swc/helpers': 0.5.15 @@ -26437,7 +26468,7 @@ snapshots: postcss: 8.4.31 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.7) + styled-jsx: 5.1.6(@babel/core@7.29.0(supports-color@10.2.2))(react@19.2.7) optionalDependencies: '@next/swc-darwin-arm64': 16.2.10 '@next/swc-darwin-x64': 16.2.10 @@ -26484,10 +26515,10 @@ snapshots: node-gyp-build@4.8.4: {} - node-loader@2.1.0(webpack@5.107.1(esbuild@0.28.1)(postcss@8.5.16)): + node-loader@2.1.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: loader-utils: 2.0.4 - webpack: 5.107.1(esbuild@0.28.1)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) node-mock-http@1.0.4: {} @@ -26532,11 +26563,11 @@ snapshots: dependencies: boolbase: 1.0.0 - null-loader@4.0.1(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + null-loader@4.0.1(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) oauth4webapi@3.3.0: {} @@ -26715,8 +26746,6 @@ snapshots: eventemitter3: 4.0.7 p-timeout: 3.2.0 - p-reduce@2.1.0: {} - p-reduce@3.0.0: {} p-retry@6.2.1: @@ -27121,13 +27150,13 @@ snapshots: '@csstools/utilities': 2.0.0(postcss@8.5.16) postcss: 8.5.16 - postcss-loader@7.3.4(@typescript/typescript6@6.0.2)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + postcss-loader@7.3.4(@typescript/typescript6@6.0.2)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: cosmiconfig: 8.3.6(@typescript/typescript6@6.0.2) jiti: 1.21.7 postcss: 8.5.16 semver: 7.7.4 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - typescript @@ -27562,9 +27591,9 @@ snapshots: retry: 0.12.0 signal-exit: 3.0.7 - properties-reader@3.0.1: + properties-reader@3.0.1(supports-color@10.2.2): dependencies: - '@kwsites/file-exists': 1.1.1 + '@kwsites/file-exists': 1.1.1(supports-color@10.2.2) mkdirp: 3.0.1 transitivePeerDependencies: - supports-color @@ -27801,23 +27830,23 @@ snapshots: '@types/react': 18.3.31 '@types/react-dom': 18.3.7(@types/react@18.3.31) - react-loadable-ssr-addon-v5-slorber@1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.7))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + react-loadable-ssr-addon-v5-slorber@1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.7))(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: '@babel/runtime': 7.29.7 react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.7)' - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) - react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7): + react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.7)(supports-color@10.2.2): dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 '@types/react': 19.2.17 devlop: 1.1.0 - hast-util-to-jsx-runtime: 2.3.6 + hast-util-to-jsx-runtime: 2.3.6(supports-color@10.2.2) html-url-attributes: 3.0.1 mdast-util-to-hast: 13.2.0 react: 19.2.7 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@10.2.2) remark-rehype: 11.1.2 unified: 11.0.5 unist-util-visit: 5.1.0 @@ -28121,11 +28150,11 @@ snapshots: hast-util-raw: 9.1.0 vfile: 6.0.3 - rehype-recma@1.0.0: + rehype-recma@1.0.0(supports-color@10.2.2): dependencies: '@types/estree': 1.0.8 '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.3 + hast-util-to-estree: 3.1.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -28150,10 +28179,10 @@ snapshots: relateurl@0.2.7: {} - remark-directive@3.0.1: + remark-directive@3.0.1(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 - mdast-util-directive: 3.1.0 + mdast-util-directive: 3.1.0(supports-color@10.2.2) micromark-extension-directive: 3.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -28167,37 +28196,37 @@ snapshots: node-emoji: 2.2.0 unified: 11.0.5 - remark-frontmatter@5.0.0: + remark-frontmatter@5.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 - mdast-util-frontmatter: 2.0.1 + mdast-util-frontmatter: 2.0.1(supports-color@10.2.2) micromark-extension-frontmatter: 2.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-gfm@4.0.1: + remark-gfm@4.0.1(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 + mdast-util-gfm: 3.1.0(supports-color@10.2.2) micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@10.2.2) remark-stringify: 11.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-mdx@3.1.1: + remark-mdx@3.1.1(supports-color@10.2.2): dependencies: - mdast-util-mdx: 3.0.0 + mdast-util-mdx: 3.0.0(supports-color@10.2.2) micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color - remark-parse@11.0.0: + remark-parse@11.0.0(supports-color@10.2.2): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@10.2.2) micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -28317,9 +28346,9 @@ snapshots: points-on-curve: 0.2.0 points-on-path: 0.2.1 - router@2.2.0: + router@2.2.0(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -28405,16 +28434,16 @@ snapshots: '@peculiar/x509': 1.14.3 pkijs: 3.4.0 - semantic-release@25.0.5(@typescript/typescript6@6.0.2): + semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2): dependencies: - '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 12.0.9(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) - '@semantic-release/npm': 13.1.5(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) - '@semantic-release/release-notes-generator': 14.1.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)) + '@semantic-release/github': 12.0.9(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2) + '@semantic-release/npm': 13.1.5(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2)) + '@semantic-release/release-notes-generator': 14.1.1(semantic-release@25.0.5(@typescript/typescript6@6.0.2)(supports-color@10.2.2))(supports-color@10.2.2) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(@typescript/typescript6@6.0.2) - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) env-ci: 11.2.0 execa: 9.5.2 figures: 6.1.0 @@ -28423,7 +28452,7 @@ snapshots: git-log-parser: 1.2.1 hook-std: 4.0.0 hosted-git-info: 9.0.2 - import-from-esm: 2.0.0 + import-from-esm: 2.0.0(supports-color@10.2.2) lodash-es: 4.17.21 marked: 15.0.11 marked-terminal: 7.3.0(marked@15.0.11) @@ -28451,9 +28480,9 @@ snapshots: semver@7.7.4: {} - send@0.19.2: + send@0.19.2(supports-color@10.2.2): dependencies: - debug: 2.6.9 + debug: 2.6.9(supports-color@10.2.2) depd: 2.0.0 destroy: 1.2.0 encodeurl: 2.0.0 @@ -28469,9 +28498,9 @@ snapshots: transitivePeerDependencies: - supports-color - send@1.2.1: + send@1.2.1(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -28499,11 +28528,11 @@ snapshots: path-to-regexp: 3.3.0 range-parser: 1.2.0 - serve-index@1.9.2: + serve-index@1.9.2(supports-color@10.2.2): dependencies: accepts: 1.3.8 batch: 0.6.1 - debug: 2.6.9 + debug: 2.6.9(supports-color@10.2.2) escape-html: 1.0.3 http-errors: 1.8.1 mime-types: 2.1.35 @@ -28511,21 +28540,21 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@1.16.3: + serve-static@1.16.3(supports-color@10.2.2): dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.2 + send: 0.19.2(supports-color@10.2.2) transitivePeerDependencies: - supports-color - serve-static@2.2.1: + serve-static@2.2.1(supports-color@10.2.2): dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.1 + send: 1.2.1(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -28682,10 +28711,10 @@ snapshots: uuid: 8.3.2 websocket-driver: 0.7.5 - socks-proxy-agent@8.0.5: + socks-proxy-agent@8.0.5(supports-color@10.2.2): dependencies: agent-base: 7.1.3 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -28730,9 +28759,9 @@ snapshots: spdx-license-ids@3.0.20: {} - spdy-transport@3.0.0: + spdy-transport@3.0.0(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -28741,13 +28770,13 @@ snapshots: transitivePeerDependencies: - supports-color - spdy@4.0.2: + spdy@4.0.2(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 - spdy-transport: 3.0.0 + spdy-transport: 3.0.0(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -28901,12 +28930,12 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.7): + styled-jsx@5.1.6(@babel/core@7.29.0(supports-color@10.2.2))(react@19.2.7): dependencies: client-only: 0.0.1 react: 19.2.7 optionalDependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.0(supports-color@10.2.2) stylehacks@6.1.1(postcss@8.5.16): dependencies: @@ -28967,11 +28996,11 @@ snapshots: deep-rename-keys: 0.2.1 xml-reader: 2.4.3 - swc-loader@0.2.7(@swc/core@1.15.3(@swc/helpers@0.5.15))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + swc-loader@0.2.7(@swc/core@1.15.3)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: - '@swc/core': 1.15.3(@swc/helpers@0.5.15) + '@swc/core': 1.15.3 '@swc/counter': 0.1.3 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) swiper@14.0.5: {} @@ -29041,60 +29070,43 @@ snapshots: type-fest: 2.19.0 unique-string: 3.0.0 - terser-webpack-plugin@5.6.0(@swc/core@1.15.3(@swc/helpers@0.5.15))(@swc/html@1.15.40)(esbuild@0.28.1)(lightningcss@1.32.0)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + terser-webpack-plugin@5.6.0(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.0)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.46.1 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) optionalDependencies: - '@swc/core': 1.15.3(@swc/helpers@0.5.15) + '@swc/core': 1.15.3 '@swc/html': 1.15.40 - esbuild: 0.28.1 - lightningcss: 1.32.0 - postcss: 8.5.16 - - terser-webpack-plugin@5.6.0(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.0)(html-minifier-terser@7.2.0)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - jest-worker: 27.5.1 - schema-utils: 4.3.3 - terser: 5.46.1 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) - optionalDependencies: - '@swc/core': 1.15.3(@swc/helpers@0.5.15) clean-css: 5.3.3 cssnano: 6.1.2(postcss@8.5.16) + csso: 5.0.5 esbuild: 0.28.0 html-minifier-terser: 7.2.0 + lightningcss: 1.32.0 postcss: 8.5.16 + uglify-js: 3.19.3 - terser-webpack-plugin@5.6.0(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + terser-webpack-plugin@5.6.0(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.46.1 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) optionalDependencies: - '@swc/core': 1.15.3(@swc/helpers@0.5.15) + '@swc/core': 1.15.3 + '@swc/html': 1.15.40 clean-css: 5.3.3 cssnano: 6.1.2(postcss@8.5.16) + csso: 5.0.5 esbuild: 0.28.1 html-minifier-terser: 7.2.0 + lightningcss: 1.32.0 postcss: 8.5.16 - - terser-webpack-plugin@5.6.0(esbuild@0.28.1)(postcss@8.5.16)(webpack@5.107.1(esbuild@0.28.1)(postcss@8.5.16)): - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - jest-worker: 27.5.1 - schema-utils: 4.3.3 - terser: 5.46.1 - webpack: 5.107.1(esbuild@0.28.1)(postcss@8.5.16) - optionalDependencies: - esbuild: 0.28.1 - postcss: 8.5.16 + uglify-js: 3.19.3 terser@5.46.1: dependencies: @@ -29103,19 +29115,19 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - testcontainers@12.0.4: + testcontainers@12.0.4(supports-color@10.2.2): dependencies: '@balena/dockerignore': 1.0.2 '@types/dockerode': 4.0.1 archiver: 7.0.1 async-lock: 1.4.1 byline: 5.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) docker-compose: 1.4.2 - dockerode: 5.0.0 + dockerode: 5.0.0(supports-color@10.2.2) get-port: 5.1.1 proper-lockfile: 4.1.2 - properties-reader: 3.0.1 + properties-reader: 3.0.1(supports-color@10.2.2) ssh-remote-port-forward: 1.0.4 tar-fs: 3.1.2 tmp: 0.2.7 @@ -29232,36 +29244,36 @@ snapshots: trough@2.2.0: {} - trpc-to-mcp@1.3.2(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(better-auth@1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)))(mcp-handler@1.1.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)))(zod@4.4.3): + trpc-to-mcp@1.3.2(20caeb9169922dd2adb62d9d2fa0352f): dependencies: - '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + '@modelcontextprotocol/sdk': 1.29.0(supports-color@10.2.2)(zod@4.4.3) '@trpc/server': 11.18.0(@typescript/typescript6@6.0.2) - better-auth: 1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)) - mcp-handler: 1.1.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)) + better-auth: 1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)) + mcp-handler: 1.1.0(@modelcontextprotocol/sdk@1.26.0(supports-color@10.2.2)(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)) zod: 4.4.3 transitivePeerDependencies: - '@cfworker/json-schema' - supports-color - trpc-to-mcp@1.3.2(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(better-auth@1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)))(mcp-handler@1.1.0(@modelcontextprotocol/sdk@1.26.0(zod@4.4.3))(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)))(zod@4.4.3): + trpc-to-mcp@1.3.2(6bd31c056f397ffcf9e77883340c3ff9): dependencies: - '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + '@modelcontextprotocol/sdk': 1.29.0(supports-color@10.2.2)(zod@4.4.3) '@trpc/server': 11.18.0(@typescript/typescript6@6.0.2) - better-auth: 1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)) - mcp-handler: 1.1.0(@modelcontextprotocol/sdk@1.26.0(zod@4.4.3))(next@16.2.10(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)) + better-auth: 1.6.15(@opentelemetry/api@1.9.0)(better-sqlite3@12.11.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.11.1)(gel@2.0.0(supports-color@10.2.2))(kysely@0.29.2)(mysql2@3.22.6(@types/node@24.13.3))(pg@8.22.0)(sql.js@1.14.1))(mysql2@3.22.6(@types/node@24.13.3))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0))(pg@8.22.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(vitest@4.1.10)(vue@3.5.35(@typescript/typescript6@6.0.2)) + mcp-handler: 1.1.0(@modelcontextprotocol/sdk@1.29.0(supports-color@10.2.2)(zod@4.4.3))(next@16.2.10(@babel/core@7.29.0(supports-color@10.2.2))(@opentelemetry/api@1.9.0)(@playwright/test@1.61.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.101.0)) zod: 4.4.3 transitivePeerDependencies: - '@cfworker/json-schema' - supports-color - trpc-to-openapi@3.3.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(zod-openapi@5.3.0(zod@4.4.3))(zod@4.4.3): + trpc-to-openapi@3.3.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(zod-openapi@5.4.6(zod@4.4.3))(zod@4.4.3): dependencies: '@trpc/server': 11.18.0(@typescript/typescript6@6.0.2) co-body: 6.2.0 h3: 1.15.11 openapi3-ts: 4.4.0 zod: 4.4.3 - zod-openapi: 5.3.0(zod@4.4.3) + zod-openapi: 5.4.6(zod@4.4.3) optionalDependencies: '@rollup/rollup-linux-x64-gnu': 4.6.1 @@ -29277,9 +29289,9 @@ snapshots: optionalDependencies: typescript: '@typescript/typescript6@6.0.2' - tsdav@2.3.0: + tsdav@2.3.0(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) xml-js: 1.6.11 transitivePeerDependencies: - supports-color @@ -29503,14 +29515,14 @@ snapshots: url-join@5.0.0: {} - url-loader@4.1.1(file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)))(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) optionalDependencies: - file-loader: 6.2.0(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + file-loader: 6.2.0(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) use-callback-ref@1.3.3(@types/react@19.2.17)(react@19.2.7): dependencies: @@ -29633,9 +29645,9 @@ snapshots: dependencies: global: 4.4.0 - vite-tsconfig-paths@6.1.1(@typescript/typescript6@6.0.2)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.101.0)(sugarss@5.0.0(postcss@8.5.16))(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)): + vite-tsconfig-paths@6.1.1(@typescript/typescript6@6.0.2)(supports-color@10.2.2)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.101.0)(sugarss@5.0.0(postcss@8.5.16))(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) globrex: 0.1.2 tsconfck: 3.1.3(@typescript/typescript6@6.0.2) vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.101.0)(sugarss@5.0.0(postcss@8.5.16))(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) @@ -29751,7 +29763,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: colorette: 2.0.20 memfs: 4.57.6(tslib@2.8.1) @@ -29760,11 +29772,11 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - tslib - webpack-dev-server@5.2.4(tslib@2.8.1)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + webpack-dev-server@5.2.4(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(tslib@2.8.1)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -29778,24 +29790,24 @@ snapshots: bonjour-service: 1.4.0 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.8.1 + compression: 1.8.1(supports-color@10.2.2) connect-history-api-fallback: 2.0.0 - express: 4.22.2 + express: 4.22.2(supports-color@10.2.2) graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.25) + http-proxy-middleware: 2.0.9(@types/express@4.17.25)(debug@4.4.3(supports-color@10.2.2)) ipaddr.js: 2.3.0 launch-editor: 2.14.1 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 selfsigned: 5.5.0 - serve-index: 1.9.2 + serve-index: 1.9.2(supports-color@10.2.2) sockjs: 0.3.24 - spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + spdy: 4.0.2(supports-color@10.2.2) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) ws: 8.21.0 optionalDependencies: - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) transitivePeerDependencies: - bufferutil - debug @@ -29817,7 +29829,7 @@ snapshots: webpack-sources@3.5.0: {} - webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(@swc/html@1.15.40)(esbuild@0.28.1)(lightningcss@1.32.0)(postcss@8.5.16): + webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3): dependencies: '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 @@ -29839,7 +29851,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.3 - terser-webpack-plugin: 5.6.0(@swc/core@1.15.3(@swc/helpers@0.5.15))(@swc/html@1.15.40)(esbuild@0.28.1)(lightningcss@1.32.0)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) + terser-webpack-plugin: 5.6.0(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)) watchpack: 2.5.1 webpack-sources: 3.5.0 transitivePeerDependencies: @@ -29856,85 +29868,7 @@ snapshots: - postcss - uglify-js - webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16): - dependencies: - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.22.0 - es-module-lexer: 2.1.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - loader-runner: 4.3.2 - mime-db: 1.54.0 - neo-async: 2.6.2 - schema-utils: 4.3.3 - tapable: 2.3.3 - terser-webpack-plugin: 5.6.0(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16)(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)) - watchpack: 2.5.1 - webpack-sources: 3.5.0 - transitivePeerDependencies: - - '@minify-html/node' - - '@swc/core' - - '@swc/css' - - '@swc/html' - - clean-css - - cssnano - - csso - - esbuild - - html-minifier-terser - - lightningcss - - postcss - - uglify-js - - webpack@5.107.1(esbuild@0.28.1)(postcss@8.5.16): - dependencies: - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.22.0 - es-module-lexer: 2.1.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - loader-runner: 4.3.2 - mime-db: 1.54.0 - neo-async: 2.6.2 - schema-utils: 4.3.3 - tapable: 2.3.3 - terser-webpack-plugin: 5.6.0(esbuild@0.28.1)(postcss@8.5.16)(webpack@5.107.1(esbuild@0.28.1)(postcss@8.5.16)) - watchpack: 2.5.1 - webpack-sources: 3.5.0 - transitivePeerDependencies: - - '@minify-html/node' - - '@swc/core' - - '@swc/css' - - '@swc/html' - - clean-css - - cssnano - - csso - - esbuild - - html-minifier-terser - - lightningcss - - postcss - - uglify-js - - webpackbar@7.0.0(@rspack/core@1.7.11(@swc/helpers@0.5.15))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)): + webpackbar@7.0.0(@rspack/core@1.7.11)(webpack@5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3)): dependencies: ansis: 3.17.0 consola: 3.4.2 @@ -29942,7 +29876,7 @@ snapshots: std-env: 3.10.0 optionalDependencies: '@rspack/core': 1.7.11(@swc/helpers@0.5.15) - webpack: 5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(esbuild@0.28.1)(html-minifier-terser@7.2.0)(postcss@8.5.16) + webpack: 5.107.1(@swc/core@1.15.3)(@swc/html@1.15.40)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.16))(csso@5.0.5)(esbuild@0.28.1)(html-minifier-terser@7.2.0)(lightningcss@1.32.0)(postcss@8.5.16)(uglify-js@3.19.3) websocket-driver@0.7.5: dependencies: @@ -29973,6 +29907,8 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + which-command@0.1.0: {} + which@2.0.2: dependencies: isexe: 2.0.0 @@ -30135,6 +30071,8 @@ snapshots: yoctocolors@2.1.1: {} + yoctocolors@2.1.2: {} + zip-stream@6.0.1: dependencies: archiver-utils: 5.0.2 @@ -30146,7 +30084,7 @@ snapshots: '@rvf/set-get': 7.0.1 zod: 4.4.3 - zod-openapi@5.3.0(zod@4.4.3): + zod-openapi@5.4.6(zod@4.4.3): dependencies: zod: 4.4.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 863ecdcf6..915083389 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -37,9 +37,9 @@ catalog: "@octokit/auth-app": ^8.2.0 "@paralleldrive/cuid2": ^3.3.0 "@playwright/test": ^1.61.1 - "@semantic-release/changelog": ^6.0.3 + "@semantic-release/changelog": ^7.0.0 "@semantic-release/commit-analyzer": ^13.0.1 - "@semantic-release/git": ^10.0.1 + "@semantic-release/git": ^11.0.1 "@semantic-release/github": ^12.0.9 "@semantic-release/npm": ^13.1.5 "@semantic-release/release-notes-generator": ^14.1.1 diff --git a/static-data/contributors.json b/static-data/contributors.json index 7669aba97..8e8944ba7 100644 --- a/static-data/contributors.json +++ b/static-data/contributors.json @@ -1 +1 @@ -[{"login":"ajnart","avatar_url":"https://avatars.githubusercontent.com/u/49837342?v=4"},{"login":"manuel-rw","avatar_url":"https://avatars.githubusercontent.com/u/30572287?v=4"},{"login":"Meierschlumpf","avatar_url":"https://avatars.githubusercontent.com/u/63781622?v=4"},{"login":"SeDemal","avatar_url":"https://avatars.githubusercontent.com/u/26098587?v=4"},{"login":"lammersbjorn","avatar_url":"https://avatars.githubusercontent.com/u/71191962?v=4"},{"login":"LarveyOfficial","avatar_url":"https://avatars.githubusercontent.com/u/39219859?v=4"},{"login":"c00ldude1oo","avatar_url":"https://avatars.githubusercontent.com/u/15677803?v=4"},{"login":"InterN0te","avatar_url":"https://avatars.githubusercontent.com/u/10882916?v=4"},{"login":"Aimsucks","avatar_url":"https://avatars.githubusercontent.com/u/1828486?v=4"},{"login":"JannesV","avatar_url":"https://avatars.githubusercontent.com/u/5984244?v=4"},{"login":"MauriceNino","avatar_url":"https://avatars.githubusercontent.com/u/18658092?v=4"},{"login":"hillaliy","avatar_url":"https://avatars.githubusercontent.com/u/950010?v=4"},{"login":"Skeeww","avatar_url":"https://avatars.githubusercontent.com/u/9639992?v=4"},{"login":"RichyHBM","avatar_url":"https://avatars.githubusercontent.com/u/5472275?v=4"},{"login":"Bonfire","avatar_url":"https://avatars.githubusercontent.com/u/5704760?v=4"},{"login":"wieli99","avatar_url":"https://avatars.githubusercontent.com/u/46794825?v=4"},{"login":"ishaanparlikar","avatar_url":"https://avatars.githubusercontent.com/u/43013132?v=4"},{"login":"Zareix","avatar_url":"https://avatars.githubusercontent.com/u/29818713?v=4"},{"login":"tuggan","avatar_url":"https://avatars.githubusercontent.com/u/4325608?v=4"},{"login":"Spillebulle","avatar_url":"https://avatars.githubusercontent.com/u/46653946?v=4"},{"login":"marektancak0106","avatar_url":"https://avatars.githubusercontent.com/u/25422667?v=4"},{"login":"spkesDE","avatar_url":"https://avatars.githubusercontent.com/u/1682314?v=4"},{"login":"j3lte","avatar_url":"https://avatars.githubusercontent.com/u/2557568?v=4"},{"login":"dslatt","avatar_url":"https://avatars.githubusercontent.com/u/5211001?v=4"},{"login":"Malong11-007","avatar_url":"https://avatars.githubusercontent.com/u/40298510?v=4"},{"login":"StefanB7","avatar_url":"https://avatars.githubusercontent.com/u/22056509?v=4"},{"login":"souravghosh01","avatar_url":"https://avatars.githubusercontent.com/u/37548139?v=4"},{"login":"SR3u","avatar_url":"https://avatars.githubusercontent.com/u/2380522?v=4"},{"login":"Rikpat","avatar_url":"https://avatars.githubusercontent.com/u/33869814?v=4"},{"login":"NormanJS","avatar_url":"https://avatars.githubusercontent.com/u/83409549?v=4"},{"login":"No-Maines-Land","avatar_url":"https://avatars.githubusercontent.com/u/20687725?v=4"},{"login":"stark1tty","avatar_url":"https://avatars.githubusercontent.com/u/69326376?v=4"},{"login":"Momcilo42","avatar_url":"https://avatars.githubusercontent.com/u/10118137?v=4"},{"login":"marius-arch","avatar_url":"https://avatars.githubusercontent.com/u/72494359?v=4"},{"login":"Lumilias","avatar_url":"https://avatars.githubusercontent.com/u/10852161?v=4"},{"login":"Havock94","avatar_url":"https://avatars.githubusercontent.com/u/7635248?v=4"},{"login":"Lollyde","avatar_url":"https://avatars.githubusercontent.com/u/11347524?v=4"},{"login":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"beanbag420","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"taos15","avatar_url":"https://avatars.githubusercontent.com/u/122130728?v=4"},{"login":"arghyadipchak","avatar_url":"https://avatars.githubusercontent.com/u/32430374?v=4"},{"login":"AuthorShin","avatar_url":"https://avatars.githubusercontent.com/u/4959043?v=4"},{"login":"benniblot","avatar_url":"https://avatars.githubusercontent.com/u/47495914?v=4"},{"login":"bebsworthy","avatar_url":"https://avatars.githubusercontent.com/u/5266759?v=4"},{"login":"catrielmuller","avatar_url":"https://avatars.githubusercontent.com/u/2272323?v=4"},{"login":"Vysp3r","avatar_url":"https://avatars.githubusercontent.com/u/62019735?v=4"},{"login":"DR-Blogs","avatar_url":"https://avatars.githubusercontent.com/u/96393186?v=4"},{"login":"singular0","avatar_url":"https://avatars.githubusercontent.com/u/1925883?v=4"},{"login":"diogovalentte","avatar_url":"https://avatars.githubusercontent.com/u/49578155?v=4"},{"login":"codezninja","avatar_url":"https://avatars.githubusercontent.com/u/4400773?v=4"},{"login":"fabricionaweb","avatar_url":"https://avatars.githubusercontent.com/u/15933?v=4"},{"login":"nyok1912","avatar_url":"https://avatars.githubusercontent.com/u/32163949?v=4"},{"login":"Hamad3bdulla","avatar_url":"https://avatars.githubusercontent.com/u/5271380?v=4"},{"login":"hskrtich","avatar_url":"https://avatars.githubusercontent.com/u/1214484?v=4"},{"login":"ishults","avatar_url":"https://avatars.githubusercontent.com/u/7275442?v=4"},{"login":"jelliuk","avatar_url":"https://avatars.githubusercontent.com/u/4790959?v=4"},{"login":"Moohan","avatar_url":"https://avatars.githubusercontent.com/u/5982260?v=4"},{"login":"tesar-tech","avatar_url":"https://avatars.githubusercontent.com/u/33880579?v=4"},{"login":"jbruell","avatar_url":"https://avatars.githubusercontent.com/u/31685172?v=4"},{"login":"JasonLeeB06","avatar_url":"https://avatars.githubusercontent.com/u/82266978?v=4"},{"login":"jeffersonraimon","avatar_url":"https://avatars.githubusercontent.com/u/80064475?v=4"},{"login":"jo-chemla","avatar_url":"https://avatars.githubusercontent.com/u/16822841?v=4"},{"login":"joser93","avatar_url":"https://avatars.githubusercontent.com/u/6912089?v=4"},{"login":"justijndepover","avatar_url":"https://avatars.githubusercontent.com/u/9008623?v=4"},{"login":"Aandree5","avatar_url":"https://avatars.githubusercontent.com/u/32734153?v=4"},{"login":"afonsojramos","avatar_url":"https://avatars.githubusercontent.com/u/19473034?v=4"},{"login":"mvanhorn","avatar_url":"https://avatars.githubusercontent.com/u/455140?v=4"},{"login":"Bergasha","avatar_url":"https://avatars.githubusercontent.com/u/25044200?v=4"},{"login":"jackwellerreal","avatar_url":"https://avatars.githubusercontent.com/u/97435840?v=4"},{"login":"junkerderprovinz","avatar_url":"https://avatars.githubusercontent.com/u/133605895?v=4"},{"login":"Copilot","avatar_url":"https://avatars.githubusercontent.com/in/1143301?v=4"},{"login":"Nerdy-Technician","avatar_url":"https://avatars.githubusercontent.com/u/45691205?v=4"},{"login":"SergioChan","avatar_url":"https://avatars.githubusercontent.com/u/10103766?v=4"},{"login":"toineenzo","avatar_url":"https://avatars.githubusercontent.com/u/4921397?v=4"},{"login":"oben01","avatar_url":"https://avatars.githubusercontent.com/u/22369027?v=4"},{"login":"rezstje","avatar_url":"https://avatars.githubusercontent.com/u/45420315?v=4"},{"login":"darbyjack","avatar_url":"https://avatars.githubusercontent.com/u/21014720?v=4"},{"login":"castielwaverly","avatar_url":"https://avatars.githubusercontent.com/u/137005689?v=4"},{"login":"xoxyuxu","avatar_url":"https://avatars.githubusercontent.com/u/3543416?v=4"},{"login":"tvervest","avatar_url":"https://avatars.githubusercontent.com/u/5818471?v=4"},{"login":"StrandedTurtle","avatar_url":"https://avatars.githubusercontent.com/u/132835255?v=4"},{"login":"MaienM","avatar_url":"https://avatars.githubusercontent.com/u/583129?v=4"},{"login":"kylegrieder","avatar_url":"https://avatars.githubusercontent.com/u/25424229?v=4"},{"login":"mrjoshuap","avatar_url":"https://avatars.githubusercontent.com/u/5722442?v=4"},{"login":"HeapReaper","avatar_url":"https://avatars.githubusercontent.com/u/31496522?v=4"},{"login":"lopsch","avatar_url":"https://avatars.githubusercontent.com/u/4073114?v=4"},{"login":"Gilmoursa","avatar_url":"https://avatars.githubusercontent.com/u/10321421?v=4"},{"login":"saschabuehrle","avatar_url":"https://avatars.githubusercontent.com/u/47737812?v=4"},{"login":"Rhiz3K","avatar_url":"https://avatars.githubusercontent.com/u/33246262?v=4"},{"login":"ohmzi","avatar_url":"https://avatars.githubusercontent.com/u/6551272?v=4"},{"login":"noahcroghan","avatar_url":"https://avatars.githubusercontent.com/u/27422774?v=4"},{"login":"NikeLaosClericus","avatar_url":"https://avatars.githubusercontent.com/u/39810627?v=4"},{"login":"NicolasNewman","avatar_url":"https://avatars.githubusercontent.com/u/16135852?v=4"},{"login":"Euclid0192","avatar_url":"https://avatars.githubusercontent.com/u/114103526?v=4"},{"login":"itzTheMeow","avatar_url":"https://avatars.githubusercontent.com/u/50887230?v=4"},{"login":"mairas","avatar_url":"https://avatars.githubusercontent.com/u/407010?v=4"},{"login":"Bricklou","avatar_url":"https://avatars.githubusercontent.com/u/15181236?v=4"},{"login":"AartSchinkel","avatar_url":"https://avatars.githubusercontent.com/u/189675191?v=4"},{"login":"CrazyWolf13","avatar_url":"https://avatars.githubusercontent.com/u/96661824?v=4"},{"login":"VIVAAN-DHAWAN","avatar_url":"https://avatars.githubusercontent.com/u/150339722?v=4"},{"login":"euduardo","avatar_url":"https://avatars.githubusercontent.com/u/22860571?v=4"},{"login":"generalmat82","avatar_url":"https://avatars.githubusercontent.com/u/110256073?v=4"},{"login":"lthomsen","avatar_url":"https://avatars.githubusercontent.com/u/28560325?v=4"},{"login":"pitschi","avatar_url":"https://avatars.githubusercontent.com/u/6841565?v=4"},{"login":"sharpsalat","avatar_url":"https://avatars.githubusercontent.com/u/15666932?v=4"},{"login":"tech62","avatar_url":"https://avatars.githubusercontent.com/u/16237642?v=4"},{"login":"m0s4ik","avatar_url":"https://avatars.githubusercontent.com/u/26578395?v=4"},{"login":"xanyl","avatar_url":"https://avatars.githubusercontent.com/u/59596981?v=4"},{"login":"arturict","avatar_url":"https://avatars.githubusercontent.com/u/145776561?v=4"},{"login":"ashtonbatty","avatar_url":"https://avatars.githubusercontent.com/u/230635?v=4"},{"login":"Oupsman","avatar_url":"https://avatars.githubusercontent.com/u/11260343?v=4"},{"login":"cethien","avatar_url":"https://avatars.githubusercontent.com/u/60463918?v=4"},{"login":"DZ945brH","avatar_url":"https://avatars.githubusercontent.com/u/42635243?v=4"},{"login":"dgshue","avatar_url":"https://avatars.githubusercontent.com/u/12952156?v=4"},{"login":"d-lindahl","avatar_url":"https://avatars.githubusercontent.com/u/690410?v=4"},{"login":"KartulUdus","avatar_url":"https://avatars.githubusercontent.com/u/23346150?v=4"},{"login":"ieugen","avatar_url":"https://avatars.githubusercontent.com/u/1050920?v=4"},{"login":"Ayush7614","avatar_url":"https://avatars.githubusercontent.com/u/67006255?v=4"},{"login":"faugusto-oliveira","avatar_url":"https://avatars.githubusercontent.com/u/37384074?v=4"},{"login":"frankvHoof93","avatar_url":"https://avatars.githubusercontent.com/u/7346516?v=4"},{"login":"febrile42","avatar_url":"https://avatars.githubusercontent.com/u/14597122?v=4"},{"login":"Kaotic3","avatar_url":"https://avatars.githubusercontent.com/u/80522225?v=4"},{"login":"KelianB","avatar_url":"https://avatars.githubusercontent.com/u/11216155?v=4"},{"login":"hotrungnhan","avatar_url":"https://avatars.githubusercontent.com/u/40029631?v=4"},{"login":"leandroscardua","avatar_url":"https://avatars.githubusercontent.com/u/24698541?v=4"},{"login":"Lok3sh-kumar","avatar_url":"https://avatars.githubusercontent.com/u/110459168?v=4"}] \ No newline at end of file +[{"login":"ajnart","avatar_url":"https://avatars.githubusercontent.com/u/49837342?v=4"},{"login":"manuel-rw","avatar_url":"https://avatars.githubusercontent.com/u/30572287?v=4"},{"login":"Meierschlumpf","avatar_url":"https://avatars.githubusercontent.com/u/63781622?v=4"},{"login":"SeDemal","avatar_url":"https://avatars.githubusercontent.com/u/26098587?v=4"},{"login":"lammersbjorn","avatar_url":"https://avatars.githubusercontent.com/u/71191962?v=4"},{"login":"LarveyOfficial","avatar_url":"https://avatars.githubusercontent.com/u/39219859?v=4"},{"login":"c00ldude1oo","avatar_url":"https://avatars.githubusercontent.com/u/15677803?v=4"},{"login":"InterN0te","avatar_url":"https://avatars.githubusercontent.com/u/10882916?v=4"},{"login":"Aimsucks","avatar_url":"https://avatars.githubusercontent.com/u/1828486?v=4"},{"login":"JannesV","avatar_url":"https://avatars.githubusercontent.com/u/5984244?v=4"},{"login":"MauriceNino","avatar_url":"https://avatars.githubusercontent.com/u/18658092?v=4"},{"login":"hillaliy","avatar_url":"https://avatars.githubusercontent.com/u/950010?v=4"},{"login":"Skeeww","avatar_url":"https://avatars.githubusercontent.com/u/9639992?v=4"},{"login":"RichyHBM","avatar_url":"https://avatars.githubusercontent.com/u/5472275?v=4"},{"login":"Bonfire","avatar_url":"https://avatars.githubusercontent.com/u/5704760?v=4"},{"login":"wieli99","avatar_url":"https://avatars.githubusercontent.com/u/46794825?v=4"},{"login":"ishaanparlikar","avatar_url":"https://avatars.githubusercontent.com/u/43013132?v=4"},{"login":"Zareix","avatar_url":"https://avatars.githubusercontent.com/u/29818713?v=4"},{"login":"tuggan","avatar_url":"https://avatars.githubusercontent.com/u/4325608?v=4"},{"login":"Spillebulle","avatar_url":"https://avatars.githubusercontent.com/u/46653946?v=4"},{"login":"marektancak0106","avatar_url":"https://avatars.githubusercontent.com/u/25422667?v=4"},{"login":"spkesDE","avatar_url":"https://avatars.githubusercontent.com/u/1682314?v=4"},{"login":"j3lte","avatar_url":"https://avatars.githubusercontent.com/u/2557568?v=4"},{"login":"dslatt","avatar_url":"https://avatars.githubusercontent.com/u/5211001?v=4"},{"login":"Malong11-007","avatar_url":"https://avatars.githubusercontent.com/u/40298510?v=4"},{"login":"StefanB7","avatar_url":"https://avatars.githubusercontent.com/u/22056509?v=4"},{"login":"souravghosh01","avatar_url":"https://avatars.githubusercontent.com/u/37548139?v=4"},{"login":"SR3u","avatar_url":"https://avatars.githubusercontent.com/u/2380522?v=4"},{"login":"Rikpat","avatar_url":"https://avatars.githubusercontent.com/u/33869814?v=4"},{"login":"NormanJS","avatar_url":"https://avatars.githubusercontent.com/u/83409549?v=4"},{"login":"No-Maines-Land","avatar_url":"https://avatars.githubusercontent.com/u/20687725?v=4"},{"login":"stark1tty","avatar_url":"https://avatars.githubusercontent.com/u/69326376?v=4"},{"login":"Momcilo42","avatar_url":"https://avatars.githubusercontent.com/u/10118137?v=4"},{"login":"marius-arch","avatar_url":"https://avatars.githubusercontent.com/u/72494359?v=4"},{"login":"Lumilias","avatar_url":"https://avatars.githubusercontent.com/u/10852161?v=4"},{"login":"Havock94","avatar_url":"https://avatars.githubusercontent.com/u/7635248?v=4"},{"login":"Lollyde","avatar_url":"https://avatars.githubusercontent.com/u/11347524?v=4"},{"login":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"beanbag420","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"taos15","avatar_url":"https://avatars.githubusercontent.com/u/122130728?v=4"},{"login":"arghyadipchak","avatar_url":"https://avatars.githubusercontent.com/u/32430374?v=4"},{"login":"AuthorShin","avatar_url":"https://avatars.githubusercontent.com/u/4959043?v=4"},{"login":"benniblot","avatar_url":"https://avatars.githubusercontent.com/u/47495914?v=4"},{"login":"bebsworthy","avatar_url":"https://avatars.githubusercontent.com/u/5266759?v=4"},{"login":"catrielmuller","avatar_url":"https://avatars.githubusercontent.com/u/2272323?v=4"},{"login":"Vysp3r","avatar_url":"https://avatars.githubusercontent.com/u/62019735?v=4"},{"login":"DR-Blogs","avatar_url":"https://avatars.githubusercontent.com/u/96393186?v=4"},{"login":"singular0","avatar_url":"https://avatars.githubusercontent.com/u/1925883?v=4"},{"login":"diogovalentte","avatar_url":"https://avatars.githubusercontent.com/u/49578155?v=4"},{"login":"codezninja","avatar_url":"https://avatars.githubusercontent.com/u/4400773?v=4"},{"login":"fabricionaweb","avatar_url":"https://avatars.githubusercontent.com/u/15933?v=4"},{"login":"nyok1912","avatar_url":"https://avatars.githubusercontent.com/u/32163949?v=4"},{"login":"Hamad3bdulla","avatar_url":"https://avatars.githubusercontent.com/u/5271380?v=4"},{"login":"hskrtich","avatar_url":"https://avatars.githubusercontent.com/u/1214484?v=4"},{"login":"ishults","avatar_url":"https://avatars.githubusercontent.com/u/7275442?v=4"},{"login":"jelliuk","avatar_url":"https://avatars.githubusercontent.com/u/4790959?v=4"},{"login":"Moohan","avatar_url":"https://avatars.githubusercontent.com/u/5982260?v=4"},{"login":"tesar-tech","avatar_url":"https://avatars.githubusercontent.com/u/33880579?v=4"},{"login":"jbruell","avatar_url":"https://avatars.githubusercontent.com/u/31685172?v=4"},{"login":"JasonLeeB06","avatar_url":"https://avatars.githubusercontent.com/u/82266978?v=4"},{"login":"jeffersonraimon","avatar_url":"https://avatars.githubusercontent.com/u/80064475?v=4"},{"login":"jo-chemla","avatar_url":"https://avatars.githubusercontent.com/u/16822841?v=4"},{"login":"joser93","avatar_url":"https://avatars.githubusercontent.com/u/6912089?v=4"},{"login":"justijndepover","avatar_url":"https://avatars.githubusercontent.com/u/9008623?v=4"},{"login":"Aandree5","avatar_url":"https://avatars.githubusercontent.com/u/32734153?v=4"},{"login":"afonsojramos","avatar_url":"https://avatars.githubusercontent.com/u/19473034?v=4"},{"login":"mvanhorn","avatar_url":"https://avatars.githubusercontent.com/u/455140?v=4"},{"login":"Bergasha","avatar_url":"https://avatars.githubusercontent.com/u/25044200?v=4"},{"login":"jackwellerreal","avatar_url":"https://avatars.githubusercontent.com/u/97435840?v=4"},{"login":"junkerderprovinz","avatar_url":"https://avatars.githubusercontent.com/u/133605895?v=4"},{"login":"Copilot","avatar_url":"https://avatars.githubusercontent.com/in/1143301?v=4"},{"login":"Nerdy-Technician","avatar_url":"https://avatars.githubusercontent.com/u/45691205?v=4"},{"login":"SergioChan","avatar_url":"https://avatars.githubusercontent.com/u/10103766?v=4"},{"login":"toineenzo","avatar_url":"https://avatars.githubusercontent.com/u/4921397?v=4"},{"login":"oben01","avatar_url":"https://avatars.githubusercontent.com/u/22369027?v=4"},{"login":"rezstje","avatar_url":"https://avatars.githubusercontent.com/u/45420315?v=4"},{"login":"darbyjack","avatar_url":"https://avatars.githubusercontent.com/u/21014720?v=4"},{"login":"castielwaverly","avatar_url":"https://avatars.githubusercontent.com/u/137005689?v=4"},{"login":"xoxyuxu","avatar_url":"https://avatars.githubusercontent.com/u/3543416?v=4"},{"login":"tvervest","avatar_url":"https://avatars.githubusercontent.com/u/5818471?v=4"},{"login":"StrandedTurtle","avatar_url":"https://avatars.githubusercontent.com/u/132835255?v=4"},{"login":"MaienM","avatar_url":"https://avatars.githubusercontent.com/u/583129?v=4"},{"login":"kylegrieder","avatar_url":"https://avatars.githubusercontent.com/u/25424229?v=4"},{"login":"mrjoshuap","avatar_url":"https://avatars.githubusercontent.com/u/5722442?v=4"},{"login":"HeapReaper","avatar_url":"https://avatars.githubusercontent.com/u/31496522?v=4"},{"login":"lopsch","avatar_url":"https://avatars.githubusercontent.com/u/4073114?v=4"},{"login":"Gilmoursa","avatar_url":"https://avatars.githubusercontent.com/u/10321421?v=4"},{"login":"saschabuehrle","avatar_url":"https://avatars.githubusercontent.com/u/47737812?v=4"},{"login":"Rhiz3K","avatar_url":"https://avatars.githubusercontent.com/u/33246262?v=4"},{"login":"ohmzi","avatar_url":"https://avatars.githubusercontent.com/u/6551272?v=4"},{"login":"noahcroghan","avatar_url":"https://avatars.githubusercontent.com/u/27422774?v=4"},{"login":"NikeLaosClericus","avatar_url":"https://avatars.githubusercontent.com/u/39810627?v=4"},{"login":"NicolasNewman","avatar_url":"https://avatars.githubusercontent.com/u/16135852?v=4"},{"login":"Euclid0192","avatar_url":"https://avatars.githubusercontent.com/u/114103526?v=4"},{"login":"itzTheMeow","avatar_url":"https://avatars.githubusercontent.com/u/50887230?v=4"},{"login":"mairas","avatar_url":"https://avatars.githubusercontent.com/u/407010?v=4"},{"login":"Bricklou","avatar_url":"https://avatars.githubusercontent.com/u/15181236?v=4"},{"login":"AartSchinkel","avatar_url":"https://avatars.githubusercontent.com/u/189675191?v=4"},{"login":"angusmaul","avatar_url":"https://avatars.githubusercontent.com/u/1232390?v=4"},{"login":"CrazyWolf13","avatar_url":"https://avatars.githubusercontent.com/u/96661824?v=4"},{"login":"VIVAAN-DHAWAN","avatar_url":"https://avatars.githubusercontent.com/u/150339722?v=4"},{"login":"euduardo","avatar_url":"https://avatars.githubusercontent.com/u/22860571?v=4"},{"login":"generalmat82","avatar_url":"https://avatars.githubusercontent.com/u/110256073?v=4"},{"login":"lthomsen","avatar_url":"https://avatars.githubusercontent.com/u/28560325?v=4"},{"login":"pitschi","avatar_url":"https://avatars.githubusercontent.com/u/6841565?v=4"},{"login":"sharpsalat","avatar_url":"https://avatars.githubusercontent.com/u/15666932?v=4"},{"login":"tech62","avatar_url":"https://avatars.githubusercontent.com/u/16237642?v=4"},{"login":"m0s4ik","avatar_url":"https://avatars.githubusercontent.com/u/26578395?v=4"},{"login":"xanyl","avatar_url":"https://avatars.githubusercontent.com/u/59596981?v=4"},{"login":"arturict","avatar_url":"https://avatars.githubusercontent.com/u/145776561?v=4"},{"login":"ashtonbatty","avatar_url":"https://avatars.githubusercontent.com/u/230635?v=4"},{"login":"Oupsman","avatar_url":"https://avatars.githubusercontent.com/u/11260343?v=4"},{"login":"cethien","avatar_url":"https://avatars.githubusercontent.com/u/60463918?v=4"},{"login":"Clarkar00","avatar_url":"https://avatars.githubusercontent.com/u/133609856?v=4"},{"login":"DZ945brH","avatar_url":"https://avatars.githubusercontent.com/u/42635243?v=4"},{"login":"dgshue","avatar_url":"https://avatars.githubusercontent.com/u/12952156?v=4"},{"login":"d-lindahl","avatar_url":"https://avatars.githubusercontent.com/u/690410?v=4"},{"login":"KartulUdus","avatar_url":"https://avatars.githubusercontent.com/u/23346150?v=4"},{"login":"ieugen","avatar_url":"https://avatars.githubusercontent.com/u/1050920?v=4"},{"login":"Ayush7614","avatar_url":"https://avatars.githubusercontent.com/u/67006255?v=4"},{"login":"faugusto-oliveira","avatar_url":"https://avatars.githubusercontent.com/u/37384074?v=4"},{"login":"frankvHoof93","avatar_url":"https://avatars.githubusercontent.com/u/7346516?v=4"},{"login":"febrile42","avatar_url":"https://avatars.githubusercontent.com/u/14597122?v=4"},{"login":"Kaotic3","avatar_url":"https://avatars.githubusercontent.com/u/80522225?v=4"},{"login":"KelianB","avatar_url":"https://avatars.githubusercontent.com/u/11216155?v=4"},{"login":"hotrungnhan","avatar_url":"https://avatars.githubusercontent.com/u/40029631?v=4"},{"login":"leandroscardua","avatar_url":"https://avatars.githubusercontent.com/u/24698541?v=4"},{"login":"Lok3sh-kumar","avatar_url":"https://avatars.githubusercontent.com/u/110459168?v=4"}] \ No newline at end of file diff --git a/static-data/opencollective-contributors.json b/static-data/opencollective-contributors.json index ae53fb148..54aeb15bc 100644 --- a/static-data/opencollective-contributors.json +++ b/static-data/opencollective-contributors.json @@ -1 +1 @@ -[{"id":"zaxon793-jy8gpl0v-d89pbrkd-emwl5v04","name":"Mike","slug":"guest-5da646e8","imageUrl":"https://images.opencollective.com/guest-5da646e8/avatar.png"},{"id":"ywz9j4av-god8pgwg-db36mr35-nxklb0e7","name":"Guest","slug":"guest-554ec68f","imageUrl":"https://images.opencollective.com/guest-554ec68f/avatar.png"},{"id":"mlo94zn7-x08dpo09-xlxpewga-3vjbrky5","name":"Robert Hermann","slug":"robert-hermann","imageUrl":"https://images.opencollective.com/robert-hermann/avatar.png"},{"id":"zaxon793-jy8gpl0n-8r3pbrkd-emwl5v04","name":"Sebastian Raubuch","slug":"sebastian-raubuch","imageUrl":"https://images.opencollective.com/sebastian-raubuch/avatar.png"},{"id":"nmlo94zn-7x08dpod-ykm6ewga-3vjbrky5","name":"Didier LUTHI","slug":"didier-luthi","imageUrl":"https://images.opencollective.com/didier-luthi/avatar.png"},{"id":"vedj9wro-z3a56dgk-z3z67blg-8x4m0ykn","name":"Guest","slug":"guest-b1459a68","imageUrl":"https://images.opencollective.com/guest-b1459a68/avatar.png"},{"id":"gm9bnk80-437xqry4-8vepvzeo-ljdayw5r","name":"Mohister","slug":"mohister","imageUrl":"https://images.opencollective.com/mohister/1d8a592/avatar.png"},{"id":"vrgbk357-l4x96e70-m0apomew-a0jdyzn8","name":"sidens","slug":"sidens","imageUrl":"https://images.opencollective.com/sidens/avatar.png"},{"id":"mlo94zn7-x08dpo0d-l7epewga-3vjbrky5","name":"Chris","slug":"guest-937065bb","imageUrl":"https://images.opencollective.com/guest-937065bb/avatar.png"},{"id":"k9mbw7y4-8r3zq3ol-7zlq0ej5-lavnodgx","name":"Nick W","slug":"guest-7501840a","imageUrl":"https://images.opencollective.com/guest-7501840a/avatar.png"},{"id":"e0adkjrv-8xwm69o8-5al67z5n-4l93bgoy","name":"Jeppedy","slug":"guest-ab78e46a","imageUrl":"https://images.opencollective.com/guest-ab78e46a/avatar.png"},{"id":"a47byg9n-xozdp8xo-jgm6mjlv-03rek5w8","name":"naru","slug":"guest-02fd264a","imageUrl":"https://images.opencollective.com/guest-02fd264a/avatar.png"},{"id":"3k0exgzn-m8yj64g3-ll865wao-9r7b4dlv","name":"Jared Hocutt","slug":"jared-hocutt","imageUrl":"https://images.opencollective.com/jared-hocutt/avatar.png"},{"id":"eng0kzdy-vor4pz8l-exopbma8-37xlw95j","name":"Incognito","slug":"user-e63f4a5b","imageUrl":"https://images.opencollective.com/user-e63f4a5b/avatar.png"},{"id":"8k03reyd-5agmq50v-8vyplbwo-z7j4nxv9","name":"dazi","slug":"guest-11663a46","imageUrl":"https://images.opencollective.com/guest-11663a46/avatar.png"},{"id":"vedj9wro-z3a56dgd-zwl67blg-8x4m0ykn","name":"ZoopaMario","slug":"zoopamario","imageUrl":"https://images.opencollective.com/zoopamario/bea900d/avatar.png"},{"id":"a47byg9n-xozdp8xe-xmb6mjlv-03rek5w8","name":"FlamebergUA","slug":"guest-a59fd500","imageUrl":"https://images.opencollective.com/guest-a59fd500/avatar.png"},{"id":"8k03reyd-5agmq50y-kzoplbwo-z7j4nxv9","name":"StLCards","slug":"guest-e1de33dc","imageUrl":"https://images.opencollective.com/guest-e1de33dc/avatar.png"},{"id":"ejoxl3az-45w9pa54-dk46y870-mgkbrvdn","name":"Varadha","slug":"guest-6f68eed9","imageUrl":"https://images.opencollective.com/guest-6f68eed9/avatar.png"},{"id":"jrkx5lmn-v904qjl0-3oz68bwa-7zdygoe3","name":"Guest","slug":"guest-6da419b5","imageUrl":"https://images.opencollective.com/guest-6da419b5/avatar.png"},{"id":"mywxoz34-09rl6k3z-lmlqvenb-dj7gk85a","name":"Guest","slug":"guest-122d7e0a","imageUrl":"https://images.opencollective.com/guest-122d7e0a/avatar.png"},{"id":"3z8arxve-ymko60vm-3eaqgl5n-bj9w704d","name":"Ricardo","slug":"ricardo34","imageUrl":"https://images.opencollective.com/ricardo34/avatar.png"},{"id":"e0adkjrv-8xwm69or-reo67z5n-4l93bgoy","name":"GoM","slug":"guest-3944feab","imageUrl":"https://images.opencollective.com/guest-3944feab/avatar.png"},{"id":"gm9bnk80-437xqrnr-r5o6vzeo-ljdayw5r","name":"Brent Maxwell","slug":"brentmaxwell","imageUrl":"https://images.opencollective.com/brentmaxwell/avatar.png"},{"id":"gnxdwzj3-le5mpwzd-ll0py8rv-bko04a97","name":"Eric G","slug":"guest-478270f1","imageUrl":"https://images.opencollective.com/guest-478270f1/avatar.png"},{"id":"v349mrwg-z75lpyjo-ez8pa08d-jeybknox","name":"ninja","slug":"guest-0bb6ba36","imageUrl":"https://images.opencollective.com/guest-0bb6ba36/avatar.png"},{"id":"ywz9j4av-god8pgw0-53y6mr35-nxklb0e7","name":"s11","slug":"guest-6e9a2588","imageUrl":"https://images.opencollective.com/guest-6e9a2588/avatar.png"},{"id":"mlo94zn7-x08dpo30-v73pewga-3vjbrky5","name":"Incognito","slug":"user-cbad11af","imageUrl":"https://images.opencollective.com/user-cbad11af/avatar.png"},{"id":"v349mrwg-z75lpy7l-yzgpa08d-jeybknox","name":"Ronald Simmons","slug":"ronald-simmons","imageUrl":"https://images.opencollective.com/ronald-simmons/avatar.png"},{"id":"7ywz9j4a-vgod8pgl-me9qmr35-nxklb0e7","name":"Joel","slug":"guest-3376ab02","imageUrl":"https://images.opencollective.com/guest-3376ab02/avatar.png"},{"id":"v349mrwg-z75lpyjw-kxzpa08d-jeybknox","name":"Gokay Yamankurt","slug":"gokay-yamankurt","imageUrl":"https://images.opencollective.com/gokay-yamankurt/avatar.png"},{"id":"v349mrwg-z75lpyjv-59rpa08d-jeybknox","name":"Rhiz3K","slug":"rhiz3k","imageUrl":"https://images.opencollective.com/rhiz3k/7287acd/avatar.png"},{"id":"8k03reyd-5agmq5x7-77gplbwo-z7j4nxv9","name":"vukie","slug":"guest-40aabe13","imageUrl":"https://images.opencollective.com/guest-40aabe13/avatar.png"},{"id":"a47byg9n-xozdp84a-rmvqmjlv-03rek5w8","name":"Guest","slug":"guest-2fe979fa","imageUrl":"https://images.opencollective.com/guest-2fe979fa/avatar.png"},{"id":"rxg0j35l-zkwm6vgm-k3x6voe9-8n47daby","name":"AngryPig","slug":"guest-b9e8a062","imageUrl":"https://images.opencollective.com/guest-b9e8a062/avatar.png"},{"id":"acc_00XiGzC0V5uzYIL5imKK8","name":"Christopher Jones","slug":"christopher-jones-aae1b68a","imageUrl":"https://images.opencollective.com/christopher-jones-aae1b68a/avatar.png"}] \ No newline at end of file +[{"id":"zaxon793-jy8gpl0v-d89pbrkd-emwl5v04","name":"Mike","slug":"guest-5da646e8","imageUrl":"https://images.opencollective.com/guest-5da646e8/avatar.png"},{"id":"ywz9j4av-god8pgwg-db36mr35-nxklb0e7","name":"Guest","slug":"guest-554ec68f","imageUrl":"https://images.opencollective.com/guest-554ec68f/avatar.png"},{"id":"mlo94zn7-x08dpo09-xlxpewga-3vjbrky5","name":"Robert Hermann","slug":"robert-hermann","imageUrl":"https://images.opencollective.com/robert-hermann/avatar.png"},{"id":"zaxon793-jy8gpl0n-8r3pbrkd-emwl5v04","name":"Sebastian Raubuch","slug":"sebastian-raubuch","imageUrl":"https://images.opencollective.com/sebastian-raubuch/avatar.png"},{"id":"nmlo94zn-7x08dpod-ykm6ewga-3vjbrky5","name":"Didier LUTHI","slug":"didier-luthi","imageUrl":"https://images.opencollective.com/didier-luthi/avatar.png"},{"id":"vedj9wro-z3a56dgk-z3z67blg-8x4m0ykn","name":"Guest","slug":"guest-b1459a68","imageUrl":"https://images.opencollective.com/guest-b1459a68/avatar.png"},{"id":"gm9bnk80-437xqry4-8vepvzeo-ljdayw5r","name":"Mohister","slug":"mohister","imageUrl":"https://images.opencollective.com/mohister/1d8a592/avatar.png"},{"id":"vrgbk357-l4x96e70-m0apomew-a0jdyzn8","name":"sidens","slug":"sidens","imageUrl":"https://images.opencollective.com/sidens/avatar.png"},{"id":"mlo94zn7-x08dpo0d-l7epewga-3vjbrky5","name":"Chris","slug":"guest-937065bb","imageUrl":"https://images.opencollective.com/guest-937065bb/avatar.png"},{"id":"k9mbw7y4-8r3zq3ol-7zlq0ej5-lavnodgx","name":"Nick W","slug":"guest-7501840a","imageUrl":"https://images.opencollective.com/guest-7501840a/avatar.png"},{"id":"e0adkjrv-8xwm69o8-5al67z5n-4l93bgoy","name":"Jeppedy","slug":"guest-ab78e46a","imageUrl":"https://images.opencollective.com/guest-ab78e46a/avatar.png"},{"id":"a47byg9n-xozdp8xo-jgm6mjlv-03rek5w8","name":"naru","slug":"guest-02fd264a","imageUrl":"https://images.opencollective.com/guest-02fd264a/avatar.png"},{"id":"3k0exgzn-m8yj64g3-ll865wao-9r7b4dlv","name":"Jared Hocutt","slug":"jared-hocutt","imageUrl":"https://images.opencollective.com/jared-hocutt/avatar.png"},{"id":"eng0kzdy-vor4pz8l-exopbma8-37xlw95j","name":"Incognito","slug":"user-e63f4a5b","imageUrl":"https://images.opencollective.com/user-e63f4a5b/avatar.png"},{"id":"8k03reyd-5agmq50v-8vyplbwo-z7j4nxv9","name":"dazi","slug":"guest-11663a46","imageUrl":"https://images.opencollective.com/guest-11663a46/avatar.png"},{"id":"vedj9wro-z3a56dgd-zwl67blg-8x4m0ykn","name":"ZoopaMario","slug":"zoopamario","imageUrl":"https://images.opencollective.com/zoopamario/bea900d/avatar.png"},{"id":"a47byg9n-xozdp8xe-xmb6mjlv-03rek5w8","name":"FlamebergUA","slug":"guest-a59fd500","imageUrl":"https://images.opencollective.com/guest-a59fd500/avatar.png"},{"id":"8k03reyd-5agmq50y-kzoplbwo-z7j4nxv9","name":"StLCards","slug":"guest-e1de33dc","imageUrl":"https://images.opencollective.com/guest-e1de33dc/avatar.png"},{"id":"ejoxl3az-45w9pa54-dk46y870-mgkbrvdn","name":"Varadha","slug":"guest-6f68eed9","imageUrl":"https://images.opencollective.com/guest-6f68eed9/avatar.png"},{"id":"jrkx5lmn-v904qjl0-3oz68bwa-7zdygoe3","name":"Guest","slug":"guest-6da419b5","imageUrl":"https://images.opencollective.com/guest-6da419b5/avatar.png"},{"id":"mywxoz34-09rl6k3z-lmlqvenb-dj7gk85a","name":"Guest","slug":"guest-122d7e0a","imageUrl":"https://images.opencollective.com/guest-122d7e0a/avatar.png"},{"id":"3z8arxve-ymko60vm-3eaqgl5n-bj9w704d","name":"Ricardo","slug":"ricardo34","imageUrl":"https://images.opencollective.com/ricardo34/avatar.png"},{"id":"e0adkjrv-8xwm69or-reo67z5n-4l93bgoy","name":"GoM","slug":"guest-3944feab","imageUrl":"https://images.opencollective.com/guest-3944feab/avatar.png"},{"id":"gm9bnk80-437xqrnr-r5o6vzeo-ljdayw5r","name":"Brent Maxwell","slug":"brentmaxwell","imageUrl":"https://images.opencollective.com/brentmaxwell/avatar.png"},{"id":"gnxdwzj3-le5mpwzd-ll0py8rv-bko04a97","name":"Eric G","slug":"guest-478270f1","imageUrl":"https://images.opencollective.com/guest-478270f1/avatar.png"},{"id":"v349mrwg-z75lpyjo-ez8pa08d-jeybknox","name":"ninja","slug":"guest-0bb6ba36","imageUrl":"https://images.opencollective.com/guest-0bb6ba36/avatar.png"},{"id":"ywz9j4av-god8pgw0-53y6mr35-nxklb0e7","name":"s11","slug":"guest-6e9a2588","imageUrl":"https://images.opencollective.com/guest-6e9a2588/avatar.png"},{"id":"mlo94zn7-x08dpo30-v73pewga-3vjbrky5","name":"Incognito","slug":"user-cbad11af","imageUrl":"https://images.opencollective.com/user-cbad11af/avatar.png"},{"id":"v349mrwg-z75lpy7l-yzgpa08d-jeybknox","name":"Ronald Simmons","slug":"ronald-simmons","imageUrl":"https://images.opencollective.com/ronald-simmons/avatar.png"},{"id":"7ywz9j4a-vgod8pgl-me9qmr35-nxklb0e7","name":"Joel","slug":"guest-3376ab02","imageUrl":"https://images.opencollective.com/guest-3376ab02/avatar.png"},{"id":"v349mrwg-z75lpyjw-kxzpa08d-jeybknox","name":"Gokay Yamankurt","slug":"gokay-yamankurt","imageUrl":"https://images.opencollective.com/gokay-yamankurt/avatar.png"},{"id":"v349mrwg-z75lpyjv-59rpa08d-jeybknox","name":"Rhiz3K","slug":"rhiz3k","imageUrl":"https://images.opencollective.com/rhiz3k/7287acd/avatar.png"},{"id":"8k03reyd-5agmq5x7-77gplbwo-z7j4nxv9","name":"vukie","slug":"guest-40aabe13","imageUrl":"https://images.opencollective.com/guest-40aabe13/avatar.png"},{"id":"a47byg9n-xozdp84a-rmvqmjlv-03rek5w8","name":"Guest","slug":"guest-2fe979fa","imageUrl":"https://images.opencollective.com/guest-2fe979fa/avatar.png"},{"id":"rxg0j35l-zkwm6vgm-k3x6voe9-8n47daby","name":"AngryPig","slug":"guest-b9e8a062","imageUrl":"https://images.opencollective.com/guest-b9e8a062/avatar.png"},{"id":"acc_00XiGzC0V5uzYIL5imKK8","name":"Christopher Jones","slug":"christopher-jones-aae1b68a","imageUrl":"https://images.opencollective.com/christopher-jones-aae1b68a/avatar.png"},{"id":"acc_Usap6nzTGh8BCPg0V6lM7","name":"zzoomless7","slug":"guest-a4dec157","imageUrl":"https://images.opencollective.com/guest-a4dec157/avatar.png"}] \ No newline at end of file diff --git a/static-data/translators.json b/static-data/translators.json index c33ef9fad..ca0462ceb 100644 --- a/static-data/translators.json +++ b/static-data/translators.json @@ -1 +1 @@ -[{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/aaa1f083e04c572f953fde4563171e4a.jpeg"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14861042/medium/2d5c4e62613f03082f3e645fa92efd59.jpeg"},{"username":"djismgaming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14934947/medium/f5a8570713c34ab0f7d5405d105e2a9a.jpeg"},{"username":"f1refa11","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14949159/medium/fd2ae63b8eb4462200ba96abf943c1b9.png"},{"username":"jeffersonraimon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057621/medium/6dff469563860e2618bc9d45646d0ab4.png"},{"username":"giop98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057987/medium/b8a4825d3fc39fc662f35ee258db4b2d.jpeg"},{"username":"tomislav.kraljevic","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15118857/medium/e133f1061cc92850b854d05d8faaeafd.png"},{"username":"Walkx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15202182/medium/5c37361ae45aeed487b34582c1f7ca37.png"},{"username":"andrea.rosso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15246318/medium/11f3f5ef44ec7f55b6f143090e208704_default.png"},{"username":"ajnart","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15270132/medium/a0f107a463c8910ee96bc2fa843a17e3.jpeg"},{"username":"Witchling","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15282238/medium/9e196b6783415b10ca571b7673c2ef33.jpg"},{"username":"guineuu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15292058/medium/22fbb758bda3b7805d50bf21d38f2c20.jpeg"},{"username":"Bulgus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15304568/medium/0e8787e5ceb02ed5c96a514d0068ae87.jpg"},{"username":"Narno","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15314996/medium/a6ba093f24884250a1bf6c6f2ca50f1b_default.png"},{"username":"BySempron","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15315986/medium/e3d22d7b1423c6823a9f36d595ed4bdb.png"},{"username":"jonathan.berglin.work","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15359236/medium/95930b2093db13b76179782f7322c5d5.png"},{"username":"icdmkg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405504/medium/f334d16cde1ac4ffb935b440d03465af.gif"},{"username":"irithys","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405614/medium/3086461c47cce0a0c031925e5f943412.png"},{"username":"JannesV","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419912/medium/a7809eb4b817d7c49b62cf10ae86b950.png"},{"username":"benniblot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419914/medium/8086b1573d31f152ba41949b3a172445.jpeg"},{"username":"pacjo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419916/medium/3cbeddbd7bc01faafb5a3bf47bba915b_default.png"},{"username":"Payou6994","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419934/medium/37c9b9b17dfb578404c1c1ddb73ba7a8.png"},{"username":"fzibi21","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419976/medium/0da688450358e0290a7b7359cc1f7328.png"},{"username":"WowMurdock","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420118/medium/de19576fccb495b6dfe4c4c04a56b834.png"},{"username":"hbooo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420120/medium/6c7c7f8db785061356ebb03d044d3329.jpeg"},{"username":"Manicraft1001","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420178/medium/50ec94563a06a9f74f33bd09f01eed4d.jpg"},{"username":"Void123","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420354/medium/86929d44df92a00f9fe900a985c196df_default.png"},{"username":"R4cc","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15422606/medium/a390979662b84694f59de30bdb732141.jpeg"},{"username":"fabricionaweb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15425808/medium/a9354142e7ae5152c144409d55fda551_default.png"},{"username":"JokeOfDead","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15426890/medium/a383eac9365e9de64fd4ab1d6fd0cb95.jpeg"},{"username":"hkz","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15427174/medium/c88acefb0d7306e1f7470e872029fb39_default.png"},{"username":"Steken","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428516/medium/d5aea5653c769c3a523182bdb60d1664.png"},{"username":"flar.anton","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428592/medium/b01fdb365d892e9f811f77fcb50a80a2.jpeg"},{"username":"Bon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15433542/medium/5397da4dfc821f20b6ac14fe0c514e9a.jpeg"},{"username":"bfkadan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434162/medium/4f9a0b43cfe3acaea60124c14ba7f44a.png"},{"username":"BunnySweety","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434662/medium/f0ef200a6a0dcf0e1d0e9ecd4148f560_default.png"},{"username":"HRKings","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15436168/medium/69a31e461d38549f01864e7ef10d642e.png"},{"username":"wiston81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15439078/medium/10f292c8d12a7c21a44b54495fa4a3d8.jpeg"},{"username":"qaz0911","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15440860/medium/3d3e50ee388c72dc4bf7a771761f2d89_default.png"},{"username":"qqyule","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15441462/medium/7a3cdf82710ffb5d8f388bc0bd010665.png"},{"username":"Bims0n","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15445560/medium/603220b603eeb3367e0f0d3fa675247c.jpg"},{"username":"TariqDaCoder","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15446228/medium/50b0f4040112bbd67690b769477398e5_default.png"},{"username":"Anarchon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15449644/medium/e925e1f3e3ffbf0f982391ce263a1a28.jpeg"},{"username":"Ashun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15453020/medium/ccdcf51c73d6aae40751bb30beee1915_default.png"},{"username":"sebekmartin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15454038/medium/bcfb44598cdfd1d7cd4eb35812538962.jpeg"},{"username":"RagnarGraves","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15459882/medium/143d5af850c1154070a218bea124e9cb_default.png"},{"username":"PrtmPhlp","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15462414/medium/b80db55e9de301432dcd1f8c8b24fd49_default.png"},{"username":"DooYoo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15470768/medium/2a18cf4be67094724b508c9e1e698a21_default.png"},{"username":"espentruls","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486092/medium/8e38afc3a4ff669226a0cfd3e420ff3a.jpeg"},{"username":"frisco82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486922/medium/4e1c5d4189b42508e660daa3c1c25b2a.jpeg"},{"username":"lupineDK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15491798/medium/461bd501e8371c062bf29ea171aedd36_default.png"},{"username":"hillaliy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15492732/medium/0bae17b421604892d888e3fc70cf0587.jpeg"},{"username":"MarcOrfilaCarreras","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15501072/medium/ea52b26c3c6f21e4931e38e3ce3f3d6e.png"},{"username":"robertbridda","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15507822/medium/a368c2e30411bb2da9b49290084191f3.png"},{"username":"MKoniuszko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518090/medium/87605434fcc839f6763ab07c50f6d232.jpeg"},{"username":"HeroSizy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518710/medium/4e79c0e98cbeb536dd961e656331b509.png"},{"username":"dwt136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15520022/medium/554422503f2baea43ace85facb4546fb_default.png"},{"username":"asifthewebguy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15526719/medium/b18931dd0c800d725048bd440646198b_default.png"},{"username":"eiloogs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15545537/medium/f290a2f1190983530a9b76b2e858a609.gif"},{"username":"_vytdv","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15547289/medium/60d8644cc8ad6f11a92ccea4a14cd098_default.png"},{"username":"crendasien","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15554645/medium/598ab1d4aaf6b8dccd5ba16be92da7b9.jpeg"},{"username":"edxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15573823/medium/8a565b732a75a77f840dd123cdb30bf4.png"},{"username":"somerlev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15617065/medium/f4b13513e311ec902d90b2f718412c55.jpg"},{"username":"kid1412621","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15643771/medium/dd455e32de652fa88e6fd97598bdffa7.png"},{"username":"suming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15644717/medium/244159dfe10fa03436205506f80c9e25.png"},{"username":"nick.gher","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15647517/medium/5374a2c6fef60a3fbf0edf86b997c351_default.png"},{"username":"DataCat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15650315/medium/ce7c1365adf35c5d490d77500a4607fb_default.png"},{"username":"dizo89","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15658375/medium/0ca745e5017d491fe1b22b0239904de8.jpeg"},{"username":"tee_noodle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674577/medium/804d9cf06f5196026acb6436b809d0da_default.png"},{"username":"Marty88","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674593/medium/492b1509d52bd2809dea768121217125.jpeg"},{"username":"Spillebulle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15677023/medium/20b98bb85062e07afe0e63618f8a5feb.PNG"},{"username":"petitmewen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15685239/medium/15de9b62d2e0bc25013435f1784bbcc1.jpeg"},{"username":"NoProsNoNoobs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15687709/medium/ae8f65fafeb8bcf74dcb8871bbe46461.png"},{"username":"y.gybson","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15690777/medium/b5cb5d2d5768904ff6586c727e3a6c77.jpeg"},{"username":"inside90","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15704947/medium/c1355fcb30dd76f8e39d98d1d49f1c52.png"},{"username":"RJSkudra","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15709853/medium/c3abf2774913dc4e81fb261d36d7668c.png"},{"username":"binge203","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15713937/medium/77c1cfa4314673db80e6881fd9f64668.gif"},{"username":"Mailootje","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15714337/medium/743c3bc4ab1989966a375eeeec83d8b8.jpeg"},{"username":"tim-wiegers","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15719805/medium/08a96f064813350661cd6b20bf3d7d99.png"},{"username":"GkhnG","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15722911/medium/71a027caec489ef6ce82bcf1888329d0_default.png"},{"username":"Zoen-Millo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15760967/medium/9e956f11adc5b34f5636268b5c485dbf.jpg"},{"username":"HooinKyoma","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15792897/medium/9489f0a9b368e0e827ae758b740a2eed.jpeg"},{"username":"wathergeen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15794495/medium/a83b7fc80d180669ebfd6deb3544cfd0.png"},{"username":"MoeToo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15818233/medium/d35cd6953717706eaf20f6c143c62947.png"},{"username":"itodouble","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15836233/medium/e984caea18fb0673bf319fcf28cef649.png"},{"username":"loslocitos","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15847901/medium/fe30d12fd2cf38212f929e13b169f9ec.jpeg"},{"username":"Oversleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15849065/medium/06141f13a6d541d753f3c2f2947b8068_default.png"},{"username":"Beardy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15865139/medium/fca6b9d2b3f52e286d1568f52b83b6a0_default.png"},{"username":"raelyan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15875457/medium/2f4fda1d1aaa5dcc79b328baf3f03151.jpeg"},{"username":"dolphin738","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15913763/medium/ee6fede7b8528ca642329ada80d1cc18.png"},{"username":"brunotco","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15916719/medium/09db45880fc05abc18adb8d932a5ecf9_default.png"},{"username":"LukeIsHereToDevelop","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15924739/medium/3e6cd3940297bb4ba7bb039c93e6f918.png"},{"username":"kennit","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15925879/medium/6b0733ad3c5949b91c55e4d8b03db8a5_default.png"},{"username":"kuunpire","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15950309/medium/8192a4f08f07086828ac9f74ed29a169.jpeg"},{"username":"Sandor-dev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15951759/medium/0216c2da4eb028164ebbecf1c72f6271_default.png"},{"username":"Meierschlumpf","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15953187/medium/23c744faef1ab84fbdc9351a7850aab6.jpeg"},{"username":"harmlesscat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15970733/medium/dd8d0214a0250c932bb518b1b55e45a2_default.png"},{"username":"OrzWTF","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15976121/medium/4c4557cbff7ff7b0503455bc59c020e0.jpeg"},{"username":"tagaishi","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15977271/medium/eade504c83a5a1ff831c80a538fbdb44_default.png"},{"username":"azurite928","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15981895/medium/547ccc459ee123e78b5401c499f1022d.png"},{"username":"Ronner231","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16021342/medium/7734d550df2de5a2fec2ffff33e7024c.jpeg"},{"username":"ugyes","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16034148/medium/ed001e3f470a2dea9a8ce955b18e7bd5.png"},{"username":"rpieja","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16045554/medium/bd55baca2ef8b92502a760cc9ee7c505_default.png"},{"username":"flambyisyou","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16051620/medium/3a3bc0c90f6b95ab4ef74396a0a17beb.png"},{"username":"Topbcy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16077170/medium/d3aed33ea56330338756cfcd89477cfe.jpeg"},{"username":"ai5d02sb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16084674/medium/7c8119fe2a5ca71bb15f636916a42b95_default.png"},{"username":"explosiveparrot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16097722/medium/7762f80fc1da63f5b2eb87de9d640324_default.png"},{"username":"DestroyCom","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16111544/medium/83e3d3ac5c8bfed634cd1a074854db67.png"},{"username":"neotraxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16116966/medium/b30df957873329019a8a90a69f6efe3a.png"},{"username":"gzxpa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16123314/medium/487b05577310a946b0b98bc72c11213b_default.png"},{"username":"TORIK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16124732/medium/de770890e6411860ac06e8cc2dc0abd0_default.png"},{"username":"sergio.pibot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16138114/medium/80db802b2fcd6bbf19ea4c7413367dca.jpeg"},{"username":"karam-ajaj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16139838/medium/7539ab958d3c85d5f67e7849483ea8f7.jpeg"},{"username":"SimonHenz97","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16151520/medium/9b94a85b536688e2d94538c384fd0a76.png"},{"username":"olsson82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16198988/medium/eeaab4cba210c537424d4204754b604e.png"},{"username":"bo3bdo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16222806/medium/8652f3beacb6098dde5a4cd0a29fe80d.jpeg"},{"username":"AngryPlayer04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245192/medium/342715274f4dc31fd4132cdae9126188.jpeg"},{"username":"ehatamm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245884/medium/979d5e5526fe545be9bf46db481f7182.jpeg"},{"username":"Balionelis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16246058/medium/986d62ba363594c517d966fe9178dcbb.png"},{"username":"kwargs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16248816/medium/19ce11f04bf1ae2637e0483399c675f9_default.png"},{"username":"lucicu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16273892/medium/3b09e8f3bead221ef98d6a45a16851dc_default.png"},{"username":"Michael5564445","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16357688/medium/9d9026a8bf3eaccb0417da240932ebf7.png"},{"username":"Netscream","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16359198/medium/694e0c8572dc8a47e6d63da31ec5b992.png"},{"username":"belicstefan04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16368142/medium/4742dcfd7bf7ad7e33e37ac44fba7e0f.png"},{"username":"Hamad2066","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16371478/medium/f37bbc7685b6757defdbd1494236af61.jpeg"},{"username":"3ct0pl4sm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16399616/medium/ce796d1c40163975624c0a483e56374f.png"},{"username":"sanchez.marcell626","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16433865/medium/3ddde1314764cc2205ffdcd1ae719a91.png"},{"username":"Minoctis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16490079/medium/91fd0849303a4eca033d660d0a7b6854.jpeg"},{"username":"homarr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16657003/medium/3afabfd3de949a54ff5d40ad04552aba.png"},{"username":"mwgg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16658379/medium/763dd09f5c238cc5324d4d5357985292.png"},{"username":"kiwinho","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16671855/medium/bfe3a2d497dc4748a04d02e4ae2139cb.jpeg"},{"username":"tjvg4m34r13","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16679135/medium/7a483b9b0abe0d925e54808e1cb38fa0.jpeg"},{"username":"Diegoem","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16705921/medium/29ce68ebc191fc3f65499511b12de98f_default.png"},{"username":"bouks69","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16746091/medium/b58b1fc08520de416198be9df5d093eb.jpeg"},{"username":"futhgar","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16748067/medium/b8c526b097f9aa9d687250cac3df16dc.jpeg"},{"username":"GrimSQL","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16764343/medium/fff729a76d1f8fbcdaee9bb0c0f5f3fd.png"},{"username":"chnikel","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767047/medium/3dda2a37e03049dafefe6697bb00f75c.png"},{"username":"yuki19870616","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767951/medium/f59c848e38382cda6c8464b0a7b9e642_default.png"},{"username":"noamdal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16782245/medium/b4a72a61f9caf138f0322c0cb987e6d0.png"},{"username":"MalithRukshan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16809057/medium/084d6a5b35fbbeacc70e7021197d222f.png"},{"username":"minirope19","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16930929/medium/e8cbbc26747e31c5a8959215e1dd067b.jpeg"},{"username":"prubin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17503492/medium/96ac87644691e49c1f983f2f094e541c_default.png"},{"username":"sam-tam-sam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17578052/medium/1628dc2954ce3ae95e0caaa2bd60ab0c.png"},{"username":"KydoxOwn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17764383/medium/0bc150a09d77f5fda43988e6342777dc.png"},{"username":"toineenzo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12371852/medium/9f1b2bedb4794c59479cd289bdba9fab.png"},{"username":"ArcaneWater","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12421105/medium/1ac82517a6c658f6b62c48aebcb17e86_default.png"},{"username":"Ascalon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12743376/medium/7845361ea1fae14e71978df906d60250.png"},{"username":"Ebedami","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12974801/medium/b596dea5c09454c4c828eac558389755.jpg"},{"username":"perrygamerptyt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13117177/medium/1406c949507ecd438480473c8a1f6124.jpg"},{"username":"SergiSvK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13320543/medium/3df3c79cc5f0c53716c559cd3fd2fc20.png"},{"username":"jeongeon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13362856/medium/eb572f72cde5e5526c517ca3a6489850_default.png"},{"username":"MrTranCFCVN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13439475/medium/a1789d69c85d90c667194b5d6a518c08_default.png"},{"username":"Tobost06","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13467449/medium/9227dc07f6366bc060d28304f5cb8ce7.jpeg"},{"username":"Kf637","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13530622/medium/118b00bb72d01d3229c97409637e25d1_default.png"},{"username":"Cruellest","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13610615/medium/2a74faa0947ee08d18f7946fb8602c1e.jpg"},{"username":"olavinto","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14424644/medium/37c01732bd2b7a272b421807a05ccfeb.png"},{"username":"OzakIOne","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14446246/medium/3abb08846344706d3a16a9fb196655ee.jpeg"},{"username":"Thario","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14491372/medium/dd5e142070802a672900121aa3f332a6_default.png"},{"username":"Wjouter","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14585620/medium/b91a51513332bdc0a0a9ecbed99ecbc3.png"},{"username":"albanobattistella","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14686194/medium/564afcfd76f5cd24751bd669cf4943aa.jpg"},{"username":"angrystar170","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14736454/medium/7a70edc6b50122877533e95a4e971203.jpeg"},{"username":"Kachelkaiser","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14763406/medium/203a781797da4a18fe0f4e7db8fd547c.png"},{"username":"regi4","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14842936/medium/f7e1d672f562a7db61ba6b4b8f4de41d.png"},{"username":"baton5129","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14891064/medium/8d438f557b82977dd02f0ead3187265f.PNG"},{"username":"legocuedy09","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15206280/medium/a93129b77a54ffbb2c9f136f18718e80.png"},{"username":"meviper","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15958903/medium/209f521ce33a05831fa8d7d1b7babc20_default.png"},{"username":"GerOriki","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16268376/medium/da00e54b08cd40348231d92873a0cd0a_default.png"},{"username":"TheRedCyclops","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16486399/medium/7f39226180120d5a9efcb8e13d8aec8e_default.png"},{"username":"dymek37","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16659221/medium/d1dc6d11d7e7fc370efc5070e837ae03.png"},{"username":"B3CKDOOR","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16744975/medium/e6c7b2d45e76465d54e6efb67c83da7d.png"},{"username":"on9686","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16768173/medium/6282fed9aafe0262a173a5ec0887e5d9_default.png"},{"username":"Larsluph","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16779933/medium/ed7d36f8b44013bad3a16ac0491bd0f7.png"},{"username":"FOEDI","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16781001/medium/6b4552fb72e359aa016f7a054078fac8.png"},{"username":"xmarkurion","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16805443/medium/34a20428427de5aaef99c7d140646803.png"},{"username":"gregid","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16806705/medium/f3c8f4a20436e8538929130142bbc104.png"},{"username":"Flameberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16820453/medium/d47be866148474c9d05fec6fbe406d88.png"},{"username":"Playfust","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16872865/medium/5f4609cc711e5fb9fa8a0b178635769c.jpeg"},{"username":"Cotignac","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16879297/medium/81ff353edf030699a159bb79cda26e84.jpg"},{"username":"LeaHun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16916375/medium/618520f0543b1e212ebc83d66b683d4b_default.png"},{"username":"jackwellerreal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16919717/medium/37bbfdc03893f141133ccc619593266d.png"},{"username":"renan.costaalencar","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16938427/medium/6d25b25320c5bde734118dec4af9cd5b.png"},{"username":"andrius.cim","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16967845/medium/46028fc1a0ddfaaeebcb37b39739625d_default.png"},{"username":"xjxexrxrxyx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17041412/medium/d34d664166db6fb25579bca9ff3b50b4.jpeg"},{"username":"bilhal.fellah","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17044572/medium/d1ec6f17e4aa013e9eededc83778d2c6.png"},{"username":"the_octo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17058060/medium/7423ab3a4cabb67f5decb2e2dfa2b675_default.png"},{"username":"BamesJond","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17075846/medium/128d7ffd40254c8e376f45678e2fc620_default.png"},{"username":"Kornikus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17134240/medium/d7a42b2c30db46ff152699ca01f9e11a_default.png"},{"username":"Master3307","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17161852/medium/94ec577dd53e16b434f2aac9c34f64c6.png"},{"username":"xoxyuxu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17176526/medium/108055aa24343043de852e412bec74be.png"},{"username":"cryptodntsleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17249408/medium/b9e15aa2b24a0dbc1e4f194aa8ed5109.png"},{"username":"yaniorg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17261842/medium/7dbfc77f21c826845961243c44540d26.jpg"},{"username":"Vidariondr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17262438/medium/45fbc71be02ef27296b6f423e97b6a03_default.png"},{"username":"Fastery","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17263066/medium/701b0edc59676174863ad651528bbb37.jpeg"},{"username":"stratself","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17290388/medium/57d9d8161b3fd0abf4dc5558b4a1fa05_default.png"},{"username":"wuzeqin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17292606/medium/b9e0308410b31337e2d7aa6ed346d718_default.png"},{"username":"ChristopherBull","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17304338/medium/21a175ce596bfae81430767467908b90.jpeg"},{"username":"darkbcnlord","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17311436/medium/b271bc0b419ec3a26ddb7b63ff8ffc4b.png"},{"username":"zhoran1997","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17344028/medium/c8f450b5a8f1e9494a45dc60af7ce63e.png"},{"username":"Pakura","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17396930/medium/18602738018348bf2ffa83a78bf165e2_default.png"},{"username":"gilalves1703","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17447768/medium/3f1de562a5c2391c88bbf8d5cf40a266.png"},{"username":"iServeCloud","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17470960/medium/11649b99d609438d66455a4d2fdc70f7.png"},{"username":"guibolzantvbox","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17474136/medium/59a576e6da538664ceb972253916fa02.jpeg"},{"username":"ivann136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17506062/medium/67d09ada36fac5f444a1f7517e3a97bd_default.png"},{"username":"Maheshivara","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17516082/medium/576e1e6581cf969615b265de6aeff8b7.jpeg"},{"username":"brunogui81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17517542/medium/7c0d174e810435af518fe8e0c05e151f.jpeg"},{"username":"michelwilhelm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17542190/medium/4c6b33fd8993ff565fa75add2ce8355e.jpeg"},{"username":"dias-gxstavo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17547376/medium/8c6b109aae8aeb651192346a39ae9e5b.jpeg"},{"username":"ToxykAuBleu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17614030/medium/8d21e0608560172b121bd46126d827c7.jpeg"},{"username":"e.erdemir","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17617994/medium/7259a29db9941c6171a8cbbd643b92bd.png"},{"username":"sjonkreutz","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17618306/medium/7601c45d015189a863656e21348d223b.png"},{"username":"volovich0377","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17620388/medium/c929a8fbd24f96d17620fa497ade7309.png"},{"username":"Hamstio1","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17624898/medium/406e0bf40094c24a01c3064f8f5b2a82.png"},{"username":"i3laa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17627462/medium/613a9d283ed8b69819ee181903851660.jpeg"},{"username":"bastiengrignon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17629884/medium/ddfc3339285bd65195fcd834e512e9b7.jpeg"},{"username":"kauhee","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17644600/medium/def1b9066cf9275b4273a5a5dca7f325.png"},{"username":"hongminzheng","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17683860/medium/a764f4963912777d27a7cd98e136a2b2.png"},{"username":"d-lindahl","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17726729/medium/cbde348582fbabcfadd89a56cd5a0b40.png"},{"username":"Enoal-Fauchille-Bolle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17734649/medium/6e6fb29198782dc7856ea21811db669c.jpeg"},{"username":"manos-grigorakis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17737973/medium/b37f685587c920c81fdaf9a357962434.jpeg"},{"username":"SertraFurr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17738703/medium/5f1e9f270e315ee3185cf2ccb3f5a833.png"},{"username":"Kle.Ma","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17739207/medium/b767d6093e6608f251ca152f53d359b8_default.png"},{"username":"WalkerLukas","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17744485/medium/87508ce83a9b6e5391f55883a66a054b.png"},{"username":"mtya","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17748447/medium/f574d5a770d74814f8c49ee68e00f5b7.jpeg"},{"username":"Elaktrato","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17750977/medium/f4109d379f29dc8ea2e7799ac9e208c8.png"},{"username":"marcelmeis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17753627/medium/4ba32116c27e427d3073e45713f6564e.png"},{"username":"ProKafelek12e","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17760377/medium/5199af152f1ea42cee718e7729bd41ff.png"},{"username":"zalaghi","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17763367/medium/a06f7b15222663517b58b8dc8902f8a1.png"},{"username":"Amato21","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17776775/medium/214b1f1581a85fe10f1ae3241aab43e4.png"},{"username":"jabalv","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17778347/medium/14dd47fff64f6543e6015be7373420c3.png"},{"username":"agiledivider","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17801131/medium/0039d926d5a716e712e36b06004369ab_default.png"}] \ No newline at end of file +[{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/aaa1f083e04c572f953fde4563171e4a.jpeg"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14861042/medium/2d5c4e62613f03082f3e645fa92efd59.jpeg"},{"username":"djismgaming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14934947/medium/f5a8570713c34ab0f7d5405d105e2a9a.jpeg"},{"username":"f1refa11","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14949159/medium/fd2ae63b8eb4462200ba96abf943c1b9.png"},{"username":"jeffersonraimon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057621/medium/6dff469563860e2618bc9d45646d0ab4.png"},{"username":"giop98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057987/medium/b8a4825d3fc39fc662f35ee258db4b2d.jpeg"},{"username":"tomislav.kraljevic","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15118857/medium/e133f1061cc92850b854d05d8faaeafd.png"},{"username":"Walkx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15202182/medium/5c37361ae45aeed487b34582c1f7ca37.png"},{"username":"andrea.rosso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15246318/medium/11f3f5ef44ec7f55b6f143090e208704_default.png"},{"username":"ajnart","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15270132/medium/a0f107a463c8910ee96bc2fa843a17e3.jpeg"},{"username":"Witchling","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15282238/medium/9e196b6783415b10ca571b7673c2ef33.jpg"},{"username":"guineuu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15292058/medium/22fbb758bda3b7805d50bf21d38f2c20.jpeg"},{"username":"Bulgus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15304568/medium/0e8787e5ceb02ed5c96a514d0068ae87.jpg"},{"username":"Narno","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15314996/medium/a6ba093f24884250a1bf6c6f2ca50f1b_default.png"},{"username":"BySempron","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15315986/medium/e3d22d7b1423c6823a9f36d595ed4bdb.png"},{"username":"jonathan.berglin.work","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15359236/medium/95930b2093db13b76179782f7322c5d5.png"},{"username":"icdmkg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405504/medium/f334d16cde1ac4ffb935b440d03465af.gif"},{"username":"irithys","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405614/medium/3086461c47cce0a0c031925e5f943412.png"},{"username":"JannesV","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419912/medium/a7809eb4b817d7c49b62cf10ae86b950.png"},{"username":"benniblot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419914/medium/8086b1573d31f152ba41949b3a172445.jpeg"},{"username":"pacjo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419916/medium/3cbeddbd7bc01faafb5a3bf47bba915b_default.png"},{"username":"Payou6994","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419934/medium/37c9b9b17dfb578404c1c1ddb73ba7a8.png"},{"username":"fzibi21","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419976/medium/0da688450358e0290a7b7359cc1f7328.png"},{"username":"WowMurdock","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420118/medium/de19576fccb495b6dfe4c4c04a56b834.png"},{"username":"hbooo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420120/medium/6c7c7f8db785061356ebb03d044d3329.jpeg"},{"username":"Manicraft1001","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420178/medium/50ec94563a06a9f74f33bd09f01eed4d.jpg"},{"username":"Void123","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420354/medium/86929d44df92a00f9fe900a985c196df_default.png"},{"username":"R4cc","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15422606/medium/a390979662b84694f59de30bdb732141.jpeg"},{"username":"fabricionaweb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15425808/medium/a9354142e7ae5152c144409d55fda551_default.png"},{"username":"JokeOfDead","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15426890/medium/a383eac9365e9de64fd4ab1d6fd0cb95.jpeg"},{"username":"hkz","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15427174/medium/c88acefb0d7306e1f7470e872029fb39_default.png"},{"username":"Steken","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428516/medium/d5aea5653c769c3a523182bdb60d1664.png"},{"username":"flar.anton","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428592/medium/b01fdb365d892e9f811f77fcb50a80a2.jpeg"},{"username":"Bon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15433542/medium/5397da4dfc821f20b6ac14fe0c514e9a.jpeg"},{"username":"bfkadan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434162/medium/4f9a0b43cfe3acaea60124c14ba7f44a.png"},{"username":"BunnySweety","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434662/medium/f0ef200a6a0dcf0e1d0e9ecd4148f560_default.png"},{"username":"HRKings","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15436168/medium/69a31e461d38549f01864e7ef10d642e.png"},{"username":"wiston81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15439078/medium/10f292c8d12a7c21a44b54495fa4a3d8.jpeg"},{"username":"qaz0911","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15440860/medium/3d3e50ee388c72dc4bf7a771761f2d89_default.png"},{"username":"qqyule","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15441462/medium/7a3cdf82710ffb5d8f388bc0bd010665.png"},{"username":"Bims0n","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15445560/medium/603220b603eeb3367e0f0d3fa675247c.jpg"},{"username":"TariqDaCoder","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15446228/medium/50b0f4040112bbd67690b769477398e5_default.png"},{"username":"Anarchon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15449644/medium/e925e1f3e3ffbf0f982391ce263a1a28.jpeg"},{"username":"Ashun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15453020/medium/ccdcf51c73d6aae40751bb30beee1915_default.png"},{"username":"sebekmartin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15454038/medium/bcfb44598cdfd1d7cd4eb35812538962.jpeg"},{"username":"RagnarGraves","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15459882/medium/143d5af850c1154070a218bea124e9cb_default.png"},{"username":"PrtmPhlp","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15462414/medium/b80db55e9de301432dcd1f8c8b24fd49_default.png"},{"username":"DooYoo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15470768/medium/2a18cf4be67094724b508c9e1e698a21_default.png"},{"username":"espentruls","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486092/medium/8e38afc3a4ff669226a0cfd3e420ff3a.jpeg"},{"username":"frisco82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486922/medium/4e1c5d4189b42508e660daa3c1c25b2a.jpeg"},{"username":"lupineDK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15491798/medium/461bd501e8371c062bf29ea171aedd36_default.png"},{"username":"hillaliy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15492732/medium/0bae17b421604892d888e3fc70cf0587.jpeg"},{"username":"MarcOrfilaCarreras","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15501072/medium/ea52b26c3c6f21e4931e38e3ce3f3d6e.png"},{"username":"robertbridda","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15507822/medium/a368c2e30411bb2da9b49290084191f3.png"},{"username":"MKoniuszko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518090/medium/87605434fcc839f6763ab07c50f6d232.jpeg"},{"username":"HeroSizy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518710/medium/4e79c0e98cbeb536dd961e656331b509.png"},{"username":"dwt136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15520022/medium/554422503f2baea43ace85facb4546fb_default.png"},{"username":"asifthewebguy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15526719/medium/b18931dd0c800d725048bd440646198b_default.png"},{"username":"eiloogs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15545537/medium/f290a2f1190983530a9b76b2e858a609.gif"},{"username":"_vytdv","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15547289/medium/60d8644cc8ad6f11a92ccea4a14cd098_default.png"},{"username":"crendasien","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15554645/medium/598ab1d4aaf6b8dccd5ba16be92da7b9.jpeg"},{"username":"edxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15573823/medium/8a565b732a75a77f840dd123cdb30bf4.png"},{"username":"somerlev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15617065/medium/f4b13513e311ec902d90b2f718412c55.jpg"},{"username":"kid1412621","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15643771/medium/dd455e32de652fa88e6fd97598bdffa7.png"},{"username":"suming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15644717/medium/244159dfe10fa03436205506f80c9e25.png"},{"username":"nick.gher","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15647517/medium/5374a2c6fef60a3fbf0edf86b997c351_default.png"},{"username":"DataCat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15650315/medium/ce7c1365adf35c5d490d77500a4607fb_default.png"},{"username":"dizo89","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15658375/medium/0ca745e5017d491fe1b22b0239904de8.jpeg"},{"username":"tee_noodle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674577/medium/804d9cf06f5196026acb6436b809d0da_default.png"},{"username":"Marty88","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674593/medium/492b1509d52bd2809dea768121217125.jpeg"},{"username":"Spillebulle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15677023/medium/20b98bb85062e07afe0e63618f8a5feb.PNG"},{"username":"petitmewen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15685239/medium/15de9b62d2e0bc25013435f1784bbcc1.jpeg"},{"username":"NoProsNoNoobs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15687709/medium/ae8f65fafeb8bcf74dcb8871bbe46461.png"},{"username":"y.gybson","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15690777/medium/b5cb5d2d5768904ff6586c727e3a6c77.jpeg"},{"username":"inside90","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15704947/medium/c1355fcb30dd76f8e39d98d1d49f1c52.png"},{"username":"RJSkudra","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15709853/medium/c3abf2774913dc4e81fb261d36d7668c.png"},{"username":"binge203","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15713937/medium/77c1cfa4314673db80e6881fd9f64668.gif"},{"username":"Mailootje","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15714337/medium/743c3bc4ab1989966a375eeeec83d8b8.jpeg"},{"username":"tim-wiegers","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15719805/medium/08a96f064813350661cd6b20bf3d7d99.png"},{"username":"GkhnG","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15722911/medium/71a027caec489ef6ce82bcf1888329d0_default.png"},{"username":"Zoen-Millo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15760967/medium/9e956f11adc5b34f5636268b5c485dbf.jpg"},{"username":"HooinKyoma","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15792897/medium/9489f0a9b368e0e827ae758b740a2eed.jpeg"},{"username":"wathergeen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15794495/medium/a83b7fc80d180669ebfd6deb3544cfd0.png"},{"username":"MoeToo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15818233/medium/d35cd6953717706eaf20f6c143c62947.png"},{"username":"itodouble","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15836233/medium/e984caea18fb0673bf319fcf28cef649.png"},{"username":"loslocitos","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15847901/medium/fe30d12fd2cf38212f929e13b169f9ec.jpeg"},{"username":"Oversleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15849065/medium/06141f13a6d541d753f3c2f2947b8068_default.png"},{"username":"Beardy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15865139/medium/fca6b9d2b3f52e286d1568f52b83b6a0_default.png"},{"username":"raelyan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15875457/medium/2f4fda1d1aaa5dcc79b328baf3f03151.jpeg"},{"username":"dolphin738","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15913763/medium/ee6fede7b8528ca642329ada80d1cc18.png"},{"username":"brunotco","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15916719/medium/09db45880fc05abc18adb8d932a5ecf9_default.png"},{"username":"LukeIsHereToDevelop","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15924739/medium/3e6cd3940297bb4ba7bb039c93e6f918.png"},{"username":"kennit","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15925879/medium/6b0733ad3c5949b91c55e4d8b03db8a5_default.png"},{"username":"kuunpire","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15950309/medium/8192a4f08f07086828ac9f74ed29a169.jpeg"},{"username":"Sandor-dev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15951759/medium/0216c2da4eb028164ebbecf1c72f6271_default.png"},{"username":"Meierschlumpf","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15953187/medium/23c744faef1ab84fbdc9351a7850aab6.jpeg"},{"username":"harmlesscat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15970733/medium/dd8d0214a0250c932bb518b1b55e45a2_default.png"},{"username":"OrzWTF","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15976121/medium/4c4557cbff7ff7b0503455bc59c020e0.jpeg"},{"username":"tagaishi","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15977271/medium/eade504c83a5a1ff831c80a538fbdb44_default.png"},{"username":"azurite928","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15981895/medium/547ccc459ee123e78b5401c499f1022d.png"},{"username":"Ronner231","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16021342/medium/7734d550df2de5a2fec2ffff33e7024c.jpeg"},{"username":"ugyes","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16034148/medium/ed001e3f470a2dea9a8ce955b18e7bd5.png"},{"username":"rpieja","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16045554/medium/bd55baca2ef8b92502a760cc9ee7c505_default.png"},{"username":"flambyisyou","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16051620/medium/3a3bc0c90f6b95ab4ef74396a0a17beb.png"},{"username":"Topbcy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16077170/medium/d3aed33ea56330338756cfcd89477cfe.jpeg"},{"username":"ai5d02sb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16084674/medium/7c8119fe2a5ca71bb15f636916a42b95_default.png"},{"username":"explosiveparrot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16097722/medium/7762f80fc1da63f5b2eb87de9d640324_default.png"},{"username":"DestroyCom","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16111544/medium/83e3d3ac5c8bfed634cd1a074854db67.png"},{"username":"neotraxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16116966/medium/b30df957873329019a8a90a69f6efe3a.png"},{"username":"gzxpa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16123314/medium/487b05577310a946b0b98bc72c11213b_default.png"},{"username":"TORIK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16124732/medium/de770890e6411860ac06e8cc2dc0abd0_default.png"},{"username":"sergio.pibot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16138114/medium/80db802b2fcd6bbf19ea4c7413367dca.jpeg"},{"username":"karam-ajaj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16139838/medium/7539ab958d3c85d5f67e7849483ea8f7.jpeg"},{"username":"SimonHenz97","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16151520/medium/9b94a85b536688e2d94538c384fd0a76.png"},{"username":"olsson82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16198988/medium/eeaab4cba210c537424d4204754b604e.png"},{"username":"bo3bdo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16222806/medium/8652f3beacb6098dde5a4cd0a29fe80d.jpeg"},{"username":"AngryPlayer04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245192/medium/342715274f4dc31fd4132cdae9126188.jpeg"},{"username":"ehatamm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245884/medium/979d5e5526fe545be9bf46db481f7182.jpeg"},{"username":"Balionelis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16246058/medium/986d62ba363594c517d966fe9178dcbb.png"},{"username":"kwargs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16248816/medium/19ce11f04bf1ae2637e0483399c675f9_default.png"},{"username":"lucicu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16273892/medium/3b09e8f3bead221ef98d6a45a16851dc_default.png"},{"username":"Michael5564445","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16357688/medium/9d9026a8bf3eaccb0417da240932ebf7.png"},{"username":"Netscream","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16359198/medium/694e0c8572dc8a47e6d63da31ec5b992.png"},{"username":"belicstefan04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16368142/medium/4742dcfd7bf7ad7e33e37ac44fba7e0f.png"},{"username":"Hamad2066","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16371478/medium/f37bbc7685b6757defdbd1494236af61.jpeg"},{"username":"3ct0pl4sm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16399616/medium/ce796d1c40163975624c0a483e56374f.png"},{"username":"sanchez.marcell626","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16433865/medium/3ddde1314764cc2205ffdcd1ae719a91.png"},{"username":"Minoctis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16490079/medium/91fd0849303a4eca033d660d0a7b6854.jpeg"},{"username":"homarr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16657003/medium/3afabfd3de949a54ff5d40ad04552aba.png"},{"username":"mwgg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16658379/medium/763dd09f5c238cc5324d4d5357985292.png"},{"username":"kiwinho","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16671855/medium/bfe3a2d497dc4748a04d02e4ae2139cb.jpeg"},{"username":"tjvg4m34r13","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16679135/medium/7a483b9b0abe0d925e54808e1cb38fa0.jpeg"},{"username":"Diegoem","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16705921/medium/29ce68ebc191fc3f65499511b12de98f_default.png"},{"username":"bouks69","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16746091/medium/b58b1fc08520de416198be9df5d093eb.jpeg"},{"username":"futhgar","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16748067/medium/b8c526b097f9aa9d687250cac3df16dc.jpeg"},{"username":"GrimSQL","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16764343/medium/fff729a76d1f8fbcdaee9bb0c0f5f3fd.png"},{"username":"chnikel","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767047/medium/3dda2a37e03049dafefe6697bb00f75c.png"},{"username":"yuki19870616","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767951/medium/f59c848e38382cda6c8464b0a7b9e642_default.png"},{"username":"noamdal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16782245/medium/b4a72a61f9caf138f0322c0cb987e6d0.png"},{"username":"MalithRukshan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16809057/medium/084d6a5b35fbbeacc70e7021197d222f.png"},{"username":"minirope19","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16930929/medium/e8cbbc26747e31c5a8959215e1dd067b.jpeg"},{"username":"prubin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17503492/medium/96ac87644691e49c1f983f2f094e541c_default.png"},{"username":"sam-tam-sam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17578052/medium/1628dc2954ce3ae95e0caaa2bd60ab0c.png"},{"username":"KydoxOwn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17764383/medium/0bc150a09d77f5fda43988e6342777dc.png"},{"username":"toineenzo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12371852/medium/9f1b2bedb4794c59479cd289bdba9fab.png"},{"username":"RollstuhlJack","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12386691/medium/192fa7d350b148a55d37332c9d17c529_default.png"},{"username":"ArcaneWater","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12421105/medium/1ac82517a6c658f6b62c48aebcb17e86_default.png"},{"username":"Ascalon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12743376/medium/7845361ea1fae14e71978df906d60250.png"},{"username":"Ebedami","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12974801/medium/b596dea5c09454c4c828eac558389755.jpg"},{"username":"perrygamerptyt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13117177/medium/1406c949507ecd438480473c8a1f6124.jpg"},{"username":"SergiSvK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13320543/medium/3df3c79cc5f0c53716c559cd3fd2fc20.png"},{"username":"jeongeon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13362856/medium/eb572f72cde5e5526c517ca3a6489850_default.png"},{"username":"thrmda","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13431074/medium/c79736af3a4140a01254ea1a887f64bc_default.png"},{"username":"MrTranCFCVN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13439475/medium/a1789d69c85d90c667194b5d6a518c08_default.png"},{"username":"Tobost06","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13467449/medium/9227dc07f6366bc060d28304f5cb8ce7.jpeg"},{"username":"Kf637","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13530622/medium/118b00bb72d01d3229c97409637e25d1_default.png"},{"username":"Cruellest","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13610615/medium/2a74faa0947ee08d18f7946fb8602c1e.jpg"},{"username":"olavinto","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14424644/medium/37c01732bd2b7a272b421807a05ccfeb.png"},{"username":"OzakIOne","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14446246/medium/3abb08846344706d3a16a9fb196655ee.jpeg"},{"username":"Thario","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14491372/medium/dd5e142070802a672900121aa3f332a6_default.png"},{"username":"Wjouter","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14585620/medium/b91a51513332bdc0a0a9ecbed99ecbc3.png"},{"username":"albanobattistella","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14686194/medium/564afcfd76f5cd24751bd669cf4943aa.jpg"},{"username":"angrystar170","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14736454/medium/7a70edc6b50122877533e95a4e971203.jpeg"},{"username":"Kachelkaiser","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14763406/medium/203a781797da4a18fe0f4e7db8fd547c.png"},{"username":"regi4","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14842936/medium/f7e1d672f562a7db61ba6b4b8f4de41d.png"},{"username":"baton5129","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14891064/medium/8d438f557b82977dd02f0ead3187265f.PNG"},{"username":"legocuedy09","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15206280/medium/a93129b77a54ffbb2c9f136f18718e80.png"},{"username":"meviper","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15958903/medium/209f521ce33a05831fa8d7d1b7babc20_default.png"},{"username":"GerOriki","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16268376/medium/da00e54b08cd40348231d92873a0cd0a_default.png"},{"username":"TheRedCyclops","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16486399/medium/7f39226180120d5a9efcb8e13d8aec8e_default.png"},{"username":"dymek37","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16659221/medium/d1dc6d11d7e7fc370efc5070e837ae03.png"},{"username":"B3CKDOOR","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16744975/medium/e6c7b2d45e76465d54e6efb67c83da7d.png"},{"username":"on9686","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16768173/medium/6282fed9aafe0262a173a5ec0887e5d9_default.png"},{"username":"Larsluph","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16779933/medium/ed7d36f8b44013bad3a16ac0491bd0f7.png"},{"username":"FOEDI","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16781001/medium/6b4552fb72e359aa016f7a054078fac8.png"},{"username":"xmarkurion","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16805443/medium/34a20428427de5aaef99c7d140646803.png"},{"username":"gregid","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16806705/medium/f3c8f4a20436e8538929130142bbc104.png"},{"username":"Flameberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16820453/medium/d47be866148474c9d05fec6fbe406d88.png"},{"username":"Playfust","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16872865/medium/5f4609cc711e5fb9fa8a0b178635769c.jpeg"},{"username":"Cotignac","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16879297/medium/81ff353edf030699a159bb79cda26e84.jpg"},{"username":"LeaHun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16916375/medium/618520f0543b1e212ebc83d66b683d4b_default.png"},{"username":"jackwellerreal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16919717/medium/37bbfdc03893f141133ccc619593266d.png"},{"username":"renan.costaalencar","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16938427/medium/6d25b25320c5bde734118dec4af9cd5b.png"},{"username":"andrius.cim","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16967845/medium/46028fc1a0ddfaaeebcb37b39739625d_default.png"},{"username":"xjxexrxrxyx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17041412/medium/d34d664166db6fb25579bca9ff3b50b4.jpeg"},{"username":"bilhal.fellah","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17044572/medium/d1ec6f17e4aa013e9eededc83778d2c6.png"},{"username":"the_octo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17058060/medium/7423ab3a4cabb67f5decb2e2dfa2b675_default.png"},{"username":"BamesJond","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17075846/medium/128d7ffd40254c8e376f45678e2fc620_default.png"},{"username":"Kornikus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17134240/medium/d7a42b2c30db46ff152699ca01f9e11a_default.png"},{"username":"Master3307","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17161852/medium/94ec577dd53e16b434f2aac9c34f64c6.png"},{"username":"xoxyuxu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17176526/medium/108055aa24343043de852e412bec74be.png"},{"username":"cryptodntsleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17249408/medium/b9e15aa2b24a0dbc1e4f194aa8ed5109.png"},{"username":"yaniorg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17261842/medium/7dbfc77f21c826845961243c44540d26.jpg"},{"username":"Vidariondr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17262438/medium/45fbc71be02ef27296b6f423e97b6a03_default.png"},{"username":"Fastery","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17263066/medium/701b0edc59676174863ad651528bbb37.jpeg"},{"username":"stratself","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17290388/medium/57d9d8161b3fd0abf4dc5558b4a1fa05_default.png"},{"username":"wuzeqin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17292606/medium/b9e0308410b31337e2d7aa6ed346d718_default.png"},{"username":"ChristopherBull","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17304338/medium/21a175ce596bfae81430767467908b90.jpeg"},{"username":"darkbcnlord","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17311436/medium/b271bc0b419ec3a26ddb7b63ff8ffc4b.png"},{"username":"zhoran1997","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17344028/medium/c8f450b5a8f1e9494a45dc60af7ce63e.png"},{"username":"Pakura","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17396930/medium/18602738018348bf2ffa83a78bf165e2_default.png"},{"username":"gilalves1703","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17447768/medium/3f1de562a5c2391c88bbf8d5cf40a266.png"},{"username":"iServeCloud","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17470960/medium/11649b99d609438d66455a4d2fdc70f7.png"},{"username":"guibolzantvbox","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17474136/medium/59a576e6da538664ceb972253916fa02.jpeg"},{"username":"ivann136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17506062/medium/67d09ada36fac5f444a1f7517e3a97bd_default.png"},{"username":"Maheshivara","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17516082/medium/576e1e6581cf969615b265de6aeff8b7.jpeg"},{"username":"brunogui81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17517542/medium/7c0d174e810435af518fe8e0c05e151f.jpeg"},{"username":"michelwilhelm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17542190/medium/4c6b33fd8993ff565fa75add2ce8355e.jpeg"},{"username":"dias-gxstavo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17547376/medium/8c6b109aae8aeb651192346a39ae9e5b.jpeg"},{"username":"ToxykAuBleu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17614030/medium/8d21e0608560172b121bd46126d827c7.jpeg"},{"username":"e.erdemir","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17617994/medium/7259a29db9941c6171a8cbbd643b92bd.png"},{"username":"sjonkreutz","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17618306/medium/7601c45d015189a863656e21348d223b.png"},{"username":"volovich0377","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17620388/medium/c929a8fbd24f96d17620fa497ade7309.png"},{"username":"Hamstio1","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17624898/medium/406e0bf40094c24a01c3064f8f5b2a82.png"},{"username":"i3laa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17627462/medium/613a9d283ed8b69819ee181903851660.jpeg"},{"username":"bastiengrignon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17629884/medium/ddfc3339285bd65195fcd834e512e9b7.jpeg"},{"username":"kauhee","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17644600/medium/def1b9066cf9275b4273a5a5dca7f325.png"},{"username":"hongminzheng","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17683860/medium/a764f4963912777d27a7cd98e136a2b2.png"},{"username":"d-lindahl","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17726729/medium/cbde348582fbabcfadd89a56cd5a0b40.png"},{"username":"Enoal-Fauchille-Bolle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17734649/medium/6e6fb29198782dc7856ea21811db669c.jpeg"},{"username":"manos-grigorakis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17737973/medium/b37f685587c920c81fdaf9a357962434.jpeg"},{"username":"SertraFurr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17738703/medium/5f1e9f270e315ee3185cf2ccb3f5a833.png"},{"username":"Kle.Ma","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17739207/medium/b767d6093e6608f251ca152f53d359b8_default.png"},{"username":"WalkerLukas","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17744485/medium/87508ce83a9b6e5391f55883a66a054b.png"},{"username":"mtya","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17748447/medium/f574d5a770d74814f8c49ee68e00f5b7.jpeg"},{"username":"Elaktrato","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17750977/medium/f4109d379f29dc8ea2e7799ac9e208c8.png"},{"username":"marcelmeis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17753627/medium/4ba32116c27e427d3073e45713f6564e.png"},{"username":"ProKafelek12e","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17760377/medium/5199af152f1ea42cee718e7729bd41ff.png"},{"username":"zalaghi","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17763367/medium/a06f7b15222663517b58b8dc8902f8a1.png"},{"username":"Amato21","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17776775/medium/214b1f1581a85fe10f1ae3241aab43e4.png"},{"username":"jabalv","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17778347/medium/14dd47fff64f6543e6015be7373420c3.png"},{"username":"agiledivider","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17801131/medium/0039d926d5a716e712e36b06004369ab_default.png"},{"username":"nocteln","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17806203/medium/fc84143ba6b94cc8e8a37415a0d91fb0_default.png"},{"username":"b.yatsenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17810347/medium/6db1ce1d6b9f07afbcec0ca43b8015c8.png"}] \ No newline at end of file diff --git a/tools/homarr-dev/README.md b/tools/homarr-dev/README.md new file mode 100644 index 000000000..99fe89640 --- /dev/null +++ b/tools/homarr-dev/README.md @@ -0,0 +1,103 @@ +# Homarr Developer CLI + +Build and launch local Homarr images and GHCR pull-request builds, then manage them from responsive terminal dashboards. + +## Requirements + +- Docker or OrbStack +- Go 1.25+ to build from source +- GitHub CLI authenticated with `gh auth login` for pull-request features + +## Setup + +```sh +pnpm install +``` + +Create `.env` from `.env.example` and set `DB_URL` to an absolute path for the SQLite file before running the migration. In a POSIX shell, use `cp .env.example .env`; in PowerShell, use `Copy-Item .env.example .env`. +Then run `pnpm db:migration:sqlite:run` to create or update the database. The migration command also seeds a new database. Use `pnpm db:seed` explicitly when you need to seed an existing database. Start Redis separately with `pnpm docker:dev:up` when it is needed. +The examples below use `pnpm dev:cli -- ...`, which works from POSIX shells and PowerShell. If you prefer a global command, install it with `pnpm dev:cli:install` and add your Go bin directory to `PATH`. + +## Build + +```sh +pnpm dev:cli -- build feature +pnpm dev:cli -- build --pr 6441 +pnpm dev:cli -- rebuild feature +``` + +Checkout builds are tagged as `homarr:`. The source checkout and revision are recorded on the image so `homarr rebuild` and the development dashboard can rebuild it later. PR builds use a temporary checkout and default to `homarr:pr-`. + +## Launch + +```sh +pnpm dev:cli -- run dev +pnpm dev:cli -- run --detach dev +pnpm dev:cli -- run --pr 6441 +pnpm dev:cli -- run --pr 6441 --demo +pnpm dev:cli -- run --env FOO=bar --env FEATURE=true dev +``` + +PR launches always pull the latest GHCR tag before starting. Local tags remain local. +The first launch generates a per-user encryption key in the OS config directory and reuses it for later launches. Set `HOMARR_DEV_SECRET_ENCRYPTION_KEY` to a 64-character hexadecimal key to override it. + +The command reference below assumes the optional `homarr` installation. Without it, prefix each command with `pnpm dev:cli --` (for example, `pnpm dev:cli -- dev`). + +## Commands + +```text +homarr Interactive local and remote image browser +homarr dev Explicit alias for the main browser +homarr dash Start on the instance dashboard +homarr build Build this checkout as homarr: +homarr build --pr Build a PR locally from a temporary checkout +homarr rebuild Rebuild from recorded provenance +homarr list Script-friendly instance list +homarr logs Follow logs +homarr open Open in browser +homarr stop Stop +homarr restart Restart +homarr remove Force-remove +homarr doctor Check Docker and optional CLI integrations +``` + +## Development Browser + +```text +/ Filter by PR number, title, author, branch, CI, image, state, or port +↑/↓ or j/k Select +Enter or Space Start the matching local build, otherwise pull remote; stop when running +R Build a remote PR locally in the background or rebuild a local image +p Pull a remote PR image and redeploy, preserving port and volume +m Toggle demo mode for the next launch +o Open PR on GitHub +a Open running app +l Toggle inline logs for the selected running PR +f Follow or pause inline logs +Page Up/Down Scroll inline logs +b Show or hide bot PRs +r Refresh +d Switch to the instance dashboard +q Quit; during a pull, cancel it +``` + +Pull progress, layer completion, local build provenance, selected PR details, CI state, image availability, inline logs, and the final port remain inside the TUI. +Local PR images are folded into their remote PR row only when the recorded revision exactly matches the current GitHub head SHA. They are marked `◆ local` and preferred by Enter; outdated builds remain separate local rows. Navigation and the `d` dashboard toggle remain available while a local build runs. + +## Instance Dashboard + +```text +/ Filter by name, image, state, health, port, or URL +↑/↓ or j/k Select +l Toggle inline logs +f Follow or pause logs +Page Up/Down Scroll logs +s Stop +R Restart +x Remove with confirmation +o Open in browser +c Copy URL +r Refresh +d Switch to the development browser +q Quit +``` diff --git a/tools/homarr-dev/go.mod b/tools/homarr-dev/go.mod new file mode 100644 index 000000000..6a40e27cf --- /dev/null +++ b/tools/homarr-dev/go.mod @@ -0,0 +1,32 @@ +module github.com/homarr-labs/homarr/tools/homarr-dev + +go 1.25.0 + +require ( + charm.land/bubbles/v2 v2.1.1 + charm.land/bubbletea/v2 v2.0.8 + charm.land/lipgloss/v2 v2.0.5 + github.com/atotto/clipboard v0.1.4 + github.com/spf13/cobra v1.10.2 +) + +require ( + github.com/charmbracelet/colorprofile v0.4.3 // indirect + github.com/charmbracelet/harmonica v0.2.0 // indirect + github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7 // indirect + github.com/charmbracelet/x/ansi v0.11.7 // indirect + github.com/charmbracelet/x/term v0.2.2 // indirect + github.com/charmbracelet/x/termios v0.1.1 // indirect + github.com/charmbracelet/x/windows v0.2.2 // indirect + github.com/clipperhouse/displaywidth v0.11.0 // indirect + github.com/clipperhouse/uax29/v2 v2.7.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/lucasb-eyer/go-colorful v1.4.0 // indirect + github.com/mattn/go-runewidth v0.0.24 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/spf13/pflag v1.0.9 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/sys v0.46.0 // indirect +) diff --git a/tools/homarr-dev/go.sum b/tools/homarr-dev/go.sum new file mode 100644 index 000000000..cf4f9f13b --- /dev/null +++ b/tools/homarr-dev/go.sum @@ -0,0 +1,56 @@ +charm.land/bubbles/v2 v2.1.1 h1:7r55WzBxpo/R3z98hGmY7KKPd3ET6vsf0Fb9sDHOV60= +charm.land/bubbles/v2 v2.1.1/go.mod h1:GE6M31gaWZVXzGw73OeuTTgy4lX+OtkH0E5ymnNsHxo= +charm.land/bubbletea/v2 v2.0.8 h1:SxTJMhCAI3lbPmy4SgX5LWZ24AdINr4I6UEqzZvYJuY= +charm.land/bubbletea/v2 v2.0.8/go.mod h1:2SkdgoTXluXJHOUwAoRlRXF/28vklb1rFl6GcgV1/ss= +charm.land/lipgloss/v2 v2.0.5 h1:kbNxgeeUOYv5J0YdpxFjfvf3dFvqH8Aci4zB6xqFtrY= +charm.land/lipgloss/v2 v2.0.5/go.mod h1:9oqhxt4yxIMe6q5A4kHr44DremZk7J9UNh74GlWa5nc= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ12Gv5o= +github.com/aymanbagabas/go-udiff v0.4.1/go.mod h1:0L9PGwj20lrtmEMeyw4WKJ/TMyDtvAoK9bf2u/mNo3w= +github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q= +github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q= +github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ= +github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= +github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7 h1:3FmWoGNWK4STvqg0O0Aeav2T7rodWJAPeF0QpH+8gFw= +github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7/go.mod h1:f/jRa757WUmaOZrbPspXymbg/GnbF+rwe4OLsG7aXYo= +github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI= +github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ= +github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6gmGpCE7F3FcjaOEKYriCvpmIN4+6OS/RD0vm4uIA= +github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f/go.mod h1:IfZAMTHB6XkZSeXUqriemErjAWCCzT0LwjKFYCZyw0I= +github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= +github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= +github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= +github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo= +github.com/charmbracelet/x/windows v0.2.2 h1:IofanmuvaxnKHuV04sC0eBy/smG6kIKrWG2/jYn2GuM= +github.com/charmbracelet/x/windows v0.2.2/go.mod h1:/8XtdKZzedat74NQFn0NGlGL4soHB0YQZrETF96h75k= +github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8= +github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0= +github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= +github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/lucasb-eyer/go-colorful v1.4.0 h1:UtrWVfLdarDgc44HcS7pYloGHJUjHV/4FwW4TvVgFr4= +github.com/lucasb-eyer/go-colorful v1.4.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU= +github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/tools/homarr-dev/internal/docker/docker.go b/tools/homarr-dev/internal/docker/docker.go new file mode 100644 index 000000000..da5f2fa92 --- /dev/null +++ b/tools/homarr-dev/internal/docker/docker.go @@ -0,0 +1,427 @@ +package docker + +import ( + "context" + "crypto/rand" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "net" + "os" + "os/exec" + "path/filepath" + "strconv" + "strings" + "time" +) + +const developmentEncryptionKeyEnv = "HOMARR_DEV_SECRET_ENCRYPTION_KEY" + +type Container struct { + ID string + Name string + Image string + Status string + Ports string + State string +} + +func (c Container) HostPort() string { + for _, mapping := range strings.Split(c.Ports, ", ") { + if strings.HasSuffix(mapping, "->7575/tcp") { + parts := strings.Split(mapping, "->") + left := parts[0] + if i := strings.LastIndex(left, ":"); i >= 0 { + return left[i+1:] + } + return left + } + } + return "" +} + +func (c Container) Running() bool { + return c.State == "running" +} + +func List() ([]Container, error) { + out, err := exec.Command("docker", "ps", "-a", + "--filter", "name=homarr", + "--format", "{{json .}}").Output() + if err != nil { + return nil, err + } + + var containers []Container + for _, line := range strings.Split(strings.TrimSpace(string(out)), "\n") { + if line == "" { + continue + } + var raw struct { + ID string + Names string + Image string + Status string + Ports string + State string + } + if err := json.Unmarshal([]byte(line), &raw); err != nil { + continue + } + containers = append(containers, Container{ + ID: raw.ID, + Name: raw.Names, + Image: raw.Image, + Status: raw.Status, + Ports: raw.Ports, + State: raw.State, + }) + } + filtered := containers[:0] + for _, c := range containers { + if c.Name == "homarr" || strings.HasPrefix(c.Name, "homarr_") { + filtered = append(filtered, c) + } + } + return filtered, nil +} + +func FindFreePort(start int) int { + if start > 65535 { + return 0 + } + used := usedDockerPorts() + start = max(start, 1) + for port := start; port <= 65535; port++ { + if used[port] { + continue + } + listener, err := net.Listen("tcp4", fmt.Sprintf("0.0.0.0:%d", port)) + if err == nil { + _ = listener.Close() + return port + } + } + return 0 +} + +func usedDockerPorts() map[int]bool { + out, err := exec.Command("docker", "ps", "--format", "{{.Ports}}").Output() + if err != nil { + return make(map[int]bool) + } + return parseUsedDockerPorts(out) +} + +func parseUsedDockerPorts(out []byte) map[int]bool { + used := make(map[int]bool) + for _, line := range strings.Split(string(out), "\n") { + for _, mapping := range strings.Split(line, ",") { + left, _, found := strings.Cut(mapping, "->") + if !found { + continue + } + colon := strings.LastIndex(left, ":") + if colon < 0 { + continue + } + ports := strings.SplitN(strings.TrimSpace(left[colon+1:]), "-", 2) + first, err := strconv.Atoi(ports[0]) + if err != nil { + continue + } + last := first + if len(ports) == 2 { + if parsed, err := strconv.Atoi(ports[1]); err == nil { + last = parsed + } + } + for port := first; port <= last; port++ { + used[port] = true + } + } + } + return used +} + +func IsRunning(name string) bool { + containers, _ := List() + for _, c := range containers { + if c.Name == name && c.Running() { + return true + } + } + return false +} + +type StartOptions struct { + Name string + Image string + Volume string + HostPort int + Env []string + Platform string + PullAlways bool + Daemon bool +} + +func Start(opts StartOptions) error { + encryptionKey, err := developmentEncryptionKey() + if err != nil { + return err + } + + if opts.PullAlways { + cmd := PullCommand(opts.Image, opts.Platform) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + return fmt.Errorf("pull %s: %w", opts.Image, err) + } + } + + _ = exec.Command("docker", "rm", "-f", opts.Name).Run() + + args := []string{"run", "--rm", "--name", opts.Name, + "-e", "SECRET_ENCRYPTION_KEY=" + encryptionKey, + } + if opts.Platform != "" { + args = append(args, "--platform", opts.Platform) + } + if opts.Daemon { + args = append(args, "-d") + } else { + args = append(args, "-it") + } + for _, env := range opts.Env { + args = append(args, "-e", env) + } + args = append(args, + "-v", opts.Volume+":/appdata", + "-v", "/var/run/docker.sock:/var/run/docker.sock:ro", + "-p", fmt.Sprintf("%d:7575", opts.HostPort), + opts.Image, + ) + + cmd := exec.Command("docker", args...) + if opts.Daemon { + out, err := cmd.CombinedOutput() + if err != nil { + return fmt.Errorf("%w: %s", err, cleanOutput(out)) + } + return nil + } + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + stderr := &tailBuffer{} + cmd.Stderr = io.MultiWriter(os.Stderr, stderr) + if err := cmd.Run(); err != nil { + return fmt.Errorf("%w: %s", err, cleanOutput(stderr.data)) + } + return nil +} + +func developmentEncryptionKey() (string, error) { + if key := os.Getenv(developmentEncryptionKeyEnv); key != "" { + return validateDevelopmentEncryptionKey(key) + } + configDir, err := os.UserConfigDir() + if err != nil { + return "", fmt.Errorf("locate user config directory: %w", err) + } + return persistedDevelopmentEncryptionKey(configDir) +} + +func persistedDevelopmentEncryptionKey(configDir string) (string, error) { + dir := filepath.Join(configDir, "homarr-dev") + path := filepath.Join(dir, "secret-encryption-key") + if key, found, err := readDevelopmentEncryptionKey(path); found || err != nil { + return key, err + } + + if err := os.MkdirAll(dir, 0o700); err != nil { + return "", fmt.Errorf("create development config directory: %w", err) + } + lockPath := path + ".lock" + for attempts := 0; ; attempts++ { + if err := os.Mkdir(lockPath, 0o700); err == nil { + break + } else if !os.IsExist(err) { + return "", fmt.Errorf("lock development encryption key: %w", err) + } + if key, found, err := readDevelopmentEncryptionKey(path); found || err != nil { + return key, err + } + if attempts == 99 { + return "", fmt.Errorf("timed out waiting for development encryption key lock %q", lockPath) + } + time.Sleep(10 * time.Millisecond) + } + defer func() { _ = os.Remove(lockPath) }() + + if key, found, err := readDevelopmentEncryptionKey(path); found || err != nil { + return key, err + } + keyBytes := make([]byte, 32) + if _, err := rand.Read(keyBytes); err != nil { + return "", fmt.Errorf("generate development encryption key: %w", err) + } + key := hex.EncodeToString(keyBytes) + file, err := os.CreateTemp(dir, "secret-encryption-key-*.tmp") + if err != nil { + return "", fmt.Errorf("create development encryption key: %w", err) + } + tempPath := file.Name() + defer func() { _ = os.Remove(tempPath) }() + if _, err := file.WriteString(key + "\n"); err != nil { + _ = file.Close() + return "", fmt.Errorf("write development encryption key: %w", err) + } + if err := file.Close(); err != nil { + return "", fmt.Errorf("close development encryption key: %w", err) + } + if err := os.Chmod(tempPath, 0o600); err != nil { + return "", fmt.Errorf("secure development encryption key: %w", err) + } + if err := os.Rename(tempPath, path); err != nil { + return "", fmt.Errorf("persist development encryption key: %w", err) + } + return key, nil +} + +func readDevelopmentEncryptionKey(path string) (string, bool, error) { + data, err := os.ReadFile(path) + if os.IsNotExist(err) { + return "", false, nil + } + if err != nil { + return "", false, fmt.Errorf("read development encryption key: %w", err) + } + key, err := validateDevelopmentEncryptionKey(strings.TrimSpace(string(data))) + return key, true, err +} + +func validateDevelopmentEncryptionKey(key string) (string, error) { + decoded, err := hex.DecodeString(key) + if err != nil || len(decoded) != 32 { + return "", fmt.Errorf("development encryption key must contain exactly 64 hexadecimal characters") + } + return key, nil +} + +type tailBuffer struct { + data []byte +} + +func (b *tailBuffer) Write(p []byte) (int, error) { + const limit = 32 * 1024 + b.data = append(b.data, p...) + if len(b.data) > limit { + b.data = b.data[len(b.data)-limit:] + } + return len(p), nil +} + +func cleanOutput(out []byte) string { + lines := strings.Split(strings.TrimSpace(string(out)), "\n") + cleaned := make([]string, 0, len(lines)) + for _, line := range lines { + line = strings.TrimSpace(line) + if strings.HasPrefix(line, "WARNING: The requested image's platform") || isContainerID(line) { + continue + } + if line != "" { + cleaned = append(cleaned, line) + } + } + return strings.Join(cleaned, "\n") +} + +func isContainerID(value string) bool { + if len(value) != 64 { + return false + } + for _, r := range value { + if !(r >= '0' && r <= '9') && !(r >= 'a' && r <= 'f') { + return false + } + } + return true +} + +func PullCommand(image, platform string) *exec.Cmd { + return PullCommandContext(context.Background(), image, platform) +} + +func PullCommandContext(ctx context.Context, image, platform string) *exec.Cmd { + args := []string{"pull"} + if platform != "" { + args = append(args, "--platform", platform) + } + args = append(args, image) + cmd := exec.CommandContext(ctx, "docker", args...) + if platform != "" { + cmd.Env = append(os.Environ(), "DOCKER_DEFAULT_PLATFORM="+platform) + } + return cmd +} + +func IsPortConflict(err error) bool { + if err == nil { + return false + } + message := strings.ToLower(err.Error()) + return strings.Contains(message, "port is already allocated") || + strings.Contains(message, "address already in use") || + strings.Contains(message, "failed programming external connectivity") +} + +func Stop(name string) error { + cmd := exec.Command("docker", "stop", name) + out, err := cmd.CombinedOutput() + if err != nil { + return fmt.Errorf("%w: %s", err, strings.TrimSpace(string(out))) + } + return nil +} + +func Restart(name string) error { + cmd := exec.Command("docker", "restart", name) + out, err := cmd.CombinedOutput() + if err != nil { + return fmt.Errorf("%w: %s", err, strings.TrimSpace(string(out))) + } + return nil +} + +func Remove(name string) error { + cmd := exec.Command("docker", "rm", "-f", name) + out, err := cmd.CombinedOutput() + if err != nil { + return fmt.Errorf("%w: %s", err, strings.TrimSpace(string(out))) + } + return nil +} + +func CheckImage(image string) (bool, error) { + cmd := exec.Command("docker", "manifest", "inspect", image) + out, err := cmd.CombinedOutput() + if err == nil { + return true, nil + } + message := strings.ToLower(string(out)) + if strings.Contains(message, "manifest unknown") || strings.Contains(message, "no such manifest") { + return false, nil + } + return false, fmt.Errorf("check image %s: %w: %s", image, err, strings.TrimSpace(string(out))) +} + +func FollowLogs(name string) error { + cmd := exec.Command("docker", "logs", "-f", "--tail", "100", name) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() +} diff --git a/tools/homarr-dev/internal/docker/docker_test.go b/tools/homarr-dev/internal/docker/docker_test.go new file mode 100644 index 000000000..3422c703d --- /dev/null +++ b/tools/homarr-dev/internal/docker/docker_test.go @@ -0,0 +1,125 @@ +package docker + +import ( + "encoding/hex" + "errors" + "os" + "path/filepath" + "strings" + "testing" +) + +func TestContainerHostPort(t *testing.T) { + c := Container{Ports: "0.0.0.0:7576->7575/tcp, [::]:7576->7575/tcp"} + if got := c.HostPort(); got != "7576" { + t.Fatalf("HostPort() = %q, want 7576", got) + } +} + +func TestIsPortConflict(t *testing.T) { + for _, message := range []string{ + "Bind for 0.0.0.0:7575 failed: port is already allocated", + "driver failed programming external connectivity on endpoint", + } { + if !IsPortConflict(errors.New(message)) { + t.Fatalf("expected port conflict for %q", message) + } + } + if IsPortConflict(errors.New("manifest unknown")) { + t.Fatal("manifest error classified as port conflict") + } +} + +func TestParseUsedDockerPortsPreservesLineBoundaries(t *testing.T) { + ports := parseUsedDockerPorts([]byte("6379/tcp\n0.0.0.0:7575->7575/tcp, [::]:7575->7575/tcp\n0.0.0.0:8000-8002->8000-8002/tcp\n")) + for _, port := range []int{7575, 8000, 8001, 8002} { + if !ports[port] { + t.Fatalf("port %d was not detected", port) + } + } +} + +func TestFindFreePortRejectsOutOfRangeStart(t *testing.T) { + if port := FindFreePort(65536); port != 0 { + t.Fatalf("port = %d, want 0", port) + } +} + +func TestDevelopmentEncryptionKeyUsesEnvironmentOverride(t *testing.T) { + want := strings.Repeat("a", 64) + t.Setenv(developmentEncryptionKeyEnv, want) + got, err := developmentEncryptionKey() + if err != nil { + t.Fatal(err) + } + if got != want { + t.Fatalf("key = %q, want environment value", got) + } +} + +func TestPersistedDevelopmentEncryptionKeyIsReused(t *testing.T) { + configDir := t.TempDir() + first, err := persistedDevelopmentEncryptionKey(configDir) + if err != nil { + t.Fatal(err) + } + second, err := persistedDevelopmentEncryptionKey(configDir) + if err != nil { + t.Fatal(err) + } + if first != second { + t.Fatal("persisted key changed between reads") + } + decoded, err := hex.DecodeString(first) + if err != nil || len(decoded) != 32 { + t.Fatalf("generated key is not 32 bytes: %q", first) + } + info, err := os.Stat(filepath.Join(configDir, "homarr-dev", "secret-encryption-key")) + if err != nil { + t.Fatal(err) + } + if info.Mode().Perm() != 0o600 { + t.Fatalf("key permissions = %o, want 600", info.Mode().Perm()) + } +} + +func TestPersistedDevelopmentEncryptionKeyRejectsInvalidValue(t *testing.T) { + configDir := t.TempDir() + dir := filepath.Join(configDir, "homarr-dev") + if err := os.Mkdir(dir, 0o700); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(filepath.Join(dir, "secret-encryption-key"), []byte("invalid\n"), 0o600); err != nil { + t.Fatal(err) + } + if _, err := persistedDevelopmentEncryptionKey(configDir); err == nil { + t.Fatal("expected invalid persisted key to fail") + } +} + +func TestPersistedDevelopmentEncryptionKeyConcurrentCreation(t *testing.T) { + configDir := t.TempDir() + type result struct { + key string + err error + } + results := make(chan result, 20) + for range 20 { + go func() { + key, err := persistedDevelopmentEncryptionKey(configDir) + results <- result{key: key, err: err} + }() + } + var first string + for range 20 { + result := <-results + if result.err != nil { + t.Fatal(result.err) + } + if first == "" { + first = result.key + } else if result.key != first { + t.Fatal("concurrent callers received different keys") + } + } +} diff --git a/tools/homarr-dev/internal/docker/images.go b/tools/homarr-dev/internal/docker/images.go new file mode 100644 index 000000000..cb4f16e66 --- /dev/null +++ b/tools/homarr-dev/internal/docker/images.go @@ -0,0 +1,149 @@ +package docker + +import ( + "context" + "encoding/json" + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + "regexp" + "strconv" + "strings" +) + +const ( + SourceLabel = "org.homarr.dev.source" + RevisionLabel = "org.homarr.dev.revision" + PRLabel = "org.homarr.dev.pr" +) + +var tagPattern = regexp.MustCompile(`^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$`) + +type Image struct { + ID string + Tag string + Source string + Revision string + PRNumber int +} + +func (image Image) Reference() string { + return "homarr:" + image.Tag +} + +type imageListRow struct { + ID string + Repository string + Tag string +} + +func parseImageList(output []byte) ([]Image, error) { + images := make([]Image, 0) + for _, line := range strings.Split(strings.TrimSpace(string(output)), "\n") { + if line == "" { + continue + } + var row imageListRow + if err := json.Unmarshal([]byte(line), &row); err != nil { + return nil, fmt.Errorf("parse local Docker image: %w", err) + } + if row.Repository == "homarr" && row.Tag != "" { + images = append(images, Image{ID: row.ID, Tag: row.Tag}) + } + } + return images, nil +} + +func ListLocalImages(ctx context.Context) ([]Image, error) { + out, err := exec.CommandContext(ctx, "docker", "image", "ls", "--filter", "reference=homarr:*", "--format", "{{json .}}").Output() + if err != nil { + return nil, fmt.Errorf("list local Homarr images: %w", err) + } + images, err := parseImageList(out) + if err != nil { + return nil, err + } + labelsByImage, err := inspectImageLabels(ctx, images) + if err != nil { + return nil, err + } + for index, labels := range labelsByImage { + images[index].Source = labels[SourceLabel] + images[index].Revision = labels[RevisionLabel] + images[index].PRNumber, _ = strconv.Atoi(labels[PRLabel]) + } + return images, nil +} + +func inspectImageLabels(ctx context.Context, images []Image) ([]map[string]string, error) { + if len(images) == 0 { + return nil, nil + } + args := []string{"image", "inspect", "--format", "{{json .Config.Labels}}"} + for _, image := range images { + args = append(args, image.Reference()) + } + out, err := exec.CommandContext(ctx, "docker", args...).Output() + if err != nil { + return nil, fmt.Errorf("inspect local Homarr images: %w", err) + } + lines := strings.Split(strings.TrimSpace(string(out)), "\n") + if len(lines) != len(images) { + return nil, fmt.Errorf("inspect returned %d images, expected %d", len(lines), len(images)) + } + labelsByImage := make([]map[string]string, len(images)) + for index, line := range lines { + labelsByImage[index] = make(map[string]string) + if line == "null" { + continue + } + if err := json.Unmarshal([]byte(line), &labelsByImage[index]); err != nil { + return nil, fmt.Errorf("parse labels for %s: %w", images[index].Reference(), err) + } + } + return labelsByImage, nil +} + +type BuildOptions struct { + Context string + Tag string + Source string + Revision string + PRNumber int +} + +func BuildCommand(ctx context.Context, options BuildOptions) (*exec.Cmd, error) { + if !tagPattern.MatchString(options.Tag) { + return nil, fmt.Errorf("invalid image name %q", options.Tag) + } + contextPath, err := filepath.Abs(options.Context) + if err != nil { + return nil, fmt.Errorf("resolve build context: %w", err) + } + if info, err := os.Stat(filepath.Join(contextPath, "Dockerfile")); err != nil || info.IsDir() { + return nil, fmt.Errorf("%s does not contain a Dockerfile", contextPath) + } + args := []string{"build", "--label", SourceLabel + "=" + options.Source, "--label", RevisionLabel + "=" + options.Revision} + if options.PRNumber > 0 { + args = append(args, "--label", fmt.Sprintf("%s=%d", PRLabel, options.PRNumber)) + } + args = append(args, "-t", "homarr:"+options.Tag, ".") + command := exec.CommandContext(ctx, "docker", args...) + command.Dir = contextPath + return command, nil +} + +func BuildContext(ctx context.Context, options BuildOptions, stdout, stderr io.Writer) error { + command, err := BuildCommand(ctx, options) + if err != nil { + return err + } + command.Stdout = stdout + command.Stderr = stderr + if err := command.Run(); err != nil { + return fmt.Errorf("build homarr:%s: %w", options.Tag, err) + } + return nil +} diff --git a/tools/homarr-dev/internal/docker/images_test.go b/tools/homarr-dev/internal/docker/images_test.go new file mode 100644 index 000000000..559a9423a --- /dev/null +++ b/tools/homarr-dev/internal/docker/images_test.go @@ -0,0 +1,69 @@ +package docker + +import ( + "os" + "testing" +) + +func TestParseImageListFiltersHomarrTags(t *testing.T) { + output := []byte("{\"ID\":\"sha256:1\",\"Repository\":\"homarr\",\"Tag\":\"dev\"}\n{\"ID\":\"sha256:2\",\"Repository\":\"other\",\"Tag\":\"dev\"}\n") + images, err := parseImageList(output) + if err != nil { + t.Fatal(err) + } + if len(images) != 1 || images[0].Reference() != "homarr:dev" { + t.Fatalf("images = %#v, want homarr:dev", images) + } +} + +func TestInspectImageLabelsWithNoImages(t *testing.T) { + labels, err := inspectImageLabels(t.Context(), nil) + if err != nil { + t.Fatal(err) + } + if labels != nil { + t.Fatalf("labels = %#v, want nil", labels) + } +} + +func TestBuildCommandIncludesProvenance(t *testing.T) { + command, err := BuildCommand(t.Context(), BuildOptions{ + Context: "../../../..", + Tag: "feature", + Source: "/tmp/homarr", + Revision: "abc123", + PRNumber: 42, + }) + if err != nil { + t.Fatal(err) + } + want := []string{"docker", "build", "--label", SourceLabel + "=/tmp/homarr", "--label", RevisionLabel + "=abc123", "--label", PRLabel + "=42", "-t", "homarr:feature", "."} + if len(command.Args) != len(want) { + t.Fatalf("args = %v, want %v", command.Args, want) + } + for index := range want { + if command.Args[index] != want[index] { + t.Fatalf("args = %v, want %v", command.Args, want) + } + } +} + +func TestListLocalImagesIntegration(t *testing.T) { + wantTag := os.Getenv("HOMARR_TEST_LOCAL_IMAGE") + if wantTag == "" { + t.Skip("set HOMARR_TEST_LOCAL_IMAGE to a local homarr image tag") + } + images, err := ListLocalImages(t.Context()) + if err != nil { + t.Fatal(err) + } + for _, image := range images { + if image.Tag == wantTag { + if image.Source == "" || image.Revision == "" { + t.Fatalf("image %#v is missing provenance", image) + } + return + } + } + t.Fatalf("homarr:%s was not discovered", wantTag) +} diff --git a/tools/homarr-dev/internal/gh/gh.go b/tools/homarr-dev/internal/gh/gh.go new file mode 100644 index 000000000..c4e61e6fe --- /dev/null +++ b/tools/homarr-dev/internal/gh/gh.go @@ -0,0 +1,199 @@ +package gh + +import ( + "context" + "encoding/json" + "fmt" + "os/exec" + "strings" + "sync" + "time" +) + +const Repo = "homarr-labs/homarr" +const prCacheTTL = 5 * time.Minute + +var prListCache = struct { + sync.Mutex + entries map[int]cachedPRs +}{entries: make(map[int]cachedPRs)} + +type cachedPRs struct { + prs []PR + fetchedAt time.Time +} + +func isBot(login string) bool { + return strings.HasSuffix(login, "[bot]") || strings.HasPrefix(login, "app/") +} + +type PR struct { + Number int `json:"number"` + Title string `json:"title"` + Author string `json:"author"` + HeadRef string `json:"headRefName"` + HeadSHA string `json:"headRefOid"` + CIState string `json:"ciState"` + IsDraft bool `json:"isDraft"` + UpdatedAt string `json:"updatedAt"` +} + +type rawPR struct { + Number int `json:"number"` + Title string `json:"title"` + IsDraft bool `json:"isDraft"` + Author struct { + Login string `json:"login"` + } `json:"author"` + HeadRefName string `json:"headRefName"` + HeadRefOID string `json:"headRefOid"` + UpdatedAt string `json:"updatedAt"` + StatusCheckRollup []rawCheck `json:"statusCheckRollup"` +} + +type rawCheck struct { + Status string `json:"status"` + Conclusion string `json:"conclusion"` + State string `json:"state"` +} + +func rollupState(checks []rawCheck) string { + if len(checks) == 0 { + return "NONE" + } + failed, pending := 0, 0 + for _, c := range checks { + if c.State != "" { + switch c.State { + case "SUCCESS": + case "PENDING", "EXPECTED": + pending++ + default: + failed++ + } + continue + } + if c.Status != "COMPLETED" { + pending++ + continue + } + switch c.Conclusion { + case "SUCCESS", "SKIPPED", "NEUTRAL": + default: + failed++ + } + } + if failed > 0 { + return "FAILURE" + } + if pending > 0 { + return "PENDING" + } + return "SUCCESS" +} + +func ListPRs(ctx context.Context, limit int, includeBots bool) ([]PR, error) { + return listPRs(ctx, limit, includeBots, false) +} + +func RefreshPRs(ctx context.Context, limit int, includeBots bool) ([]PR, error) { + return listPRs(ctx, limit, includeBots, true) +} + +func listPRs(ctx context.Context, limit int, includeBots, refresh bool) ([]PR, error) { + cached, fetchedAt := cachedPRList(limit) + if !refresh && !fetchedAt.IsZero() && time.Since(fetchedAt) < prCacheTTL { + return filterPRs(cached, includeBots), nil + } + + out, err := exec.CommandContext(ctx, "gh", "pr", "list", + "--repo", Repo, + "--state", "open", + "--limit", fmt.Sprint(limit), + "--json", "number,title,author,headRefName,headRefOid,updatedAt,isDraft,statusCheckRollup", + ).CombinedOutput() + if err != nil { + err = commandError(err, out) + if len(cached) > 0 { + return filterPRs(cached, includeBots), fmt.Errorf("%w; showing cached PRs from %s", err, fetchedAt.Format(time.Kitchen)) + } + return nil, err + } + + var raws []rawPR + if err := json.Unmarshal(out, &raws); err != nil { + return nil, err + } + + prs := make([]PR, 0, len(raws)) + for _, r := range raws { + prs = append(prs, PR{ + Number: r.Number, + Title: r.Title, + Author: r.Author.Login, + HeadRef: r.HeadRefName, + HeadSHA: r.HeadRefOID, + CIState: rollupState(r.StatusCheckRollup), + IsDraft: r.IsDraft, + UpdatedAt: r.UpdatedAt, + }) + } + storePRList(limit, prs) + return filterPRs(prs, includeBots), nil +} + +func cachedPRList(limit int) ([]PR, time.Time) { + prListCache.Lock() + defer prListCache.Unlock() + entry := prListCache.entries[limit] + return append([]PR(nil), entry.prs...), entry.fetchedAt +} + +func storePRList(limit int, prs []PR) { + prListCache.Lock() + defer prListCache.Unlock() + prListCache.entries[limit] = cachedPRs{prs: append([]PR(nil), prs...), fetchedAt: time.Now()} +} + +func filterPRs(prs []PR, includeBots bool) []PR { + filtered := make([]PR, 0, len(prs)) + for _, pr := range prs { + if includeBots || !isBot(pr.Author) { + filtered = append(filtered, pr) + } + } + return filtered +} + +func commandError(err error, output []byte) error { + detail := strings.TrimSpace(string(output)) + if detail == "" { + return err + } + return fmt.Errorf("%s: %w", detail, err) +} + +func GetPR(ctx context.Context, number int) (*PR, error) { + out, err := exec.CommandContext(ctx, "gh", "pr", "view", fmt.Sprint(number), + "--repo", Repo, + "--json", "number,title,author,headRefName,headRefOid,updatedAt,isDraft,statusCheckRollup", + ).CombinedOutput() + if err != nil { + return nil, commandError(err, out) + } + + var r rawPR + if err := json.Unmarshal(out, &r); err != nil { + return nil, err + } + return &PR{ + Number: r.Number, + Title: r.Title, + Author: r.Author.Login, + HeadRef: r.HeadRefName, + HeadSHA: r.HeadRefOID, + CIState: rollupState(r.StatusCheckRollup), + IsDraft: r.IsDraft, + UpdatedAt: r.UpdatedAt, + }, nil +} diff --git a/tools/homarr-dev/internal/gh/gh_test.go b/tools/homarr-dev/internal/gh/gh_test.go new file mode 100644 index 000000000..64e14e20c --- /dev/null +++ b/tools/homarr-dev/internal/gh/gh_test.go @@ -0,0 +1,91 @@ +package gh + +import ( + "errors" + "os" + "strings" + "testing" + "time" +) + +func TestIsBot(t *testing.T) { + tests := []struct { + login string + want bool + }{ + {login: "app/homarr-renovate", want: true}, + {login: "dependabot[bot]", want: true}, + {login: "ajnart", want: false}, + } + + for _, test := range tests { + if got := isBot(test.login); got != test.want { + t.Errorf("isBot(%q) = %v, want %v", test.login, got, test.want) + } + } +} + +func TestRollupStateHandlesChecksAndStatuses(t *testing.T) { + tests := []struct { + name string + checks []rawCheck + want string + }{ + {name: "check success", checks: []rawCheck{{Status: "COMPLETED", Conclusion: "SUCCESS"}}, want: "SUCCESS"}, + {name: "status failure", checks: []rawCheck{{State: "FAILURE"}}, want: "FAILURE"}, + {name: "status pending", checks: []rawCheck{{State: "PENDING"}}, want: "PENDING"}, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if got := rollupState(test.checks); got != test.want { + t.Fatalf("rollupState() = %q, want %q", got, test.want) + } + }) + } +} + +func TestCachedPRListFiltersBotsWithoutMutatingCache(t *testing.T) { + limit := 9876 + storePRList(limit, []PR{{Number: 1, Author: "developer"}, {Number: 2, Author: "bot[bot]"}}) + + prs, fetchedAt := cachedPRList(limit) + if time.Since(fetchedAt) >= prCacheTTL { + t.Fatal("new cache entry is already expired") + } + if filtered := filterPRs(prs, false); len(filtered) != 1 || filtered[0].Number != 1 { + t.Fatalf("filtered PRs = %#v", filtered) + } + if unfiltered := filterPRs(prs, true); len(unfiltered) != 2 { + t.Fatalf("unfiltered PR count = %d, want 2", len(unfiltered)) + } +} + +func TestCommandErrorIncludesGitHubOutput(t *testing.T) { + err := commandError(errors.New("exit status 1"), []byte("GraphQL: API rate limit exceeded\n")) + if !strings.Contains(err.Error(), "API rate limit exceeded") { + t.Fatalf("error = %q", err) + } +} + +func TestListPRsExcludesBotsIntegration(t *testing.T) { + if os.Getenv("HOMARR_INTEGRATION_TEST") != "1" { + t.Skip("set HOMARR_INTEGRATION_TEST=1 to query GitHub") + } + + prs, err := ListPRs(t.Context(), 50, false) + if err != nil { + t.Fatal(err) + } + if len(prs) == 0 { + t.Fatal("expected at least one human-authored open PR") + } + for _, pr := range prs { + if isBot(pr.Author) { + t.Fatalf("bot PR was not filtered: #%d by %s", pr.Number, pr.Author) + } + if pr.HeadSHA == "" { + t.Fatalf("PR #%d has no head SHA", pr.Number) + } + } +} diff --git a/tools/homarr-dev/internal/platform/clipboard.go b/tools/homarr-dev/internal/platform/clipboard.go new file mode 100644 index 000000000..1dfdc7fdf --- /dev/null +++ b/tools/homarr-dev/internal/platform/clipboard.go @@ -0,0 +1,7 @@ +package platform + +import "github.com/atotto/clipboard" + +func CopyText(value string) error { + return clipboard.WriteAll(value) +} diff --git a/tools/homarr-dev/internal/platform/open.go b/tools/homarr-dev/internal/platform/open.go new file mode 100644 index 000000000..3be91d562 --- /dev/null +++ b/tools/homarr-dev/internal/platform/open.go @@ -0,0 +1,28 @@ +package platform + +import ( + "fmt" + "os/exec" + "runtime" +) + +func OpenURL(url string) error { + name, args, err := openCommand(runtime.GOOS, url) + if err != nil { + return err + } + return exec.Command(name, args...).Start() +} + +func openCommand(goos, url string) (string, []string, error) { + switch goos { + case "darwin": + return "open", []string{url}, nil + case "linux": + return "xdg-open", []string{url}, nil + case "windows": + return "rundll32", []string{"url.dll,FileProtocolHandler", url}, nil + default: + return "", nil, fmt.Errorf("opening URLs is not supported on %s", goos) + } +} diff --git a/tools/homarr-dev/internal/platform/open_test.go b/tools/homarr-dev/internal/platform/open_test.go new file mode 100644 index 000000000..413d9ee97 --- /dev/null +++ b/tools/homarr-dev/internal/platform/open_test.go @@ -0,0 +1,25 @@ +package platform + +import "testing" + +func TestOpenCommand(t *testing.T) { + tests := []struct { + goos string + name string + }{ + {goos: "darwin", name: "open"}, + {goos: "linux", name: "xdg-open"}, + {goos: "windows", name: "rundll32"}, + } + for _, test := range tests { + t.Run(test.goos, func(t *testing.T) { + name, args, err := openCommand(test.goos, "https://example.com") + if err != nil { + t.Fatal(err) + } + if name != test.name || len(args) == 0 { + t.Fatalf("command = %s %v", name, args) + } + }) + } +} diff --git a/tools/homarr-dev/internal/run/build.go b/tools/homarr-dev/internal/run/build.go new file mode 100644 index 000000000..de78fd291 --- /dev/null +++ b/tools/homarr-dev/internal/run/build.go @@ -0,0 +1,105 @@ +package run + +import ( + "context" + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + "strconv" + "strings" + + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/docker" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/gh" +) + +func BuildCurrentImage(tag, directory string) error { + return buildCurrentImage(context.Background(), tag, directory, os.Stdout, os.Stderr) +} + +func buildCurrentImage(ctx context.Context, tag, directory string, stdout, stderr io.Writer) error { + root, revision, err := checkoutDetails(ctx, directory) + if err != nil { + return err + } + return docker.BuildContext(ctx, docker.BuildOptions{Context: root, Tag: tag, Source: root, Revision: revision}, stdout, stderr) +} + +func BuildPRImage(number int, tag string) error { + return buildPRImage(context.Background(), number, tag, os.Stdout, os.Stderr) +} + +func buildPRImage(ctx context.Context, number int, tag string, stdout, stderr io.Writer) error { + if number <= 0 { + return fmt.Errorf("PR number must be positive") + } + temporaryRoot, err := os.MkdirTemp("", "homarr-pr-*") + if err != nil { + return fmt.Errorf("create temporary checkout: %w", err) + } + defer os.RemoveAll(temporaryRoot) + + checkout := filepath.Join(temporaryRoot, "homarr") + clone := exec.CommandContext(ctx, "gh", prCloneArgs(checkout)...) + clone.Stdout = stdout + clone.Stderr = stderr + if err := clone.Run(); err != nil { + return fmt.Errorf("clone %s: %w", gh.Repo, err) + } + command := exec.CommandContext(ctx, "gh", "pr", "checkout", strconv.Itoa(number), "--detach") + command.Dir = checkout + command.Stdout = stdout + command.Stderr = stderr + if err := command.Run(); err != nil { + return fmt.Errorf("checkout PR #%d: %w", number, err) + } + _, revision, err := checkoutDetails(ctx, checkout) + if err != nil { + return err + } + return docker.BuildContext(ctx, docker.BuildOptions{ + Context: checkout, + Tag: tag, + Source: fmt.Sprintf("https://github.com/%s/pull/%d", gh.Repo, number), + Revision: revision, + PRNumber: number, + }, stdout, stderr) +} + +func prCloneArgs(checkout string) []string { + return []string{"repo", "clone", gh.Repo, checkout, "--", "--depth=1", "--filter=blob:none"} +} + +func RebuildImage(image docker.Image) error { + return RebuildImageContext(context.Background(), image, os.Stdout, os.Stderr) +} + +func RebuildImageContext(ctx context.Context, image docker.Image, stdout, stderr io.Writer) error { + if image.PRNumber > 0 { + return buildPRImage(ctx, image.PRNumber, image.Tag, stdout, stderr) + } + if image.Source == "" { + return fmt.Errorf("homarr:%s has no build source metadata", image.Tag) + } + if info, err := os.Stat(image.Source); err != nil || !info.IsDir() { + return fmt.Errorf("build source %s is no longer available", image.Source) + } + return buildCurrentImage(ctx, image.Tag, image.Source, stdout, stderr) +} + +func checkoutDetails(ctx context.Context, directory string) (root string, revision string, err error) { + rootOutput, err := exec.CommandContext(ctx, "git", "-C", directory, "rev-parse", "--show-toplevel").CombinedOutput() + if err != nil { + return "", "", fmt.Errorf("find Homarr checkout: %w: %s", err, strings.TrimSpace(string(rootOutput))) + } + root = strings.TrimSpace(string(rootOutput)) + if _, err := os.Stat(filepath.Join(root, "Dockerfile")); err != nil { + return "", "", fmt.Errorf("%s is not a Homarr checkout", root) + } + revisionOutput, err := exec.CommandContext(ctx, "git", "-C", root, "rev-parse", "HEAD").CombinedOutput() + if err != nil { + return "", "", fmt.Errorf("read checkout revision: %w: %s", err, strings.TrimSpace(string(revisionOutput))) + } + return root, strings.TrimSpace(string(revisionOutput)), nil +} diff --git a/tools/homarr-dev/internal/run/run.go b/tools/homarr-dev/internal/run/run.go new file mode 100644 index 000000000..a144ee3df --- /dev/null +++ b/tools/homarr-dev/internal/run/run.go @@ -0,0 +1,119 @@ +package run + +import ( + "context" + "fmt" + "os" + + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/docker" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/gh" +) + +type Options struct { + Context context.Context + PR int + Tag string + Demo bool + Env []string + FetchTitle bool + FindPort func(int) int +} + +type Plan struct { + Image string + Name string + Volume string + Label string + HostPort int + Env []string + Platform string + Pull bool + PRNumber int +} + +func BuildPlan(opts Options) (*Plan, error) { + p := &Plan{} + ctx := opts.Context + if ctx == nil { + ctx = context.Background() + } + findPort := opts.FindPort + if findPort == nil { + findPort = docker.FindFreePort + } + + if opts.PR > 0 { + p.PRNumber = opts.PR + p.Image = fmt.Sprintf("ghcr.io/homarr-labs/homarr-test:pr-%d", opts.PR) + p.Name = fmt.Sprintf("homarr_pr_%d", opts.PR) + p.Volume = fmt.Sprintf("homarr_pr_%d_data", opts.PR) + p.Label = fmt.Sprintf("PR #%d", opts.PR) + p.Pull = true + p.Platform = "linux/amd64" + if opts.FetchTitle { + if pr, err := gh.GetPR(ctx, opts.PR); err == nil && pr.Title != "" { + p.Label = fmt.Sprintf("PR #%d — %s", opts.PR, pr.Title) + } + } + } else if opts.Tag != "" { + p.Image = "homarr:" + opts.Tag + p.Name = "homarr_" + opts.Tag + p.Volume = "homarr_" + opts.Tag + "_data" + p.Label = "tag: " + opts.Tag + } else { + return nil, fmt.Errorf("need a tag or --pr") + } + + p.HostPort = findPort(7575) + if p.HostPort == 0 { + return nil, fmt.Errorf("no free host port is available") + } + p.Env = append(p.Env, opts.Env...) + if opts.Demo { + p.Env = append(p.Env, "DEMO_MODE=true", "UNSAFE_ENABLE_MOCK_INTEGRATION=true") + p.Label += " (demo)" + } + return p, nil +} + +func StartDetached(p *Plan) error { + return start(p, true) +} + +func StartForeground(p *Plan) error { + return start(p, false) +} + +func start(p *Plan, daemon bool) error { + const attempts = 5 + for attempt := 0; attempt < attempts; attempt++ { + err := docker.Start(docker.StartOptions{ + Name: p.Name, + Image: p.Image, + Volume: p.Volume, + HostPort: p.HostPort, + Env: p.Env, + Platform: p.Platform, + PullAlways: p.Pull && attempt == 0, + Daemon: daemon, + }) + if err == nil { + return nil + } + if !docker.IsPortConflict(err) || attempt == attempts-1 { + if docker.IsPortConflict(err) { + return fmt.Errorf("unable to bind a host port after %d attempts; restart Docker or OrbStack: %w", attempts, err) + } + return err + } + previousPort := p.HostPort + p.HostPort = docker.FindFreePort(p.HostPort + 1) + if p.HostPort == 0 { + return fmt.Errorf("no free host port is available: %w", err) + } + if !daemon { + fmt.Fprintf(os.Stderr, "Port %d unavailable; retrying on %d.\n", previousPort, p.HostPort) + } + } + return nil +} diff --git a/tools/homarr-dev/internal/run/run_test.go b/tools/homarr-dev/internal/run/run_test.go new file mode 100644 index 000000000..5bed7eac9 --- /dev/null +++ b/tools/homarr-dev/internal/run/run_test.go @@ -0,0 +1,59 @@ +package run + +import ( + "os" + "slices" + "strconv" + "testing" + + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/docker" +) + +func TestPRPlanUsesAMD64(t *testing.T) { + plan, err := BuildPlan(Options{PR: 1, FindPort: func(int) int { return 7575 }}) + if err != nil { + t.Fatal(err) + } + if plan.Platform != "linux/amd64" { + t.Fatalf("platform = %q, want linux/amd64", plan.Platform) + } +} + +func TestPRCloneIsShallow(t *testing.T) { + args := prCloneArgs("/tmp/checkout") + if !slices.Contains(args, "--depth=1") || !slices.Contains(args, "--filter=blob:none") { + t.Fatalf("clone args = %v", args) + } +} + +func TestBuildPlanFailsWhenNoPortIsAvailable(t *testing.T) { + _, err := BuildPlan(Options{Tag: "dev", FindPort: func(int) int { return 0 }}) + if err == nil { + t.Fatal("expected no-free-port error") + } +} + +func TestStartPRIntegration(t *testing.T) { + if os.Getenv("HOMARR_DOCKER_INTEGRATION_TEST") != "1" { + t.Skip("set HOMARR_DOCKER_INTEGRATION_TEST=1 and HOMARR_TEST_PR=") + } + pr, err := strconv.Atoi(os.Getenv("HOMARR_TEST_PR")) + if err != nil || pr <= 0 { + t.Fatal("HOMARR_TEST_PR must be a positive PR number") + } + + plan, err := BuildPlan(Options{PR: pr}) + if err != nil { + t.Fatal(err) + } + plan.Name += "_integration" + plan.Volume += "_integration" + defer docker.Remove(plan.Name) + + if err := StartDetached(plan); err != nil { + t.Fatal(err) + } + if !docker.IsRunning(plan.Name) { + t.Fatalf("container %s did not remain running", plan.Name) + } +} diff --git a/tools/homarr-dev/internal/tui/app.go b/tools/homarr-dev/internal/tui/app.go new file mode 100644 index 000000000..1af605250 --- /dev/null +++ b/tools/homarr-dev/internal/tui/app.go @@ -0,0 +1,122 @@ +package tui + +import ( + "charm.land/bubbles/v2/spinner" + tea "charm.land/bubbletea/v2" +) + +type appModel struct { + dev prsModel + dashboard dashModel + showDashboard bool + width int + height int +} + +func newAppModel(showDashboard bool) appModel { + return appModel{dev: newPRsModel(), dashboard: newDashModel(), showDashboard: showDashboard} +} + +func (m appModel) Init() tea.Cmd { + if m.showDashboard { + return m.dashboard.Init() + } + return m.dev.Init() +} + +func (m appModel) canSwitch() bool { + if m.showDashboard { + return !m.dashboard.filtering + } + return !m.dev.filtering && !m.dev.pulling +} + +func (m appModel) switchScreen() (tea.Model, tea.Cmd) { + m.showDashboard = !m.showDashboard + commands := make([]tea.Cmd, 0, 2) + if m.width > 0 && m.height > 0 { + resize := tea.WindowSizeMsg{Width: m.width, Height: m.height} + if m.showDashboard { + updated, command := m.dashboard.Update(resize) + m.dashboard = updated.(dashModel) + commands = append(commands, command) + } else { + updated, command := m.dev.Update(resize) + m.dev = updated.(prsModel) + commands = append(commands, command) + } + } + if m.showDashboard { + commands = append(commands, m.dashboard.Init()) + } else { + commands = append(commands, m.dev.Init()) + } + return m, tea.Batch(commands...) +} + +func (m appModel) updateDev(msg tea.Msg) (appModel, tea.Cmd) { + updated, command := m.dev.Update(msg) + m.dev = updated.(prsModel) + return m, command +} + +func (m appModel) updateDashboard(msg tea.Msg) (appModel, tea.Cmd) { + updated, command := m.dashboard.Update(msg) + m.dashboard = updated.(dashModel) + return m, command +} + +func (m appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + if window, ok := msg.(tea.WindowSizeMsg); ok { + m.width = window.Width + m.height = window.Height + m, devCommand := m.updateDev(msg) + m, dashboardCommand := m.updateDashboard(msg) + return m, tea.Batch(devCommand, dashboardCommand) + } + if key, ok := msg.(tea.KeyPressMsg); ok { + if key.String() == "d" && m.canSwitch() { + return m.switchScreen() + } + if m.showDashboard { + return m.updateDashboard(msg) + } + return m.updateDev(msg) + } + + switch msg.(type) { + case prsLoadedMsg, imageCheckedMsg, prActionMsg, rebuildDoneMsg, runningRefreshedMsg, pullReadyMsg, pullEvent, spinner.TickMsg: + return m.updateDev(msg) + case tickMsg, actionMsg, rowsMsg: + if m.showDashboard { + return m.updateDashboard(msg) + } + return m, nil + case prLogTickMsg: + if !m.showDashboard { + return m.updateDev(msg) + } + return m, nil + case logsMsg: + m, devCommand := m.updateDev(msg) + m, dashboardCommand := m.updateDashboard(msg) + return m, tea.Batch(devCommand, dashboardCommand) + } + if m.showDashboard { + return m.updateDashboard(msg) + } + return m.updateDev(msg) +} + +func (m appModel) View() tea.View { + if m.showDashboard { + return m.dashboard.View() + } + return m.dev.View() +} + +func runApp(showDashboard bool) error { + program := tea.NewProgram(newAppModel(showDashboard)) + _, err := program.Run() + return err +} diff --git a/tools/homarr-dev/internal/tui/app_test.go b/tools/homarr-dev/internal/tui/app_test.go new file mode 100644 index 000000000..1112ebb29 --- /dev/null +++ b/tools/homarr-dev/internal/tui/app_test.go @@ -0,0 +1,47 @@ +package tui + +import ( + "testing" + + tea "charm.land/bubbletea/v2" + + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/gh" +) + +func TestAppTogglePreservesDevelopmentState(t *testing.T) { + m := newAppModel(false) + m.dev.rows = []prRow{{kind: "remote", pr: gh.PR{Number: 6502}}} + + updated, _ := m.Update(tea.KeyPressMsg(tea.Key{Code: 'd', Text: "d"})) + dashboard := updated.(appModel) + if !dashboard.showDashboard { + t.Fatal("d did not open the instance dashboard") + } + updated, _ = dashboard.Update(tea.KeyPressMsg(tea.Key{Code: 'd', Text: "d"})) + development := updated.(appModel) + if development.showDashboard || len(development.dev.rows) != 1 || development.dev.rows[0].pr.Number != 6502 { + t.Fatalf("development state was not preserved: %#v", development.dev.rows) + } +} + +func TestAppToggleDoesNotInterceptFilterInput(t *testing.T) { + m := newAppModel(false) + m.dev.filtering = true + m.dev.filter.Focus() + + updated, _ := m.Update(tea.KeyPressMsg(tea.Key{Code: 'd', Text: "d"})) + got := updated.(appModel) + if got.showDashboard || got.dev.filter.Value() != "d" { + t.Fatalf("filter input was intercepted: dashboard=%v filter=%q", got.showDashboard, got.dev.filter.Value()) + } +} + +func TestAppCanOpenInstancesDuringBuild(t *testing.T) { + m := newAppModel(false) + m.dev.rebuilding = true + + updated, _ := m.Update(tea.KeyPressMsg(tea.Key{Code: 'd', Text: "d"})) + if !updated.(appModel).showDashboard { + t.Fatal("background build blocked dashboard navigation") + } +} diff --git a/tools/homarr-dev/internal/tui/dashboard.go b/tools/homarr-dev/internal/tui/dashboard.go new file mode 100644 index 000000000..5cfe2d496 --- /dev/null +++ b/tools/homarr-dev/internal/tui/dashboard.go @@ -0,0 +1,415 @@ +package tui + +import ( + "context" + "fmt" + "os/exec" + "strings" + "time" + + "charm.land/bubbles/v2/table" + "charm.land/bubbles/v2/textinput" + "charm.land/bubbles/v2/viewport" + tea "charm.land/bubbletea/v2" + "charm.land/lipgloss/v2" + + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/docker" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/platform" +) + +var ( + titleStyle = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("212")) + helpStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("241")) + logHeadSt = lipgloss.NewStyle().Foreground(lipgloss.Color("241")) + runningLegend = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Render("● running") + stoppedLegend = lipgloss.NewStyle().Foreground(lipgloss.Color("240")).Render("○ stopped") +) + +type dashModel struct { + table table.Model + allRows []table.Row + filter textinput.Model + filtering bool + logs viewport.Model + showLogs bool + follow bool + status string + confirmRemove string + width int + height int +} + +type tickMsg time.Time +type actionMsg string +type rowsMsg []table.Row +type logsMsg struct { + name string + content string +} + +func tick() tea.Cmd { + return tea.Tick(3*time.Second, func(t time.Time) tea.Msg { return tickMsg(t) }) +} + +func fetchLogs(name string) tea.Cmd { + return func() tea.Msg { + if name == "" { + return logsMsg{} + } + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + out, err := exec.CommandContext(ctx, "docker", "logs", "--tail", "200", name).CombinedOutput() + if err != nil { + return logsMsg{name: name, content: "logs unavailable: " + err.Error()} + } + return logsMsg{name: name, content: string(out)} + } +} + +func loadRows() tea.Cmd { + return func() tea.Msg { return rowsMsg(refreshRows()) } +} + +func refreshRows() []table.Row { + containers, _ := docker.List() + rows := make([]table.Row, 0, len(containers)) + for _, c := range containers { + port := c.HostPort() + url := "" + if port != "" && c.Running() { + url = "http://localhost:" + port + } + state := "● " + c.State + if !c.Running() { + state = "○ " + c.State + } + img := strings.TrimPrefix(c.Image, "ghcr.io/homarr-labs/") + rows = append(rows, table.Row{c.Name, state, img, port, url, c.Status}) + } + return rows +} + +func dashboardColumns(width int) []table.Column { + nameWidth := 26 + imageWidth := 30 + urlWidth := 24 + if width < 100 { + nameWidth = 22 + imageWidth = max(width-54, 18) + urlWidth = 0 + } + return []table.Column{ + {Title: "NAME", Width: nameWidth}, + {Title: "STATE", Width: 14}, + {Title: "IMAGE", Width: imageWidth}, + {Title: "PORT", Width: 6}, + {Title: "URL", Width: urlWidth}, + {Title: "STATUS", Width: 0}, + } +} + +func newDashModel() dashModel { + t := table.New( + table.WithColumns(dashboardColumns(104)), + table.WithFocused(true), + table.WithHeight(10), + table.WithWidth(104), + ) + s := table.DefaultStyles() + s.Header = s.Header.Bold(true) + s.Selected = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("230")).Background(lipgloss.Color("57")) + t.SetStyles(s) + logs := viewport.New(viewport.WithWidth(104), viewport.WithHeight(12)) + logs.SoftWrap = true + filter := textinput.New() + filter.Prompt = "/ " + filter.Placeholder = "filter name, image, port, state…" + filter.SetWidth(50) + styles := textinput.DefaultDarkStyles() + styles.Focused.Prompt = styles.Focused.Prompt.Foreground(lipgloss.Color("212")).Bold(true) + styles.Focused.Text = styles.Focused.Text.Foreground(lipgloss.Color("229")) + filter.SetStyles(styles) + return dashModel{table: t, filter: filter, logs: logs, showLogs: true, follow: true, width: 104, height: 30} +} + +func (m *dashModel) applyFilter() { + query := strings.ToLower(strings.TrimSpace(m.filter.Value())) + if query == "" { + m.table.SetRows(m.allRows) + return + } + rows := make([]table.Row, 0, len(m.allRows)) + for _, row := range m.allRows { + if strings.Contains(strings.ToLower(strings.Join(row, " ")), query) { + rows = append(rows, row) + } + } + m.table.SetRows(rows) +} + +func (m dashModel) selected() string { + row := m.table.SelectedRow() + if len(row) == 0 { + return "" + } + return row[0] +} + +func (m dashModel) selectedPort() string { + row := m.table.SelectedRow() + if len(row) < 4 { + return "" + } + return row[3] +} + +func (m dashModel) Init() tea.Cmd { + return tea.Batch(tick(), loadRows(), fetchLogs(m.selected())) +} + +func (m dashModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + switch msg := msg.(type) { + case tea.WindowSizeMsg: + m.width = msg.Width + m.height = msg.Height + m.table.SetColumns(dashboardColumns(msg.Width)) + m.table.SetWidth(msg.Width) + m.logs.SetWidth(msg.Width) + m.filter.SetWidth(max(min(msg.Width-4, 60), 10)) + m.layout() + return m, nil + case tickMsg: + return m, tea.Batch(tick(), loadRows()) + case rowsMsg: + m.allRows = []table.Row(msg) + m.applyFilter() + return m, fetchLogs(m.selected()) + case logsMsg: + if msg.name != "" && msg.name != m.selected() { + return m, nil + } + m.logs.SetContent(strings.TrimRight(msg.content, "\n")) + if m.follow { + m.logs.GotoBottom() + } + return m, nil + case actionMsg: + m.status = string(msg) + m.confirmRemove = "" + return m, loadRows() + case tea.KeyPressMsg: + if m.filtering { + switch msg.Key().Code { + case tea.KeyEscape: + m.filtering = false + m.filter.Reset() + m.filter.Blur() + m.applyFilter() + return m, fetchLogs(m.selected()) + case tea.KeyEnter: + m.filtering = false + m.filter.Blur() + return m, fetchLogs(m.selected()) + } + var cmd tea.Cmd + m.filter, cmd = m.filter.Update(msg) + m.applyFilter() + return m, tea.Batch(cmd, fetchLogs(m.selected())) + } + name := m.selected() + switch msg.Key().Code { + case tea.KeyUp, tea.KeyKpUp: + m.table.MoveUp(1) + return m, fetchLogs(m.selected()) + case tea.KeyDown, tea.KeyKpDown: + m.table.MoveDown(1) + return m, fetchLogs(m.selected()) + case tea.KeyPgUp, tea.KeyKpPgUp: + m.follow = false + m.logs.PageUp() + return m, nil + case tea.KeyPgDown, tea.KeyKpPgDown: + m.logs.PageDown() + m.follow = m.logs.AtBottom() + return m, nil + } + switch msg.String() { + case "q", "ctrl+c", "esc": + return m, tea.Quit + case "l": + m.showLogs = !m.showLogs + m.layout() + if m.showLogs { + return m, fetchLogs(name) + } + return m, nil + case "/": + m.filtering = true + return m, m.filter.Focus() + case "f": + m.follow = !m.follow + if m.follow { + m.logs.GotoBottom() + } + return m, nil + case "s": + if name != "" { + m.status = "stopping " + name + "…" + return m, func() tea.Msg { + if err := docker.Stop(name); err != nil { + return actionMsg("stop failed: " + err.Error()) + } + return actionMsg("stopped " + name) + } + } + case "x": + if name != "" { + if m.confirmRemove != name { + m.confirmRemove = name + m.status = "press x again to remove " + name + return m, nil + } + m.status = "removing " + name + "…" + return m, func() tea.Msg { + if err := docker.Remove(name); err != nil { + return actionMsg("remove failed: " + err.Error()) + } + return actionMsg("removed " + name) + } + } + case "R": + if name != "" { + m.status = "restarting " + name + "…" + return m, func() tea.Msg { + if err := docker.Restart(name); err != nil { + return actionMsg("restart failed: " + err.Error()) + } + return actionMsg("restarted " + name) + } + } + case "o": + if name != "" { + if port := m.selectedPort(); port != "" { + if err := platform.OpenURL("http://localhost:" + port); err != nil { + m.status = "open failed: " + err.Error() + } + } + } + case "c": + if name != "" { + if port := m.selectedPort(); port != "" { + url := "http://localhost:" + port + if err := platform.CopyText(url); err != nil { + m.status = "copy failed: " + err.Error() + } else { + m.status = "copied " + url + } + } + } + case "r": + return m, loadRows() + case "k": + m.table.MoveUp(1) + return m, fetchLogs(m.selected()) + case "j": + m.table.MoveDown(1) + return m, fetchLogs(m.selected()) + } + } + var cmd tea.Cmd + m.table, cmd = m.table.Update(msg) + return m, cmd +} + +func (m *dashModel) layout() { + available := m.height - 11 + if m.filtering || m.filter.Value() != "" { + available -= 2 + } + if !m.showLogs { + m.table.SetHeight(max(available, 5)) + return + } + tableH := min(12, max(available/2, 5)) + m.table.SetHeight(tableH) + logsH := available - tableH + if logsH < 3 { + logsH = 3 + } + m.logs.SetHeight(logsH) +} + +func (m dashModel) selectedDetailView() string { + row := m.table.SelectedRow() + if len(row) < 6 { + return "" + } + title := lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("229")).Render(row[0]) + meta := row[2] + " · " + row[1] + if row[3] != "" { + meta += " · port " + row[3] + } + if row[4] != "" { + meta += " · " + row[4] + } + if row[5] != "" { + meta += " · " + row[5] + } + return title + "\n" + helpStyle.Render(meta) +} + +func (m dashModel) View() tea.View { + var b strings.Builder + running := 0 + for _, row := range m.allRows { + if len(row) > 1 && strings.Contains(row[1], "running") { + running++ + } + } + b.WriteString(titleStyle.Render("🦞 homarr instances") + " " + helpStyle.Render(fmt.Sprintf("%d total · %d running · %d shown", len(m.allRows), running, len(m.table.Rows())))) + b.WriteString("\n\n") + if m.filtering || m.filter.Value() != "" { + b.WriteString(m.filter.View() + "\n\n") + } + if len(m.table.Rows()) == 0 { + message := "no homarr containers — start one with `homarr run ` or `homarr run --pr N`" + if len(m.allRows) > 0 { + message = "no instances match " + m.filter.Value() + } + b.WriteString(helpStyle.Render(" " + message + "\n")) + } else { + b.WriteString(m.table.View()) + b.WriteString("\n") + } + if detail := m.selectedDetailView(); detail != "" { + b.WriteString("\n" + detail + "\n") + } + if m.showLogs && len(m.table.Rows()) > 0 { + mode := "paused" + if m.follow { + mode = "following" + } + b.WriteString("\n" + logHeadSt.Render("── logs: "+m.selected()+" ("+mode+") ──") + "\n") + b.WriteString(m.logs.View()) + } + if m.status != "" { + statusStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("42")) + lower := strings.ToLower(m.status) + if strings.Contains(lower, "fail") || strings.Contains(lower, "error") { + statusStyle = statusStyle.Foreground(lipgloss.Color("196")) + } else if strings.Contains(lower, "press x") { + statusStyle = statusStyle.Foreground(lipgloss.Color("214")) + } + b.WriteString("\n" + statusStyle.Render(m.status)) + } + b.WriteString("\n\n" + helpStyle.Render("/ filter · ↑/↓ select · l logs · f follow · pgup/pgdn scroll · s stop · R restart · x remove · o open · c copy URL · r refresh · d development · q quit")) + b.WriteString("\n" + helpStyle.Render(runningLegend+" · "+stoppedLegend)) + v := tea.NewView(b.String()) + v.AltScreen = true + v.WindowTitle = "🦞 Homarr instances" + return v +} + +func RunDashboard() error { + return runApp(true) +} diff --git a/tools/homarr-dev/internal/tui/dashboard_test.go b/tools/homarr-dev/internal/tui/dashboard_test.go new file mode 100644 index 000000000..4456dc117 --- /dev/null +++ b/tools/homarr-dev/internal/tui/dashboard_test.go @@ -0,0 +1,62 @@ +package tui + +import ( + "strings" + "testing" + + "charm.land/bubbles/v2/table" + tea "charm.land/bubbletea/v2" +) + +func TestDashboardRendersRowsAndLogs(t *testing.T) { + m := newDashModel() + m.table.SetRows([]table.Row{{ + "homarr_pr_6441", + "running", + "homarr-test:pr-6441", + "7575", + "http://localhost:7575", + "Up 2 minutes", + }}) + m.logs.SetWidth(104) + m.logs.SetHeight(5) + m.logs.SetContent("server ready") + + got := m.View().Content + for _, want := range []string{"homarr_pr_6441", "server ready"} { + if !strings.Contains(got, want) { + t.Fatalf("dashboard omitted %q: %q", want, got) + } + } + if !m.View().AltScreen { + t.Fatal("dashboard must use the alternate screen") + } +} + +func TestDashboardArrowNavigation(t *testing.T) { + m := newDashModel() + m.table.SetRows([]table.Row{ + {"homarr_first", "running", "homarr:first", "7575", "", "Up 1 minute"}, + {"homarr_second", "running", "homarr:second", "7576", "", "Up 1 minute"}, + }) + + updated, _ := m.Update(tea.KeyPressMsg(tea.Key{Code: tea.KeyDown})) + got := updated.(dashModel).selected() + if got != "homarr_second" { + t.Fatalf("down arrow selected %q, want homarr_second", got) + } +} + +func TestDashboardIgnoresStaleLogs(t *testing.T) { + m := newDashModel() + m.table.SetRows([]table.Row{{"homarr_current", "running", "homarr:current", "7575", "", "Up 1 minute"}}) + m.logs.SetWidth(104) + m.logs.SetHeight(5) + m.logs.SetContent("current logs") + + updated, _ := m.Update(logsMsg{name: "homarr_old", content: "stale logs"}) + got := updated.(dashModel).View().Content + if strings.Contains(got, "stale logs") || !strings.Contains(got, "current logs") { + t.Fatalf("stale log result replaced current content: %q", got) + } +} diff --git a/tools/homarr-dev/internal/tui/dev.go b/tools/homarr-dev/internal/tui/dev.go new file mode 100644 index 000000000..6a41d9d9a --- /dev/null +++ b/tools/homarr-dev/internal/tui/dev.go @@ -0,0 +1,1158 @@ +package tui + +import ( + "bufio" + "context" + "fmt" + "os" + "os/exec" + "path/filepath" + "strconv" + "strings" + "time" + + "charm.land/bubbles/v2/progress" + "charm.land/bubbles/v2/spinner" + "charm.land/bubbles/v2/table" + "charm.land/bubbles/v2/textinput" + "charm.land/bubbles/v2/viewport" + tea "charm.land/bubbletea/v2" + "charm.land/lipgloss/v2" + + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/docker" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/gh" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/platform" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/run" +) + +const ( + ciOK = "✓" + ciFail = "✗" + ciPend = "●" + ciNone = "–" + imgYes = "✓" + imgNo = "…" + imgCheck = "?" + imgError = "!" + imgLocal = "◆" + runMark = "▶" + idleMark = " " +) + +var ( + legendCIYes = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Render(ciOK) + legendCINo = lipgloss.NewStyle().Foreground(lipgloss.Color("196")).Render(ciFail) + legendCIPend = lipgloss.NewStyle().Foreground(lipgloss.Color("214")).Render(ciPend) + legendNone = lipgloss.NewStyle().Foreground(lipgloss.Color("240")).Render(ciNone) + legendImageYes = lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Render(imgYes) + legendImageNo = lipgloss.NewStyle().Foreground(lipgloss.Color("240")).Render(imgNo) + legendLocal = lipgloss.NewStyle().Foreground(lipgloss.Color("81")).Render(imgLocal) +) + +type prRow struct { + kind string + pr gh.PR + local docker.Image + imageState string + running bool + port string +} + +func (row prRow) hasCurrentLocalImage() bool { + return row.kind == "remote" && row.local.Tag != "" && row.pr.HeadSHA != "" && row.local.Revision == row.pr.HeadSHA +} + +type prsModel struct { + table table.Model + filter textinput.Model + filtering bool + pullView viewport.Model + pulling bool + pullLines []string + pullLayers map[string]string + pullProgress progress.Model + pullCanceled bool + pullEvents <-chan pullEvent + pullPlan *run.Plan + pullCancel context.CancelFunc + rebuilding bool + rebuildCancel context.CancelFunc + logs viewport.Model + showLogs bool + followLogs bool + logsName string + spinner spinner.Model + rows []prRow + loading bool + status string + includeBots bool + demo bool + width int + height int + imageQueue []int + imageActive int + imageGen int +} + +type prsLoadedMsg struct { + prs []gh.PR + images []docker.Image + prErr error + imgErr error + refresh bool +} +type imageCheckedMsg struct { + number int + exists bool + err error + gen int +} +type prActionMsg struct { + text string +} +type rebuildDoneMsg struct { + image docker.Image + err error + canceled bool + action string +} +type runningRefreshedMsg struct { + rows []prRow + generation int +} +type pullReadyMsg struct{} +type prLogTickMsg struct{} +type pullEvent struct { + line string + done bool + err error +} + +type outputTail struct { + data []byte +} + +func (tail *outputTail) Write(data []byte) (int, error) { + const limit = 32 * 1024 + tail.data = append(tail.data, data...) + if len(tail.data) > limit { + tail.data = tail.data[len(tail.data)-limit:] + } + return len(data), nil +} + +func (tail *outputTail) lastLine() string { + lines := strings.FieldsFunc(string(tail.data), func(char rune) bool { return char == '\n' || char == '\r' }) + if len(lines) == 0 { + return "" + } + return strings.TrimSpace(lines[len(lines)-1]) +} + +func splitDockerProgress(data []byte, atEOF bool) (advance int, token []byte, err error) { + for i, b := range data { + if b == '\n' || b == '\r' { + return i + 1, data[:i], nil + } + } + if atEOF && len(data) > 0 { + return len(data), data, nil + } + return 0, nil, nil +} + +func startPull(ctx context.Context, cmd *exec.Cmd, events chan<- pullEvent) tea.Cmd { + return func() tea.Msg { + reader, writer, err := os.Pipe() + if err != nil { + return pullEvent{done: true, err: err} + } + cmd.Stdout = writer + cmd.Stderr = writer + if err := cmd.Start(); err != nil { + _ = reader.Close() + _ = writer.Close() + return pullEvent{done: true, err: err} + } + _ = writer.Close() + go func() { + defer close(events) + defer reader.Close() + scanner := bufio.NewScanner(reader) + scanner.Split(splitDockerProgress) + lastLine := "" + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line != "" { + lastLine = line + if ctx.Err() == nil && len(events) < cap(events)-1 { + events <- pullEvent{line: line} + } + } + } + err := cmd.Wait() + if err == nil { + err = scanner.Err() + } else { + err = commandErrorWithDetail(err, lastLine) + } + events <- pullEvent{done: true, err: err} + }() + return pullReadyMsg{} + } +} + +func commandErrorWithDetail(err error, lastLine string) error { + if lastLine == "" { + return err + } + return fmt.Errorf("%w: %s", err, lastLine) +} + +func waitPull(events <-chan pullEvent) tea.Cmd { + return func() tea.Msg { + event, ok := <-events + if !ok { + return nil + } + return event + } +} + +func prLogTick() tea.Cmd { + return tea.Tick(2*time.Second, func(time.Time) tea.Msg { return prLogTickMsg{} }) +} + +func loadDev(includeBots, refresh bool) tea.Cmd { + return func() tea.Msg { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + var prs []gh.PR + var prErr error + if refresh { + prs, prErr = gh.RefreshPRs(ctx, 50, includeBots) + } else { + prs, prErr = gh.ListPRs(ctx, 50, includeBots) + } + images, imgErr := docker.ListLocalImages(ctx) + return prsLoadedMsg{prs: prs, images: images, prErr: prErr, imgErr: imgErr, refresh: refresh} + } +} + +func checkImage(number, generation int) tea.Cmd { + return func() tea.Msg { + img := fmt.Sprintf("ghcr.io/homarr-labs/homarr-test:pr-%d", number) + exists, err := docker.CheckImage(img) + return imageCheckedMsg{number: number, exists: exists, err: err, gen: generation} + } +} + +func (m *prsModel) startImageChecks() tea.Cmd { + const concurrency = 6 + cmds := make([]tea.Cmd, 0, concurrency) + for m.imageActive < concurrency && len(m.imageQueue) > 0 { + number := m.imageQueue[0] + m.imageQueue = m.imageQueue[1:] + m.imageActive++ + cmds = append(cmds, checkImage(number, m.imageGen)) + } + return tea.Batch(cmds...) +} + +func ciIcon(state string) string { + switch state { + case "SUCCESS": + return ciOK + case "FAILURE": + return ciFail + case "PENDING": + return ciPend + default: + return ciNone + } +} + +func buildTableRows(rows []prRow) []table.Row { + out := make([]table.Row, 0, len(rows)) + for _, r := range rows { + mark := idleMark + port := "" + if r.running { + mark = runMark + port = r.port + } + img := imgCheck + switch r.imageState { + case "yes": + img = imgYes + case "no": + img = imgNo + case "error": + img = imgError + } + if r.hasCurrentLocalImage() { + img = imgLocal + } + source := "remote" + ref := fmt.Sprint(r.pr.Number) + title := r.pr.Title + author := r.pr.Author + ci := ciIcon(r.pr.CIState) + if r.kind == "local" { + source = "local" + ref = r.local.Tag + title = r.local.Reference() + author = "untracked build" + if r.local.Source != "" { + author = filepath.Base(r.local.Source) + } + ci = ciNone + } else if r.pr.IsDraft { + title = "DRAFT · " + title + } + if len([]rune(title)) > 44 { + title = string([]rune(title)[:43]) + "…" + } + out = append(out, table.Row{ + mark, + source, + ref, + title, + author, + ci, + img, + port, + }) + } + return out +} + +func developmentRows(prs []gh.PR, images []docker.Image, imageStates map[int]string) ([]prRow, []int) { + rows := make([]prRow, 0, len(prs)+len(images)) + prIndexes := make(map[int]int, len(prs)) + queue := make([]int, 0, len(prs)) + for _, pr := range prs { + imageState := imageStates[pr.Number] + prIndexes[pr.Number] = len(rows) + rows = append(rows, prRow{kind: "remote", pr: pr, imageState: imageState}) + } + for _, image := range images { + if index, exists := prIndexes[image.PRNumber]; exists && image.Revision != "" && image.Revision == rows[index].pr.HeadSHA { + if rows[index].local.Tag == "" { + rows[index].local = image + } + continue + } + rows = append(rows, prRow{kind: "local", local: image, imageState: "yes"}) + } + for index := range rows { + if rows[index].kind != "remote" || rows[index].imageState != "" { + continue + } + if rows[index].hasCurrentLocalImage() { + rows[index].imageState = "unchecked" + continue + } + rows[index].imageState = "checking" + queue = append(queue, rows[index].pr.Number) + } + return rows, queue +} + +func prColumns(width int) []table.Column { + authorWidth := 16 + portWidth := 6 + if width < 90 { + authorWidth = 0 + } + if width < 72 { + portWidth = 0 + } + titleWidth := max(min(width-60, 45), 18) + return []table.Column{ + {Title: "", Width: 2}, + {Title: "SOURCE", Width: 8}, + {Title: "REF", Width: 12}, + {Title: "TITLE", Width: titleWidth}, + {Title: "AUTHOR", Width: authorWidth}, + {Title: "CI", Width: 3}, + {Title: "IMAGE", Width: 5}, + {Title: "PORT", Width: portWidth}, + } +} + +func newPRsModel() prsModel { + t := table.New( + table.WithColumns(prColumns(110)), + table.WithFocused(true), + table.WithHeight(18), + table.WithWidth(110), + ) + s := table.DefaultStyles() + s.Header = s.Header.Bold(true) + s.Selected = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("230")).Background(lipgloss.Color("57")) + t.SetStyles(s) + + sp := spinner.New() + sp.Spinner = spinner.Dot + filter := textinput.New() + filter.Prompt = "/ " + filter.Placeholder = "filter source, PR, image, title, author, branch, CI, port…" + filter.SetWidth(65) + filterStyles := textinput.DefaultDarkStyles() + filterStyles.Focused.Prompt = filterStyles.Focused.Prompt.Foreground(lipgloss.Color("212")).Bold(true) + filterStyles.Focused.Text = filterStyles.Focused.Text.Foreground(lipgloss.Color("229")) + filter.SetStyles(filterStyles) + pullView := viewport.New(viewport.WithWidth(110), viewport.WithHeight(7)) + pullView.SoftWrap = true + pullView.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("250")) + pullProgress := progress.New(progress.WithWidth(60), progress.WithColors(lipgloss.Color("212"))) + logs := viewport.New(viewport.WithWidth(110), viewport.WithHeight(7)) + logs.SoftWrap = true + logs.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("250")) + + return prsModel{table: t, filter: filter, pullView: pullView, pullLayers: make(map[string]string), pullProgress: pullProgress, logs: logs, followLogs: true, spinner: sp, loading: true, status: "loading development images…", width: 110, height: 32} +} + +func (m *prsModel) layout() { + reserved := 12 + if m.filtering || m.filter.Value() != "" { + reserved += 2 + } + if m.pulling { + reserved += 9 + } + if m.showLogs { + reserved += 9 + } + m.table.SetHeight(max(m.height-reserved, 6)) + m.pullView.SetWidth(max(m.width-2, 20)) + m.pullView.SetHeight(7) + m.pullProgress.SetWidth(max(min(m.width-12, 70), 20)) + m.logs.SetWidth(max(m.width-2, 20)) + m.logs.SetHeight(7) +} + +func (m *prsModel) applyFilter() { + rendered := buildTableRows(m.rows) + query := strings.ToLower(strings.TrimSpace(m.filter.Value())) + if query == "" { + m.table.SetRows(rendered) + return + } + rows := make([]table.Row, 0, len(rendered)) + for i, row := range m.rows { + terms := []string{ + row.kind, + fmt.Sprint(row.pr.Number), + fmt.Sprintf("#%d", row.pr.Number), + fmt.Sprintf("pr-%d", row.pr.Number), + row.pr.Title, + row.pr.Author, + row.pr.HeadRef, + row.pr.CIState, + row.imageState, + row.port, + row.local.Tag, + row.local.Source, + row.local.Revision, + } + if row.pr.IsDraft { + terms = append(terms, "draft") + } + if row.running { + terms = append(terms, "running started") + } + if strings.Contains(strings.ToLower(strings.Join(terms, " ")), query) { + rows = append(rows, rendered[i]) + } + } + m.table.SetRows(rows) +} + +func (m prsModel) selectedRow() *prRow { + selected := m.table.SelectedRow() + if len(selected) < 3 { + return nil + } + for i := range m.rows { + if m.rows[i].kind == selected[1] && ((selected[1] == "remote" && fmt.Sprint(m.rows[i].pr.Number) == selected[2]) || (selected[1] == "local" && m.rows[i].local.Tag == selected[2])) { + return &m.rows[i] + } + } + return nil +} + +func (m prsModel) selectedPR() *prRow { + row := m.selectedRow() + if row == nil || row.kind != "remote" { + return nil + } + return row +} + +func localBuildForRow(row prRow) (docker.Image, string, string) { + if row.kind == "remote" { + image := docker.Image{Tag: fmt.Sprintf("pr-%d", row.pr.Number), PRNumber: row.pr.Number} + return image, "built", fmt.Sprintf("building PR #%d locally as %s…", row.pr.Number, image.Reference()) + } + return row.local, "rebuilt", "rebuilding " + row.local.Reference() + "…" +} + +func localPRPlan(row prRow, demo bool, findPort func(int) int) (*run.Plan, error) { + plan, err := run.BuildPlan(run.Options{Context: context.Background(), Tag: row.local.Tag, Demo: demo, FindPort: findPort}) + if err != nil { + return nil, err + } + plan.Name = fmt.Sprintf("homarr_pr_%d", row.pr.Number) + plan.Volume = fmt.Sprintf("homarr_pr_%d_data", row.pr.Number) + plan.Label = fmt.Sprintf("PR #%d · local %s", row.pr.Number, truncateText(row.pr.HeadSHA, 12)) + plan.PRNumber = row.pr.Number + return plan, nil +} + +func (m *prsModel) refreshSelectedLogs() tea.Cmd { + row := m.selectedRow() + if row == nil || !row.running { + m.logsName = "" + m.logs.SetContent("selected image is not running") + return nil + } + name := fmt.Sprintf("homarr_pr_%d", row.pr.Number) + if row.kind == "local" { + name = "homarr_" + row.local.Tag + } + if name != m.logsName { + m.logsName = name + m.logs.SetContent("loading logs…") + } + return fetchLogs(name) +} + +func (m *prsModel) beginPull(row prRow) tea.Cmd { + plan, err := run.BuildPlan(run.Options{Context: context.Background(), PR: row.pr.Number, Demo: m.demo}) + if err != nil { + m.status = err.Error() + return nil + } + if row.running && row.port != "" { + if port, err := strconv.Atoi(row.port); err == nil { + plan.HostPort = port + } + } + ctx, cancel := context.WithCancel(context.Background()) + events := make(chan pullEvent, 128) + m.pulling = true + m.pullPlan = plan + m.pullCancel = cancel + m.pullEvents = events + m.pullLines = nil + m.pullLayers = make(map[string]string) + m.pullCanceled = false + m.pullView.SetContent("") + m.showLogs = false + m.logsName = "" + if row.running { + m.status = fmt.Sprintf("pulling latest image and redeploying PR #%d…", row.pr.Number) + } else { + m.status = fmt.Sprintf("pulling latest image for PR #%d…", row.pr.Number) + } + m.layout() + return tea.Batch(startPull(ctx, docker.PullCommandContext(ctx, plan.Image, plan.Platform), events), m.spinner.Tick) +} + +func (m *prsModel) appendPullLine(line string) { + const retainedLines = 40 + m.pullLines = append(m.pullLines, line) + if len(m.pullLines) > retainedLines { + m.pullLines = m.pullLines[len(m.pullLines)-retainedLines:] + } + m.pullView.SetContent(strings.Join(m.pullLines, "\n")) + m.pullView.GotoBottom() + parts := strings.SplitN(line, ":", 2) + if len(parts) == 2 { + layer := strings.TrimSpace(parts[0]) + if len(layer) == 12 { + m.pullLayers[layer] = strings.TrimSpace(parts[1]) + } + } +} + +func (m prsModel) pullCompletion() (complete, total int, percent float64) { + for _, state := range m.pullLayers { + total++ + lower := strings.ToLower(state) + if strings.Contains(lower, "pull complete") || strings.Contains(lower, "already exists") { + complete++ + } + } + if total > 0 { + percent = float64(complete) / float64(total) + } + return complete, total, percent +} + +func (m prsModel) Init() tea.Cmd { + return tea.Batch(loadDev(m.includeBots, false), m.spinner.Tick) +} + +func refreshRunning(rows []prRow, generation int) tea.Cmd { + return func() tea.Msg { + containers, _ := docker.List() + updated := append([]prRow(nil), rows...) + for index, row := range updated { + name := fmt.Sprintf("homarr_pr_%d", row.pr.Number) + if row.kind == "local" { + name = "homarr_" + row.local.Tag + } + row.running = false + row.port = "" + for _, container := range containers { + if container.Name == name && container.Running() { + row.running = true + row.port = container.HostPort() + } + } + updated[index] = row + } + return runningRefreshedMsg{rows: updated, generation: generation} + } +} + +func (m prsModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + switch msg := msg.(type) { + case tea.WindowSizeMsg: + m.width = msg.Width + m.height = msg.Height + m.table.SetColumns(prColumns(msg.Width)) + m.table.SetWidth(msg.Width) + m.filter.SetWidth(max(min(msg.Width-4, 75), 10)) + m.layout() + return m, nil + case prsLoadedMsg: + if msg.prErr != nil && msg.imgErr != nil { + m.loading = false + m.status = "failed to load development images: " + msg.prErr.Error() + "; " + msg.imgErr.Error() + return m, nil + } + m.loading = false + m.status = fmt.Sprintf("%d remote PRs · %d local images", len(msg.prs), len(msg.images)) + if msg.prErr != nil { + m.status = "remote PRs unavailable: " + msg.prErr.Error() + } else if msg.imgErr != nil { + m.status = "local images unavailable: " + msg.imgErr.Error() + } + imageStates := make(map[int]string, len(m.rows)) + if !msg.refresh || msg.prErr != nil { + for _, row := range m.rows { + if row.kind == "remote" && (row.imageState == "yes" || row.imageState == "no") { + imageStates[row.pr.Number] = row.imageState + } + } + } + m.rows, m.imageQueue = developmentRows(msg.prs, msg.images, imageStates) + m.imageGen++ + m.imageActive = 0 + m.applyFilter() + return m, tea.Batch(m.startImageChecks(), refreshRunning(m.rows, m.imageGen)) + case imageCheckedMsg: + if msg.gen != m.imageGen { + return m, nil + } + m.imageActive-- + for i, r := range m.rows { + if r.pr.Number == msg.number { + if msg.err != nil { + m.rows[i].imageState = "error" + m.status = msg.err.Error() + } else if msg.exists { + m.rows[i].imageState = "yes" + } else { + m.rows[i].imageState = "no" + } + } + } + m.applyFilter() + return m, m.startImageChecks() + case prActionMsg: + m.status = msg.text + return m, refreshRunning(m.rows, m.imageGen) + case runningRefreshedMsg: + if msg.generation != m.imageGen { + return m, nil + } + m.rows = msg.rows + m.applyFilter() + return m, m.refreshSelectedLogs() + case rebuildDoneMsg: + m.rebuilding = false + if m.rebuildCancel != nil { + m.rebuildCancel() + } + m.rebuildCancel = nil + m.loading = true + action := msg.action + if action == "" { + action = "rebuilt" + } + if msg.canceled { + m.status = action + " canceled" + } else if msg.err != nil { + m.status = action + " failed: " + msg.err.Error() + } else { + m.status = action + " " + msg.image.Reference() + } + return m, tea.Batch(loadDev(m.includeBots, true), m.spinner.Tick) + case logsMsg: + if !m.showLogs || msg.name == "" || msg.name != m.logsName { + return m, nil + } + m.logs.SetContent(strings.TrimRight(msg.content, "\n")) + if m.followLogs { + m.logs.GotoBottom() + } + return m, nil + case prLogTickMsg: + if !m.showLogs { + return m, nil + } + return m, tea.Batch(m.refreshSelectedLogs(), prLogTick()) + case pullReadyMsg: + return m, waitPull(m.pullEvents) + case pullEvent: + if !msg.done { + m.appendPullLine(msg.line) + return m, waitPull(m.pullEvents) + } + m.pulling = false + m.pullEvents = nil + if m.pullCancel != nil { + m.pullCancel() + } + m.pullCancel = nil + m.layout() + if msg.err != nil { + if m.pullCanceled { + m.status = "pull canceled" + } else { + m.status = "pull failed: " + msg.err.Error() + } + m.pullCanceled = false + m.pullPlan = nil + return m, nil + } + m.pullCanceled = false + plan := m.pullPlan + m.pullPlan = nil + if plan == nil { + return m, nil + } + for i := range m.rows { + if m.rows[i].pr.Number == plan.PRNumber { + m.rows[i].imageState = "yes" + } + } + m.applyFilter() + m.status = fmt.Sprintf("starting PR #%d…", plan.PRNumber) + return m, func() tea.Msg { + plan.Pull = false + if err := run.StartDetached(plan); err != nil { + return prActionMsg{"start failed: " + err.Error()} + } + return prActionMsg{fmt.Sprintf("started PR #%d → http://localhost:%d", plan.PRNumber, plan.HostPort)} + } + case spinner.TickMsg: + var cmd tea.Cmd + m.spinner, cmd = m.spinner.Update(msg) + if m.loading || m.pulling || m.rebuilding { + return m, cmd + } + return m, nil + case tea.KeyPressMsg: + if m.rebuilding { + switch msg.String() { + case "q", "ctrl+c", "esc": + if m.rebuildCancel != nil { + m.rebuildCancel() + } + m.status = "canceling rebuild…" + return m, nil + } + } + if m.pulling { + switch msg.String() { + case "q", "ctrl+c", "esc": + if m.pullCancel != nil { + m.pullCanceled = true + m.pullCancel() + } + m.status = "canceling pull…" + } + return m, nil + } + if m.filtering { + switch msg.Key().Code { + case tea.KeyEscape: + m.filtering = false + m.filter.Reset() + m.filter.Blur() + m.applyFilter() + m.layout() + return m, nil + case tea.KeyEnter: + m.filtering = false + m.filter.Blur() + m.layout() + return m, nil + } + var cmd tea.Cmd + m.filter, cmd = m.filter.Update(msg) + m.applyFilter() + return m, cmd + } + switch msg.Key().Code { + case tea.KeyUp, tea.KeyKpUp: + m.table.MoveUp(1) + return m, m.refreshSelectedLogs() + case tea.KeyDown, tea.KeyKpDown: + m.table.MoveDown(1) + return m, m.refreshSelectedLogs() + case tea.KeyPgUp, tea.KeyKpPgUp: + if m.showLogs { + m.followLogs = false + m.logs.PageUp() + } + return m, nil + case tea.KeyPgDown, tea.KeyKpPgDown: + if m.showLogs { + m.logs.PageDown() + m.followLogs = m.logs.AtBottom() + } + return m, nil + } + switch msg.String() { + case "q", "ctrl+c", "esc": + return m, tea.Quit + case "enter", "space": + row := m.selectedRow() + if row == nil { + return m, nil + } + name := fmt.Sprintf("homarr_pr_%d", row.pr.Number) + label := fmt.Sprintf("PR #%d", row.pr.Number) + if row.kind == "local" { + name = "homarr_" + row.local.Tag + label = row.local.Reference() + } + if row.running { + return m, func() tea.Msg { + if err := docker.Stop(name); err != nil { + return prActionMsg{"stop failed: " + err.Error()} + } + return prActionMsg{"stopped " + label} + } + } + if row.kind == "remote" { + if row.hasCurrentLocalImage() { + plan, err := localPRPlan(*row, m.demo, nil) + if err != nil { + m.status = err.Error() + return m, nil + } + m.status = fmt.Sprintf("starting PR #%d from local build…", row.pr.Number) + return m, func() tea.Msg { + if err := run.StartDetached(plan); err != nil { + return prActionMsg{"start failed: " + err.Error()} + } + return prActionMsg{fmt.Sprintf("started PR #%d from local build → http://localhost:%d", row.pr.Number, plan.HostPort)} + } + } + if row.imageState == "checking" { + m.status = fmt.Sprintf("PR #%d image check is still in progress", row.pr.Number) + return m, nil + } + return m, m.beginPull(*row) + } + plan, err := run.BuildPlan(run.Options{Context: context.Background(), Tag: row.local.Tag, Demo: m.demo}) + if err != nil { + m.status = err.Error() + return m, nil + } + return m, func() tea.Msg { + if err := run.StartDetached(plan); err != nil { + return prActionMsg{"start failed: " + err.Error()} + } + return prActionMsg{fmt.Sprintf("started %s → http://localhost:%d", label, plan.HostPort)} + } + case "r": + m.loading = true + m.status = "refreshing…" + return m, tea.Batch(loadDev(m.includeBots, true), m.spinner.Tick) + case "/": + m.filtering = true + m.layout() + return m, m.filter.Focus() + case "o": + row := m.selectedPR() + if row != nil { + if err := platform.OpenURL(fmt.Sprintf("https://github.com/homarr-labs/homarr/pull/%d", row.pr.Number)); err != nil { + m.status = "open failed: " + err.Error() + } + } + case "a": + row := m.selectedRow() + if row != nil && row.running && row.port != "" { + if err := platform.OpenURL("http://localhost:" + row.port); err != nil { + m.status = "open failed: " + err.Error() + } + } else { + m.status = "selected image is not running" + } + case "l": + m.showLogs = !m.showLogs + m.layout() + if m.showLogs { + m.followLogs = true + return m, tea.Batch(m.refreshSelectedLogs(), prLogTick()) + } + return m, nil + case "f": + if m.showLogs { + m.followLogs = !m.followLogs + if m.followLogs { + m.logs.GotoBottom() + } + } else { + m.status = "open logs with l first" + } + case "p": + row := m.selectedPR() + if row != nil { + return m, m.beginPull(*row) + } else { + m.status = "pull is only available for remote PR images" + } + case "R": + if m.rebuilding { + m.status = "a local build is already running" + return m, nil + } + row := m.selectedRow() + if row == nil { + m.status = "select an image to build" + return m, nil + } + image, action, status := localBuildForRow(*row) + ctx, cancel := context.WithCancel(context.Background()) + m.rebuilding = true + m.rebuildCancel = cancel + m.status = status + rebuild := func() tea.Msg { + output := &outputTail{} + err := run.RebuildImageContext(ctx, image, output, output) + if err != nil { + err = commandErrorWithDetail(err, output.lastLine()) + } + return rebuildDoneMsg{image: image, err: err, canceled: ctx.Err() != nil, action: action} + } + return m, tea.Batch(rebuild, m.spinner.Tick) + case "m": + m.demo = !m.demo + if m.demo { + m.status = "demo mode enabled for the next launch" + } else { + m.status = "demo mode disabled" + } + case "k": + m.table.MoveUp(1) + return m, m.refreshSelectedLogs() + case "j": + m.table.MoveDown(1) + return m, m.refreshSelectedLogs() + case "b": + m.includeBots = !m.includeBots + m.loading = true + if m.includeBots { + m.status = "refreshing (bots shown)…" + } else { + m.status = "refreshing (bots hidden)…" + } + return m, tea.Batch(loadDev(m.includeBots, false), m.spinner.Tick) + } + } + var cmd tea.Cmd + m.table, cmd = m.table.Update(msg) + return m, cmd +} + +func coloredCI(state string) string { + switch state { + case "SUCCESS": + return lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Render("✓ success") + case "FAILURE": + return lipgloss.NewStyle().Foreground(lipgloss.Color("196")).Render("✗ failed") + case "PENDING": + return lipgloss.NewStyle().Foreground(lipgloss.Color("214")).Render("● pending") + default: + return lipgloss.NewStyle().Foreground(lipgloss.Color("240")).Render("– no checks") + } +} + +func coloredImage(state string) string { + switch state { + case "yes": + return lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Render("✓ available") + case "no": + return lipgloss.NewStyle().Foreground(lipgloss.Color("240")).Render("… not built") + case "error": + return lipgloss.NewStyle().Foreground(lipgloss.Color("196")).Render("! check failed") + default: + return lipgloss.NewStyle().Foreground(lipgloss.Color("214")).Render("? checking") + } +} + +func (m prsModel) selectedDetailView() string { + row := m.selectedRow() + if row == nil { + return "" + } + if row.kind == "local" { + source := row.local.Source + if source == "" { + source = "unknown source · rebuild unavailable" + } + meta := "local · " + source + if row.local.Revision != "" { + meta += " · " + truncateText(row.local.Revision, 12) + } + if row.local.PRNumber > 0 { + meta += fmt.Sprintf(" · PR #%d", row.local.PRNumber) + } + if row.running { + meta += " · " + lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Render("running on :"+row.port) + } + title := lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("229")).Render(row.local.Reference()) + return title + "\n" + meta + } + branch := row.pr.HeadRef + if branch == "" { + branch = "unknown branch" + } + runSource := "run remote" + if row.hasCurrentLocalImage() { + runSource = "run local " + truncateText(row.local.Revision, 12) + } + meta := "@" + row.pr.Author + " · " + branch + " · CI " + coloredCI(row.pr.CIState) + " · " + runSource + if !row.hasCurrentLocalImage() { + meta += " · GHCR " + coloredImage(row.imageState) + } + if row.running { + meta += " · " + lipgloss.NewStyle().Foreground(lipgloss.Color("42")).Render("running on :"+row.port) + } + title := lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("229")).Render(fmt.Sprintf("#%d %s", row.pr.Number, row.pr.Title)) + return title + "\n" + meta +} + +func truncateText(value string, length int) string { + runes := []rune(value) + if len(runes) <= length { + return value + } + return string(runes[:length]) +} + +func (m prsModel) View() tea.View { + var b strings.Builder + header := titleStyle.Render("🦞 homarr development") + if m.loading || m.rebuilding { + header += " " + m.spinner.View() + } + running := 0 + remote := 0 + local := 0 + for _, row := range m.rows { + if row.kind == "local" { + local++ + } else { + remote++ + if row.hasCurrentLocalImage() { + local++ + } + } + if row.running { + running++ + } + } + header += " " + helpStyle.Render(fmt.Sprintf("%d remote · %d local · %d running · %d shown", remote, local, running, len(m.table.Rows()))) + if m.demo { + header += " " + lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("214")).Render("DEMO") + } + b.WriteString(header + "\n\n") + if m.filtering || m.filter.Value() != "" { + b.WriteString(m.filter.View() + "\n\n") + } + if len(m.table.Rows()) > 0 { + b.WriteString(m.table.View() + "\n") + } else if len(m.rows) > 0 { + b.WriteString(helpStyle.Render("no development images match "+m.filter.Value()) + "\n") + } + if detail := m.selectedDetailView(); detail != "" { + b.WriteString("\n" + detail + "\n") + } + if m.pulling { + label := "Pulling image" + if m.pullPlan != nil { + label = fmt.Sprintf("Pulling PR #%d", m.pullPlan.PRNumber) + } + b.WriteString("\n" + lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("214")).Render(m.spinner.View()+" "+label) + "\n") + complete, total, percent := m.pullCompletion() + if total > 0 { + b.WriteString(m.pullProgress.ViewAs(percent) + " " + helpStyle.Render(fmt.Sprintf("%d/%d layers", complete, total)) + "\n") + } + b.WriteString(m.pullView.View() + "\n") + b.WriteString(helpStyle.Render("q/esc cancel download") + "\n") + } + if m.showLogs { + mode := "paused" + if m.followLogs { + mode = "following" + } + name := m.logsName + if name == "" { + name = "selected image" + } + b.WriteString("\n" + logHeadSt.Render("── logs: "+name+" ("+mode+") ──") + "\n") + b.WriteString(m.logs.View() + "\n") + } + if m.status != "" { + statusStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("42")) + lower := strings.ToLower(m.status) + if strings.Contains(lower, "fail") || strings.Contains(lower, "error") || strings.Contains(lower, "cannot") { + statusStyle = statusStyle.Foreground(lipgloss.Color("196")) + } else if m.pulling || m.rebuilding || strings.Contains(lower, "starting") || strings.Contains(lower, "refreshing") { + statusStyle = statusStyle.Foreground(lipgloss.Color("214")) + } + b.WriteString("\n" + statusStyle.Render(m.status)) + } + botState := "bots hidden" + if m.includeBots { + botState = "bots shown" + } + if !m.pulling { + b.WriteString("\n\n" + helpStyle.Render("/ filter · ↑/↓ select · enter start/stop · R build locally · p pull remote · m demo · o PR · a app")) + b.WriteString("\n" + helpStyle.Render("b "+botState+" · r refresh · d instances · q quit")) + b.WriteString("\n" + helpStyle.Render("l toggle logs · f follow · pgup/pgdn scroll")) + if m.rebuilding { + b.WriteString("\n" + helpStyle.Render("local build running in background · q/esc cancel build")) + } + } + b.WriteString("\n" + helpStyle.Render("SOURCE: local Docker / remote GHCR · CI: "+legendCIYes+" pass "+legendCINo+" fail "+legendCIPend+" pending "+legendNone+" none · IMAGE: "+legendLocal+" local "+legendImageYes+" remote "+legendImageNo+" not built")) + v := tea.NewView(b.String()) + v.AltScreen = true + v.WindowTitle = "🦞 Homarr Development" + return v +} + +func RunDev() error { + return runApp(false) +} diff --git a/tools/homarr-dev/internal/tui/dev_test.go b/tools/homarr-dev/internal/tui/dev_test.go new file mode 100644 index 000000000..ecd8d85bf --- /dev/null +++ b/tools/homarr-dev/internal/tui/dev_test.go @@ -0,0 +1,228 @@ +package tui + +import ( + "errors" + "strings" + "testing" + + tea "charm.land/bubbletea/v2" + + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/docker" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/gh" +) + +func TestPRTableRendersRows(t *testing.T) { + m := newPRsModel() + m.rows = []prRow{{ + kind: "remote", + pr: gh.PR{Number: 6441, Title: "Human PR", Author: "ajnart", CIState: "SUCCESS"}, + imageState: "yes", + }} + m.table.SetRows(buildTableRows(m.rows)) + + if got := m.View().Content; !strings.Contains(got, "Human PR") { + t.Fatalf("table view omitted rows: %q", got) + } + if !m.View().AltScreen { + t.Fatal("development browser must use the alternate screen") + } +} + +func TestPRTableArrowNavigation(t *testing.T) { + m := newPRsModel() + m.rows = []prRow{ + {kind: "remote", pr: gh.PR{Number: 1, Title: "First"}}, + {kind: "remote", pr: gh.PR{Number: 2, Title: "Second"}}, + } + m.table.SetRows(buildTableRows(m.rows)) + + updated, _ := m.Update(tea.KeyPressMsg(tea.Key{Code: tea.KeyDown})) + got := updated.(prsModel).table.SelectedRow() + if len(got) < 3 || got[2] != "2" { + t.Fatalf("down arrow selected %v, want PR 2", got) + } +} + +func TestPRImageChecksAreBounded(t *testing.T) { + m := newPRsModel() + prs := make([]gh.PR, 20) + for i := range prs { + prs[i] = gh.PR{Number: i + 1, Title: "PR"} + } + + updated, cmd := m.Update(prsLoadedMsg{prs: prs}) + got := updated.(prsModel) + if cmd == nil { + t.Fatal("expected image check commands") + } + if got.imageActive != 6 || len(got.imageQueue) != 14 { + t.Fatalf("active=%d queued=%d, want active=6 queued=14", got.imageActive, len(got.imageQueue)) + } +} + +func TestPRLoadedReusesImageChecksUnlessRefreshIsForced(t *testing.T) { + m := newPRsModel() + m.rows = []prRow{{kind: "remote", pr: gh.PR{Number: 1}, imageState: "yes"}} + + updated, _ := m.Update(prsLoadedMsg{prs: []gh.PR{{Number: 1}, {Number: 2}}}) + cached := updated.(prsModel) + if cached.rows[0].imageState != "yes" || len(cached.imageQueue) != 0 || cached.imageActive != 1 { + t.Fatalf("cached states were not reused: rows=%#v queue=%v active=%d", cached.rows, cached.imageQueue, cached.imageActive) + } + + updated, _ = cached.Update(prsLoadedMsg{prs: []gh.PR{{Number: 1}, {Number: 2}}, refresh: true}) + refreshed := updated.(prsModel) + if refreshed.rows[0].imageState != "checking" || refreshed.imageActive != 2 { + t.Fatalf("forced refresh reused image states: rows=%#v active=%d", refreshed.rows, refreshed.imageActive) + } +} + +func TestDevelopmentRowsFoldCurrentLocalPRImage(t *testing.T) { + prs := []gh.PR{{Number: 6502, HeadSHA: "current"}} + images := []docker.Image{ + {Tag: "pr-6502", PRNumber: 6502, Revision: "current"}, + {Tag: "pr-6502-stale", PRNumber: 6502, Revision: "stale"}, + } + + rows, queue := developmentRows(prs, images, nil) + if len(rows) != 2 || !rows[0].hasCurrentLocalImage() || rows[0].local.Tag != "pr-6502" { + t.Fatalf("current image was not folded into PR row: %#v", rows) + } + if rows[1].kind != "local" || rows[1].local.Tag != "pr-6502-stale" { + t.Fatalf("stale image should remain separate: %#v", rows[1]) + } + if got := buildTableRows(rows)[0][6]; got != imgLocal { + t.Fatalf("image marker = %q, want %q", got, imgLocal) + } + if len(queue) != 0 { + t.Fatalf("current local image queued unnecessary registry checks: %v", queue) + } +} + +func TestLocalPRPlanUsesPRContainerIdentity(t *testing.T) { + row := prRow{ + kind: "remote", + pr: gh.PR{Number: 6502, HeadSHA: "abcdef1234567890"}, + local: docker.Image{Tag: "pr-6502", PRNumber: 6502, Revision: "abcdef1234567890"}, + } + plan, err := localPRPlan(row, false, func(int) int { return 7575 }) + if err != nil { + t.Fatal(err) + } + if plan.Image != "homarr:pr-6502" || plan.Name != "homarr_pr_6502" || plan.Volume != "homarr_pr_6502_data" || plan.Pull || plan.PRNumber != 6502 { + t.Fatalf("unexpected local PR plan: %#v", plan) + } +} + +func TestRemotePRBuildUsesTemporaryPRWorkflow(t *testing.T) { + image, action, status := localBuildForRow(prRow{kind: "remote", pr: gh.PR{Number: 6441}}) + if image.Tag != "pr-6441" || image.PRNumber != 6441 || action != "built" || !strings.Contains(status, "building PR #6441 locally") { + t.Fatalf("image=%#v action=%q status=%q", image, action, status) + } +} + +func TestPRImageCheckInProgressDoesNotLaunch(t *testing.T) { + m := newPRsModel() + m.rows = []prRow{{kind: "remote", pr: gh.PR{Number: 6441, Title: "Pending image"}, imageState: "checking"}} + m.table.SetRows(buildTableRows(m.rows)) + + updated, cmd := m.Update(tea.KeyPressMsg(tea.Key{Code: tea.KeyEnter})) + got := updated.(prsModel) + if cmd != nil { + t.Fatal("unavailable image returned a launch command") + } + if !strings.Contains(got.status, "still in progress") { + t.Fatalf("status = %q, want launch rejection", got.status) + } +} + +func TestPullErrorIncludesLastDockerMessage(t *testing.T) { + err := commandErrorWithDetail(errors.New("exit status 1"), "manifest unknown") + if !strings.Contains(err.Error(), "manifest unknown") { + t.Fatalf("pull error = %v", err) + } +} + +func TestOutputTailRetainsBuildFailure(t *testing.T) { + tail := &outputTail{} + _, _ = tail.Write([]byte("building\r\nERROR: Dockerfile not found\n")) + if got := tail.lastLine(); got != "ERROR: Dockerfile not found" { + t.Fatalf("last line = %q", got) + } +} + +func TestDevTableRendersLocalImageSource(t *testing.T) { + m := newPRsModel() + m.rows = []prRow{{ + kind: "local", + local: docker.Image{Tag: "feature", Source: "/tmp/homarr", Revision: "abcdef1234567890"}, + imageState: "yes", + }} + m.table.SetRows(buildTableRows(m.rows)) + + content := m.View().Content + for _, want := range []string{"local", "homarr:feature", "/tmp/homarr", "abcdef123456"} { + if !strings.Contains(content, want) { + t.Fatalf("development view omitted %q: %q", want, content) + } + } +} + +func TestRebuildCompletionRestoresLoadingState(t *testing.T) { + m := newPRsModel() + m.rebuilding = true + image := docker.Image{Tag: "feature"} + + updated, cmd := m.Update(rebuildDoneMsg{image: image}) + got := updated.(prsModel) + if got.rebuilding || !got.loading || got.status != "rebuilt homarr:feature" || cmd == nil { + t.Fatalf("unexpected rebuild state: rebuilding=%v loading=%v status=%q", got.rebuilding, got.loading, got.status) + } +} + +func TestRebuildCanBeCanceled(t *testing.T) { + m := newPRsModel() + canceled := false + m.rebuilding = true + m.rebuildCancel = func() { canceled = true } + + updated, cmd := m.Update(tea.KeyPressMsg(tea.Key{Code: 'q'})) + got := updated.(prsModel) + if !canceled || cmd != nil || got.status != "canceling rebuild…" { + t.Fatalf("cancel state: canceled=%v status=%q", canceled, got.status) + } +} + +func TestNavigationRemainsAvailableDuringBuild(t *testing.T) { + m := newPRsModel() + m.rebuilding = true + m.rows = []prRow{ + {kind: "remote", pr: gh.PR{Number: 1}}, + {kind: "remote", pr: gh.PR{Number: 2}}, + } + m.table.SetRows(buildTableRows(m.rows)) + + updated, _ := m.Update(tea.KeyPressMsg(tea.Key{Code: tea.KeyDown})) + selected := updated.(prsModel).table.SelectedRow() + if len(selected) < 3 || selected[2] != "2" { + t.Fatalf("build blocked navigation: %v", selected) + } +} + +func TestCompletedPullWithoutPlanDoesNotPanic(t *testing.T) { + m := newPRsModel() + m.pulling = true + m.pullCancel = func() {} + + updated, cmd := m.Update(pullEvent{done: true}) + got := updated.(prsModel) + if got.pulling || cmd != nil { + t.Fatalf("pulling=%v cmd=%v", got.pulling, cmd) + } +} + +func TestTruncateTextPreservesUTF8(t *testing.T) { + if got := truncateText("🦞homarr", 2); got != "🦞h" { + t.Fatalf("truncateText() = %q", got) + } +} diff --git a/tools/homarr-dev/main.go b/tools/homarr-dev/main.go new file mode 100644 index 000000000..2380e41bd --- /dev/null +++ b/tools/homarr-dev/main.go @@ -0,0 +1,301 @@ +package main + +import ( + "fmt" + "os" + "os/exec" + "strings" + + "github.com/spf13/cobra" + + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/docker" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/platform" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/run" + "github.com/homarr-labs/homarr/tools/homarr-dev/internal/tui" +) + +var ( + flagDemo bool + flagPR int + flagEnv []string + flagDetach bool + flagBuildPR int + runMain = tui.RunDev +) + +func main() { + if err := rootCmd.Execute(); err != nil { + os.Exit(1) + } +} + +var rootCmd = &cobra.Command{ + Use: "homarr", + Short: "Launch and manage Homarr Docker instances", + SilenceUsage: true, + Long: `Launch and manage Homarr Docker containers. + +Start a local image, a PR test build from ghcr.io, browse open PRs, +or manage running instances from an interactive dashboard. + +Examples: + homarr run dev # launch local homarr:dev image + homarr run --pr 6390 # launch remote PR test image + homarr run --pr 6390 --demo # PR + demo mode + homarr run -e FOO=bar dev # extra env vars + homarr run --detach dev # start in background + homarr dash # interactive instance dashboard + homarr dev # browse remote PRs and local images + homarr build feature # build this checkout as homarr:feature + homarr build --pr 6390 # build PR #6390 locally as homarr:pr-6390 + homarr list # script-friendly instance list + homarr logs homarr_pr_6390 # follow logs + homarr doctor # check Docker and optional integrations`, + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + return runMain() + }, +} + +var dashCmd = &cobra.Command{ + Use: "dash", + Short: "Interactive dashboard of running instances", + RunE: func(cmd *cobra.Command, args []string) error { + return tui.RunDashboard() + }, +} + +var runCmd = &cobra.Command{ + Use: "run [tag]", + Short: "Launch a local image or remote pull-request image", + Args: cobra.MaximumNArgs(1), + RunE: runLaunch, +} + +var devCmd = &cobra.Command{ + Use: "dev", + Short: "Browse remote PRs and local development images", + RunE: func(cmd *cobra.Command, args []string) error { + return tui.RunDev() + }, +} + +var buildCmd = &cobra.Command{ + Use: "build [name]", + Short: "Build a local Homarr image from this checkout or a pull request", + Args: cobra.MaximumNArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + tag := "" + if len(args) > 0 { + tag = args[0] + } + if flagBuildPR < 0 { + return fmt.Errorf("PR number must be positive") + } + if flagBuildPR > 0 { + if tag == "" { + tag = fmt.Sprintf("pr-%d", flagBuildPR) + } + return run.BuildPRImage(flagBuildPR, tag) + } + if tag == "" { + return fmt.Errorf("image name is required when --pr is not set") + } + return run.BuildCurrentImage(tag, ".") + }, +} + +var rebuildCmd = &cobra.Command{ + Use: "rebuild ", + Short: "Rebuild a local image from its recorded checkout or pull request", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + images, err := docker.ListLocalImages(cmd.Context()) + if err != nil { + return err + } + for _, image := range images { + if image.Tag == args[0] || image.Reference() == args[0] { + return run.RebuildImage(image) + } + } + return fmt.Errorf("local image homarr:%s was not found", strings.TrimPrefix(args[0], "homarr:")) + }, +} + +var logsCmd = &cobra.Command{ + Use: "logs ", + Short: "Follow logs of a running instance", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + return docker.FollowLogs(args[0]) + }, +} + +var stopCmd = &cobra.Command{ + Use: "stop ", + Short: "Stop a running instance", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + return docker.Stop(args[0]) + }, +} + +var restartCmd = &cobra.Command{ + Use: "restart ", + Short: "Restart a running instance", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + return docker.Restart(args[0]) + }, +} + +var removeCmd = &cobra.Command{ + Use: "remove ", + Short: "Force-remove an instance", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + return docker.Remove(args[0]) + }, +} + +var openCmd = &cobra.Command{ + Use: "open ", + Short: "Open a running instance in the browser", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + containers, err := docker.List() + if err != nil { + return err + } + for _, container := range containers { + if container.Name != args[0] { + continue + } + if !container.Running() { + return fmt.Errorf("container %q is not running", args[0]) + } + port := container.HostPort() + if port == "" { + return fmt.Errorf("container %q does not publish the Homarr port", args[0]) + } + return platform.OpenURL("http://localhost:" + port) + } + return fmt.Errorf("container %q was not found", args[0]) + }, +} + +var listCmd = &cobra.Command{ + Use: "list", + Aliases: []string{"ls"}, + Short: "List Homarr instances without opening the dashboard", + RunE: func(cmd *cobra.Command, args []string) error { + containers, err := docker.List() + if err != nil { + return err + } + if len(containers) == 0 { + fmt.Println("No Homarr instances found.") + return nil + } + fmt.Printf("%-28s %-10s %-7s %s\n", "NAME", "STATE", "PORT", "IMAGE") + for _, container := range containers { + fmt.Printf("%-28s %-10s %-7s %s\n", container.Name, container.State, container.HostPort(), container.Image) + } + return nil + }, +} + +var doctorCmd = &cobra.Command{ + Use: "doctor", + Short: "Check Docker and optional developer CLI integrations", + RunE: func(cmd *cobra.Command, args []string) error { + failed := false + output, err := exec.Command("docker", "info", "--format", "{{.ServerVersion}}").CombinedOutput() + if err != nil { + failed = true + fmt.Printf("✗ Docker daemon: %s\n", strings.TrimSpace(string(output))) + } else { + fmt.Printf("✓ Docker daemon: %s\n", strings.TrimSpace(string(output))) + } + + if _, err := exec.LookPath("gh"); err != nil { + fmt.Println("- GitHub CLI not found (optional; required for pull-request features)") + } else if output, err := exec.Command("gh", "auth", "status").CombinedOutput(); err != nil { + fmt.Printf("- GitHub CLI is not authenticated (optional; run `gh auth login` for pull-request features): %s\n", strings.TrimSpace(string(output))) + } else { + fmt.Println("✓ GitHub CLI authentication") + } + + if _, err := exec.LookPath("homarr"); err != nil { + fmt.Println("- homarr is not on PATH (optional; use `pnpm dev:cli -- ...` or run `pnpm dev:cli:install`)") + } else { + fmt.Println("✓ homarr is on PATH") + } + if failed { + return fmt.Errorf("one or more checks failed") + } + return nil + }, +} + +func init() { + runCmd.Flags().BoolVarP(&flagDemo, "demo", "m", false, "Demo mode (mock integrations)") + runCmd.Flags().IntVarP(&flagPR, "pr", "p", 0, "Launch PR test image from ghcr.io") + runCmd.Flags().StringArrayVarP(&flagEnv, "env", "e", nil, "Extra env vars (repeatable, KEY=VALUE)") + runCmd.Flags().BoolVar(&flagDetach, "detach", false, "Start in the background") + buildCmd.Flags().IntVarP(&flagBuildPR, "pr", "p", 0, "Build a pull request in a temporary checkout") + + rootCmd.AddCommand(runCmd, dashCmd, devCmd, buildCmd, rebuildCmd, listCmd, logsCmd, stopCmd, restartCmd, removeCmd, openCmd, doctorCmd) +} + +func runLaunch(cmd *cobra.Command, args []string) error { + tag := "" + if len(args) > 0 { + tag = args[0] + } + if flagPR < 0 { + return fmt.Errorf("PR number must be positive") + } + if flagPR > 0 && tag != "" { + return fmt.Errorf("tag and --pr cannot be used together") + } + if flagPR == 0 && tag == "" { + if err := cmd.Usage(); err != nil { + return err + } + return fmt.Errorf("provide a tag or --pr") + } + + plan, err := run.BuildPlan(run.Options{ + Context: cmd.Context(), + PR: flagPR, + Tag: tag, + Demo: flagDemo, + Env: flagEnv, + FetchTitle: flagPR > 0, + }) + if err != nil { + return err + } + + fmt.Printf("Starting Homarr (%s)\n", plan.Label) + fmt.Printf(" Image : %s\n", plan.Image) + fmt.Printf(" Container : %s\n", plan.Name) + fmt.Printf(" Volume : %s\n", plan.Volume) + fmt.Printf(" Port : %d:7575\n", plan.HostPort) + fmt.Printf(" URL : http://localhost:%d\n", plan.HostPort) + if plan.PRNumber > 0 { + fmt.Printf(" PR : https://github.com/homarr-labs/homarr/pull/%d\n", plan.PRNumber) + } + fmt.Println() + + if flagDetach { + if err := run.StartDetached(plan); err != nil { + return err + } + fmt.Printf("Started in background: http://localhost:%d\n", plan.HostPort) + return nil + } + return run.StartForeground(plan) +} diff --git a/tools/homarr-dev/main_test.go b/tools/homarr-dev/main_test.go new file mode 100644 index 000000000..1736d98b3 --- /dev/null +++ b/tools/homarr-dev/main_test.go @@ -0,0 +1,51 @@ +package main + +import ( + "errors" + "strings" + "testing" +) + +func TestRootCommandLaunchesDevelopmentDashboard(t *testing.T) { + want := errors.New("dashboard started") + previous := runMain + t.Cleanup(func() { runMain = previous }) + runMain = func() error { return want } + + if err := rootCmd.RunE(rootCmd, nil); !errors.Is(err, want) { + t.Fatalf("root command error = %v", err) + } +} + +func TestRunLaunchRejectsTagWithPR(t *testing.T) { + previousPR := flagPR + t.Cleanup(func() { flagPR = previousPR }) + flagPR = 42 + + err := runLaunch(runCmd, []string{"feature"}) + if err == nil || !strings.Contains(err.Error(), "cannot be used together") { + t.Fatalf("error = %v", err) + } +} + +func TestRunLaunchRejectsNegativePR(t *testing.T) { + previousPR := flagPR + t.Cleanup(func() { flagPR = previousPR }) + flagPR = -1 + + err := runLaunch(runCmd, nil) + if err == nil || !strings.Contains(err.Error(), "must be positive") { + t.Fatalf("error = %v", err) + } +} + +func TestRunLaunchRejectsMissingImage(t *testing.T) { + previousPR := flagPR + t.Cleanup(func() { flagPR = previousPR }) + flagPR = 0 + + err := runLaunch(runCmd, nil) + if err == nil || !strings.Contains(err.Error(), "provide a tag or --pr") { + t.Fatalf("error = %v", err) + } +}