From ac6a0c9254b26363a516031795d71b6bece35487 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 17 Jul 2026 19:24:43 +0000 Subject: [PATCH 01/24] docs(helm): update chart installation page --- apps/docs/docs/getting-started/installation/helm.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/docs/docs/getting-started/installation/helm.md b/apps/docs/docs/getting-started/installation/helm.md index 039f76ed4..d768ec69a 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.22.0](https://img.shields.io/badge/Version-8.22.0-informational?style=flat) +![Version: 8.23.0](https://img.shields.io/badge/Version-8.23.0-informational?style=flat) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat) -![AppVersion: v1.70.0](https://img.shields.io/badge/AppVersion-v1.70.0-informational?style=flat) +![AppVersion: v1.71.0](https://img.shields.io/badge/AppVersion-v1.71.0-informational?style=flat) A Helm chart to deploy homarr for Kubernetes @@ -259,7 +259,7 @@ httproute: value: / backendRefs: - name: homarr - port: 8080 + port: 7575 ```` @@ -419,17 +419,17 @@ All available values are listed on the [artifacthub](https://artifacthub.io/pack | envSecrets.dbEncryption.key | string | `"db-encryption-key"` | Secret key for SECRET_ENCRYPTION_KEY can be generated with `openssl rand -hex 32` | | fullnameOverride | string | `""` | Overrides chart's fullname | | hostAliases | list | `[]` | Add static entries to /etc/hosts in the Pod. This is useful in the following cases: - You are running in a dual-stack cluster (IPv4 + IPv6) and want to force usage of IPv4 for specific hostnames - Your application is having DNS resolution issues or IPv6 preference issues - You need to override or simulate DNS entries without changing global DNS - You are running in an air-gapped or isolated environment without external DNS Example: hostAliases: - ip: "192.168.1.10" hostnames: - "example.com" - "example.internal" | -| httproute | object | `{"enabled":false,"hostnames":["chart-example.local"],"parentRefs":[{"name":"my-gateway","namespace":"default"}],"rules":[{"backendRefs":[{"name":"homarr","port":8080}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]}` | Gateway API HTTPRoute configuration | +| httproute | object | `{"enabled":false,"hostnames":["chart-example.local"],"parentRefs":[{"name":"my-gateway","namespace":"default"}],"rules":[{"backendRefs":[{"name":"homarr","port":7575}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]}` | Gateway API HTTPRoute configuration | | httproute.enabled | bool | `false` | Enable HTTPRoute | | httproute.hostnames | list | `["chart-example.local"]` | Hostnames this route matches (similar to ingress.hosts.host) | | httproute.parentRefs | list | `[{"name":"my-gateway","namespace":"default"}]` | References to the parent Gateway(s) this route attaches to. Each item must include at least a `name`, and optionally a `namespace`. | -| httproute.rules | list | `[{"backendRefs":[{"name":"homarr","port":8080}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | List of routing rules. Each rule can include: - matches: path/header/query matching - filters: optional transformations (redirects, header modifications, etc.) - backendRefs: one or more Kubernetes Services to forward traffic to | +| httproute.rules | list | `[{"backendRefs":[{"name":"homarr","port":7575}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | List of routing rules. Each rule can include: - matches: path/header/query matching - filters: optional transformations (redirects, header modifications, etc.) - backendRefs: one or more Kubernetes Services to forward traffic to | | httproute.rules[0].filters | list | `[]` | Optional filters for this rule (default: empty) | | httproute.rules[0].matches[0].path.type | string | `"PathPrefix"` | Path match type. One of: Exact, PathPrefix, RegularExpression | | 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.70.0"` | Overrides the image tag whose default is the chart appVersion | +| image.tag | string | `"v1.71.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 | From 6aeda3faaf69d90a58d756556d7676f605cdfa47 Mon Sep 17 00:00:00 2001 From: "homarr-update-contributors[bot]" <210161987+homarr-update-contributors[bot]@users.noreply.github.com> Date: Sat, 18 Jul 2026 22:43:01 +0200 Subject: [PATCH 02/24] chore: update contributors (#6378) --- static-data/contributors.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static-data/contributors.json b/static-data/contributors.json index c576fb0d1..7669aba97 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":"jackwellerreal","avatar_url":"https://avatars.githubusercontent.com/u/97435840?v=4"},{"login":"Bergasha","avatar_url":"https://avatars.githubusercontent.com/u/25044200?v=4"},{"login":"Copilot","avatar_url":"https://avatars.githubusercontent.com/in/1143301?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":"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":"AartSchinkel","avatar_url":"https://avatars.githubusercontent.com/u/189675191?v=4"},{"login":"mairas","avatar_url":"https://avatars.githubusercontent.com/u/407010?v=4"},{"login":"itzTheMeow","avatar_url":"https://avatars.githubusercontent.com/u/50887230?v=4"},{"login":"Nerdy-Technician","avatar_url":"https://avatars.githubusercontent.com/u/45691205?v=4"},{"login":"NicolasNewman","avatar_url":"https://avatars.githubusercontent.com/u/16135852?v=4"},{"login":"NikeLaosClericus","avatar_url":"https://avatars.githubusercontent.com/u/39810627?v=4"},{"login":"noahcroghan","avatar_url":"https://avatars.githubusercontent.com/u/27422774?v=4"},{"login":"ohmzi","avatar_url":"https://avatars.githubusercontent.com/u/6551272?v=4"},{"login":"Rhiz3K","avatar_url":"https://avatars.githubusercontent.com/u/33246262?v=4"},{"login":"saschabuehrle","avatar_url":"https://avatars.githubusercontent.com/u/47737812?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":"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":"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":"mrjoshuap","avatar_url":"https://avatars.githubusercontent.com/u/5722442?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"},{"login":"Bricklou","avatar_url":"https://avatars.githubusercontent.com/u/15181236?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":"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 From 77dc317da22977c51d720a729ed57710b74b5a7d Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 18 Jul 2026 22:55:38 +0200 Subject: [PATCH 03/24] chore(ci): remove memory regression tests (#6395) --- .github/workflows/ci.yml | 90 ++++------------------------------------ 1 file changed, 7 insertions(+), 83 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cf509dbba..dcbb352c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,7 +60,7 @@ jobs: TURBO_PLATFORM: linux/amd64 steps: - uses: actions/checkout@v7 - if: '!env.ACT' + if: "!env.ACT" with: fetch-depth: 0 persist-credentials: false @@ -91,7 +91,7 @@ jobs: run: pnpm test container: - name: Container, E2E, and memory + name: Container and E2E needs: fast-gate if: | github.event_name == 'merge_group' || @@ -104,7 +104,7 @@ jobs: packages: write steps: - uses: actions/checkout@v7 - if: '!env.ACT' + if: "!env.ACT" with: persist-credentials: false ref: ${{ github.event_name == 'workflow_dispatch' && inputs.ref || '' }} @@ -113,11 +113,11 @@ jobs: uses: ./tooling/github/setup - name: Set up Docker Buildx - if: '!env.ACT' + if: "!env.ACT" uses: docker/setup-buildx-action@v4 - name: Build container once - if: '!env.ACT' + if: "!env.ACT" uses: docker/build-push-action@v7 with: context: . @@ -158,7 +158,7 @@ jobs: --tag homarr-ci --tag homarr-e2e "${secret_args[@]}" . - name: Cache Playwright browsers - if: '!env.ACT' + if: "!env.ACT" id: playwright-cache uses: actions/cache@v6 with: @@ -184,82 +184,6 @@ jobs: path: e2e/test-results/ retention-days: 7 - - name: Run memory regression test - env: - CONTAINER_NAME: homarr-mem-${{ github.run_id }}-${{ github.run_attempt }} - SECRET_ENCRYPTION_KEY: 0000000000000000000000000000000000000000000000000000000000000000 - run: | - docker run -d --name "$CONTAINER_NAME" -p 127.0.0.1::7575 \ - -e NO_EXTERNAL_CONNECTION=true \ - -e SECRET_ENCRYPTION_KEY="$SECRET_ENCRYPTION_KEY" \ - homarr-ci - PORT=$(docker port "$CONTAINER_NAME" 7575/tcp | sed 's/.*://') - [[ "$PORT" =~ ^[0-9]+$ ]] || { echo "ERROR: invalid port mapping: '$PORT'"; exit 1; } - URL="http://127.0.0.1:${PORT}" - - healthy=false - for i in $(seq 1 30); do - if curl -sf "$URL/api/health/ready" >/dev/null 2>&1; then - echo "Container healthy after $((i * 2))s" - healthy=true - break - fi - sleep 2 - done - - if [ "$healthy" != "true" ]; then - echo "ERROR: Container never became healthy" - docker logs "$CONTAINER_NAME" --tail 100 - exit 1 - fi - - warmup_ok=0 - for _ in $(seq 1 5); do - curl -sf "$URL/" >/dev/null 2>&1 && warmup_ok=$((warmup_ok + 1)) - sleep 2 - done - if [ "$warmup_ok" -eq 0 ]; then - echo "ERROR: All warmup requests failed" - docker logs "$CONTAINER_NAME" --tail 50 - exit 1 - fi - - docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" | grep -qx true || { - echo "ERROR: Container died before memory measurement" - docker logs "$CONTAINER_NAME" --tail 100 - exit 1 - } - - RAW_MEMORY=$(docker stats --no-stream --format '{{.MemUsage}}' "$CONTAINER_NAME" | sed 's| /.*||') - MEMORY_MB=$(echo "$RAW_MEMORY" | awk ' - /GiB/ { gsub(/GiB/, ""); print $1 * 1024; next } - /MiB/ { gsub(/MiB/, ""); print $1; next } - /KiB/ { gsub(/KiB/, ""); print $1 / 1024; next } - { print $1 / 1048576 } - ') - - echo "Memory usage: ${MEMORY_MB} MB (${RAW_MEMORY})" - [[ "$MEMORY_MB" =~ ^[0-9]+(\.[0-9]+)?$ ]] || { - echo "ERROR: non-numeric memory value: '$MEMORY_MB' (raw: '$RAW_MEMORY')" - docker logs "$CONTAINER_NAME" --tail 100 - exit 1 - } - if awk "BEGIN { exit !($MEMORY_MB < 50) }"; then - echo "ERROR: Memory suspiciously low (${MEMORY_MB} MB) — container may have crashed" - docker logs "$CONTAINER_NAME" --tail 100 - exit 1 - elif awk "BEGIN { exit !($MEMORY_MB > 700) }"; then - echo "ERROR: Memory usage ${MEMORY_MB} MB exceeds 700 MB" - docker logs "$CONTAINER_NAME" --tail 100 - exit 1 - fi - - - name: Clean up memory test container - if: always() - env: - CONTAINER_NAME: homarr-mem-${{ github.run_id }}-${{ github.run_attempt }} - run: docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true - - name: Determine preview tag id: preview if: | @@ -309,7 +233,7 @@ jobs: run: test -n "$PR_NUMBER" || { echo "pr_number is required for cleanup"; exit 1; } - name: Delete GHCR package version - if: '!env.ACT' + if: "!env.ACT" uses: actions/github-script@v8 with: script: | From 0015a6d88d0d8f7c8a1c4e0ac4d33a8b3e5a9c10 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 20 Jul 2026 14:53:27 +0200 Subject: [PATCH 04/24] fix(immich): use thumbnail endpoint instead of original for album carousel (#6396) * fix(immich): use thumbnail endpoint instead of original for album carousel Switches from /api/assets/:id/original to /api/assets/:id/thumbnail to fix HEIC image incompatibility (thumbnails are always JPEG), reduce bandwidth, and improve loading speed. Closes #6388 * working on immich * Improve image proxy error handling * fix(image-proxy): use trusted fetch response type * docs(immich): require Asset View permission --- apps/docs/docs/integrations/immich/index.mdx | 2 +- .../src/app/api/image-proxy/[id]/route.ts | 18 ++++++--- packages/image-proxy/src/index.ts | 39 +++++++++++++++---- .../src/immich/immich-integration.ts | 5 ++- 4 files changed, 48 insertions(+), 16 deletions(-) diff --git a/apps/docs/docs/integrations/immich/index.mdx b/apps/docs/docs/integrations/immich/index.mdx index ed88466ce..f3bcded63 100644 --- a/apps/docs/docs/integrations/immich/index.mdx +++ b/apps/docs/docs/integrations/immich/index.mdx @@ -55,7 +55,7 @@ import { immichServerStatsWidget } from '../../widgets/immich-server-stats'; server.statistics,{" "} server.about.
- Additional permissions may be required depending on your Immich version. If you encounter authorization errors, grant any missing permissions requested by the server. + The Asset View permission is required for the Immich Album Carousel to load image thumbnails. Select it when creating the API key, or use the All permissions preset. Without it, Immich returns a 403 Forbidden response for thumbnail requests. ), diff --git a/apps/nextjs/src/app/api/image-proxy/[id]/route.ts b/apps/nextjs/src/app/api/image-proxy/[id]/route.ts index 26eb70dd8..1235d54a4 100644 --- a/apps/nextjs/src/app/api/image-proxy/[id]/route.ts +++ b/apps/nextjs/src/app/api/image-proxy/[id]/route.ts @@ -1,19 +1,25 @@ -import { notFound } from "next/navigation"; - import { ImageProxy } from "@homarr/image-proxy"; export const GET = async (_request: Request, props: { params: Promise<{ id: string }> }) => { const { id } = await props.params; const imageProxy = new ImageProxy(); - const image = await imageProxy.forwardImageAsync(id); - if (!image) { - notFound(); + const result = await imageProxy.forwardImageAsync(id); + + if ("error" in result) { + const status = result.error === "upstream-error" ? result.statusCode : result.error === "fetch-error" ? 502 : 404; + return new Response(null, { + status, + headers: { + "X-Homarr-Image-Proxy-Error": result.error, + }, + }); } - return new Response(image, { + return new Response(result.image, { headers: { "Cache-Control": "public, max-age=3600, immutable", // Cache for 1 hour + ...(result.contentType ? { "Content-Type": result.contentType } : {}), }, }); }; diff --git a/packages/image-proxy/src/index.ts b/packages/image-proxy/src/index.ts index 900509d38..445547992 100644 --- a/packages/image-proxy/src/index.ts +++ b/packages/image-proxy/src/index.ts @@ -19,6 +19,12 @@ const createUrlByIdChannel = (id: string) => headers: `${string}.${string}`; }>(`image-proxy:url:${id}`); +export type ForwardImageResult = + | { image: ArrayBuffer; contentType: string | null } + | { error: "not-found" } + | { error: "upstream-error"; statusCode: number } + | { error: "fetch-error" }; + export class ImageProxy { private static hmacKey: Buffer | null = null; @@ -47,17 +53,34 @@ export class ImageProxy { return this.createImageUrl(id); } - public async forwardImageAsync(id: string): Promise { + public async forwardImageAsync(id: string): Promise { const urlAndHeaders = await this.getImageUrlAndHeadersAsync(id); if (!urlAndHeaders) { - return null; + return { error: "not-found" }; } - const response = await fetchWithTrustedCertificatesAsync(urlAndHeaders.url, { - headers: urlAndHeaders.headers ?? {}, - }); - const proxyUrl = this.createImageUrl(id); + let response: Awaited>; + try { + response = await fetchWithTrustedCertificatesAsync(urlAndHeaders.url, { + headers: urlAndHeaders.headers ?? {}, + }); + } catch (error) { + logger.error( + new ErrorWithMetadata( + "Failed to connect to image source", + { + id, + url: this.redactUrl(urlAndHeaders.url), + headers: this.redactHeaders(urlAndHeaders.headers), + proxyUrl, + }, + { cause: error }, + ), + ); + return { error: "fetch-error" }; + } + if (!response.ok) { logger.error( new ErrorWithMetadata("Failed to fetch image", { @@ -68,7 +91,7 @@ export class ImageProxy { statusCode: response.status, }), ); - return null; + return { error: "upstream-error", statusCode: response.status }; } const arrayBuffer = await response.arrayBuffer(); @@ -80,7 +103,7 @@ export class ImageProxy { size: `${(arrayBuffer.byteLength / 1024).toFixed(1)}KB`, }); - return arrayBuffer; + return { image: arrayBuffer, contentType: response.headers.get("content-type") }; } private createImageUrl(id: string): string { diff --git a/packages/integrations/src/immich/immich-integration.ts b/packages/integrations/src/immich/immich-integration.ts index c01386256..6274802a5 100644 --- a/packages/integrations/src/immich/immich-integration.ts +++ b/packages/integrations/src/immich/immich-integration.ts @@ -1,4 +1,5 @@ import { + AssetMediaSize, getAlbumInfo, getAllAlbums, getMyUser, @@ -75,7 +76,9 @@ export class ImmichIntegration extends Integration { assets: await Promise.all( albumAssets.map(async (asset) => { const publicLink = await imageProxy.createImageAsync( - this.url(`/api/assets/${asset.id}/original`).toString(), + // This is the URL generated by the SDK's viewAsset call. Preview images are + // browser-compatible while avoiding the large original asset download. + this.url(`/api/assets/${asset.id}/thumbnail`, { size: AssetMediaSize.Preview }).toString(), { "x-api-key": this.getSecretValue("apiKey"), }, From 01e0f3612dc562955edd5e9fae8b1f7453ee2678 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 20 Jul 2026 14:57:07 +0200 Subject: [PATCH 05/24] docs(immich): list Asset View permission (#6408) --- apps/docs/docs/integrations/immich/index.mdx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/docs/docs/integrations/immich/index.mdx b/apps/docs/docs/integrations/immich/index.mdx index f3bcded63..a0a351f15 100644 --- a/apps/docs/docs/integrations/immich/index.mdx +++ b/apps/docs/docs/integrations/immich/index.mdx @@ -50,12 +50,11 @@ import { immichServerStatsWidget } from '../../widgets/immich-server-stats'; user.read,{" "} user.update,{" "} asset.read,{" "} + asset.view,{" "} asset.download,{" "} asset.statistics,{" "} server.statistics,{" "} server.about. -
- The Asset View permission is required for the Immich Album Carousel to load image thumbnails. Select it when creating the API key, or use the All permissions preset. Without it, Immich returns a 403 Forbidden response for thumbnail requests. ), From 1e9d3e0656649199e06a9c5411a36c415f7f4495 Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Mon, 20 Jul 2026 15:18:50 +0200 Subject: [PATCH 06/24] fix(db): increase mysql migration test timeout to 120s --- packages/db/test/mysql-migration.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/db/test/mysql-migration.spec.ts b/packages/db/test/mysql-migration.spec.ts index a235f00fc..b781a9531 100644 --- a/packages/db/test/mysql-migration.spec.ts +++ b/packages/db/test/mysql-migration.spec.ts @@ -37,5 +37,5 @@ describe("Mysql Migration", () => { connection.end(); await mysqlContainer.stop(); - }, 40_000); + }, 120_000); }); From c03cd97d3aa65b481ee96f6eda3df0bec4a8a348 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 20 Jul 2026 15:27:50 +0200 Subject: [PATCH 07/24] fix(test): use Home Assistant long-lived token JWT * fix(test): use Home Assistant long-lived token * fix(test): revert to correct Home Assistant long-lived token JWT From f1602f67d45f3ccdc090ad1cd94718a62c021b2f Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 20 Jul 2026 17:01:07 +0200 Subject: [PATCH 08/24] fix: stop auto-seeding ArchiveTeam Warrior integration and widget on default dashboards (#6413) --- packages/definitions/src/integration.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/definitions/src/integration.ts b/packages/definitions/src/integration.ts index 211f0807b..2116cf4da 100644 --- a/packages/definitions/src/integration.ts +++ b/packages/definitions/src/integration.ts @@ -467,7 +467,6 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/selfhst/icons/png/archiveteam-warrior.png", category: ["archiving"], documentationUrl: null, - defaultUrl: "http://localhost:8001", }, // This integration only returns mock data, it is used during development (but can also be used in production by directly going to the create page) mock: { From dd23de7aaabed8375cba3af5ad691e64a8f187f8 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2026 05:54:52 +0000 Subject: [PATCH 09/24] chore(deps): update pnpm to v11.13.1 (#6422) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- deployments/prebuilt-debian/package.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deployments/prebuilt-debian/package.json b/deployments/prebuilt-debian/package.json index 8b9eda79a..3294d8c63 100644 --- a/deployments/prebuilt-debian/package.json +++ b/deployments/prebuilt-debian/package.json @@ -6,7 +6,7 @@ }, "engines": { "node": ">=24.18.0", - "pnpm": ">=11.11.0" + "pnpm": ">=11.13.1" }, - "packageManager": "pnpm@11.11.0" + "packageManager": "pnpm@11.13.1" } diff --git a/package.json b/package.json index dd2447dda..568785feb 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ }, "engines": { "node": ">=24.18.0", - "pnpm": ">=11.11.0" + "pnpm": ">=11.13.1" }, - "packageManager": "pnpm@11.11.0" + "packageManager": "pnpm@11.13.1" } From 17062891249da73929b0ef16e8826dba1a3e1e24 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 21 Jul 2026 16:01:37 +0200 Subject: [PATCH 10/24] fix(media-server): guard against undefined playback from stale cached data (#6433) --- packages/widgets/src/media-server/component.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/widgets/src/media-server/component.tsx b/packages/widgets/src/media-server/component.tsx index ceeb21bd9..439857a8f 100644 --- a/packages/widgets/src/media-server/component.tsx +++ b/packages/widgets/src/media-server/component.tsx @@ -66,10 +66,12 @@ export default function MediaServerWidget({ options, integrationIds }: WidgetCom const currentlyPlaying = row.original.currentlyPlaying; if (!currentlyPlaying) return null; - const isPaused = currentlyPlaying.playback.state === "paused"; + const playback = currentlyPlaying.playback; + const isPaused = playback?.state === "paused"; const Icon = isPaused ? IconPlayerPause : mediaTypeIconMap[currentlyPlaying.type]; - const { positionMs, durationMs } = currentlyPlaying.playback; + const positionMs = playback?.positionMs ?? null; + const durationMs = playback?.durationMs ?? null; const progressPercent = positionMs !== null && durationMs !== null && durationMs > 0 ? Math.min(100, Math.round((positionMs / durationMs) * 100)) From 97652802f0dcc331a7588262ee8fe68b30a4a0c1 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 21 Jul 2026 16:10:45 +0200 Subject: [PATCH 11/24] feat(immich): show random photos without album (#6424) --- .../widgets/immich-album-carousel/index.mdx | 3 +- .../widgets/immich-album-carousel/index.ts | 7 +- packages/api/src/router/widgets/immich.ts | 2 +- .../src/immich/immich-integration.ts | 76 +++++++++++++------ packages/request-handler/src/immich.ts | 2 +- packages/translation/src/lang/en.json | 8 +- .../src/immich/album-carousel/component.tsx | 23 +----- .../src/immich/album-carousel/constants.ts | 1 + .../src/immich/album-carousel/index.ts | 13 +++- 9 files changed, 79 insertions(+), 56 deletions(-) create mode 100644 packages/widgets/src/immich/album-carousel/constants.ts diff --git a/apps/docs/docs/widgets/immich-album-carousel/index.mdx b/apps/docs/docs/widgets/immich-album-carousel/index.mdx index 59b1beeb9..703bd5a57 100644 --- a/apps/docs/docs/widgets/immich-album-carousel/index.mdx +++ b/apps/docs/docs/widgets/immich-album-carousel/index.mdx @@ -1,6 +1,6 @@ --- title: 'Immich Album Carousel' -description: 'Shows a slideshow of your album pictures from Immich' +description: 'Shows a slideshow of pictures from an Immich album or your full library' hide_title: true --- @@ -37,4 +37,3 @@ import screen from './img/screen.png'; ### Configuration - diff --git a/apps/docs/docs/widgets/immich-album-carousel/index.ts b/apps/docs/docs/widgets/immich-album-carousel/index.ts index f6c4b224c..72a0b2211 100644 --- a/apps/docs/docs/widgets/immich-album-carousel/index.ts +++ b/apps/docs/docs/widgets/immich-album-carousel/index.ts @@ -4,15 +4,16 @@ import { IconPhoto } from "@tabler/icons-react"; export const immichAlbumCarouselWidget: WidgetDefinition = { icon: IconPhoto, name: "Immich Album", - description: "Shows a slideshow of your album pictures from Immich", + description: "Shows a slideshow of pictures from an Immich album or your full library", path: "../../widgets/immich-album-carousel", configuration: { items: [ { name: "Album", - description: "Select the Immich album to show in the slideshow.", + description: + "Select an Immich album or All photos. An empty selection also shows random photos from your full library.", values: { type: "string" }, - defaultValue: "", + defaultValue: "All photos", }, { name: "Interval in seconds", diff --git a/packages/api/src/router/widgets/immich.ts b/packages/api/src/router/widgets/immich.ts index 7e8c54d49..aa917271f 100644 --- a/packages/api/src/router/widgets/immich.ts +++ b/packages/api/src/router/widgets/immich.ts @@ -25,7 +25,7 @@ export const immichRouter = createTRPCRouter({ .concat(createImmichIntegrationMiddleware("query")) .input( z.object({ - albumId: z.string(), + albumId: z.string().optional(), }), ) .query(async ({ ctx, input }) => { diff --git a/packages/integrations/src/immich/immich-integration.ts b/packages/integrations/src/immich/immich-integration.ts index 6274802a5..9496482d6 100644 --- a/packages/integrations/src/immich/immich-integration.ts +++ b/packages/integrations/src/immich/immich-integration.ts @@ -1,11 +1,14 @@ import { AssetMediaSize, + AssetTypeEnum, + AssetVisibility, getAlbumInfo, getAllAlbums, getMyUser, getServerStatistics, init, searchAssets, + searchRandom, searchUsers, } from "@immich/sdk"; import type { AssetResponseDto, MetadataSearchDto } from "@immich/sdk"; @@ -43,6 +46,7 @@ export interface ImmichAsset { } const logger = createLogger({ module: "immich-integration" }); +const randomPhotoCount = 50; export class ImmichIntegration extends Integration { constructor(integration: IntegrationInput) { @@ -63,38 +67,36 @@ export class ImmichIntegration extends Integration { }; } - public async getAlbumAsync(albumId: string): Promise { + public async getAlbumAsync(albumId?: string): Promise { this.initClient(); const requestOptions = this.getRequestOptions(); + + if (!albumId) { + const assets = await searchRandom( + { + randomSearchDto: { + size: randomPhotoCount, + type: AssetTypeEnum.Image, + visibility: AssetVisibility.Timeline, + }, + }, + requestOptions, + ); + + return { + id: "", + albumName: "", + assets: await this.createAssetsAsync(assets), + }; + } + const [album, albumAssets] = await Promise.all([ getAlbumInfo({ id: albumId }, requestOptions), this.searchAlbumAssetsAsync(albumId), ]); - const imageProxy = new ImageProxy(); return { albumName: album.albumName, - assets: await Promise.all( - albumAssets.map(async (asset) => { - const publicLink = await imageProxy.createImageAsync( - // This is the URL generated by the SDK's viewAsset call. Preview images are - // browser-compatible while avoiding the large original asset download. - this.url(`/api/assets/${asset.id}/thumbnail`, { size: AssetMediaSize.Preview }).toString(), - { - "x-api-key": this.getSecretValue("apiKey"), - }, - ); - return { - id: asset.id, - type: asset.type, - thumbhash: asset.thumbhash, - fileCreatedAt: asset.fileCreatedAt, - fileModifiedAt: asset.fileModifiedAt, - originalPath: asset.originalPath, - updatedAt: asset.updatedAt, - publicLink, - }; - }), - ), + assets: await this.createAssetsAsync(albumAssets), id: album.id, }; } @@ -136,6 +138,32 @@ export class ImmichIntegration extends Integration { return assets; } + private async createAssetsAsync(assets: AssetResponseDto[]): Promise { + const imageProxy = new ImageProxy(); + return await Promise.all( + assets.map(async (asset) => { + const publicLink = await imageProxy.createImageAsync( + // This is the URL generated by the SDK's viewAsset call. Preview images are + // browser-compatible while avoiding the large original asset download. + this.url(`/api/assets/${asset.id}/thumbnail`, { size: AssetMediaSize.Preview }).toString(), + { + "x-api-key": this.getSecretValue("apiKey"), + }, + ); + return { + id: asset.id, + type: asset.type, + thumbhash: asset.thumbhash, + fileCreatedAt: asset.fileCreatedAt, + fileModifiedAt: asset.fileModifiedAt, + originalPath: asset.originalPath, + updatedAt: asset.updatedAt, + publicLink, + }; + }), + ); + } + private getRequestOptions(fetchAsync = fetchWithTrustedCertificatesAsync) { return { // Undici and node types are not the same diff --git a/packages/request-handler/src/immich.ts b/packages/request-handler/src/immich.ts index 56fc89bd0..a6e2a996c 100644 --- a/packages/request-handler/src/immich.ts +++ b/packages/request-handler/src/immich.ts @@ -33,7 +33,7 @@ export const immichAlbumsRequestHandler = createIntegrationRequestHandler< export const immichAlbumRequestHandler = createIntegrationRequestHandler< ImmichAlbum, IntegrationKindByCategory<"photoService">, - { albumId: string } + { albumId?: string } >({ async requestAsync(integration, input) { const integrationInstance = await createIntegrationAsync(integration); diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index 1e48e4486..ae89ad4df 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -3006,10 +3006,11 @@ }, "immich-albumCarousel": { "name": "Immich Album", + "allPhotos": "All photos", "option": { "albumId": { "label": "Album", - "description": "Select the Immich album to show in the slideshow." + "description": "Select an Immich album or All photos. An empty selection also shows random photos from your full library." }, "rotationIntervalSeconds": { "label": "Interval in seconds", @@ -3024,9 +3025,8 @@ "description": "Show photos in a random order instead of always starting with the same album order." } }, - "description": "Slideshow of pictures in your Immich album", - "noAlbumSelected": "No album selected, edit widget and choose an album", - "noPhotos": "No photos in this album" + "description": "Slideshow of pictures from an Immich album or your full library", + "noPhotos": "No photos found" }, "downloads": { "name": "Download Client", diff --git a/packages/widgets/src/immich/album-carousel/component.tsx b/packages/widgets/src/immich/album-carousel/component.tsx index ee7085757..49bb4ceec 100644 --- a/packages/widgets/src/immich/album-carousel/component.tsx +++ b/packages/widgets/src/immich/album-carousel/component.tsx @@ -11,6 +11,7 @@ import { useI18n } from "@homarr/translation/client"; import { WidgetEmptyState } from "../../common/empty-state"; import type { WidgetComponentProps } from "../../definition"; import classes from "./component.module.css"; +import { ALL_PHOTOS_ALBUM_ID } from "./constants"; export default function ImmichAlbumCarouselWidget({ integrationIds, @@ -21,9 +22,9 @@ export default function ImmichAlbumCarouselWidget({ const { data: album } = clientApi.widget.immich.getAlbum.useQuery( { integrationId: integrationIds[0] ?? "", - albumId: options.albumId ?? "", + albumId: options.albumId && options.albumId !== ALL_PHOTOS_ALBUM_ID ? options.albumId : undefined, }, - { enabled: Boolean(options.albumId) }, + { enabled: integrationIds.length > 0 }, ); const photoAssets = useMemo(() => { @@ -35,10 +36,6 @@ export default function ImmichAlbumCarouselWidget({ setCurrentPhotoIndex(0); }, [photoAssets]); - if (!options.albumId) { - return ; - } - if (!album) return ; if (album.assets.length === 0) { @@ -117,20 +114,6 @@ function Carousel({ assets, currentIndex, setCurrentIndex, rotationInterval, sho ); } -function NoAlbumSelected() { - const t = useI18n(); - return ( -
- - - - {t("widget.immich-albumCarousel.noAlbumSelected")} - - -
- ); -} - function NoPhotosInAlbum() { const t = useI18n(); return ( diff --git a/packages/widgets/src/immich/album-carousel/constants.ts b/packages/widgets/src/immich/album-carousel/constants.ts new file mode 100644 index 000000000..0371578de --- /dev/null +++ b/packages/widgets/src/immich/album-carousel/constants.ts @@ -0,0 +1 @@ +export const ALL_PHOTOS_ALBUM_ID = "all"; diff --git a/packages/widgets/src/immich/album-carousel/index.ts b/packages/widgets/src/immich/album-carousel/index.ts index 0ae11ef79..8c4223ef3 100644 --- a/packages/widgets/src/immich/album-carousel/index.ts +++ b/packages/widgets/src/immich/album-carousel/index.ts @@ -2,9 +2,11 @@ import { IconPhoto } from "@tabler/icons-react"; import z from "zod"; import { clientApi } from "@homarr/api/client"; +import { useScopedI18n } from "@homarr/translation/client"; import { createWidgetDefinition } from "../../definition"; import { optionsBuilder } from "../../options"; +import { ALL_PHOTOS_ALBUM_ID } from "./constants"; export const { definition, componentLoader } = createWidgetDefinition("immich-albumCarousel", { icon: IconPhoto, @@ -15,9 +17,11 @@ export const { definition, componentLoader } = createWidgetDefinition("immich-al createOptions() { return optionsBuilder.from((factory) => ({ albumId: factory.integrationSelect({ + defaultValue: ALL_PHOTOS_ALBUM_ID, withDescription: true, clearable: true, useOptions: (integrationIds: string[]) => { + const t = useScopedI18n("widget.immich-albumCarousel"); const { data = [], isPending, @@ -26,7 +30,14 @@ export const { definition, componentLoader } = createWidgetDefinition("immich-al { integrationId: integrationIds[0] ?? "" }, { enabled: integrationIds.length > 0, staleTime: 15 * 60 * 1000 }, ); - return { data: data.map((album) => ({ value: album.id, label: album.albumName })), isPending, isError }; + return { + data: [ + { value: ALL_PHOTOS_ALBUM_ID, label: t("allPhotos") }, + ...data.map((album) => ({ value: album.id, label: album.albumName })), + ], + isPending, + isError, + }; }, }), rotationIntervalSeconds: factory.number({ From 8e7fa782b3b7a4346f94881114abe2afbf36c4a2 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 21 Jul 2026 16:36:03 +0200 Subject: [PATCH 12/24] feat(weather): add humidity display (#6429) --- packages/request-handler/src/weather.ts | 5 ++++- packages/translation/src/lang/en.json | 3 ++- packages/widgets/src/weather/component.tsx | 9 ++++++++- packages/widgets/src/weather/icon.tsx | 6 ++++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/request-handler/src/weather.ts b/packages/request-handler/src/weather.ts index 5f5a097a4..c2e5151ac 100644 --- a/packages/request-handler/src/weather.ts +++ b/packages/request-handler/src/weather.ts @@ -9,7 +9,7 @@ export const weatherRequestHandler = createWidgetRequestHandler({ async requestAsync(input: { latitude: number; longitude: number }) { const res = await withTimeoutAsync(async (signal) => { return await fetchWithTrustedCertificatesAsync( - `https://api.open-meteo.com/v1/forecast?latitude=${input.latitude}&longitude=${input.longitude}&daily=weathercode,temperature_2m_max,temperature_2m_min,sunrise,sunset,wind_speed_10m_max,wind_gusts_10m_max¤t_weather=true&timezone=auto`, + `https://api.open-meteo.com/v1/forecast?latitude=${input.latitude}&longitude=${input.longitude}&daily=weathercode,temperature_2m_max,temperature_2m_min,sunrise,sunset,wind_speed_10m_max,wind_gusts_10m_max,relative_humidity_2m_mean¤t_weather=true&timezone=auto`, { signal }, ); }); @@ -27,6 +27,7 @@ export const weatherRequestHandler = createWidgetRequestHandler({ sunset: weather.daily.sunset[index], maxWindSpeed: weather.daily.wind_speed_10m_max[index], maxWindGusts: weather.daily.wind_gusts_10m_max[index], + humidity: weather.daily.relative_humidity_2m_mean[index], }; }), } satisfies Weather; @@ -48,6 +49,7 @@ const atLocationOutput = z.object({ sunset: z.array(z.string()), wind_speed_10m_max: z.array(z.number()), wind_gusts_10m_max: z.array(z.number()), + relative_humidity_2m_mean: z.array(z.number()), }), }); @@ -66,5 +68,6 @@ export interface Weather { sunset: string | undefined; maxWindSpeed: number | undefined; maxWindGusts: number | undefined; + humidity: number | undefined; }[]; } diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index ae89ad4df..391b235b9 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -2257,7 +2257,8 @@ "sunrise": "Sunrise", "sunset": "Sunset", "maxWindSpeed": "Max wind speed: {maxWindSpeed} {unit}", - "maxWindGusts": "Max wind gusts: {maxWindGusts} {unit}" + "maxWindGusts": "Max wind gusts: {maxWindGusts} {unit}", + "humidity": "Humidity: {humidity}%" }, "kind": { "clear": "Clear", diff --git a/packages/widgets/src/weather/component.tsx b/packages/widgets/src/weather/component.tsx index 6e76ef8f2..27ab5d19e 100644 --- a/packages/widgets/src/weather/component.tsx +++ b/packages/widgets/src/weather/component.tsx @@ -1,7 +1,7 @@ "use client"; import { Box, Group, HoverCard, Stack, Text } from "@mantine/core"; -import { IconArrowDownRight, IconArrowUpRight, IconMapPin, IconWind } from "@tabler/icons-react"; +import { IconArrowDownRight, IconArrowUpRight, IconDroplets, IconMapPin, IconWind } from "@tabler/icons-react"; import combineClasses from "clsx"; import dayjs from "dayjs"; @@ -87,6 +87,12 @@ const DailyWeather = ({ options, weather }: WeatherProps) => { )} + {weather.daily[0]?.humidity !== undefined && ( + + + {t("dailyForecast.humidity", { humidity: weather.daily[0].humidity })} + + )} @@ -204,6 +210,7 @@ function Forecast({ weather, options }: WeatherProps) { sunset={dayjs(dayWeather.sunset).format("HH:mm")} maxWindSpeed={dayWeather.maxWindSpeed} maxWindGusts={dayWeather.maxWindGusts} + humidity={dayWeather.humidity} /> diff --git a/packages/widgets/src/weather/icon.tsx b/packages/widgets/src/weather/icon.tsx index fe4ad92b0..6153484f0 100644 --- a/packages/widgets/src/weather/icon.tsx +++ b/packages/widgets/src/weather/icon.tsx @@ -5,6 +5,7 @@ import { IconCloudRain, IconCloudSnow, IconCloudStorm, + IconDroplets, IconMoon, IconQuestionMark, IconSnowflake, @@ -51,6 +52,7 @@ interface WeatherDescriptionProps { sunset?: string; maxWindSpeed?: number; maxWindGusts?: number; + humidity?: number; } /** @@ -78,6 +80,7 @@ export const WeatherDescription = ({ sunset, maxWindSpeed, maxWindGusts, + humidity, }: WeatherDescriptionProps) => { const t = useScopedI18n("widget.weather"); const tCommon = useScopedI18n("common"); @@ -97,6 +100,9 @@ export const WeatherDescription = ({ }>{`${tCommon("information.min")}: ${minTemp}`} }>{`${t("dailyForecast.sunrise")}: ${sunrise}`} }>{`${t("dailyForecast.sunset")}: ${sunset}`} + {humidity !== undefined && ( + }>{t("dailyForecast.humidity", { humidity })} + )} {maxWindSpeed !== undefined && ( }> {t("dailyForecast.maxWindSpeed", { From cf0e4694652f50c029c514334f3f4d187c6f94a6 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 21 Jul 2026 16:56:33 +0200 Subject: [PATCH 13/24] feat: restrict apps management to board modifiers (#6425) --- .../[locale]/manage/apps/edit/[id]/page.tsx | 5 +++- .../src/app/[locale]/manage/apps/new/page.tsx | 2 +- .../src/app/[locale]/manage/apps/page.tsx | 5 +++- .../nextjs/src/app/[locale]/manage/layout.tsx | 2 +- packages/api/src/router/app.ts | 3 ++- packages/api/src/router/home.ts | 2 +- packages/api/src/router/test/app.spec.ts | 27 +++++++++++++++++++ .../src/modes/app-integration-board/index.tsx | 6 ++++- .../src/modes/command/global-group.tsx | 3 ++- .../src/modes/page/pages-search-group.tsx | 2 +- 10 files changed, 48 insertions(+), 9 deletions(-) diff --git a/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/page.tsx b/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/page.tsx index a931b2ece..e717e5787 100644 --- a/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/page.tsx @@ -16,7 +16,10 @@ export default async function AppEditPage(props: AppEditPageProps) { const params = await props.params; const session = await auth(); - if (!session?.user.permissions.includes("app-modify-all")) { + if ( + !session?.user.permissions.includes("board-modify-all") || + !session?.user.permissions.includes("app-modify-all") + ) { notFound(); } const app = await api.app.byId({ id: params.id }); diff --git a/apps/nextjs/src/app/[locale]/manage/apps/new/page.tsx b/apps/nextjs/src/app/[locale]/manage/apps/new/page.tsx index ace72f5fa..989273d7c 100644 --- a/apps/nextjs/src/app/[locale]/manage/apps/new/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/apps/new/page.tsx @@ -10,7 +10,7 @@ import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; export default async function AppNewPage() { const session = await auth(); - if (!session?.user.permissions.includes("app-create")) { + if (!session?.user.permissions.includes("board-modify-all") || !session?.user.permissions.includes("app-create")) { notFound(); } diff --git a/apps/nextjs/src/app/[locale]/manage/apps/page.tsx b/apps/nextjs/src/app/[locale]/manage/apps/page.tsx index e01a8633e..083951b9c 100644 --- a/apps/nextjs/src/app/[locale]/manage/apps/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/apps/page.tsx @@ -1,5 +1,5 @@ import { Fragment } from "react"; -import { redirect } from "next/navigation"; +import { notFound, redirect } from "next/navigation"; import { ActionIcon, ActionIconGroup, Anchor, Avatar, Card, Group, Stack, Text } from "@mantine/core"; import { IconBox, IconPencil } from "@tabler/icons-react"; import { z } from "zod/v4"; @@ -33,6 +33,9 @@ export default async function AppsPage(props: AppsPageProps) { if (!session) { redirect("/auth/login"); } + if (!session.user.permissions.includes("board-modify-all")) { + notFound(); + } const searchParams = searchParamsSchema.parse(await props.searchParams); diff --git a/apps/nextjs/src/app/[locale]/manage/layout.tsx b/apps/nextjs/src/app/[locale]/manage/layout.tsx index 040db0d78..2634944f1 100644 --- a/apps/nextjs/src/app/[locale]/manage/layout.tsx +++ b/apps/nextjs/src/app/[locale]/manage/layout.tsx @@ -61,7 +61,7 @@ export default async function ManageLayout({ children }: PropsWithChildren) { icon: IconBox, href: "/manage/apps", label: t("items.apps"), - hidden: !session, + hidden: !session?.user.permissions.includes("board-modify-all"), iconProps: { strokeWidth: 2.5, }, diff --git a/packages/api/src/router/app.ts b/packages/api/src/router/app.ts index 1b55d0260..3d0285689 100644 --- a/packages/api/src/router/app.ts +++ b/packages/api/src/router/app.ts @@ -18,7 +18,8 @@ import { AppAccessControl } from "./app/app-access-control"; const defaultIcon = "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/homarr.svg"; export const appRouter = createTRPCRouter({ - getPaginated: protectedProcedure + getPaginated: permissionRequiredProcedure + .requiresPermission("board-modify-all") .input(paginatedSchema) .output(z.object({ items: z.array(selectAppSchema), totalCount: z.number() })) .meta({ diff --git a/packages/api/src/router/home.ts b/packages/api/src/router/home.ts index fac941fa8..4b63f9326 100644 --- a/packages/api/src/router/home.ts +++ b/packages/api/src/router/home.ts @@ -101,7 +101,7 @@ export const homeRouter = createTRPCRouter({ }); } - if (ctx.session?.user) { + if (ctx.session?.user.permissions.includes("board-modify-all")) { statistics.push({ titleKey: "app", subtitleKey: "resources", diff --git a/packages/api/src/router/test/app.spec.ts b/packages/api/src/router/test/app.spec.ts index 3002ef1a9..44d2f6ce5 100644 --- a/packages/api/src/router/test/app.spec.ts +++ b/packages/api/src/router/test/app.spec.ts @@ -76,6 +76,33 @@ describe("all should return all apps", () => { }); }); +describe("getPaginated should require board modification access", () => { + test("should throw FORBIDDEN without board-modify-all", async () => { + const caller = appRouter.createCaller({ + db: createDb(), + deviceType: undefined, + session: createDefaultSession(), + }); + + await expect(caller.getPaginated({ page: 1, pageSize: 10 })).rejects.toThrow("Permission denied"); + }); + + test("should return apps with board-modify-all", async () => { + const db = createDb(); + const caller = appRouter.createCaller({ + db, + deviceType: undefined, + session: createDefaultSession(["board-modify-all"]), + }); + await db.insert(apps).values({ id: "1", name: "Homarr", iconUrl: "https://homarr.dev/icon.svg" }); + + await expect(caller.getPaginated({ page: 1, pageSize: 10 })).resolves.toMatchObject({ + totalCount: 1, + items: [{ id: "1" }], + }); + }); +}); + describe("byId should return an app by id", () => { test("should return an app by id when canUserSeeAppAsync returns true", async () => { // Arrange diff --git a/packages/spotlight/src/modes/app-integration-board/index.tsx b/packages/spotlight/src/modes/app-integration-board/index.tsx index 4fe5de9fd..5578bb648 100644 --- a/packages/spotlight/src/modes/app-integration-board/index.tsx +++ b/packages/spotlight/src/modes/app-integration-board/index.tsx @@ -17,6 +17,10 @@ export const appIntegrationBoardMode = { return groups; } - return groups.concat([appsSearchGroup, integrationsSearchGroup]); + return groups.concat( + session.user.permissions.includes("board-modify-all") + ? [appsSearchGroup, integrationsSearchGroup] + : [integrationsSearchGroup], + ); }, } satisfies SearchMode; diff --git a/packages/spotlight/src/modes/command/global-group.tsx b/packages/spotlight/src/modes/command/global-group.tsx index f1d44e434..fd277b55e 100644 --- a/packages/spotlight/src/modes/command/global-group.tsx +++ b/packages/spotlight/src/modes/command/global-group.tsx @@ -87,7 +87,8 @@ export const globalCommandGroup = createGroup({ icon: IconBox, name: tOption("newApp.label"), useInteraction: interaction.link(() => ({ href: "/manage/apps/new" })), - hidden: !session?.user.permissions.includes("app-create"), + hidden: + !session?.user.permissions.includes("board-modify-all") || !session?.user.permissions.includes("app-create"), }, { commandKey: "newIntegration", diff --git a/packages/spotlight/src/modes/page/pages-search-group.tsx b/packages/spotlight/src/modes/page/pages-search-group.tsx index d9b419340..66fe1ce4f 100644 --- a/packages/spotlight/src/modes/page/pages-search-group.tsx +++ b/packages/spotlight/src/modes/page/pages-search-group.tsx @@ -76,7 +76,7 @@ export const pagesSearchGroup = createGroup<{ icon: IconBox, path: "/manage/apps", name: t("manageApp.label"), - hidden: !session, + hidden: !session?.user.permissions.includes("board-modify-all"), }, { icon: IconPlug, From 9bb0c0f8110b1ac862958b186dcf04fd66f3fe12 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 22 Jul 2026 17:38:28 +0200 Subject: [PATCH 14/24] fix(media-requests): cache statistics responses (#6443) --- packages/request-handler/src/media-request-stats.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/request-handler/src/media-request-stats.ts b/packages/request-handler/src/media-request-stats.ts index 61ff810b8..558af213b 100644 --- a/packages/request-handler/src/media-request-stats.ts +++ b/packages/request-handler/src/media-request-stats.ts @@ -16,4 +16,6 @@ export const mediaRequestStatsRequestHandler = createIntegrationRequestHandler< users: await integrationInstance.getUsersAsync(), }; }, + cacheTtlMs: 60_000, + fallbackToStaleOnError: true, }); From 7184bc09c134a75fd69532809b528e2161981eb9 Mon Sep 17 00:00:00 2001 From: Bergasha Date: Thu, 23 Jul 2026 08:04:32 +1000 Subject: [PATCH 15/24] feat(clock widget): Adds animated weather and temp (#6372) --- packages/translation/src/lang/en.json | 10 +++ packages/widgets/src/clock/component.tsx | 76 +++++++++++++----- packages/widgets/src/clock/index.ts | 20 +++++ .../widgets/src/weather/animated-icon.tsx | 28 +++++++ packages/widgets/src/weather/component.tsx | 9 ++- packages/widgets/src/widgets-common.css | 80 +++++++++++++++++++ 6 files changed, 200 insertions(+), 23 deletions(-) create mode 100644 packages/widgets/src/weather/animated-icon.tsx diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index 391b235b9..681166967 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -1905,6 +1905,16 @@ "customDateFormat": { "label": "Custom date format", "description": "Use ISO 8601 to format date (this will override other options)" + }, + "showWeather": { + "label": "Show weather", + "description": "Display a small animated weather icon and temperature in the corner of the card" + }, + "weatherLocation": { + "label": "Weather location" + }, + "isWeatherFormatFahrenheit": { + "label": "Use Fahrenheit" } } }, diff --git a/packages/widgets/src/clock/component.tsx b/packages/widgets/src/clock/component.tsx index 417585162..dd43e0380 100644 --- a/packages/widgets/src/clock/component.tsx +++ b/packages/widgets/src/clock/component.tsx @@ -1,13 +1,16 @@ "use client"; import { useEffect, useMemo, useRef, useState } from "react"; -import { Stack, Text, Title } from "@mantine/core"; +import { Box, Stack, Text, Title } from "@mantine/core"; import dayjs from "dayjs"; import advancedFormat from "dayjs/plugin/advancedFormat"; import timezones from "dayjs/plugin/timezone"; import utc from "dayjs/plugin/utc"; +import { clientApi } from "@homarr/api/client"; + import type { WidgetComponentProps } from "../definition"; +import { AnimatedWeatherIcon } from "../weather/animated-icon"; dayjs.extend(advancedFormat); dayjs.extend(utc); @@ -23,30 +26,65 @@ export default function ClockWidget({ options, width }: WidgetComponentProps<"cl const time = useCurrentTime(options); const sizing = width < 128 ? "xs" : width < 196 ? "sm" : "md"; + const showWeatherCorner = options.showWeather && sizing !== "xs"; return ( - - {options.customTitleToggle && ( - - {options.customTitle} - + + {showWeatherCorner && ( + )} - - {options.customTimeFormat - ? dayjs(time).tz(timezone).format(customTimeFormat) - : dayjs(time).tz(timezone).format(timeFormat)} - - {options.showDate && ( - - {options.customDateFormat - ? dayjs(time).tz(timezone).format(customDateFormat) - : dayjs(time).tz(timezone).format(dateFormat)} - - )} - + + {options.customTitleToggle && ( + + {options.customTitle} + + )} + + {options.customTimeFormat + ? dayjs(time).tz(timezone).format(customTimeFormat) + : dayjs(time).tz(timezone).format(timeFormat)} + + {options.showDate && ( + + {options.customDateFormat + ? dayjs(time).tz(timezone).format(customDateFormat) + : dayjs(time).tz(timezone).format(dateFormat)} + + )} + + ); } +interface ClockWeatherCornerProps { + latitude: number; + longitude: number; + isFahrenheit: boolean; +} + +const ClockWeatherCorner = ({ latitude, longitude, isFahrenheit }: ClockWeatherCornerProps) => { + const { data: weather } = clientApi.widget.weather.atLocation.useQuery({ latitude, longitude }); + + if (!weather) return null; + + const temp = isFahrenheit ? weather.current.temperature * (9 / 5) + 32 : weather.current.temperature; + const unit = isFahrenheit ? "°F" : "°C"; + + return ( + + + + {Math.round(temp)} + {unit} + + + ); +}; + interface UseCurrentTimeProps { showSeconds: boolean; } diff --git a/packages/widgets/src/clock/index.ts b/packages/widgets/src/clock/index.ts index d80055a89..20b22d6a0 100644 --- a/packages/widgets/src/clock/index.ts +++ b/packages/widgets/src/clock/index.ts @@ -55,6 +55,20 @@ export const { definition, componentLoader } = createWidgetDefinition("clock", { defaultValue: "", withDescription: true, }), + showWeather: factory.switch({ + defaultValue: false, + withDescription: true, + }), + weatherLocation: factory.location({ + defaultValue: { + name: "Brisbane", + latitude: -27.4698, + longitude: 153.0251, + }, + }), + isWeatherFormatFahrenheit: factory.switch({ + defaultValue: false, + }), }), { customTitle: { @@ -66,6 +80,12 @@ export const { definition, componentLoader } = createWidgetDefinition("clock", { dateFormat: { shouldHide: (options) => !options.showDate, }, + weatherLocation: { + shouldHide: (options) => !options.showWeather, + }, + isWeatherFormatFahrenheit: { + shouldHide: (options) => !options.showWeather, + }, }, ); }, diff --git a/packages/widgets/src/weather/animated-icon.tsx b/packages/widgets/src/weather/animated-icon.tsx new file mode 100644 index 000000000..70145b4b1 --- /dev/null +++ b/packages/widgets/src/weather/animated-icon.tsx @@ -0,0 +1,28 @@ +import "../widgets-common.css"; + +import { WeatherIcon } from "./icon"; + +interface AnimatedWeatherIconProps { + code: number; + size?: string | number; +} + + +const getAnimationClass = (code: number): string => { + if (code === 0) return "weather-anim-sun"; + if ([1, 2, 3].includes(code)) return "weather-anim-cloud"; + if ([45, 48].includes(code)) return "weather-anim-fog"; + if ([51, 53, 55, 56, 57, 61, 63, 65, 66, 67, 80, 81, 82].includes(code)) return "weather-anim-rain"; + if ([71, 73, 75, 77, 85, 86].includes(code)) return "weather-anim-snow"; + if ([95, 96, 99].includes(code)) return "weather-anim-storm"; + return ""; +}; + + +export const AnimatedWeatherIcon = ({ code, size = 26 }: AnimatedWeatherIconProps) => { + return ( + + + + ); +}; diff --git a/packages/widgets/src/weather/component.tsx b/packages/widgets/src/weather/component.tsx index 27ab5d19e..0329597b1 100644 --- a/packages/widgets/src/weather/component.tsx +++ b/packages/widgets/src/weather/component.tsx @@ -12,7 +12,8 @@ import { useScopedI18n } from "@homarr/translation/client"; import { WidgetEmptyState } from "../common/empty-state"; import type { WidgetComponentProps } from "../definition"; -import { WeatherDescription, WeatherIcon } from "./icon"; +import { AnimatedWeatherIcon } from "./animated-icon"; +import { WeatherDescription } from "./icon"; export default function WeatherWidget({ isEditMode, options }: WidgetComponentProps<"weather">) { const input = { @@ -55,7 +56,7 @@ const DailyWeather = ({ options, weather }: WeatherProps) => { - + @@ -146,7 +147,7 @@ const WeeklyForecast = ({ options, weather }: WeatherProps) => { - + @@ -184,7 +185,7 @@ function Forecast({ weather, options }: WeatherProps) { align="center" > {dayjs(dayWeather.time).format("dd")} - + {getPreferredUnit(dayWeather.maxTemp, options.isFormatFahrenheit, options.disableTemperatureDecimals)} diff --git a/packages/widgets/src/widgets-common.css b/packages/widgets/src/widgets-common.css index 7c75ebf0a..7ea969ef1 100644 --- a/packages/widgets/src/widgets-common.css +++ b/packages/widgets/src/widgets-common.css @@ -25,3 +25,83 @@ .text-flash { animation: glow 1s ease-in-out; } + +/*Animated weather icons, used by clock and weather widgets*/ +.weather-anim-wrapper { + display: inline-flex; +} + +@keyframes weather-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@keyframes weather-drift { + 0%, + 100% { + transform: translateX(-2px); + } + 50% { + transform: translateX(2px); + } +} + +@keyframes weather-fall { + 0% { + transform: translateY(-2px); + opacity: 0.4; + } + 50% { + opacity: 1; + } + 100% { + transform: translateY(2px); + opacity: 0.4; + } +} + +@keyframes weather-flicker { + 0%, + 90%, + 100% { + opacity: 1; + } + 92%, + 96% { + opacity: 0.4; + } +} + +.weather-anim-sun { + animation: weather-spin 16s linear infinite; + transform-origin: center; +} + +.weather-anim-cloud, +.weather-anim-fog { + animation: weather-drift 4s ease-in-out infinite; +} + +.weather-anim-rain, +.weather-anim-snow { + animation: weather-fall 1.6s ease-in-out infinite; +} + +.weather-anim-storm { + animation: weather-flicker 3s ease-in-out infinite; +} + +@media (prefers-reduced-motion: reduce) { + .weather-anim-sun, + .weather-anim-cloud, + .weather-anim-fog, + .weather-anim-rain, + .weather-anim-snow, + .weather-anim-storm { + animation: none; + } +} From bfba3c921509a6169ce6c4345a74aab7cc0d6235 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 23 Jul 2026 00:20:54 +0200 Subject: [PATCH 16/24] fix(releases): avoid unnecessary GitHub pagination for LinuxServer updates (#6444) --- .../request-handler/src/release-providers.ts | 66 ++++---- .../src/test/release-providers.spec.ts | 143 ++++++++++++++++++ packages/widgets/src/releases/component.tsx | 24 +-- .../src/releases/query-options.spec.ts | 25 +++ .../widgets/src/releases/query-options.ts | 17 +++ 5 files changed, 232 insertions(+), 43 deletions(-) create mode 100644 packages/widgets/src/releases/query-options.spec.ts create mode 100644 packages/widgets/src/releases/query-options.ts diff --git a/packages/request-handler/src/release-providers.ts b/packages/request-handler/src/release-providers.ts index b70136631..009c81dce 100644 --- a/packages/request-handler/src/release-providers.ts +++ b/packages/request-handler/src/release-providers.ts @@ -787,11 +787,34 @@ const getLinuxServerIOReleaseAsync = async ( error: { code: "noReleasesFound", message: `Image "${parsed.name}" not found in LinuxServer.io registry` }, }; - // LSIO's /api/v1/images only exposes the single latest version, so a version - // filter can never surface an older release (#4351). When the image has a GitHub - // repository, delegate to the GitHub release provider to fetch the real release - // history and apply the filter, while keeping LSIO's own image metadata. Any - // GitHub failure (no repo, no releases, rate limit) falls back to the LSIO latest. + const regex = compileVersionRegex(versionRegex); + if (versionRegex && !regex) { + return { + success: false, + error: { code: "noMatchingVersion", message: `Invalid regex: /${versionRegex}/` }, + }; + } + + if (!regex || regex.test(release.version)) { + return { + success: true, + data: { + latestRelease: release.version, + latestReleaseAt: release.version_timestamp, + releaseDescription: release.changelog?.shift()?.desc, + projectUrl: release.github_url, + projectDescription: release.description, + isArchived: release.deprecated, + createdAt: release.initial_date, + starsCount: release.stars, + }, + }; + } + + // LSIO's /api/v1/images only exposes the single latest version, so a filter + // that does not match it cannot surface an older release (#4351). Delegate to + // the image's GitHub repository to fetch the real release history while + // keeping LSIO's own image metadata. const githubRepo = parseGithubRepo(release.github_url); if (githubRepo) { const githubResult = await getGithubReleaseAsync(getReleaseProviderDefaultUrl("github"), githubRepo, versionRegex); @@ -808,37 +831,14 @@ const getLinuxServerIOReleaseAsync = async ( }, }; } - } - - const regex = compileVersionRegex(versionRegex); - if (versionRegex && !regex) { - return { - success: false, - error: { code: "noMatchingVersion", message: `Invalid regex: /${versionRegex}/` }, - }; - } - - if (regex && !regex.test(release.version)) { - return { - success: false, - error: { - code: "noMatchingVersion", - message: `Regex /${versionRegex}/ does not match LSIO version "${release.version}"`, - }, - }; + return githubResult; } return { - success: true, - data: { - latestRelease: release.version, - latestReleaseAt: release.version_timestamp, - releaseDescription: release.changelog?.shift()?.desc, - projectUrl: release.github_url, - projectDescription: release.description, - isArchived: release.deprecated, - createdAt: release.initial_date, - starsCount: release.stars, + success: false, + error: { + code: "noMatchingVersion", + message: `Regex /${versionRegex}/ does not match LSIO version "${release.version}"`, }, }; }; diff --git a/packages/request-handler/src/test/release-providers.spec.ts b/packages/request-handler/src/test/release-providers.spec.ts index 67ed3d71c..8eed8d60c 100644 --- a/packages/request-handler/src/test/release-providers.spec.ts +++ b/packages/request-handler/src/test/release-providers.spec.ts @@ -126,6 +126,128 @@ describe("getLatestMatchingReleaseAsync for GitHub Container Registry", () => { }); }); +describe("getLatestMatchingReleaseAsync for LinuxServer.io", () => { + beforeEach(() => { + mockedFetch.mockReset(); + }); + + test("uses the LinuxServer.io latest release without fetching GitHub history", async () => { + mockedFetch.mockResolvedValueOnce(createLinuxServerResponse()); + + const result = await getLatestMatchingReleaseAsync({ + id: "tautulli", + provider: "linuxServerIO", + identifier: "lscr.io/linuxserver/tautulli:latest", + }); + + expect(result).toEqual({ + success: true, + data: { + latestRelease: "v2.17.2-ls237", + latestReleaseAt: new Date("2026-07-17T00:25:42.000Z"), + releaseDescription: "Rebase to Alpine 3.24.", + projectUrl: "https://github.com/linuxserver/docker-tautulli", + projectDescription: "Tautulli image", + isArchived: false, + createdAt: new Date("2015-08-10T00:00:00.000Z"), + starsCount: 934, + }, + }); + expect(mockedFetch).toHaveBeenCalledOnce(); + expectUrl(0, "https://api.linuxserver.io/api/v1/images"); + }); + + test("fetches GitHub history when a version filter requires it", async () => { + mockedFetch.mockImplementation(async (input) => { + const url = new URL(input.toString()); + + if (url.origin === "https://api.linuxserver.io") return createLinuxServerResponse(); + if (url.pathname === "/repos/linuxserver/docker-tautulli/releases") { + return createJsonResponse([ + { + tag_name: "v2.16.0-ls200", + published_at: "2026-01-10T12:00:00.000Z", + html_url: "https://github.com/linuxserver/docker-tautulli/releases/tag/v2.16.0-ls200", + body: "Older supported image", + prerelease: false, + }, + ]); + } + if (url.pathname === "/repos/linuxserver/docker-tautulli") { + return createJsonResponse({ + html_url: "https://github.com/linuxserver/docker-tautulli", + description: "GitHub description", + fork: false, + archived: false, + created_at: "2015-08-10T00:00:00.000Z", + stargazers_count: 934, + open_issues_count: 2, + forks_count: 80, + }); + } + + return createJsonResponse({ message: "Not Found" }, { status: 404, statusText: "Not Found" }); + }); + + const result = await getLatestMatchingReleaseAsync({ + id: "tautulli", + provider: "linuxServerIO", + identifier: "linuxserver/tautulli", + versionRegex: "^v2\\.16\\..+-ls[0-9]+$", + }); + + expect(result).toEqual({ + success: true, + data: expect.objectContaining({ + latestRelease: "v2.16.0-ls200", + projectUrl: "https://github.com/linuxserver/docker-tautulli", + projectDescription: "Tautulli image", + }), + }); + expect(mockedFetch).toHaveBeenCalledTimes(3); + }); + + test("uses the LinuxServer.io latest release when it matches the version filter", async () => { + mockedFetch.mockResolvedValueOnce(createLinuxServerResponse()); + + const result = await getLatestMatchingReleaseAsync({ + id: "tautulli", + provider: "linuxServerIO", + identifier: "linuxserver/tautulli", + versionRegex: "^v2\\.17\\..+-ls[0-9]+$", + }); + + expect(result).toEqual({ + success: true, + data: expect.objectContaining({ latestRelease: "v2.17.2-ls237" }), + }); + expect(mockedFetch).toHaveBeenCalledOnce(); + expectUrl(0, "https://api.linuxserver.io/api/v1/images"); + }); + + test("returns the GitHub error when filtered release history cannot be fetched", async () => { + mockedFetch.mockImplementation(async (input) => { + const url = new URL(input.toString()); + if (url.origin === "https://api.linuxserver.io") return createLinuxServerResponse(); + + return createJsonResponse({ message: "GitHub unavailable" }, { status: 404, statusText: "Not Found" }); + }); + + const result = await getLatestMatchingReleaseAsync({ + id: "tautulli", + provider: "linuxServerIO", + identifier: "linuxserver/tautulli", + versionRegex: "^v2\\.16\\..+-ls[0-9]+$", + }); + + expect(result).toEqual({ + success: false, + error: expect.objectContaining({ code: "unexpected", message: expect.stringContaining("GitHub unavailable") }), + }); + expect(mockedFetch.mock.calls.length).toBeGreaterThan(1); + }); +}); + interface MockGhcrResponsesInput { registryOrigin?: string; repositoryName: string; @@ -185,6 +307,27 @@ const createJsonResponse = (body: unknown, init: JsonResponseInit = {}) => }, }); +const createLinuxServerResponse = () => + createJsonResponse({ + data: { + repositories: { + linuxserver: [ + { + name: "tautulli", + initial_date: "2015-08-10", + github_url: "https://github.com/linuxserver/docker-tautulli", + description: "Tautulli image", + version: "v2.17.2-ls237", + version_timestamp: "2026-07-17 00:25:42+00:00", + stars: 934, + deprecated: false, + changelog: [{ date: "2026-07-05", desc: "Rebase to Alpine 3.24." }], + }, + ], + }, + }, + }); + const expectUrl = (callIndex: number, expectedUrl: string) => { expect(mockedFetch.mock.calls[callIndex]?.[0].toString().split("?")[0]).toBe(expectedUrl); }; diff --git a/packages/widgets/src/releases/component.tsx b/packages/widgets/src/releases/component.tsx index f0e32df7d..ca61d24c3 100644 --- a/packages/widgets/src/releases/component.tsx +++ b/packages/widgets/src/releases/component.tsx @@ -29,6 +29,7 @@ import { MaskedOrNormalImage } from "@homarr/ui"; import type { WidgetComponentProps } from "../definition"; import classes from "./component.module.scss"; import type { ReleasesRepository, ReleasesRepositoryResponse } from "./releases-repository"; +import { getReleasesQueryStaleTimeMs } from "./query-options"; const formatRelativeDate = (value: string): string => { const isMonths = /\d+m/g.test(value); @@ -89,16 +90,19 @@ export default function ReleasesWidget({ options, itemId }: WidgetComponentProps const queryResults = clientApi.useQueries((trpc) => batchedRepositories.flatMap(({ provider, repositories }) => - trpc.widget.releases.getLatest({ - itemId, - repositories: repositories.map((repository) => ({ - id: repository.id, - provider, - identifier: repository.identifier, - versionFilter: repository.versionFilter, - providerUrl: repository.providerUrl, - })), - }), + trpc.widget.releases.getLatest( + { + itemId, + repositories: repositories.map((repository) => ({ + id: repository.id, + provider, + identifier: repository.identifier, + versionFilter: repository.versionFilter, + providerUrl: repository.providerUrl, + })), + }, + { staleTime: getReleasesQueryStaleTimeMs }, + ), ), ); diff --git a/packages/widgets/src/releases/query-options.spec.ts b/packages/widgets/src/releases/query-options.spec.ts new file mode 100644 index 000000000..8f476816f --- /dev/null +++ b/packages/widgets/src/releases/query-options.spec.ts @@ -0,0 +1,25 @@ +import { describe, expect, test } from "vitest"; + +import { getReleasesQueryStaleTimeMs } from "./query-options"; + +describe("getReleasesQueryStaleTimeMs", () => { + test("keeps successful release batches fresh for four hours", () => { + const staleTime = getReleasesQueryStaleTimeMs({ + state: { data: [{ success: true }, { success: true }] }, + }); + + expect(staleTime).toBe(4 * 60 * 60 * 1000); + }); + + test("keeps a batch stale when a provider returned an error", () => { + const staleTime = getReleasesQueryStaleTimeMs({ + state: { data: [{ success: true }, { success: false }] }, + }); + + expect(staleTime).toBe(0); + }); + + test.each([undefined, [], [{ unexpected: true }]])("keeps missing or invalid data stale", (data) => { + expect(getReleasesQueryStaleTimeMs({ state: { data } })).toBe(0); + }); +}); diff --git a/packages/widgets/src/releases/query-options.ts b/packages/widgets/src/releases/query-options.ts new file mode 100644 index 000000000..164fc8dcc --- /dev/null +++ b/packages/widgets/src/releases/query-options.ts @@ -0,0 +1,17 @@ +export const releasesQuerySuccessfulStaleTimeMs = 4 * 60 * 60 * 1000; + +interface QueryWithData { + state: { + data: unknown; + }; +} + +export const getReleasesQueryStaleTimeMs = ({ state }: QueryWithData) => { + if (!Array.isArray(state.data) || state.data.length === 0) return 0; + + const allRepositoriesSucceeded = state.data.every( + (result) => typeof result === "object" && result !== null && "success" in result && result.success === true, + ); + + return allRepositoriesSucceeded ? releasesQuerySuccessfulStaleTimeMs : 0; +}; From 9cabb42edb0015be07049edb2aa52394b5d45271 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 23 Jul 2026 01:54:23 +0200 Subject: [PATCH 17/24] fix(widgets): add 350ms hover delay before opening calendar day popover (#6431) --- .../widgets/src/calendar/calender-day.tsx | 69 ++++--------------- packages/widgets/src/calendar/component.tsx | 8 +-- 2 files changed, 14 insertions(+), 63 deletions(-) diff --git a/packages/widgets/src/calendar/calender-day.tsx b/packages/widgets/src/calendar/calender-day.tsx index 70f2f26a8..650356d2c 100644 --- a/packages/widgets/src/calendar/calender-day.tsx +++ b/packages/widgets/src/calendar/calender-day.tsx @@ -1,6 +1,4 @@ -import { useCallback, useState } from "react"; -import { Box, Container, Flex, Popover, Text, useMantineTheme } from "@mantine/core"; -import { useElementSize } from "@mantine/hooks"; +import { Box, Container, Flex, HoverCard, Text, useMantineTheme } from "@mantine/core"; import { useRequiredBoard } from "@homarr/boards/context"; import type { CalendarEvent } from "@homarr/integrations/types"; @@ -13,14 +11,9 @@ interface CalendarDayProps { disabled: boolean; rootWidth: number; rootHeight: number; - onOpen: (close: () => void) => void; } -export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onOpen }: CalendarDayProps) => { - const [opened, setOpened] = useState(false); - const [pinned, setPinned] = useState(false); - const { primaryColor } = useMantineTheme(); - const { ref, height } = useElementSize(); +export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: CalendarDayProps) => { const board = useRequiredBoard(); const mantineTheme = useMantineTheme(); const actualItemRadius = mantineTheme.radius[board.itemRadius]; @@ -29,39 +22,19 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO const shouldScaleDown = minAxisSize < 350; const isSmall = rootHeight < 256; - const isTooSmallForIndicators = height < 30; - - const handleMouseEnter = useCallback(() => { - if (disabled) return; - onOpen(() => { - setOpened(false); - setPinned(false); - }); - setOpened(true); - }, [disabled, onOpen]); - - const handleMouseLeave = useCallback(() => { - if (!pinned) setOpened(false); - }, [pinned]); - return ( - { - setOpened(value); - if (!value) setPinned(false); - }} - opened={opened} + transitionProps={{ transition: "pop" }} + openDelay={350} + closeDelay={400} disabled={disabled} > - + { - if (!disabled) setPinned((prev) => !prev); - }} - onMouseEnter={handleMouseEnter} - onMouseLeave={handleMouseLeave} > {date.getDate()} - {!isTooSmallForIndicators && } + - - {/* Popover has some offset on the left side, padding is removed because of scrollarea paddings */} - setOpened(true)} - onMouseLeave={handleMouseLeave} - > + + - - + + ); }; @@ -111,7 +69,6 @@ interface NotificationIndicatorProps { const NotificationIndicator = ({ events, isSmall }: NotificationIndicatorProps) => { const notificationEvents = [...new Set(events.map((event) => event.indicatorColor))].filter(String); - /* position bottom is lower when small to not be on top of number*/ return ( splitEvents(events), [events]); - const activeCloseRef = useRef<(() => void) | null>(null); - const onDayOpen = useCallback((close: () => void) => { - activeCloseRef.current?.(); - activeCloseRef.current = close; - }, []); return ( ); }} From 9168f8114baca0b2123dd05580e18101a11bd50e Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 23 Jul 2026 02:01:10 +0200 Subject: [PATCH 18/24] fix(manage): hide sidebar nav items from unprivileged users (#6236) --- apps/nextjs/src/app/[locale]/manage/layout.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/nextjs/src/app/[locale]/manage/layout.tsx b/apps/nextjs/src/app/[locale]/manage/layout.tsx index 2634944f1..1cd0d3d2e 100644 --- a/apps/nextjs/src/app/[locale]/manage/layout.tsx +++ b/apps/nextjs/src/app/[locale]/manage/layout.tsx @@ -61,7 +61,7 @@ export default async function ManageLayout({ children }: PropsWithChildren) { icon: IconBox, href: "/manage/apps", label: t("items.apps"), - hidden: !session?.user.permissions.includes("board-modify-all"), + hidden: !session?.user.permissions.includes("app-create"), iconProps: { strokeWidth: 2.5, }, @@ -71,20 +71,20 @@ export default async function ManageLayout({ children }: PropsWithChildren) { icon: IconAffiliateFilled, href: "/manage/integrations", label: t("items.integrations"), - hidden: !session, + hidden: !session?.user.permissions.includes("integration-create"), "data-onboarding-tour-id": "manage-integrations", }, { icon: IconApi, href: "/manage/custom-widgets", label: t("items.customWidgets"), - hidden: !session, + hidden: !session?.user.permissions.includes("admin"), }, { icon: IconSearch, href: "/manage/search-engines", label: t("items.searchEngies"), - hidden: !session, + hidden: !session?.user.permissions.includes("search-engine-create"), iconProps: { strokeWidth: 2.5, }, @@ -94,7 +94,7 @@ export default async function ManageLayout({ children }: PropsWithChildren) { icon: IconPhotoFilled, href: "/manage/medias", label: t("items.medias"), - hidden: !session, + hidden: !session?.user.permissions.includes("media-upload"), "data-onboarding-tour-id": "manage-medias", }, { From 14c3fa2e760150d826ea26c6af9cb2ba4f9a4567 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 23 Jul 2026 02:03:08 +0200 Subject: [PATCH 19/24] fix(beszel): prevent live subscription memory growth (#6448) * fix(beszel): bound live stats subscriptions * fix(beszel): avoid blocking subscription teardown * fix(import): map new clock options --- .../widgets/beszel-system-stats/index.mdx | 2 +- .../__tests__/bounded-async-queue.spec.ts | 45 +++++ packages/api/src/router/widgets/beszel.ts | 155 +++++++++--------- .../src/router/widgets/bounded-async-queue.ts | 88 ++++++++++ .../core/src/infrastructure/http/request.ts | 14 +- .../src/beszel/beszel-integration.ts | 61 +++++-- .../beszel/test/beszel-integration.spec.ts | 4 +- packages/old-import/src/widgets/options.ts | 3 + .../src/beszel/_shared/use-live-stats.ts | 18 +- 9 files changed, 286 insertions(+), 104 deletions(-) create mode 100644 packages/api/src/router/widgets/__tests__/bounded-async-queue.spec.ts create mode 100644 packages/api/src/router/widgets/bounded-async-queue.ts diff --git a/apps/docs/docs/widgets/beszel-system-stats/index.mdx b/apps/docs/docs/widgets/beszel-system-stats/index.mdx index 1e9c896b9..e29d083ba 100644 --- a/apps/docs/docs/widgets/beszel-system-stats/index.mdx +++ b/apps/docs/docs/widgets/beszel-system-stats/index.mdx @@ -15,7 +15,7 @@ import beszelSystemStats from "./img/beszel-system-stats.png"; -This widget displays time-series charts for a selected Beszel system, including CPU, memory, disk, network, and Docker container metrics. The Disk Usage chart combines the root disk and every extra filesystem reported by Beszel. You can use the realtime Live view or select a historical period ranging from 1 hour to 30 days. If the live stream drops, the widget now shows the connection failure state immediately and can switch back to historical data. +This widget displays time-series charts for a selected Beszel system, including CPU, memory, disk, network, and Docker container metrics. The Disk Usage chart combines the root disk and every extra filesystem reported by Beszel. You can use the realtime Live view or select a historical period ranging from 1 hour to 30 days. Live view keeps a one-minute window and pauses while the browser tab is hidden. If the live stream drops, the widget now shows the connection failure state immediately and can switch back to historical data. ### Screenshots diff --git a/packages/api/src/router/widgets/__tests__/bounded-async-queue.spec.ts b/packages/api/src/router/widgets/__tests__/bounded-async-queue.spec.ts new file mode 100644 index 000000000..9c2131ea7 --- /dev/null +++ b/packages/api/src/router/widgets/__tests__/bounded-async-queue.spec.ts @@ -0,0 +1,45 @@ +import { describe, expect, test } from "vitest"; + +import { BoundedAsyncQueue } from "../bounded-async-queue"; + +describe("BoundedAsyncQueue", () => { + test("keeps only the newest values when the queue is full", async () => { + const queue = new BoundedAsyncQueue(2); + queue.push(1); + queue.push(2); + queue.push(3); + queue.close(); + + await expect(queue.next()).resolves.toEqual({ value: 2, done: false }); + await expect(queue.next()).resolves.toEqual({ value: 3, done: false }); + await expect(queue.next()).resolves.toEqual({ value: undefined, done: true }); + }); + + test("resolves a pending read as soon as a value arrives", async () => { + const queue = new BoundedAsyncQueue(1); + const next = queue.next(); + + queue.push("latest"); + + await expect(next).resolves.toEqual({ value: "latest", done: false }); + }); + + test("resolves a pending read when the producer closes", async () => { + const queue = new BoundedAsyncQueue(1); + const next = queue.next(); + + queue.close(); + + await expect(next).resolves.toEqual({ value: undefined, done: true }); + }); + + test("rejects a pending read when the producer fails", async () => { + const queue = new BoundedAsyncQueue(1); + const next = queue.next(); + const error = new Error("upstream failed"); + + queue.fail(error); + + await expect(next).rejects.toBe(error); + }); +}); diff --git a/packages/api/src/router/widgets/beszel.ts b/packages/api/src/router/widgets/beszel.ts index 81fae10a0..738adecf7 100644 --- a/packages/api/src/router/widgets/beszel.ts +++ b/packages/api/src/router/widgets/beszel.ts @@ -1,5 +1,4 @@ import { TRPCError } from "@trpc/server"; -import { observable } from "@trpc/server/observable"; import { z } from "zod/v4"; import { createLogger } from "@homarr/core/infrastructure/logs"; @@ -14,8 +13,10 @@ import { import { settleIntegrationQueries } from "../../settle-integrations"; import { createManyIntegrationMiddleware } from "../../middlewares/integration"; import { createTRPCRouter, publicProcedure } from "../../trpc"; +import { BoundedAsyncQueue } from "./bounded-async-queue"; const logger = createLogger({ module: "beszelRouter" }); +const MAX_PENDING_LIVE_EVENTS = 4; const errorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error)); @@ -203,98 +204,94 @@ export const beszelRouter = createTRPCRouter({ systemId: z.string(), }), ) - .subscription(({ ctx, input }) => { - return observable((emit) => { - const controller = new AbortController(); - let isActive = true; - let emittedEventCount = 0; + .subscription(async function* ({ ctx, input, signal }) { + const integration = ctx.integrations[0]; + if (!integration) { + throw new TRPCError({ code: "BAD_REQUEST", message: "At least one Beszel integrationId is required" }); + } - logger.debug("Beszel realtime subscription started", { - userId: ctx.session?.user?.id, - integrationIds: ctx.integrations.map((integration) => integration.id), - systemId: input.systemId, - }); + const queue = new BoundedAsyncQueue(MAX_PENDING_LIVE_EVENTS); + const controller = new AbortController(); + let emittedEventCount = 0; + const stop = () => { + controller.abort(); + void queue.return(); + }; + if (signal?.aborted) return; + signal?.addEventListener("abort", stop, { once: true }); + + logger.debug("Beszel realtime subscription started", { + userId: ctx.session?.user?.id, + integrationIds: ctx.integrations.map((candidate) => candidate.id), + systemId: input.systemId, + }); + + try { + const instance = await createIntegrationAsync(integration); + if (controller.signal.aborted) return; void (async () => { - const integration = ctx.integrations[0]; - if (!integration) { - emit.error( - new TRPCError({ code: "BAD_REQUEST", message: "At least one Beszel integrationId is required" }), - ); - return; - } - try { - const instance = await createIntegrationAsync(integration); - if (typeof instance.subscribeRealtimeMetrics === "function") { - await instance.subscribeRealtimeMetrics( - input.systemId, - (event) => { - if (!isActive) return; - emittedEventCount += 1; - if (emittedEventCount <= 2 || emittedEventCount % 60 === 0) { - logger.debug("Forwarding Beszel realtime events", { - userId: ctx.session?.user?.id, - integrationId: integration.id, - systemId: input.systemId, - eventType: event.type, - emittedEventCount, - statsCount: Array.isArray(event.record.stats) ? event.record.stats.length : undefined, - }); - } - emit.next(event); - }, - controller.signal, - ); - } else { - emit.error( - new TRPCError({ - code: "METHOD_NOT_SUPPORTED", - message: `Integration ${integration.kind} does not support realtime metrics`, - }), - ); - } - } catch (error) { - if (isActive) { - logger.warn("Beszel realtime subscription failed", { - userId: ctx.session?.user?.id, - integrationId: integration.id, - systemId: input.systemId, - emittedEventCount, - error: errorMessage(error), + if (typeof instance.subscribeRealtimeMetrics !== "function") { + throw new TRPCError({ + code: "METHOD_NOT_SUPPORTED", + message: `Integration ${integration.kind} does not support realtime metrics`, }); - emit.error( - error instanceof TRPCError - ? error - : new TRPCError({ - code: "INTERNAL_SERVER_ERROR", - message: error instanceof Error ? error.message : String(error), - }), - ); } - } - if (isActive) { - logger.debug("Beszel realtime subscription completed", { + await instance.subscribeRealtimeMetrics( + input.systemId, + (event) => { + emittedEventCount += 1; + if (emittedEventCount <= 2 || emittedEventCount % 60 === 0) { + logger.debug("Forwarding Beszel realtime events", { + userId: ctx.session?.user?.id, + integrationId: integration.id, + systemId: input.systemId, + eventType: event.type, + emittedEventCount, + statsCount: Array.isArray(event.record.stats) ? event.record.stats.length : undefined, + }); + } + queue.push(event); + }, + controller.signal, + ); + queue.close(); + } catch (error) { + if (controller.signal.aborted) { + queue.close(); + return; + } + + logger.warn("Beszel realtime subscription failed", { userId: ctx.session?.user?.id, integrationId: integration.id, systemId: input.systemId, emittedEventCount, + error: errorMessage(error), }); - emit.complete(); + queue.fail( + error instanceof TRPCError + ? error + : new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: error instanceof Error ? error.message : String(error), + }), + ); } })(); - return () => { - isActive = false; - logger.debug("Beszel realtime subscription cancelled", { - userId: ctx.session?.user?.id, - integrationIds: ctx.integrations.map((integration) => integration.id), - systemId: input.systemId, - emittedEventCount, - }); - controller.abort(); - }; - }); + for await (const event of queue) yield event; + } finally { + stop(); + signal?.removeEventListener("abort", stop); + logger.debug("Beszel realtime subscription stopped", { + userId: ctx.session?.user?.id, + integrationId: integration.id, + systemId: input.systemId, + emittedEventCount, + }); + } }), }); diff --git a/packages/api/src/router/widgets/bounded-async-queue.ts b/packages/api/src/router/widgets/bounded-async-queue.ts new file mode 100644 index 000000000..3efe86f44 --- /dev/null +++ b/packages/api/src/router/widgets/bounded-async-queue.ts @@ -0,0 +1,88 @@ +type QueueResult = IteratorResult; + +type PendingRead = { + resolve: (result: QueueResult) => void; + reject: (reason?: unknown) => void; +}; + +/** + * A small async queue for live streams. + * + * Live metrics are snapshots, so retaining every snapshot while a client is + * slow is both unnecessary and dangerous. When the queue is full, discard + * the oldest pending snapshot and keep the newest one. + */ +export class BoundedAsyncQueue implements AsyncIterableIterator { + private readonly values: T[] = []; + private pendingRead: PendingRead | undefined; + private closed = false; + private failed = false; + private failure: unknown; + + public constructor(private readonly maxSize: number) { + if (!Number.isInteger(maxSize) || maxSize < 1) { + throw new Error("A bounded async queue requires a positive integer max size"); + } + } + + public push(value: T): void { + if (this.closed) return; + + if (this.pendingRead) { + const pendingRead = this.pendingRead; + this.pendingRead = undefined; + pendingRead.resolve({ value, done: false }); + return; + } + + if (this.values.length >= this.maxSize) this.values.shift(); + this.values.push(value); + } + + public close(): void { + if (this.closed) return; + this.closed = true; + + if (this.pendingRead) { + const pendingRead = this.pendingRead; + this.pendingRead = undefined; + pendingRead.resolve({ value: undefined, done: true }); + } + } + + public fail(error: unknown): void { + if (this.closed) return; + this.closed = true; + this.failed = true; + this.failure = error; + this.values.length = 0; + + if (this.pendingRead) { + const pendingRead = this.pendingRead; + this.pendingRead = undefined; + pendingRead.reject(error); + } + } + + public next(): Promise> { + if (this.values.length > 0) { + return Promise.resolve({ value: this.values.shift() as T, done: false }); + } + if (this.failed) return Promise.reject(this.failure); + if (this.closed) return Promise.resolve({ value: undefined, done: true }); + + return new Promise>((resolve, reject) => { + this.pendingRead = { resolve, reject }; + }); + } + + public return(): Promise> { + this.values.length = 0; + this.close(); + return Promise.resolve({ value: undefined, done: true }); + } + + public [Symbol.asyncIterator](): AsyncIterableIterator { + return this; + } +} diff --git a/packages/core/src/infrastructure/http/request.ts b/packages/core/src/infrastructure/http/request.ts index b13eb0cc2..b3c3ea354 100644 --- a/packages/core/src/infrastructure/http/request.ts +++ b/packages/core/src/infrastructure/http/request.ts @@ -67,12 +67,14 @@ export const fetchWithTrustedCertificatesAsync = async ( url: RequestInfo, options?: RequestInit & { timeout?: number; bodyTimeout?: number }, ): Promise => { - const agent = await createCertificateAgentAsync( - undefined, - options?.bodyTimeout !== undefined ? { bodyTimeout: options.bodyTimeout } : undefined, - ); + const agent = + options?.dispatcher ?? + (await createCertificateAgentAsync( + undefined, + options?.bodyTimeout !== undefined ? { bodyTimeout: options.bodyTimeout } : undefined, + )); if (options?.timeout) { - const { bodyTimeout: _bodyTimeout, ...fetchOptions } = options; + const { bodyTimeout: _bodyTimeout, dispatcher: _dispatcher, ...fetchOptions } = options; return await withTimeoutAsync( async (signal) => fetch(url, { @@ -84,7 +86,7 @@ export const fetchWithTrustedCertificatesAsync = async ( ); } - const { bodyTimeout: _bodyTimeout, ...fetchOptions } = options ?? {}; + const { bodyTimeout: _bodyTimeout, dispatcher: _dispatcher, ...fetchOptions } = options ?? {}; return fetch(url, { ...fetchOptions, dispatcher: agent, diff --git a/packages/integrations/src/beszel/beszel-integration.ts b/packages/integrations/src/beszel/beszel-integration.ts index f8c681da3..bc026fc18 100644 --- a/packages/integrations/src/beszel/beszel-integration.ts +++ b/packages/integrations/src/beszel/beszel-integration.ts @@ -1,6 +1,7 @@ import { ResponseError } from "@homarr/common/server"; import { createLogger } from "@homarr/core/infrastructure/logs"; -import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http"; +import { createCertificateAgentAsync, fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http"; +import type { Response as UndiciResponse } from "undici"; import type { IntegrationInput, IntegrationTestingInput } from "../base/integration"; import { Integration } from "../base/integration"; @@ -357,19 +358,41 @@ export class BeszelIntegration extends Integration { let emittedSnapshotCount = 0; while (!signal.aborted) { + let streamResponse: UndiciResponse | undefined; + let streamAgent: Awaited> | undefined; + const closeStreamAsync = async () => { + const response = streamResponse; + streamResponse = undefined; + const agent = streamAgent; + streamAgent = undefined; + + if (response?.body) await response.body.cancel().catch(() => {}); + if (agent) await agent.close().catch(() => {}); + }; + try { let session = await this.authenticateAsync(); - const openStream = async () => - await fetchWithTrustedCertificatesAsync(realtimeUrl, { - headers: { - Accept: "text/event-stream", - Authorization: session.token, - "Cache-Control": "no-cache", - Pragma: "no-cache", - }, - signal, - bodyTimeout: 0, - }); + const openStream = async () => { + streamAgent = await createCertificateAgentAsync(undefined, { bodyTimeout: 0 }); + try { + const response = await fetchWithTrustedCertificatesAsync(realtimeUrl, { + headers: { + Accept: "text/event-stream", + Authorization: session.token, + "Cache-Control": "no-cache", + Pragma: "no-cache", + }, + signal, + bodyTimeout: 0, + dispatcher: streamAgent, + }); + streamResponse = response; + return response; + } catch (error) { + await closeStreamAsync(); + throw error; + } + }; logger.debug("Opening Beszel rt_metrics SSE connection", { integrationId: this.integration.id, @@ -378,6 +401,7 @@ export class BeszelIntegration extends Integration { }); let response = await openStream(); if (response.status === 401) { + await closeStreamAsync(); await this.sessionStore.clearAsync(); session = await this.authenticateAsync(); response = await openStream(); @@ -402,14 +426,21 @@ export class BeszelIntegration extends Integration { clientId = frame.id || fallbackClientId; if (!clientId) throw new Error("PocketBase PB_CONNECT event did not include a client ID"); + if (!streamAgent) throw new Error("Beszel realtime stream agent is not available"); const subscribeResponse = await fetchWithTrustedCertificatesAsync(realtimeUrl, { method: "POST", headers: { Authorization: session.token, "Content-Type": "application/json" }, body: JSON.stringify({ clientId, subscriptions: [topic] }), signal, + dispatcher: streamAgent, }); - if (subscribeResponse.status === 401) await this.sessionStore.clearAsync(); - if (!subscribeResponse.ok) throw new ResponseError(subscribeResponse); + try { + if (subscribeResponse.status === 401) await this.sessionStore.clearAsync(); + if (!subscribeResponse.ok) throw new ResponseError(subscribeResponse); + await subscribeResponse.arrayBuffer(); + } finally { + if (subscribeResponse.body) await subscribeResponse.body.cancel().catch(() => {}); + } logger.debug("Subscribed to Beszel rt_metrics topic", { integrationId: this.integration.id, systemId, @@ -461,10 +492,12 @@ export class BeszelIntegration extends Integration { } finally { await reader.cancel().catch(() => {}); reader.releaseLock(); + await closeStreamAsync(); } if (!signal.aborted) throw new Error("Beszel rt_metrics SSE stream ended unexpectedly"); } catch (error) { + await closeStreamAsync(); if (signal.aborted) break; if (error instanceof ResponseError && error.statusCode === 401 && retryAttempt === 0) { retryAttempt += 1; diff --git a/packages/integrations/src/beszel/test/beszel-integration.spec.ts b/packages/integrations/src/beszel/test/beszel-integration.spec.ts index 22465fd19..05e4cbd57 100644 --- a/packages/integrations/src/beszel/test/beszel-integration.spec.ts +++ b/packages/integrations/src/beszel/test/beszel-integration.spec.ts @@ -10,6 +10,7 @@ vi.hoisted(() => { const BESZEL_URL = process.env.BESZEL_TEST_URL ?? "http://localhost:8090"; const BESZEL_EMAIL = process.env.BESZEL_TEST_EMAIL ?? ""; const BESZEL_PASSWORD = process.env.BESZEL_TEST_PASSWORD ?? ""; +const closeAgent = vi.hoisted(() => vi.fn().mockResolvedValue(undefined)); vi.mock("@homarr/redis", () => ({ createGetSetChannel: () => ({ @@ -32,7 +33,7 @@ vi.mock("@homarr/core/infrastructure/logs", () => ({ vi.mock("@homarr/core/infrastructure/http", () => ({ fetchWithTrustedCertificatesAsync: (url: URL | string, init?: RequestInit) => fetch(url, init), createAxiosCertificateInstanceAsync: vi.fn().mockResolvedValue({}), - createCertificateAgentAsync: vi.fn().mockResolvedValue(undefined), + createCertificateAgentAsync: vi.fn().mockResolvedValue({ close: closeAgent }), })); vi.mock("@homarr/core/infrastructure/certificates", () => ({ @@ -153,6 +154,7 @@ describe("subscribeRealtimeMetrics", () => { expect(subscriptionBodies).toEqual([{ clientId: "client-1", subscriptions: [topic] }]); expect(events.map((event) => event.type)).toEqual(["system_stats", "container_stats"]); + expect(closeAgent).toHaveBeenCalled(); } finally { globalThis.fetch = originalFetch; } diff --git a/packages/old-import/src/widgets/options.ts b/packages/old-import/src/widgets/options.ts index a52de2b04..003696439 100644 --- a/packages/old-import/src/widgets/options.ts +++ b/packages/old-import/src/widgets/options.ts @@ -65,6 +65,9 @@ const optionMapping: OptionMapping = { useCustomTimezone: () => true, customTimeFormat: () => undefined, customDateFormat: () => undefined, + showWeather: () => undefined, + weatherLocation: () => undefined, + isWeatherFormatFahrenheit: () => undefined, }, downloads: { activeTorrentThreshold: (oldOptions) => diff --git a/packages/widgets/src/beszel/_shared/use-live-stats.ts b/packages/widgets/src/beszel/_shared/use-live-stats.ts index f2ab5df34..5930ab462 100644 --- a/packages/widgets/src/beszel/_shared/use-live-stats.ts +++ b/packages/widgets/src/beszel/_shared/use-live-stats.ts @@ -1,6 +1,6 @@ "use client"; -import { useCallback, useEffect, useRef, useState } from "react"; +import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from "react"; import { skipToken } from "@tanstack/react-query"; import { clientApi } from "@homarr/api/client"; @@ -10,10 +10,22 @@ import type { BeszelContainerStatsRecord, BeszelSystemStatsRecord } from "@homar // without synthesizing points for missed updates. const MAX_BUFFER = 60; +const subscribeToVisibility = (onChange: () => void) => { + if (typeof document === "undefined") return () => {}; + document.addEventListener("visibilitychange", onChange); + return () => document.removeEventListener("visibilitychange", onChange); +}; + +const getPageVisibility = () => typeof document === "undefined" || document.visibilityState === "visible"; + +const usePageVisible = () => useSyncExternalStore(subscribeToVisibility, getPageVisibility, () => true); + export const useLiveStats = (integrationIds: string[], systemId: string, enabled: boolean) => { const [systemStats, setSystemStats] = useState([]); const [containerStats, setContainerStats] = useState([]); const [error, setError] = useState(null); + const pageVisible = usePageVisible(); + const subscriptionEnabled = enabled && pageVisible && systemId !== ""; // Append to buffer, trimming to MAX_BUFFER const appendSystemStats = useCallback((record: BeszelSystemStatsRecord) => { @@ -31,7 +43,7 @@ export const useLiveStats = (integrationIds: string[], systemId: string, enabled }, []); clientApi.widget.beszel.subscribeSystemStats.useSubscription( - enabled && systemId !== "" ? { integrationIds, systemId } : skipToken, + subscriptionEnabled ? { integrationIds, systemId } : skipToken, { onData(event) { setError(null); @@ -49,7 +61,7 @@ export const useLiveStats = (integrationIds: string[], systemId: string, enabled // Reset buffers when system changes or integration changes const prevKeyRef = useRef(""); - const currentKey = `${integrationIds.join(",")}:${systemId}:${enabled}`; + const currentKey = `${integrationIds.join(",")}:${systemId}:${subscriptionEnabled}`; useEffect(() => { if (prevKeyRef.current !== currentKey) { prevKeyRef.current = currentKey; From 018b1ea4daed10888860a63358f916b47d9d71f4 Mon Sep 17 00:00:00 2001 From: "homarr-releases[bot]" <175486441+homarr-releases[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 02:03:43 +0200 Subject: [PATCH 20/24] chore: update bug report template (#6382) --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 42f647d87..e4fbfecc1 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.71.0 - 1.70.0 - 1.69.2 - 1.69.0 From f26e60edf08f185418be81ad1a69b21d7bab5b6d Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 23 Jul 2026 02:08:50 +0200 Subject: [PATCH 21/24] fix(old-import): map new clock weather options (#6452) From 8e557c992425b2e57a0685eb247e8c906bd92f34 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 05:58:19 +0000 Subject: [PATCH 22/24] chore(deps): update pnpm to v11.14.0 (#6449) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- deployments/prebuilt-debian/package.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deployments/prebuilt-debian/package.json b/deployments/prebuilt-debian/package.json index 3294d8c63..c74e03393 100644 --- a/deployments/prebuilt-debian/package.json +++ b/deployments/prebuilt-debian/package.json @@ -6,7 +6,7 @@ }, "engines": { "node": ">=24.18.0", - "pnpm": ">=11.13.1" + "pnpm": ">=11.14.0" }, - "packageManager": "pnpm@11.13.1" + "packageManager": "pnpm@11.14.0" } diff --git a/package.json b/package.json index 568785feb..522f1a69a 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ }, "engines": { "node": ">=24.18.0", - "pnpm": ">=11.13.1" + "pnpm": ">=11.14.0" }, - "packageManager": "pnpm@11.13.1" + "packageManager": "pnpm@11.14.0" } From 387db030cdbd385042df2546b17efbaf7ccbc6f2 Mon Sep 17 00:00:00 2001 From: "homarr-crowdin[bot]" <190541745+homarr-crowdin[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 09:14:14 +0200 Subject: [PATCH 23/24] chore(lang): updated translations from crowdin (#6283) --- packages/translation/src/lang/ca.json | 330 ++++++++- packages/translation/src/lang/cn.json | 330 ++++++++- packages/translation/src/lang/cr.json | 342 ++++++++- packages/translation/src/lang/cs.json | 330 ++++++++- packages/translation/src/lang/da.json | 346 ++++++++- packages/translation/src/lang/de-CH.json | 330 ++++++++- packages/translation/src/lang/de.json | 344 ++++++++- packages/translation/src/lang/el.json | 330 ++++++++- packages/translation/src/lang/en-gb.json | 460 ++++++++++-- packages/translation/src/lang/es.json | 330 ++++++++- packages/translation/src/lang/et.json | 330 ++++++++- packages/translation/src/lang/fi.json | 330 ++++++++- packages/translation/src/lang/fr.json | 330 ++++++++- packages/translation/src/lang/he.json | 330 ++++++++- packages/translation/src/lang/hr.json | 330 ++++++++- packages/translation/src/lang/hu.json | 330 ++++++++- packages/translation/src/lang/it.json | 330 ++++++++- packages/translation/src/lang/ja.json | 330 ++++++++- packages/translation/src/lang/ko.json | 890 ++++++++++++++++------- packages/translation/src/lang/lt.json | 330 ++++++++- packages/translation/src/lang/lv.json | 330 ++++++++- packages/translation/src/lang/nl.json | 330 ++++++++- packages/translation/src/lang/no.json | 330 ++++++++- packages/translation/src/lang/pl.json | 330 ++++++++- packages/translation/src/lang/pt-br.json | 330 ++++++++- packages/translation/src/lang/pt.json | 330 ++++++++- packages/translation/src/lang/ro.json | 330 ++++++++- packages/translation/src/lang/ru.json | 330 ++++++++- packages/translation/src/lang/sk.json | 330 ++++++++- packages/translation/src/lang/sl.json | 330 ++++++++- packages/translation/src/lang/sv.json | 330 ++++++++- packages/translation/src/lang/tr.json | 330 ++++++++- packages/translation/src/lang/uk.json | 402 +++++++++- packages/translation/src/lang/vi.json | 330 ++++++++- packages/translation/src/lang/zh.json | 330 ++++++++- 35 files changed, 11844 insertions(+), 510 deletions(-) diff --git a/packages/translation/src/lang/ca.json b/packages/translation/src/lang/ca.json index e227775fb..7de3c05c5 100644 --- a/packages/translation/src/lang/ca.json +++ b/packages/translation/src/lang/ca.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Utilitza icones pels pings" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Motor de cerca principal" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "", "heading": "", "align": "", + "directionLtr": "", + "directionRtl": "", "blockquote": "", "horizontalLine": "", "bulletList": "", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/cn.json b/packages/translation/src/lang/cn.json index aa0baf940..4f29cda39 100644 --- a/packages/translation/src/lang/cn.json +++ b/packages/translation/src/lang/cn.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "为 ping 使用图标" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "默认搜索引擎" }, @@ -1285,6 +1289,14 @@ "label": "API 密钥 (机密)", "newLabel": "新建API密钥(机密)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "应用 ID", "newLabel": "新应用 ID" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "自定义日期格式", "description": "使用 ISO 8601 格式化日期(这将覆盖其他选项)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "清除格式", "heading": "标题 {level}", "align": "对齐文本: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "引用", "horizontalLine": "横线", "bulletList": "符号列表", @@ -2225,7 +2267,8 @@ "sunrise": "日出", "sunset": "日落", "maxWindSpeed": "最大风速:{maxWindSpeed} {unit}", - "maxWindGusts": "最大阵风:{maxWindGusts} {unit}" + "maxWindGusts": "最大阵风:{maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "晴朗", @@ -2689,6 +2732,11 @@ "user": "用户", "name": "名称", "id": "ID", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "技术统计", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Immich 服务器统计", "description": "有关您的 Immich 实例的信息", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Immich 相册", + "allPhotos": "", "option": { "albumId": { "label": "相册ID", @@ -2801,7 +3037,6 @@ } }, "description": "Immich 相册图片幻灯片", - "noAlbumSelected": "未选择相册,请编辑组件并选择一个相册", "noPhotos": "此相册中没有照片" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "在新标签页中打开链接" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS 订阅", "description": "监视和显示一个或多个通用 RSS、ATOM 或 JSON 源", @@ -3336,7 +3606,11 @@ "name": "通知", "description": "在集成中显示通知历史", "noItems": "没有可显示的通知。", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "网速测试追踪器", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "容器", "table": { "updated": "已更新 {when}", + "refresh": { + "lastUpdated": "" + }, "search": "搜索 {count} 容器", "selected": "{totalCount} 容器的 {selectCount}", "footer": "总计 {count} 容器", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/cr.json b/packages/translation/src/lang/cr.json index 3a4ae4319..56b344fc6 100644 --- a/packages/translation/src/lang/cr.json +++ b/packages/translation/src/lang/cr.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "crwdns44:0crwdne44:0" }, + "enableRightClickOnWidgets": { + "label": "crwdns6095:0crwdne6095:0", + "description": "crwdns6097:0crwdne6097:0" + }, "defaultSearchEngine": { "label": "crwdns2694:0crwdne2694:0" }, @@ -862,7 +866,7 @@ "created": "crwdns5553:0{name}crwdne5553:0", "updated": "crwdns5555:0{name}crwdne5555:0", "deleted": "crwdns5557:0{name}crwdne5557:0", - "imported": "crwdns5559:0crwdne5559:0", + "imported": "crwdns6079:0crwdne6079:0", "aiPromptCopied": "crwdns5561:0crwdne5561:0", "aiPromptDescription": "crwdns5563:0crwdne5563:0", "aiPromptCopy": "crwdns5565:0crwdne5565:0", @@ -1285,6 +1289,14 @@ "label": "crwdns3618:0crwdne3618:0", "newLabel": "crwdns3620:0crwdne3620:0" }, + "patchmonApiKey": { + "label": "crwdns5859:0crwdne5859:0", + "newLabel": "crwdns5861:0crwdne5861:0" + }, + "patchmonApiSecret": { + "label": "crwdns5863:0crwdne5863:0", + "newLabel": "crwdns5865:0crwdne5865:0" + }, "githubAppId": { "label": "crwdns3676:0crwdne3676:0", "newLabel": "crwdns3678:0crwdne3678:0" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "crwdns5753:0crwdne5753:0", + "description": "crwdns5755:0crwdne5755:0" + }, "paperlessNgx": { "name": "crwdns5003:0crwdne5003:0", "description": "crwdns5005:0crwdne5005:0" + }, + "patchmon": { + "name": "crwdns5867:0crwdne5867:0", + "description": "crwdns5869:0crwdne5869:0" + }, + "bazarr": { + "name": "crwdns5799:0crwdne5799:0", + "description": "crwdns5801:0crwdne5801:0" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "crwdns5739:0crwdne5739:0", "options": "crwdns5709:0crwdne5709:0", "actions": "crwdns5711:0crwdne5711:0" + }, + "status": { + "success": "crwdns6049:0crwdne6049:0", + "error": "crwdns6051:0crwdne6051:0", + "loading": "crwdns6053:0crwdne6053:0", + "idle": "crwdns6055:0crwdne6055:0" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "crwdns2726:0crwdne2726:0", "description": "crwdns2728:0crwdne2728:0" + }, + "showWeather": { + "label": "crwdns6113:0crwdne6113:0", + "description": "crwdns6115:0crwdne6115:0" + }, + "weatherLocation": { + "label": "crwdns6117:0crwdne6117:0" + }, + "isWeatherFormatFahrenheit": { + "label": "crwdns6119:0crwdne6119:0" } } }, @@ -1936,6 +1976,8 @@ "clear": "crwdns884:0crwdne884:0", "heading": "crwdns886:0{level}crwdne886:0", "align": "crwdns888:0{position}crwdne888:0", + "directionLtr": "crwdns6043:0crwdne6043:0", + "directionRtl": "crwdns6045:0crwdne6045:0", "blockquote": "crwdns890:0crwdne890:0", "horizontalLine": "crwdns892:0crwdne892:0", "bulletList": "crwdns894:0crwdne894:0", @@ -2225,7 +2267,8 @@ "sunrise": "crwdns2712:0crwdne2712:0", "sunset": "crwdns2714:0crwdne2714:0", "maxWindSpeed": "crwdns3772:0{maxWindSpeed}crwdnd3772:0{unit}crwdne3772:0", - "maxWindGusts": "crwdns3774:0{maxWindGusts}crwdnd3774:0{unit}crwdne3774:0" + "maxWindGusts": "crwdns3774:0{maxWindGusts}crwdnd3774:0{unit}crwdne3774:0", + "humidity": "crwdns6111:0{humidity}crwdne6111:0" }, "kind": { "clear": "crwdns1032:0crwdne1032:0", @@ -2689,6 +2732,11 @@ "user": "crwdns2476:0crwdne2476:0", "name": "crwdns2478:0crwdne2478:0", "id": "crwdns2480:0crwdne2480:0", + "status": "crwdns6085:0crwdne6085:0", + "directPlay": "crwdns6087:0crwdne6087:0", + "transcoding": "crwdns6089:0crwdne6089:0", + "paused": "crwdns6091:0crwdne6091:0", + "remaining": "crwdns6093:0{minutes}crwdne6093:0", "metadata": { "title": "crwdns3744:0crwdne3744:0", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "crwdns5055:0crwdne5055:0" } }, + "patchmon": { + "name": "crwdns5871:0crwdne5871:0", + "description": "crwdns5873:0crwdne5873:0", + "title": "crwdns5875:0crwdne5875:0", + "totalHosts": "crwdns5877:0crwdne5877:0", + "hostsNeedingUpdates": "crwdns5879:0crwdne5879:0", + "securityUpdates": "crwdns5881:0crwdne5881:0", + "upToDateHosts": "crwdns5883:0crwdne5883:0", + "hostsWithSecurityUpdates": "crwdns5885:0crwdne5885:0", + "recentUpdates24h": "crwdns5887:0crwdne5887:0", + "totalOutdatedPackages": "crwdns5889:0crwdne5889:0", + "totalRepos": "crwdns5891:0crwdne5891:0", + "osDistribution": "crwdns5893:0crwdne5893:0", + "compliance": "crwdns5895:0crwdne5895:0", + "complianceRatio": "crwdns5897:0{upToDate}crwdnd5897:0{total}crwdne5897:0", + "lastUpdated": "crwdns5899:0{time}crwdne5899:0", + "option": { + "showTotalHosts": { + "label": "crwdns5901:0crwdne5901:0", + "description": "crwdns5903:0crwdne5903:0" + }, + "showHostsNeedingUpdates": { + "label": "crwdns5905:0crwdne5905:0", + "description": "crwdns5907:0crwdne5907:0" + }, + "showSecurityUpdates": { + "label": "crwdns5909:0crwdne5909:0", + "description": "crwdns5911:0crwdne5911:0" + }, + "showUpToDateHosts": { + "label": "crwdns5913:0crwdne5913:0", + "description": "crwdns5915:0crwdne5915:0" + }, + "showHostsWithSecurityUpdates": { + "label": "crwdns5917:0crwdne5917:0", + "description": "crwdns5919:0crwdne5919:0" + }, + "showRecentUpdates24h": { + "label": "crwdns5921:0crwdne5921:0", + "description": "crwdns5923:0crwdne5923:0" + }, + "showTotalOutdatedPackages": { + "label": "crwdns5925:0crwdne5925:0", + "description": "crwdns5927:0crwdne5927:0" + }, + "showTotalRepos": { + "label": "crwdns5929:0crwdne5929:0", + "description": "crwdns5931:0crwdne5931:0" + }, + "enableThresholdColors": { + "label": "crwdns5933:0crwdne5933:0", + "description": "crwdns5935:0crwdne5935:0" + }, + "useCustomThresholds": { + "label": "crwdns5937:0crwdne5937:0", + "description": "crwdns5939:0crwdne5939:0" + }, + "thresholdMode": { + "option": { + "absolute": "crwdns5941:0crwdne5941:0", + "percent": "crwdns5943:0crwdne5943:0" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "crwdns5945:0crwdne5945:0", + "description": "crwdns5947:0crwdne5947:0" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "crwdns5949:0crwdne5949:0", + "description": "crwdns5951:0crwdne5951:0" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "crwdns5953:0crwdne5953:0", + "description": "crwdns5955:0crwdne5955:0" + }, + "securityUpdatesThresholdMode": { + "label": "crwdns5957:0crwdne5957:0", + "description": "crwdns5959:0crwdne5959:0" + }, + "securityUpdatesWarningAt": { + "label": "crwdns5961:0crwdne5961:0", + "description": "crwdns5963:0crwdne5963:0" + }, + "securityUpdatesCriticalAt": { + "label": "crwdns5965:0crwdne5965:0", + "description": "crwdns5967:0crwdne5967:0" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "crwdns5969:0crwdne5969:0", + "description": "crwdns5971:0crwdne5971:0" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "crwdns5973:0crwdne5973:0", + "description": "crwdns5975:0crwdne5975:0" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "crwdns5977:0crwdne5977:0", + "description": "crwdns5979:0crwdne5979:0" + }, + "upToDateHostsThresholdMode": { + "label": "crwdns5981:0crwdne5981:0", + "description": "crwdns5983:0crwdne5983:0" + }, + "upToDateHostsWarningAt": { + "label": "crwdns5985:0crwdne5985:0", + "description": "crwdns5987:0crwdne5987:0" + }, + "upToDateHostsCriticalAt": { + "label": "crwdns5989:0crwdne5989:0", + "description": "crwdns5991:0crwdne5991:0" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "crwdns5993:0crwdne5993:0", + "description": "crwdns5995:0crwdne5995:0" + }, + "totalOutdatedPackagesWarningAt": { + "label": "crwdns5997:0crwdne5997:0", + "description": "crwdns5999:0crwdne5999:0" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "crwdns6001:0crwdne6001:0", + "description": "crwdns6003:0crwdne6003:0" + }, + "showOsDistribution": { + "label": "crwdns6005:0crwdne6005:0", + "description": "crwdns6007:0crwdne6007:0" + }, + "osDistributionLimit": { + "label": "crwdns6009:0crwdne6009:0", + "description": "crwdns6011:0crwdne6011:0", + "option": { + "3": "crwdns6013:0crwdne6013:0", + "5": "crwdns6015:0crwdne6015:0", + "10": "crwdns6017:0crwdne6017:0", + "all": "crwdns6019:0crwdne6019:0" + } + }, + "showOsVersion": { + "label": "crwdns6021:0crwdne6021:0", + "description": "crwdns6023:0crwdne6023:0" + }, + "showComplianceHero": { + "label": "crwdns6025:0crwdne6025:0", + "description": "crwdns6027:0crwdne6027:0" + }, + "osDisplayMode": { + "label": "crwdns6029:0crwdne6029:0", + "description": "crwdns6031:0crwdne6031:0", + "option": { + "bars": "crwdns6033:0crwdne6033:0", + "donut": "crwdns6035:0crwdne6035:0" + } + } + }, + "error": { + "internalServerError": "crwdns6037:0crwdne6037:0" + } + }, + "bazarr": { + "name": "crwdns5803:0crwdne5803:0", + "description": "crwdns5805:0crwdne5805:0", + "episodes": "crwdns5807:0crwdne5807:0", + "movies": "crwdns5809:0crwdne5809:0", + "providers": "crwdns5811:0crwdne5811:0", + "status": "crwdns5813:0crwdne5813:0", + "option": { + "showMissingEpisodes": { + "label": "crwdns5815:0crwdne5815:0", + "description": "crwdns5817:0crwdne5817:0" + }, + "showMissingMovies": { + "label": "crwdns5819:0crwdne5819:0", + "description": "crwdns5821:0crwdne5821:0" + }, + "showProviderIssues": { + "label": "crwdns5823:0crwdne5823:0", + "description": "crwdns5825:0crwdne5825:0" + }, + "showHealthIssues": { + "label": "crwdns5827:0crwdne5827:0", + "description": "crwdns5829:0crwdne5829:0" + } + }, + "error": { + "internalServerError": "crwdns5831:0crwdne5831:0" + } + }, "immich-serverStats": { "name": "crwdns3880:0crwdne3880:0", "description": "crwdns3882:0crwdne3882:0", @@ -2782,10 +3017,11 @@ }, "immich-albumCarousel": { "name": "crwdns3908:0crwdne3908:0", + "allPhotos": "crwdns6103:0crwdne6103:0", "option": { "albumId": { "label": "crwdns5715:0crwdne5715:0", - "description": "crwdns5717:0crwdne5717:0" + "description": "crwdns6105:0crwdne6105:0" }, "rotationIntervalSeconds": { "label": "crwdns3914:0crwdne3914:0", @@ -2800,9 +3036,8 @@ "description": "crwdns5721:0crwdne5721:0" } }, - "description": "crwdns3922:0crwdne3922:0", - "noAlbumSelected": "crwdns3924:0crwdne3924:0", - "noPhotos": "crwdns3926:0crwdne3926:0" + "description": "crwdns6107:0crwdne6107:0", + "noPhotos": "crwdns6109:0crwdne6109:0" }, "downloads": { "name": "crwdns1170:0crwdne1170:0", @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "crwdns1306:0crwdne1306:0" + }, + "statusFilter": { + "label": "crwdns6081:0crwdne6081:0" + }, + "recentDays": { + "label": "crwdns6083:0crwdne6083:0" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "crwdns5833:0crwdne5833:0", + "description": "crwdns5835:0crwdne5835:0", + "option": { + "showMissing": { + "label": "crwdns5837:0crwdne5837:0" + }, + "showQueued": { + "label": "crwdns5839:0crwdne5839:0" + }, + "pageSize": { + "label": "crwdns5841:0crwdne5841:0" + } + }, + "tab": { + "missing": "crwdns5843:0crwdne5843:0", + "queued": "crwdns5845:0crwdne5845:0" + }, + "type": { + "movie": "crwdns5847:0crwdne5847:0", + "episode": "crwdns5849:0crwdne5849:0" + }, + "empty": { + "missing": "crwdns5851:0crwdne5851:0", + "queued": "crwdns5853:0crwdne5853:0", + "noTabsEnabled": "crwdns5855:0crwdne5855:0" + }, + "timeLeft": "crwdns5857:0crwdne5857:0" + }, "rssFeed": { "name": "crwdns1352:0crwdne1352:0", "description": "crwdns1354:0crwdne1354:0", @@ -3336,7 +3606,11 @@ "name": "crwdns3476:0crwdne3476:0", "description": "crwdns3478:0crwdne3478:0", "noItems": "crwdns3480:0crwdne3480:0", - "option": {} + "option": { + "hideLogos": { + "label": "crwdns5757:0crwdne5757:0" + } + } }, "speedtestTracker": { "name": "crwdns4014:0crwdne4014:0", @@ -3417,6 +3691,40 @@ "internalServerError": "crwdns5095:0crwdne5095:0" } }, + "traefik": { + "name": "crwdns5759:0crwdne5759:0", + "description": "crwdns5761:0crwdne5761:0", + "option": { + "showTcp": { + "label": "crwdns5763:0crwdne5763:0" + }, + "showUdp": { + "label": "crwdns5765:0crwdne5765:0" + }, + "showEntryPoints": { + "label": "crwdns5767:0crwdne5767:0" + } + }, + "instances": "crwdns5769:0crwdne5769:0", + "versionUnknown": "crwdns5771:0crwdne5771:0", + "summary": { + "routers": "crwdns5773:0crwdne5773:0", + "entryPoints": "crwdns5775:0crwdne5775:0" + }, + "resource": { + "routers": "crwdns5777:0crwdne5777:0", + "services": "crwdns5779:0crwdne5779:0", + "middlewares": "crwdns5781:0crwdne5781:0" + }, + "status": { + "healthy": "crwdns5783:0crwdne5783:0", + "errors": "crwdns5785:0{count}crwdne5785:0", + "warnings": "crwdns5787:0{count}crwdne5787:0" + }, + "error": { + "internalServerError": "crwdns5789:0crwdne5789:0" + } + }, "audioStats": { "name": "crwdns5097:0crwdne5097:0", "description": "crwdns5099:0crwdne5099:0", @@ -3783,8 +4091,8 @@ }, "disk": { "title": "crwdns4943:0crwdne4943:0", - "subtitle": "crwdns4945:0crwdne4945:0", - "series": "crwdns4947:0crwdne4947:0" + "subtitle": "crwdns6039:0crwdne6039:0", + "series": "crwdns6041:0crwdne6041:0" }, "diskIO": { "title": "crwdns4949:0crwdne4949:0", @@ -3792,6 +4100,11 @@ "read": "crwdns4953:0crwdne4953:0", "write": "crwdns4955:0crwdne4955:0" }, + "storage": { + "title": "crwdns5793:0crwdne5793:0", + "subtitle": "crwdns5795:0crwdne5795:0", + "series": "crwdns5797:0crwdne5797:0" + }, "network": { "title": "crwdns4957:0crwdne4957:0", "subtitle": "crwdns4959:0crwdne4959:0", @@ -4924,6 +5237,9 @@ "title": "crwdns1892:0crwdne1892:0", "table": { "updated": "crwdns1894:0{when}crwdne1894:0", + "refresh": { + "lastUpdated": "crwdns6047:0{when}crwdne6047:0" + }, "search": "crwdns3432:0{count}crwdne3432:0", "selected": "crwdns1898:0{selectCount}crwdnd1898:0{totalCount}crwdne1898:0", "footer": "crwdns3434:0{count}crwdne3434:0", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "crwdns6099:0crwdne6099:0", + "children": { + "detail": { + "title": "crwdns6101:0crwdne6101:0" + } + } + }, "fullPreferencesPage": { "label": "crwdns4367:0crwdne4367:0" } diff --git a/packages/translation/src/lang/cs.json b/packages/translation/src/lang/cs.json index 016c40061..e2d7a82fa 100644 --- a/packages/translation/src/lang/cs.json +++ b/packages/translation/src/lang/cs.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Používat ikony pro pingy" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Vymazat formátování", "heading": "Nadpis {level}", "align": "Zarovnat text: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Citace", "horizontalLine": "Vodorovná čára", "bulletList": "Odrážkový seznam", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "Jasno", @@ -2689,6 +2732,11 @@ "user": "Uživatel", "name": "Jméno", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Otevírat odkazy v nové kartě" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Kontejnery", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/da.json b/packages/translation/src/lang/da.json index bbb6da4c6..cde0954e3 100644 --- a/packages/translation/src/lang/da.json +++ b/packages/translation/src/lang/da.json @@ -8,9 +8,9 @@ "action": { "scratch": "Start fra bunden", "importOldmarr": "Importer fra Homarr før 1.0", - "restoreSqlite": "", - "restoreSqliteDescription": "", - "backToOptions": "" + "restoreSqlite": "Gendan fra SQLite backup", + "restoreSqliteDescription": "Upload en fuld SQLite database backup fra en tidligere Homarr instans. Dette vil gendanne alle tavler, brugere, apps, integrationer og indstillinger.", + "backToOptions": "← Tilbage til opsætningsmuligheder" } }, "import": { @@ -94,12 +94,12 @@ "subtitle": "Konfigurer serverindstillinger." }, "integrations": { - "title": "", - "subtitle": "", - "description": "", + "title": "Integrationer", + "subtitle": "Vælg de tjenester, du bruger.", + "description": "Vælg de integrationer, du gerne vil forbinde. Vi konfigurerer dit dashboard med matchende widgets automatisk.", "action": { - "continue": "", - "skip": "" + "continue": "Forsæt", + "skip": "Spring over for nu" }, "configure": { "progress": "", @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Brug ikoner til pings" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Standardsøgemaskine" }, @@ -1285,6 +1289,14 @@ "label": "API-nøgle (Secret)", "newLabel": "Ny API-nøgle (Key)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "App Id", "newLabel": "Nyt App Id" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Brugerdefineret datoformat", "description": "Brug ISO 8601 til at formatere dato (dette vil tilsidesætte andre valg)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Ryd formatering", "heading": "Overskrift {level}", "align": "Juster tekst: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Citatblok", "horizontalLine": "Horisontal linje", "bulletList": "Punktopstillet liste", @@ -2225,7 +2267,8 @@ "sunrise": "Solopgang", "sunset": "Solnedgang", "maxWindSpeed": "Maks. vindhastighed: {maxWindSpeed} {unit}", - "maxWindGusts": "Maks. vindstød {maxWindGusts} {unit}" + "maxWindGusts": "Maks. vindstød {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "Skyfrit", @@ -2689,6 +2732,11 @@ "user": "Bruger", "name": "Navn", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Statistik for nørder", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Immich Server Statistik", "description": "Information om din Immich instans", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Immich album", + "allPhotos": "", "option": { "albumId": { "label": "Album ID", @@ -2801,7 +3037,6 @@ } }, "description": "Diasshow af billeder i dit Immich album", - "noAlbumSelected": "Intet album valgt, rediger widget og vælg et album", "noPhotos": "Ingen fotos i dette album" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Åbn links i ny fane" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS feeds", "description": "Overvåg og vis en eller flere generiske RSS, ATOM eller JSON feeds", @@ -3336,7 +3606,11 @@ "name": "Notifikationer", "description": "Vis notifikationshistorik fra en integration", "noItems": "Ingen notifikationer at vise.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Containere", "table": { "updated": "Opdateret {when}", + "refresh": { + "lastUpdated": "" + }, "search": "Søg {count} containere", "selected": "{selectCount} af {totalCount} containere valgt", "footer": "Total {count} containere", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/de-CH.json b/packages/translation/src/lang/de-CH.json index 4c9c8f313..7658ab286 100644 --- a/packages/translation/src/lang/de-CH.json +++ b/packages/translation/src/lang/de-CH.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Symbole für Pings verwenden" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Standard Suchmaschine" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Benutzerdefiniertes Datumsformat", "description": "ISO 8601 Standard benutzen um das Datum zu formatieren (dies wird andere Optionen überschreiben)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Formatierung entfernen", "heading": "Überschrift {level}", "align": "Text ausrichten: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Blockzitat", "horizontalLine": "Horizontale Linie", "bulletList": "Aufzählung", @@ -2225,7 +2267,8 @@ "sunrise": "Sonnenaufgang", "sunset": "Sonnenuntergang", "maxWindSpeed": "Maximale Windgeschwindigkeit: {maxWindSpeed} km/h", - "maxWindGusts": "Maximale Windböen: {maxWindGusts} km/h" + "maxWindGusts": "Maximale Windböen: {maxWindGusts} km/h", + "humidity": "" }, "kind": { "clear": "Klar", @@ -2689,6 +2732,11 @@ "user": "Benutzer", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Links in neuem Tab öffnen" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS Feeds", "description": "Einen oder mehrere generische RSS, ATOM oder JSON-Feeds überwachen und anzeigen", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Container", "table": { "updated": "Aktualisiert {when}", + "refresh": { + "lastUpdated": "" + }, "search": "{count} Container durchsuchen", "selected": "{selectCount} von {totalCount} ausgewählten Containern", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/de.json b/packages/translation/src/lang/de.json index 086b3ea36..cda290b3c 100644 --- a/packages/translation/src/lang/de.json +++ b/packages/translation/src/lang/de.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Symbole für Pings verwenden" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Standard Suchmaschine" }, @@ -1021,7 +1025,7 @@ "mediaMonitoring": "Überwachung", "speedtest": "Geschwindigkeitstest", "analytics": "Nutzungsdaten", - "vpn": "", + "vpn": "VPN", "mediaLibrary": "Medienbibliothek", "uptimeMonitoring": "Überwachung der Betriebszeit" }, @@ -1285,6 +1289,14 @@ "label": "API-Schlüssel (Secret)", "newLabel": "Neuer API-Schlüssel (Secret)" }, + "patchmonApiKey": { + "label": "API Key", + "newLabel": "Neuer API Key" + }, + "patchmonApiSecret": { + "label": "API Secret", + "newLabel": "Neues API Secret" + }, "githubAppId": { "label": "App ID", "newLabel": "Neue App ID" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "Traefik", + "description": "" + }, "paperlessNgx": { "name": "Paperless-ngx", "description": "Dokumentenverwaltungssystem zum Archivieren und Organisieren gescannter Dokumente" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1599,9 +1623,15 @@ "menu": { "label": { "settings": "Einstellungen", - "refresh": "", - "options": "", - "actions": "" + "refresh": "Aktualisieren", + "options": "Optionen", + "actions": "Aktionen" + }, + "status": { + "success": "", + "error": "Fehler", + "loading": "Wird geladen", + "idle": "Leerlauf" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Benutzerdefiniertes Datumsformat", "description": "ISO 8601 Standard benutzen um das Datum zu formatieren (dies wird andere Optionen überschreiben)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Formatierung entfernen", "heading": "Überschrift {level}", "align": "Text ausrichten: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Blockzitat", "horizontalLine": "Horizontale Linie", "bulletList": "Aufzählung", @@ -2225,7 +2267,8 @@ "sunrise": "Sonnenaufgang", "sunset": "Sonnenuntergang", "maxWindSpeed": "Maximale Windgeschwindigkeit: {maxWindSpeed} {unit}", - "maxWindGusts": "Maximale Windböen: {maxWindGusts} {unit}" + "maxWindGusts": "Maximale Windböen: {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "Klar", @@ -2287,7 +2330,7 @@ "visibleStorageVolumes": { "label": "", "description": "", - "placeholder": "" + "placeholder": "Speichervolumen auswählen" }, "defaultTab": { "label": "Standard Tab" @@ -2426,8 +2469,8 @@ }, "vpn": { "name": "", - "description": "", - "serviceUnavailable": "", + "description": "Übersicht deiner VPN-Verbindungen", + "serviceUnavailable": "VPN nicht verfügbar", "option": {} }, "ups": { @@ -2689,6 +2732,11 @@ "user": "Benutzer", "name": "Name", "id": "Id", + "status": "Status", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Statistiken für Nerds", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "Fehler beim Abrufen der Paperless-ngx-Daten" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "Alle Hosts anzeigen", + "description": "Gesamtanzahl der überwachten Hosts anzeigen" + }, + "showHostsNeedingUpdates": { + "label": "Hosts die Updates benötigen anzeigen", + "description": "Hosts mit mindestens einem veralteten Paket anzeigen" + }, + "showSecurityUpdates": { + "label": "Sicherheits-Updates anzeigen", + "description": "Gesamtzahl der verfügbaren Sicherheits-Updates anzeigen" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Immich Serverstatistik einblenden", "description": "Informationen über Ihre Immich Instanz", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Immich Album", + "allPhotos": "", "option": { "albumId": { "label": "Album ID", @@ -2801,7 +3037,6 @@ } }, "description": "Diashow der Bilder in Ihrem Immich Album", - "noAlbumSelected": "Kein Album ausgewählt, Widget bearbeiten und Album auswählen", "noPhotos": "Keine Fotos in diesem Album" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Links in neuem Tab öffnen" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS Feeds", "description": "Einen oder mehrere generische RSS, ATOM oder JSON-Feeds überwachen und anzeigen", @@ -3336,7 +3606,11 @@ "name": "Benachrichtigungen", "description": "Benachrichtigungshistorie von einer Integration anzeigen", "noItems": "Keine Benachrichtigungen zum Anzeigen.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3417,6 +3691,40 @@ "internalServerError": "Fehler beim Abrufen der Laufzeit Daten" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "Audiostatistiken", "description": "Bibliotheks- und Wiedergabestatistiken von Navidrome oder Audiobookshelf", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Container", "table": { "updated": "Aktualisiert {when}", + "refresh": { + "lastUpdated": "" + }, "search": "{count} Container durchsuchen", "selected": "{selectCount} von {totalCount} ausgewählten Containern", "footer": "Insgesamt {count} Container", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "Alle Einstellungen öffnen" } diff --git a/packages/translation/src/lang/el.json b/packages/translation/src/lang/el.json index 3e64041dd..e77a47e8e 100644 --- a/packages/translation/src/lang/el.json +++ b/packages/translation/src/lang/el.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Προεπιλεγμένη μηχανή αναζήτησης" }, @@ -1285,6 +1289,14 @@ "label": "Κλειδί API (Μυστικό)", "newLabel": "Νέο Κλειδί API (Μυστικό)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Εκκαθάριση μορφοποίησης", "heading": "Επικεφαλίδα {level}", "align": "Στοίχιση κειμένου: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Μπλοκ κειμένου παράθεσης", "horizontalLine": "Οριζόντια γραμμή", "bulletList": "Λίστα με κουκκίδες", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "Καθαρός", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Άνοιγμα συνδέσμων σε νέα καρτέλα" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/en-gb.json b/packages/translation/src/lang/en-gb.json index 04360618a..24f0c4201 100644 --- a/packages/translation/src/lang/en-gb.json +++ b/packages/translation/src/lang/en-gb.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Use icons for pings" }, + "enableRightClickOnWidgets": { + "label": "Enable right-click on widgets", + "description": "Show Homarr's context menu when right-clicking a widget. Disable to use the browser's default menu (e.g. \"Open link in new tab\")." + }, "defaultSearchEngine": { "label": "Default search engine" }, @@ -709,76 +713,76 @@ "addMapping": "Add Mapping", "addColumn": "Add Column", "edit": "Edit", - "removeMapping": "", - "removeColumn": "", - "addItem": "", - "removeItem": "", - "addBar": "", - "duplicate": "", - "copyAiPrompt": "", - "enable": "", - "disable": "", - "menu": "" + "removeMapping": "Remove mapping", + "removeColumn": "Remove column", + "addItem": "Add Item", + "removeItem": "Remove item", + "addBar": "Add Bar", + "duplicate": "Duplicate", + "copyAiPrompt": "Copy AI prompt", + "enable": "Enable", + "disable": "Disable", + "menu": "Actions" }, "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": "Name", + "description": "Description", + "iconUrl": "Icon URL", + "url": "URL", + "authType": "Auth Type", + "headerName": "Header/Query Parameter Name", + "method": "Method", + "requestBody": "Request Body", + "displayType": "Display Type", + "jsonPath": "JSON Path", + "jsonPathHint": "Use JSONPath syntax to extract values, e.g. $.data.temperature or $.items[0].name", + "label": "Label", + "unit": "Unit", + "mappings": "Mappings", + "tablePath": "Array JSON Path", + "tablePathHint": "Path to the array in the response, e.g. $.data.items", + "columns": "Columns", + "header": "Header", + "items": "Items", + "gridColumns": "Grid Columns", + "cardStyle": "Card Style", + "bars": "Bars", + "valuePath": "Value JSON Path", + "maxPath": "Max Value JSON Path", + "showPercentage": "Show Percentage", + "barSize": "Bar Size", + "goodValues": "Good Values (comma-separated)", + "dotSize": "Dot Size", + "valueSize": "Value Size", + "labelPosition": "Label Position", + "kvLayout": "Layout", + "striped": "Striped Rows", + "compact": "Compact Mode", + "maxHeight": "Max Height (px)", + "color": "Colour", + "buttonLabel": "Button Label", + "buttonColor": "Button Colour", + "confirmText": "Confirmation Text", + "confirmTextHint": "If set, a confirmation dialogue will appear before executing the request", + "successMessage": "Success Message", + "successMessageHint": "Message shown after successful execution", + "enabled": "Enabled", "template": { - "label": "", - "description": "" + "label": "JSX Template", + "description": "Mantine JSX template. Access API response fields via data bindings (e.g. data.name). Use whitelisted components only. Forbidden: constructor, __proto__, eval, Function, window, document." } }, "placeholder": { - "exampleLabel": "", - "exampleLabelShort": "", - "exampleHeader": "", - "exampleUnit": "", - "iconUrl": "", - "url": "", - "headerName": "", - "jsonPath": "", - "tablePath": "", - "columnJsonPath": "", + "exampleLabel": "CPU Temperature", + "exampleLabelShort": "CPU Temp", + "exampleHeader": "Name", + "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": "", "maxPath": "", "goodValues": "", @@ -1285,6 +1289,14 @@ "label": "API Key (Secret)", "newLabel": "New API Key (Secret)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "App Id", "newLabel": "New App Id" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1598,7 +1622,7 @@ }, "menu": { "label": { - "settings": "", + "settings": "Settings", "refresh": "", "options": "", "actions": "" @@ -1881,6 +1905,16 @@ "customDateFormat": { "label": "Custom date format", "description": "Use ISO 8601 to format date (this will override other options)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1942,6 +1976,8 @@ "clear": "Clear formatting", "heading": "Heading {level}", "align": "Align text: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Blockquote", "horizontalLine": "Horizontal line", "bulletList": "Bullet list", @@ -2231,7 +2267,8 @@ "sunrise": "Sunrise", "sunset": "Sunset", "maxWindSpeed": "Max wind speed: {maxWindSpeed} {unit}", - "maxWindGusts": "Max wind gusts: {maxWindGusts} {unit}" + "maxWindGusts": "Max wind gusts: {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "Clear", @@ -2695,6 +2732,11 @@ "user": "User", "name": "Name", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Stats for nerds", "video": { @@ -2760,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Immich Server Stats", "description": "Information about your Immich instance", @@ -2788,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Immich Album", + "allPhotos": "", "option": { "albumId": { "label": "Album ID", @@ -2807,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2992,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3099,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3342,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3423,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3798,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4930,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5584,10 +5894,10 @@ }, "searchEngine": { "none": "", - "unavailable": "" + "unavailable": "Currently selected (unavailable)" }, "colorScheme": { - "label": "", + "label": "Colour scheme", "children": { "detail": { "title": "Select your colour scheme" @@ -5658,8 +5968,16 @@ } } }, + "enableRightClickOnWidgets": { + "label": "Enable right-click on widgets", + "children": { + "detail": { + "title": "Enable right-click on widgets" + } + } + }, "fullPreferencesPage": { - "label": "" + "label": "Open full preferences page" } } } diff --git a/packages/translation/src/lang/es.json b/packages/translation/src/lang/es.json index a64ae6915..6745b6398 100644 --- a/packages/translation/src/lang/es.json +++ b/packages/translation/src/lang/es.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Usar iconos para pings" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Motor de búsqueda predeterminado" }, @@ -1285,6 +1289,14 @@ "label": "Clave API (Credencial)", "newLabel": "Nueva clave API (Credencial)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "ID de aplicación", "newLabel": "Nuevo ID de aplicación" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Formato de fecha personalizado", "description": "Usar ISO 8601 para dar formato a la hora (esto anulará otras opciones)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Borrar formato", "heading": "Encabezado {level}", "align": "Alinear texto: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Cita", "horizontalLine": "Línea horizontal", "bulletList": "Lista sin ordenar", @@ -2225,7 +2267,8 @@ "sunrise": "Amanecer", "sunset": "Atardecer", "maxWindSpeed": "Velocidad máxima del viento: {maxWindSpeed} {unit}", - "maxWindGusts": "Máximas ráfagas de viento: {maxWindGusts} {unit}" + "maxWindGusts": "Máximas ráfagas de viento: {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "Despejado", @@ -2689,6 +2732,11 @@ "user": "Usuario", "name": "Nombre", "id": "ID", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Estadísticas", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Estadísticas del servidor Immich", "description": "Información del servidor Immich", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Álbum de Immich", + "allPhotos": "", "option": { "albumId": { "label": "ID de álbum", @@ -2801,7 +3037,6 @@ } }, "description": "Presentación de fotos de un álbum de Immich", - "noAlbumSelected": "No se ha seleccionado ningún álbum. Edita el widget y selecciona uno.", "noPhotos": "No hay fotos en este álbum" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Abrir enlaces en una pestaña nueva" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "Fuentes RSS", "description": "Monitorear y mostrar una o más RSS genéricas, ATOM o JSON", @@ -3336,7 +3606,11 @@ "name": "Notificaciones", "description": "Mostrar el historial de notificaciones desde una integración", "noItems": "Ninguna notificación para mostrar.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Contenedores", "table": { "updated": "Actualizado {when}", + "refresh": { + "lastUpdated": "" + }, "search": "Buscar {count} contenedores", "selected": "{selectCount} de {totalCount} contenedores seleccionados", "footer": "{count} contenedores en total", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/et.json b/packages/translation/src/lang/et.json index 23da3299c..a1ffabe84 100644 --- a/packages/translation/src/lang/et.json +++ b/packages/translation/src/lang/et.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "", "heading": "", "align": "", + "directionLtr": "", + "directionRtl": "", "blockquote": "", "horizontalLine": "", "bulletList": "", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/fi.json b/packages/translation/src/lang/fi.json index 7388d9322..952ad3fbb 100644 --- a/packages/translation/src/lang/fi.json +++ b/packages/translation/src/lang/fi.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Käytä ping-kuvakkeita" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Oletushakukone" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "Sovellustunniste", "newLabel": "Uusi sovellustunniste" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Oma päiväyksen esitystapa", "description": "Määritä ISO 8601 -standardin mukainen päiväyksen muoto (korvaa muut valinnat)." + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "", "heading": "", "align": "", + "directionLtr": "", + "directionRtl": "", "blockquote": "", "horizontalLine": "", "bulletList": "", @@ -2225,7 +2267,8 @@ "sunrise": "Auringonnousu", "sunset": "Auringonlasku", "maxWindSpeed": "Tuulen nopeus: {maxWindSpeed} {unit}", - "maxWindGusts": "Puuskien nopeus: {maxWindSpeed} {unit}" + "maxWindGusts": "Puuskien nopeus: {maxWindSpeed} {unit}", + "humidity": "" }, "kind": { "clear": "", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Avaa linkit uudessa välilehdessä" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "Näytä integraation ilmoitushistoria", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Kontit", "table": { "updated": "Päivitetty {when}", + "refresh": { + "lastUpdated": "" + }, "search": "Suodata {count} konttia...", "selected": "{selectCount}/{totalCount} kontista valittu", "footer": "Yhteensä {count} konttia", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "Avaa täysi asetussivu" } diff --git a/packages/translation/src/lang/fr.json b/packages/translation/src/lang/fr.json index 881db7cee..389b75293 100644 --- a/packages/translation/src/lang/fr.json +++ b/packages/translation/src/lang/fr.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Utiliser les icônes pour les pings" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Moteur de recherche par défaut" }, @@ -1285,6 +1289,14 @@ "label": "Clé API (secrète)", "newLabel": "Nouvelle clé API (secrète)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "Identifiant de l'application", "newLabel": "Nouvel Id de l'Application" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "Actualiser", "options": "Options", "actions": "Actions" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Format de date personnalisé", "description": "Utiliser ISO 8601 pour formater la date (cela remplacera les autres options)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Effacer la mise en forme", "heading": "Titre {level}", "align": "Aligner le texte : {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Citation", "horizontalLine": "Ligne horizontale", "bulletList": "Liste à puces", @@ -2225,7 +2267,8 @@ "sunrise": "Lever du Soleil", "sunset": "Coucher du soleil", "maxWindSpeed": "Vitesse maximale du vent : {maxWindSpeed} km/h", - "maxWindGusts": "Rafales de vent maximales : {maxWindGusts} km/h" + "maxWindGusts": "Rafales de vent maximales : {maxWindGusts} km/h", + "humidity": "" }, "kind": { "clear": "Clair", @@ -2689,6 +2732,11 @@ "user": "Utilisateur", "name": "Nom", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Statistiques détaillées", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Statistiques du serveur Immich", "description": "Informations sur votre instance Immich", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Album Immich", + "allPhotos": "", "option": { "albumId": { "label": "Identifiant de l'album", @@ -2801,7 +3037,6 @@ } }, "description": "Diaporama de photos dans votre album Immich", - "noAlbumSelected": "Aucun album sélectionné, modifier le widget et choisissez un album", "noPhotos": "Aucune photo dans cet album" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Ouvrir les liens dans un nouvel onglet" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "Flux RSS", "description": "Surveiller et afficher un ou plusieurs flux RSS, ATOM ou JSON génériques", @@ -3336,7 +3606,11 @@ "name": "Notifications", "description": "Afficher l'historique des notifications à partir d'une intégration", "noItems": "Aucune notification à afficher.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "Suivi de test de vitesse", @@ -3417,6 +3691,40 @@ "internalServerError": "Impossible de récupérer les données de disponibilité" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "Statistiques audio", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Conteneurs", "table": { "updated": "Mis à jour {when}", + "refresh": { + "lastUpdated": "" + }, "search": "Rechercher dans {count} conteneurs", "selected": "{selectCount} sur {totalCount} conteneurs sélectionnés", "footer": "Total des conteneurs {count}", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/he.json b/packages/translation/src/lang/he.json index f2e575553..50a0a93fd 100644 --- a/packages/translation/src/lang/he.json +++ b/packages/translation/src/lang/he.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "השתמש בסמלים עבור פינגים" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "מנוע חיפוש ברירת מחדל" }, @@ -1285,6 +1289,14 @@ "label": "מפתח API (סודי)", "newLabel": "מפתח API חדש (סודי)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "מזהה אפליקציה", "newLabel": "מזהה אפליקציה חדש" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "פורמט זמן מותאם אישית", "description": "השתמש ב-ISO 8601 כדי לעצב תצוגת זמן (זה ידרוס אפשרויות אחרות)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "נקה עיצוב", "heading": "כותרת {level}", "align": "יישור טקסט: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "ציטוט", "horizontalLine": "קו אופקי", "bulletList": "רשימת תבליט", @@ -2225,7 +2267,8 @@ "sunrise": "זריחה", "sunset": "שקיעה", "maxWindSpeed": "מהירות רוח מקסימלית: {maxWindSpeed} קמ״ש", - "maxWindGusts": "משבי רוח מקסימלים: {maxWindGusts} קמ״ש" + "maxWindGusts": "משבי רוח מקסימלים: {maxWindGusts} קמ״ש", + "humidity": "" }, "kind": { "clear": "בהיר", @@ -2689,6 +2732,11 @@ "user": "משתמש", "name": "שם", "id": "מזהה", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "סטטיסטיקות לחנונים", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "פתח לינק בלשונית חדשה" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "הזנות RSS", "description": "מעקב והצג עדכוני RSS, ATOM או JSON גנרי אחד או יותר", @@ -3336,7 +3606,11 @@ "name": "התראות", "description": "הצגת היסטוריית התראות מאינטגרציה", "noItems": "אין התראות להצגה.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "מיכלים", "table": { "updated": "עודכן ב- {when}", + "refresh": { + "lastUpdated": "" + }, "search": "חפש {count} קונטיינרים", "selected": "{selectCount} מ- {totalCount} קונטיינרים נבחרו", "footer": "סה״כ {count} קונטיינרים", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/hr.json b/packages/translation/src/lang/hr.json index 55ebb428b..9dabc244e 100644 --- a/packages/translation/src/lang/hr.json +++ b/packages/translation/src/lang/hr.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "", "heading": "", "align": "", + "directionLtr": "", + "directionRtl": "", "blockquote": "", "horizontalLine": "", "bulletList": "", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "Vedro", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Otvori veze u novoj kartici" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/hu.json b/packages/translation/src/lang/hu.json index f9dbaf927..1989b8fdf 100644 --- a/packages/translation/src/lang/hu.json +++ b/packages/translation/src/lang/hu.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Ikonok használata a pingekhez" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Alapértelmezett kereső" }, @@ -1285,6 +1289,14 @@ "label": "Api Kulcs (Titkos)", "newLabel": "Új API Kulcs (Titkos)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "App Azonosító", "newLabel": "Új App Azonosító" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Egyedi dátumformátum", "description": "A dátum formázásához használja az ISO 8601 szabványt (ez felülírja az egyéb beállításokat)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Formázás törlése", "heading": "Címsor {level}", "align": "Szöveg igazítása: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Idézet", "horizontalLine": "Vízszintes vonal", "bulletList": "Lista", @@ -2225,7 +2267,8 @@ "sunrise": "Napkelte", "sunset": "Naplemente", "maxWindSpeed": "Legnagyobb szélsebesség: {maxWindSpeed} {unit}", - "maxWindGusts": "Legerősebb széllökés: {maxWindGusts} {unit}" + "maxWindGusts": "Legerősebb széllökés: {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "Tiszta", @@ -2689,6 +2732,11 @@ "user": "Felhasználó", "name": "Név", "id": "Azonosító", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Statisztikák a rajongóknak", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Immich szerver statisztikák", "description": "Információk az Immich-példányodról", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Immich Album", + "allPhotos": "", "option": { "albumId": { "label": "Album ID", @@ -2801,7 +3037,6 @@ } }, "description": "Képek diavetítése az Immich-albumodból", - "noAlbumSelected": "Nincs kiválasztott album; szerkeszd a widgetet, és válassz ki egy albumot", "noPhotos": "Ebben az albumban nincs fénykép" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Linkek megnyitása új fülön" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS feedek", "description": "Egy vagy több általános RSS-, ATOM- vagy JSON-hírcsatorna figyelése és megjelenítése", @@ -3336,7 +3606,11 @@ "name": "Értesítések", "description": "Egy integráció értesítési előzményeinek megjelenítése", "noItems": "Nincs megjelenítendő üzenet.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "Hálózatsebesség Monitorozó", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Tartály", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/it.json b/packages/translation/src/lang/it.json index 63629d558..8072fb48c 100644 --- a/packages/translation/src/lang/it.json +++ b/packages/translation/src/lang/it.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Usa le icone per i ping" }, + "enableRightClickOnWidgets": { + "label": "Abilita clic destro sui widget", + "description": "Mostra il menu contestuale di Homarr quando si fa clic destro su un widget. Disabilita per usare il menu predefinito del browser (es. \"Apri collegamento in una nuova scheda\")." + }, "defaultSearchEngine": { "label": "Motore di ricerca predefinito" }, @@ -1285,6 +1289,14 @@ "label": "Chiave API (Secret)", "newLabel": "Nuova Chiave API (Secret)" }, + "patchmonApiKey": { + "label": "Chiave API", + "newLabel": "Nuova chiave API" + }, + "patchmonApiSecret": { + "label": "Secret API", + "newLabel": "Nuova API Secret" + }, "githubAppId": { "label": "Id App", "newLabel": "Nuovo Id App" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "Traefik", + "description": "Cloud-native reverse proxy e bilanciatore del carico" + }, "paperlessNgx": { "name": "Paperless-ngx", "description": "Sistema di gestione documentale per archiviare e organizzare documenti scansionati" + }, + "patchmon": { + "name": "PatchMon", + "description": "Gestione delle patch e monitoraggio per gli host Linux" + }, + "bazarr": { + "name": "Bazarr", + "description": "Applicazione complementare a Sonarr e Radarr che gestisce e scarica i sottotitoli" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "Aggiorna", "options": "Opzioni", "actions": "Azioni" + }, + "status": { + "success": "OK", + "error": "Errore", + "loading": "Caricamento", + "idle": "Inattivo" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Formato data personalizzato", "description": "Usa ISO 8601 per formattare la data (questo sovrascriverà altre opzioni)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Rimuovi formattazione", "heading": "Intestazione {level}", "align": "Allinea testo: {position}", + "directionLtr": "Imposta la direzione del testo da sinistra a sinistra", + "directionRtl": "Imposta la direzione del testo da destra a destra", "blockquote": "Citazione", "horizontalLine": "Linea orizzontale", "bulletList": "Elenco puntato", @@ -2225,7 +2267,8 @@ "sunrise": "Alba", "sunset": "Tramonto", "maxWindSpeed": "Max velocità vento: {maxWindSpeed} km/h", - "maxWindGusts": "Max raffiche di vento: {maxWindGusts} km/h" + "maxWindGusts": "Max raffiche di vento: {maxWindGusts} km/h", + "humidity": "Umidità: {humidity}%" }, "kind": { "clear": "Sereno", @@ -2689,6 +2732,11 @@ "user": "Utente", "name": "Nome", "id": "Id", + "status": "Stato", + "directPlay": "Riproduzione diretta", + "transcoding": "Transcodifica", + "paused": "In pausa", + "remaining": "{minutes} min rimanenti", "metadata": { "title": "Statistiche per nerd", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "Impossibile recuperare i dati di Paperless-ngx" } }, + "patchmon": { + "name": "PatchMon", + "description": "Panoramica dello stato delle patch host da PatchMon", + "title": "Statistiche PatchMon", + "totalHosts": "Host Totali", + "hostsNeedingUpdates": "Necessita di aggiornamenti", + "securityUpdates": "Aggiornamenti di sicurezza", + "upToDateHosts": "Host aggiornati", + "hostsWithSecurityUpdates": "Host con aggiornamenti di sicurezza", + "recentUpdates24h": "Aggiornamenti (24h)", + "totalOutdatedPackages": "Pacchetti obsoleti", + "totalRepos": "Repository", + "osDistribution": "Distribuzione OS", + "compliance": "Conformità Patch", + "complianceRatio": "{upToDate} / {total}", + "lastUpdated": "Aggiornato {time}", + "option": { + "showTotalHosts": { + "label": "Mostra host totali", + "description": "Visualizzare il numero totale di host monitorati" + }, + "showHostsNeedingUpdates": { + "label": "Mostra host che necessitano di aggiornamenti", + "description": "Visualizza gli host con almeno un pacchetto obsoleto" + }, + "showSecurityUpdates": { + "label": "Mostra aggiornamenti di sicurezza", + "description": "Mostra il numero totale di aggiornamenti di sicurezza disponibili" + }, + "showUpToDateHosts": { + "label": "Mostra host aggiornati", + "description": "Visualizza host con zero pacchetti obsoleti" + }, + "showHostsWithSecurityUpdates": { + "label": "Mostra host con aggiornamenti di sicurezza", + "description": "Visualizza host che richiedono patch di sicurezza" + }, + "showRecentUpdates24h": { + "label": "Mostra aggiornamenti recenti (24h)", + "description": "Mostra il numero di aggiornamenti applicati nelle ultime 24 ore" + }, + "showTotalOutdatedPackages": { + "label": "Mostra pacchetti obsoleti", + "description": "Mostra il numero totale di pacchetti obsoleti su tutti gli host" + }, + "showTotalRepos": { + "label": "Mostra repository", + "description": "Mostra il numero di repository attivi che vengono controllati" + }, + "enableThresholdColors": { + "label": "Abilita colori di soglia", + "description": "Valori della statistica di colore verde, giallo, o rosso in base alle preimpostazioni di gravità" + }, + "useCustomThresholds": { + "label": "Soglie avanzate", + "description": "Personalizza gli avvisi e le soglie critiche per stat utilizzando conteggi assoluti o percentuali del totale degli host" + }, + "thresholdMode": { + "option": { + "absolute": "Conteggio assoluto", + "percent": "Percentuale degli host totali" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "Modalità soglia aggiornamenti richiesti", + "description": "Confronta il numero di aggiornamenti richiesti come valore assoluto o percentuale su host totali" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "Soglia di avviso aggiornamenti richiesti", + "description": "Inserisci il giallo quando il valore raggiunge questa soglia" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "Soglia critica aggiornamenti richiesti", + "description": "Inserisci il rosso quando il valore raggiunge questa soglia" + }, + "securityUpdatesThresholdMode": { + "label": "Modalità soglia aggiornamenti di sicurezza", + "description": "Confronta il valore degli aggiornamenti di sicurezza come valore assoluto o percentuale del totale degli host" + }, + "securityUpdatesWarningAt": { + "label": "Soglia di avviso aggiornamenti di sicurezza", + "description": "Inserisci il giallo quando il valore raggiunge questa soglia" + }, + "securityUpdatesCriticalAt": { + "label": "Soglia critica aggiornamenti di sicurezza", + "description": "Inserisci il rosso quando il valore raggiunge questa soglia" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "Modalità soglia host con aggiornamenti di sicurezza", + "description": "Confronta il numero di host come valore assoluto o percentuale su host totali" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "Soglia di avviso host con aggiornamenti di sicurezza", + "description": "Inserisci il giallo quando il valore raggiunge questa soglia" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "Soglia critica host con aggiornamenti di sicurezza", + "description": "Inserisci il rosso quando il valore raggiunge questa soglia" + }, + "upToDateHostsThresholdMode": { + "label": "Modalità soglia host aggiornati", + "description": "Confronta il numero di host aggiornati come valore assoluto o percentuale su host totali" + }, + "upToDateHostsWarningAt": { + "label": "Soglia di avviso host aggiornati", + "description": "Inserisci il giallo quando il valore è pari o superiore a questa soglia ma al di sotto della copertura completa" + }, + "upToDateHostsCriticalAt": { + "label": "Soglia critica host aggiornati", + "description": "Inserisci rosso quando il valore scende al di sotto di questa soglia" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "Modalità soglia pacchetti obsoleti", + "description": "Confronta il numero di pacchetti obsoleti come valore assoluto o percentuale sui host totali" + }, + "totalOutdatedPackagesWarningAt": { + "label": "Soglia di avviso pacchetti obsoleti", + "description": "Inserisci il giallo quando il valore raggiunge questa soglia" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "Soglia critica pacchetti obsoleti", + "description": "Inserisci il rosso quando il valore raggiunge questa soglia" + }, + "showOsDistribution": { + "label": "Mostra distribuzione OS", + "description": "Mostra un dettaglio degli host monitorati per sistema operativo" + }, + "osDistributionLimit": { + "label": "Limite distribuzione OS", + "description": "Numero massimo di sistemi operativi da visualizzare", + "option": { + "3": "Top 3", + "5": "Top 5", + "10": "Top 10", + "all": "Tutto" + } + }, + "showOsVersion": { + "label": "Mostra versione OS", + "description": "Aggiungi la versione del sistema operativo a ogni etichetta di distribuzione quando disponibile" + }, + "showComplianceHero": { + "label": "Mostra sezione principale conformità", + "description": "Mostra un anello di conformità con la percentuale di host aggiornati" + }, + "osDisplayMode": { + "label": "Modalità di visualizzazione OS", + "description": "Scegli come visualizzare la distribuzione del sistema operativo", + "option": { + "bars": "Barre orizzontali", + "donut": "Grafico a ciambella" + } + } + }, + "error": { + "internalServerError": "Impossibile recuperare i dati di PatchMon" + } + }, + "bazarr": { + "name": "Bazarr", + "description": "Panoramica dei sottotitoli mancanti e dello stato di salute della tua istanza Bazarr", + "episodes": "Episodi Mancanti", + "movies": "Film Mancanti", + "providers": "Problemi del Provider", + "status": "Problemi di stato", + "option": { + "showMissingEpisodes": { + "label": "Mostra episodi mancanti", + "description": "Mostra il numero di episodi con sottotitoli mancanti" + }, + "showMissingMovies": { + "label": "Mostra film mancanti", + "description": "Mostra il numero di film con sottotitoli mancanti" + }, + "showProviderIssues": { + "label": "Mostra problemi del provider", + "description": "Mostra i provider di sottotitoli con problemi" + }, + "showHealthIssues": { + "label": "Mostra problemi di stato", + "description": "Mostra il numero di problemi di stato di Bazarr" + } + }, + "error": { + "internalServerError": "Impossibile recuperare i dati Bazarr" + } + }, "immich-serverStats": { "name": "Statistiche Server Immich", "description": "Informazioni sulla tua istanza Immich", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Album Immich", + "allPhotos": "Tutte le foto", "option": { "albumId": { "label": "ID Album", @@ -2801,7 +3037,6 @@ } }, "description": "Presentazione delle immagini nel tuo album Immich", - "noAlbumSelected": "Nessun album selezionato, modifica il widget e scegli un album", "noPhotos": "Nessuna foto in questo album" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Apri i link in nuova scheda" + }, + "statusFilter": { + "label": "Stati da mostrare" + }, + "recentDays": { + "label": "Mostra solo le richieste recenti" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "Contenuti multimediali mancanti & in coda", + "description": "Mostra i film e gli episodi mancanti e in coda da Radarr e Sonarr", + "option": { + "showMissing": { + "label": "Mostra elementi mancanti" + }, + "showQueued": { + "label": "Mostra elementi in coda" + }, + "pageSize": { + "label": "Elementi per pagina" + } + }, + "tab": { + "missing": "Mancanti", + "queued": "In coda" + }, + "type": { + "movie": "Film", + "episode": "Episodio" + }, + "empty": { + "missing": "Nessun elemento mancante", + "queued": "Nessun elemento in coda", + "noTabsEnabled": "Abilita almeno una scheda nelle impostazioni del widget" + }, + "timeLeft": "Tempo residuo" + }, "rssFeed": { "name": "Feed RSS", "description": "Monitora e visualizza uno o più feed generici RSS, ATOM o JSON", @@ -3336,7 +3606,11 @@ "name": "Notifiche", "description": "Visualizza la cronologia delle notifiche da un'integrazione", "noItems": "Nessuna notifica da visualizzare.", - "option": {} + "option": { + "hideLogos": { + "label": "Nascondi loghi" + } + } }, "speedtestTracker": { "name": "SpeedTest Tracker", @@ -3417,6 +3691,40 @@ "internalServerError": "Impossibile recuperare i dati di uptime" } }, + "traefik": { + "name": "Traefik", + "description": "Panoramica dei router, dei servizi, dei middleware e dei punti di ingresso di Traefik", + "option": { + "showTcp": { + "label": "Mostrare TCP" + }, + "showUdp": { + "label": "Mostra UDP" + }, + "showEntryPoints": { + "label": "Mostra punti di accesso" + } + }, + "instances": "Istanze di Traefik", + "versionUnknown": "Versione sconosciuta", + "summary": { + "routers": "Routers", + "entryPoints": "Punti di accesso" + }, + "resource": { + "routers": "Routers", + "services": "Servizi", + "middlewares": "Middleware" + }, + "status": { + "healthy": "Normale funzionamento", + "errors": "{count} errori", + "warnings": "{count} avvisi" + }, + "error": { + "internalServerError": "Recupero dei dati Traefik non riuscito" + } + }, "audioStats": { "name": "Statistiche audio", "description": "Statistiche della libreria e di riproduzione da Navidrome o Audiobookshelf", @@ -3792,6 +4100,11 @@ "read": "Lettura", "write": "Scrittura" }, + "storage": { + "title": "Spazio di archiviazione", + "subtitle": "Utilizzo del disco per filesystem", + "series": "Usato" + }, "network": { "title": "Larghezza di Banda", "subtitle": "Traffico di rete delle interfacce pubbliche", @@ -4924,6 +5237,9 @@ "title": "Containers", "table": { "updated": "Aggiornato {when}", + "refresh": { + "lastUpdated": "Ultimo aggiornamento {when}" + }, "search": "Cerca {count} container", "selected": "{selectCount} di {totalCount} containers selezionati", "footer": "Totale container {count}", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "Abilita clic destro sui widget", + "children": { + "detail": { + "title": "Abilita clic destro sui widget" + } + } + }, "fullPreferencesPage": { "label": "Apri la pagina completa delle preferenze" } diff --git a/packages/translation/src/lang/ja.json b/packages/translation/src/lang/ja.json index e6018ccbd..8bda37bcc 100644 --- a/packages/translation/src/lang/ja.json +++ b/packages/translation/src/lang/ja.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Pingにアイコンを使う" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "既定の検索エンジン" }, @@ -1285,6 +1289,14 @@ "label": "API キー (シークレット)", "newLabel": "新しい API キー (シークレット)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "App Id", "newLabel": "新規App Id" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "日付の書式をカスタマイズ", "description": "日付の書式に ISO-8601を使用します(これは他のオプションを上書きします)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "書式をクリア", "heading": "見出し {level}", "align": "テキストの整列: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "引用", "horizontalLine": "水平線", "bulletList": "箇条書きリスト", @@ -2225,7 +2267,8 @@ "sunrise": "日出", "sunset": "日没", "maxWindSpeed": "最大風速: {maxWindSpeed} {unit}", - "maxWindGusts": "最大瞬間風速: {maxWindGusts} {unit}" + "maxWindGusts": "最大瞬間風速: {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "晴れ", @@ -2689,6 +2732,11 @@ "user": "ユーザー", "name": "名称", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "詳細統計情報", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Immich サーバーの統計", "description": "Immich インスタンスに関する情報", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Immich アルバム", + "allPhotos": "", "option": { "albumId": { "label": "アルバム ID", @@ -2801,7 +3037,6 @@ } }, "description": "Immichアルバムの写真のスライド", - "noAlbumSelected": "アルバムが選択されていない、ウィジェットを編集してアルバムを選択してください", "noPhotos": "このアルバムには写真がありません" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "リンクを新しいタブで開く" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS フィード", "description": "1つまたは複数の一般的な RSS、ATOM、または JSON フィードを監視して表示します", @@ -3336,7 +3606,11 @@ "name": "通知", "description": "連携機能からの通知履歴を表示する", "noItems": "表示する通知はありません。", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "スピードテストトラッカー", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "コンテナ", "table": { "updated": "{when} に更新しました", + "refresh": { + "lastUpdated": "" + }, "search": "{count} 個のコンテナを検索", "selected": "{totalCount} 個のうち、{selectCount} 個のコンテナが選択されています", "footer": "合計 {count} 個のコンテナ", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/ko.json b/packages/translation/src/lang/ko.json index e665078ee..200cef781 100644 --- a/packages/translation/src/lang/ko.json +++ b/packages/translation/src/lang/ko.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "핑에 아이콘 사용" }, + "enableRightClickOnWidgets": { + "label": "위젯 우클릭 활성화", + "description": "위젯을 마우스 오른쪽 버튼으로 클릭할 때 Homarr 컨텍스트 메뉴를 표시합니다. 브라우저의 기본 메뉴를 사용하려면 비활성화합니다 (예: \"새 탭에서 링크 열기\")." + }, "defaultSearchEngine": { "label": "기본 검색 엔진" }, @@ -893,34 +897,34 @@ "page": { "list": { "title": "통합", - "search": "", + "search": "통합 검색", "noResults": { - "title": "" + "title": "아직 통합이 없습니다" } }, "create": { "title": "새 {name} 통합", "notification": { "success": { - "title": "", - "message": "" + "title": "생성 완료", + "message": "통합 생성 완료" }, "error": { - "title": "", - "message": "" + "title": "생성 실패", + "message": "통합 생성에 실패했습니다" } }, "app": { "option": { "existing": { - "title": "", - "label": "" + "title": "기존", + "label": "기존 앱 선택" }, "new": { "title": "신규", "url": { "label": "앱 URL", - "description": "" + "description": "대시보드에서 액세스할 때 앱이 열리는 URL" } } } @@ -930,33 +934,33 @@ "title": "{name} 통합 편집", "notification": { "success": { - "title": "", - "message": "" + "title": "변경 사항 적용 완료", + "message": "통합 저장 완료" }, "error": { - "title": "", - "message": "" + "title": "변경 사항을 적용할 수 없습니다", + "message": "통합을 저장할 수 없었습니다" } }, "app": { "action": { "add": "앱 연결", "remove": "연결 해제", - "select": "" + "select": "연결할 앱 선택" } } }, "delete": { - "title": "", - "message": "", + "title": "통합 삭제", + "message": "{name} 통합을 삭제하시겠습니까?", "notification": { "success": { "title": "삭제 성공", - "message": "" + "message": "통합 삭제 완료" }, "error": { "title": "삭제 실패", - "message": "" + "message": "통합을 삭제할 수 없습니다" } } } @@ -966,33 +970,33 @@ "label": "이름" }, "url": { - "label": "" + "label": "URL" }, "attemptSearchEngineCreation": { - "label": "", - "description": "" + "label": "검색 엔진 생성", + "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": "DNS", @@ -1001,9 +1005,9 @@ "mediaSearch": "검색", "mediaRelease": "릴리즈", "mediaRequest": "요청", - "downloadClient": "", - "usenet": "", - "torrent": "", + "downloadClient": "다운로드", + "usenet": "유즈넷", + "torrent": "토렌트", "miscellaneous": "기타", "smartHomeServer": "스마트 홈", "indexerManager": "인덱서", @@ -1131,7 +1135,7 @@ "description": "", "content": { "action": "항목 보기", - "title": "" + "title": "PEM 인증서" } } }, @@ -1139,109 +1143,109 @@ "title": "요청 오류", "description": { "connection": { - "hostUnreachable": "", - "networkUnreachable": "", - "refused": "", - "reset": "" + "hostUnreachable": "서버에 도달할 수 없습니다. 보통 호스트가 오프라인이거나 현재 네트워크에서 도달할 수 없다는 것을 의미합니다.", + "networkUnreachable": "네트워크에 접속할 수 없습니다. 인터넷 연결 또는 네트워크 설정을 확인하여 주십시오.", + "refused": "서버가 연결을 거부했습니다. 지정된 포트에서 실행되고 있지 않거나 요청을 거부하고 있을 수 있습니다.", + "reset": "서버에서 연결을 예기치 못하게 종료했습니다. 서버가 불안정하거나 재시작된 경우 발생할 수 있습니다." }, "dns": { - "notFound": "", - "timeout": "", - "noAnswer": "" + "notFound": "서버 주소를 찾을 수 없습니다. URL에 오타 또는 잘못된 도메인 이름을 지정했는지 확인해 주십시오.", + "timeout": "DNS 조회 시간이 초과되었습니다. 일시적인 문제일 수 있으므로 잠시 후 다시 시도해 주십시오.", + "noAnswer": "DNS 서버가 유효한 응답을 반환하지 않았습니다. 도메인이 존재할 수도 있지만 유효한 레코드가 없습니다." }, "timeout": { - "aborted": "", - "timeout": "" + "aborted": "요청이 완료 전에 중단되었습니다. 사용자 작업 또는 시스템 시간 초과 때문일 수 있습니다.", + "timeout": "요청 완료에 너무 오래 걸려 시간이 초과되었습니다. 네트워크를 확인하거나 나중에 다시 시도하십시오." } } } }, - "alertNotice": "", + "alertNotice": "연결이 정상적으로 이루어지면 저장 버튼이 활성화됩니다", "notification": { "success": { - "title": "", - "message": "" + "title": "연결 성공", + "message": "연결 설정에 성공했습니다" }, "invalidUrl": { "title": "잘못된 URL", - "message": "" + "message": "URL이 유효하지 않습니다" }, "secretNotDefined": { - "title": "", - "message": "" + "title": "자격 증명 없음", + "message": "자격 증명이 모두 제공되지 않았습니다" }, "invalidCredentials": { - "title": "", - "message": "" + "title": "잘못된 자격 증명", + "message": "자격 증명이 올바르지 않습니다" }, "commonError": { "title": "연결 실패", - "message": "" + "message": "연결 설정에 실패했습니다" }, "badRequest": { - "title": "", - "message": "" + "title": "잘못된 요청", + "message": "요청 형식 잘못됨" }, "unauthorized": { - "title": "", - "message": "" + "title": "권한 없음", + "message": "자격 증명이 잘못되었을 수 있습니다" }, "forbidden": { - "title": "", - "message": "" + "title": "거부됨", + "message": "권한이 누락되었을 수 있습니다" }, "notFound": { - "title": "", - "message": "" + "title": "찾을 수 없음", + "message": "URL 또는 경로가 잘못되었을 수 있습니다" }, "internalServerError": { - "title": "", - "message": "" + "title": "내부 서버 오류", + "message": "서버에 오류가 발생했습니다" }, "serviceUnavailable": { - "title": "", - "message": "" + "title": "서비스 사용 불가", + "message": "현재 서버를 사용할 수 없습니다" }, "connectionAborted": { - "title": "", - "message": "" + "title": "연결 중단", + "message": "연결이 중단되었습니다" }, "domainNotFound": { - "title": "", - "message": "" + "title": "도메인 찾을 수 없음", + "message": "도메인을 찾을 수 없습니다" }, "connectionRefused": { - "title": "", - "message": "" + "title": "연결 거부됨", + "message": "연결이 거부되었습니다" }, "invalidJson": { - "title": "", - "message": "" + "title": "유효하지 않은 JSON", + "message": "응답이 유효한 JSON이 아닙니다" }, "wrongPath": { - "title": "", - "message": "" + "title": "잘못된 경로", + "message": "경로가 올바르지 않을 수 있습니다" }, "tooManyRequests": { - "title": "", - "message": "" + "title": "정해진 시간 내 너무 많은 요청", + "message": "요청이 너무 많습니다. 대상 시스템에 한도가 설정되어 있거나 거절되었을 수 있습니다" } } }, "secrets": { "title": "비밀 구문", - "lastUpdated": "", + "lastUpdated": "{date}에 마지막으로 업데이트됨", "notSet": { - "label": "", - "tooltip": "" + "label": "설정된 값 없음", + "tooltip": "이 필수 시크릿 값이 아직 설정되지 않았습니다" }, - "secureNotice": "", + "secureNotice": "이 시크릿 값은 생성 후 열람할 수 없습니다", "reset": { - "title": "", - "message": "" + "title": "시크릿 값 초기화", + "message": "이 시크릿 값을 초기화하시겠습니까?" }, "noSecretsRequired": { - "segmentTitle": "", + "segmentTitle": "시크릿 값 없음", "text": "" }, "kind": { @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "새 API 키(Secret)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "새 앱 ID" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1416,7 +1440,7 @@ "header": "이름 또는 주제를 입력해 아이콘을 필터링하세요... Homarr가 {countIcons}에서 아이콘을 검색합니다.", "headerLoading": "", "noResults": "", - "error": "" + "error": "아이콘을 불러올 수 없습니다." }, "colorScheme": { "options": { @@ -1454,11 +1478,11 @@ "placeholder": "하나 이상의 값 선택" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "값 추가", + "addLabel": "{value} 추가" }, "select": { - "placeholder": "", + "placeholder": "값 선택", "badge": { "recommended": "추천" } @@ -1468,7 +1492,7 @@ "switchToDarkMode": "다크 모드로 전환", "switchToLightMode": "라이트 모드로 전환", "management": "관리", - "docker": "", + "docker": "Docker", "preferences": "기본 설정", "logout": "로그아웃", "login": "로그인", @@ -1508,19 +1532,19 @@ "custom": { "passwordsDoNotMatch": "패스워드가 일치하지 않습니다", "passwordRequirements": "패스워드가 요구사항을 충족하지 않습니다", - "boardAlreadyExists": "", - "invalidFileType": "", - "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", - "groupNameTaken": "" + "boardAlreadyExists": "이 이름을 가진 보드가 이미 존재합니다", + "invalidFileType": "잘못된 파일 유형, {expected}(으)로 예상", + "invalidFileName": "잘못된 파일명", + "fileTooLarge": "파일이 너무 큽니다. 최대 크기는 {maxSize}입니다", + "invalidConfiguration": "잘못된 설정", + "groupNameTaken": "이미 사용 중인 그룹 이름" } } }, "unit": { "speed": { - "kilometersPerHour": "", - "milesPerHour": "" + "kilometersPerHour": "km/h", + "milesPerHour": "mph" } } }, @@ -1528,22 +1552,22 @@ "dynamic": { "action": { "create": "새 동적 섹션", - "remove": "" + "remove": "동적 섹션 제거" }, "option": { "title": { - "label": "" + "label": "제목" }, "customCssClasses": { - "label": "" + "label": "사용자 지정 css 클래스" }, "borderColor": { - "label": "" + "label": "테두리 색상" } }, "remove": { - "title": "", - "message": "" + "title": "동적 섹션 제거", + "message": "이 동적 섹션을 제거하시겠습니까? 항목은 상위 섹션의 동일한 위치로 이동합니다." } }, "category": { @@ -1554,31 +1578,31 @@ }, "action": { "create": "새 카테고리", - "edit": "", - "remove": "", + "edit": "카테고리 이름 변경", + "remove": "카테고리 제거", "moveUp": "위로 이동", "moveDown": "아래로 이동", - "createAbove": "", - "createBelow": "", + "createAbove": "위에 새 카테고리 생성", + "createBelow": "아래 새 카테고리 생성", "openAllInNewTabs": "탭에서 모두 열기" }, "create": { "title": "새 카테고리", - "submit": "" + "submit": "카테고리 추가" }, "remove": { - "title": "", - "message": "" + "title": "카테고리 제거", + "message": "{name} 카테고리를 제거하시겠습니까?" }, "edit": { - "title": "", - "submit": "" + "title": "카테고리 이름 변경", + "submit": "카테고리 이름 변경" }, "menu": { "label": { "create": "새 카테고리", "changePosition": "위치 변경", - "settings": "" + "settings": "설정" } }, "openAllInNewTabs": { @@ -1602,12 +1626,18 @@ "refresh": "새로고침", "options": "옵션", "actions": "동작" + }, + "status": { + "success": "확인", + "error": "오류", + "loading": "불러오는 중", + "idle": "대기" } }, "create": { - "title": "", - "search": "", - "addToBoard": "" + "title": "추가할 항목을 선택", + "search": "아이템 필터", + "addToBoard": "보드에 추가" }, "moveResize": { "title": "항목 이동 / 크기변경", @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "커스텀 날짜 형식", "description": "ISO 8601을 사용하여 날짜 형식 지정 (다른 옵션 무시)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "서식 초기화", "heading": "제목 레벨 {level}", "align": "텍스트 정렬: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "인용문", "horizontalLine": "가로선", "bulletList": "글머리 기호 목록", @@ -2225,7 +2267,8 @@ "sunrise": "일출", "sunset": "일몰", "maxWindSpeed": "최대 풍속: {maxWindSpeed}{unit}", - "maxWindGusts": "최대 순간 풍속: {maxWindGusts}{unit}" + "maxWindGusts": "최대 순간 풍속: {maxWindGusts}{unit}", + "humidity": "" }, "kind": { "clear": "맑음", @@ -2285,9 +2328,9 @@ "label": "파일시스템 정보 표시" }, "visibleStorageVolumes": { - "label": "", - "description": "", - "placeholder": "" + "label": "저장소 볼륨 표시", + "description": "선택한 모든 통합이 Synology일 때만 사용할 수 있습니다. 감지된 모든 저장소 볼륨을 표시하려면 비워두십시오.", + "placeholder": "저장소 볼륨 선택" }, "defaultTab": { "label": "기본 탭" @@ -2616,21 +2659,21 @@ }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", + "query": "도시 / 우편번호", + "latitude": "위도", + "longitude": "경도", + "disabledTooltip": "도시 또는 우편번호를 입력하십시오", + "unknownLocation": "알 수 없는 위치", "search": "검색", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "도시", + "country": "국가", + "coordinates": "좌표", + "population": "인구" }, "action": { - "select": "" + "select": "{city}, {countryCode} 선택" }, "population": { "fallback": "알 수 없음" @@ -2638,17 +2681,17 @@ } }, "integration": { - "noData": "", - "description": "" + "noData": "통합 없음", + "description": "새 통합을 생성하려면 클릭" }, "app": { - "noData": "", - "description": "", - "quickCreate": "" + "noData": "앱 없음", + "description": "새 앱을 생성하려면 클릭", + "quickCreate": "즉석 앱 생성" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "선택한 통합 없음", + "noData": "사용 가능한 통합 데이터 없음" }, "option": {} }, @@ -2689,6 +2732,11 @@ "user": "사용자", "name": "이름", "id": "아이디", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "너드 통계", "video": { @@ -2754,54 +2802,241 @@ "internalServerError": "" } }, - "immich-serverStats": { + "patchmon": { "name": "", "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", "option": { - "showUsers": { + "showTotalHosts": { "label": "", "description": "" }, - "showPhotos": { + "showHostsNeedingUpdates": { "label": "", "description": "" }, - "showVideos": { + "showSecurityUpdates": { "label": "", "description": "" }, - "showStorage": { + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { "label": "", "description": "" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "error": { + "internalServerError": "" + } + }, + "immich-serverStats": { + "name": "Immich 서버 정보", + "description": "Immich 인스턴스에 대한 정보", + "option": { + "showUsers": { + "label": "사용자 표시", + "description": "인스턴스의 사용자 수 표시" + }, + "showPhotos": { + "label": "사진 표시", + "description": "인스턴스의 사진 수 표시" + }, + "showVideos": { + "label": "동영상 표시", + "description": "인스턴스의 동영상 수 표시" + }, + "showStorage": { + "label": "저장소 표시", + "description": "사용하는 저장소 총량 표시" + } + }, + "users": "사용자", + "photos": "사진", + "videos": "동영상", + "storage": "용량 사용" }, "immich-albumCarousel": { - "name": "", + "name": "Immich 앨범", + "allPhotos": "", "option": { "albumId": { - "label": "", + "label": "앨범", "description": "" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "표시 간격 초", + "description": "앨범 사진이 매 X초마다 전환됩니다. 1 이상 3600 이하여야 합니다." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "사진 정보 표시", + "description": "슬라이드 쇼 하단에 사진 날짜와 현재 인덱스를 표시합니다" }, "randomizePhotos": { - "label": "", - "description": "" + "label": "사진 무작위 표시", + "description": "항상 같은 앨범 순서로 시작하는 대신 무작위 순서로 사진을 표시합니다." } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2830,7 +3065,7 @@ "label": "완료된 기타 항목 표시" }, "activeTorrentThreshold": { - "label": "" + "label": "이 임계값 이하의 완료된 토렌트 숨기기 (kiB/s)" }, "categoryFilter": { "label": "필터링할 카테고리/라벨" @@ -2932,20 +3167,20 @@ "clients": { "modalTitle": "다운로드 클라이언트 목록", "pause": "모든 클라이언트/항목 정지", - "resume": "" + "resume": "모든 클라이언트/항목 재시작" }, "client": { - "pause": "", - "resume": "" + "pause": "클라이언트 정지", + "resume": "클라이언트 재시작" }, "item": { - "pause": "", - "resume": "", + "pause": "항목 정지", + "resume": "항목 재시작", "delete": { - "title": "", - "modalTitle": "", - "entry": "", - "entryAndFiles": "" + "title": "항목 삭제", + "modalTitle": "이 작업을 삭제하시겠습니까?", + "entry": "엔트리 삭제", + "entryAndFiles": "엔트리 및 파일 삭제" } } }, @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "새 탭에서 링크 열기" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "알림", "description": "통합에서 알림 기록 표시", "noItems": "표시할 알림이 없습니다.", - "option": {} + "option": { + "hideLogos": { + "label": "로고 숨기기" + } + } }, "speedtestTracker": { "name": "", @@ -3417,73 +3691,107 @@ "internalServerError": "" } }, - "audioStats": { + "traefik": { "name": "", "description": "", "option": { - "showArtists": { - "label": "", - "description": "" + "showTcp": { + "label": "" }, - "showAlbums": { - "label": "", - "description": "" + "showUdp": { + "label": "" }, - "showSongs": { - "label": "", - "description": "" - }, - "showNowPlaying": { - "label": "", - "description": "" - }, - "showNowPlayingList": { - "label": "", - "description": "" - }, - "maxNowPlayingItems": { - "label": "", - "description": "" - }, - "showLibraryCount": { - "label": "", - "description": "" - }, - "showAudiobooks": { - "label": "", - "description": "" - }, - "showPodcasts": { - "label": "", - "description": "" - }, - "showListeningTime": { - "label": "", - "description": "" - }, - "showActiveSessions": { - "label": "", - "description": "" - }, - "compactMode": { - "label": "", - "description": "" + "showEntryPoints": { + "label": "" } }, - "artists": "", - "albums": "", - "songs": "", - "libraryCount": "", - "audiobooks": "", - "podcasts": "", - "listeningTime": "", - "activeSessions": "", - "nowPlaying": "", - "nowPlayingCount": "", + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, "error": { "internalServerError": "" } }, + "audioStats": { + "name": "오디오 정보", + "description": "Navidrome 또는 Audiobookshelf의 라이브러리 및 재생 정보", + "option": { + "showArtists": { + "label": "아티스트 표시", + "description": "음악 라이브러리에 있는 아티스트 총 수를 표시 (Navidrome)" + }, + "showAlbums": { + "label": "앨범 표시", + "description": "음악 라이브러리에 있는 앨범 총 수를 표시 (Navidrome)" + }, + "showSongs": { + "label": "음원 표시", + "description": "음악 라이브러리에 있는 음원 총 수를 표시 (Navidrome)" + }, + "showNowPlaying": { + "label": "현재 재생 중 표시", + "description": "현재 재생 중인 트랙을 표시 (Navidrome)" + }, + "showNowPlayingList": { + "label": "현재 재생 목록 표시", + "description": "활성 스트림 수 대신 개별 트랙 표시 (Navidrome)" + }, + "maxNowPlayingItems": { + "label": "최대 현재 재생 항목 수", + "description": "현재 재생 목록에 표시할 최대 트랙 수 (Navidrome)" + }, + "showLibraryCount": { + "label": "라이브러리 수 표시", + "description": "인스턴스에 있는 라이브러리 수 표시 (Audiobookshelf)" + }, + "showAudiobooks": { + "label": "오디오북 표시", + "description": "모든 라이브러리의 오디오북 총 수 표시 (Audiobookshelf)" + }, + "showPodcasts": { + "label": "팟캐스트 표시", + "description": "모든 라이브러리의 팟캐스트 총 수 표시 (Audiobookshelf)" + }, + "showListeningTime": { + "label": "청취 시간 표시", + "description": "총 청취 시간 표시 (Audiobookshelf)" + }, + "showActiveSessions": { + "label": "활성 세션 표시", + "description": "현재 활성 재생 세션 총 수 표시 (Audiobookshelf)" + }, + "compactMode": { + "label": "컴팩트 모드", + "description": "작은 크기 위젯에 적합한 더 작은 타일로 밀집된 레이아웃을 사용합니다" + } + }, + "artists": "아티스트", + "albums": "앨범", + "songs": "음원", + "libraryCount": "라이브러리", + "audiobooks": "오디오북", + "podcasts": "팟캐스트", + "listeningTime": "청취 시간", + "activeSessions": "활성 세션", + "nowPlaying": "현재 재생 중", + "nowPlayingCount": "{count, plural, one {# 스트림} other {# 스트림}}", + "error": { + "internalServerError": "오디오 정보 가져오기 실패" + } + }, "systemResources": { "name": "시스템 리소스", "description": "시스템의 CPU, 메모리, 디스크 및 기타 하드웨어 사용량", @@ -3555,24 +3863,24 @@ } }, "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": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -3815,11 +4128,11 @@ }, "widgetPreview": { "toggle": { - "enabled": "", - "disabled": "" + "enabled": "편집 모드 활성화됨", + "disabled": "편집 모드 비활성화됨" }, "dimensions": { - "title": "" + "title": "차원 변경" } }, "board": { @@ -4195,15 +4508,15 @@ "boards": "보드", "apps": "앱", "integrations": "통합", - "customWidgets": "", - "searchEngies": "", - "medias": "", + "customWidgets": "사용자 지정 위젯", + "searchEngies": "검색 엔진", + "medias": "미디어", "users": { "label": "사용자", "items": { "manage": "관리", "invites": "초대", - "groups": "" + "groups": "그룹" } }, "tools": { @@ -4223,9 +4536,9 @@ "label": "도움말", "items": { "documentation": "문서", - "submitIssue": "", + "submitIssue": "이슈 제출", "discord": "커뮤니티 불화", - "sourceCode": "" + "sourceCode": "소스 코드" } }, "about": "정보" @@ -4237,66 +4550,66 @@ "board": "보드", "user": "사용자", "invite": "초대", - "integration": "", + "integration": "통합", "app": "앱", - "group": "", - "searchEngine": "", - "media": "" + "group": "그룹", + "searchEngine": "검색 엔진", + "media": "미디어" }, "statisticLabel": { "boards": "보드", - "resources": "", - "authentication": "", - "authorization": "" + "resources": "리소스", + "authentication": "인증", + "authorization": "권한" }, "heroBanner": { "title": "", - "subtitle": "" + "subtitle": "{app} 보드" } }, "board": { "title": "보드", "action": { "new": { - "label": "" + "label": "새 보드" }, "open": { - "label": "" + "label": "보드 열기" }, "settings": { "label": "설정" }, "setHomeBoard": { - "label": "", + "label": "홈 보드로 설정", "badge": { "label": "홈", - "tooltip": "" + "tooltip": "이 보드를 홈 보드로 표시합니다" } }, "setMobileHomeBoard": { - "label": "", + "label": "모바일 보드로 설정", "badge": { - "label": "", - "tooltip": "" + "label": "모바일", + "tooltip": "이 보드를 모바일 보드로 표시합니다" } }, "duplicate": { - "label": "" + "label": "보드 복사" }, "delete": { "label": "영구 삭제", "confirm": { "title": "게시판 삭제", - "description": "" + "description": "{name} 보드를 삭제하시겠습니까?" } } }, "visibility": { - "public": "", - "private": "" + "public": "이 보드는 공개 보드입니다", + "private": "이 보드는 개인 보드입니다" }, "noResults": { - "title": "" + "title": "아직 보드가 없습니다" }, "modal": { "createBoard": { @@ -4309,40 +4622,40 @@ } }, "media": { - "includeFromAllUsers": "" + "includeFromAllUsers": "모든 사용자의 미디어 포함" }, "user": { - "back": "", - "fieldsDisabledExternalProvider": "", + "back": "사용자로 돌아가기", + "fieldsDisabledExternalProvider": "특정 필드는 외부 인증 제공자에 의해 관리되므로 비활성화됩니다.", "setting": { "general": { "title": "일반", "item": { - "language": "", + "language": "언어 & 지역", "board": { - "title": "", + "title": "홈 보드", "type": { - "general": "", - "mobile": "" + "general": "일반", + "mobile": "모바일" } }, - "search": "", + "search": "검색", "firstDayOfWeek": "요일별 요일", "accessibility": "접근성", "onboardingTours": { - "title": "", - "description": "", - "reset": "", + "title": "온보딩 투어", + "description": "관리 에리어 또는 대시보드를 다음에 방문할 때 다시 볼 수 있도록 온보딩 투어를 재설정합니다.", + "reset": "온보딩 투어 재설정", "resetSuccess": { - "title": "", - "message": "" + "title": "투어 재설정", + "message": "다음 방문 때 온보딩 투어를 표시합니다" }, "status": { - "completed": "", - "notStarted": "" + "completed": "완료", + "notStarted": "시작하지 않음" }, "name": { - "management": "", + "management": "관리", "dashboard": "대시보드" } } @@ -4503,19 +4816,19 @@ "status": { "title": "앱 상태", "enableStatusByDefault": { - "label": "", - "description": "" + "label": "기본적으로 상태 활성화", + "description": "앱 항목을 추가할 때 상태 표시를 기본적으로 활성화합니다" }, "forceDisableStatus": { - "label": "", - "description": "" + "label": "상태 비활성화 강제", + "description": "모든 사용자에게 앱 상태 표시를 비활성화하며 활성화할 수 없습니다" } } }, "user": { - "title": "", + "title": "사용자", "enableGravatar": { - "label": "", + "label": "Gravatar 활성화", "description": "" } }, @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "전체 설정 페이지 열기" } diff --git a/packages/translation/src/lang/lt.json b/packages/translation/src/lang/lt.json index f3f3fce9b..ba5d1d7b3 100644 --- a/packages/translation/src/lang/lt.json +++ b/packages/translation/src/lang/lt.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Išvalyti formatavimą", "heading": "Antraštė {level}", "align": "Teksto lygiavimas: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Kabutės", "horizontalLine": "Horizontali linija", "bulletList": "Suženklintasis sąrašas", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Atidaryti naujame skirtuke" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/lv.json b/packages/translation/src/lang/lv.json index 2685a3b60..34a6be979 100644 --- a/packages/translation/src/lang/lv.json +++ b/packages/translation/src/lang/lv.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Notīrīt formatējumu", "heading": "Virsraksts {level}", "align": "Teksta līdzināšana: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Citāts", "horizontalLine": "Horizontāla līnija", "bulletList": "Aizzīmju saraksts", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "Skaidrs", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Atvērt saites jaunā cilnē" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/nl.json b/packages/translation/src/lang/nl.json index 7d1e94f4d..ea81b66d8 100644 --- a/packages/translation/src/lang/nl.json +++ b/packages/translation/src/lang/nl.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Gebruik iconen voor pings" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Standaard zoekmachine" }, @@ -1285,6 +1289,14 @@ "label": "API-sleutel (geheim)", "newLabel": "Nieuwe API-sleutel (geheim)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "App ID", "newLabel": "Nieuwe App ID" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Aangepast datumformaat", "description": "Gebruik ISO 8601 om datum op te maken (dit overschrijft andere opties)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Opmaak wissen", "heading": "Koptekst {level}", "align": "Tekst uitlijnen: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Blokquote", "horizontalLine": "Horizontale lijn", "bulletList": "Opsommingslijst", @@ -2225,7 +2267,8 @@ "sunrise": "Zonsopgang", "sunset": "Zonsondergang", "maxWindSpeed": "Max. windsnelheid: {maxWindSpeed} {unit}", - "maxWindGusts": "Max. windstoten: {maxWindGusts} {unit}" + "maxWindGusts": "Max. windstoten: {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "Wissen", @@ -2689,6 +2732,11 @@ "user": "Gebruiker", "name": "Naam", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Statistieken voor nerds", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Links in nieuw tabblad openen" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS-feeds", "description": "Eén of meer algemene RSS-, ATOM- of JSON-feeds monitoren en weergeven", @@ -3336,7 +3606,11 @@ "name": "Meldingen", "description": "", "noItems": "Geen meldingen om weer te geven.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Containers", "table": { "updated": "{when} bijgewerkt", + "refresh": { + "lastUpdated": "" + }, "search": "{count} containers zoeken", "selected": "{selectCount} van {totalCount} containers geselecteerd", "footer": "Totaal {count} containers", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/no.json b/packages/translation/src/lang/no.json index 595f6b71e..68d6cef7f 100644 --- a/packages/translation/src/lang/no.json +++ b/packages/translation/src/lang/no.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Bruk ikoner for pinger" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Standard søkemotor" }, @@ -1285,6 +1289,14 @@ "label": "API Nøkkel (Hemliglet)", "newLabel": "Ny API Key (Secret)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "App Id", "newLabel": "Ny App Id" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Egendefinert dato format", "description": "Bruk ISO 8601 til å formatere datoen (dette vil overstyre andre alternativer)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Fjern formatering", "heading": "Overskrift {level}", "align": "Juster tekst: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Blokksitat", "horizontalLine": "Horisontal linje", "bulletList": "Punktliste", @@ -2225,7 +2267,8 @@ "sunrise": "Soloppgang", "sunset": "Solnedgang", "maxWindSpeed": "Maks vindhastighet: {maxWindSpeed} {unit}", - "maxWindGusts": "Maks vindkast: {maxWindGusts} {unit}" + "maxWindGusts": "Maks vindkast: {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "Tøm", @@ -2689,6 +2732,11 @@ "user": "Bruker", "name": "Navn", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Statistikk for nerder", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Immich-serverstatistikk", "description": "Informasjon om din Immich-instans", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Immich Album", + "allPhotos": "", "option": { "albumId": { "label": "Album ID", @@ -2801,7 +3037,6 @@ } }, "description": "Lysbildefremvisning av bilder i ditt Immich-album", - "noAlbumSelected": "Ingen album valgt, rediger widgeten og velg et album", "noPhotos": "Ingen bilder i dette albumet" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Åpne lenker i ny fane" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS feed", "description": "Overvåk og vis en eller flere generiske RSS, ATOM eller JSON-feeder", @@ -3336,7 +3606,11 @@ "name": "Varsler", "description": "Vis varselhistorikk fra en integrasjon", "noItems": "Ingen varsler å vise.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "Speedtest tracker", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Containere", "table": { "updated": "Oppdatert {when}", + "refresh": { + "lastUpdated": "" + }, "search": "Søk {count} containere", "selected": "{selectCount} av {totalCount} containere valgt", "footer": "Totalt {count} containere", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/pl.json b/packages/translation/src/lang/pl.json index 31d301ceb..7c3dee4a7 100644 --- a/packages/translation/src/lang/pl.json +++ b/packages/translation/src/lang/pl.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Użyj ikon dla pingów" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Domyślna wyszukiwarka" }, @@ -1285,6 +1289,14 @@ "label": "Klucz API (Secret)", "newLabel": "Nowy klucz API (Secret)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "Identyfikator aplikacji", "newLabel": "Nowy identyfikator aplikacji" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "Paperless-ngx", "description": "System zarządzania dokumentami do archiwizacji i organizacji zeskanowaych dokumnteów" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "Odśwież", "options": "Opcje", "actions": "Akcje" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Niestandardowy format daty", "description": "Użyj ISO 8601 do formatu daty (spowoduje to nadpisanie innych opcji)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Wyczyść formatowanie", "heading": "Nagłówek {level}", "align": "Wyrównanie tekstu: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Cytat", "horizontalLine": "Linia pozioma", "bulletList": "Lista punktowana", @@ -2225,7 +2267,8 @@ "sunrise": "Wschód słońca", "sunset": "Zachód słońca", "maxWindSpeed": "Maksymalna prędkość wiatru: {maxWindSpeed} km/h", - "maxWindGusts": "Maksymalne porywy wiatru: {maxWindGusts} km/h" + "maxWindGusts": "Maksymalne porywy wiatru: {maxWindGusts} km/h", + "humidity": "" }, "kind": { "clear": "Bezchmurnie", @@ -2689,6 +2732,11 @@ "user": "Użytkownik", "name": "Nazwa", "id": "ID", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Statystyki dla nerdów", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "Nie udało się pobrać danych Paperless-ngx" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Statystyki serwera Immich", "description": "Informacje o Twojej instancji Immich", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Album Immich", + "allPhotos": "", "option": { "albumId": { "label": "ID albumu", @@ -2801,7 +3037,6 @@ } }, "description": "Pokaz slajdów zdjęć z Twojego albumu w Immich", - "noAlbumSelected": "Nie wybrano albumu. Edytuj widget i wybierz album", "noPhotos": "Brak zdjęć w tym albumie" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Otwieraj linki w nowej karcie" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "Kanały RSS", "description": "Monitoruj i wyświetlaj jeden lub więcej ogólnych kanałów RSS, ATOM lub JSON", @@ -3336,7 +3606,11 @@ "name": "Powiadomienia", "description": "Wyświetl historię powiadomień z integracji", "noItems": "Brak powiadomień do wyświetlenia.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3417,6 +3691,40 @@ "internalServerError": "Nie udało się pobrać danych czasu pracy" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "Audio stats", "description": "Statystyki biblioteki i odtwarzania z Navidrome lub Audiobookshelf", @@ -3792,6 +4100,11 @@ "read": "Odczyt", "write": "Zapis" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "Przepustowość", "subtitle": "Ruch sieciowy interfejsów publicznych", @@ -4924,6 +5237,9 @@ "title": "Kontenery", "table": { "updated": "Zaktualizowano {when}", + "refresh": { + "lastUpdated": "" + }, "search": "Szukaj wśród {count} kontenerów", "selected": "Wybrano {selectCount} z {totalCount} kontenerów", "footer": "Łącznie {count} kontenerów", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "Otwórz pełną stronę preferencji" } diff --git a/packages/translation/src/lang/pt-br.json b/packages/translation/src/lang/pt-br.json index 1d8b6329e..b907d0a43 100644 --- a/packages/translation/src/lang/pt-br.json +++ b/packages/translation/src/lang/pt-br.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Usar ícone para pings" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Mecanismo de pesquisa padrão" }, @@ -1285,6 +1289,14 @@ "label": "Chave de API (Key)", "newLabel": "Nova Chave de API (Key)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "ID do Aplicativo", "newLabel": "Novo ID de Aplicativo" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "Sistema de gerenciamento de documentos para arquivamento e organização de documentos digitalizados" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Formato de data personalizado", "description": "Usar ISO 8601 para formatar datas (Isso sobrescreverá outras opções)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Limpar formatação", "heading": "Cabeçalho {level}", "align": "Alinhar texto: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Bloco de Citação", "horizontalLine": "Linha horizontal", "bulletList": "Lista de marcadores", @@ -2225,7 +2267,8 @@ "sunrise": "Nascer do sol", "sunset": "Pôr do sol", "maxWindSpeed": "Velocidade máxima do vento: {maxWindSpeed} {unit}", - "maxWindGusts": "Rajadas máximas de vento: {maxWindGusts} {unit}" + "maxWindGusts": "Rajadas máximas de vento: {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "Limpar", @@ -2689,6 +2732,11 @@ "user": "Usuário", "name": "Nome", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Estatísticas para nerds", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Estatísticas do Servidor Immich", "description": "Informações sobre sua instância do Immich", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Álbum do Immich", + "allPhotos": "", "option": { "albumId": { "label": "ID do Álbum", @@ -2801,7 +3037,6 @@ } }, "description": "Apresentação de imagens em seu álbum Imich", - "noAlbumSelected": "Nenhum álbum selecionado, edite o widget e escolha um álbum", "noPhotos": "Nenhuma foto neste álbum" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Abrir links em uma nova guia" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "Feeds RSS", "description": "Monitora e exibe um ou mais feeds RSS, ATOM ou JSON genéricos", @@ -3336,7 +3606,11 @@ "name": "Notificações", "description": "Exibe histórico de notificações de uma integração", "noItems": "Nenhuma notificação para exibir.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Contêineres", "table": { "updated": "Atualizado em {when}", + "refresh": { + "lastUpdated": "" + }, "search": "Buscar {count} contêineres", "selected": "{selectCount} de {totalCount} contêineres selecionados", "footer": "Total de contêineres: {count}", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/pt.json b/packages/translation/src/lang/pt.json index ab6a20c1d..4bd892136 100644 --- a/packages/translation/src/lang/pt.json +++ b/packages/translation/src/lang/pt.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "", "heading": "", "align": "", + "directionLtr": "", + "directionRtl": "", "blockquote": "", "horizontalLine": "", "bulletList": "", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/ro.json b/packages/translation/src/lang/ro.json index d85368be3..2cb1ad62b 100644 --- a/packages/translation/src/lang/ro.json +++ b/packages/translation/src/lang/ro.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Curăță formatul", "heading": "Rubrica {level}", "align": "Așezați textul: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Citat", "horizontalLine": "Linie orizontală", "bulletList": "Listă cu puncte", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "Senin", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Deschide link-ul într-o pagină nouă" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Containere", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/ru.json b/packages/translation/src/lang/ru.json index 62b918327..ccd8f6b05 100644 --- a/packages/translation/src/lang/ru.json +++ b/packages/translation/src/lang/ru.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Использовать индикаторы доступности" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Поисковая система по умолчанию" }, @@ -1285,6 +1289,14 @@ "label": "API-ключ (Secret)", "newLabel": "Новый API-ключ (Secret)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "App Id", "newLabel": "Новый App Id" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Пользовательский формат даты", "description": "Используйте формат ISO 8601 для отображения даты (это переопределит другие настройки)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Очистить форматирование", "heading": "Заголовок {level}", "align": "Выравнивание текста: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Цитата", "horizontalLine": "Горизонтальная линия", "bulletList": "Маркированный список", @@ -2225,7 +2267,8 @@ "sunrise": "Восход", "sunset": "Закат", "maxWindSpeed": "Макс. скорость ветра: {maxWindSpeed} {unit}", - "maxWindGusts": "Макс. порывы ветра: {maxWindGusts} {unit}" + "maxWindGusts": "Макс. порывы ветра: {maxWindGusts} {unit}", + "humidity": "" }, "kind": { "clear": "Ясно", @@ -2689,6 +2732,11 @@ "user": "Пользователь", "name": "Название", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Техническая информация", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Статистика сервера Immich", "description": "Информация о вашем экземпляре Immich", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Альбом Immich", + "allPhotos": "", "option": { "albumId": { "label": "ID альбома", @@ -2801,7 +3037,6 @@ } }, "description": "Слайд-шоу фотографий из вашего альбома Immich", - "noAlbumSelected": "Альбом не выбран — отредактируйте виджет и выберите альбом", "noPhotos": "В этом альбоме нет фотографий" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Открывать ссылки в новой вкладке" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS-ленты", "description": "Отслеживание и отображение одной или нескольких RSS, ATOM или JSON-лент", @@ -3336,7 +3606,11 @@ "name": "Уведомления", "description": "Отображает историю уведомлений из интеграции", "noItems": "Нет уведомлений для отображения.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Контейнеры", "table": { "updated": "Обновлено {when}", + "refresh": { + "lastUpdated": "" + }, "search": "Поиск среди {count} контейнеров", "selected": "Выбрано {selectCount} из {totalCount} контейнеров", "footer": "Всего {count} контейнеров", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/sk.json b/packages/translation/src/lang/sk.json index a7fbce04f..9d5d661d7 100644 --- a/packages/translation/src/lang/sk.json +++ b/packages/translation/src/lang/sk.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Používanie ikon pre pingy" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Predvolený vyhľadávací nástroj" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Vlastný formát času", "description": "Na formátovanie času použite ISO 8601 (toto prepíše ostatné možnosti)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Vyčistiť formátovanie", "heading": "Nadpis {level}", "align": "Zarovnanie textu: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Citát", "horizontalLine": "Horizontálna čiara", "bulletList": "Zoznam odrážok", @@ -2225,7 +2267,8 @@ "sunrise": "Východ slnka", "sunset": "Západ slnka", "maxWindSpeed": "Maximálna rýchlosť vetra: {maxWindSpeed} km/h", - "maxWindGusts": "Maximálne nárazy vetra: {maxWindGusts} km/h" + "maxWindGusts": "Maximálne nárazy vetra: {maxWindGusts} km/h", + "humidity": "" }, "kind": { "clear": "Jasno", @@ -2689,6 +2732,11 @@ "user": "Používateľ", "name": "Názov", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Otvorenie odkazov v novej karte" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS kanály", "description": "Monitorujte a zobrazujte jeden alebo viac všeobecných informačných kanálov RSS, ATOM alebo JSON", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Kontajnery", "table": { "updated": "Aktualizované {when}", + "refresh": { + "lastUpdated": "" + }, "search": "Vyhľadajte {count} kontajnery", "selected": "{selectCount} z {totalCount} vybratých kontajnerov", "footer": "Celkový počet kontajnerov: {count}", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/sl.json b/packages/translation/src/lang/sl.json index 6678f65bd..75741509e 100644 --- a/packages/translation/src/lang/sl.json +++ b/packages/translation/src/lang/sl.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Jasno oblikovanje", "heading": "Naslov {level}", "align": "Poravnava besedila: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Blokovni citat", "horizontalLine": "Vodoravna črta", "bulletList": "Seznam kroglic", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "Počisti", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Odprite povezave v novem zavihku" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/sv.json b/packages/translation/src/lang/sv.json index 7b43c6234..019caca3a 100644 --- a/packages/translation/src/lang/sv.json +++ b/packages/translation/src/lang/sv.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Använd ikoner för \"onlinekontroll\" (pings)" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Förvald sökmotor" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Rensa formatering", "heading": "Rubrik {level}", "align": "Justera text: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Blockcitat", "horizontalLine": "Horisontell linje", "bulletList": "Punktlista", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "Klart", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Öppna länkar i ny flik" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "Uppdaterad {when}", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/tr.json b/packages/translation/src/lang/tr.json index 5755a9519..726831cf4 100644 --- a/packages/translation/src/lang/tr.json +++ b/packages/translation/src/lang/tr.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Pingler İçin Simge Kullanın" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Öntanımlı arama motoru" }, @@ -1285,6 +1289,14 @@ "label": "API Anahtarı (Gizli Anahtar)", "newLabel": "Yeni API Anahtarı (Gizli Anahtar)" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "Uygulama Kimliği", "newLabel": "Yeni Uygulama Kimliği" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "Özel tarih biçimi", "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": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Biçimlendirmeyi temizle", "heading": "Başlık {level}", "align": "Metin hizalama: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Blok alıntı", "horizontalLine": "Yatay çizgi", "bulletList": "Maddeli liste", @@ -2225,7 +2267,8 @@ "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" + "maxWindGusts": "Maks. Rüzgar Hamlesi: {maxWindGusts} km/s", + "humidity": "" }, "kind": { "clear": "Açık", @@ -2689,6 +2732,11 @@ "user": "Kullanıcı", "name": "İsim", "id": "Kimlik", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "Meraklısı için istatistikler", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "Immich Server Stats", "description": "Information about your Immich instance", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "Immich Album", + "allPhotos": "", "option": { "albumId": { "label": "Album ID", @@ -2801,7 +3037,6 @@ } }, "description": "Slideshow of pictures in your Immich album", - "noAlbumSelected": "No album selected, edit widget and choose an album", "noPhotos": "No photos in this album" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Bağlantıları yeni sekmede aç" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS Beslemeleri", "description": "Bir veya daha fazla RSS, ATOM veya JSON beslemesini takip edin ve görüntüleyin", @@ -3336,7 +3606,11 @@ "name": "Bildirimler", "description": "Entegrasyonların bildirim geçmişini görüntüle", "noItems": "Görüntülenecek bildirim yok.", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "Speedtest Tracker", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "Konteynerler", "table": { "updated": "{when} Güncellendi", + "refresh": { + "lastUpdated": "" + }, "search": "{count} konteyner içinde ara", "selected": "{selectCount} / {totalCount} konteyner seçildi", "footer": "Toplam {count} konteyner", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/uk.json b/packages/translation/src/lang/uk.json index b77603f3d..18515569e 100644 --- a/packages/translation/src/lang/uk.json +++ b/packages/translation/src/lang/uk.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "Використовувати значки для ping" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "Показувати контекстне меню Homarr при клацанні правою кнопкою миші на віджеті. Вимкніть, щоб використовувати меню браузера за замовчуванням (наприклад, «Відкрити посилання в новій вкладці»)." + }, "defaultSearchEngine": { "label": "Стандартна система пошуку" }, @@ -862,7 +866,7 @@ "created": "", "updated": "", "deleted": "", - "imported": "", + "imported": "Віджет успішно імпортовано.", "aiPromptCopied": "", "aiPromptDescription": "", "aiPromptCopy": "", @@ -877,7 +881,7 @@ "toggleError": "Не вдалося змінити стан віджету.", "deleteError": "", "previewError": "", - "executed": "", + "executed": "Дію успішно виконано.", "executeError": "" }, "table": { @@ -1021,7 +1025,7 @@ "mediaMonitoring": "", "speedtest": "", "analytics": "", - "vpn": "", + "vpn": "VPN", "mediaLibrary": "Медіа бібліотека", "uptimeMonitoring": "" }, @@ -1141,7 +1145,7 @@ "connection": { "hostUnreachable": "", "networkUnreachable": "Мережа недоступна. Перевірте підключення до Інтернету або налаштування мережі.", - "refused": "", + "refused": "Сервер відхилив з'єднання. Він не може працювати або відхиляти запити до вказаного порту.", "reset": "" }, "dns": { @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "Секрет API", + "newLabel": "Новий cекрет API" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "Безпаперовий ngx", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "Bazarr", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "Помилка", + "loading": "", + "idle": "Неактивно" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1904,7 +1944,7 @@ "noStation": "", "option": { "baseUrl": { - "label": "" + "label": "Шукати URL" }, "station": { "label": "" @@ -1936,6 +1976,8 @@ "clear": "", "heading": "", "align": "", + "directionLtr": "", + "directionRtl": "Встановити напрямок тексту справа наліво", "blockquote": "", "horizontalLine": "", "bulletList": "", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "Максимальна швидкість вітру: {maxWindSpeed} км/год", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "Ясно", @@ -2287,7 +2330,7 @@ "visibleStorageVolumes": { "label": "", "description": "", - "placeholder": "" + "placeholder": "Оберіть томи сховища" }, "defaultTab": { "label": "" @@ -2359,7 +2402,7 @@ "name": "Назва", "cpu": "ЦП", "memory": "", - "node": "" + "node": "Вузол" } } } @@ -2499,7 +2542,7 @@ } }, "recentActivity": { - "title": "", + "title": "Нещодавня активність", "empty": "", "watched": "", "partial": "" @@ -2689,8 +2732,13 @@ "user": "Користувач", "name": "Назва", "id": "Id", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { - "title": "", + "title": "Статистика ботів", "video": { "title": "", "resolution": "" @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "Показувати хости з оновленнями безпеки", + "description": "Показувати хости, які потребують патчів безпеки" + }, + "showRecentUpdates24h": { + "label": "Показати останні оновлення (24h)", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "Показати репозиторії", + "description": "Відображати кількість активних репозиторіїв, що відслідковуються" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "Виберіть спосіб відображення дистрибутива операційної системи", + "option": { + "bars": "", + "donut": "Кільцева діаграма" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2797,11 +3033,10 @@ }, "randomizePhotos": { "label": "", - "description": "" + "description": "Показувати фотографії у випадковому порядку замість того, щоб завжди починатися з того ж порядку альбому." } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Відкрийте посилання в новій вкладці" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,9 +3334,38 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "Залишилося часу" + }, "rssFeed": { "name": "RSS-канали", - "description": "", + "description": "Моніторинг та відображення однієї або кількох загальних RSS-, ATOM- або JSON-стрічок", "option": { "feedUrls": { "label": "" @@ -3140,7 +3410,7 @@ "label": "Показати тільки іконку" }, "topReleases": { - "label": "", + "label": "Кращі релізи", "description": "" }, "repositories": { @@ -3236,7 +3506,7 @@ "projectDescription": "", "created": "Створено", "error": { - "label": "", + "label": "Помилка", "messages": { "invalidIdentifier": "", "noMatchingVersion": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "Трафік", + "description": "Огляд маршрутизаторів, сервісів, проміжного програмного забезпечення та точок входу Traefik", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "Неможливо отримати дані Traefik" + } + }, "audioStats": { "name": "", "description": "", @@ -3787,11 +4095,16 @@ "series": "Використано" }, "diskIO": { - "title": "", + "title": "Диск вводу/виводу", "subtitle": "", "read": "", "write": "" }, + "storage": { + "title": "Сховище", + "subtitle": "", + "series": "Використано" + }, "network": { "title": "", "subtitle": "", @@ -4309,7 +4622,7 @@ } }, "media": { - "includeFromAllUsers": "" + "includeFromAllUsers": "Включити медіа від усіх користувачів" }, "user": { "back": "", @@ -4681,8 +4994,8 @@ "title": "" }, "authentication": { - "title": "", - "intro": "", + "title": "Аутентифікація", + "intro": "Ви можете автентифікувати свій MCP-сервер, використовуючи або ключ API, або OAuth. Обидва методи дають той же рівень доступу.", "apiKey": { "title": "", "description": "" @@ -4766,9 +5079,9 @@ "metaTitle": "", "export": { "title": "", - "description": "", - "button": "", - "error": "", + "description": "Завантажте повну резервну копію вашої бази даних SQLite, включаючи всі налаштування, користувачів, дошки та зашифровані секрети інтеграції. Резервна копія містить ключ шифрування та метадані у вигляді ZIP-файлу.", + "button": "Завантажити резервну копію", + "error": "Помилка експорту", "confirm": { "title": "", "warningTitle": "", @@ -4837,11 +5150,11 @@ "app": "", "integration": "", "item": "", - "media": "", - "search_engine": "" + "media": "Медіа", + "search_engine": "Пошукові системи" }, - "migrationsApplied": "", - "migrationsAppliedPlural": "", + "migrationsApplied": "Застосовано міграцію {count}", + "migrationsAppliedPlural": "Застосовано міграції {count}", "migrationsOlderVersion": "", "migrationsOlderVersionPlural": "", "migrationsUpToDate": "", @@ -4924,6 +5237,9 @@ "title": "Контейнери", "table": { "updated": "Оновлено {when}", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "Вибрано {selectCount} із {totalCount} контейнерів", "footer": "", @@ -5055,13 +5371,13 @@ } }, "error": { - "internalServerError": "", - "noColumns": "" + "internalServerError": "Не вдалося отримати Docker контейнери", + "noColumns": "Виберіть хоча б один стовпець в налаштуваннях віджета" } }, "kubernetes": { "cluster": { - "title": "", + "title": "Панель кластера", "label": "", "providers": "", "version": "", @@ -5187,7 +5503,7 @@ "label": "" }, "clusterIP": { - "label": "" + "label": "Кластер IP" }, "creationTimestamp": { "label": "" @@ -5273,10 +5589,10 @@ "label": "" }, "storage": { - "label": "" + "label": "Сховище" }, "storageClassName": { - "label": "" + "label": "Назва класу сховища" }, "volumeMode": { "label": "" @@ -5616,7 +5932,7 @@ "label": "", "children": { "detail": { - "title": "" + "title": "Увімкнути Бан DuckGos" } } }, @@ -5624,12 +5940,12 @@ "label": "", "children": { "detail": { - "title": "" + "title": "Оберіть перший день тижня" } } }, "homeBoardId": { - "label": "", + "label": "Домашня дошка", "children": { "detail": { "title": "" @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } @@ -5963,7 +6287,7 @@ "status": "" }, "status": { - "requested": "" + "requested": "Запитано" } }, "button": { @@ -5977,7 +6301,7 @@ "certificate": { "field": { "hostname": { - "label": "" + "label": "Назва хоста" }, "subject": { "label": "" @@ -6013,7 +6337,7 @@ "toHostnames": "" }, "hostnames": { - "title": "", + "title": "Довірені назви хостів сертифікатів", "description": "", "noResults": { "title": "" diff --git a/packages/translation/src/lang/vi.json b/packages/translation/src/lang/vi.json index 36207f3d7..3725a7c49 100644 --- a/packages/translation/src/lang/vi.json +++ b/packages/translation/src/lang/vi.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "Công cụ tìm kiếm mặc định" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "", "description": "" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "Xóa định dạng", "heading": "Tiêu đề {level}", "align": "Căn chỉnh: {position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "Trích dẫn", "horizontalLine": "Kẻ ngang", "bulletList": "Danh sách kiểu ký hiệu", @@ -2225,7 +2267,8 @@ "sunrise": "", "sunset": "", "maxWindSpeed": "", - "maxWindGusts": "" + "maxWindGusts": "", + "humidity": "" }, "kind": { "clear": "Quang đãng", @@ -2689,6 +2732,11 @@ "user": "", "name": "", "id": "", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "Mở liên kết trong tab mới" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "", "description": "", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "", "table": { "updated": "", + "refresh": { + "lastUpdated": "" + }, "search": "", "selected": "", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } diff --git a/packages/translation/src/lang/zh.json b/packages/translation/src/lang/zh.json index bfa7bcc0f..b5ea05ad6 100644 --- a/packages/translation/src/lang/zh.json +++ b/packages/translation/src/lang/zh.json @@ -198,6 +198,10 @@ "pingIconsEnabled": { "label": "為 Pings 使用 icon" }, + "enableRightClickOnWidgets": { + "label": "", + "description": "" + }, "defaultSearchEngine": { "label": "預設搜尋引擎" }, @@ -1285,6 +1289,14 @@ "label": "", "newLabel": "" }, + "patchmonApiKey": { + "label": "", + "newLabel": "" + }, + "patchmonApiSecret": { + "label": "", + "newLabel": "" + }, "githubAppId": { "label": "", "newLabel": "" @@ -1328,9 +1340,21 @@ } } }, + "traefik": { + "name": "", + "description": "" + }, "paperlessNgx": { "name": "", "description": "" + }, + "patchmon": { + "name": "", + "description": "" + }, + "bazarr": { + "name": "", + "description": "" } }, "media": { @@ -1602,6 +1626,12 @@ "refresh": "", "options": "", "actions": "" + }, + "status": { + "success": "", + "error": "", + "loading": "", + "idle": "" } }, "create": { @@ -1875,6 +1905,16 @@ "customDateFormat": { "label": "自訂日期格式", "description": "使用 ISO 8601 格式化日期 (此操作將覆蓋其他選項)" + }, + "showWeather": { + "label": "", + "description": "" + }, + "weatherLocation": { + "label": "" + }, + "isWeatherFormatFahrenheit": { + "label": "" } } }, @@ -1936,6 +1976,8 @@ "clear": "清除格式", "heading": "標題 {level}", "align": "對齊文字:{position}", + "directionLtr": "", + "directionRtl": "", "blockquote": "引用", "horizontalLine": "橫線", "bulletList": "符號列表", @@ -2225,7 +2267,8 @@ "sunrise": "日出", "sunset": "日落", "maxWindSpeed": "最大風速:{maxWindSpeed} 公里/時", - "maxWindGusts": "最大陣風:{maxWindGusts} 公里/時" + "maxWindGusts": "最大陣風:{maxWindGusts} 公里/時", + "humidity": "" }, "kind": { "clear": "晴朗", @@ -2689,6 +2732,11 @@ "user": "使用者", "name": "名稱", "id": "ID", + "status": "", + "directPlay": "", + "transcoding": "", + "paused": "", + "remaining": "", "metadata": { "title": "", "video": { @@ -2754,6 +2802,193 @@ "internalServerError": "" } }, + "patchmon": { + "name": "", + "description": "", + "title": "", + "totalHosts": "", + "hostsNeedingUpdates": "", + "securityUpdates": "", + "upToDateHosts": "", + "hostsWithSecurityUpdates": "", + "recentUpdates24h": "", + "totalOutdatedPackages": "", + "totalRepos": "", + "osDistribution": "", + "compliance": "", + "complianceRatio": "", + "lastUpdated": "", + "option": { + "showTotalHosts": { + "label": "", + "description": "" + }, + "showHostsNeedingUpdates": { + "label": "", + "description": "" + }, + "showSecurityUpdates": { + "label": "", + "description": "" + }, + "showUpToDateHosts": { + "label": "", + "description": "" + }, + "showHostsWithSecurityUpdates": { + "label": "", + "description": "" + }, + "showRecentUpdates24h": { + "label": "", + "description": "" + }, + "showTotalOutdatedPackages": { + "label": "", + "description": "" + }, + "showTotalRepos": { + "label": "", + "description": "" + }, + "enableThresholdColors": { + "label": "", + "description": "" + }, + "useCustomThresholds": { + "label": "", + "description": "" + }, + "thresholdMode": { + "option": { + "absolute": "", + "percent": "" + } + }, + "hostsNeedingUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsNeedingUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "securityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "securityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "securityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesThresholdMode": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesWarningAt": { + "label": "", + "description": "" + }, + "hostsWithSecurityUpdatesCriticalAt": { + "label": "", + "description": "" + }, + "upToDateHostsThresholdMode": { + "label": "", + "description": "" + }, + "upToDateHostsWarningAt": { + "label": "", + "description": "" + }, + "upToDateHostsCriticalAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesThresholdMode": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesWarningAt": { + "label": "", + "description": "" + }, + "totalOutdatedPackagesCriticalAt": { + "label": "", + "description": "" + }, + "showOsDistribution": { + "label": "", + "description": "" + }, + "osDistributionLimit": { + "label": "", + "description": "", + "option": { + "3": "", + "5": "", + "10": "", + "all": "" + } + }, + "showOsVersion": { + "label": "", + "description": "" + }, + "showComplianceHero": { + "label": "", + "description": "" + }, + "osDisplayMode": { + "label": "", + "description": "", + "option": { + "bars": "", + "donut": "" + } + } + }, + "error": { + "internalServerError": "" + } + }, + "bazarr": { + "name": "", + "description": "", + "episodes": "", + "movies": "", + "providers": "", + "status": "", + "option": { + "showMissingEpisodes": { + "label": "", + "description": "" + }, + "showMissingMovies": { + "label": "", + "description": "" + }, + "showProviderIssues": { + "label": "", + "description": "" + }, + "showHealthIssues": { + "label": "", + "description": "" + } + }, + "error": { + "internalServerError": "" + } + }, "immich-serverStats": { "name": "", "description": "", @@ -2782,6 +3017,7 @@ }, "immich-albumCarousel": { "name": "", + "allPhotos": "", "option": { "albumId": { "label": "", @@ -2801,7 +3037,6 @@ } }, "description": "", - "noAlbumSelected": "", "noPhotos": "" }, "downloads": { @@ -2986,6 +3221,12 @@ "option": { "linksTargetNewTab": { "label": "於新分頁中開啟鏈結" + }, + "statusFilter": { + "label": "" + }, + "recentDays": { + "label": "" } }, "pending": { @@ -3093,6 +3334,35 @@ } } }, + "mediaMissing": { + "name": "", + "description": "", + "option": { + "showMissing": { + "label": "" + }, + "showQueued": { + "label": "" + }, + "pageSize": { + "label": "" + } + }, + "tab": { + "missing": "", + "queued": "" + }, + "type": { + "movie": "", + "episode": "" + }, + "empty": { + "missing": "", + "queued": "", + "noTabsEnabled": "" + }, + "timeLeft": "" + }, "rssFeed": { "name": "RSS 訂閱", "description": "顯示一個或多個 RSS、ATOM、JSON 源", @@ -3336,7 +3606,11 @@ "name": "", "description": "", "noItems": "", - "option": {} + "option": { + "hideLogos": { + "label": "" + } + } }, "speedtestTracker": { "name": "", @@ -3417,6 +3691,40 @@ "internalServerError": "" } }, + "traefik": { + "name": "", + "description": "", + "option": { + "showTcp": { + "label": "" + }, + "showUdp": { + "label": "" + }, + "showEntryPoints": { + "label": "" + } + }, + "instances": "", + "versionUnknown": "", + "summary": { + "routers": "", + "entryPoints": "" + }, + "resource": { + "routers": "", + "services": "", + "middlewares": "" + }, + "status": { + "healthy": "", + "errors": "", + "warnings": "" + }, + "error": { + "internalServerError": "" + } + }, "audioStats": { "name": "", "description": "", @@ -3792,6 +4100,11 @@ "read": "", "write": "" }, + "storage": { + "title": "", + "subtitle": "", + "series": "" + }, "network": { "title": "", "subtitle": "", @@ -4924,6 +5237,9 @@ "title": "容器", "table": { "updated": "已更新於 {when}", + "refresh": { + "lastUpdated": "" + }, "search": "搜尋 {count} 容器", "selected": "{totalCount} 容器的 {selectCount}", "footer": "", @@ -5652,6 +5968,14 @@ } } }, + "enableRightClickOnWidgets": { + "label": "", + "children": { + "detail": { + "title": "" + } + } + }, "fullPreferencesPage": { "label": "" } From 965aec51554e8decb302bbb72769a6e8e6670fb1 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 16:29:37 +0000 Subject: [PATCH 24/24] chore(deps): update pnpm to v11.15.0 (#6455) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- deployments/prebuilt-debian/package.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deployments/prebuilt-debian/package.json b/deployments/prebuilt-debian/package.json index c74e03393..2b2aab63c 100644 --- a/deployments/prebuilt-debian/package.json +++ b/deployments/prebuilt-debian/package.json @@ -6,7 +6,7 @@ }, "engines": { "node": ">=24.18.0", - "pnpm": ">=11.14.0" + "pnpm": ">=11.15.0" }, - "packageManager": "pnpm@11.14.0" + "packageManager": "pnpm@11.15.0" } diff --git a/package.json b/package.json index 522f1a69a..7ddb94369 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ }, "engines": { "node": ">=24.18.0", - "pnpm": ">=11.14.0" + "pnpm": ">=11.15.0" }, - "packageManager": "pnpm@11.14.0" + "packageManager": "pnpm@11.15.0" }