Compare commits

..

30 Commits

Author SHA1 Message Date
Matt
bd604f5867 Update .goreleaser.yaml 2025-07-01 20:36:33 -04:00
Matthew Kilgore
b6b939db40 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	frontend/locales/fr.json
#	frontend/locales/sk-SK.json
#	frontend/locales/sl.json
2025-07-01 19:14:07 -04:00
Matthew Kilgore
d3f56b1b95 Fix version links for all languages 2025-07-01 19:13:52 -04:00
Weblate
a258e1d2bc Translated using Weblate (Slovak)
Currently translated at 99.1% (488 of 492 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (492 of 492 strings)

Translated using Weblate (French)

Currently translated at 100.0% (492 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: Murk <saso@workrum.net>
Co-authored-by: Telectroboy <telectroboy@hotmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/fr/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sl/
Translation: Homebox/Frontend
2025-07-01 23:13:32 +00:00
Stanley Jochman
5ca671a4ab fix: footer release link points to wrong link (#830) 2025-07-01 19:13:15 -04:00
Matthew Kilgore
ccdab8bac1 Fix attachments get method 2025-07-01 19:03:24 -04:00
Matt
0d2a6d6ac8 Revert weblate skipping 2025-07-01 10:09:40 -04:00
Matt
e159dd8a0b Merge commit from fork 2025-07-01 09:56:34 -04:00
Matt
b311a5c9ed Update CreateModal.vue 2025-07-01 08:53:12 -04:00
Matthew Kilgore
04c8e38ecf Escape file name for content-disposition. 2025-06-30 20:55:11 -04:00
Matthew Kilgore
1fd2f42282 Hopefully fixed ARMv7 Rootless build 2025-06-30 20:44:20 -04:00
Matthew Kilgore
d3cff18cc6 Ignore weblate for builds 2025-06-30 20:21:53 -04:00
Weblate
3e27c24fbd Translated using Weblate (Japanese)
Currently translated at 59.9% (295 of 492 strings)

Translated using Weblate (Portuguese (Portugal))

Currently translated at 96.5% (475 of 492 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 66.2% (326 of 492 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 74.5% (367 of 492 strings)

Translated using Weblate (German)

Currently translated at 97.7% (481 of 492 strings)

Translated using Weblate (English)

Currently translated at 100.0% (492 of 492 strings)

Co-authored-by: Matthew Kilgore <matthew@kilgore.dev>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/de/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/en/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/ja/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/pt_BR/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/pt_PT/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/zh_Hans/
Translation: Homebox/Frontend
2025-07-01 00:17:05 +00:00
Weblate
acd5acd4cf Translated using Weblate (Slovak)
Currently translated at 98.7% (486 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 23:57:40 +00:00
Weblate
71dc5fcb23 Translated using Weblate (Slovak)
Currently translated at 98.5% (485 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:45:18 +00:00
Weblate
2ff5f4ca0b Translated using Weblate (Slovak)
Currently translated at 91.0% (448 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 91.0% (448 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:27:53 +00:00
Weblate
12831a40d0 Translated using Weblate (Slovak)
Currently translated at 88.6% (436 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 88.6% (436 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:25:38 +00:00
Weblate
c966090889 Translated using Weblate (Slovak)
Currently translated at 87.3% (430 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 87.3% (430 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:24:27 +00:00
Weblate
f03eb637a7 Translated using Weblate (Slovak)
Currently translated at 85.1% (419 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 85.1% (419 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:22:40 +00:00
Weblate
49ea34f352 Translated using Weblate (Slovak)
Currently translated at 83.7% (412 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 83.7% (412 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:21:36 +00:00
Weblate
85d91667eb Translated using Weblate (Slovak)
Currently translated at 81.3% (400 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 81.3% (400 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:14:34 +00:00
Weblate
458554b6e1 Translated using Weblate (Slovak)
Currently translated at 78.2% (385 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 78.2% (385 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:05:37 +00:00
Weblate
79ff5cedc6 Translated using Weblate (Slovak)
Currently translated at 77.6% (382 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 77.6% (382 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:05:00 +00:00
Weblate
f0008abd04 Translated using Weblate (Slovak)
Currently translated at 77.4% (381 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 77.4% (381 of 492 strings)

Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:04:12 +00:00
Weblate
8a377b3e4d Translated using Weblate (Slovak)
Currently translated at 77.2% (380 of 492 strings)

Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 20:03:44 +00:00
Weblate
e7d31722f7 Translated using Weblate (Slovak)
Currently translated at 77.0% (379 of 492 strings)

Translated using Weblate (Slovak)

Currently translated at 77.0% (379 of 492 strings)

Translated using Weblate (German)

Currently translated at 99.3% (489 of 492 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (492 of 492 strings)

Co-authored-by: Daniel Galle <smarthome@galle-fw.com>
Co-authored-by: Hannes Salen <hannes.salen@gmail.com>
Co-authored-by: Jose Riha <jose1711@gmail.com>
Co-authored-by: MyMemory <noreply-mt-mymemory@weblate.org>
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/de/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/nl/
Translate-URL: https://translate.sysadminsmedia.com/projects/homebox/frontend/sk/
Translation: Homebox/Frontend
2025-06-30 17:00:40 +00:00
Matthew Kilgore
52b4506e12 Fix docker builds 2025-06-29 20:44:20 -04:00
Matthew Kilgore
cb9631c999 Try this to fix the build? (More like the original) 2025-06-29 20:28:35 -04:00
Matthew Kilgore
6e3186a9de Merge remote-tracking branch 'origin/main' 2025-06-29 20:08:54 -04:00
Matthew Kilgore
a67070f965 Hopefully fix build 2025-06-29 20:08:43 -04:00
31 changed files with 322 additions and 266 deletions

View File

@@ -51,7 +51,6 @@ jobs:
- linux/amd64 - linux/amd64
- linux/arm64 - linux/arm64
- linux/arm/v7 - linux/arm/v7
- linux/riscv64
steps: steps:
- name: Enable Debug Logs - name: Enable Debug Logs

View File

@@ -51,7 +51,6 @@ jobs:
- linux/amd64 - linux/amd64
- linux/arm64 - linux/arm64
- linux/arm/v7 - linux/arm/v7
- linux/riscv64
steps: steps:
- name: Checkout repository - name: Checkout repository
@@ -199,4 +198,3 @@ jobs:
run: | run: |
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.DOCKERHUB_REPO }}@sha256:%s ' *) $(printf '${{ env.DOCKERHUB_REPO }}@sha256:%s ' *)

View File

@@ -1,5 +1,5 @@
# Node dependencies stage # Node dependencies stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/node:lts-alpine AS frontend-dependencies FROM public.ecr.aws/docker/library/node:lts-alpine AS frontend-dependencies
WORKDIR /app WORKDIR /app
# Install pnpm globally (caching layer) # Install pnpm globally (caching layer)
@@ -10,7 +10,7 @@ COPY frontend/package.json frontend/pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile RUN pnpm install --frozen-lockfile
# Build Nuxt (frontend) stage # Build Nuxt (frontend) stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/node:lts-alpine AS frontend-builder FROM public.ecr.aws/docker/library/node:lts-alpine AS frontend-builder
WORKDIR /app WORKDIR /app
# Install pnpm globally again (it can reuse the cache if not changed) # Install pnpm globally again (it can reuse the cache if not changed)
@@ -22,7 +22,7 @@ COPY --from=frontend-dependencies /app/node_modules ./node_modules
RUN pnpm build RUN pnpm build
# Go dependencies stage # Go dependencies stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/golang:alpine AS builder-dependencies FROM public.ecr.aws/docker/library/golang:alpine AS builder-dependencies
WORKDIR /go/src/app WORKDIR /go/src/app
# Copy go.mod and go.sum for better caching # Copy go.mod and go.sum for better caching
@@ -30,7 +30,7 @@ COPY ./backend/go.mod ./backend/go.sum ./
RUN go mod download RUN go mod download
# Build API stage # Build API stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/golang:alpine AS builder FROM public.ecr.aws/docker/library/golang:alpine AS builder
ARG TARGETOS ARG TARGETOS
ARG TARGETARCH ARG TARGETARCH
ARG BUILD_TIME ARG BUILD_TIME
@@ -40,7 +40,8 @@ ARG VERSION
# Install necessary build tools # Install necessary build tools
RUN apk update && \ RUN apk update && \
apk upgrade && \ apk upgrade && \
apk add --no-cache git build-base gcc g++ apk add --no-cache git build-base gcc g++ && \
if [ "$TARGETARCH" != "arm" ] || [ "$TARGETARCH" != "riscv64" ]; then apk --no-cache add libwebp libavif libheif libjxl; fi
WORKDIR /go/src/app WORKDIR /go/src/app
@@ -55,17 +56,17 @@ COPY --from=frontend-builder /app/.output/public ./app/api/static/public
# Use cache for Go build artifacts # Use cache for Go build artifacts
RUN --mount=type=cache,target=/root/.cache/go-build \ RUN --mount=type=cache,target=/root/.cache/go-build \
if [ "$TARGETARCH" = "arm" ] || [ "$TARGETARCH" = "riscv64" ]; \ if [ "$TARGETARCH" = "arm" ] || [ "$TARGETARCH" = "riscv64" ]; \
then CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build \ then echo "nodynamic" $TARGETOS $TARGETARCH; CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build \
-ldflags "-s -w -X main.commit=$COMMIT -X main.buildTime=$BUILD_TIME -X main.version=$VERSION" \ -ldflags "-s -w -X main.commit=$COMMIT -X main.buildTime=$BUILD_TIME -X main.version=$VERSION" \
-tags nodynamic -o /go/bin/api -v ./app/api/*.go; \ -tags nodynamic -o /go/bin/api -v ./app/api/*.go; \
else \ else \
CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build \ echo $TARGETOS $TARGETARCH; CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build \
-ldflags "-s -w -X main.commit=$COMMIT -X main.buildTime=$BUILD_TIME -X main.version=$VERSION" \ -ldflags "-s -w -X main.commit=$COMMIT -X main.buildTime=$BUILD_TIME -X main.version=$VERSION" \
-o /go/bin/api -v ./app/api/*.go; \ -o /go/bin/api -v ./app/api/*.go; \
fi fi
# Production stage # Production stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/alpine:latest FROM public.ecr.aws/docker/library/alpine:latest
ENV HBOX_MODE=production ENV HBOX_MODE=production
ENV HBOX_STORAGE_CONN_STRING=file:///?no_tmp_dir=true ENV HBOX_STORAGE_CONN_STRING=file:///?no_tmp_dir=true
ENV HBOX_STORAGE_PREFIX_PATH=data ENV HBOX_STORAGE_PREFIX_PATH=data
@@ -73,7 +74,7 @@ ENV HBOX_DATABASE_SQLITE_PATH=/data/homebox.db?_pragma=busy_timeout=2000&_pragma
# Install necessary runtime dependencies # Install necessary runtime dependencies
RUN apk --no-cache add ca-certificates wget && \ RUN apk --no-cache add ca-certificates wget && \
if [ "$TARGETARCH" != "arm" ] || [ "$TARGETARCH" != "riscv64" ]; then apk --no-cache add libwebp libavif; fi if [ "$TARGETARCH" != "arm" ] || [ "$TARGETARCH" != "riscv64" ]; then apk --no-cache add libwebp libavif libheif libjxl; fi
# Create application directory and copy over built Go binary # Create application directory and copy over built Go binary
RUN mkdir /app RUN mkdir /app

View File

@@ -1,5 +1,5 @@
# Node dependencies stage # Node dependencies stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/node:lts-alpine AS frontend-dependencies FROM public.ecr.aws/docker/library/node:lts-alpine AS frontend-dependencies
WORKDIR /app WORKDIR /app
# Install pnpm globally (caching layer) # Install pnpm globally (caching layer)
@@ -10,7 +10,7 @@ COPY frontend/package.json frontend/pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile RUN pnpm install --frozen-lockfile
# Build Nuxt (frontend) stage # Build Nuxt (frontend) stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/node:lts-alpine AS frontend-builder FROM public.ecr.aws/docker/library/node:lts-alpine AS frontend-builder
WORKDIR /app WORKDIR /app
# Install pnpm globally again (it can reuse the cache if not changed) # Install pnpm globally again (it can reuse the cache if not changed)
@@ -22,7 +22,7 @@ COPY --from=frontend-dependencies /app/node_modules ./node_modules
RUN pnpm build RUN pnpm build
# Go dependencies stage # Go dependencies stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/golang:alpine AS builder-dependencies FROM public.ecr.aws/docker/library/golang:alpine AS builder-dependencies
WORKDIR /go/src/app WORKDIR /go/src/app
# Copy go.mod and go.sum for better caching # Copy go.mod and go.sum for better caching
@@ -30,7 +30,9 @@ COPY ./backend/go.mod ./backend/go.sum ./
RUN go mod download RUN go mod download
# Build API stage # Build API stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/golang:alpine AS builder FROM public.ecr.aws/docker/library/golang:alpine AS builder
ARG TARGETOS
ARG TARGETARCH
ARG BUILD_TIME ARG BUILD_TIME
ARG COMMIT ARG COMMIT
ARG VERSION ARG VERSION
@@ -38,7 +40,8 @@ ARG VERSION
# Install necessary build tools # Install necessary build tools
RUN apk update && \ RUN apk update && \
apk upgrade && \ apk upgrade && \
apk add --no-cache git build-base gcc g++ apk add --no-cache git build-base gcc g++ && \
if [ "$TARGETARCH" != "arm" ] || [ "$TARGETARCH" != "riscv64" ]; then apk --no-cache add libwebp libavif libheif libjxl; fi
WORKDIR /go/src/app WORKDIR /go/src/app
@@ -53,11 +56,11 @@ COPY --from=frontend-builder /app/.output/public ./app/api/static/public
# Use cache for Go build artifacts # Use cache for Go build artifacts
RUN --mount=type=cache,target=/root/.cache/go-build \ RUN --mount=type=cache,target=/root/.cache/go-build \
if [ "$TARGETARCH" = "arm" ] || [ "$TARGETARCH" = "riscv64" ]; \ if [ "$TARGETARCH" = "arm" ] || [ "$TARGETARCH" = "riscv64" ]; \
then CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build \ then echo "nodynamic" $TARGETOS $TARGETARCH; CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build \
-ldflags "-s -w -X main.commit=$COMMIT -X main.buildTime=$BUILD_TIME -X main.version=$VERSION" \ -ldflags "-s -w -X main.commit=$COMMIT -X main.buildTime=$BUILD_TIME -X main.version=$VERSION" \
-tags nodynamic -o /go/bin/api -v ./app/api/*.go; \ -tags nodynamic -o /go/bin/api -v ./app/api/*.go; \
else \ else \
CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build \ echo $TARGETOS $TARGETARCH; CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build \
-ldflags "-s -w -X main.commit=$COMMIT -X main.buildTime=$BUILD_TIME -X main.version=$VERSION" \ -ldflags "-s -w -X main.commit=$COMMIT -X main.buildTime=$BUILD_TIME -X main.version=$VERSION" \
-o /go/bin/api -v ./app/api/*.go; \ -o /go/bin/api -v ./app/api/*.go; \
fi fi
@@ -65,7 +68,7 @@ RUN --mount=type=cache,target=/root/.cache/go-build \
RUN mkdir /data RUN mkdir /data
# Production stage # Production stage
FROM --platform=$BUILDPLATFORM public.ecr.aws/docker/library/alpine:latest FROM public.ecr.aws/docker/library/alpine:latest
ENV HBOX_MODE=production ENV HBOX_MODE=production
ENV HBOX_STORAGE_CONN_STRING=file:///?no_tmp_dir=true ENV HBOX_STORAGE_CONN_STRING=file:///?no_tmp_dir=true
ENV HBOX_STORAGE_PREFIX_PATH=data ENV HBOX_STORAGE_PREFIX_PATH=data
@@ -73,7 +76,7 @@ ENV HBOX_DATABASE_SQLITE_PATH=/data/homebox.db?_pragma=busy_timeout=2000&_pragma
# Install necessary runtime dependencies # Install necessary runtime dependencies
RUN apk --no-cache add ca-certificates wget && \ RUN apk --no-cache add ca-certificates wget && \
if [ "$TARGETARCH" != "arm" ] || [ "$TARGETARCH" != "riscv64" ]; then apk --no-cache add libwebp libavif; fi if [ "$TARGETARCH" != "arm" ] || [ "$TARGETARCH" != "riscv64" ]; then apk --no-cache add libwebp libavif libheif libjxl; fi
# Create a nonroot user with UID/GID 65532 # Create a nonroot user with UID/GID 65532
RUN addgroup -g 65532 nonroot && adduser -u 65532 -G nonroot -S nonroot RUN addgroup -g 65532 nonroot && adduser -u 65532 -G nonroot -S nonroot

View File

@@ -31,9 +31,6 @@ builds:
{{- else if eq .Arch "arm" }}nodynamic {{- else if eq .Arch "arm" }}nodynamic
{{- else if eq .Arch "386" }}nodynamic {{- else if eq .Arch "386" }}nodynamic
{{ end }} {{ end }}
sboms:
- disable: false
artifacts: any
signs: signs:
- cmd: cosign - cmd: cosign

View File

@@ -3,6 +3,7 @@ package v1
import ( import (
"errors" "errors"
"net/http" "net/http"
"net/url"
"path/filepath" "path/filepath"
"strconv" "strconv"
"strings" "strings"
@@ -174,7 +175,7 @@ func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r
ctx := services.NewContext(r.Context()) ctx := services.NewContext(r.Context())
switch r.Method { switch r.Method {
case http.MethodGet: case http.MethodGet:
doc, err := ctrl.svc.Items.AttachmentPath(r.Context(), attachmentID) doc, err := ctrl.svc.Items.AttachmentPath(r.Context(), ctx.GID, attachmentID)
if err != nil { if err != nil {
log.Err(err).Msg("failed to get attachment path") log.Err(err).Msg("failed to get attachment path")
return validate.NewRequestError(err, http.StatusInternalServerError) return validate.NewRequestError(err, http.StatusInternalServerError)
@@ -203,7 +204,9 @@ func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r
} }
}(bucket) }(bucket)
w.Header().Set("Content-Disposition", "attachment; filename="+doc.Title) // Set the Content-Disposition header for RFC6266 compliance
disposition := "attachment; filename*=UTF-8''" + url.QueryEscape(doc.Title)
w.Header().Set("Content-Disposition", disposition)
http.ServeContent(w, r, doc.Title, doc.CreatedAt, file) http.ServeContent(w, r, doc.Title, doc.CreatedAt, file)
return nil return nil
@@ -227,9 +230,9 @@ func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r
} }
attachment.ID = attachmentID attachment.ID = attachmentID
val, err := ctrl.svc.Items.AttachmentUpdate(ctx, ID, &attachment) val, err := ctrl.svc.Items.AttachmentUpdate(ctx, ctx.GID, ID, &attachment)
if err != nil { if err != nil {
log.Err(err).Msg("failed to delete attachment") log.Err(err).Msg("failed to update attachment")
return validate.NewRequestError(err, http.StatusInternalServerError) return validate.NewRequestError(err, http.StatusInternalServerError)
} }

View File

@@ -10,8 +10,8 @@ import (
"io" "io"
) )
func (svc *ItemService) AttachmentPath(ctx context.Context, attachmentID uuid.UUID) (*ent.Attachment, error) { func (svc *ItemService) AttachmentPath(ctx context.Context, gid uuid.UUID, attachmentID uuid.UUID) (*ent.Attachment, error) {
attachment, err := svc.repo.Attachments.Get(ctx, attachmentID) attachment, err := svc.repo.Attachments.Get(ctx, gid, attachmentID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -19,16 +19,16 @@ func (svc *ItemService) AttachmentPath(ctx context.Context, attachmentID uuid.UU
return attachment, nil return attachment, nil
} }
func (svc *ItemService) AttachmentUpdate(ctx Context, itemID uuid.UUID, data *repo.ItemAttachmentUpdate) (repo.ItemOut, error) { func (svc *ItemService) AttachmentUpdate(ctx Context, gid uuid.UUID, itemID uuid.UUID, data *repo.ItemAttachmentUpdate) (repo.ItemOut, error) {
// Update Attachment // Update Attachment
attachment, err := svc.repo.Attachments.Update(ctx, data.ID, data) attachment, err := svc.repo.Attachments.Update(ctx, gid, data.ID, data)
if err != nil { if err != nil {
return repo.ItemOut{}, err return repo.ItemOut{}, err
} }
// Update Document // Update Document
attDoc := attachment attDoc := attachment
_, err = svc.repo.Attachments.Rename(ctx, attDoc.ID, data.Title) _, err = svc.repo.Attachments.Rename(ctx, gid, attDoc.ID, data.Title)
if err != nil { if err != nil {
return repo.ItemOut{}, err return repo.ItemOut{}, err
} }
@@ -57,7 +57,7 @@ func (svc *ItemService) AttachmentAdd(ctx Context, itemID uuid.UUID, filename st
func (svc *ItemService) AttachmentDelete(ctx context.Context, gid uuid.UUID, id uuid.UUID, attachmentID uuid.UUID) error { func (svc *ItemService) AttachmentDelete(ctx context.Context, gid uuid.UUID, id uuid.UUID, attachmentID uuid.UUID) error {
// Delete the attachment // Delete the attachment
err := svc.repo.Attachments.Delete(ctx, attachmentID) err := svc.repo.Attachments.Delete(ctx, gid, id, attachmentID)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -256,16 +256,46 @@ func (r *AttachmentRepo) Create(ctx context.Context, itemID uuid.UUID, doc ItemC
return attachmentDb, nil return attachmentDb, nil
} }
func (r *AttachmentRepo) Get(ctx context.Context, id uuid.UUID) (*ent.Attachment, error) { func (r *AttachmentRepo) Get(ctx context.Context, gid uuid.UUID, id uuid.UUID) (*ent.Attachment, error) {
return r.db.Attachment. first, err := r.db.Attachment.Query().Where(attachment.ID(id)).Only(ctx)
Query(). if err != nil {
Where(attachment.ID(id)). return nil, err
WithItem(). }
WithThumbnail(). if first.Type == attachment.TypeThumbnail {
Only(ctx) // If the attachment is a thumbnail, get the parent attachment and check if it belongs to the specified group
return r.db.Attachment.
Query().
Where(attachment.ID(id),
attachment.HasThumbnailWith(attachment.HasItemWith(item.HasGroupWith(group.ID(gid)))),
).
WithItem().
WithThumbnail().
Only(ctx)
} else {
// For regular attachments, check if the attachment's item belongs to the specified group
return r.db.Attachment.
Query().
Where(attachment.ID(id),
attachment.HasItemWith(item.HasGroupWith(group.ID(gid))),
).
WithItem().
WithThumbnail().
Only(ctx)
}
} }
func (r *AttachmentRepo) Update(ctx context.Context, id uuid.UUID, data *ItemAttachmentUpdate) (*ent.Attachment, error) { func (r *AttachmentRepo) Update(ctx context.Context, gid uuid.UUID, id uuid.UUID, data *ItemAttachmentUpdate) (*ent.Attachment, error) {
// Validate that the attachment belongs to the specified group
_, err := r.db.Attachment.Query().
Where(
attachment.ID(id),
attachment.HasItemWith(item.HasGroupWith(group.ID(gid))),
).
Only(ctx)
if err != nil {
return nil, err
}
// TODO: execute within Tx // TODO: execute within Tx
typ := attachment.Type(data.Type) typ := attachment.Type(data.Type)
@@ -301,13 +331,19 @@ func (r *AttachmentRepo) Update(ctx context.Context, id uuid.UUID, data *ItemAtt
return nil, err return nil, err
} }
return r.Get(ctx, updatedAttachment.ID) return r.Get(ctx, gid, updatedAttachment.ID)
} }
func (r *AttachmentRepo) Delete(ctx context.Context, id uuid.UUID) error { func (r *AttachmentRepo) Delete(ctx context.Context, gid uuid.UUID, itemId uuid.UUID, id uuid.UUID) error {
doc, error := r.db.Attachment.Get(ctx, id) // Validate that the attachment belongs to the specified group
if error != nil { doc, err := r.db.Attachment.Query().
return error Where(
attachment.ID(id),
attachment.HasItemWith(item.HasGroupWith(group.ID(gid))),
).
Only(ctx)
if err != nil {
return err
} }
all, err := r.db.Attachment.Query().Where(attachment.Path(doc.Path)).All(ctx) all, err := r.db.Attachment.Query().Where(attachment.Path(doc.Path)).All(ctx)
@@ -358,7 +394,18 @@ func (r *AttachmentRepo) Delete(ctx context.Context, id uuid.UUID) error {
return r.db.Attachment.DeleteOneID(id).Exec(ctx) return r.db.Attachment.DeleteOneID(id).Exec(ctx)
} }
func (r *AttachmentRepo) Rename(ctx context.Context, id uuid.UUID, title string) (*ent.Attachment, error) { func (r *AttachmentRepo) Rename(ctx context.Context, gid uuid.UUID, id uuid.UUID, title string) (*ent.Attachment, error) {
// Validate that the attachment belongs to the specified group
_, err := r.db.Attachment.Query().
Where(
attachment.ID(id),
attachment.HasItemWith(item.HasGroupWith(group.ID(gid))),
).
Only(ctx)
if err != nil {
return nil, err
}
return r.db.Attachment.UpdateOneID(id).SetTitle(title).Save(ctx) return r.db.Attachment.UpdateOneID(id).SetTitle(title).Save(ctx)
} }

View File

@@ -3,7 +3,7 @@ services:
image: homebox image: homebox
build: build:
context: . context: .
dockerfile: ./Dockerfile dockerfile: ./Dockerfile.rootless
args: args:
- COMMIT=head - COMMIT=head
- BUILD_TIME=0001-01-01T00:00:00Z - BUILD_TIME=0001-01-01T00:00:00Z
@@ -12,7 +12,6 @@ services:
- linux/amd64 - linux/amd64
- linux/arm64 - linux/arm64
- linux/arm/v7 - linux/arm/v7
- linux/riscv64
environment: environment:
- HBOX_DEBUG=true - HBOX_DEBUG=true
- HBOX_LOGGER_LEVEL=-1 - HBOX_LOGGER_LEVEL=-1

View File

@@ -41,7 +41,6 @@
class="absolute left-0 top-0 size-full cursor-pointer opacity-0" class="absolute left-0 top-0 size-full cursor-pointer opacity-0"
type="file" type="file"
accept="image/png,image/jpeg,image/gif,image/avif,image/webp;capture=camera" accept="image/png,image/jpeg,image/gif,image/avif,image/webp;capture=camera"
capture="environment"
multiple multiple
@change="previewImage" @change="previewImage"
/> />

View File

@@ -204,7 +204,7 @@
"follow_dev": "Sledovat vývojáře", "follow_dev": "Sledovat vývojáře",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/v'{ version }\" target=\"_blank\"> Verze: { version } Sestavení: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Verze: { version } Sestavení: { build } '</a>'"
}, },
"github": "GitHub projekt", "github": "GitHub projekt",
"insured": "Pojištěné", "insured": "Pojištěné",

View File

@@ -24,6 +24,12 @@
"new_version_available_link": "Klicken Sie hier, um die Release Notes anzuzeigen" "new_version_available_link": "Klicken Sie hier, um die Release Notes anzuzeigen"
} }
}, },
"color_selector": {
"clear": "Farbe löschen",
"color": "Farbe",
"no_color": "Keine Farbe",
"no_color_selected": "Keine Farbe ausgewählt"
},
"form": { "form": {
"password": { "password": {
"toggle_show": "Passwort anzeigen" "toggle_show": "Passwort anzeigen"
@@ -107,8 +113,8 @@
"rotate_process_failed": "Das gedrehte Bild konnte nicht verarbeitet werden", "rotate_process_failed": "Das gedrehte Bild konnte nicht verarbeitet werden",
"some_photos_failed": "{Anzahl, Plural, =0 {Keine Fotos zum Hochladen.} =1 {1 Foto konnte nicht hochgeladen werden.} andere {Einige Fotos konnten nicht hochgeladen werden.}}", "some_photos_failed": "{Anzahl, Plural, =0 {Keine Fotos zum Hochladen.} =1 {1 Foto konnte nicht hochgeladen werden.} andere {Einige Fotos konnten nicht hochgeladen werden.}}",
"upload_failed": "Hochladen des Bildes Fehlgeschlagen: { photoName }", "upload_failed": "Hochladen des Bildes Fehlgeschlagen: { photoName }",
"upload_success": "{Anzahl, Plural, =0 {Keine Fotos hochgeladen.} =1 {Foto erfolgreich hochgeladen.} andere {Alle Fotos erfolgreich hochgeladen.}}", "upload_success": "{Anzahl, plural, =0 {Keine Fotos hochgeladen.} =1 {Foto erfolgreich hochgeladen.} other {Alle Fotos erfolgreich hochgeladen.}}",
"uploading_photos": "{Anzahl, Plural, =0 {Keine Fotos zum Hochladen} =1 {1 Foto wird hochgeladen...} andere {{Anzahl} Fotos werden hochgeladen...}}" "uploading_photos": "{Anzahl, plural, =0 {Keine Fotos zum Hochladen} =1 {1 Foto wird hochgeladen...} other {{Anzahl} Fotos werden hochgeladen...}}"
}, },
"upload_photos": "Upload Bilder", "upload_photos": "Upload Bilder",
"uploaded": "Bild hochgeladen" "uploaded": "Bild hochgeladen"
@@ -196,7 +202,7 @@
"follow_dev": "Dem Entwickler folgen", "follow_dev": "Dem Entwickler folgen",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Version: { version } Erstellt: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Version: { version } Erstellt: { build } '</a>'"
}, },
"github": "GitHub-Projekt", "github": "GitHub-Projekt",
"insured": "Versichert", "insured": "Versichert",

View File

@@ -115,15 +115,15 @@
"some_photos_failed": "{count, plural, =0 {No photos to upload.} =1 {1 photo failed to upload.} other {Some photos failed to upload.}}", "some_photos_failed": "{count, plural, =0 {No photos to upload.} =1 {1 photo failed to upload.} other {Some photos failed to upload.}}",
"upload_failed": "Failed to upload photo: { photoName }", "upload_failed": "Failed to upload photo: { photoName }",
"upload_success": "{count, plural, =0 {No photos uploaded.} =1 {Photo uploaded successfully.} other {All photos uploaded successfully.}}", "upload_success": "{count, plural, =0 {No photos uploaded.} =1 {Photo uploaded successfully.} other {All photos uploaded successfully.}}",
"uploading_photos": "{count, plural, =0 {No photos to upload} =1 {Uploading 1 photo...} other {Uploading {count} photos...}}" "uploading_photos": "{count, plural, =0 {No photos to upload} =1 {Uploading 1 photo} other {Uploading {count} photos}}"
}, },
"upload_photos": "Upload Photos", "upload_photos": "Upload Photos",
"uploaded": "Uploaded Photo" "uploaded": "Uploaded Photo"
}, },
"selector": { "selector": {
"no_results": "No Results Found", "no_results": "No Results Found",
"placeholder": "Select...", "placeholder": "Select",
"search_placeholder": "Type to search..." "search_placeholder": "Type to search"
}, },
"view": { "view": {
"selectable": { "selectable": {
@@ -176,7 +176,7 @@
"select_location": "Select a Location" "select_location": "Select a Location"
}, },
"tree": { "tree": {
"no_locations": "No locations available. Add new locations through the\n `<`span class=\"link-primary\"`>`Create`<`/span`>` button on the navigation bar." "no_locations": "No locations available. Add new locations through the\n '<span class=\"link-primary\">'Create'</span>' button on the navigation bar."
} }
}, },
"quick_menu": { "quick_menu": {
@@ -204,14 +204,14 @@
"follow_dev": "Follow the Developer", "follow_dev": "Follow the Developer",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/v'{ version }\" target=\"_blank\"> Version: { version } Build: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Version: { version } Build: { build } '</a>'"
}, },
"github": "GitHub Project", "github": "GitHub Project",
"insured": "Insured", "insured": "Insured",
"items": "Items", "items": "Items",
"join_discord": "Join the Discord", "join_discord": "Join the Discord",
"labels": "Labels", "labels": "Labels",
"loading": "Loading...", "loading": "Loading",
"locations": "Locations", "locations": "Locations",
"maintenance": "Maintenance", "maintenance": "Maintenance",
"name": "Name", "name": "Name",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Seguir al Desarrollador", "follow_dev": "Seguir al Desarrollador",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Versión: { version } Compilación: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Versión: { version } Compilación: { build } '</a>'"
}, },
"github": "Proyecto GitHub", "github": "Proyecto GitHub",
"insured": "Asegurado", "insured": "Asegurado",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Seuraa kehittäjää", "follow_dev": "Seuraa kehittäjää",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Versio: { version } Rakenna: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Versio: { version } Rakenna: { build } '</a>'"
}, },
"github": "GitHub Projekti", "github": "GitHub Projekti",
"insured": "Vakuuttaa", "insured": "Vakuuttaa",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Suivre le développeur", "follow_dev": "Suivre le développeur",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Version : { version } Commit : { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Version : { version } Commit : { build } '</a>'"
}, },
"github": "Projet GitHub", "github": "Projet GitHub",
"insured": "Assuré", "insured": "Assuré",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Kövesd a fejlesztőt", "follow_dev": "Kövesd a fejlesztőt",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Verzió: { version } Build: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Verzió: { version } Build: { build } '</a>'"
}, },
"github": "Github projekt", "github": "Github projekt",
"insured": "Biztosítva", "insured": "Biztosítva",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Segui lo Sviluppatore", "follow_dev": "Segui lo Sviluppatore",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Versione: { version } Build: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Versione: { version } Build: { build } '</a>'"
}, },
"github": "Progetto GitHub", "github": "Progetto GitHub",
"insured": "Assicurato", "insured": "Assicurato",

View File

@@ -587,7 +587,7 @@
"import": "インポート (CSVの取り込み)", "import": "インポート (CSVの取り込み)",
"import_button": "CSVファイルを選択", "import_button": "CSVファイルを選択",
"import_ref_confirm": "", "import_ref_confirm": "",
"import_sub": "Homeboxで利用可能なCSVファイルをインポートします。'<br>''<code>'HB.import_ref'</code>'が存在しないアイテムに重複がある場合は上書きされません。'<br>''<code>'HB.import_ref'</code>'が存在するアイテムに重複がある場合は、同じ'<code>'HB.import_ref'</code>'を持つアイテムのデータが上書きされます。'<br>'どちらも、重複していない場合は関係なく追加されます。" "import_sub": "Homeboxで利用可能なCSVファイルをインポートします。\n'<code>'HB.import_ref'</code>'が存在しないアイテムに重複がある場合は上書きされません。\n'<code>'HB.import_ref'</code>'が存在するアイテムに重複がある場合は、同じ'<code>'HB.import_ref'</code>'を持つアイテムのデータが上書きされます。\nどちらも、重複していない場合は関係なく追加されます。"
}, },
"import_export_sub": "登録されたアイテムをCSVファイルにインポートおよびエクスポートします。Homeboxのソフトウェアを切り替える場合などに便利です。", "import_export_sub": "登録されたアイテムをCSVファイルにインポートおよびエクスポートします。Homeboxのソフトウェアを切り替える場合などに便利です。",
"reports": "レポート", "reports": "レポート",

View File

@@ -204,7 +204,7 @@
"follow_dev": "Følg utvikleren", "follow_dev": "Følg utvikleren",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Versjon: { version } Bygg: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Versjon: { version } Bygg: { build } '</a>'"
}, },
"github": "GitHub-prosjekt", "github": "GitHub-prosjekt",
"insured": "Forsikret", "insured": "Forsikret",

View File

@@ -204,7 +204,7 @@
"follow_dev": "Volg de ontwikkelaar", "follow_dev": "Volg de ontwikkelaar",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/v'{ version }\" target=\"_blank\"> Version: { version } Build: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Version: { version } Build: { build } '</a>'"
}, },
"github": "GitHub Project", "github": "GitHub Project",
"insured": "Verzekerd", "insured": "Verzekerd",
@@ -571,7 +571,7 @@
"actions": "Acties inventariseren", "actions": "Acties inventariseren",
"actions_set": { "actions_set": {
"create_missing_thumbnails": "Ontbrekende miniaturen maken", "create_missing_thumbnails": "Ontbrekende miniaturen maken",
"create_missing_thumbnails_button": "Nieuwe thumbnails aanmaken", "create_missing_thumbnails_button": "Nieuwe miniaturen aanmaken",
"create_missing_thumbnails_confirm": "Weet u zeker dat u ontbrekende miniaturen wilt maken? Dit kan even duren en kan niet worden gepauzeerd.", "create_missing_thumbnails_confirm": "Weet u zeker dat u ontbrekende miniaturen wilt maken? Dit kan even duren en kan niet worden gepauzeerd.",
"create_missing_thumbnails_sub": "Maakt miniaturen voor alle bijlagen die worden ondersteund door de huidige configuratie. Dit is handig voor bijlagen die werden geüpload voor de v0.20.0 release van Homebox. Bestaande miniaturen worden niet overschreven, er worden alleen nieuwe miniaturen gemaakt voor bijlagen die geen miniatuurafbeelding hebben. Houd er rekening mee dat de miniaturen in de achtergrond worden gemaakt en dat dit een tijdje kan duren.", "create_missing_thumbnails_sub": "Maakt miniaturen voor alle bijlagen die worden ondersteund door de huidige configuratie. Dit is handig voor bijlagen die werden geüpload voor de v0.20.0 release van Homebox. Bestaande miniaturen worden niet overschreven, er worden alleen nieuwe miniaturen gemaakt voor bijlagen die geen miniatuurafbeelding hebben. Houd er rekening mee dat de miniaturen in de achtergrond worden gemaakt en dat dit een tijdje kan duren.",
"ensure_ids": "Zorg voor item-ID's", "ensure_ids": "Zorg voor item-ID's",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Śledź dewelopera", "follow_dev": "Śledź dewelopera",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Wersja: { version } Build: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"'>' Wersja: { version } Build: { build } '</a>'"
}, },
"github": "Projekt na GitHubie", "github": "Projekt na GitHubie",
"insured": "Ubezpieczony", "insured": "Ubezpieczony",

View File

@@ -168,7 +168,7 @@
"select_location": "Selecionar um Local" "select_location": "Selecionar um Local"
}, },
"tree": { "tree": {
"no_locations": "Não há locais disponíveis. Adicione novos locais\n através do botão \"Criar\" na barra de navegação." "no_locations": "Não há locais disponíveis. Adicione novos locais\n através do botão '<span class=\"link-primary\">'Criar'</span>' na barra de navegação."
} }
}, },
"quick_menu": { "quick_menu": {
@@ -196,7 +196,7 @@
"follow_dev": "Seguir o desenvolvedor", "follow_dev": "Seguir o desenvolvedor",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Versão: { version } Compilação: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Versão: { version } Compilação: { build } '</a>'"
}, },
"github": "Projeto GitHub", "github": "Projeto GitHub",
"insured": "Segurado", "insured": "Segurado",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Siga o Desenvolvedor", "follow_dev": "Siga o Desenvolvedor",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Versão: { version } Compilação: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Versão: { version } Compilação: { build } '</a>'"
}, },
"github": "Projeto GitHub", "github": "Projeto GitHub",
"insured": "Com seguro", "insured": "Com seguro",

View File

@@ -7,12 +7,12 @@
"shift": "Shift" "shift": "Shift"
}, },
"import_dialog": { "import_dialog": {
"change_warning": "Správanie pre importy s existujúcimi import_refs sa zmenilo. Ak sa v súbore CSV nachádza import_ref,\npoložka bude aktualizovaná hodnotami v súbore CSV.", "change_warning": "Správanie importov s existujúcimi import_refs sa zmenilo. Ak sa v súbore CSV nachádza import_ref,\npoložka bude aktualizovaná hodnotami v súbore CSV.",
"description": "Importujte súbor CSV obsahujúci vaše položky, štítky a miesta. Ďalšie informácie nájdete v dokumentácii\npožadovaný formát.", "description": "Importujte súbor CSV obsahujúci vaše položky, štítky a miesta. Ďalšie informácie o vyžadovanom formáte importu\nnájdete v dokumentácii.",
"title": "Importovať súbor CSV", "title": "Importovať súbor CSV",
"toast": { "toast": {
"import_failed": "Import skončil s chybou. Skúste to, prosím, neskôr.", "import_failed": "Import skončil s chybou. Skúste to, prosím, neskôr.",
"import_success": "Import bol úspešný!", "import_success": "Import prebehol úspešne!",
"please_select_file": "Prosím, vyberte súbor, ktorý sa má naimportovať." "please_select_file": "Prosím, vyberte súbor, ktorý sa má naimportovať."
} }
}, },
@@ -81,8 +81,8 @@
} }
}, },
"page_qr_code": { "page_qr_code": {
"page_url": "URL stránka", "page_url": "URL adresa stránky",
"qr_tooltip": "Zobraz QR kód" "qr_tooltip": "Zobraz QR kód"
}, },
"password_score": { "password_score": {
"password_strength": "Sila hesla" "password_strength": "Sila hesla"
@@ -94,36 +94,36 @@
"open_new_tab": "Otvoriť na novej karte" "open_new_tab": "Otvoriť na novej karte"
}, },
"create_modal": { "create_modal": {
"delete_photo": "Vymazať fotku", "delete_photo": "Vymazať fotografiu",
"item_description": "Popis položky", "item_description": "Popis položky",
"item_name": "Názov položky", "item_name": "Názov položky",
"item_photo": "Obrázok predmetu 📷", "item_photo": "Fotografia predmetu 📷",
"item_quantity": "Počet predmetov", "item_quantity": "Počet predmetov",
"parent_item": "Nadradená položka", "parent_item": "Nadradená položka",
"rotate_photo": "Otočiť fotku", "rotate_photo": "Otočiť fotografiu",
"set_as_primary_photo": "", "set_as_primary_photo": "Nastaviť ako { isPrimary, select, true {non-} false {} other {}}primárnu fotografiu",
"title": "Vytvoriť položku", "title": "Vytvoriť položku",
"toast": { "toast": {
"already_creating": "", "already_creating": "Už vytváram položku",
"create_failed": "", "create_failed": "Nepodarilo sa vytvoriť položku",
"create_success": "", "create_success": "Položka bola vytvorená",
"failed_load_parent": "", "failed_load_parent": "Nadradenú položku sa nepodarilo načítať - vyberte ju, prosím, ručne",
"no_canvas_support": "", "no_canvas_support": "Váš prehliadač nepodporuje operácie canvas",
"please_select_location": "", "please_select_location": "Prosím, vyberte miesto.",
"rotate_failed": "", "rotate_failed": "Obrázok sa nepodarilo otočiť: { error }",
"rotate_process_failed": "", "rotate_process_failed": "Nepodarilo sa spracovať otočený obrázok",
"some_photos_failed": "", "some_photos_failed": "{count, plural, =0 {Žiadne fotografie na nahranie.} =1 {1 fotografiu sa nepodarilo nahrať.} other {Niektoré fotografie sa nepodarilo nahrať.}}",
"upload_failed": "", "upload_failed": "Nepodarilo sa nahrať fotografiu: { photoName }",
"upload_success": "", "upload_success": "{count, plural, =0 {Žiadne fotografie neboli nahrané.} =1 {Fotografia bola úspešne nahraná.} other {Všetky fotografie boli úspešne nahrané.}}",
"uploading_photos": "" "uploading_photos": "{count, plural, =0 {Žiadne fotografie na nahranie} =1 {Nahrávam 1 fotografiu...} other {Nahrávam {count} fotografií...}}"
}, },
"upload_photos": "Nahraj fotky", "upload_photos": "Nahrať fotografie",
"uploaded": "" "uploaded": "Nahraná fotografia"
}, },
"selector": { "selector": {
"no_results": "", "no_results": "Nenašli sa žiadne výsledky",
"placeholder": "", "placeholder": "Vybrať...",
"search_placeholder": "" "search_placeholder": "Zadajte, čo chcete vyhľadať..."
}, },
"view": { "view": {
"selectable": { "selectable": {
@@ -134,10 +134,10 @@
}, },
"table": { "table": {
"headers": "Hlavička", "headers": "Hlavička",
"page": "Stránka", "page": "Strana",
"rows_per_page": "Počet riadkov na stránku", "rows_per_page": "Počet riadkov na stranu",
"table_settings": "Nastavenie tabuľky", "table_settings": "Nastavenie tabuľky",
"view_item": "" "view_item": "Zobraziť položku"
} }
} }
}, },
@@ -148,10 +148,10 @@
"label_name": "Názov štítku", "label_name": "Názov štítku",
"title": "Vytvoriť štítok", "title": "Vytvoriť štítok",
"toast": { "toast": {
"already_creating": "", "already_creating": "Štítok sa už vytvára",
"create_failed": "", "create_failed": "Nepodarilo sa vytvoriť štítok",
"create_success": "Štítok bol vytvorený", "create_success": "Štítok bol vytvorený",
"label_name_too_long": "Meno štítku nesmie byť dlhšie ako 50 znakov" "label_name_too_long": "Názov štítku nesmie byť dlhší ako 50 znakov"
} }
}, },
"selector": { "selector": {
@@ -162,71 +162,71 @@
"create_modal": { "create_modal": {
"location_description": "Popis miesta", "location_description": "Popis miesta",
"location_name": "Názov miesta", "location_name": "Názov miesta",
"title": "Vytvoriť polohu", "title": "Vytvoriť miesto",
"toast": { "toast": {
"already_creating": "Lokalita sa už vytvára", "already_creating": "Miesto sa už vytvára",
"create_failed": "", "create_failed": "Nepodarilo sa vytvoriť miesto",
"create_success": "" "create_success": "Miesto bolo vytvorené"
} }
}, },
"selector": { "selector": {
"no_location_found": "Poloha nenájdená", "no_location_found": "Miesto nebolo nájdené",
"parent_location": "Poloha rodiča", "parent_location": "Miesto nadradenej položky",
"search_location": "", "search_location": "Prehľadávať miesta",
"select_location": "" "select_location": "Vyberte miesto"
}, },
"tree": { "tree": {
"no_locations": "Nie sú k dispozícii žiadne miesta. Pridajte nové miesta cez\n `<`span class=\"link-primary\"`>`Vytvoriť`<`/span`>` na navigačnom paneli." "no_locations": "Nie sú k dispozícii žiadne miesta. Pridajte nové miesta cez\n `<`span class=\"link-primary\"`>`Vytvoriť`<`/span`>` na navigačnom paneli."
} }
}, },
"quick_menu": { "quick_menu": {
"no_results": "", "no_results": "Nenašli sa žiadne výsledky.",
"shortcut_hint": "Pomocou číselných tlačidiel rýchlo vyberte akciu." "shortcut_hint": "Pomocou číselných tlačidiel rýchlo vyberte akciu."
} }
}, },
"global": { "global": {
"add": "Pridať", "add": "Pridať",
"archived": "", "archived": "Archivované",
"build": "Zostava: { build }", "build": "Zostava: { build }",
"cancel": "", "cancel": "Zrušiť",
"confirm": "Potvrďte", "confirm": "Potvrďte",
"create": "Vytvorte", "create": "Vytvor",
"create_and_add": "Vytvoriť a pridať ďalšie", "create_and_add": "Vytvoriť a pridať ďalšie",
"create_subitem": "", "create_subitem": "Vytvoriť podpoložku",
"created": "Vytvorené", "created": "Vytvorené",
"delete": "Odstrániť", "delete": "Odstrániť",
"delete_confirm": "", "delete_confirm": "Naozaj chcete odstrániť túto položku? ",
"demo_instance": "", "demo_instance": "Toto je ukážková inštancia",
"details": "Podrobnosti", "details": "Podrobnosti",
"duplicate": "Duplicitné", "duplicate": "Duplikovať",
"edit": "Upraviť", "edit": "Upraviť",
"email": "Email", "email": "Email",
"follow_dev": "Sledujte vývojára", "follow_dev": "Sledujte vývojára",
"footer": { "footer": {
"api_link": "", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Verzia: { version } Zostavenie: { build } '</a>'"
}, },
"github": "Projekt GitHub", "github": "Projekt GitHub",
"insured": "", "insured": "Poistené",
"items": "Položky", "items": "Položky",
"join_discord": "Pripojte sa k Discordu", "join_discord": "Pripojte sa k Discordu",
"labels": "Štítky", "labels": "Štítky",
"loading": "", "loading": "Načítam...",
"locations": "Miesta", "locations": "Miesta",
"maintenance": "Údržba", "maintenance": "Údržba",
"name": "Meno", "name": "Názov",
"navigate": "Navigovať", "navigate": "Navigovať",
"password": "heslo", "password": "heslo",
"quantity": "", "quantity": "Množstvo",
"read_docs": "Prečítajte si Dokumenty", "read_docs": "Prečítajte si Dokumenty",
"return_home": "", "return_home": "Vrátiť sa na začiatok",
"save": "Uložiť", "save": "Uložiť",
"search": "Hľadať", "search": "Hľadať",
"sign_out": "Odhlásiť sa", "sign_out": "Odhlásiť sa",
"submit": "Odoslať", "submit": "Odoslať",
"unknown": "", "unknown": "Neznáme",
"update": "Aktualizovať", "update": "Aktualizovať",
"updating": "", "updating": "Aktualizujem",
"value": "Hodnota", "value": "Hodnota",
"version": "Verzia: { version }", "version": "Verzia: { version }",
"welcome": "Vitajte, { username }" "welcome": "Vitajte, { username }"
@@ -252,13 +252,13 @@
"set_name": "Ako sa voláte?", "set_name": "Ako sa voláte?",
"set_password": "Nastavte si heslo", "set_password": "Nastavte si heslo",
"tagline": "Sledujte, organizujte a spravujte svoje veci.", "tagline": "Sledujte, organizujte a spravujte svoje veci.",
"title": "", "title": "Usporiadajte a označte svoje veci",
"toast": { "toast": {
"invalid_email": "", "invalid_email": "Neplatná e-mailová adresa",
"invalid_email_password": "", "invalid_email_password": "Neplatná e-mailová adresa alebo heslo",
"login_success": "", "login_success": "Úspešne prihlásený",
"problem_registering": "", "problem_registering": "Problém s registráciou používateľa",
"user_registered": "" "user_registered": "Používateľ bol zaregistrovaný"
} }
}, },
"items": { "items": {
@@ -266,25 +266,25 @@
"advanced": "Pokročilé", "advanced": "Pokročilé",
"archived": "Archivované", "archived": "Archivované",
"asset_id": "ID majetku", "asset_id": "ID majetku",
"associated_with_multiple": "", "associated_with_multiple": "Toto ID aktíva je priradené k viacerým položkám",
"attachment": "Príloha", "attachment": "Príloha",
"attachments": "Prílohy", "attachments": "Prílohy",
"changes_persisted_immediately": "Zmeny príloh sa okamžite uložia", "changes_persisted_immediately": "Zmeny v prílohách budú uložené okamžite",
"created_at": "Čas vytvorenia", "created_at": "Čas vytvorenia",
"custom_fields": "Vlastné polia", "custom_fields": "Vlastné polia",
"delete_attachment_confirm": "", "delete_attachment_confirm": "Naozaj chcete odstrániť túto prílohu?",
"delete_item_confirm": "", "delete_item_confirm": "Naozaj chcete odstrániť túto položku?",
"description": "Popis", "description": "Popis",
"details": "Podrobnosti", "details": "Podrobnosti",
"drag_and_drop": "Presuňte súbory sem alebo kliknutím vyberte súbory", "drag_and_drop": "Presuňte súbory sem alebo kliknutím vyberte súbory",
"edit": { "edit": {
"edit_attachment_dialog": { "edit_attachment_dialog": {
"attachment_title": "", "attachment_title": "Názov prílohy",
"attachment_type": "", "attachment_type": "Typ prílohy",
"primary_photo": "", "primary_photo": "Primárna fotografia",
"primary_photo_sub": "", "primary_photo_sub": "Táto možnosť je dostupná len pre fotografie. Primárna môže byť iba jedna fotografia. Ak vyberiete túto voľbu, aktuálna primárna fotografia (ak taká existuje) bude zrušená.",
"select_type": "", "select_type": "Vyberte typ",
"title": "" "title": "Upraviť prílohu"
} }
}, },
"edit_details": "Upraviť podrobnosti", "edit_details": "Upraviť podrobnosti",
@@ -293,18 +293,18 @@
"first": "Prvý", "first": "Prvý",
"include_archive": "Zahrnúť archivované položky", "include_archive": "Zahrnúť archivované položky",
"insured": "Poistený", "insured": "Poistený",
"invalid_asset_id": "", "invalid_asset_id": "Neplatné ID aktíva",
"last": "Posledný", "last": "Posledný",
"lifetime_warranty": "Doživotná záruka", "lifetime_warranty": "Doživotná záruka",
"location": "Poloha", "location": "Miesto",
"manual": "Príručka", "manual": "Príručka",
"manuals": "Príručky", "manuals": "Príručky",
"manufacturer": "Výrobca", "manufacturer": "Výrobca",
"model_number": "Číslo modelu", "model_number": "Číslo modelu",
"name": "Meno", "name": "Názov",
"negate_labels": "Negovať vybrané označenia", "negate_labels": "Negovať vybrané označenia",
"next_page": "Ďalšia strana", "next_page": "Ďalšia strana",
"no_attachments": "", "no_attachments": "Neboli nájdené žiadne prílohy.",
"no_results": "Nenašli sa žiadne položky", "no_results": "Nenašli sa žiadne položky",
"notes": "Poznámky", "notes": "Poznámky",
"only_with_photo": "Iba položky s fotografiou", "only_with_photo": "Iba položky s fotografiou",
@@ -315,7 +315,7 @@
"parent_item": "Nadradená položka", "parent_item": "Nadradená položka",
"photo": "Fotografia", "photo": "Fotografia",
"photos": "Fotografie", "photos": "Fotografie",
"prev_page": "Predchádzajúca stránka", "prev_page": "Predchádzajúca strana",
"purchase_date": "Dátum nákupu", "purchase_date": "Dátum nákupu",
"purchase_details": "Podrobnosti o nákupe", "purchase_details": "Podrobnosti o nákupe",
"purchase_price": "Kúpna cena", "purchase_price": "Kúpna cena",
@@ -326,44 +326,44 @@
"receipts": "Účtenky", "receipts": "Účtenky",
"reset_search": "Obnoviť vyhľadávanie", "reset_search": "Obnoviť vyhľadávanie",
"results": "{ total } Výsledky", "results": "{ total } Výsledky",
"select_field": "", "select_field": "Vyberte pole",
"serial_number": "Sériové číslo", "serial_number": "Sériové číslo",
"show_advanced_view_options": "Zobraziť rozšírené možnosti zobrazenia", "show_advanced_view_options": "Zobraziť rozšírené možnosti zobrazenia",
"sold_at": "Predané v", "sold_at": "Predané dňa",
"sold_details": "Podrobnosti o predaji", "sold_details": "Podrobnosti o predaji",
"sold_price": "Predajná cena", "sold_price": "Predajná cena",
"sold_to": "Predané Komu", "sold_to": "Predané komu",
"sync_child_locations": "", "sync_child_locations": "Synchronizovať miesta podriadených položiek",
"tip_1": "Filtre umiestnení a štítkov používajú operáciu 'OR'. Ak je vybratých viac ako jeden,\n bude vybraný iba jeden potrebné na zápas.", "tip_1": "Filtre umiestnení a štítkov používajú operáciu 'OR'. Ak je vybratých viac ako jeden,\n bude vybraný iba jeden potrebné na zápas.",
"tip_2": "Vyhľadávania s predponou # budú dotazovať na identifikátor diela (napríklad #000-001)", "tip_2": "Vyhľadávania s predponou # budú dotazovať na identifikátor diela (napríklad #000-001)",
"tip_3": "Filtre poľa používajú operáciu 'OR' . Ak je vybratých viac ako jeden, bude potrebný iba jeden pre a\n zápas.", "tip_3": "Filtre poľa používajú operáciu 'OR' . Ak je vybratých viac ako jeden, bude potrebný iba jeden pre a\n zápas.",
"tips": "Tipy", "tips": "Tipy",
"tips_sub": "Tipy na vyhľadávanie", "tips_sub": "Tipy na vyhľadávanie",
"toast": { "toast": {
"asset_not_found": "", "asset_not_found": "Aktívum sa nenašlo",
"attachment_deleted": "", "attachment_deleted": "Príloha bola odstránená",
"attachment_updated": "", "attachment_updated": "Príloha bola aktualizovaná",
"attachment_uploaded": "", "attachment_uploaded": "Príloha bola nahraná",
"child_items_location_no_longer_synced": "", "child_items_location_no_longer_synced": "Miesta podriadených položiek sa už nebudú synchronizovať s touto položkou.",
"child_items_location_synced": "", "child_items_location_synced": "Miesta podriadených položiek bolo synchronizovaných s touto položkou",
"child_location_desync": "", "child_location_desync": "Zmena miesta zruší synchronizáciou s miestom nadradenej položky",
"error_loading_parent_data": "", "error_loading_parent_data": "Pri pokus o načítanie údajov nadriadených položiek sa niečo pokazilo",
"failed_adjust_quantity": "", "failed_adjust_quantity": "Množstvo sa nepodarilo upraviť",
"failed_delete_attachment": "", "failed_delete_attachment": "Nepodarilo sa odstrániť prílohu",
"failed_delete_item": "", "failed_delete_item": "Položku sa nepodarilo odstrániť",
"failed_duplicate_item": "", "failed_duplicate_item": "Nepodarilo sa duplikovať položku",
"failed_load_asset": "", "failed_load_asset": "Aktívum sa nepodarilo načítať",
"failed_load_item": "", "failed_load_item": "Položku sa nepodarilo načítať",
"failed_load_items": "", "failed_load_items": "Nepodarilo sa načítať položky",
"failed_save": "", "failed_save": "Nepodarilo sa uložiť položku",
"failed_save_no_location": "", "failed_save_no_location": "Položku sa nepodarilo uložiť: nevybrali ste žiadne miesto",
"failed_search_items": "", "failed_search_items": "Nepodarilo sa vyhľadať položky",
"failed_update_attachment": "", "failed_update_attachment": "Nepodarilo sa aktualizovať prílohy",
"failed_upload_attachment": "", "failed_upload_attachment": "Nepodarilo sa nahrať prílohu",
"item_deleted": "", "item_deleted": "Položka bola odstránená",
"item_saved": "", "item_saved": "Položka bola uložená",
"quantity_cannot_negative": "", "quantity_cannot_negative": "Množstvo nemôže byť záporné",
"sync_child_location": "" "sync_child_location": "Vybraná položka nastavuje pre podriadené položky miesto podľa svojho. Miesto bolo aktualizované."
}, },
"updated_at": "Čas aktualizácie", "updated_at": "Čas aktualizácie",
"warranty": "Záruka", "warranty": "Záruka",
@@ -371,14 +371,14 @@
"warranty_expires": "Záruka vyprší" "warranty_expires": "Záruka vyprší"
}, },
"labels": { "labels": {
"label_delete_confirm": "", "label_delete_confirm": "Naozaj chcete odstrániť tento štítok? Túto akciu nie je možné odvolať.",
"no_results": "Nenašli sa žiadne štítky", "no_results": "Nenašli sa žiadne štítky",
"toast": { "toast": {
"failed_delete_label": "", "failed_delete_label": "Nepodarilo sa odstrániť štítok",
"failed_load_label": "", "failed_load_label": "Štítok sa nepodarilo načítať",
"failed_update_label": "", "failed_update_label": "Štítok sa nepodarilo aktualizovať",
"label_deleted": "", "label_deleted": "Štítok bol odstránený",
"label_updated": "" "label_updated": "Štítok bol aktualizovaný"
}, },
"update_label": "Aktualizovať štítok" "update_label": "Aktualizovať štítok"
}, },
@@ -395,8 +395,8 @@
"it": "Taliančina", "it": "Taliančina",
"ja-JP": "Japonsky", "ja-JP": "Japonsky",
"ko-KR": "Korejsky", "ko-KR": "Korejsky",
"lb-LU": "", "lb-LU": "Luxemburčina (Luxembursko)",
"lt-LT": "", "lt-LT": "Litovčina (Litva)",
"nb-NO": "Nórsky", "nb-NO": "Nórsky",
"nl": "Holandsky", "nl": "Holandsky",
"pl": "Poľsky", "pl": "Poľsky",
@@ -404,7 +404,7 @@
"pt-PT": "Portugalsky (Portugalsko)", "pt-PT": "Portugalsky (Portugalsko)",
"ru": "Ruština", "ru": "Ruština",
"sl": "Slovinsky", "sl": "Slovinsky",
"sq-AL": "", "sq-AL": "Albánčina",
"sv": "Švédčina", "sv": "Švédčina",
"ta-IN": "Tamilčina", "ta-IN": "Tamilčina",
"th-TH": "Thaičina", "th-TH": "Thaičina",
@@ -419,17 +419,17 @@
"languages.ro-RO": "Rumunsko", "languages.ro-RO": "Rumunsko",
"languages.sk-SK": "Slovenčina", "languages.sk-SK": "Slovenčina",
"locations": { "locations": {
"child_locations": "Umiestnenie dieťaťa", "child_locations": "Umiestnenie podriadených",
"collapse_tree": "Zbaliť strom", "collapse_tree": "Zbaliť strom",
"expand_tree": "", "expand_tree": "Rozbaliť strom",
"location_items_delete_confirm": "", "location_items_delete_confirm": "Naozaj chcete odstrániť toto miesto a všetky jeho položky? Túto akciu nie je možné odvolať.",
"no_results": "Žiadne lokality neboli nájdené", "no_results": "Žiadne lokality neboli nájdené",
"toast": { "toast": {
"failed_delete_location": "", "failed_delete_location": "Miesto sa nepodarilo odstrániť",
"failed_load_location": "", "failed_load_location": "Miesto sa nepodarilo načítať",
"failed_update_location": "", "failed_update_location": "Miesto sa nepodarilo aktualizovať",
"location_deleted": "", "location_deleted": "Miesto bolo odstránené",
"location_updated": "" "location_updated": "Miesto bolo aktualizované"
}, },
"update_location": "Aktualizovať lokalitu" "update_location": "Aktualizovať lokalitu"
}, },
@@ -471,8 +471,8 @@
"menu": { "menu": {
"create_item": "Položka / Aktívum", "create_item": "Položka / Aktívum",
"create_label": "Štítok", "create_label": "Štítok",
"create_location": "Poloha", "create_location": "Miesto",
"home": "Domovská stránka", "home": "Domov",
"locations": "Miesta", "locations": "Miesta",
"maintenance": "Údržba", "maintenance": "Údržba",
"profile": "Profil", "profile": "Profil",
@@ -486,10 +486,10 @@
"currency_format": "Formát meny", "currency_format": "Formát meny",
"current_password": "Aktuálne heslo", "current_password": "Aktuálne heslo",
"delete_account": "Odstrániť účet", "delete_account": "Odstrániť účet",
"delete_account_confirm": "", "delete_account_confirm": "Naozaj chcete odstrániť svoj účet? Ak ste posledným členom vo svojej skupine, všetky vaše údaje budú odstránené. Túto akciu nie je možné odvolať.",
"delete_account_sub": "Odstráňte svoj účet a všetky súvisiace údaje. Toto nie je možné vrátiť späť.", "delete_account_sub": "Odstráňte svoj účet a všetky súvisiace údaje. Toto nie je možné vrátiť späť.",
"delete_notifier_confirm": "", "delete_notifier_confirm": "Naozaj chcete odstrániť tento oznamovač?",
"display_legacy_header": "", "display_legacy_header": "{ currentValue, select, true {Zakázať staré záhlavie} false {Povoliť staré záhlavie} other {Nevybrané}}",
"enabled": "Povolené", "enabled": "Povolené",
"example": "Príklad", "example": "Príklad",
"gen_invite": "Vygenerovať odkaz na pozvánku", "gen_invite": "Vygenerovať odkaz na pozvánku",
@@ -498,28 +498,28 @@
"inactive": "Neaktívne", "inactive": "Neaktívne",
"language": "Jazyk", "language": "Jazyk",
"new_password": "Nové heslo", "new_password": "Nové heslo",
"no_notifiers": "Nie sú nakonfigurovaní žiadni upozorňovatelia", "no_notifiers": "Nie sú nastavené žiadne oznamovače",
"no_override": "", "no_override": "Bez prepísania",
"notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Oznamovateľ", "notifier_modal": "{ type, select, true {Edit} false {Create} other {Other}} Oznamovač",
"notifiers": "Oznamovatelia", "notifiers": "Oznamovače",
"notifiers_sub": "Dostávajte upozornenia na nadchádzajúce pripomenutia údržby", "notifiers_sub": "Dostávajte upozornenia na nadchádzajúce pripomenutia údržby",
"override_locale": "", "override_locale": "Prepísať dátum a jazyk meny",
"test": "Test", "test": "Test",
"theme_settings": "Nastavenie motívu", "theme_settings": "Nastavenie motívu",
"theme_settings_sub": "Nastavenia motívu sú uložené v lokálnom úložisku vášho prehliadača. Tému môžete kedykoľvek zmeniť. Ak mate\n problémy s nastavením motívu, skúste obnoviť prehliadač.", "theme_settings_sub": "Nastavenia motívu sú uložené v lokálnom úložisku vášho prehliadača. Tému môžete kedykoľvek zmeniť. Ak mate\n problémy s nastavením motívu, skúste obnoviť prehliadač.",
"toast": { "toast": {
"account_deleted": "", "account_deleted": "Váš účet bol odstránený.",
"failed_change_password": "", "failed_change_password": "Heslo sa nepodarilo zmeniť.",
"failed_create_notifier": "", "failed_create_notifier": "Oznamovač sa nepodarilo vytvoriť.",
"failed_delete_account": "", "failed_delete_account": "Nepodarilo sa odstrániť váš účet.",
"failed_delete_notifier": "", "failed_delete_notifier": "Nepodarilo sa odstrániť oznamovač.",
"failed_get_currencies": "", "failed_get_currencies": "Meny sa nepodarilo získať",
"failed_test_notifier": "", "failed_test_notifier": "Nepodarilo sa vyskúšať oznamovač.",
"failed_update_group": "", "failed_update_group": "Skupinu sa nepodarilo aktualizovať",
"failed_update_notifier": "", "failed_update_notifier": "Nepodarilo sa aktualizovať oznamovač.",
"group_updated": "", "group_updated": "Skupina bola aktualizovaná",
"notifier_test_success": "", "notifier_test_success": "Test oznamovača bol úspešný.",
"password_changed": "" "password_changed": "Heslo bolo úspešne zmenené."
}, },
"update_group": "aktualizačná skupina", "update_group": "aktualizačná skupina",
"update_language": "Aktualizovať súbor jazyka", "update_language": "Aktualizovať súbor jazyka",
@@ -529,32 +529,32 @@
}, },
"reports": { "reports": {
"label_generator": { "label_generator": {
"asset_end": "", "asset_end": "Koniec aktíva",
"asset_start": "", "asset_start": "Začiatok aktíva",
"base_url": "", "base_url": "Základná časť URL adresy",
"bordered_labels": "", "bordered_labels": "Ohraničené štítky",
"generate_page": "", "generate_page": "Generovať stranu",
"input_placeholder": "", "input_placeholder": "Píšte sem",
"instruction_1": "", "instruction_1": "Generátor štítkov Homebox je nástroj, ktorý vám pomôže vytlačiť štítky pre inventár Homeboxu. Tie sú určené na\n to, aby ste mohli vytlačiť viacero štítkov naraz a mať ich pripravených vopred",
"instruction_2": "", "instruction_2": "Tieto štítky fungujú tak, že sa na štítok vytlačí QR kód URL adresy a informácia AssetID. Ak ste v nastaveniach Homeboxu\n AssetID zakázali, môžete tento nástroj i naďalej používať, ale AssetIT nebude odkazovať na žiadnu položku",
"instruction_3": "", "instruction_3": "Táto funkcia je v ranej fáze vývoja a v budúcich verziách sa môže zmeniť, ak máte spätnú väzbu, podeľte sa s ňou, prosím,\n v <a href=\"https://github.com/sysadminsmedia/homebox/discussions/53\">'Diskusii na GitHube</a>",
"label_height": "", "label_height": "Výška štítka",
"label_width": "", "label_width": "Šírka štítku",
"measure_type": "", "measure_type": "Typ merania",
"page_bottom_padding": "", "page_bottom_padding": "Odsadenie strany zospodu",
"page_height": "", "page_height": "Výška strany",
"page_left_padding": "", "page_left_padding": "Odsadenie strany vľavo",
"page_right_padding": "", "page_right_padding": "Odsadenie strany vpravo",
"page_top_padding": "", "page_top_padding": "Odsadenie strany zvrchu",
"page_width": "", "page_width": "Šírka strany",
"qr_code_example": "", "qr_code_example": "Príklad QR kódu",
"tip_1": "", "tip_1": "",
"tip_2": "", "tip_2": "",
"tip_3": "", "tip_3": "",
"tips": "", "tips": "Tipy",
"title": "", "title": "Generátor štítkov",
"toast": { "toast": {
"page_too_small_card": "" "page_too_small_card": "Veľkosť strany je príliš malá vzhľadom na veľkosť karty"
} }
} }
}, },
@@ -564,40 +564,43 @@
"no_sources": "Nie sú k dispozícii žiadne zdroje videa", "no_sources": "Nie sú k dispozícii žiadne zdroje videa",
"permission_denied": "", "permission_denied": "",
"select_video_source": "Vyberte zdroj videa", "select_video_source": "Vyberte zdroj videa",
"title": "", "title": "Skener",
"unsupported": "Media Stream API nie je podporované" "unsupported": "Media Stream API nie je podporované bez protokolu HTTPS"
}, },
"tools": { "tools": {
"actions": "Akcie inventára", "actions": "Akcie inventára",
"actions_set": { "actions_set": {
"create_missing_thumbnails": "Vytvoriť chýbajúce náhľady",
"create_missing_thumbnails_button": "Vytvoriť náhľady",
"create_missing_thumbnails_confirm": "Naozaj chcete vytvoriť chýbajúce náhľady? Môže to chvíľku trvať a akciu nie je možné pozastaviť.",
"ensure_ids": "Zabezpečenie identifikátorov aktív", "ensure_ids": "Zabezpečenie identifikátorov aktív",
"ensure_ids_button": "Zabezpečenie identifikátorov aktív", "ensure_ids_button": "Zabezpečenie identifikátorov aktív",
"ensure_ids_confirm": "", "ensure_ids_confirm": "",
"ensure_ids_sub": "Zabezpečuje, že všetky položky vo vašom inventári ma platné pole asset_id. To sa dosiahne nájdením najvyššieho aktuálneho poľa asset_id v databáze a aplikáciou ďalšej hodnoty na každú položku, ktorá má pole asset_id nenastavené. Toto sa vykonáva v poradí podľa poľa created_at.", "ensure_ids_sub": "Zabezpečí, aby všetky položky vo vašom inventári mali platné pole asset_id. To sa dosiahne tak, že sa v databáze zistí najvyššie aktuálne pole asset_id a na každú položku, ktorá ne nastavené pole asset_id sa použije ďalšia hodnota. Toto sa vykonáva v poradí podľa poľa created_at.",
"ensure_import_refs": "Zabezpečte import referencií", "ensure_import_refs": "Zabezpeč import referencií",
"ensure_import_refs_button": "Zabezpečte import referencií", "ensure_import_refs_button": "Zabezpeč import referencií",
"ensure_import_refs_sub": "Zabezpečuje, že všetky položky vo vašom inventári majú platné pole import_ref. To sa dosiahne náhodným vygenerovaním 8-znakového reťazca pre každú položku, ktorá má nenastavené pole import_ref.", "ensure_import_refs_sub": "Zabezpečuje, že všetky položky vo vašom inventári majú platné pole import_ref. To sa dosiahne náhodným vygenerovaním 8-znakového reťazca pre každú položku, ktorá má nenastavené pole import_ref.",
"set_primary_photo": "Nastaviť primárnu fotografiu", "set_primary_photo": "Nastaviť primárnu fotografiu",
"set_primary_photo_button": "Nastaviť primárnu fotografiu", "set_primary_photo_button": "Nastaviť primárnu fotografiu",
"set_primary_photo_confirm": "", "set_primary_photo_confirm": "Naozaj chcete nastaviť primárne fotografie? Môže to chvíľu trvať a nedá sa to vrátiť späť.",
"set_primary_photo_sub": "Vo verzii v0.10.0 Homeboxu bolo k prílohám typu fotografia pridané pole primárneho obrázka. Táto akcia nastaví pole primárneho obrázka na prvý obrázok v poli príloh v databáze, ak ešte nie je nastavený. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'See GitHub PR #576'</a>'", "set_primary_photo_sub": "Vo verzii v0.10.0 Homeboxu bolo k prílohám typu fotografia pridané pole primárneho obrázka. Táto akcia nastaví pole primárneho obrázka na prvý obrázok v poli príloh v databáze, ak ešte nie je nastavený. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/pull/576\">'See GitHub PR #576'</a>'",
"zero_datetimes": "Dátum nulovej položky Časy", "zero_datetimes": "Vynulovať dátum a čas položiek",
"zero_datetimes_button": "Dátum nulovej položky Časy", "zero_datetimes_button": "Vynulovať dátum a čas položiek",
"zero_datetimes_confirm": "", "zero_datetimes_confirm": "Naozaj chcete resetovať všetky hodnoty dátumu a času? Toto môže chvíľu trvať a akcia sa nedá odvolať.",
"zero_datetimes_sub": "Obnoví hodnotu času pre všetky polia dátumu a času vo vašom inventári na začiatok dátumu. Ide o opravu chyby, ktorá bola zavedená na začiatku vývoja stránky a ktorá spôsobila, že sa hodnota času uložila s časom, čo spôsobilo problémy s poliami dátumu zobrazujúcimi presné hodnoty. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'See Github Issue #236 for more details.'</a>'" "zero_datetimes_sub": "Obnoví hodnotu času pre všetky polia dátumu a času vo vašom inventári na začiatok dátumu. Ide o opravu chyby, ktorá bola zavedená na začiatku vývoja stránky a ktorá spôsobila, že sa hodnota času uložila s časom, čo spôsobilo problémy s poliami dátumu zobrazujúcimi presné hodnoty. '<a class=\"link\" href=\"https://github.com/hay-kot/homebox/issues/236\" target=\"_blank\">'See Github Issue #236 for more details.'</a>'"
}, },
"actions_sub": "Hromadne použite akcie na svoj inventár. Toto sú nezvratné akcie. '<b>'Buďte opatrní.'</b>'", "actions_sub": "Hromadne použite akcie na svoj inventár. Tieto akcie nie je možné odvolať. '<b>'Buďte opatrní.'</b>'",
"import_export": "Import/export", "import_export": "Import/export",
"import_export_set": { "import_export_set": {
"export": "Export zásob", "export": "Exportovať inventár",
"export_button": "Export zásob", "export_button": "Exportovať inventár",
"export_sub": "Exportuje štandardný formát CSV pre Homebox. Týmto sa exportujú všetky položky vo vašom inventári.", "export_sub": "Exportuje štandardný formát CSV pre Homebox. Týmto sa exportujú všetky položky vo vašom inventári.",
"import": "Importovať inventár", "import": "Importovať inventár",
"import_button": "Importovať inventár", "import_button": "Importovať inventár",
"import_ref_confirm": "", "import_ref_confirm": "Naozaj chcete, aby všetky aktíva mali import_ref? To môže chvíľu trvať a akciu nie je možné odvolať.",
"import_sub": "Importuje štandardný formát CSV pre Homebox. Bez '<code>'HB.import_ref'</code>' stĺpca to bude '<b>'nie'</b>' prepísať všetky existujúce položky vo vašom inventári, iba pridať nové položky. Riadky so '<code>'HB.import_ref'</code>' stĺpcom sa zlúčia do existujúcich položiek s rovnakým import_ref, ak taký existuje." "import_sub": "Importuje štandardný formát CSV pre Homebox. Bez '<code>'HB.import_ref'</code>' stĺpca to bude '<b>'nie'</b>' prepísať všetky existujúce položky vo vašom inventári, iba pridať nové položky. Riadky so '<code>'HB.import_ref'</code>' stĺpcom sa zlúčia do existujúcich položiek s rovnakým import_ref, ak taký existuje."
}, },
"import_export_sub": "Importujte a exportujte svoj inventár do a zo súboru CSV. Je to užitočné pri migrácii inventára do novej inštancie Homeboxu.", "import_export_sub": "Importujte a exportujte svoj inventár do a zo súboru CSV. To je užitočné pri migrácii inventára do novej inštancie Homeboxu.",
"reports": "Správy", "reports": "Správy",
"reports_set": { "reports_set": {
"asset_labels": "Štítky ID diela", "asset_labels": "Štítky ID diela",
@@ -609,11 +612,12 @@
}, },
"reports_sub": "Generujte rôzne prehľady pre svoj inventár.", "reports_sub": "Generujte rôzne prehľady pre svoj inventár.",
"toast": { "toast": {
"asset_success": "", "asset_success": "{ results } aktiv bolo aktualizovaných.",
"failed_ensure_ids": "", "failed_create_missing_thumbnails": "Nepodarilo sa vytvoriť chýbajúce náhľady.",
"failed_ensure_import_refs": "", "failed_ensure_ids": "Nepodarilo sa zaistiť ID aktív.",
"failed_set_primary_photos": "", "failed_ensure_import_refs": "Nepodarilo sa zaistiť import referencií.",
"failed_zero_datetimes": "" "failed_set_primary_photos": "Nepodarilo sa nastaviť primárne fotografie.",
"failed_zero_datetimes": "Nepodarilo sa obnoviť hodnoty dátumu a času."
} }
} }
} }

View File

@@ -204,7 +204,7 @@
"follow_dev": "Sledi razvijjalcu", "follow_dev": "Sledi razvijjalcu",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Verzija: { version } Gradnja: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Verzija: { version } Gradnja: { build } '</a>'"
}, },
"github": "GitHub projekt", "github": "GitHub projekt",
"insured": "Zavarovano", "insured": "Zavarovano",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Följ utvecklaren", "follow_dev": "Följ utvecklaren",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Version: { version } Build: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Version: { version } Build: { build } '</a>'"
}, },
"github": "GitHub-projekt", "github": "GitHub-projekt",
"insured": "Försäkrad", "insured": "Försäkrad",

View File

@@ -196,7 +196,7 @@
"follow_dev": "ติดตามผู้พัฒนา", "follow_dev": "ติดตามผู้พัฒนา",
"footer": { "footer": {
"api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "'<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Version: { version } Build: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Version: { version } Build: { build } '</a>'"
}, },
"github": "GitHub Project", "github": "GitHub Project",
"insured": "ประกัน", "insured": "ประกัน",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Geliştiriciyi takip edin", "follow_dev": "Geliştiriciyi takip edin",
"footer": { "footer": {
"api_link": "<a href=\"https://homebox.software/en/api/\" target=\"_blank\">''API''</a>", "api_link": "<a href=\"https://homebox.software/en/api/\" target=\"_blank\">''API''</a>",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Sürüm: { version } Yapı: { build }'</a>" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Sürüm: { version } Yapı: { build }'</a>"
}, },
"github": "GitHub projesi", "github": "GitHub projesi",
"insured": "Sigortalı", "insured": "Sigortalı",

View File

@@ -196,7 +196,7 @@
"follow_dev": "Підписатись на розробника", "follow_dev": "Підписатись на розробника",
"footer": { "footer": {
"api_link": "<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'", "api_link": "<a href=\"https://homebox.software/en/api/\" target=\"_blank\">'API'</a>'",
"version_link": "'<a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/'{ version }\" target=\"_blank\"> Версія: { version } Build: { build } '</a>'" "version_link": "'<'a href=\"https://github.com/sysadminsmedia/homebox/releases/tag/{ version }\" target=\"_blank\"'>' Версія: { version } Build: { build } '</a>'"
}, },
"github": "GitHub проекту", "github": "GitHub проекту",
"insured": "Застрахований", "insured": "Застрахований",

View File

@@ -114,7 +114,7 @@
"rotate_process_failed": "处理已旋转图片失败", "rotate_process_failed": "处理已旋转图片失败",
"some_photos_failed": "{count, plural, =0 {无照片上传.} =1 {一张照片上传失败.} other {多张照片上传失败.}}", "some_photos_failed": "{count, plural, =0 {无照片上传.} =1 {一张照片上传失败.} other {多张照片上传失败.}}",
"upload_failed": "上传照片失败:{ photoName }", "upload_failed": "上传照片失败:{ photoName }",
"upload_success": "{count, plural, = 0 {未上传照片} = 1 {照片上传成功} other {所有照片上传成功}}", "upload_success": "{count, plural, =0 {未上传照片} =1 {照片上传成功} other {所有照片上传成功}}",
"uploading_photos": "" "uploading_photos": ""
}, },
"upload_photos": "上传照片", "upload_photos": "上传照片",