Compare commits
166 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
184b7c14f2 | ||
|
|
289c8e6f32 | ||
|
|
ff1e0b8185 | ||
|
|
0ac39684f1 | ||
|
|
fa390c498d | ||
|
|
4b72bbfc7f | ||
|
|
2a4a46c61a | ||
|
|
efd41cc4c1 | ||
|
|
912f27a9e3 | ||
|
|
4e28cc13c9 | ||
|
|
f37513c45e | ||
|
|
4d77ce0955 | ||
|
|
66dfbb303c | ||
|
|
9bf6b856e5 | ||
|
|
051104bfa0 | ||
|
|
b8ee3404ee | ||
|
|
853ec906ef | ||
|
|
7b35815754 | ||
|
|
2744f7d5b9 | ||
|
|
b508ac3d4f | ||
|
|
ff4375cf6c | ||
|
|
a664ba1f9d | ||
|
|
bb3486286c | ||
|
|
ecfcbfd216 | ||
|
|
9bcfa900f9 | ||
|
|
c2f1423c02 | ||
|
|
6744cd47ce | ||
|
|
a4ef02a47b | ||
|
|
1a5b999545 | ||
|
|
10d628aecc | ||
|
|
fa95299df4 | ||
|
|
fd22e0b163 | ||
|
|
428c1c606d | ||
|
|
60d1e2d291 | ||
|
|
11e9202160 | ||
|
|
59619ba34f | ||
|
|
73dd066670 | ||
|
|
2b2c1085fb | ||
|
|
02db83c72e | ||
|
|
3a0dace9a9 | ||
|
|
a5757b94e8 | ||
|
|
1ebfc64ea1 | ||
|
|
2c14146a31 | ||
|
|
a49105db1d | ||
|
|
0401adf7f4 | ||
|
|
c1e6d5869a | ||
|
|
db0a23aec0 | ||
|
|
350c73d78e | ||
|
|
daf36b28fd | ||
|
|
57c99e0e26 | ||
|
|
aaed985699 | ||
|
|
0ed32c6af8 | ||
|
|
dda9a389f3 | ||
|
|
f80b016ef0 | ||
|
|
ceec4dcfe6 | ||
|
|
7177184678 | ||
|
|
0523b31b96 | ||
|
|
80030dee32 | ||
|
|
cb43770025 | ||
|
|
eaba7e5255 | ||
|
|
49dbacdccd | ||
|
|
d94acdd89a | ||
|
|
06d9c03e92 | ||
|
|
9d54046140 | ||
|
|
dec3d629d4 | ||
|
|
8118afd0ac | ||
|
|
577c0efa9c | ||
|
|
dcf0bc65bf | ||
|
|
c211b96719 | ||
|
|
1e7d3b25c2 | ||
|
|
b16982df0f | ||
|
|
540ddf47a7 | ||
|
|
02730bb9bf | ||
|
|
d1d8e3e340 | ||
|
|
42a39b3f1d | ||
|
|
dd503695a1 | ||
|
|
1d66bbe40a | ||
|
|
5da9d74da6 | ||
|
|
b14b9114f8 | ||
|
|
8a43413f88 | ||
|
|
c3bd1188aa | ||
|
|
fc209f64de | ||
|
|
96afaca0ad | ||
|
|
f663237a16 | ||
|
|
ac3ead8dce | ||
|
|
7c9a75e725 | ||
|
|
596c73288f | ||
|
|
d1d7b23da6 | ||
|
|
e677c78471 | ||
|
|
9734f707f0 | ||
|
|
e5fa96b666 | ||
|
|
bcef7d3f73 | ||
|
|
aed3af5838 | ||
|
|
6bd34c7632 | ||
|
|
040584c865 | ||
|
|
ecb2d1d81b | ||
|
|
a74c72db45 | ||
|
|
f5b1e10618 | ||
|
|
e7fed5a45b | ||
|
|
f8dfbf7eee | ||
|
|
fca5fc5b87 | ||
|
|
4ee19be63d | ||
|
|
b2ad3f7368 | ||
|
|
b73d278ded | ||
|
|
6366cf0b18 | ||
|
|
f73518029c | ||
|
|
c782f21b0f | ||
|
|
0942fc7042 | ||
|
|
c1987237d0 | ||
|
|
cf85404dd2 | ||
|
|
6f226fa549 | ||
|
|
228ebea66c | ||
|
|
bb19834042 | ||
|
|
7870e89bc0 | ||
|
|
8888b9f446 | ||
|
|
f6e5c6f0de | ||
|
|
e7659ea36b | ||
|
|
7730ccd611 | ||
|
|
80890075e8 | ||
|
|
9b04004120 | ||
|
|
a73d7f14b7 | ||
|
|
ffe960a8c2 | ||
|
|
73c80732d9 | ||
|
|
8e2663bf7b | ||
|
|
e697e58164 | ||
|
|
c01496624a | ||
|
|
8906408a8f | ||
|
|
3ec7951380 | ||
|
|
b30aefa522 | ||
|
|
bc8a750dfe | ||
|
|
f1f7f17ade | ||
|
|
9182d33e1c | ||
|
|
7d836a3728 | ||
|
|
010d16fc1d | ||
|
|
fa89ba4665 | ||
|
|
a0752904c1 | ||
|
|
371718634b | ||
|
|
0f4f8751f2 | ||
|
|
ec45ee471f | ||
|
|
6fffcbac4e | ||
|
|
2948589fcd | ||
|
|
ecd0b2ee0d | ||
|
|
205f11d677 | ||
|
|
949f0f277f | ||
|
|
665e45889c | ||
|
|
8d87e0d5f9 | ||
|
|
46d80464d2 | ||
|
|
829ed9fb6d | ||
|
|
988d3e5bdd | ||
|
|
6eb3ab0635 | ||
|
|
c2e03bbfab | ||
|
|
608a0015ee | ||
|
|
f81857acce | ||
|
|
b1e0d5b39f | ||
|
|
68cf7a2173 | ||
|
|
89d1c06441 | ||
|
|
2bebb5f0f8 | ||
|
|
683b11d265 | ||
|
|
4d1b9dd211 | ||
|
|
b8f35ce932 | ||
|
|
a078f0b787 | ||
|
|
7401d16e45 | ||
|
|
958a44f95e | ||
|
|
e08239781f | ||
|
|
c29698dffa | ||
|
|
81de95632a |
@@ -1,3 +1,4 @@
|
|||||||
*
|
*
|
||||||
!.docker.json
|
!docker/*
|
||||||
|
!docker_config.json
|
||||||
!filebrowser
|
!filebrowser
|
||||||
66
.github/workflows/main.yaml
vendored
66
.github/workflows/main.yaml
vendored
@@ -9,29 +9,63 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
# linters
|
||||||
|
lint-frontend:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
- run: make lint-frontend
|
||||||
|
lint-backend:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: 1.20.6
|
||||||
|
- run: make lint-backend
|
||||||
|
lint-commits:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
- run: make lint-commits
|
||||||
lint:
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [lint-frontend, lint-backend, lint-commits]
|
||||||
|
steps:
|
||||||
|
- run: echo "done"
|
||||||
|
|
||||||
|
# tests
|
||||||
|
test-frontend:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/setup-go@v2
|
|
||||||
with:
|
|
||||||
go-version: 1.16
|
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '16'
|
||||||
- run: npm i -g commitlint
|
- run: make test-frontend
|
||||||
- run: make lint
|
test-backend:
|
||||||
test:
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/setup-go@v2
|
- uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.20.6
|
||||||
- uses: actions/setup-node@v2
|
- run: make test-backend
|
||||||
with:
|
test:
|
||||||
node-version: '14'
|
runs-on: ubuntu-latest
|
||||||
- run: make test
|
needs: [test-frontend, test-backend]
|
||||||
|
steps:
|
||||||
|
- run: echo "done"
|
||||||
|
|
||||||
|
# release
|
||||||
release:
|
release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [lint, test]
|
needs: [lint, test]
|
||||||
@@ -42,15 +76,15 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-go@v2
|
- uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.20.6
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '16'
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v1
|
uses: docker/setup-qemu-action@v1
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v1
|
||||||
- name: Build fronetend
|
- name: Build frontend
|
||||||
run: make build-frontend
|
run: make build-frontend
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v1
|
||||||
@@ -63,4 +97,4 @@ jobs:
|
|||||||
version: latest
|
version: latest
|
||||||
args: release --rm-dist
|
args: release --rm-dist
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GH_PAT }}
|
GITHUB_TOKEN: ${{ secrets.GH_PAT }}
|
||||||
|
|||||||
24
.github/workflows/stale.yml
vendored
Normal file
24
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
name: 'Close stale issues and PRs'
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '30 1 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v5
|
||||||
|
with:
|
||||||
|
stale-pr-message: 'This PR is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
|
||||||
|
close-pr-message: 'This PR was closed because it has been stalled for 5 days with no activity.'
|
||||||
|
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
|
||||||
|
close-issue-message: 'This issue was closed because it has been stalled for 5 days with no activity.'
|
||||||
|
days-before-stale: 30
|
||||||
|
days-before-close: 5
|
||||||
|
exempt-issue-labels: 'feature ☘,enhancement ⚙,bug 🐞'
|
||||||
|
exempt-pr-labels: 'need-help,wip'
|
||||||
|
operations-per-run: 100
|
||||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -1,11 +1,11 @@
|
|||||||
*.db
|
*.db
|
||||||
*.lock
|
|
||||||
*.bak
|
*.bak
|
||||||
_old
|
_old
|
||||||
rice-box.go
|
rice-box.go
|
||||||
.idea/
|
.idea/
|
||||||
filebrowser
|
/filebrowser
|
||||||
filebrowser.exe
|
/filebrowser.exe
|
||||||
|
/dist
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules
|
node_modules
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ linters:
|
|||||||
enable:
|
enable:
|
||||||
- bodyclose
|
- bodyclose
|
||||||
- deadcode
|
- deadcode
|
||||||
- depguard
|
|
||||||
- dogsled
|
- dogsled
|
||||||
- dupl
|
- dupl
|
||||||
- errcheck
|
- errcheck
|
||||||
@@ -109,6 +108,7 @@ issues:
|
|||||||
- gomnd
|
- gomnd
|
||||||
|
|
||||||
run:
|
run:
|
||||||
|
go: '1.18'
|
||||||
skip-dirs:
|
skip-dirs:
|
||||||
- frontend/
|
- frontend/
|
||||||
skip-files:
|
skip-files:
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ build:
|
|||||||
- 386
|
- 386
|
||||||
- arm
|
- arm
|
||||||
- arm64
|
- arm64
|
||||||
|
- riscv64
|
||||||
goarm:
|
goarm:
|
||||||
- 5
|
- 5
|
||||||
- 6
|
- 6
|
||||||
@@ -41,7 +42,7 @@ archives:
|
|||||||
dockers:
|
dockers:
|
||||||
-
|
-
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
use_buildx: true
|
use: buildx
|
||||||
build_flag_templates:
|
build_flag_templates:
|
||||||
- "--pull"
|
- "--pull"
|
||||||
- "--label=org.opencontainers.image.created={{.Date}}"
|
- "--label=org.opencontainers.image.created={{.Date}}"
|
||||||
@@ -56,10 +57,11 @@ dockers:
|
|||||||
- "filebrowser/filebrowser:{{ .Tag }}-amd64"
|
- "filebrowser/filebrowser:{{ .Tag }}-amd64"
|
||||||
- "filebrowser/filebrowser:v{{ .Major }}-amd64"
|
- "filebrowser/filebrowser:v{{ .Major }}-amd64"
|
||||||
extra_files:
|
extra_files:
|
||||||
- .docker.json
|
- docker_config.json
|
||||||
|
- healthcheck.sh
|
||||||
-
|
-
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
use_buildx: true
|
use: buildx
|
||||||
build_flag_templates:
|
build_flag_templates:
|
||||||
- "--pull"
|
- "--pull"
|
||||||
- "--label=org.opencontainers.image.created={{.Date}}"
|
- "--label=org.opencontainers.image.created={{.Date}}"
|
||||||
@@ -74,10 +76,11 @@ dockers:
|
|||||||
- "filebrowser/filebrowser:{{ .Tag }}-arm64"
|
- "filebrowser/filebrowser:{{ .Tag }}-arm64"
|
||||||
- "filebrowser/filebrowser:v{{ .Major }}-arm64"
|
- "filebrowser/filebrowser:v{{ .Major }}-arm64"
|
||||||
extra_files:
|
extra_files:
|
||||||
- .docker.json
|
- docker_config.json
|
||||||
|
- healthcheck.sh
|
||||||
-
|
-
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
use_buildx: true
|
use: buildx
|
||||||
build_flag_templates:
|
build_flag_templates:
|
||||||
- "--pull"
|
- "--pull"
|
||||||
- "--label=org.opencontainers.image.created={{.Date}}"
|
- "--label=org.opencontainers.image.created={{.Date}}"
|
||||||
@@ -93,10 +96,11 @@ dockers:
|
|||||||
- "filebrowser/filebrowser:{{ .Tag }}-armv6"
|
- "filebrowser/filebrowser:{{ .Tag }}-armv6"
|
||||||
- "filebrowser/filebrowser:v{{ .Major }}-armv6"
|
- "filebrowser/filebrowser:v{{ .Major }}-armv6"
|
||||||
extra_files:
|
extra_files:
|
||||||
- .docker.json
|
- docker_config.json
|
||||||
|
- healthcheck.sh
|
||||||
-
|
-
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
use_buildx: true
|
use: buildx
|
||||||
build_flag_templates:
|
build_flag_templates:
|
||||||
- "--pull"
|
- "--pull"
|
||||||
- "--label=org.opencontainers.image.created={{.Date}}"
|
- "--label=org.opencontainers.image.created={{.Date}}"
|
||||||
@@ -112,26 +116,74 @@ dockers:
|
|||||||
- "filebrowser/filebrowser:{{ .Tag }}-armv7"
|
- "filebrowser/filebrowser:{{ .Tag }}-armv7"
|
||||||
- "filebrowser/filebrowser:v{{ .Major }}-armv7"
|
- "filebrowser/filebrowser:v{{ .Major }}-armv7"
|
||||||
extra_files:
|
extra_files:
|
||||||
- .docker.json
|
- docker_config.json
|
||||||
|
- healthcheck.sh
|
||||||
|
## s6 based docker images
|
||||||
|
-
|
||||||
|
dockerfile: Dockerfile.s6
|
||||||
|
use: buildx
|
||||||
|
build_flag_templates:
|
||||||
|
- "--pull"
|
||||||
|
- "--label=org.opencontainers.image.created={{.Date}}"
|
||||||
|
- "--label=org.opencontainers.image.name={{.ProjectName}}"
|
||||||
|
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
|
||||||
|
- "--label=org.opencontainers.image.version={{.Version}}"
|
||||||
|
- "--label=org.opencontainers.image.source={{.GitURL}}"
|
||||||
|
- "--platform=linux/amd64"
|
||||||
|
goos: linux
|
||||||
|
goarch: amd64
|
||||||
|
image_templates:
|
||||||
|
- "filebrowser/filebrowser:{{ .Tag }}-amd64-s6"
|
||||||
|
- "filebrowser/filebrowser:v{{ .Major }}-amd64-s6"
|
||||||
|
extra_files:
|
||||||
|
- docker/root
|
||||||
|
-
|
||||||
|
dockerfile: Dockerfile.s6.aarch64
|
||||||
|
use: buildx
|
||||||
|
build_flag_templates:
|
||||||
|
- "--pull"
|
||||||
|
- "--label=org.opencontainers.image.created={{.Date}}"
|
||||||
|
- "--label=org.opencontainers.image.name={{.ProjectName}}"
|
||||||
|
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
|
||||||
|
- "--label=org.opencontainers.image.version={{.Version}}"
|
||||||
|
- "--label=org.opencontainers.image.source={{.GitURL}}"
|
||||||
|
- "--platform=linux/arm64"
|
||||||
|
goos: linux
|
||||||
|
goarch: arm64
|
||||||
|
image_templates:
|
||||||
|
- "filebrowser/filebrowser:{{ .Tag }}-arm64-s6"
|
||||||
|
- "filebrowser/filebrowser:v{{ .Major }}-arm64-s6"
|
||||||
|
extra_files:
|
||||||
|
- docker/root
|
||||||
docker_manifests:
|
docker_manifests:
|
||||||
- name_template: "filebrowser/filebrowser:latest"
|
- name_template: "filebrowser/filebrowser:latest"
|
||||||
image_templates:
|
image_templates:
|
||||||
- "filebrowser/filebrowser:{{ .Tag }}-amd64"
|
- "filebrowser/filebrowser:{{ .Tag }}-amd64"
|
||||||
- "filebrowser/filebrowser:{{ .Tag }}-arm64"
|
- "filebrowser/filebrowser:{{ .Tag }}-arm64"
|
||||||
- "filebrowser/filebrowser:{{ .Tag }}-armv6"
|
|
||||||
- "filebrowser/filebrowser:{{ .Tag }}-armv7"
|
- "filebrowser/filebrowser:{{ .Tag }}-armv7"
|
||||||
- name_template: "filebrowser/filebrowser:{{ .Tag }}"
|
- name_template: "filebrowser/filebrowser:{{ .Tag }}"
|
||||||
image_templates:
|
image_templates:
|
||||||
- "filebrowser/filebrowser:{{ .Tag }}-amd64"
|
- "filebrowser/filebrowser:{{ .Tag }}-amd64"
|
||||||
- "filebrowser/filebrowser:{{ .Tag }}-arm64"
|
- "filebrowser/filebrowser:{{ .Tag }}-arm64"
|
||||||
- "filebrowser/filebrowser:{{ .Tag }}-armv6"
|
|
||||||
- "filebrowser/filebrowser:{{ .Tag }}-armv7"
|
- "filebrowser/filebrowser:{{ .Tag }}-armv7"
|
||||||
- name_template: "filebrowser/filebrowser:v{{ .Major }}"
|
- name_template: "filebrowser/filebrowser:v{{ .Major }}"
|
||||||
image_templates:
|
image_templates:
|
||||||
- "filebrowser/filebrowser:v{{ .Major }}-amd64"
|
- "filebrowser/filebrowser:v{{ .Major }}-amd64"
|
||||||
- "filebrowser/filebrowser:v{{ .Major }}-arm64"
|
- "filebrowser/filebrowser:v{{ .Major }}-arm64"
|
||||||
- "filebrowser/filebrowser:v{{ .Major }}-armv6"
|
|
||||||
- "filebrowser/filebrowser:v{{ .Major }}-armv7"
|
- "filebrowser/filebrowser:v{{ .Major }}-armv7"
|
||||||
|
## s6 image manifests
|
||||||
|
- name_template: "filebrowser/filebrowser:s6"
|
||||||
|
image_templates:
|
||||||
|
- "filebrowser/filebrowser:{{ .Tag }}-amd64-s6"
|
||||||
|
- "filebrowser/filebrowser:{{ .Tag }}-arm64-s6"
|
||||||
|
- name_template: "filebrowser/filebrowser:{{ .Tag }}-s6"
|
||||||
|
image_templates:
|
||||||
|
- "filebrowser/filebrowser:{{ .Tag }}-amd64-s6"
|
||||||
|
- "filebrowser/filebrowser:{{ .Tag }}-arm64-s6"
|
||||||
|
- name_template: "filebrowser/filebrowser:v{{ .Major }}-s6"
|
||||||
|
image_templates:
|
||||||
|
- "filebrowser/filebrowser:v{{ .Major }}-amd64-s6"
|
||||||
|
- "filebrowser/filebrowser:v{{ .Major }}-arm64-s6"
|
||||||
brews:
|
brews:
|
||||||
- name: filebrowser
|
- name: filebrowser
|
||||||
tap:
|
tap:
|
||||||
@@ -143,4 +195,4 @@ brews:
|
|||||||
name: FileBrowser Robot
|
name: FileBrowser Robot
|
||||||
email: robot@filebrowser.org
|
email: robot@filebrowser.org
|
||||||
description: File Browser is a create-your-own-cloud-kind of software where you can install it on a server, direct it to a path and then access your files through a nice web interface
|
description: File Browser is a create-your-own-cloud-kind of software where you can install it on a server, direct it to a path and then access your files through a nice web interface
|
||||||
license: "MIT"
|
license: "MIT"
|
||||||
|
|||||||
249
CHANGELOG.md
249
CHANGELOG.md
@@ -2,6 +2,255 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
|
|
||||||
|
### [2.24.2](https://github.com/filebrowser/filebrowser/compare/v2.24.1...v2.24.2) (2023-08-08)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* 403 error error when uploading ([#2598](https://github.com/filebrowser/filebrowser/issues/2598)) ([289c8e6](https://github.com/filebrowser/filebrowser/commit/289c8e6f32eb520cc711389f6b6a4ed94a73ecd4))
|
||||||
|
* config init for branding.disableUsedPercentage ([#2576](https://github.com/filebrowser/filebrowser/issues/2576)) ([#2596](https://github.com/filebrowser/filebrowser/issues/2596)) ([ff1e0b8](https://github.com/filebrowser/filebrowser/commit/ff1e0b8185faf14b1f8e91830ca5e71e68ab672e))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* add riscv64 binary releases ([#2587](https://github.com/filebrowser/filebrowser/issues/2587)) ([0ac3968](https://github.com/filebrowser/filebrowser/commit/0ac39684f175487314e97403406f4d2c482e3d79))
|
||||||
|
|
||||||
|
### [2.24.1](https://github.com/filebrowser/filebrowser/compare/v2.24.0...v2.24.1) (2023-07-31)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add directory creation code to partial upload handler ([#2575](https://github.com/filebrowser/filebrowser/issues/2575)) ([#2580](https://github.com/filebrowser/filebrowser/issues/2580)) ([912f27a](https://github.com/filebrowser/filebrowser/commit/912f27a9e3286ee4bf2a27b366a1d35b3b55799c))
|
||||||
|
* resolved CSS rendering issue in Chrome browser ([#2582](https://github.com/filebrowser/filebrowser/issues/2582)) ([2a4a46c](https://github.com/filebrowser/filebrowser/commit/2a4a46c61a5d5376bea65b28d0eb6a7ec2fdf4e5))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **backend:** upgrade golangci-lint to v1.53.3 ([efd41cc](https://github.com/filebrowser/filebrowser/commit/efd41cc4c147b8d2d5e61fb2642df8d934f49362))
|
||||||
|
|
||||||
|
## [2.24.0](https://github.com/filebrowser/filebrowser/compare/v2.23.0...v2.24.0) (2023-07-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add a healthcheck script that works with a dynamic port ([#2510](https://github.com/filebrowser/filebrowser/issues/2510)) ([ff4375c](https://github.com/filebrowser/filebrowser/commit/ff4375cf6ce849459889f892dd91304703c52dcd))
|
||||||
|
* add a new setting that disables the display of the disk usage ([#2136](https://github.com/filebrowser/filebrowser/issues/2136)) ([428c1c6](https://github.com/filebrowser/filebrowser/commit/428c1c606d1b858ed0eb58b7c31f570bc6a9b792))
|
||||||
|
* add Hungarian translation ([#2232](https://github.com/filebrowser/filebrowser/issues/2232)) ([11e9202](https://github.com/filebrowser/filebrowser/commit/11e92021607e12efff9fb2d5c8728483eee31199))
|
||||||
|
* add option to copy download links from shares ([#2442](https://github.com/filebrowser/filebrowser/issues/2442)) ([a4ef02a](https://github.com/filebrowser/filebrowser/commit/a4ef02a47b53742a0ac1f639563b0c67116619c8))
|
||||||
|
* integrate tus.io for resumable and chunked uploads ([#2145](https://github.com/filebrowser/filebrowser/issues/2145)) ([7b35815](https://github.com/filebrowser/filebrowser/commit/7b35815754690540f76e3ffe114eedb47cfd5c7e))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* added an early return on non-existent items ([#2571](https://github.com/filebrowser/filebrowser/issues/2571)) ([2744f7d](https://github.com/filebrowser/filebrowser/commit/2744f7d5b9106c7c2eec69010e550e0939c23d80))
|
||||||
|
* build on FreeBSD and non-Linux platforms ([#2332](https://github.com/filebrowser/filebrowser/issues/2332)) ([60d1e2d](https://github.com/filebrowser/filebrowser/commit/60d1e2d2913cce591fbee97337bd58310480269f))
|
||||||
|
* error while using fallback of dir move ([#2349](https://github.com/filebrowser/filebrowser/issues/2349)) ([853ec90](https://github.com/filebrowser/filebrowser/commit/853ec906efbdee9013c5d34ed1d9b8fee88a6b29))
|
||||||
|
* filter ANSI color for shell ([#2529](https://github.com/filebrowser/filebrowser/issues/2529)) ([9bcfa90](https://github.com/filebrowser/filebrowser/commit/9bcfa900f904fe683c8d9085947f57932bfe22a0))
|
||||||
|
* goreleaser docker build ([051104b](https://github.com/filebrowser/filebrowser/commit/051104bfa061720d4402c612e61bb0fc80a946bf))
|
||||||
|
* solve broken Docker build with alpine image ([#2486](https://github.com/filebrowser/filebrowser/issues/2486)) ([b8ee340](https://github.com/filebrowser/filebrowser/commit/b8ee3404ee480ef1fd439543ab6d46f318ff3647))
|
||||||
|
* video preview click next or prev button subtitles not update ([#2423](https://github.com/filebrowser/filebrowser/issues/2423)) ([6744cd4](https://github.com/filebrowser/filebrowser/commit/6744cd47cef87e3a76a2190bdf123b6c2197fe6f))
|
||||||
|
* xss vulnerability in /api/raw ([#2570](https://github.com/filebrowser/filebrowser/issues/2570)) ([#2572](https://github.com/filebrowser/filebrowser/issues/2572)) ([b508ac3](https://github.com/filebrowser/filebrowser/commit/b508ac3d4f7f0f75d6b49c99bdc661a6d2173f30))
|
||||||
|
|
||||||
|
|
||||||
|
### Refactorings
|
||||||
|
|
||||||
|
* replace username old focus logic with the autofocus attribute ([#2223](https://github.com/filebrowser/filebrowser/issues/2223)) ([2b2c108](https://github.com/filebrowser/filebrowser/commit/2b2c1085fb50ad68612ad438e527fd316d8aafee))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **backend:** bump go version to 1.20.1 ([fa95299](https://github.com/filebrowser/filebrowser/commit/fa95299df4aa7e4c54d872e786a91ded5bdb01c1))
|
||||||
|
* **backend:** bump go version to 1.20.6 ([9bf6b85](https://github.com/filebrowser/filebrowser/commit/9bf6b856e5411e635ba9102ff53dfe927183848e))
|
||||||
|
* **deps-dev:** bump word-wrap from 1.2.3 to 1.2.4 in /frontend ([#2556](https://github.com/filebrowser/filebrowser/issues/2556)) ([bb34862](https://github.com/filebrowser/filebrowser/commit/bb3486286c0da112ad97456ad258ddcdfe17c154))
|
||||||
|
* **deps:** bump minimatch from 3.0.4 to 3.1.2 in /tools ([#2561](https://github.com/filebrowser/filebrowser/issues/2561)) ([a664ba1](https://github.com/filebrowser/filebrowser/commit/a664ba1f9df45c7f6d03492c85466c5aa07c740e))
|
||||||
|
* **deps:** bump semver from 5.7.1 to 5.7.2 in /tools ([#2546](https://github.com/filebrowser/filebrowser/issues/2546)) ([c2f1423](https://github.com/filebrowser/filebrowser/commit/c2f1423c02e4736f4c243c3164dc671879e065f3))
|
||||||
|
* remove armv6-s6 docker target ([66dfbb3](https://github.com/filebrowser/filebrowser/commit/66dfbb303cf792b7b01650d0125d948ab8d81ddd))
|
||||||
|
* remove armv7-s6 docker target ([4d77ce0](https://github.com/filebrowser/filebrowser/commit/4d77ce0955644551f891af3e4098c37e9cc37e40))
|
||||||
|
|
||||||
|
## [2.23.0](https://github.com/filebrowser/filebrowser/compare/v2.22.4...v2.23.0) (2022-11-05)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add rtl support ([#2178](https://github.com/filebrowser/filebrowser/issues/2178)) ([2c14146](https://github.com/filebrowser/filebrowser/commit/2c14146a314bb271be66a36c63b64852a2848e26))
|
||||||
|
* hebrew translation ([#2168](https://github.com/filebrowser/filebrowser/issues/2168)) ([a49105d](https://github.com/filebrowser/filebrowser/commit/a49105db1d5f0d8f3d6641940ea86da959ffe006))
|
||||||
|
* hook authentication method ([dda9a38](https://github.com/filebrowser/filebrowser/commit/dda9a389f387e94643a9a2ae56027260b210152a))
|
||||||
|
* update Polish translation ([#2089](https://github.com/filebrowser/filebrowser/issues/2089)) ([57c99e0](https://github.com/filebrowser/filebrowser/commit/57c99e0e261b4ed4c2cf468ce3ab09f1a440b359))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* missing video controls on mobile ([#2180](https://github.com/filebrowser/filebrowser/issues/2180)) ([a5757b9](https://github.com/filebrowser/filebrowser/commit/a5757b94e8ed492d454b9e427b7f45824cc56c5c))
|
||||||
|
* modify the delete confirmation interface logic. ([#2138](https://github.com/filebrowser/filebrowser/issues/2138)) ([0401adf](https://github.com/filebrowser/filebrowser/commit/0401adf7f4dd76760fe26b5baee02ebc726b51a9))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **deps:** bump ansi-html and webpack-dev-server in /frontend ([#2184](https://github.com/filebrowser/filebrowser/issues/2184)) ([3a0dace](https://github.com/filebrowser/filebrowser/commit/3a0dace9a93f9d57855801de548891010cf0830e))
|
||||||
|
* **deps:** bump terser from 4.8.0 to 4.8.1 in /frontend ([#2054](https://github.com/filebrowser/filebrowser/issues/2054)) ([aaed985](https://github.com/filebrowser/filebrowser/commit/aaed985699b3c63092ecb02c8bc07634123360ab))
|
||||||
|
|
||||||
|
### [2.22.4](https://github.com/filebrowser/filebrowser/compare/v2.22.3...v2.22.4) (2022-07-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* disable cookie auth for non GET requests ([80030de](https://github.com/filebrowser/filebrowser/commit/80030dee32d161043766d57ba4e0ad0b0d99290b))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **deps:** bump moment from 2.29.2 to 2.29.4 in /frontend ([#2036](https://github.com/filebrowser/filebrowser/issues/2036)) ([cb43770](https://github.com/filebrowser/filebrowser/commit/cb437700255e41ff559b9f5a99ab4290b2f8df87))
|
||||||
|
* **deps:** bump shell-quote from 1.7.2 to 1.7.3 in /frontend ([#2025](https://github.com/filebrowser/filebrowser/issues/2025)) ([eaba7e5](https://github.com/filebrowser/filebrowser/commit/eaba7e5255f960141e0fc1557f87073df9f6d66a))
|
||||||
|
|
||||||
|
### [2.22.3](https://github.com/filebrowser/filebrowser/compare/v2.22.2...v2.22.3) (2022-07-05)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* use correct field name in user put api ([#2026](https://github.com/filebrowser/filebrowser/issues/2026)) ([d94acdd](https://github.com/filebrowser/filebrowser/commit/d94acdd89a0069fe87107024fd332a0d59a112fc))
|
||||||
|
|
||||||
|
### [2.22.2](https://github.com/filebrowser/filebrowser/compare/v2.22.1...v2.22.2) (2022-07-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* display disk capacity in a correct format ([#2013](https://github.com/filebrowser/filebrowser/issues/2013)) ([dec3d62](https://github.com/filebrowser/filebrowser/commit/dec3d629d42de567aa708154ebc4e03b5223608c))
|
||||||
|
* don't calculate usage for files ([#1973](https://github.com/filebrowser/filebrowser/issues/1973)) ([577c0ef](https://github.com/filebrowser/filebrowser/commit/577c0efa9cff13628d5e3bac710ef568a00949e0)), closes [#1972](https://github.com/filebrowser/filebrowser/issues/1972) [#1967](https://github.com/filebrowser/filebrowser/issues/1967)
|
||||||
|
* preview url building fix ([#1976](https://github.com/filebrowser/filebrowser/issues/1976)) ([dcf0bc6](https://github.com/filebrowser/filebrowser/commit/dcf0bc65bfcfc7df3804d7392598a92019468cf7))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **backend:** upgrade golangci-lint to 1.46.2 ([#1991](https://github.com/filebrowser/filebrowser/issues/1991)) ([8118afd](https://github.com/filebrowser/filebrowser/commit/8118afd0ac0d25f4503c98879369764c35e7408e))
|
||||||
|
|
||||||
|
### [2.22.1](https://github.com/filebrowser/filebrowser/compare/v2.22.0...v2.22.1) (2022-06-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* use correct basepath prefix for preview urls ([#1971](https://github.com/filebrowser/filebrowser/issues/1971)) ([1e7d3b2](https://github.com/filebrowser/filebrowser/commit/1e7d3b25c283c556d98c65f1c2f46db4e4178995))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **backend:** bump go version to 1.8.3 ([b16982d](https://github.com/filebrowser/filebrowser/commit/b16982df0f7da9eedb678455298b42ac55c86666))
|
||||||
|
|
||||||
|
## [2.22.0](https://github.com/filebrowser/filebrowser/compare/v2.21.1...v2.22.0) (2022-06-03)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add branding to the window title ([#1850](https://github.com/filebrowser/filebrowser/issues/1850)) ([f8dfbf7](https://github.com/filebrowser/filebrowser/commit/f8dfbf7eeecf3ee99ce906276777676f44e81e34))
|
||||||
|
* add disk usage information to the sidebar ([d1d8e3e](https://github.com/filebrowser/filebrowser/commit/d1d8e3e3405381b01317fe07ae729d70219415a7))
|
||||||
|
* automatically focus username field on login page ([596c732](https://github.com/filebrowser/filebrowser/commit/596c73288f5b53bd7e79ab8046136dc75ff078b9))
|
||||||
|
* invalid symlink icon ([b14b911](https://github.com/filebrowser/filebrowser/commit/b14b9114f837cacf9f7788e88c503142a81585be))
|
||||||
|
* page title localization ([8a43413](https://github.com/filebrowser/filebrowser/commit/8a43413f888440dc11b11c509abff45f706033d8))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* allow CSP inline styling ([5da9d74](https://github.com/filebrowser/filebrowser/commit/5da9d74da62c69c431361bcaf0c07dc1da237ea8))
|
||||||
|
* disable autocapitalize of login input (closes [#1910](https://github.com/filebrowser/filebrowser/issues/1910)) ([aed3af5](https://github.com/filebrowser/filebrowser/commit/aed3af58384697dc3de30f1450b837b0b74e4fa6))
|
||||||
|
* drag-and-drop folder upload ([e677c78](https://github.com/filebrowser/filebrowser/commit/e677c78471f09f8d2c21d63d7388e908924aa6d9))
|
||||||
|
* expired token error ([c3bd118](https://github.com/filebrowser/filebrowser/commit/c3bd1188aa396cbf00c593d259a9da0eddeeea3b))
|
||||||
|
* folder info on upload list ([d1d7b23](https://github.com/filebrowser/filebrowser/commit/d1d7b23da6cc0c9a2f2f3e17021ec4f13ea557dd))
|
||||||
|
* network error object message ([fc209f6](https://github.com/filebrowser/filebrowser/commit/fc209f64deff7a2793980d11ee738f7140c444cf))
|
||||||
|
* set correct scope when user home creation is enabled ([02730bb](https://github.com/filebrowser/filebrowser/commit/02730bb9bfa3bfbfa251bb4736fc4c08d33609ab))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **backend:** bump dependency versions ([7c9a75e](https://github.com/filebrowser/filebrowser/commit/7c9a75e72588f92d58fb58d32cdac352bce73b20))
|
||||||
|
* **deps:** bump async from 2.6.3 to 2.6.4 in /frontend ([#1933](https://github.com/filebrowser/filebrowser/issues/1933)) ([e5fa96b](https://github.com/filebrowser/filebrowser/commit/e5fa96b666eac2e46a02bde832488baca5f2cd6d))
|
||||||
|
* **deps:** bump eventsource from 1.1.0 to 1.1.1 in /frontend ([dd50369](https://github.com/filebrowser/filebrowser/commit/dd503695a1a8119a631643414d3a9070890f3f3c))
|
||||||
|
* **deps:** bump minimist from 1.2.5 to 1.2.6 in /frontend ([#1889](https://github.com/filebrowser/filebrowser/issues/1889)) ([a74c72d](https://github.com/filebrowser/filebrowser/commit/a74c72db451207e1275988f3d208fa6d6f0468a9))
|
||||||
|
* **deps:** bump minimist from 1.2.5 to 1.2.6 in /tools ([#1891](https://github.com/filebrowser/filebrowser/issues/1891)) ([f5b1e10](https://github.com/filebrowser/filebrowser/commit/f5b1e106183fb2192063a72fd195fc8c181ba8f9))
|
||||||
|
* **deps:** bump moment from 2.29.1 to 2.29.2 in /frontend ([#1900](https://github.com/filebrowser/filebrowser/issues/1900)) ([040584c](https://github.com/filebrowser/filebrowser/commit/040584c86563d869c7a05887ef1f781bce653033))
|
||||||
|
* **deps:** bump url-parse from 1.5.7 to 1.5.10 in /frontend ([#1841](https://github.com/filebrowser/filebrowser/issues/1841)) ([b2ad3f7](https://github.com/filebrowser/filebrowser/commit/b2ad3f73686a2abaa4fc62963fba6f83c9da9b5e))
|
||||||
|
* **frontend:** bump node version from 14 to 16 ([ac3ead8](https://github.com/filebrowser/filebrowser/commit/ac3ead8dcef9c64c6be8b5cbbceee143b2cc77a8))
|
||||||
|
* upgrade go version to 1.18.1 ([6bd34c7](https://github.com/filebrowser/filebrowser/commit/6bd34c76324780c1edd8625d5b22f5a84990852b))
|
||||||
|
|
||||||
|
### [2.21.1](https://github.com/filebrowser/filebrowser/compare/v2.21.0...v2.21.1) (2022-02-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* display user scope for admin users ([#1834](https://github.com/filebrowser/filebrowser/issues/1834)) ([6366cf0](https://github.com/filebrowser/filebrowser/commit/6366cf0b181f13eac38f69f1760d6f6f0586a5d1))
|
||||||
|
|
||||||
|
## [2.21.0](https://github.com/filebrowser/filebrowser/compare/v2.20.1...v2.21.0) (2022-02-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add colorized file type icons ([2948589](https://github.com/filebrowser/filebrowser/commit/2948589fcde6d1dca7f3ea52a621d8213fa3300c))
|
||||||
|
* add gallery view mode ([8888b9f](https://github.com/filebrowser/filebrowser/commit/8888b9f44640394df9e3583db4392472d7027a4b))
|
||||||
|
* add Ukrainian translation / update Russian translation ([#1753](https://github.com/filebrowser/filebrowser/issues/1753)) ([665e458](https://github.com/filebrowser/filebrowser/commit/665e45889cd333f1e3500e4bf38d15d229c9fe2a))
|
||||||
|
* add upload file list with progress ([#1825](https://github.com/filebrowser/filebrowser/issues/1825)) ([cf85404](https://github.com/filebrowser/filebrowser/commit/cf85404dd25cd7fdd73aa32878b4dc5f85ee3e96))
|
||||||
|
* smaller column width to fit 2 columns in landscape mobiles ([7870e89](https://github.com/filebrowser/filebrowser/commit/7870e89bc04f1494f2705795476b5f1c9d621e38))
|
||||||
|
* use real image path to calculate cache key ([c198723](https://github.com/filebrowser/filebrowser/commit/c1987237d05adcce77c614e5247a181ae5cdfacd))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* correctly handle non-ascii passwords for shared resources ([c782f21](https://github.com/filebrowser/filebrowser/commit/c782f21b0fa4511a15e7015117d075eaf5ea332c))
|
||||||
|
* don't expose scope for non-admin users ([0942fc7](https://github.com/filebrowser/filebrowser/commit/0942fc7042fd949cce91855169d0bcf16eb75771))
|
||||||
|
* open all the pdf files correctly ([#1742](https://github.com/filebrowser/filebrowser/issues/1742)) ([949f0f2](https://github.com/filebrowser/filebrowser/commit/949f0f277f6004904b3edfa716a8365ec93fa0fa))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* **deps:** bump browserslist from 4.16.3 to 4.19.1 in /frontend ([8089007](https://github.com/filebrowser/filebrowser/commit/80890075e802e2a4217edbb01d6417122d702f5e))
|
||||||
|
* **deps:** bump dns-packet from 1.3.1 to 1.3.4 in /frontend ([a73d7f1](https://github.com/filebrowser/filebrowser/commit/a73d7f14b787935c6ebe525dba64b65f8ed733e2))
|
||||||
|
* **deps:** bump follow-redirects from 1.13.3 to 1.14.8 in /frontend ([f1f7f17](https://github.com/filebrowser/filebrowser/commit/f1f7f17ade8d40fc6cfb22c79960bce299876b56))
|
||||||
|
* **deps:** bump hosted-git-info from 2.8.8 to 2.8.9 in /frontend ([e7659ea](https://github.com/filebrowser/filebrowser/commit/e7659ea36bdf780ce17005f7170a2fef02a2d5e5))
|
||||||
|
* **deps:** bump path-parse from 1.0.6 to 1.0.7 in /frontend ([c014966](https://github.com/filebrowser/filebrowser/commit/c01496624a7ebfc8a7c256bd919a400367281cbb))
|
||||||
|
* **deps:** bump postcss from 7.0.35 to 7.0.39 in /frontend ([9182d33](https://github.com/filebrowser/filebrowser/commit/9182d33e1cc375473fb18989a92d20252884f096))
|
||||||
|
* **deps:** bump ssri from 6.0.1 to 6.0.2 in /frontend ([3717186](https://github.com/filebrowser/filebrowser/commit/371718634b11f32e68165f31c51b6b1139c829ec))
|
||||||
|
* **deps:** bump tar from 6.1.0 to 6.1.11 in /frontend ([010d16f](https://github.com/filebrowser/filebrowser/commit/010d16fc1d8f0200e5662943aef17ee89c5877b7))
|
||||||
|
* **deps:** bump url-parse from 1.5.1 to 1.5.4 in /frontend ([8906408](https://github.com/filebrowser/filebrowser/commit/8906408a8f0ed86d1e11ea90fc573b36815c9c0d))
|
||||||
|
* **deps:** bump url-parse from 1.5.4 to 1.5.7 in /frontend ([228ebea](https://github.com/filebrowser/filebrowser/commit/228ebea66cc871b33459406590a80ef906298e7d))
|
||||||
|
* **deps:** bump ws from 6.2.1 to 6.2.2 in /frontend ([73c8073](https://github.com/filebrowser/filebrowser/commit/73c80732d934bc8802a6d7c7a559cad37df405f0))
|
||||||
|
|
||||||
|
### [2.20.1](https://github.com/filebrowser/filebrowser/compare/v2.20.0...v2.20.1) (2021-12-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* revert to using the default alpine based docker image ([46d8046](https://github.com/filebrowser/filebrowser/commit/46d80464d2a67927b06a11b83fb137ad364a90ed))
|
||||||
|
|
||||||
|
## [2.20.0](https://github.com/filebrowser/filebrowser/compare/v2.19.0...v2.20.0) (2021-12-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* detect multiple subtitle languages ([#1723](https://github.com/filebrowser/filebrowser/issues/1723)) ([c2e03bb](https://github.com/filebrowser/filebrowser/commit/c2e03bbfab97fc6716bcdd59158e9d5129bf0ea7))
|
||||||
|
* use linuxserver based docker image ([b8f35ce](https://github.com/filebrowser/filebrowser/commit/b8f35ce9322c2b0dbf954cfd3ff584bc9f742fdd))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* set correct default database path in the config ([988d3e5](https://github.com/filebrowser/filebrowser/commit/988d3e5bdd224509ddc2f08444560e3087e9c67d))
|
||||||
|
* upgrade vulnerable versions of the library ([6eb3ab0](https://github.com/filebrowser/filebrowser/commit/6eb3ab063509a015ad630ab704ae3791461d0982))
|
||||||
|
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* refactor makefile ([f81857a](https://github.com/filebrowser/filebrowser/commit/f81857acce25936a700945db5ef4af545eaeb1cf))
|
||||||
|
* remove deprecated goreleaser use_buildx param ([4d1b9dd](https://github.com/filebrowser/filebrowser/commit/4d1b9dd2112002a93bb26cece07dcfd81c31dc2c))
|
||||||
|
|
||||||
|
## [2.19.0](https://github.com/filebrowser/filebrowser/compare/v2.18.0...v2.19.0) (2021-11-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* prefetch previous and next images in preview. ([#1627](https://github.com/filebrowser/filebrowser/issues/1627)) ([7401d16](https://github.com/filebrowser/filebrowser/commit/7401d16e457bb232fd7dd7ef427e8960d465705c))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* empty file listing on share ([e082397](https://github.com/filebrowser/filebrowser/commit/e08239781f61e7bb25d9b8c5c6cce90f34621a76))
|
||||||
|
* relative font sizes ([c29698d](https://github.com/filebrowser/filebrowser/commit/c29698dffac769077ab7c7869569a902979ee3d7))
|
||||||
|
|
||||||
## [2.18.0](https://github.com/filebrowser/filebrowser/compare/v2.17.2...v2.18.0) (2021-10-31)
|
## [2.18.0](https://github.com/filebrowser/filebrowser/compare/v2.17.2...v2.18.0) (2021-10-31)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
10
Dockerfile
10
Dockerfile
@@ -1,15 +1,19 @@
|
|||||||
FROM alpine:latest
|
FROM alpine:latest
|
||||||
RUN apk --update add ca-certificates \
|
RUN apk --update add ca-certificates \
|
||||||
mailcap \
|
mailcap \
|
||||||
curl
|
curl \
|
||||||
|
jq
|
||||||
|
|
||||||
|
COPY healthcheck.sh /healthcheck.sh
|
||||||
|
RUN chmod +x /healthcheck.sh # Make the script executable
|
||||||
|
|
||||||
HEALTHCHECK --start-period=2s --interval=5s --timeout=3s \
|
HEALTHCHECK --start-period=2s --interval=5s --timeout=3s \
|
||||||
CMD curl -f http://localhost/health || exit 1
|
CMD /healthcheck.sh || exit 1
|
||||||
|
|
||||||
VOLUME /srv
|
VOLUME /srv
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|
||||||
COPY .docker.json /.filebrowser.json
|
COPY docker_config.json /.filebrowser.json
|
||||||
COPY filebrowser /filebrowser
|
COPY filebrowser /filebrowser
|
||||||
|
|
||||||
ENTRYPOINT [ "/filebrowser" ]
|
ENTRYPOINT [ "/filebrowser" ]
|
||||||
16
Dockerfile.s6
Normal file
16
Dockerfile.s6
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
FROM ghcr.io/linuxserver/baseimage-alpine:3.17
|
||||||
|
|
||||||
|
RUN apk --update add ca-certificates \
|
||||||
|
mailcap \
|
||||||
|
curl
|
||||||
|
|
||||||
|
HEALTHCHECK --start-period=2s --interval=5s --timeout=3s \
|
||||||
|
CMD curl -f http://localhost/health || exit 1
|
||||||
|
|
||||||
|
# copy local files
|
||||||
|
COPY docker/root/ /
|
||||||
|
COPY filebrowser /usr/bin/filebrowser
|
||||||
|
|
||||||
|
# ports and volumes
|
||||||
|
VOLUME /srv /config /database
|
||||||
|
EXPOSE 80
|
||||||
16
Dockerfile.s6.aarch64
Normal file
16
Dockerfile.s6.aarch64
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.17
|
||||||
|
|
||||||
|
RUN apk --update add ca-certificates \
|
||||||
|
mailcap \
|
||||||
|
curl
|
||||||
|
|
||||||
|
HEALTHCHECK --start-period=2s --interval=5s --timeout=3s \
|
||||||
|
CMD curl -f http://localhost/health || exit 1
|
||||||
|
|
||||||
|
# copy local files
|
||||||
|
COPY docker/root/ /
|
||||||
|
COPY filebrowser /usr/bin/filebrowser
|
||||||
|
|
||||||
|
# ports and volumes
|
||||||
|
VOLUME /srv /config /database
|
||||||
|
EXPOSE 80
|
||||||
16
Dockerfile.s6.armhf
Normal file
16
Dockerfile.s6.armhf
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
FROM ghcr.io/linuxserver/baseimage-alpine:arm32v7-3.17
|
||||||
|
|
||||||
|
RUN apk --update add ca-certificates \
|
||||||
|
mailcap \
|
||||||
|
curl
|
||||||
|
|
||||||
|
HEALTHCHECK --start-period=2s --interval=5s --timeout=3s \
|
||||||
|
CMD curl -f http://localhost/health || exit 1
|
||||||
|
|
||||||
|
# copy local files
|
||||||
|
COPY docker/root/ /
|
||||||
|
COPY filebrowser /usr/bin/filebrowser
|
||||||
|
|
||||||
|
# ports and volumes
|
||||||
|
VOLUME /srv /config /database
|
||||||
|
EXPOSE 80
|
||||||
102
Makefile
102
Makefile
@@ -1,94 +1,68 @@
|
|||||||
SHELL := /bin/bash
|
include common.mk
|
||||||
BASE_PATH := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
include tools.mk
|
||||||
VERSION ?= $(shell git describe --tags --always --match=v* 2> /dev/null || \
|
|
||||||
cat $(CURDIR)/.version 2> /dev/null || echo v0)
|
|
||||||
VERSION_HASH = $(shell git rev-parse HEAD)
|
|
||||||
|
|
||||||
BIN = $(BASE_PATH)/bin
|
|
||||||
PATH := $(BIN):$(PATH)
|
|
||||||
export PATH
|
|
||||||
|
|
||||||
# printing
|
|
||||||
V = 0
|
|
||||||
Q = $(if $(filter 1,$V),,@)
|
|
||||||
M = $(shell printf "\033[34;1m▶\033[0m")
|
|
||||||
|
|
||||||
GO = GOGC=off go
|
|
||||||
# go module
|
|
||||||
MODULE = $(shell env GO111MODULE=on $(GO) list -m)
|
|
||||||
|
|
||||||
DATE ?= $(shell date +%FT%T%z)
|
|
||||||
VERSION ?= $(shell git describe --tags --always --match=v* 2> /dev/null || \
|
|
||||||
cat $(CURDIR)/.version 2> /dev/null || echo v0)
|
|
||||||
VERSION_HASH = $(shell git rev-parse --short HEAD)
|
|
||||||
BRANCH = $(shell git rev-parse --abbrev-ref HEAD)
|
|
||||||
|
|
||||||
LDFLAGS += -X "$(MODULE)/version.Version=$(VERSION)" -X "$(MODULE)/version.CommitSHA=$(VERSION_HASH)"
|
LDFLAGS += -X "$(MODULE)/version.Version=$(VERSION)" -X "$(MODULE)/version.CommitSHA=$(VERSION_HASH)"
|
||||||
|
|
||||||
# tools
|
## Build:
|
||||||
$(BIN):
|
|
||||||
@mkdir -p $@
|
|
||||||
$(BIN)/%: | $(BIN) ; $(info $(M) installing $(PACKAGE)…)
|
|
||||||
$Q env GOBIN=$(BIN) $(GO) install $(PACKAGE)
|
|
||||||
|
|
||||||
GOLANGCI_LINT = $(BIN)/golangci-lint
|
|
||||||
$(BIN)/golangci-lint: PACKAGE=github.com/golangci/golangci-lint/cmd/golangci-lint@v1.41.1
|
|
||||||
|
|
||||||
GOIMPORTS = $(BIN)/goimports
|
|
||||||
$(BIN)/goimports: PACKAGE=golang.org/x/tools/cmd/goimports@v0.1.5
|
|
||||||
|
|
||||||
## build: Build
|
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
build: | build-frontend build-backend ; $(info $(M) building…)
|
build: | build-frontend build-backend ## Build binary
|
||||||
|
|
||||||
## build-frontend: Build frontend
|
|
||||||
.PHONY: build-frontend
|
.PHONY: build-frontend
|
||||||
build-frontend: | ; $(info $(M) building frontend…)
|
build-frontend: ## Build frontend
|
||||||
$Q cd frontend && npm ci && npm run build
|
$Q cd frontend && npm ci && npm run build
|
||||||
|
|
||||||
## build-backend: Build backend
|
|
||||||
.PHONY: build-backend
|
.PHONY: build-backend
|
||||||
build-backend: | ; $(info $(M) building backend…)
|
build-backend: ## Build backend
|
||||||
$Q $(GO) build -ldflags '$(LDFLAGS)' -o .
|
$Q $(go) build -ldflags '$(LDFLAGS)' -o .
|
||||||
|
|
||||||
## test: Run all tests
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: | test-frontend test-backend ; $(info $(M) running tests…)
|
test: | test-frontend test-backend ## Run all tests
|
||||||
|
|
||||||
## test-frontend: Run frontend tests
|
|
||||||
.PHONY: test-frontend
|
.PHONY: test-frontend
|
||||||
test-frontend: | ; $(info $(M) running frontend tests…)
|
test-frontend: ## Run frontend tests
|
||||||
|
|
||||||
## test-backend: Run backend tests
|
|
||||||
.PHONY: test-backend
|
.PHONY: test-backend
|
||||||
test-backend: | ; $(info $(M) running backend tests…)
|
test-backend: ## Run backend tests
|
||||||
$Q $(GO) test -v ./...
|
$Q $(go) test -v ./...
|
||||||
|
|
||||||
## lint: Lint
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
lint: lint-frontend lint-backend lint-commits | ; $(info $(M) running all linters…)
|
lint: lint-frontend lint-backend lint-commits ## Run all linters
|
||||||
|
|
||||||
## lint-frontend: Lint frontend
|
|
||||||
.PHONY: lint-frontend
|
.PHONY: lint-frontend
|
||||||
lint-frontend: | ; $(info $(M) running frontend linters…)
|
lint-frontend: ## Run frontend linters
|
||||||
$Q cd frontend && npm ci && npm run lint
|
$Q cd frontend && npm ci && npm run lint
|
||||||
|
|
||||||
## lint-backend: Lint backend
|
|
||||||
.PHONY: lint-backend
|
.PHONY: lint-backend
|
||||||
lint-backend: | $(GOLANGCI_LINT) ; $(info $(M) running backend linters…)
|
lint-backend: | $(golangci-lint) ## Run backend linters
|
||||||
$Q $(GOLANGCI_LINT) run
|
$Q $(golangci-lint) run -v
|
||||||
|
|
||||||
## lint-commits: Lint commits
|
|
||||||
.PHONY: lint-commits
|
.PHONY: lint-commits
|
||||||
lint-commits: | ; $(info $(M) running commitlint…)
|
lint-commits: $(commitlint) ## Run commit linters
|
||||||
$Q ./scripts/commitlint.sh
|
$Q ./scripts/commitlint.sh
|
||||||
|
|
||||||
## bump-version: Bump app version
|
fmt: $(goimports) ## Format source files
|
||||||
|
$Q $(goimports) -local $(MODULE) -w $$(find . -type f -name '*.go' -not -path "./vendor/*")
|
||||||
|
|
||||||
|
clean: clean-tools ## Clean
|
||||||
|
|
||||||
|
## Release:
|
||||||
|
|
||||||
.PHONY: bump-version
|
.PHONY: bump-version
|
||||||
bump-version: | ; $(info $(M) creating a new release…)
|
bump-version: $(standard-version) ## Bump app version
|
||||||
$Q ./scripts/bump_version.sh
|
$Q ./scripts/bump_version.sh
|
||||||
|
|
||||||
## help: Show this help
|
## Help:
|
||||||
.PHONY: help
|
help: ## Show this help
|
||||||
help:
|
@echo ''
|
||||||
@sed -n 's/^## //p' $(MAKEFILE_LIST) | column -t -s ':' | sed -e 's/^/ /' | sort
|
@echo 'Usage:'
|
||||||
|
@echo ' ${YELLOW}make${RESET} ${GREEN}<target> [options]${RESET}'
|
||||||
|
@echo ''
|
||||||
|
@echo 'Options:'
|
||||||
|
@$(call global_option, "V [0|1]", "enable verbose mode (default:0)")
|
||||||
|
@echo ''
|
||||||
|
@echo 'Targets:'
|
||||||
|
@awk 'BEGIN {FS = ":.*?## "} { \
|
||||||
|
if (/^[a-zA-Z_-]+:.*?##.*$$/) {printf " ${YELLOW}%-20s${GREEN}%s${RESET}\n", $$1, $$2} \
|
||||||
|
else if (/^## .*$$/) {printf " ${CYAN}%s${RESET}\n", substr($$1,4)} \
|
||||||
|
}' $(MAKEFILE_LIST)
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
[](https://github.com/filebrowser/filebrowser/releases/latest)
|
[](https://github.com/filebrowser/filebrowser/releases/latest)
|
||||||
[](http://webchat.freenode.net/?channels=%23filebrowser)
|
[](http://webchat.freenode.net/?channels=%23filebrowser)
|
||||||
|
|
||||||
filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files. It allows the creation of multiple users and each user can have its own directory. It can be used as a standalone app or as a middleware.
|
filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files. It allows the creation of multiple users and each user can have its own directory. It can be used as a standalone app.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,14 @@ package auth
|
|||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/filebrowser/filebrowser/v2/settings"
|
||||||
"github.com/filebrowser/filebrowser/v2/users"
|
"github.com/filebrowser/filebrowser/v2/users"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Auther is the authentication interface.
|
// Auther is the authentication interface.
|
||||||
type Auther interface {
|
type Auther interface {
|
||||||
// Auth is called to authenticate a request.
|
// Auth is called to authenticate a request.
|
||||||
Auth(r *http.Request, s users.Store, root string) (*users.User, error)
|
Auth(r *http.Request, usr users.Store, stg *settings.Settings, srv *settings.Server) (*users.User, error)
|
||||||
// LoginPage indicates if this auther needs a login page.
|
// LoginPage indicates if this auther needs a login page.
|
||||||
LoginPage() bool
|
LoginPage() bool
|
||||||
}
|
}
|
||||||
|
|||||||
302
auth/hook.go
Normal file
302
auth/hook.go
Normal file
@@ -0,0 +1,302 @@
|
|||||||
|
package auth
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/filebrowser/filebrowser/v2/errors"
|
||||||
|
"github.com/filebrowser/filebrowser/v2/files"
|
||||||
|
"github.com/filebrowser/filebrowser/v2/settings"
|
||||||
|
"github.com/filebrowser/filebrowser/v2/users"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MethodHookAuth is used to identify hook auth.
|
||||||
|
const MethodHookAuth settings.AuthMethod = "hook"
|
||||||
|
|
||||||
|
type hookCred struct {
|
||||||
|
Password string `json:"password"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// HookAuth is a hook implementation of an Auther.
|
||||||
|
type HookAuth struct {
|
||||||
|
Users users.Store `json:"-"`
|
||||||
|
Settings *settings.Settings `json:"-"`
|
||||||
|
Server *settings.Server `json:"-"`
|
||||||
|
Cred hookCred `json:"-"`
|
||||||
|
Fields hookFields `json:"-"`
|
||||||
|
Command string `json:"command"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auth authenticates the user via a json in content body.
|
||||||
|
func (a *HookAuth) Auth(r *http.Request, usr users.Store, stg *settings.Settings, srv *settings.Server) (*users.User, error) {
|
||||||
|
var cred hookCred
|
||||||
|
|
||||||
|
if r.Body == nil {
|
||||||
|
return nil, os.ErrPermission
|
||||||
|
}
|
||||||
|
|
||||||
|
err := json.NewDecoder(r.Body).Decode(&cred)
|
||||||
|
if err != nil {
|
||||||
|
return nil, os.ErrPermission
|
||||||
|
}
|
||||||
|
|
||||||
|
a.Users = usr
|
||||||
|
a.Settings = stg
|
||||||
|
a.Server = srv
|
||||||
|
a.Cred = cred
|
||||||
|
|
||||||
|
action, err := a.RunCommand()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch action {
|
||||||
|
case "auth":
|
||||||
|
u, err := a.SaveUser()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return u, nil
|
||||||
|
case "block":
|
||||||
|
return nil, os.ErrPermission
|
||||||
|
case "pass":
|
||||||
|
u, err := a.Users.Get(a.Server.Root, a.Cred.Username)
|
||||||
|
if err != nil || !users.CheckPwd(a.Cred.Password, u.Password) {
|
||||||
|
return nil, os.ErrPermission
|
||||||
|
}
|
||||||
|
return u, nil
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("invalid hook action: %s", action)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoginPage tells that hook auth requires a login page.
|
||||||
|
func (a *HookAuth) LoginPage() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// RunCommand starts the hook command and returns the action
|
||||||
|
func (a *HookAuth) RunCommand() (string, error) {
|
||||||
|
command := strings.Split(a.Command, " ")
|
||||||
|
envMapping := func(key string) string {
|
||||||
|
switch key {
|
||||||
|
case "USERNAME":
|
||||||
|
return a.Cred.Username
|
||||||
|
case "PASSWORD":
|
||||||
|
return a.Cred.Password
|
||||||
|
default:
|
||||||
|
return os.Getenv(key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i, arg := range command {
|
||||||
|
if i == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
command[i] = os.Expand(arg, envMapping)
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := exec.Command(command[0], command[1:]...) //nolint:gosec
|
||||||
|
cmd.Env = append(os.Environ(), fmt.Sprintf("USERNAME=%s", a.Cred.Username))
|
||||||
|
cmd.Env = append(cmd.Env, fmt.Sprintf("PASSWORD=%s", a.Cred.Password))
|
||||||
|
out, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
a.GetValues(string(out))
|
||||||
|
|
||||||
|
return a.Fields.Values["hook.action"], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetValues creates a map with values from the key-value format string
|
||||||
|
func (a *HookAuth) GetValues(s string) {
|
||||||
|
m := map[string]string{}
|
||||||
|
|
||||||
|
// make line breaks consistent on Windows platform
|
||||||
|
s = strings.ReplaceAll(s, "\r\n", "\n")
|
||||||
|
|
||||||
|
// iterate input lines
|
||||||
|
for _, val := range strings.Split(s, "\n") {
|
||||||
|
v := strings.SplitN(val, "=", 2) //nolint: gomnd
|
||||||
|
|
||||||
|
// skips non key and value format
|
||||||
|
if len(v) != 2 { //nolint: gomnd
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldKey := strings.TrimSpace(v[0])
|
||||||
|
fieldValue := strings.TrimSpace(v[1])
|
||||||
|
|
||||||
|
if a.Fields.IsValid(fieldKey) {
|
||||||
|
m[fieldKey] = fieldValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a.Fields.Values = m
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveUser updates the existing user or creates a new one when not found
|
||||||
|
func (a *HookAuth) SaveUser() (*users.User, error) {
|
||||||
|
u, err := a.Users.Get(a.Server.Root, a.Cred.Username)
|
||||||
|
if err != nil && err != errors.ErrNotExist {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if u == nil {
|
||||||
|
pass, err := users.HashPwd(a.Cred.Password)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// create user with the provided credentials
|
||||||
|
d := &users.User{
|
||||||
|
Username: a.Cred.Username,
|
||||||
|
Password: pass,
|
||||||
|
Scope: a.Settings.Defaults.Scope,
|
||||||
|
Locale: a.Settings.Defaults.Locale,
|
||||||
|
ViewMode: a.Settings.Defaults.ViewMode,
|
||||||
|
SingleClick: a.Settings.Defaults.SingleClick,
|
||||||
|
Sorting: a.Settings.Defaults.Sorting,
|
||||||
|
Perm: a.Settings.Defaults.Perm,
|
||||||
|
Commands: a.Settings.Defaults.Commands,
|
||||||
|
HideDotfiles: a.Settings.Defaults.HideDotfiles,
|
||||||
|
}
|
||||||
|
u = a.GetUser(d)
|
||||||
|
|
||||||
|
userHome, err := a.Settings.MakeUserDir(u.Username, u.Scope, a.Server.Root)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("user: failed to mkdir user home dir: [%s]", userHome)
|
||||||
|
}
|
||||||
|
u.Scope = userHome
|
||||||
|
log.Printf("user: %s, home dir: [%s].", u.Username, userHome)
|
||||||
|
|
||||||
|
err = a.Users.Save(u)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else if p := !users.CheckPwd(a.Cred.Password, u.Password); len(a.Fields.Values) > 1 || p {
|
||||||
|
u = a.GetUser(u)
|
||||||
|
|
||||||
|
// update the password when it doesn't match the current
|
||||||
|
if p {
|
||||||
|
pass, err := users.HashPwd(a.Cred.Password)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
u.Password = pass
|
||||||
|
}
|
||||||
|
|
||||||
|
// update user with provided fields
|
||||||
|
err := a.Users.Update(u)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return u, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUser returns a User filled with hook values or provided defaults
|
||||||
|
func (a *HookAuth) GetUser(d *users.User) *users.User {
|
||||||
|
// adds all permissions when user is admin
|
||||||
|
isAdmin := a.Fields.GetBoolean("user.perm.admin", d.Perm.Admin)
|
||||||
|
perms := users.Permissions{
|
||||||
|
Admin: isAdmin,
|
||||||
|
Execute: isAdmin || a.Fields.GetBoolean("user.perm.execute", d.Perm.Execute),
|
||||||
|
Create: isAdmin || a.Fields.GetBoolean("user.perm.create", d.Perm.Create),
|
||||||
|
Rename: isAdmin || a.Fields.GetBoolean("user.perm.rename", d.Perm.Rename),
|
||||||
|
Modify: isAdmin || a.Fields.GetBoolean("user.perm.modify", d.Perm.Modify),
|
||||||
|
Delete: isAdmin || a.Fields.GetBoolean("user.perm.delete", d.Perm.Delete),
|
||||||
|
Share: isAdmin || a.Fields.GetBoolean("user.perm.share", d.Perm.Share),
|
||||||
|
Download: isAdmin || a.Fields.GetBoolean("user.perm.download", d.Perm.Download),
|
||||||
|
}
|
||||||
|
user := users.User{
|
||||||
|
ID: d.ID,
|
||||||
|
Username: d.Username,
|
||||||
|
Password: d.Password,
|
||||||
|
Scope: a.Fields.GetString("user.scope", d.Scope),
|
||||||
|
Locale: a.Fields.GetString("user.locale", d.Locale),
|
||||||
|
ViewMode: users.ViewMode(a.Fields.GetString("user.viewMode", string(d.ViewMode))),
|
||||||
|
SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick),
|
||||||
|
Sorting: files.Sorting{
|
||||||
|
Asc: a.Fields.GetBoolean("user.sorting.asc", d.Sorting.Asc),
|
||||||
|
By: a.Fields.GetString("user.sorting.by", d.Sorting.By),
|
||||||
|
},
|
||||||
|
Commands: a.Fields.GetArray("user.commands", d.Commands),
|
||||||
|
HideDotfiles: a.Fields.GetBoolean("user.hideDotfiles", d.HideDotfiles),
|
||||||
|
Perm: perms,
|
||||||
|
LockPassword: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
return &user
|
||||||
|
}
|
||||||
|
|
||||||
|
// hookFields is used to access fields from the hook
|
||||||
|
type hookFields struct {
|
||||||
|
Values map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
// validHookFields contains names of the fields that can be used
|
||||||
|
var validHookFields = []string{
|
||||||
|
"hook.action",
|
||||||
|
"user.scope",
|
||||||
|
"user.locale",
|
||||||
|
"user.viewMode",
|
||||||
|
"user.singleClick",
|
||||||
|
"user.sorting.by",
|
||||||
|
"user.sorting.asc",
|
||||||
|
"user.commands",
|
||||||
|
"user.hideDotfiles",
|
||||||
|
"user.perm.admin",
|
||||||
|
"user.perm.execute",
|
||||||
|
"user.perm.create",
|
||||||
|
"user.perm.rename",
|
||||||
|
"user.perm.modify",
|
||||||
|
"user.perm.delete",
|
||||||
|
"user.perm.share",
|
||||||
|
"user.perm.download",
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsValid checks if the provided field is on the valid fields list
|
||||||
|
func (hf *hookFields) IsValid(field string) bool {
|
||||||
|
for _, val := range validHookFields {
|
||||||
|
if field == val {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetString returns the string value or provided default
|
||||||
|
func (hf *hookFields) GetString(k, dv string) string {
|
||||||
|
val, ok := hf.Values[k]
|
||||||
|
if ok {
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
return dv
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBoolean returns the bool value or provided default
|
||||||
|
func (hf *hookFields) GetBoolean(k string, dv bool) bool {
|
||||||
|
val, ok := hf.Values[k]
|
||||||
|
if ok {
|
||||||
|
return val == "true"
|
||||||
|
}
|
||||||
|
return dv
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetArray returns the array value or provided default
|
||||||
|
func (hf *hookFields) GetArray(k string, dv []string) []string {
|
||||||
|
val, ok := hf.Values[k]
|
||||||
|
if ok && strings.TrimSpace(val) != "" {
|
||||||
|
return strings.Split(val, " ")
|
||||||
|
}
|
||||||
|
return dv
|
||||||
|
}
|
||||||
@@ -26,7 +26,7 @@ type JSONAuth struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Auth authenticates the user via a json in content body.
|
// Auth authenticates the user via a json in content body.
|
||||||
func (a JSONAuth) Auth(r *http.Request, sto users.Store, root string) (*users.User, error) {
|
func (a JSONAuth) Auth(r *http.Request, usr users.Store, stg *settings.Settings, srv *settings.Server) (*users.User, error) {
|
||||||
var cred jsonCred
|
var cred jsonCred
|
||||||
|
|
||||||
if r.Body == nil {
|
if r.Body == nil {
|
||||||
@@ -51,7 +51,7 @@ func (a JSONAuth) Auth(r *http.Request, sto users.Store, root string) (*users.Us
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u, err := sto.Get(root, cred.Username)
|
u, err := usr.Get(srv.Root, cred.Username)
|
||||||
if err != nil || !users.CheckPwd(cred.Password, u.Password) {
|
if err != nil || !users.CheckPwd(cred.Password, u.Password) {
|
||||||
return nil, os.ErrPermission
|
return nil, os.ErrPermission
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ const MethodNoAuth settings.AuthMethod = "noauth"
|
|||||||
type NoAuth struct{}
|
type NoAuth struct{}
|
||||||
|
|
||||||
// Auth uses authenticates user 1.
|
// Auth uses authenticates user 1.
|
||||||
func (a NoAuth) Auth(r *http.Request, sto users.Store, root string) (*users.User, error) {
|
func (a NoAuth) Auth(r *http.Request, usr users.Store, stg *settings.Settings, srv *settings.Server) (*users.User, error) {
|
||||||
return sto.Get(root, uint(1))
|
return usr.Get(srv.Root, uint(1))
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoginPage tells that no auth doesn't require a login page.
|
// LoginPage tells that no auth doesn't require a login page.
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ type ProxyAuth struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Auth authenticates the user via an HTTP header.
|
// Auth authenticates the user via an HTTP header.
|
||||||
func (a ProxyAuth) Auth(r *http.Request, sto users.Store, root string) (*users.User, error) {
|
func (a ProxyAuth) Auth(r *http.Request, usr users.Store, stg *settings.Settings, srv *settings.Server) (*users.User, error) {
|
||||||
username := r.Header.Get(a.Header)
|
username := r.Header.Get(a.Header)
|
||||||
user, err := sto.Get(root, username)
|
user, err := usr.Get(srv.Root, username)
|
||||||
if err == errors.ErrNotExist {
|
if err == errors.ErrNotExist {
|
||||||
return nil, os.ErrPermission
|
return nil, os.ErrPermission
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ func addConfigFlags(flags *pflag.FlagSet) {
|
|||||||
|
|
||||||
flags.String("auth.method", string(auth.MethodJSONAuth), "authentication type")
|
flags.String("auth.method", string(auth.MethodJSONAuth), "authentication type")
|
||||||
flags.String("auth.header", "", "HTTP header for auth.method=proxy")
|
flags.String("auth.header", "", "HTTP header for auth.method=proxy")
|
||||||
|
flags.String("auth.command", "", "command for auth.method=hook")
|
||||||
|
|
||||||
flags.String("recaptcha.host", "https://www.google.com", "use another host for ReCAPTCHA. recaptcha.net might be useful in China")
|
flags.String("recaptcha.host", "https://www.google.com", "use another host for ReCAPTCHA. recaptcha.net might be useful in China")
|
||||||
flags.String("recaptcha.key", "", "ReCaptcha site key")
|
flags.String("recaptcha.key", "", "ReCaptcha site key")
|
||||||
@@ -44,6 +45,7 @@ func addConfigFlags(flags *pflag.FlagSet) {
|
|||||||
flags.String("branding.color", "", "set the theme color")
|
flags.String("branding.color", "", "set the theme color")
|
||||||
flags.String("branding.files", "", "path to directory with images and custom styles")
|
flags.String("branding.files", "", "path to directory with images and custom styles")
|
||||||
flags.Bool("branding.disableExternal", false, "disable external links such as GitHub links")
|
flags.Bool("branding.disableExternal", false, "disable external links such as GitHub links")
|
||||||
|
flags.Bool("branding.disableUsedPercentage", false, "disable used disk percentage graph")
|
||||||
}
|
}
|
||||||
|
|
||||||
//nolint:gocyclo
|
//nolint:gocyclo
|
||||||
@@ -114,6 +116,20 @@ func getAuthentication(flags *pflag.FlagSet, defaults ...interface{}) (settings.
|
|||||||
auther = jsonAuth
|
auther = jsonAuth
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if method == auth.MethodHookAuth {
|
||||||
|
command := mustGetString(flags, "auth.command")
|
||||||
|
|
||||||
|
if command == "" {
|
||||||
|
command = defaultAuther["command"].(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if command == "" {
|
||||||
|
checkErr(nerrors.New("you must set the flag 'auth.command' for method 'hook'"))
|
||||||
|
}
|
||||||
|
|
||||||
|
auther = &auth.HookAuth{Command: command}
|
||||||
|
}
|
||||||
|
|
||||||
if auther == nil {
|
if auther == nil {
|
||||||
panic(errors.ErrInvalidAuthMethod)
|
panic(errors.ErrInvalidAuthMethod)
|
||||||
}
|
}
|
||||||
@@ -132,6 +148,7 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut
|
|||||||
fmt.Fprintf(w, "\tName:\t%s\n", set.Branding.Name)
|
fmt.Fprintf(w, "\tName:\t%s\n", set.Branding.Name)
|
||||||
fmt.Fprintf(w, "\tFiles override:\t%s\n", set.Branding.Files)
|
fmt.Fprintf(w, "\tFiles override:\t%s\n", set.Branding.Files)
|
||||||
fmt.Fprintf(w, "\tDisable external links:\t%t\n", set.Branding.DisableExternal)
|
fmt.Fprintf(w, "\tDisable external links:\t%t\n", set.Branding.DisableExternal)
|
||||||
|
fmt.Fprintf(w, "\tDisable used disk percentage graph:\t%t\n", set.Branding.DisableUsedPercentage)
|
||||||
fmt.Fprintf(w, "\tColor:\t%s\n", set.Branding.Color)
|
fmt.Fprintf(w, "\tColor:\t%s\n", set.Branding.Color)
|
||||||
fmt.Fprintln(w, "\nServer:")
|
fmt.Fprintln(w, "\nServer:")
|
||||||
fmt.Fprintf(w, "\tLog:\t%s\n", ser.Log)
|
fmt.Fprintf(w, "\tLog:\t%s\n", ser.Log)
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ The path must be for a json or yaml file.`,
|
|||||||
auther = getAuther(auth.NoAuth{}, rawAuther).(*auth.NoAuth)
|
auther = getAuther(auth.NoAuth{}, rawAuther).(*auth.NoAuth)
|
||||||
case auth.MethodProxyAuth:
|
case auth.MethodProxyAuth:
|
||||||
auther = getAuther(auth.ProxyAuth{}, rawAuther).(*auth.ProxyAuth)
|
auther = getAuther(auth.ProxyAuth{}, rawAuther).(*auth.ProxyAuth)
|
||||||
|
case auth.MethodHookAuth:
|
||||||
|
auther = getAuther(&auth.HookAuth{}, rawAuther).(*auth.HookAuth)
|
||||||
default:
|
default:
|
||||||
checkErr(errors.New("invalid auth method"))
|
checkErr(errors.New("invalid auth method"))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,9 +35,10 @@ override the options.`,
|
|||||||
AuthMethod: authMethod,
|
AuthMethod: authMethod,
|
||||||
Defaults: defaults,
|
Defaults: defaults,
|
||||||
Branding: settings.Branding{
|
Branding: settings.Branding{
|
||||||
Name: mustGetString(flags, "branding.name"),
|
Name: mustGetString(flags, "branding.name"),
|
||||||
DisableExternal: mustGetBool(flags, "branding.disableExternal"),
|
DisableExternal: mustGetBool(flags, "branding.disableExternal"),
|
||||||
Files: mustGetString(flags, "branding.files"),
|
DisableUsedPercentage: mustGetBool(flags, "branding.disableUsedPercentage"),
|
||||||
|
Files: mustGetString(flags, "branding.files"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ you want to change. Other options will remain unchanged.`,
|
|||||||
set.Branding.Color = mustGetString(flags, flag.Name)
|
set.Branding.Color = mustGetString(flags, flag.Name)
|
||||||
case "branding.disableExternal":
|
case "branding.disableExternal":
|
||||||
set.Branding.DisableExternal = mustGetBool(flags, flag.Name)
|
set.Branding.DisableExternal = mustGetBool(flags, flag.Name)
|
||||||
|
case "branding.disableUsedPercentage":
|
||||||
|
set.Branding.DisableUsedPercentage = mustGetBool(flags, flag.Name)
|
||||||
case "branding.files":
|
case "branding.files":
|
||||||
set.Branding.Files = mustGetString(flags, flag.Name)
|
set.Branding.Files = mustGetString(flags, flag.Name)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,12 +98,12 @@ func generateMarkdown(cmd *cobra.Command, w io.Writer) {
|
|||||||
buf.WriteString(long + "\n\n")
|
buf.WriteString(long + "\n\n")
|
||||||
|
|
||||||
if cmd.Runnable() {
|
if cmd.Runnable() {
|
||||||
buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.UseLine()))
|
_, _ = fmt.Fprintf(buf, "```\n%s\n```\n\n", cmd.UseLine())
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(cmd.Example) > 0 {
|
if len(cmd.Example) > 0 {
|
||||||
buf.WriteString("## Examples\n\n")
|
buf.WriteString("## Examples\n\n")
|
||||||
buf.WriteString(fmt.Sprintf("```\n%s\n```\n\n", cmd.Example))
|
_, _ = fmt.Fprintf(buf, "```\n%s\n```\n\n", cmd.Example)
|
||||||
}
|
}
|
||||||
|
|
||||||
printOptions(buf, cmd)
|
printOptions(buf, cmd)
|
||||||
|
|||||||
21
cmd/root.go
21
cmd/root.go
@@ -3,8 +3,8 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"errors"
|
"errors"
|
||||||
|
"io"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -181,6 +181,7 @@ user created with the credentials from options "username" and "password".`,
|
|||||||
defer listener.Close()
|
defer listener.Close()
|
||||||
|
|
||||||
log.Println("Listening on", listener.Addr().String())
|
log.Println("Listening on", listener.Addr().String())
|
||||||
|
//nolint: gosec
|
||||||
if err := http.Serve(listener, handler); err != nil {
|
if err := http.Serve(listener, handler); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
@@ -299,7 +300,7 @@ func setupLog(logMethod string) {
|
|||||||
case "stderr":
|
case "stderr":
|
||||||
log.SetOutput(os.Stderr)
|
log.SetOutput(os.Stderr)
|
||||||
case "":
|
case "":
|
||||||
log.SetOutput(ioutil.Discard)
|
log.SetOutput(io.Discard)
|
||||||
default:
|
default:
|
||||||
log.SetOutput(&lumberjack.Logger{
|
log.SetOutput(&lumberjack.Logger{
|
||||||
Filename: logMethod,
|
Filename: logMethod,
|
||||||
@@ -312,9 +313,10 @@ func setupLog(logMethod string) {
|
|||||||
|
|
||||||
func quickSetup(flags *pflag.FlagSet, d pythonData) {
|
func quickSetup(flags *pflag.FlagSet, d pythonData) {
|
||||||
set := &settings.Settings{
|
set := &settings.Settings{
|
||||||
Key: generateKey(),
|
Key: generateKey(),
|
||||||
Signup: false,
|
Signup: false,
|
||||||
CreateUserDir: false,
|
CreateUserDir: false,
|
||||||
|
UserHomeBasePath: settings.DefaultUsersHomeBasePath,
|
||||||
Defaults: settings.UserDefaults{
|
Defaults: settings.UserDefaults{
|
||||||
Scope: ".",
|
Scope: ".",
|
||||||
Locale: "en",
|
Locale: "en",
|
||||||
@@ -330,6 +332,15 @@ func quickSetup(flags *pflag.FlagSet, d pythonData) {
|
|||||||
Download: true,
|
Download: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
AuthMethod: "",
|
||||||
|
Branding: settings.Branding{},
|
||||||
|
Tus: settings.Tus{
|
||||||
|
ChunkSize: settings.DefaultTusChunkSize,
|
||||||
|
RetryCount: settings.DefaultTusRetryCount,
|
||||||
|
},
|
||||||
|
Commands: nil,
|
||||||
|
Shell: nil,
|
||||||
|
Rules: nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ func printUsers(usrs []*users.User) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func parseUsernameOrID(arg string) (username string, id uint) {
|
func parseUsernameOrID(arg string) (username string, id uint) {
|
||||||
id64, err := strconv.ParseUint(arg, 10, 64) //nolint:gomnd
|
id64, err := strconv.ParseUint(arg, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return arg, 0
|
return arg, 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/asdine/storm"
|
"github.com/asdine/storm/v3"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
yaml "gopkg.in/yaml.v2"
|
yaml "gopkg.in/yaml.v2"
|
||||||
|
|||||||
28
common.mk
Normal file
28
common.mk
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
SHELL := /usr/bin/env bash
|
||||||
|
DATE ?= $(shell date +%FT%T%z)
|
||||||
|
BASE_PATH := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||||
|
VERSION ?= $(shell git describe --tags --always --match=v* 2> /dev/null || \
|
||||||
|
cat $(CURDIR)/.version 2> /dev/null || echo v0)
|
||||||
|
VERSION_HASH = $(shell git rev-parse HEAD)
|
||||||
|
BRANCH = $(shell git rev-parse --abbrev-ref HEAD)
|
||||||
|
|
||||||
|
go = GOGC=off go
|
||||||
|
MODULE = $(shell env GO111MODULE=on go list -m)
|
||||||
|
|
||||||
|
# printing
|
||||||
|
# $Q (quiet) is used in the targets as a replacer for @.
|
||||||
|
# This macro helps to print the command for debugging by setting V to 1. Example `make test-unit V=1`
|
||||||
|
V = 0
|
||||||
|
Q = $(if $(filter 1,$V),,@)
|
||||||
|
# $M is a macro to print a colored ▶ character. Example `$(info $(M) running coverage tests…)` will print "▶ running coverage tests…"
|
||||||
|
M = $(shell printf "\033[34;1m▶\033[0m")
|
||||||
|
|
||||||
|
GREEN := $(shell tput -Txterm setaf 2)
|
||||||
|
YELLOW := $(shell tput -Txterm setaf 3)
|
||||||
|
WHITE := $(shell tput -Txterm setaf 7)
|
||||||
|
CYAN := $(shell tput -Txterm setaf 6)
|
||||||
|
RESET := $(shell tput -Txterm sgr0)
|
||||||
|
|
||||||
|
define global_option
|
||||||
|
printf " ${YELLOW}%-20s${GREEN}%s${RESET}\n" $(1) $(2)
|
||||||
|
endef
|
||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -55,7 +55,7 @@ func (f *FileCache) Load(ctx context.Context, key string) (value []byte, exist b
|
|||||||
}
|
}
|
||||||
defer r.Close()
|
defer r.Close()
|
||||||
|
|
||||||
value, err = ioutil.ReadAll(r)
|
value, err = io.ReadAll(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
|
|||||||
8
docker/root/defaults/settings.json
Normal file
8
docker/root/defaults/settings.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"port": 80,
|
||||||
|
"baseURL": "",
|
||||||
|
"address": "",
|
||||||
|
"log": "stdout",
|
||||||
|
"database": "/database/filebrowser.db",
|
||||||
|
"root": "/srv"
|
||||||
|
}
|
||||||
15
docker/root/etc/cont-init.d/20-config
Normal file
15
docker/root/etc/cont-init.d/20-config
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/with-contenv bash
|
||||||
|
|
||||||
|
# make folders
|
||||||
|
mkdir -p /database
|
||||||
|
|
||||||
|
# copy config
|
||||||
|
if [ ! -f "/config/settings.json" ]; then
|
||||||
|
cp -a /defaults/settings.json /config/settings.json
|
||||||
|
fi
|
||||||
|
|
||||||
|
# permissions
|
||||||
|
chown abc:abc \
|
||||||
|
/config/settings.json \
|
||||||
|
/database \
|
||||||
|
/srv
|
||||||
3
docker/root/etc/services.d/filebrowser/run
Normal file
3
docker/root/etc/services.d/filebrowser/run
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/with-contenv bash
|
||||||
|
|
||||||
|
exec s6-setuidgid abc filebrowser -c /config/settings.json -d /database/filebrowser.db;
|
||||||
@@ -23,6 +23,9 @@ import (
|
|||||||
"github.com/filebrowser/filebrowser/v2/rules"
|
"github.com/filebrowser/filebrowser/v2/rules"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const PermFile = 0664
|
||||||
|
const PermDir = 0755
|
||||||
|
|
||||||
// FileInfo describes a file.
|
// FileInfo describes a file.
|
||||||
type FileInfo struct {
|
type FileInfo struct {
|
||||||
*Listing
|
*Listing
|
||||||
@@ -185,8 +188,22 @@ func (i *FileInfo) Checksum(algo string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *FileInfo) RealPath() string {
|
||||||
|
if realPathFs, ok := i.Fs.(interface {
|
||||||
|
RealPath(name string) (fPath string, err error)
|
||||||
|
}); ok {
|
||||||
|
realPath, err := realPathFs.RealPath(i.Path)
|
||||||
|
if err == nil {
|
||||||
|
return realPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return i.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use constants
|
||||||
|
//
|
||||||
//nolint:goconst
|
//nolint:goconst
|
||||||
//TODO: use constants
|
|
||||||
func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error {
|
func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error {
|
||||||
if IsNamedPipe(i.Mode) {
|
if IsNamedPipe(i.Mode) {
|
||||||
i.Type = "blob"
|
i.Type = "blob"
|
||||||
@@ -219,6 +236,9 @@ func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error {
|
|||||||
case strings.HasPrefix(mimetype, "image"):
|
case strings.HasPrefix(mimetype, "image"):
|
||||||
i.Type = "image"
|
i.Type = "image"
|
||||||
return nil
|
return nil
|
||||||
|
case strings.HasSuffix(mimetype, "pdf"):
|
||||||
|
i.Type = "pdf"
|
||||||
|
return nil
|
||||||
case (strings.HasPrefix(mimetype, "text") || !isBinary(buffer)) && i.Size <= 10*1024*1024: // 10 MB
|
case (strings.HasPrefix(mimetype, "text") || !isBinary(buffer)) && i.Size <= 10*1024*1024: // 10 MB
|
||||||
i.Type = "text"
|
i.Type = "text"
|
||||||
|
|
||||||
@@ -271,11 +291,17 @@ func (i *FileInfo) detectSubtitles() {
|
|||||||
i.Subtitles = []string{}
|
i.Subtitles = []string{}
|
||||||
ext := filepath.Ext(i.Path)
|
ext := filepath.Ext(i.Path)
|
||||||
|
|
||||||
// TODO: detect multiple languages. Base.Lang.vtt
|
// detect multiple languages. Base*.vtt
|
||||||
|
// TODO: give subtitles descriptive names (lang) and track attributes
|
||||||
fPath := strings.TrimSuffix(i.Path, ext) + ".vtt"
|
parentDir := strings.TrimRight(i.Path, i.Name)
|
||||||
if _, err := i.Fs.Stat(fPath); err == nil {
|
dir, err := afero.ReadDir(i.Fs, parentDir)
|
||||||
i.Subtitles = append(i.Subtitles, fPath)
|
if err == nil {
|
||||||
|
base := strings.TrimSuffix(i.Name, ext)
|
||||||
|
for _, f := range dir {
|
||||||
|
if !f.IsDir() && strings.HasPrefix(f.Name(), base) && strings.HasSuffix(f.Name(), ".vtt") {
|
||||||
|
i.Subtitles = append(i.Subtitles, path.Join(parentDir, f.Name()))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,7 +326,7 @@ func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
isSymlink := false
|
isSymlink, isInvalidLink := false, false
|
||||||
if IsSymlink(f.Mode()) {
|
if IsSymlink(f.Mode()) {
|
||||||
isSymlink = true
|
isSymlink = true
|
||||||
// It's a symbolic link. We try to follow it. If it doesn't work,
|
// It's a symbolic link. We try to follow it. If it doesn't work,
|
||||||
@@ -308,6 +334,8 @@ func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error {
|
|||||||
info, err := i.Fs.Stat(fPath)
|
info, err := i.Fs.Stat(fPath)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
f = info
|
f = info
|
||||||
|
} else {
|
||||||
|
isInvalidLink = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,9 +356,13 @@ func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error {
|
|||||||
} else {
|
} else {
|
||||||
listing.NumFiles++
|
listing.NumFiles++
|
||||||
|
|
||||||
err := file.detectType(true, false, readHeader)
|
if isInvalidLink {
|
||||||
if err != nil {
|
file.Type = "invalid_link"
|
||||||
return err
|
} else {
|
||||||
|
err := file.detectType(true, false, readHeader)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ type Listing struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ApplySort applies the sort order using .Order and .Sort
|
// ApplySort applies the sort order using .Order and .Sort
|
||||||
|
//
|
||||||
//nolint:goconst
|
//nolint:goconst
|
||||||
func (l Listing) ApplySort() {
|
func (l Listing) ApplySort() {
|
||||||
// Check '.Order' to know how to sort
|
// Check '.Order' to know how to sort
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ func MoveFile(fs afero.Fs, src, dst string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// fallback
|
// fallback
|
||||||
err := CopyFile(fs, src, dst)
|
err := Copy(fs, src, dst)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = fs.Remove(dst)
|
_ = fs.Remove(dst)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := fs.Remove(src); err != nil {
|
if err := fs.RemoveAll(src); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
//go:build !dev
|
||||||
// +build !dev
|
// +build !dev
|
||||||
|
|
||||||
package frontend
|
package frontend
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
//go:build dev
|
||||||
// +build dev
|
// +build dev
|
||||||
|
|
||||||
package frontend
|
package frontend
|
||||||
|
|||||||
675
frontend/package-lock.json
generated
675
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"serve": "vue-cli-service serve",
|
"serve": "vue-cli-service serve",
|
||||||
"build": "find ./dist -maxdepth 1 -mindepth 1 ! -name '.gitignore' -exec rm -r {} + && vue-cli-service build --no-clean",
|
"build": "find ./dist -maxdepth 1 -mindepth 1 ! -name '.gitignore' -exec rm -r {} + && vue-cli-service build --no-clean",
|
||||||
"lint": "npx vue-cli-service lint --no-fix",
|
"lint": "npx vue-cli-service lint --no-fix --max-warnings=0",
|
||||||
"fix": "npx vue-cli-service lint",
|
"fix": "npx vue-cli-service lint",
|
||||||
"watch": "find ./dist -maxdepth 1 -mindepth 1 ! -name '.gitignore' -exec rm -r {} + && vue-cli-service build --watch --no-clean"
|
"watch": "find ./dist -maxdepth 1 -mindepth 1 ! -name '.gitignore' -exec rm -r {} + && vue-cli-service build --watch --no-clean"
|
||||||
},
|
},
|
||||||
@@ -17,16 +17,20 @@
|
|||||||
"js-base64": "^2.5.1",
|
"js-base64": "^2.5.1",
|
||||||
"lodash.clonedeep": "^4.5.0",
|
"lodash.clonedeep": "^4.5.0",
|
||||||
"lodash.throttle": "^4.1.1",
|
"lodash.throttle": "^4.1.1",
|
||||||
"material-design-icons": "^3.0.1",
|
"material-icons": "^1.10.5",
|
||||||
"moment": "^2.24.0",
|
"moment": "^2.29.4",
|
||||||
"normalize.css": "^8.0.1",
|
"normalize.css": "^8.0.1",
|
||||||
"noty": "^3.2.0-beta",
|
"noty": "^3.2.0-beta",
|
||||||
|
"pretty-bytes": "^6.0.0",
|
||||||
"qrcode.vue": "^1.7.0",
|
"qrcode.vue": "^1.7.0",
|
||||||
|
"tus-js-client": "^3.1.0",
|
||||||
"utif": "^3.1.0",
|
"utif": "^3.1.0",
|
||||||
"vue": "^2.6.10",
|
"vue": "^2.6.10",
|
||||||
|
"vue-async-computed": "^3.9.0",
|
||||||
"vue-i18n": "^8.15.3",
|
"vue-i18n": "^8.15.3",
|
||||||
"vue-lazyload": "^1.3.3",
|
"vue-lazyload": "^1.3.3",
|
||||||
"vue-router": "^3.1.3",
|
"vue-router": "^3.1.3",
|
||||||
|
"vue-simple-progress": "^1.1.1",
|
||||||
"vuex": "^3.1.2",
|
"vuex": "^3.1.2",
|
||||||
"vuex-router-sync": "^5.0.0",
|
"vuex-router-sync": "^5.0.0",
|
||||||
"whatwg-fetch": "^3.6.2"
|
"whatwg-fetch": "^3.6.2"
|
||||||
|
|||||||
@@ -1,34 +1,31 @@
|
|||||||
import { fetchURL, removePrefix } from "./utils";
|
import { createURL, fetchURL, removePrefix } from "./utils";
|
||||||
import { baseURL } from "@/utils/constants";
|
import { baseURL } from "@/utils/constants";
|
||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
|
import { upload as postTus, useTus } from "./tus";
|
||||||
|
|
||||||
export async function fetch(url) {
|
export async function fetch(url) {
|
||||||
url = removePrefix(url);
|
url = removePrefix(url);
|
||||||
|
|
||||||
const res = await fetchURL(`/api/resources${url}`, {});
|
const res = await fetchURL(`/api/resources${url}`, {});
|
||||||
|
|
||||||
if (res.status === 200) {
|
let data = await res.json();
|
||||||
let data = await res.json();
|
data.url = `/files${url}`;
|
||||||
data.url = `/files${url}`;
|
|
||||||
|
|
||||||
if (data.isDir) {
|
if (data.isDir) {
|
||||||
if (!data.url.endsWith("/")) data.url += "/";
|
if (!data.url.endsWith("/")) data.url += "/";
|
||||||
data.items = data.items.map((item, index) => {
|
data.items = data.items.map((item, index) => {
|
||||||
item.index = index;
|
item.index = index;
|
||||||
item.url = `${data.url}${encodeURIComponent(item.name)}`;
|
item.url = `${data.url}${encodeURIComponent(item.name)}`;
|
||||||
|
|
||||||
if (item.isDir) {
|
if (item.isDir) {
|
||||||
item.url += "/";
|
item.url += "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
} else {
|
|
||||||
throw new Error(res.status);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function resourceAction(url, method, content) {
|
async function resourceAction(url, method, content) {
|
||||||
@@ -42,11 +39,7 @@ async function resourceAction(url, method, content) {
|
|||||||
|
|
||||||
const res = await fetchURL(`/api/resources${url}`, opts);
|
const res = await fetchURL(`/api/resources${url}`, opts);
|
||||||
|
|
||||||
if (res.status !== 200) {
|
return res;
|
||||||
throw new Error(await res.text());
|
|
||||||
} else {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function remove(url) {
|
export async function remove(url) {
|
||||||
@@ -86,6 +79,21 @@ export function download(format, ...files) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function post(url, content = "", overwrite = false, onupload) {
|
export async function post(url, content = "", overwrite = false, onupload) {
|
||||||
|
// Use the pre-existing API if:
|
||||||
|
const useResourcesApi =
|
||||||
|
// a folder is being created
|
||||||
|
url.endsWith("/") ||
|
||||||
|
// We're not using http(s)
|
||||||
|
(content instanceof Blob &&
|
||||||
|
!["http:", "https:"].includes(window.location.protocol)) ||
|
||||||
|
// Tus is disabled / not applicable
|
||||||
|
!(await useTus(content));
|
||||||
|
return useResourcesApi
|
||||||
|
? postResources(url, content, overwrite, onupload)
|
||||||
|
: postTus(url, content, overwrite, onupload);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function postResources(url, content = "", overwrite = false, onupload) {
|
||||||
url = removePrefix(url);
|
url = removePrefix(url);
|
||||||
|
|
||||||
let bufferContent;
|
let bufferContent;
|
||||||
@@ -119,8 +127,8 @@ export async function post(url, content = "", overwrite = false, onupload) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
request.onerror = (error) => {
|
request.onerror = () => {
|
||||||
reject(error);
|
reject(new Error("001 Connection aborted"));
|
||||||
};
|
};
|
||||||
|
|
||||||
request.send(bufferContent || content);
|
request.send(bufferContent || content);
|
||||||
@@ -154,3 +162,41 @@ export async function checksum(url, algo) {
|
|||||||
const data = await resourceAction(`${url}?checksum=${algo}`, "GET");
|
const data = await resourceAction(`${url}?checksum=${algo}`, "GET");
|
||||||
return (await data.json()).checksums[algo];
|
return (await data.json()).checksums[algo];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getDownloadURL(file, inline) {
|
||||||
|
const params = {
|
||||||
|
...(inline && { inline: "true" }),
|
||||||
|
};
|
||||||
|
|
||||||
|
return createURL("api/raw" + file.path, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPreviewURL(file, size) {
|
||||||
|
const params = {
|
||||||
|
inline: "true",
|
||||||
|
key: Date.parse(file.modified),
|
||||||
|
};
|
||||||
|
|
||||||
|
return createURL("api/preview/" + size + file.path, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getSubtitlesURL(file) {
|
||||||
|
const params = {
|
||||||
|
inline: "true",
|
||||||
|
};
|
||||||
|
|
||||||
|
const subtitles = [];
|
||||||
|
for (const sub of file.subtitles) {
|
||||||
|
subtitles.push(createURL("api/raw" + sub, params));
|
||||||
|
}
|
||||||
|
|
||||||
|
return subtitles;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function usage(url) {
|
||||||
|
url = removePrefix(url);
|
||||||
|
|
||||||
|
const res = await fetchURL(`/api/usage${url}`, {});
|
||||||
|
|
||||||
|
return await res.json();
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,35 +1,35 @@
|
|||||||
import { fetchURL, removePrefix } from "./utils";
|
import { fetchURL, removePrefix, createURL } from "./utils";
|
||||||
import { baseURL } from "@/utils/constants";
|
import { baseURL } from "@/utils/constants";
|
||||||
|
|
||||||
export async function fetch(url, password = "") {
|
export async function fetch(url, password = "") {
|
||||||
url = removePrefix(url);
|
url = removePrefix(url);
|
||||||
|
|
||||||
const res = await fetchURL(`/api/public/share${url}`, {
|
const res = await fetchURL(
|
||||||
headers: { "X-SHARE-PASSWORD": password },
|
`/api/public/share${url}`,
|
||||||
});
|
{
|
||||||
|
headers: { "X-SHARE-PASSWORD": encodeURIComponent(password) },
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
if (res.status === 200) {
|
let data = await res.json();
|
||||||
let data = await res.json();
|
data.url = `/share${url}`;
|
||||||
data.url = `/share${url}`;
|
|
||||||
|
|
||||||
if (data.isDir) {
|
if (data.isDir) {
|
||||||
if (!data.url.endsWith("/")) data.url += "/";
|
if (!data.url.endsWith("/")) data.url += "/";
|
||||||
data.items = data.items.map((item, index) => {
|
data.items = data.items.map((item, index) => {
|
||||||
item.index = index;
|
item.index = index;
|
||||||
item.url = `${data.url}${encodeURIComponent(item.name)}`;
|
item.url = `${data.url}${encodeURIComponent(item.name)}`;
|
||||||
|
|
||||||
if (item.isDir) {
|
if (item.isDir) {
|
||||||
item.url += "/";
|
item.url += "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
} else {
|
|
||||||
throw new Error(res.status);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function download(format, hash, token, ...files) {
|
export function download(format, hash, token, ...files) {
|
||||||
@@ -59,3 +59,12 @@ export function download(format, hash, token, ...files) {
|
|||||||
|
|
||||||
window.open(url);
|
window.open(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getDownloadURL(share, inline = false) {
|
||||||
|
const params = {
|
||||||
|
...(inline && { inline: "true" }),
|
||||||
|
...(share.token && { token: share.token }),
|
||||||
|
};
|
||||||
|
|
||||||
|
return createURL("api/public/dl/" + share.hash + share.path, params, false);
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,21 +11,17 @@ export default async function search(base, query) {
|
|||||||
|
|
||||||
let res = await fetchURL(`/api/search${base}?query=${query}`, {});
|
let res = await fetchURL(`/api/search${base}?query=${query}`, {});
|
||||||
|
|
||||||
if (res.status === 200) {
|
let data = await res.json();
|
||||||
let data = await res.json();
|
|
||||||
|
|
||||||
data = data.map((item) => {
|
data = data.map((item) => {
|
||||||
item.url = `/files${base}` + url.encodePath(item.path);
|
item.url = `/files${base}` + url.encodePath(item.path);
|
||||||
|
|
||||||
if (item.dir) {
|
if (item.dir) {
|
||||||
item.url += "/";
|
item.url += "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
});
|
});
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
} else {
|
|
||||||
throw Error(res.status);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,8 @@ export function get() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function update(settings) {
|
export async function update(settings) {
|
||||||
const res = await fetchURL(`/api/settings`, {
|
await fetchURL(`/api/settings`, {
|
||||||
method: "PUT",
|
method: "PUT",
|
||||||
body: JSON.stringify(settings),
|
body: JSON.stringify(settings),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res.status !== 200) {
|
|
||||||
throw new Error(res.status);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { fetchURL, fetchJSON, removePrefix } from "./utils";
|
import { fetchURL, fetchJSON, removePrefix, createURL } from "./utils";
|
||||||
|
|
||||||
export async function list() {
|
export async function list() {
|
||||||
return fetchJSON("/api/shares");
|
return fetchJSON("/api/shares");
|
||||||
@@ -10,13 +10,9 @@ export async function get(url) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function remove(hash) {
|
export async function remove(hash) {
|
||||||
const res = await fetchURL(`/api/share/${hash}`, {
|
await fetchURL(`/api/share/${hash}`, {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res.status !== 200) {
|
|
||||||
throw new Error(res.status);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function create(url, password = "", expires = "", unit = "hours") {
|
export async function create(url, password = "", expires = "", unit = "hours") {
|
||||||
@@ -34,3 +30,7 @@ export async function create(url, password = "", expires = "", unit = "hours") {
|
|||||||
body: body,
|
body: body,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getShareURL(share) {
|
||||||
|
return createURL("share/" + share.hash, {}, false);
|
||||||
|
}
|
||||||
|
|||||||
90
frontend/src/api/tus.js
Normal file
90
frontend/src/api/tus.js
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
import * as tus from "tus-js-client";
|
||||||
|
import { baseURL, tusEndpoint, tusSettings } from "@/utils/constants";
|
||||||
|
import store from "@/store";
|
||||||
|
import { removePrefix } from "@/api/utils";
|
||||||
|
import { fetchURL } from "./utils";
|
||||||
|
|
||||||
|
const RETRY_BASE_DELAY = 1000;
|
||||||
|
const RETRY_MAX_DELAY = 20000;
|
||||||
|
|
||||||
|
export async function upload(
|
||||||
|
filePath,
|
||||||
|
content = "",
|
||||||
|
overwrite = false,
|
||||||
|
onupload
|
||||||
|
) {
|
||||||
|
if (!tusSettings) {
|
||||||
|
// Shouldn't happen as we check for tus support before calling this function
|
||||||
|
throw new Error("Tus.io settings are not defined");
|
||||||
|
}
|
||||||
|
|
||||||
|
filePath = removePrefix(filePath);
|
||||||
|
let resourcePath = `${tusEndpoint}${filePath}?override=${overwrite}`;
|
||||||
|
|
||||||
|
await createUpload(resourcePath);
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let upload = new tus.Upload(content, {
|
||||||
|
uploadUrl: `${baseURL}${resourcePath}`,
|
||||||
|
chunkSize: tusSettings.chunkSize,
|
||||||
|
retryDelays: computeRetryDelays(tusSettings),
|
||||||
|
parallelUploads: 1,
|
||||||
|
storeFingerprintForResuming: false,
|
||||||
|
headers: {
|
||||||
|
"X-Auth": store.state.jwt,
|
||||||
|
},
|
||||||
|
onError: function (error) {
|
||||||
|
reject("Upload failed: " + error);
|
||||||
|
},
|
||||||
|
onProgress: function (bytesUploaded) {
|
||||||
|
// Emulate ProgressEvent.loaded which is used by calling functions
|
||||||
|
// loaded is specified in bytes (https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent/loaded)
|
||||||
|
if (typeof onupload === "function") {
|
||||||
|
onupload({ loaded: bytesUploaded });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onSuccess: function () {
|
||||||
|
resolve();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
upload.start();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function createUpload(resourcePath) {
|
||||||
|
let headResp = await fetchURL(resourcePath, {
|
||||||
|
method: "POST",
|
||||||
|
});
|
||||||
|
if (headResp.status !== 201) {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to create an upload: ${headResp.status} ${headResp.statusText}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function computeRetryDelays(tusSettings) {
|
||||||
|
if (!tusSettings.retryCount || tusSettings.retryCount < 1) {
|
||||||
|
// Disable retries altogether
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// The tus client expects our retries as an array with computed backoffs
|
||||||
|
// E.g.: [0, 3000, 5000, 10000, 20000]
|
||||||
|
const retryDelays = [];
|
||||||
|
let delay = 0;
|
||||||
|
|
||||||
|
for (let i = 0; i < tusSettings.retryCount; i++) {
|
||||||
|
retryDelays.push(Math.min(delay, RETRY_MAX_DELAY));
|
||||||
|
delay =
|
||||||
|
delay === 0 ? RETRY_BASE_DELAY : Math.min(delay * 2, RETRY_MAX_DELAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retryDelays;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function useTus(content) {
|
||||||
|
return isTusSupported() && content instanceof Blob;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isTusSupported() {
|
||||||
|
return tus.isSupported === true;
|
||||||
|
}
|
||||||
@@ -20,13 +20,11 @@ export async function create(user) {
|
|||||||
|
|
||||||
if (res.status === 201) {
|
if (res.status === 201) {
|
||||||
return res.headers.get("Location");
|
return res.headers.get("Location");
|
||||||
} else {
|
|
||||||
throw new Error(res.status);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function update(user, which = ["all"]) {
|
export async function update(user, which = ["all"]) {
|
||||||
const res = await fetchURL(`/api/users/${user.id}`, {
|
await fetchURL(`/api/users/${user.id}`, {
|
||||||
method: "PUT",
|
method: "PUT",
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
what: "user",
|
what: "user",
|
||||||
@@ -34,18 +32,10 @@ export async function update(user, which = ["all"]) {
|
|||||||
data: user,
|
data: user,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res.status !== 200) {
|
|
||||||
throw new Error(res.status);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function remove(id) {
|
export async function remove(id) {
|
||||||
const res = await fetchURL(`/api/users/${id}`, {
|
await fetchURL(`/api/users/${id}`, {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res.status !== 200) {
|
|
||||||
throw new Error(res.status);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
import { renew } from "@/utils/auth";
|
import { renew, logout } from "@/utils/auth";
|
||||||
import { baseURL } from "@/utils/constants";
|
import { baseURL } from "@/utils/constants";
|
||||||
|
import { encodePath } from "@/utils/url";
|
||||||
|
|
||||||
export async function fetchURL(url, opts) {
|
export async function fetchURL(url, opts, auth = true) {
|
||||||
opts = opts || {};
|
opts = opts || {};
|
||||||
opts.headers = opts.headers || {};
|
opts.headers = opts.headers || {};
|
||||||
|
|
||||||
let { headers, ...rest } = opts;
|
let { headers, ...rest } = opts;
|
||||||
|
|
||||||
let res;
|
let res;
|
||||||
try {
|
try {
|
||||||
res = await fetch(`${baseURL}${url}`, {
|
res = await fetch(`${baseURL}${url}`, {
|
||||||
@@ -17,14 +17,28 @@ export async function fetchURL(url, opts) {
|
|||||||
},
|
},
|
||||||
...rest,
|
...rest,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch {
|
||||||
return { status: 0 };
|
const error = new Error("000 No connection");
|
||||||
|
error.status = 0;
|
||||||
|
|
||||||
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res.headers.get("X-Renew-Token") === "true") {
|
if (auth && res.headers.get("X-Renew-Token") === "true") {
|
||||||
await renew(store.state.jwt);
|
await renew(store.state.jwt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (res.status < 200 || res.status > 299) {
|
||||||
|
const error = new Error(await res.text());
|
||||||
|
error.status = res.status;
|
||||||
|
|
||||||
|
if (auth && res.status == 401) {
|
||||||
|
logout();
|
||||||
|
}
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,3 +59,22 @@ export function removePrefix(url) {
|
|||||||
if (url[0] !== "/") url = "/" + url;
|
if (url[0] !== "/") url = "/" + url;
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function createURL(endpoint, params = {}, auth = true) {
|
||||||
|
let prefix = baseURL;
|
||||||
|
if (!prefix.endsWith("/")) {
|
||||||
|
prefix = prefix + "/";
|
||||||
|
}
|
||||||
|
const url = new URL(prefix + encodePath(endpoint), origin);
|
||||||
|
|
||||||
|
const searchParams = {
|
||||||
|
...(auth && { auth: store.state.jwt }),
|
||||||
|
...params,
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const key in searchParams) {
|
||||||
|
url.searchParams.set(key, searchParams[key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return url.toString();
|
||||||
|
}
|
||||||
|
|||||||
@@ -113,7 +113,10 @@ export default {
|
|||||||
this.scroll();
|
this.scroll();
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
results.text = results.text.trimEnd();
|
results.text = results.text
|
||||||
|
// eslint-disable-next-line no-control-regex
|
||||||
|
.replace(/\u001b\[[0-9;]+m/g, "") // Filter ANSI color for now
|
||||||
|
.trimEnd();
|
||||||
this.canInput = true;
|
this.canInput = true;
|
||||||
this.$refs.input.focus();
|
this.$refs.input.focus();
|
||||||
this.scroll();
|
this.scroll();
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
v-if="authMethod == 'json'"
|
v-if="canLogout"
|
||||||
@click="logout"
|
@click="logout"
|
||||||
class="action"
|
class="action"
|
||||||
id="logout"
|
id="logout"
|
||||||
@@ -80,6 +80,18 @@
|
|||||||
</router-link>
|
</router-link>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="credits"
|
||||||
|
v-if="
|
||||||
|
$router.currentRoute.path.includes('/files/') && !disableUsedPercentage
|
||||||
|
"
|
||||||
|
style="width: 90%; margin: 2em 2.5em 3em 2.5em"
|
||||||
|
>
|
||||||
|
<progress-bar :val="usage.usedPercentage" size="small"></progress-bar>
|
||||||
|
<br />
|
||||||
|
{{ usage.used }} of {{ usage.total }} used
|
||||||
|
</div>
|
||||||
|
|
||||||
<p class="credits">
|
<p class="credits">
|
||||||
<span>
|
<span>
|
||||||
<span v-if="disableExternal">File Browser</span>
|
<span v-if="disableExternal">File Browser</span>
|
||||||
@@ -92,9 +104,9 @@
|
|||||||
>
|
>
|
||||||
<span> {{ version }}</span>
|
<span> {{ version }}</span>
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span>
|
||||||
><a @click="help">{{ $t("sidebar.help") }}</a></span
|
<a @click="help">{{ $t("sidebar.help") }}</a>
|
||||||
>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
</nav>
|
</nav>
|
||||||
</template>
|
</template>
|
||||||
@@ -106,12 +118,19 @@ import {
|
|||||||
version,
|
version,
|
||||||
signup,
|
signup,
|
||||||
disableExternal,
|
disableExternal,
|
||||||
|
disableUsedPercentage,
|
||||||
noAuth,
|
noAuth,
|
||||||
authMethod,
|
loginPage,
|
||||||
} from "@/utils/constants";
|
} from "@/utils/constants";
|
||||||
|
import { files as api } from "@/api";
|
||||||
|
import ProgressBar from "vue-simple-progress";
|
||||||
|
import prettyBytes from "pretty-bytes";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "sidebar",
|
name: "sidebar",
|
||||||
|
components: {
|
||||||
|
ProgressBar,
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(["user"]),
|
...mapState(["user"]),
|
||||||
...mapGetters(["isLogged"]),
|
...mapGetters(["isLogged"]),
|
||||||
@@ -121,8 +140,36 @@ export default {
|
|||||||
signup: () => signup,
|
signup: () => signup,
|
||||||
version: () => version,
|
version: () => version,
|
||||||
disableExternal: () => disableExternal,
|
disableExternal: () => disableExternal,
|
||||||
noAuth: () => noAuth,
|
disableUsedPercentage: () => disableUsedPercentage,
|
||||||
authMethod: () => authMethod,
|
canLogout: () => !noAuth && loginPage,
|
||||||
|
},
|
||||||
|
asyncComputed: {
|
||||||
|
usage: {
|
||||||
|
async get() {
|
||||||
|
let path = this.$route.path.endsWith("/")
|
||||||
|
? this.$route.path
|
||||||
|
: this.$route.path + "/";
|
||||||
|
let usageStats = { used: 0, total: 0, usedPercentage: 0 };
|
||||||
|
if (this.disableUsedPercentage) {
|
||||||
|
return usageStats;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let usage = await api.usage(path);
|
||||||
|
usageStats = {
|
||||||
|
used: prettyBytes(usage.used, { binary: true }),
|
||||||
|
total: prettyBytes(usage.total, { binary: true }),
|
||||||
|
usedPercentage: Math.round((usage.used / usage.total) * 100),
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
this.$showError(error);
|
||||||
|
}
|
||||||
|
return usageStats;
|
||||||
|
},
|
||||||
|
default: { used: "0 B", total: "0 B", usedPercentage: 0 },
|
||||||
|
shouldUpdate() {
|
||||||
|
return this.$router.currentRoute.path.includes("/files/");
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
toRoot() {
|
toRoot() {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
@drop="drop"
|
@drop="drop"
|
||||||
@click="itemClick"
|
@click="itemClick"
|
||||||
:data-dir="isDir"
|
:data-dir="isDir"
|
||||||
|
:data-type="type"
|
||||||
:aria-label="name"
|
:aria-label="name"
|
||||||
:aria-selected="isSelected"
|
:aria-selected="isSelected"
|
||||||
>
|
>
|
||||||
@@ -17,7 +18,7 @@
|
|||||||
v-if="readOnly == undefined && type === 'image' && isThumbsEnabled"
|
v-if="readOnly == undefined && type === 'image' && isThumbsEnabled"
|
||||||
v-lazy="thumbnailUrl"
|
v-lazy="thumbnailUrl"
|
||||||
/>
|
/>
|
||||||
<i v-else class="material-icons">{{ icon }}</i>
|
<i v-else class="material-icons"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@@ -34,7 +35,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { baseURL, enableThumbs } from "@/utils/constants";
|
import { enableThumbs } from "@/utils/constants";
|
||||||
import { mapMutations, mapGetters, mapState } from "vuex";
|
import { mapMutations, mapGetters, mapState } from "vuex";
|
||||||
import filesize from "filesize";
|
import filesize from "filesize";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
@@ -57,6 +58,7 @@ export default {
|
|||||||
"modified",
|
"modified",
|
||||||
"index",
|
"index",
|
||||||
"readOnly",
|
"readOnly",
|
||||||
|
"path",
|
||||||
],
|
],
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(["user", "selected", "req", "jwt"]),
|
...mapState(["user", "selected", "req", "jwt"]),
|
||||||
@@ -67,13 +69,6 @@ export default {
|
|||||||
isSelected() {
|
isSelected() {
|
||||||
return this.selected.indexOf(this.index) !== -1;
|
return this.selected.indexOf(this.index) !== -1;
|
||||||
},
|
},
|
||||||
icon() {
|
|
||||||
if (this.isDir) return "folder";
|
|
||||||
if (this.type === "image") return "insert_photo";
|
|
||||||
if (this.type === "audio") return "volume_up";
|
|
||||||
if (this.type === "video") return "movie";
|
|
||||||
return "insert_drive_file";
|
|
||||||
},
|
|
||||||
isDraggable() {
|
isDraggable() {
|
||||||
return this.readOnly == undefined && this.user.perm.rename;
|
return this.readOnly == undefined && this.user.perm.rename;
|
||||||
},
|
},
|
||||||
@@ -89,12 +84,12 @@ export default {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
thumbnailUrl() {
|
thumbnailUrl() {
|
||||||
const path = this.url.replace(/^\/files\//, "");
|
const file = {
|
||||||
|
path: this.path,
|
||||||
|
modified: this.modified,
|
||||||
|
};
|
||||||
|
|
||||||
// reload the image when the file is replaced
|
return api.getPreviewURL(file, "thumb");
|
||||||
const key = Date.parse(this.modified);
|
|
||||||
|
|
||||||
return `${baseURL}/api/preview/thumb/${path}?k=${key}&inline=true`;
|
|
||||||
},
|
},
|
||||||
isThumbsEnabled() {
|
isThumbsEnabled() {
|
||||||
return enableThumbs;
|
return enableThumbs;
|
||||||
@@ -103,10 +98,10 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
...mapMutations(["addSelected", "removeSelected", "resetSelected"]),
|
...mapMutations(["addSelected", "removeSelected", "resetSelected"]),
|
||||||
humanSize: function () {
|
humanSize: function () {
|
||||||
return filesize(this.size);
|
return this.type == "invalid_link" ? "invalid link" : filesize(this.size);
|
||||||
},
|
},
|
||||||
humanTime: function () {
|
humanTime: function () {
|
||||||
if (this.user.dateFormat) {
|
if (this.readOnly == undefined && this.user.dateFormat) {
|
||||||
return moment(this.modified).format("L LT");
|
return moment(this.modified).format("L LT");
|
||||||
}
|
}
|
||||||
return moment(this.modified).fromNow();
|
return moment(this.modified).fromNow();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="card floating">
|
<div class="card floating">
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<p v-if="req.kind !== 'listing'">
|
<p v-if="selectedCount === 1">
|
||||||
{{ $t("prompts.deleteMessageSingle") }}
|
{{ $t("prompts.deleteMessageSingle") }}
|
||||||
</p>
|
</p>
|
||||||
<p v-else>
|
<p v-else>
|
||||||
|
|||||||
@@ -17,6 +17,14 @@
|
|||||||
>
|
>
|
||||||
{{ $t("buttons.cancel") }}
|
{{ $t("buttons.cancel") }}
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
class="button button--flat button--blue"
|
||||||
|
@click="showAction"
|
||||||
|
:aria-label="$t('buttons.continue')"
|
||||||
|
:title="$t('buttons.continue')"
|
||||||
|
>
|
||||||
|
{{ $t("buttons.continue") }}
|
||||||
|
</button>
|
||||||
<button
|
<button
|
||||||
class="button button--flat button--red"
|
class="button button--flat button--red"
|
||||||
@click="showConfirm"
|
@click="showConfirm"
|
||||||
@@ -34,6 +42,6 @@ import { mapState } from "vuex";
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "replace",
|
name: "replace",
|
||||||
computed: mapState(["showConfirm"]),
|
computed: mapState(["showConfirm", "showAction"]),
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -25,13 +25,23 @@
|
|||||||
<td class="small">
|
<td class="small">
|
||||||
<button
|
<button
|
||||||
class="action copy-clipboard"
|
class="action copy-clipboard"
|
||||||
:data-clipboard-text="buildLink(link.hash)"
|
:data-clipboard-text="buildLink(link)"
|
||||||
:aria-label="$t('buttons.copyToClipboard')"
|
:aria-label="$t('buttons.copyToClipboard')"
|
||||||
:title="$t('buttons.copyToClipboard')"
|
:title="$t('buttons.copyToClipboard')"
|
||||||
>
|
>
|
||||||
<i class="material-icons">content_paste</i>
|
<i class="material-icons">content_paste</i>
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
|
<td class="small" v-if="hasDownloadLink()">
|
||||||
|
<button
|
||||||
|
class="action copy-clipboard"
|
||||||
|
:data-clipboard-text="buildDownloadLink(link)"
|
||||||
|
:aria-label="$t('buttons.copyDownloadLinkToClipboard')"
|
||||||
|
:title="$t('buttons.copyDownloadLinkToClipboard')"
|
||||||
|
>
|
||||||
|
<i class="material-icons">content_paste_go</i>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
<td class="small">
|
<td class="small">
|
||||||
<button
|
<button
|
||||||
class="action"
|
class="action"
|
||||||
@@ -117,8 +127,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapState, mapGetters } from "vuex";
|
import { mapState, mapGetters } from "vuex";
|
||||||
import { share as api } from "@/api";
|
import { share as api, pub as pub_api } from "@/api";
|
||||||
import { baseURL } from "@/utils/constants";
|
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import Clipboard from "clipboard";
|
import Clipboard from "clipboard";
|
||||||
|
|
||||||
@@ -213,8 +222,16 @@ export default {
|
|||||||
humanTime(time) {
|
humanTime(time) {
|
||||||
return moment(time * 1000).fromNow();
|
return moment(time * 1000).fromNow();
|
||||||
},
|
},
|
||||||
buildLink(hash) {
|
buildLink(share) {
|
||||||
return `${window.location.origin}${baseURL}/share/${hash}`;
|
return api.getShareURL(share);
|
||||||
|
},
|
||||||
|
hasDownloadLink() {
|
||||||
|
return (
|
||||||
|
this.selected.length === 1 && !this.req.items[this.selected[0]].isDir
|
||||||
|
);
|
||||||
|
},
|
||||||
|
buildDownloadLink(share) {
|
||||||
|
return pub_api.getDownloadURL(share);
|
||||||
},
|
},
|
||||||
sort() {
|
sort() {
|
||||||
this.links = this.links.sort((a, b) => {
|
this.links = this.links.sort((a, b) => {
|
||||||
|
|||||||
63
frontend/src/components/prompts/UploadFiles.vue
Normal file
63
frontend/src/components/prompts/UploadFiles.vue
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
v-if="filesInUploadCount > 0"
|
||||||
|
class="upload-files"
|
||||||
|
v-bind:class="{ closed: !open }"
|
||||||
|
>
|
||||||
|
<div class="card floating">
|
||||||
|
<div class="card-title">
|
||||||
|
<h2>{{ $t("prompts.uploadFiles", { files: filesInUploadCount }) }}</h2>
|
||||||
|
|
||||||
|
<button
|
||||||
|
class="action"
|
||||||
|
@click="toggle"
|
||||||
|
aria-label="Toggle file upload list"
|
||||||
|
title="Toggle file upload list"
|
||||||
|
>
|
||||||
|
<i class="material-icons">{{
|
||||||
|
open ? "keyboard_arrow_down" : "keyboard_arrow_up"
|
||||||
|
}}</i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-content file-icons">
|
||||||
|
<div
|
||||||
|
class="file"
|
||||||
|
v-for="file in filesInUpload"
|
||||||
|
:key="file.id"
|
||||||
|
:data-dir="file.isDir"
|
||||||
|
:data-type="file.type"
|
||||||
|
:aria-label="file.name"
|
||||||
|
>
|
||||||
|
<div class="file-name">
|
||||||
|
<i class="material-icons"></i> {{ file.name }}
|
||||||
|
</div>
|
||||||
|
<div class="file-progress">
|
||||||
|
<div v-bind:style="{ width: file.progress + '%' }"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapGetters } from "vuex";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "uploadFiles",
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
open: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(["filesInUpload", "filesInUploadCount"]),
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
toggle: function () {
|
||||||
|
this.open = !this.open;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -13,6 +13,8 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
let dataObj = {
|
let dataObj = {
|
||||||
locales: {
|
locales: {
|
||||||
|
he: "he",
|
||||||
|
hu: "hu",
|
||||||
ar: "ar",
|
ar: "ar",
|
||||||
de: "de",
|
de: "de",
|
||||||
en: "en",
|
en: "en",
|
||||||
@@ -31,6 +33,7 @@ export default {
|
|||||||
sk: "sk",
|
sk: "sk",
|
||||||
"sv-se": "svSE",
|
"sv-se": "svSE",
|
||||||
tr: "tr",
|
tr: "tr",
|
||||||
|
ua: "ua",
|
||||||
"zh-cn": "zhCN",
|
"zh-cn": "zhCN",
|
||||||
"zh-tw": "zhTW",
|
"zh-tw": "zhTW",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -24,12 +24,18 @@
|
|||||||
<p>
|
<p>
|
||||||
<label for="scope">{{ $t("settings.scope") }}</label>
|
<label for="scope">{{ $t("settings.scope") }}</label>
|
||||||
<input
|
<input
|
||||||
|
:disabled="createUserDirData"
|
||||||
|
:placeholder="scopePlaceholder"
|
||||||
class="input input--block"
|
class="input input--block"
|
||||||
type="text"
|
type="text"
|
||||||
v-model="user.scope"
|
v-model="user.scope"
|
||||||
id="scope"
|
id="scope"
|
||||||
/>
|
/>
|
||||||
</p>
|
</p>
|
||||||
|
<p class="small" v-if="displayHomeDirectoryCheckbox">
|
||||||
|
<input type="checkbox" v-model="createUserDirData" />
|
||||||
|
{{ $t("settings.createUserHomeDirectory") }}
|
||||||
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<label for="locale">{{ $t("settings.language") }}</label>
|
<label for="locale">{{ $t("settings.language") }}</label>
|
||||||
@@ -69,17 +75,35 @@ import { enableExec } from "@/utils/constants";
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "user",
|
name: "user",
|
||||||
|
data: () => {
|
||||||
|
return {
|
||||||
|
createUserDirData: false,
|
||||||
|
originalUserScope: "/",
|
||||||
|
};
|
||||||
|
},
|
||||||
components: {
|
components: {
|
||||||
Permissions,
|
Permissions,
|
||||||
Languages,
|
Languages,
|
||||||
Rules,
|
Rules,
|
||||||
Commands,
|
Commands,
|
||||||
},
|
},
|
||||||
props: ["user", "isNew", "isDefault"],
|
props: ["user", "createUserDir", "isNew", "isDefault"],
|
||||||
|
created() {
|
||||||
|
this.originalUserScope = this.user.scope;
|
||||||
|
this.createUserDirData = this.createUserDir;
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
passwordPlaceholder() {
|
passwordPlaceholder() {
|
||||||
return this.isNew ? "" : this.$t("settings.avoidChanges");
|
return this.isNew ? "" : this.$t("settings.avoidChanges");
|
||||||
},
|
},
|
||||||
|
scopePlaceholder() {
|
||||||
|
return this.createUserDir
|
||||||
|
? this.$t("settings.userScopeGenerationPlaceholder")
|
||||||
|
: "";
|
||||||
|
},
|
||||||
|
displayHomeDirectoryCheckbox() {
|
||||||
|
return this.isNew && this.createUserDir;
|
||||||
|
},
|
||||||
isExecEnabled: () => enableExec,
|
isExecEnabled: () => enableExec,
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -87,6 +111,9 @@ export default {
|
|||||||
if (!this.user.perm.admin) return;
|
if (!this.user.perm.admin) return;
|
||||||
this.user.lockPassword = false;
|
this.user.lockPassword = false;
|
||||||
},
|
},
|
||||||
|
createUserDirData() {
|
||||||
|
this.user.scope = this.createUserDirData ? "" : this.originalUserScope;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -16,6 +16,10 @@
|
|||||||
transition: .2s ease transform;
|
transition: .2s ease transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl .shell {
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
.shell__result {
|
.shell__result {
|
||||||
display: flex;
|
display: flex;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
|
|||||||
@@ -4,4 +4,11 @@
|
|||||||
--red: #F44336;
|
--red: #F44336;
|
||||||
--dark-red: #D32F2F;
|
--dark-red: #D32F2F;
|
||||||
--moon-grey: #f2f2f2;
|
--moon-grey: #f2f2f2;
|
||||||
|
|
||||||
|
--icon-red: #da4453;
|
||||||
|
--icon-orange: #f47750;
|
||||||
|
--icon-yellow: #fdbc4b;
|
||||||
|
--icon-green: #2ecc71;
|
||||||
|
--icon-blue: #1d99f3;
|
||||||
|
--icon-violet: #9b59b6;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
body {
|
body {
|
||||||
font-family: 'Roboto', sans-serif;
|
font-family: "Roboto", sans-serif;
|
||||||
padding-top: 4em;
|
padding-top: 4em;
|
||||||
background-color: #fafafa;
|
background-color: #fafafa;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl {
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
@@ -13,7 +17,7 @@ body {
|
|||||||
*:hover,
|
*:hover,
|
||||||
*:active,
|
*:active,
|
||||||
*:focus {
|
*:focus {
|
||||||
outline: 0
|
outline: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
@@ -44,7 +48,7 @@ i.spin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#app {
|
#app {
|
||||||
transition: .2s ease padding;
|
transition: 0.2s ease padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
#app.multiple {
|
#app.multiple {
|
||||||
@@ -58,22 +62,32 @@ nav {
|
|||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl nav {
|
||||||
|
left: unset;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
nav .action {
|
nav .action {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: block;
|
display: block;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
padding: .5em;
|
padding: 0.5em;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav>div {
|
body.rtl .action {
|
||||||
|
direction: rtl;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav > div {
|
||||||
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
nav .action>* {
|
nav .action > * {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,19 +111,29 @@ main {
|
|||||||
|
|
||||||
.breadcrumbs a {
|
.breadcrumbs a {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
transition: .1s ease-in;
|
transition: 0.1s ease-in;
|
||||||
border-radius: .125em;
|
border-radius: 0.125em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.rtl .breadcrumbs a {
|
||||||
|
transform: translateX(-16em);
|
||||||
}
|
}
|
||||||
|
|
||||||
.breadcrumbs a:hover {
|
.breadcrumbs a:hover {
|
||||||
background-color: rgba(0,0,0, 0.05);
|
background-color: rgba(0, 0, 0, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
.breadcrumbs span a {
|
.breadcrumbs span a {
|
||||||
padding: .2em;
|
padding: 0.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#progress {
|
.files {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 30px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -118,11 +142,11 @@ main {
|
|||||||
z-index: 9999999999;
|
z-index: 9999999999;
|
||||||
}
|
}
|
||||||
|
|
||||||
#progress div {
|
.progress div {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: #40c4ff;
|
background-color: #40c4ff;
|
||||||
width: 0;
|
width: 0;
|
||||||
transition: .2s ease width;
|
transition: 0.2s ease width;
|
||||||
}
|
}
|
||||||
|
|
||||||
.break-word {
|
.break-word {
|
||||||
|
|||||||
@@ -8,6 +8,10 @@
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl .dashboard .row {
|
||||||
|
margin-right: 16em;
|
||||||
|
}
|
||||||
|
|
||||||
.dashboard .row .column {
|
.dashboard .row .column {
|
||||||
display: flex;
|
display: flex;
|
||||||
padding: 0 .5em;
|
padding: 0 .5em;
|
||||||
@@ -60,6 +64,10 @@ p code {
|
|||||||
border-bottom: 2px solid rgba(0, 0, 0, 0.05);
|
border-bottom: 2px solid rgba(0, 0, 0, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl #nav .wrapper {
|
||||||
|
margin-right: 16em;
|
||||||
|
}
|
||||||
|
|
||||||
.dashboard #nav ul {
|
.dashboard #nav ul {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -138,6 +146,13 @@ table tr>*:first-child {
|
|||||||
padding-left: 1em;
|
padding-left: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl table tr>* {
|
||||||
|
padding-left: unset;
|
||||||
|
padding-right: 1em;
|
||||||
|
text-align: right;
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
table tr>*:last-child {
|
table tr>*:last-child {
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
}
|
}
|
||||||
@@ -160,7 +175,6 @@ table tr>*:last-child {
|
|||||||
max-width: 25em;
|
max-width: 25em;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
max-height: 95%;
|
max-height: 95%;
|
||||||
z-index: 99999;
|
|
||||||
animation: .1s show forwards;
|
animation: .1s show forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,6 +195,11 @@ table tr>*:last-child {
|
|||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl .card .card-title>*:first-child {
|
||||||
|
margin-right: 0;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
.card>div {
|
.card>div {
|
||||||
padding: 1em 1em;
|
padding: 1em 1em;
|
||||||
}
|
}
|
||||||
@@ -299,6 +318,8 @@ table tr>*:last-child {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
animation: .1s show forwards;
|
animation: .1s show forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,15 +381,15 @@ table tr>*:last-child {
|
|||||||
|
|
||||||
@keyframes show {
|
@keyframes show {
|
||||||
0% {
|
0% {
|
||||||
display: none;
|
visibility: hidden;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
1% {
|
1% {
|
||||||
display: block;
|
visibility: visible;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
100% {
|
100% {
|
||||||
display: block;
|
visibility: visible;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -461,4 +482,10 @@ table tr>*:last-child {
|
|||||||
.card .card-action.full .action .title {
|
.card .card-action.full .action .title {
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** RTL - Fix disk usage information (in english) ***/
|
||||||
|
body.rtl .credits {
|
||||||
|
text-align: right;
|
||||||
|
direction: ltr;
|
||||||
}
|
}
|
||||||
@@ -166,4 +166,8 @@
|
|||||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@import "~material-design-icons/iconfont/material-icons.css";
|
@import '~material-icons/iconfont/filled.css';
|
||||||
|
|
||||||
|
.material-icons {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
@@ -135,10 +135,25 @@ header .menu-button {
|
|||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl #search #result {
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
#search #result>div>*:first-child {
|
#search #result>div>*:first-child {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl #search #result {
|
||||||
|
direction: rtl;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** RTL - Keep search result LTR because it has paths (in english) ***/
|
||||||
|
body.rtl #search #result ul>* {
|
||||||
|
direction: ltr;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
#search.active #result {
|
#search.active #result {
|
||||||
padding: .5em;
|
padding: .5em;
|
||||||
height: calc(100% - 4em);
|
height: calc(100% - 4em);
|
||||||
@@ -224,6 +239,10 @@ header .menu-button {
|
|||||||
padding: .5em;
|
padding: .5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl #search .boxes h3 {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
#search .boxes>div {
|
#search .boxes>div {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|||||||
205
frontend/src/css/listing-icons.css
Normal file
205
frontend/src/css/listing-icons.css
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
/* Icons */
|
||||||
|
|
||||||
|
/* General */
|
||||||
|
|
||||||
|
.file-icons [aria-label^="."] { opacity: 0.33 }
|
||||||
|
.file-icons [aria-label$=".bak"] { opacity: 0.33 }
|
||||||
|
|
||||||
|
.file-icons [data-type=audio] i::before { content: 'volume_up' }
|
||||||
|
.file-icons [data-type=blob] i::before { content: 'insert_drive_file' }
|
||||||
|
.file-icons [data-type=image] i::before { content: 'image' }
|
||||||
|
.file-icons [data-type=pdf] i::before { content: 'description' }
|
||||||
|
.file-icons [data-type=text] i::before { content: 'description' }
|
||||||
|
.file-icons [data-type=video] i::before { content: 'movie' }
|
||||||
|
.file-icons [data-type=invalid_link] i::before { content: 'link_off' }
|
||||||
|
|
||||||
|
/* #f90 - Image */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".ai"] i::before,
|
||||||
|
.file-icons [aria-label$=".odg"] i::before,
|
||||||
|
.file-icons [aria-label$=".xcf"] i::before
|
||||||
|
{ content: 'image' }
|
||||||
|
|
||||||
|
/* #f90 - Presentation */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".odp"] i::before,
|
||||||
|
.file-icons [aria-label$=".ppt"] i::before,
|
||||||
|
.file-icons [aria-label$=".pptx"] i::before
|
||||||
|
{ content: 'slideshow' }
|
||||||
|
|
||||||
|
/* #0f0 - Spreadsheet/Database */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".csv"] i::before,
|
||||||
|
.file-icons [aria-label$=".db"] i::before,
|
||||||
|
.file-icons [aria-label$=".odb"] i::before,
|
||||||
|
.file-icons [aria-label$=".ods"] i::before,
|
||||||
|
.file-icons [aria-label$=".xls"] i::before,
|
||||||
|
.file-icons [aria-label$=".xlsx"] i::before
|
||||||
|
{ content: 'border_all' }
|
||||||
|
|
||||||
|
/* #00f - Document */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".doc"] i::before,
|
||||||
|
.file-icons [aria-label$=".docx"] i::before,
|
||||||
|
.file-icons [aria-label$=".log"] i::before,
|
||||||
|
.file-icons [aria-label$=".odt"] i::before,
|
||||||
|
.file-icons [aria-label$=".rtf"] i::before
|
||||||
|
{ content: 'description' }
|
||||||
|
|
||||||
|
/* #999 - Code */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".c"] i::before,
|
||||||
|
.file-icons [aria-label$=".cpp"] i::before,
|
||||||
|
.file-icons [aria-label$=".cs"] i::before,
|
||||||
|
.file-icons [aria-label$=".css"] i::before,
|
||||||
|
.file-icons [aria-label$=".go"] i::before,
|
||||||
|
.file-icons [aria-label$=".h"] i::before,
|
||||||
|
.file-icons [aria-label$=".html"] i::before,
|
||||||
|
.file-icons [aria-label$=".java"] i::before,
|
||||||
|
.file-icons [aria-label$=".js"] i::before,
|
||||||
|
.file-icons [aria-label$=".json"] i::before,
|
||||||
|
.file-icons [aria-label$=".kt"] i::before,
|
||||||
|
.file-icons [aria-label$=".php"] i::before,
|
||||||
|
.file-icons [aria-label$=".py"] i::before,
|
||||||
|
.file-icons [aria-label$=".rb"] i::before,
|
||||||
|
.file-icons [aria-label$=".rs"] i::before,
|
||||||
|
.file-icons [aria-label$=".vue"] i::before,
|
||||||
|
.file-icons [aria-label$=".xml"] i::before,
|
||||||
|
.file-icons [aria-label$=".yml"] i::before
|
||||||
|
{ content: 'code' }
|
||||||
|
|
||||||
|
/* #999 - Executable */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".apk"] i::before,
|
||||||
|
.file-icons [aria-label$=".bat"] i::before,
|
||||||
|
.file-icons [aria-label$=".exe"] i::before,
|
||||||
|
.file-icons [aria-label$=".jar"] i::before,
|
||||||
|
.file-icons [aria-label$=".ps1"] i::before,
|
||||||
|
.file-icons [aria-label$=".sh"] i::before
|
||||||
|
{ content: 'web_asset' }
|
||||||
|
|
||||||
|
/* #999 - Installer */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".deb"] i::before,
|
||||||
|
.file-icons [aria-label$=".msi"] i::before,
|
||||||
|
.file-icons [aria-label$=".pkg"] i::before,
|
||||||
|
.file-icons [aria-label$=".rpm"] i::before
|
||||||
|
{ content: 'archive' }
|
||||||
|
|
||||||
|
/* #999 - Compressed */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".7z"] i::before,
|
||||||
|
.file-icons [aria-label$=".bz2"] i::before,
|
||||||
|
.file-icons [aria-label$=".cab"] i::before,
|
||||||
|
.file-icons [aria-label$=".gz"] i::before,
|
||||||
|
.file-icons [aria-label$=".rar"] i::before,
|
||||||
|
.file-icons [aria-label$=".tar"] i::before,
|
||||||
|
.file-icons [aria-label$=".xz"] i::before,
|
||||||
|
.file-icons [aria-label$=".zip"] i::before,
|
||||||
|
.file-icons [aria-label$=".zst"] i::before
|
||||||
|
{ content: 'folder_zip' }
|
||||||
|
|
||||||
|
/* #999 - Disk */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".ccd"] i::before,
|
||||||
|
.file-icons [aria-label$=".dmg"] i::before,
|
||||||
|
.file-icons [aria-label$=".iso"] i::before,
|
||||||
|
.file-icons [aria-label$=".mdf"] i::before,
|
||||||
|
.file-icons [aria-label$=".vdi"] i::before,
|
||||||
|
.file-icons [aria-label$=".vhd"] i::before,
|
||||||
|
.file-icons [aria-label$=".vmdk"] i::before,
|
||||||
|
.file-icons [aria-label$=".wim"] i::before
|
||||||
|
{ content: 'album' }
|
||||||
|
|
||||||
|
/* #999 - Font */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".otf"] i::before,
|
||||||
|
.file-icons [aria-label$=".ttf"] i::before,
|
||||||
|
.file-icons [aria-label$=".woff"] i::before,
|
||||||
|
.file-icons [aria-label$=".woff2"] i::before
|
||||||
|
{ content: 'font_download' }
|
||||||
|
|
||||||
|
/* Colors */
|
||||||
|
|
||||||
|
/* General */
|
||||||
|
|
||||||
|
.file-icons [data-type=audio] i { color: var(--icon-yellow) }
|
||||||
|
.file-icons [data-type=image] i { color: var(--icon-orange) }
|
||||||
|
.file-icons [data-type=video] i { color: var(--icon-violet) }
|
||||||
|
.file-icons [data-type=invalid_link] i { color: var(--icon-red) }
|
||||||
|
|
||||||
|
/* #f00 - Adobe/Oracle */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".ai"] i,
|
||||||
|
.file-icons [aria-label$=".java"] i,
|
||||||
|
.file-icons [aria-label$=".jar"] i,
|
||||||
|
.file-icons [aria-label$=".psd"] i,
|
||||||
|
.file-icons [aria-label$=".rb"] i,
|
||||||
|
.file-icons [data-type=pdf] i
|
||||||
|
{ color: var(--icon-red) }
|
||||||
|
|
||||||
|
/* #f90 - Image/Presentation */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".html"] i,
|
||||||
|
.file-icons [aria-label$=".odg"] i,
|
||||||
|
.file-icons [aria-label$=".odp"] i,
|
||||||
|
.file-icons [aria-label$=".ppt"] i,
|
||||||
|
.file-icons [aria-label$=".pptx"] i,
|
||||||
|
.file-icons [aria-label$=".vue"] i,
|
||||||
|
.file-icons [aria-label$=".xcf"] i
|
||||||
|
{ color: var(--icon-orange) }
|
||||||
|
|
||||||
|
/* #ff0 - Various */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".css"] i,
|
||||||
|
.file-icons [aria-label$=".js"] i,
|
||||||
|
.file-icons [aria-label$=".json"] i,
|
||||||
|
.file-icons [aria-label$=".zip"] i
|
||||||
|
{ color: var(--icon-yellow) }
|
||||||
|
|
||||||
|
/* #0f0 - Spreadsheet/Google */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".apk"] i,
|
||||||
|
.file-icons [aria-label$=".dex"] i,
|
||||||
|
.file-icons [aria-label$=".go"] i,
|
||||||
|
.file-icons [aria-label$=".ods"] i,
|
||||||
|
.file-icons [aria-label$=".xls"] i,
|
||||||
|
.file-icons [aria-label$=".xlsx"] i
|
||||||
|
{ color: var(--icon-green) }
|
||||||
|
|
||||||
|
/* #00f - Document/Microsoft/Apple/Closed */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".aac"] i,
|
||||||
|
.file-icons [aria-label$=".bat"] i,
|
||||||
|
.file-icons [aria-label$=".cab"] i,
|
||||||
|
.file-icons [aria-label$=".cs"] i,
|
||||||
|
.file-icons [aria-label$=".dmg"] i,
|
||||||
|
.file-icons [aria-label$=".doc"] i,
|
||||||
|
.file-icons [aria-label$=".docx"] i,
|
||||||
|
.file-icons [aria-label$=".emf"] i,
|
||||||
|
.file-icons [aria-label$=".exe"] i,
|
||||||
|
.file-icons [aria-label$=".ico"] i,
|
||||||
|
.file-icons [aria-label$=".mp2"] i,
|
||||||
|
.file-icons [aria-label$=".mp3"] i,
|
||||||
|
.file-icons [aria-label$=".mp4"] i,
|
||||||
|
.file-icons [aria-label$=".mpg"] i,
|
||||||
|
.file-icons [aria-label$=".msi"] i,
|
||||||
|
.file-icons [aria-label$=".odt"] i,
|
||||||
|
.file-icons [aria-label$=".ps1"] i,
|
||||||
|
.file-icons [aria-label$=".rtf"] i,
|
||||||
|
.file-icons [aria-label$=".vob"] i,
|
||||||
|
.file-icons [aria-label$=".wim"] i
|
||||||
|
{ color: var(--icon-blue) }
|
||||||
|
|
||||||
|
/* #60f - Various */
|
||||||
|
|
||||||
|
.file-icons [aria-label$=".iso"] i,
|
||||||
|
.file-icons [aria-label$=".php"] i,
|
||||||
|
.file-icons [aria-label$=".rar"] i
|
||||||
|
{ color: var(--icon-violet) }
|
||||||
|
|
||||||
|
/* Overrides */
|
||||||
|
|
||||||
|
.file-icons [data-dir=true] i { color: var(--icon-blue) }
|
||||||
|
.file-icons [data-dir=true] i::before { content: 'folder' }
|
||||||
|
.file-icons [aria-selected=true] i { color: var(--item-selected) }
|
||||||
@@ -1,3 +1,11 @@
|
|||||||
|
#listing {
|
||||||
|
--item-selected: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.rtl #listing {
|
||||||
|
margin-right: 16em;
|
||||||
|
}
|
||||||
|
|
||||||
#listing h2 {
|
#listing h2 {
|
||||||
margin: 0 0 0 0.5em;
|
margin: 0 0 0 0.5em;
|
||||||
font-size: .9em;
|
font-size: .9em;
|
||||||
@@ -106,6 +114,41 @@
|
|||||||
width: calc(100% - 5vw);
|
width: calc(100% - 5vw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#listing.mosaic.gallery .item div:first-of-type {
|
||||||
|
width: 100%;
|
||||||
|
height: 12em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#listing.mosaic.gallery .item div:last-of-type {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0.5em;
|
||||||
|
padding: 1em;
|
||||||
|
width: calc(100% - 1em);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#listing.mosaic.gallery .item[data-type=image] div:last-of-type {
|
||||||
|
color: white;
|
||||||
|
background: linear-gradient(#0000, #0009);
|
||||||
|
}
|
||||||
|
|
||||||
|
#listing.mosaic.gallery .item i {
|
||||||
|
width: 100%;
|
||||||
|
margin-right: 0;
|
||||||
|
font-size: 8em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#listing.mosaic.gallery .item img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#listing.gallery .size,
|
||||||
|
#listing.gallery .modified {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
#listing.list {
|
#listing.list {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -127,7 +170,7 @@
|
|||||||
|
|
||||||
#listing .item[aria-selected=true] {
|
#listing .item[aria-selected=true] {
|
||||||
background: var(--blue) !important;
|
background: var(--blue) !important;
|
||||||
color: #fff !important;
|
color: var(--item-selected) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#listing.list .item div:first-of-type {
|
#listing.list .item div:first-of-type {
|
||||||
@@ -238,5 +281,5 @@
|
|||||||
|
|
||||||
#listing #multiple-selection p,
|
#listing #multiple-selection p,
|
||||||
#listing #multiple-selection i {
|
#listing #multiple-selection i {
|
||||||
color: #fff;
|
color: var(--item-selected);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
nav {
|
nav {
|
||||||
width: 10em
|
width: 10em
|
||||||
}
|
}
|
||||||
|
/* Mobile Only fix div hidden by bottom navigation bar of mobile browser when using height: 100vh */
|
||||||
|
#previewer .preview {
|
||||||
|
height: calc(100% - 4em) !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 1024px) {
|
@media (max-width: 1024px) {
|
||||||
@@ -40,6 +44,13 @@
|
|||||||
transform-origin: top right;
|
transform-origin: top right;
|
||||||
z-index: 99999;
|
z-index: 99999;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl #dropdown {
|
||||||
|
right: unset;
|
||||||
|
left: 1em;
|
||||||
|
transform-origin: top left;
|
||||||
|
}
|
||||||
|
|
||||||
#dropdown > div {
|
#dropdown > div {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
@@ -95,9 +106,20 @@
|
|||||||
transition: .1s ease left;
|
transition: .1s ease left;
|
||||||
left: -17em;
|
left: -17em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl nav {
|
||||||
|
left: unset;
|
||||||
|
right: -17em;
|
||||||
|
}
|
||||||
nav.active {
|
nav.active {
|
||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl nav.active {
|
||||||
|
left: unset;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
header .search-button,
|
header .search-button,
|
||||||
header .menu-button {
|
header .menu-button {
|
||||||
display: inherit;
|
display: inherit;
|
||||||
@@ -108,6 +130,23 @@
|
|||||||
#listing {
|
#listing {
|
||||||
margin-bottom: 5em;
|
margin-bottom: 5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.rtl #listing {
|
||||||
|
margin-right: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.rtl .breadcrumbs {
|
||||||
|
transform: translateX(16em);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.rtl #nav .wrapper {
|
||||||
|
margin-right: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.rtl .dashboard .row {
|
||||||
|
margin-right: unset;
|
||||||
|
}
|
||||||
|
|
||||||
main {
|
main {
|
||||||
margin: 0 1em;
|
margin: 0 1em;
|
||||||
width: calc(100% - 2em);
|
width: calc(100% - 2em);
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
@import "./base.css";
|
@import "./base.css";
|
||||||
@import "./header.css";
|
@import "./header.css";
|
||||||
@import "./listing.css";
|
@import "./listing.css";
|
||||||
|
@import "./listing-icons.css";
|
||||||
|
@import "./upload-files.css";
|
||||||
@import "./dashboard.css";
|
@import "./dashboard.css";
|
||||||
@import "./login.css";
|
@import "./login.css";
|
||||||
|
|
||||||
@@ -126,7 +128,7 @@ main .spinner .bounce2 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#click-overlay.active {
|
#click-overlay.active {
|
||||||
display: block;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
.action .counter {
|
.action .counter {
|
||||||
@@ -313,12 +315,17 @@ main .spinner .bounce2 {
|
|||||||
padding: 0 1em;
|
padding: 0 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*** RTL - flip and position arrow of path ***/
|
||||||
|
body.rtl .breadcrumbs .chevron {
|
||||||
|
transform: scaleX(-1) translateX(16em);
|
||||||
|
}
|
||||||
|
|
||||||
#editor-container .breadcrumbs span {
|
#editor-container .breadcrumbs span {
|
||||||
font-size: 12px;
|
font-size: .75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#editor-container .breadcrumbs i {
|
#editor-container .breadcrumbs i {
|
||||||
font-size: 16px;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * *
|
||||||
@@ -334,7 +341,7 @@ main .spinner .bounce2 {
|
|||||||
background: rgba(0, 0, 0, 0.05);
|
background: rgba(0, 0, 0, 0.05);
|
||||||
border: 1px solid rgba(0,0,0,0.1);
|
border: 1px solid rgba(0,0,0,0.1);
|
||||||
box-shadow: 0 0 0 0;
|
box-shadow: 0 0 0 0;
|
||||||
font-size: 14px;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * *
|
||||||
@@ -365,10 +372,20 @@ main .spinner .bounce2 {
|
|||||||
|
|
||||||
@keyframes spin {
|
@keyframes spin {
|
||||||
100% {
|
100% {
|
||||||
transform: rotate(-360deg);
|
transform: rotate(360deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* * * * * * * * * * * * * * * *
|
||||||
|
* SETTINGS TUS *
|
||||||
|
* * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
.tusConditionalSettings input:disabled {
|
||||||
|
background-color: #ddd;
|
||||||
|
color: #999;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * *
|
||||||
* SETTINGS RULES *
|
* SETTINGS RULES *
|
||||||
* * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * */
|
||||||
@@ -402,3 +419,22 @@ main .spinner .bounce2 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@import './mobile.css';
|
@import './mobile.css';
|
||||||
|
|
||||||
|
/* * * * * * * * * * * * * * * *
|
||||||
|
* RTL overrides *
|
||||||
|
* * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
body.rtl .card-content textarea {
|
||||||
|
direction: ltr;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.rtl .card-content .small + input {
|
||||||
|
direction: ltr;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.rtl .card.floating .card-content .file-list {
|
||||||
|
direction: ltr;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|||||||
61
frontend/src/css/upload-files.css
Normal file
61
frontend/src/css/upload-files.css
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
.upload-files .card.floating {
|
||||||
|
left: auto;
|
||||||
|
top: auto;
|
||||||
|
margin: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-files .file {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-files .file .file-name {
|
||||||
|
font-size: 1.1em;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-files .file .file-name i {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-files .file .file-progress {
|
||||||
|
margin-top: 2px;
|
||||||
|
width: 100%;
|
||||||
|
height: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-files .file .file-progress div {
|
||||||
|
height: 100%;
|
||||||
|
background-color: #40c4ff;
|
||||||
|
width: 0;
|
||||||
|
transition: 0.2s ease width;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-files.closed .card-content {
|
||||||
|
display: none;
|
||||||
|
padding: 0em 1em 1em 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-files .card .card-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 0.8em;
|
||||||
|
padding: 1em 1em 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-files.closed .card-title {
|
||||||
|
font-size: 0.7em;
|
||||||
|
padding: 0.5em 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 450px) {
|
||||||
|
.upload-files .card.floating {
|
||||||
|
max-width: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "مساعدة"
|
"help": "مساعدة"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -175,6 +178,7 @@
|
|||||||
"customStylesheet": "ستايل مخصص",
|
"customStylesheet": "ستايل مخصص",
|
||||||
"defaultUserDescription": "This are the default settings for new users.",
|
"defaultUserDescription": "This are the default settings for new users.",
|
||||||
"disableExternalLinks": "Disable external links (except documentation)",
|
"disableExternalLinks": "Disable external links (except documentation)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "documentation",
|
"documentation": "documentation",
|
||||||
"examples": "أمثلة",
|
"examples": "أمثلة",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "Execute on shell",
|
||||||
|
|||||||
@@ -7,8 +7,10 @@
|
|||||||
"copyToClipboard": "In Zwischenablage kopieren",
|
"copyToClipboard": "In Zwischenablage kopieren",
|
||||||
"create": "Neu",
|
"create": "Neu",
|
||||||
"delete": "Löschen",
|
"delete": "Löschen",
|
||||||
"download": "Downloaden",
|
"download": "Herunterladen",
|
||||||
"hideDotfiles": "",
|
"file": "Datei",
|
||||||
|
"folder": "Ordner",
|
||||||
|
"hideDotfiles": "Versteckte Dateien ausblenden",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"more": "mehr",
|
"more": "mehr",
|
||||||
"move": "Verschieben",
|
"move": "Verschieben",
|
||||||
@@ -29,24 +31,27 @@
|
|||||||
"selectMultiple": "Mehrfachauswahl",
|
"selectMultiple": "Mehrfachauswahl",
|
||||||
"share": "Teilen",
|
"share": "Teilen",
|
||||||
"shell": "Kommandozeile ein/ausschalten",
|
"shell": "Kommandozeile ein/ausschalten",
|
||||||
|
"submit": "Absenden",
|
||||||
"switchView": "Ansicht wechseln",
|
"switchView": "Ansicht wechseln",
|
||||||
"toggleSidebar": "Seitenleiste anzeigen",
|
"toggleSidebar": "Seitenleiste anzeigen",
|
||||||
"update": "Update",
|
"update": "Update",
|
||||||
"upload": "Upload"
|
"upload": "Upload",
|
||||||
|
"openFile": "Datei öffnen"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Download Datei",
|
"downloadFile": "Download Datei",
|
||||||
"downloadFolder": "Download Ordner",
|
"downloadFolder": "Download Ordner",
|
||||||
"downloadSelected": ""
|
"downloadSelected": "Auswahl herunterladen"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "Sie haben keine Berechtigung dies abzurufen.",
|
"forbidden": "Sie haben keine Berechtigung dies abzurufen.",
|
||||||
"internal": "Etwas ist schief gelaufen.",
|
"internal": "Etwas ist schief gelaufen.",
|
||||||
"notFound": "Dieser Ort kann nicht angezeigt werden."
|
"notFound": "Dieser Ort kann nicht angezeigt werden.",
|
||||||
|
"connection": "Der Server ist nicht erreichbar."
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"body": "Body",
|
"body": "Body",
|
||||||
"clear": "Clear",
|
"clear": "Schließen",
|
||||||
"closePreview": "Vorschau schließen",
|
"closePreview": "Vorschau schließen",
|
||||||
"files": "Dateien",
|
"files": "Dateien",
|
||||||
"folders": "Ordner",
|
"folders": "Ordner",
|
||||||
@@ -55,46 +60,50 @@
|
|||||||
"loading": "Lade...",
|
"loading": "Lade...",
|
||||||
"lonely": "Hier scheint nichts zu sein...",
|
"lonely": "Hier scheint nichts zu sein...",
|
||||||
"metadata": "Metadaten",
|
"metadata": "Metadaten",
|
||||||
"multipleSelectionEnabled": "Mehrfachauswahl ausgewählt",
|
"multipleSelectionEnabled": "Mehrfachauswahl aktiviert",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"size": "Größe",
|
"size": "Größe",
|
||||||
"sortByLastModified": "Nach Änderungsdatum sortieren",
|
"sortByLastModified": "Nach Änderungsdatum sortieren",
|
||||||
"sortByName": "Nach Namen sortieren",
|
"sortByName": "Nach Namen sortieren",
|
||||||
"sortBySize": "Nach Größe sortieren"
|
"sortBySize": "Nach Größe sortieren",
|
||||||
|
"noPreview": "Für diese Datei ist keine Vorschau verfügbar."
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "wähle Datei oder Ordner",
|
"click": "Wähle Datei oder Ordner",
|
||||||
"ctrl": {
|
"ctrl": {
|
||||||
"click": "markiere mehrere Dateien oder Ordner",
|
"click": "Markiere mehrere Dateien oder Ordner",
|
||||||
"f": "öffnet eine neue Suche",
|
"f": "Öffnet eine neue Suche",
|
||||||
"s": "speichert eine Datei oder einen Ordner am akutellen Ort"
|
"s": "Speichert eine Datei oder einen Ordner am akutellen Ort"
|
||||||
},
|
},
|
||||||
"del": "löscht die ausgewählten Elemente",
|
"del": "Löscht die ausgewählten Elemente",
|
||||||
"doubleClick": "öffnet eine Datei oder einen Ordner",
|
"doubleClick": "Öffnet eine Datei oder einen Ordner",
|
||||||
"esc": "Auswahl zurücksetzen und/oder Dialog schließen",
|
"esc": "Auswahl zurücksetzen und/oder Dialog schließen",
|
||||||
"f1": "diese Informationsseite",
|
"f1": "Diese Informationsseite",
|
||||||
"f2": "Datei umbenennen",
|
"f2": "Datei umbenennen",
|
||||||
"help": "Hilfe"
|
"help": "Hilfe"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
"es": "Español",
|
"es": "Español",
|
||||||
"fr": "Français",
|
"fr": "Français",
|
||||||
"is": "",
|
"is": "Icelandic",
|
||||||
"it": "Italiano",
|
"it": "Italiano",
|
||||||
"ja": "日本語",
|
"ja": "日本語",
|
||||||
"ko": "한국어",
|
"ko": "한국어",
|
||||||
"nlBE": "",
|
"nlBE": "Dutch (Belgium)",
|
||||||
"pl": "Polski",
|
"pl": "Polski",
|
||||||
"pt": "Português",
|
"pt": "Português",
|
||||||
"ptBR": "Português (Brasil)",
|
"ptBR": "Português (Brasil)",
|
||||||
"ro": "",
|
"ro": "Romanian",
|
||||||
"ru": "Русский",
|
"ru": "Русский",
|
||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "Swedish (Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr": "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -117,16 +126,17 @@
|
|||||||
"currentlyNavigating": "Aktueller Ort:",
|
"currentlyNavigating": "Aktueller Ort:",
|
||||||
"deleteMessageMultiple": "Sind Sie sicher, dass Sie {count} Datei(en) löschen möchten?",
|
"deleteMessageMultiple": "Sind Sie sicher, dass Sie {count} Datei(en) löschen möchten?",
|
||||||
"deleteMessageSingle": "Sind Sie sicher, dass Sie diesen Ordner/diese Datei löschen möchten?",
|
"deleteMessageSingle": "Sind Sie sicher, dass Sie diesen Ordner/diese Datei löschen möchten?",
|
||||||
|
"deleteMessageShare": "Sind Sie sicher, dass Sie diese Freigabe löschen möchten ({path})?",
|
||||||
"deleteTitle": "Lösche Dateien",
|
"deleteTitle": "Lösche Dateien",
|
||||||
"displayName": "Display Name:",
|
"displayName": "Anzeigename:",
|
||||||
"download": "Lade Dateien",
|
"download": "Lade Dateien",
|
||||||
"downloadMessage": "Wählen Sie ein Format zum downloaden aus.",
|
"downloadMessage": "Wählen Sie ein Format zum Herunterladen aus.",
|
||||||
"error": "Etwas ist schief gelaufen",
|
"error": "Etwas ist schief gelaufen",
|
||||||
"fileInfo": "Dateiinformation",
|
"fileInfo": "Dateiinformation",
|
||||||
"filesSelected": "{count} Dateien ausgewählt.",
|
"filesSelected": "{count} Dateien ausgewählt.",
|
||||||
"lastModified": "Zuletzt geändert",
|
"lastModified": "Zuletzt geändert",
|
||||||
"move": "Verschieben",
|
"move": "Verschieben",
|
||||||
"moveMessage": "Wählen sie einen neuen Platz für ihre Datei(en)/Ordner:",
|
"moveMessage": "Wählen Sie einen neuen Platz für ihre Datei(en)/Ordner:",
|
||||||
"newArchetype": "Erstelle neuen Beitrag auf dem Archetyp. Ihre Datei wird im Inhalteordner erstellt.",
|
"newArchetype": "Erstelle neuen Beitrag auf dem Archetyp. Ihre Datei wird im Inhalteordner erstellt.",
|
||||||
"newDir": "Neuer Ordner",
|
"newDir": "Neuer Ordner",
|
||||||
"newDirMessage": "Geben Sie den Namen des neuen Ordners an.",
|
"newDirMessage": "Geben Sie den Namen des neuen Ordners an.",
|
||||||
@@ -142,16 +152,18 @@
|
|||||||
"scheduleMessage": "Wählen Sie ein Datum und eine Zeit für die Veröffentlichung dieses Beitrags.",
|
"scheduleMessage": "Wählen Sie ein Datum und eine Zeit für die Veröffentlichung dieses Beitrags.",
|
||||||
"show": "Anzeigen",
|
"show": "Anzeigen",
|
||||||
"size": "Größe",
|
"size": "Größe",
|
||||||
"upload": "",
|
"upload": "Upload",
|
||||||
"uploadMessage": ""
|
"uploadFiles": "Upload von {files} Dateien...",
|
||||||
|
"uploadMessage": "Wählen Sie eine Upload-Methode",
|
||||||
|
"optionalPassword": "Optionales Passwort"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "Bilder",
|
"images": "Bilder",
|
||||||
"music": "Musik",
|
"music": "Musik",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "Drücken sie Enter um zu suchen...",
|
"pressToSearch": "Drücken Sie Enter um zu suchen...",
|
||||||
"search": "Suche...",
|
"search": "Suche...",
|
||||||
"typeToSearch": "Tippe um zu suchen...",
|
"typeToSearch": "Tippen um zu suchen...",
|
||||||
"types": "Typen",
|
"types": "Typen",
|
||||||
"video": "Video"
|
"video": "Video"
|
||||||
},
|
},
|
||||||
@@ -164,26 +176,27 @@
|
|||||||
"allowPublish": "Veröffentlichen von neuen Beiträgen und Seiten",
|
"allowPublish": "Veröffentlichen von neuen Beiträgen und Seiten",
|
||||||
"allowSignup": "Erlaube Benutzern sich zu registrieren",
|
"allowSignup": "Erlaube Benutzern sich zu registrieren",
|
||||||
"avoidChanges": "(leer lassen um Änderungen zu vermeiden)",
|
"avoidChanges": "(leer lassen um Änderungen zu vermeiden)",
|
||||||
"branding": "Marke",
|
"branding": "Design",
|
||||||
"brandingDirectoryPath": "Markenverzeichnispfad",
|
"brandingDirectoryPath": "Designverzeichnispfad",
|
||||||
"brandingHelp": "Sie können das Erscheinungsbild ihres File Browser anpassen, in dem sie den Namen ändern, das Logo austauchsen oder eigene Stile definieren und sogar externe Links zu GitHub deaktivieren.\nUm mehr Informationen zum Anpassen an ihre Marke zu bekommen, gehen sie bitte zu {0}.",
|
"brandingHelp": "Sie können das Erscheinungsbild Ihres File Browser anpassen, in dem Sie den Namen ändern, das Logo austauchsen oder eigene Stile definieren und sogar externe Links zu GitHub deaktivieren.\nUm mehr Informationen zum Anpassen des Designs zu bekommen, gehen Sie bitte zu {0}.",
|
||||||
"changePassword": "Ändere das Passwort",
|
"changePassword": "Passwort ändern",
|
||||||
"commandRunner": "Befehlseingabe",
|
"commandRunner": "Befehlseingabe",
|
||||||
"commandRunnerHelp": "Hier könne sie Befehle eintragen die bei benannten Aktionen ausgeführt werden. Sie müssen pro Zeile jeweils einen eingeben. Die Umgebungsvariable {0} und {1} sind verfügbar, wobei {0} relative zu {1} ist. Für mehr Informationen über diese Funktion und die verfügbaren Umgebungsvariablen, lesen sie bitte das {2}.",
|
"commandRunnerHelp": "Hier könne Sie Befehle eintragen, welche bei den benannten Aktionen ausgeführt werden. Sie müssen pro Zeile jeweils einen Befehl eingeben. Die Umgebungsvariable {0} und {1} sind verfügbar, wobei {0} relative zu {1} ist. Für mehr Informationen über diese Funktion und die verfügbaren Umgebungsvariablen, lesen Sie bitte die {2}.",
|
||||||
"commandsUpdated": "Befehle aktualisiert!",
|
"commandsUpdated": "Befehle aktualisiert!",
|
||||||
"createUserDir": "Auto create user home dir while adding new user",
|
"createUserDir": "Automatisches Erstellen des Home-Verzeichnisses beim Anlegen neuer Benutzer",
|
||||||
"customStylesheet": "Individuelles Stylesheet",
|
"customStylesheet": "Individuelles Stylesheet",
|
||||||
"defaultUserDescription": "Das sind die Standard Einstellunge für Benutzer",
|
"defaultUserDescription": "Das sind die Standardeinstellung für Benutzer",
|
||||||
"disableExternalLinks": "Externe Links deaktivieren (außer Dokumentation)",
|
"disableExternalLinks": "Externe Links deaktivieren (außer Dokumentation)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "Dokumentation",
|
"documentation": "Dokumentation",
|
||||||
"examples": "Beispiele",
|
"examples": "Beispiele",
|
||||||
"executeOnShell": "In shell ausführen",
|
"executeOnShell": "In Shell ausführen",
|
||||||
"executeOnShellDescription": "Es ist voreingestellt das der File Brower Befehle ausführt in dem er die Befehlsdatein direkt auf ruft. Wenn sie wollen das sie auf einer Kommandozeile (wo Bash oder PowerShell) laufen, könne sie das hier definieren mit allen bennötigten Argumenten und Optionen. Wenn gesetzt, wird das Kommando das ausgeführt werden soll als Parameter angehängt. Das gilt für Benuzerkommandos sowie auch für Ereignisse.",
|
"executeOnShellDescription": "Es ist voreingestellt das der File Brower Befehle ausführt in dem er die Befehlsdateien direkt aufruft. Wenn Sie wollen, dass sie über einer Kommandozeile (wie Bash oder PowerShell) laufen, könne Sie diese hier definieren mit allen bennötigten Argumenten und Optionen. Wenn gesetzt, wird das Kommando das ausgeführt werden soll als Parameter angehängt. Das gilt für Benuzerkommandos sowie auch für Ereignisse.",
|
||||||
"globalRules": "Das ist ein globales Set von Regeln die erlauben oder nicht erlauben. Die sind für alle Benutzer zutreffend. Es können spezielle Regeln in den Einstellungen der Benutzer definiert werden die diese übersteuern.",
|
"globalRules": "Das ist ein globales Set von Regeln die erlauben oder nicht erlauben. Die sind für alle Benutzer zutreffend. Es können spezielle Regeln in den Einstellungen der Benutzer definiert werden, die diese überschreiben.",
|
||||||
"globalSettings": "Globale Einstellungen",
|
"globalSettings": "Globale Einstellungen",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "Versteckte Dateien ausblenden",
|
||||||
"insertPath": "Pfad einfügen",
|
"insertPath": "Pfad einfügen",
|
||||||
"insertRegex": "Regex Ausdruck einfügen",
|
"insertRegex": "Regulären Ausdruck (Regex) einfügen",
|
||||||
"instanceName": "Instanzname",
|
"instanceName": "Instanzname",
|
||||||
"language": "Sprache",
|
"language": "Sprache",
|
||||||
"lockPassword": "Verhindere, dass der Benutzer sein Passwort ändert",
|
"lockPassword": "Verhindere, dass der Benutzer sein Passwort ändert",
|
||||||
@@ -192,7 +205,7 @@
|
|||||||
"newUser": "Neuer Benutzer",
|
"newUser": "Neuer Benutzer",
|
||||||
"password": "Passwort",
|
"password": "Passwort",
|
||||||
"passwordUpdated": "Passwort aktualisiert!",
|
"passwordUpdated": "Passwort aktualisiert!",
|
||||||
"path": "",
|
"path": "Pfad",
|
||||||
"perm": {
|
"perm": {
|
||||||
"create": "Dateien und Ordner erstellen",
|
"create": "Dateien und Ordner erstellen",
|
||||||
"delete": "Dateien und Ordner löschen",
|
"delete": "Dateien und Ordner löschen",
|
||||||
@@ -205,23 +218,25 @@
|
|||||||
"permissions": "Berechtigungen",
|
"permissions": "Berechtigungen",
|
||||||
"permissionsHelp": "Sie können einem Benutzer Administratorrechte einräumen oder die Berechtigunen individuell festlegen. Wenn Sie \"Administrator\" auswählen, werden alle anderen Rechte automatisch vergeben. Die Nutzerverwaltung kann nur durch einen Administrator erfolgen.\n",
|
"permissionsHelp": "Sie können einem Benutzer Administratorrechte einräumen oder die Berechtigunen individuell festlegen. Wenn Sie \"Administrator\" auswählen, werden alle anderen Rechte automatisch vergeben. Die Nutzerverwaltung kann nur durch einen Administrator erfolgen.\n",
|
||||||
"profileSettings": "Profileinstellungen",
|
"profileSettings": "Profileinstellungen",
|
||||||
"ruleExample1": "Verhindert den Zugang zu dot Dateien (dot Files, wie .git, .gitignore) in allen Ordnern\n",
|
"ruleExample1": "Verhindert den Zugang zu versteckten Dateien (dot-Files, wie .git, .gitignore) in allen Ordnern\n",
|
||||||
"ruleExample2": "blockiert den Zugang auf Dateien mit dem Namen Caddyfile in der Wurzel/Basis des scopes.",
|
"ruleExample2": "blockiert den Zugang auf Dateien mit dem Namen Caddyfile in der Wurzel/Basis des Scopes.",
|
||||||
"rules": "Regeln",
|
"rules": "Regeln",
|
||||||
"rulesHelp": "Hier können Sie erlaubte und verbotene Aktionen für einen einzelnen Benutzer festlegen. Bockierte Dateien werden nicht im Listing angezeigt und sind nicht erreichbar für den Nutzer. Wir unterstützen reguläre Ausdrücke (Regex) und Pfade die relativ zum Benutzerordner sind. \n",
|
"rulesHelp": "Hier können Sie erlaubte und verbotene Aktionen für einen einzelnen Benutzer festlegen. Blockierte Dateien werden nicht im Listing angezeigt und sind nicht erreichbar für den Nutzer. Wir unterstützen reguläre Ausdrücke (Regex) und Pfade die relativ zum Benutzerordner sind. \n",
|
||||||
"scope": "Scope",
|
"scope": "Scope",
|
||||||
|
"setDateFormat": "Exaktes Datumsformat setzen",
|
||||||
"settingsUpdated": "Einstellungen aktualisiert!",
|
"settingsUpdated": "Einstellungen aktualisiert!",
|
||||||
"shareDuration": "",
|
"shareDuration": "Dauer",
|
||||||
"shareManagement": "",
|
"shareManagement": "Freigaben verwalten",
|
||||||
"singleClick": "",
|
"shareDeleted": "Freigabe gelöscht!",
|
||||||
|
"singleClick": "Einfacher Klick zum Öffnen von Dateien und Ordnern",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "",
|
"dark": "Dunkel",
|
||||||
"light": "",
|
"light": "Hell",
|
||||||
"title": ""
|
"title": "Erscheinungsbild"
|
||||||
},
|
},
|
||||||
"user": "Benutzer",
|
"user": "Benutzer",
|
||||||
"userCommands": "Befehle",
|
"userCommands": "Befehle",
|
||||||
"userCommandsHelp": "Eine Liste, mit einem Leerzeichen als Trennung, mit den für diesen Nutzer verfügbaren Befehlen. Example:\n",
|
"userCommandsHelp": "Eine Liste, mit einem Leerzeichen als Trennung, mit den für diesen Nutzer verfügbaren Befehlen. Beispiel:\n",
|
||||||
"userCreated": "Benutzer angelegt!",
|
"userCreated": "Benutzer angelegt!",
|
||||||
"userDefaults": "Benutzer Standard Einstellungen",
|
"userDefaults": "Benutzer Standard Einstellungen",
|
||||||
"userDeleted": "Benutzer gelöscht!",
|
"userDeleted": "Benutzer gelöscht!",
|
||||||
@@ -234,7 +249,7 @@
|
|||||||
"help": "Hilfe",
|
"help": "Hilfe",
|
||||||
"hugoNew": "Hugo Neu",
|
"hugoNew": "Hugo Neu",
|
||||||
"login": "Anmelden",
|
"login": "Anmelden",
|
||||||
"logout": "Logout",
|
"logout": "Abmelden",
|
||||||
"myFiles": "Meine Dateien",
|
"myFiles": "Meine Dateien",
|
||||||
"newFile": "Neue Datei",
|
"newFile": "Neue Datei",
|
||||||
"newFolder": "Neuer Ordner",
|
"newFolder": "Neuer Ordner",
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
"copy": "Copy",
|
"copy": "Copy",
|
||||||
"copyFile": "Copy file",
|
"copyFile": "Copy file",
|
||||||
"copyToClipboard": "Copy to clipboard",
|
"copyToClipboard": "Copy to clipboard",
|
||||||
|
"copyDownloadLinkToClipboard": "Copy download link to clipboard",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
@@ -36,7 +37,8 @@
|
|||||||
"toggleSidebar": "Toggle sidebar",
|
"toggleSidebar": "Toggle sidebar",
|
||||||
"update": "Update",
|
"update": "Update",
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"openFile": "Open file"
|
"openFile": "Open file",
|
||||||
|
"continue": "Continue"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Download File",
|
"downloadFile": "Download File",
|
||||||
@@ -83,6 +85,8 @@
|
|||||||
"help": "Help"
|
"help": "Help"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -100,7 +104,8 @@
|
|||||||
"ru": "Русский",
|
"ru": "Русский",
|
||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "Swedish (Sweden)",
|
"svSE": "Swedish (Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr": "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -144,12 +149,13 @@
|
|||||||
"rename": "Rename",
|
"rename": "Rename",
|
||||||
"renameMessage": "Insert a new name for",
|
"renameMessage": "Insert a new name for",
|
||||||
"replace": "Replace",
|
"replace": "Replace",
|
||||||
"replaceMessage": "One of the files you're trying to upload is conflicting because of its name. Do you wish to replace the existing one?\n",
|
"replaceMessage": "One of the files you're trying to upload is conflicting because of its name. Do you wish to continue to upload or replace the existing one?\n",
|
||||||
"schedule": "Schedule",
|
"schedule": "Schedule",
|
||||||
"scheduleMessage": "Pick a date and time to schedule the publication of this post.",
|
"scheduleMessage": "Pick a date and time to schedule the publication of this post.",
|
||||||
"show": "Show",
|
"show": "Show",
|
||||||
"size": "Size",
|
"size": "Size",
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
|
"uploadFiles": "Uploading {files} files...",
|
||||||
"uploadMessage": "Select an option to upload.",
|
"uploadMessage": "Select an option to upload.",
|
||||||
"optionalPassword": "Optional password"
|
"optionalPassword": "Optional password"
|
||||||
},
|
},
|
||||||
@@ -180,9 +186,17 @@
|
|||||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
||||||
"commandsUpdated": "Commands updated!",
|
"commandsUpdated": "Commands updated!",
|
||||||
"createUserDir": "Auto create user home dir while adding new user",
|
"createUserDir": "Auto create user home dir while adding new user",
|
||||||
|
"tusUploads": "Chunked Uploads",
|
||||||
|
"tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.",
|
||||||
|
"tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting a bytes input or a string like 10MB, 1GB etc.",
|
||||||
|
"tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.",
|
||||||
|
"userHomeBasePath": "Base path for user home directories",
|
||||||
|
"userScopeGenerationPlaceholder": "The scope will be auto generated",
|
||||||
|
"createUserHomeDirectory": "Create user home directory",
|
||||||
"customStylesheet": "Custom Stylesheet",
|
"customStylesheet": "Custom Stylesheet",
|
||||||
"defaultUserDescription": "This are the default settings for new users.",
|
"defaultUserDescription": "This are the default settings for new users.",
|
||||||
"disableExternalLinks": "Disable external links (except documentation)",
|
"disableExternalLinks": "Disable external links (except documentation)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "documentation",
|
"documentation": "documentation",
|
||||||
"examples": "Examples",
|
"examples": "Examples",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "Execute on shell",
|
||||||
|
|||||||
@@ -8,7 +8,9 @@
|
|||||||
"create": "Crear",
|
"create": "Crear",
|
||||||
"delete": "Borrar",
|
"delete": "Borrar",
|
||||||
"download": "Descargar",
|
"download": "Descargar",
|
||||||
"hideDotfiles": "",
|
"file": "Archivo",
|
||||||
|
"folder": "Carpeta",
|
||||||
|
"hideDotfiles": "Ocultar archivos empezados por punto",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"more": "Más",
|
"more": "Más",
|
||||||
"move": "Mover",
|
"move": "Mover",
|
||||||
@@ -29,20 +31,23 @@
|
|||||||
"selectMultiple": "Selección múltiple",
|
"selectMultiple": "Selección múltiple",
|
||||||
"share": "Compartir",
|
"share": "Compartir",
|
||||||
"shell": "Presiona Enter para buscar...",
|
"shell": "Presiona Enter para buscar...",
|
||||||
|
"submit": "Enviar",
|
||||||
"switchView": "Cambiar vista",
|
"switchView": "Cambiar vista",
|
||||||
"toggleSidebar": "Mostrar/Ocultar menú",
|
"toggleSidebar": "Mostrar/Ocultar menú",
|
||||||
"update": "Actualizar",
|
"update": "Actualizar",
|
||||||
"upload": "Subir"
|
"upload": "Subir",
|
||||||
|
"openFile": "Abrir archivo"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Descargar fichero",
|
"downloadFile": "Descargar fichero",
|
||||||
"downloadFolder": "Descargar directorio",
|
"downloadFolder": "Descargar directorio",
|
||||||
"downloadSelected": ""
|
"downloadSelected": "Descargar seleccionados"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "No tienes los permisos necesarios para acceder.",
|
"forbidden": "No tienes los permisos necesarios para acceder.",
|
||||||
"internal": "La verdad es que algo ha ido mal.",
|
"internal": "La verdad es que algo ha ido mal.",
|
||||||
"notFound": "No se puede acceder a este lugar."
|
"notFound": "No se puede acceder a este lugar.",
|
||||||
|
"connection": "No se puede acceder al servidor."
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"body": "Cuerpo",
|
"body": "Cuerpo",
|
||||||
@@ -60,7 +65,8 @@
|
|||||||
"size": "Tamaño",
|
"size": "Tamaño",
|
||||||
"sortByLastModified": "Ordenar por última modificación",
|
"sortByLastModified": "Ordenar por última modificación",
|
||||||
"sortByName": "Ordenar por nombre",
|
"sortByName": "Ordenar por nombre",
|
||||||
"sortBySize": "Ordenar por tamaño"
|
"sortBySize": "Ordenar por tamaño",
|
||||||
|
"noPreview": "La vista previa no está disponible para este archivo."
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "seleccionar archivo o carpeta",
|
"click": "seleccionar archivo o carpeta",
|
||||||
@@ -77,24 +83,27 @@
|
|||||||
"help": "Ayuda"
|
"help": "Ayuda"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
"es": "Español",
|
"es": "Español",
|
||||||
"fr": "Français",
|
"fr": "Français",
|
||||||
"is": "",
|
"is": "Icelandic",
|
||||||
"it": "Italiano",
|
"it": "Italiano",
|
||||||
"ja": "日本語",
|
"ja": "日本語",
|
||||||
"ko": "한국어",
|
"ko": "한국어",
|
||||||
"nlBE": "",
|
"nlBE": "Niederländisch (Belgien)",
|
||||||
"pl": "Polski",
|
"pl": "Polski",
|
||||||
"pt": "Português",
|
"pt": "Português",
|
||||||
"ptBR": "Português (Brasil)",
|
"ptBR": "Português (Brasil)",
|
||||||
"ro": "",
|
"ro": "Românesc",
|
||||||
"ru": "Русский",
|
"ru": "Русский",
|
||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "Swedish (Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -117,6 +126,7 @@
|
|||||||
"currentlyNavigating": "Actualmente estás en:",
|
"currentlyNavigating": "Actualmente estás en:",
|
||||||
"deleteMessageMultiple": "¿Estás seguro que quieres eliminar {count} archivo(s)?",
|
"deleteMessageMultiple": "¿Estás seguro que quieres eliminar {count} archivo(s)?",
|
||||||
"deleteMessageSingle": "¿Estás seguro que quieres eliminar este archivo/carpeta?",
|
"deleteMessageSingle": "¿Estás seguro que quieres eliminar este archivo/carpeta?",
|
||||||
|
"deleteMessageShare": "¿Está seguro de que quiere eliminar este recurso compartido({path})?",
|
||||||
"deleteTitle": "Borrar archivos",
|
"deleteTitle": "Borrar archivos",
|
||||||
"displayName": "Nombre:",
|
"displayName": "Nombre:",
|
||||||
"download": "Descargar archivos",
|
"download": "Descargar archivos",
|
||||||
@@ -142,11 +152,13 @@
|
|||||||
"scheduleMessage": "Elige una hora y fecha para programar la publicación de este post.",
|
"scheduleMessage": "Elige una hora y fecha para programar la publicación de este post.",
|
||||||
"show": "Mostrar",
|
"show": "Mostrar",
|
||||||
"size": "Tamaño",
|
"size": "Tamaño",
|
||||||
"upload": "",
|
"upload": "Subir",
|
||||||
"uploadMessage": ""
|
"uploadFiles": "Subiendo {files} archivos...",
|
||||||
|
"uploadMessage": "Seleccione una opción para subir.",
|
||||||
|
"optionalPassword": "Contraseña opcional"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "Images",
|
"images": "Imágenes",
|
||||||
"music": "Música",
|
"music": "Música",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "Presiona enter para buscar...",
|
"pressToSearch": "Presiona enter para buscar...",
|
||||||
@@ -169,17 +181,21 @@
|
|||||||
"brandingHelp": "Tú puedes personalizar como se ve tu instancia de FileBrowser cambiándole el nombre, reemplazando ellogo, agregar estilos personalizados e incluso deshabilitando loslinks externos que apuntan hacia GitHub. \nPara mayor información acerca de personalización de marca, por favor revisa el {0}.",
|
"brandingHelp": "Tú puedes personalizar como se ve tu instancia de FileBrowser cambiándole el nombre, reemplazando ellogo, agregar estilos personalizados e incluso deshabilitando loslinks externos que apuntan hacia GitHub. \nPara mayor información acerca de personalización de marca, por favor revisa el {0}.",
|
||||||
"changePassword": "Cambiar contraseña",
|
"changePassword": "Cambiar contraseña",
|
||||||
"commandRunner": "Executor de comandos",
|
"commandRunner": "Executor de comandos",
|
||||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
"commandRunnerHelp": "Aquí puede establecer los comandos que se ejecutan en los eventos nombrados. Debe escribir uno por línea. Las variables de entorno {0} y {1} estarán disponibles, siendo {0} relativa a {1}. Para más información sobre esta característica y las variables de entorno disponibles, por favor lea el {2}.",
|
||||||
"commandsUpdated": "¡Comandos actualizados!",
|
"commandsUpdated": "¡Comandos actualizados!",
|
||||||
"createUserDir": "Crea automaticamente una carpeta de inicio cuando se agrega un usuario",
|
"createUserDir": "Crea automaticamente una carpeta de inicio cuando se agrega un usuario",
|
||||||
|
"userHomeBasePath": "Ruta base para los directorios personales de los usuarios",
|
||||||
|
"userScopeGenerationPlaceholder": "El ámbito se generará automáticamente",
|
||||||
|
"createUserHomeDirectory": "Crear el directorio principal del usuario",
|
||||||
"customStylesheet": "Modificar hoja de estilos",
|
"customStylesheet": "Modificar hoja de estilos",
|
||||||
"defaultUserDescription": "Estas son las configuraciones por defecto para nuevos usuarios.",
|
"defaultUserDescription": "Estas son las configuraciones por defecto para nuevos usuarios.",
|
||||||
"disableExternalLinks": "Deshabilitar enlaces externos (excepto documentación)",
|
"disableExternalLinks": "Deshabilitar enlaces externos (excepto documentación)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "documentación",
|
"documentation": "documentación",
|
||||||
"examples": "Ejemplos",
|
"examples": "Ejemplos",
|
||||||
"executeOnShell": "Ejecutar en la shell",
|
"executeOnShell": "Ejecutar en la shell",
|
||||||
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.",
|
"executeOnShellDescription": "Por defecto, FileBrowser ejecuta los comandos llamando directamente a sus binarios. Si quieres ejecutarlos en un shell en su lugar (como Bash o PowerShell), puedes definirlo aquí con los argumentos y banderas (flags) necesarios. Si se define, el comando que se ejecuta se añadirá como argumento. Esto se aplica tanto a los comandos de usuario como a los ganchos de eventos.",
|
||||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
"globalRules": "Se trata de un conjunto global de reglas de permiso y rechazo. Se aplican a todos los usuarios. Puedes definir reglas específicas en la configuración de cada usuario para anular estas.",
|
||||||
"globalSettings": "Ajustes globales",
|
"globalSettings": "Ajustes globales",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "",
|
||||||
"insertPath": "Introduce la ruta",
|
"insertPath": "Introduce la ruta",
|
||||||
@@ -192,7 +208,7 @@
|
|||||||
"newUser": "Nuevo usuario",
|
"newUser": "Nuevo usuario",
|
||||||
"password": "Contraseña",
|
"password": "Contraseña",
|
||||||
"passwordUpdated": "¡Contraseña actualizada!",
|
"passwordUpdated": "¡Contraseña actualizada!",
|
||||||
"path": "",
|
"path": "Ruta",
|
||||||
"perm": {
|
"perm": {
|
||||||
"create": "Crear ficheros y directorios",
|
"create": "Crear ficheros y directorios",
|
||||||
"delete": "Eliminar ficheros y directorios",
|
"delete": "Eliminar ficheros y directorios",
|
||||||
@@ -210,14 +226,16 @@
|
|||||||
"rules": "Reglas",
|
"rules": "Reglas",
|
||||||
"rulesHelp": "Aquí puedes definir un conjunto de reglas de permisos para este usuario específico. Los archivos bloqueados no se mostrarán en las listas y no serán accesibles por el usuario. Puedes utilizar regex y rutas relativas a la raíz del usuario.\n",
|
"rulesHelp": "Aquí puedes definir un conjunto de reglas de permisos para este usuario específico. Los archivos bloqueados no se mostrarán en las listas y no serán accesibles por el usuario. Puedes utilizar regex y rutas relativas a la raíz del usuario.\n",
|
||||||
"scope": "Raíz",
|
"scope": "Raíz",
|
||||||
|
"setDateFormat": "Establecer el formato exacto de la fecha",
|
||||||
"settingsUpdated": "¡Ajustes actualizados!",
|
"settingsUpdated": "¡Ajustes actualizados!",
|
||||||
"shareDuration": "",
|
"shareDuration": "Compartir Duración",
|
||||||
"shareManagement": "",
|
"shareManagement": "Gestión Compartida",
|
||||||
"singleClick": "",
|
"shareDeleted": "¡Recurso compartido eliminado!",
|
||||||
|
"singleClick": "Utilice un solo clic para abrir archivos y directorios",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "",
|
"dark": "Oscuro",
|
||||||
"light": "",
|
"light": "Claro",
|
||||||
"title": ""
|
"title": "Tema"
|
||||||
},
|
},
|
||||||
"user": "Usuario",
|
"user": "Usuario",
|
||||||
"userCommands": "Comandos",
|
"userCommands": "Comandos",
|
||||||
|
|||||||
@@ -8,7 +8,9 @@
|
|||||||
"create": "Créer",
|
"create": "Créer",
|
||||||
"delete": "Supprimer",
|
"delete": "Supprimer",
|
||||||
"download": "Télécharger",
|
"download": "Télécharger",
|
||||||
"hideDotfiles": "",
|
"file": "Fichier",
|
||||||
|
"folder": "Dossier",
|
||||||
|
"hideDotfiles": "Masquer les dotfiles",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"more": "Plus",
|
"more": "Plus",
|
||||||
"move": "Déplacer",
|
"move": "Déplacer",
|
||||||
@@ -28,21 +30,24 @@
|
|||||||
"select": "Sélectionner",
|
"select": "Sélectionner",
|
||||||
"selectMultiple": "Sélection multiple",
|
"selectMultiple": "Sélection multiple",
|
||||||
"share": "Partager",
|
"share": "Partager",
|
||||||
"shell": "Toggle shell",
|
"shell": "Activer/Désactiver le shell",
|
||||||
|
"submit": "Envoyer",
|
||||||
"switchView": "Changer le mode d'affichage",
|
"switchView": "Changer le mode d'affichage",
|
||||||
"toggleSidebar": "Afficher/Masquer la barre latérale",
|
"toggleSidebar": "Afficher/Masquer la barre latérale",
|
||||||
"update": "Mettre à jour",
|
"update": "Mettre à jour",
|
||||||
"upload": "Importer"
|
"upload": "Importer",
|
||||||
|
"openFile": "Ouvrir le fichier"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Download File",
|
"downloadFile": "Télécharger le fichier",
|
||||||
"downloadFolder": "Download Folder",
|
"downloadFolder": "Télécharger le dossier",
|
||||||
"downloadSelected": ""
|
"downloadSelected": "Télécharger la selection"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "You don't have permissions to access this.",
|
"forbidden": "Vous n'avez pas la permission d'accéder à cela.",
|
||||||
"internal": "Aïe ! Quelque chose s'est mal passé.",
|
"internal": "Aïe ! Quelque chose s'est mal passé.",
|
||||||
"notFound": "Impossible d'accéder à cet emplacement."
|
"notFound": "Impossible d'accéder à cet emplacement.",
|
||||||
|
"connection": "Le serveur n'est pas accessible."
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"body": "Corps",
|
"body": "Corps",
|
||||||
@@ -60,7 +65,8 @@
|
|||||||
"size": "Taille",
|
"size": "Taille",
|
||||||
"sortByLastModified": "Trier par date de dernière modification",
|
"sortByLastModified": "Trier par date de dernière modification",
|
||||||
"sortByName": "Trier par nom",
|
"sortByName": "Trier par nom",
|
||||||
"sortBySize": "Trier par taille"
|
"sortBySize": "Trier par taille",
|
||||||
|
"noPreview": "Il n'y a pas de prévisualisation pour ce fichier."
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "Sélectionner un élément",
|
"click": "Sélectionner un élément",
|
||||||
@@ -77,6 +83,8 @@
|
|||||||
"help": "Aide"
|
"help": "Aide"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,19 +103,20 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"createAnAccount": "Create an account",
|
"createAnAccount": "Créer un compte",
|
||||||
"loginInstead": "Already have an account",
|
"loginInstead": "Vous avez déjà un compte",
|
||||||
"password": "Mot de passe",
|
"password": "Mot de passe",
|
||||||
"passwordConfirm": "Password Confirmation",
|
"passwordConfirm": "Confirmation de mot de passe",
|
||||||
"passwordsDontMatch": "Passwords don't match",
|
"passwordsDontMatch": "Les mots de passe ne concordent pas",
|
||||||
"signup": "Signup",
|
"signup": "S'inscrire",
|
||||||
"submit": "Se connecter",
|
"submit": "Se connecter",
|
||||||
"username": "Utilisateur",
|
"username": "Utilisateur",
|
||||||
"usernameTaken": "Username already taken",
|
"usernameTaken": "Le nom d'utilisateur est déjà pris",
|
||||||
"wrongCredentials": "Identifiants incorrects !"
|
"wrongCredentials": "Identifiants incorrects !"
|
||||||
},
|
},
|
||||||
"permanent": "Permanent",
|
"permanent": "Permanent",
|
||||||
@@ -115,8 +124,9 @@
|
|||||||
"copy": "Copier",
|
"copy": "Copier",
|
||||||
"copyMessage": "Choisissez l'emplacement où copier la sélection :",
|
"copyMessage": "Choisissez l'emplacement où copier la sélection :",
|
||||||
"currentlyNavigating": "Dossier courant :",
|
"currentlyNavigating": "Dossier courant :",
|
||||||
"deleteMessageMultiple": "Etes-vous sûr de vouloir supprimer ces {count} élément(s) ?",
|
"deleteMessageMultiple": "Êtes-vous sûr de vouloir supprimer ces {count} élément(s) ?",
|
||||||
"deleteMessageSingle": "Etes-vous sûr de vouloir supprimer cet élément ?",
|
"deleteMessageSingle": "Êtes-vous sûr de vouloir supprimer cet élément ?",
|
||||||
|
"deleteMessageShare": "Êtes-vous sûr de vouloir supprimer ce partage ({path}) ?",
|
||||||
"deleteTitle": "Supprimer",
|
"deleteTitle": "Supprimer",
|
||||||
"displayName": "Nom :",
|
"displayName": "Nom :",
|
||||||
"download": "Télécharger",
|
"download": "Télécharger",
|
||||||
@@ -142,16 +152,18 @@
|
|||||||
"scheduleMessage": "Choisissez une date pour planifier la publication de ce post",
|
"scheduleMessage": "Choisissez une date pour planifier la publication de ce post",
|
||||||
"show": "Montrer",
|
"show": "Montrer",
|
||||||
"size": "Taille",
|
"size": "Taille",
|
||||||
"upload": "",
|
"upload": "Importer",
|
||||||
"uploadMessage": ""
|
"uploadFiles": "Importation de {files} fichiers...",
|
||||||
|
"uploadMessage": "Séléctionnez une option d'import.",
|
||||||
|
"optionalPassword": "Mot de passe optionnel"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "Images",
|
"images": "Images",
|
||||||
"music": "Musique",
|
"music": "Musique",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "Press enter to search...",
|
"pressToSearch": "Appuyez du entrée pour chercher...",
|
||||||
"search": "Recherche en cours...",
|
"search": "Recherche en cours...",
|
||||||
"typeToSearch": "Type to search...",
|
"typeToSearch": "Écrivez pour chercher...",
|
||||||
"types": "Types",
|
"types": "Types",
|
||||||
"video": "Video"
|
"video": "Video"
|
||||||
},
|
},
|
||||||
@@ -162,31 +174,32 @@
|
|||||||
"allowEdit": "Editer, renommer et supprimer des fichiers ou des dossiers",
|
"allowEdit": "Editer, renommer et supprimer des fichiers ou des dossiers",
|
||||||
"allowNew": "Créer de nouveaux fichiers et dossiers",
|
"allowNew": "Créer de nouveaux fichiers et dossiers",
|
||||||
"allowPublish": "Publier de nouveaux posts et pages",
|
"allowPublish": "Publier de nouveaux posts et pages",
|
||||||
"allowSignup": "Allow users to signup",
|
"allowSignup": "Autoriser les utilisateurs à s'inscrire",
|
||||||
"avoidChanges": "(Laisser vide pour conserver l'actuel)",
|
"avoidChanges": "(Laisser vide pour conserver l'actuel)",
|
||||||
"branding": "Branding",
|
"branding": "Image de marque",
|
||||||
"brandingDirectoryPath": "Branding directory path",
|
"brandingDirectoryPath": "Chemin du dossier d'image de marque",
|
||||||
"brandingHelp": "You can customize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
"brandingHelp": "Vous pouvez personnaliser l'apparence de votre instance de File Browser en changeant son nom, en remplaçant le logo, en ajoutant des styles personnalisés et même en désactivant les liens externes vers GitHub.\nPour plus d'informations sur la personnalisation de l'image de marque, veuillez consulter la {0}.",
|
||||||
"changePassword": "Modifier le mot de passe",
|
"changePassword": "Modifier le mot de passe",
|
||||||
"commandRunner": "Command runner",
|
"commandRunner": "Command runner",
|
||||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
"commandRunnerHelp" : "Ici, vous pouvez définir les commandes qui sont exécutées pour les événements nommés précédemments. Vous devez en écrire une par ligne. Les variables d'environnement {0} et {1} seront disponibles, {0} étant relatif à {1}. Pour plus d'informations sur cette fonctionnalité et les variables d'environnement disponibles, veuillez lire la {2}.",
|
||||||
"commandsUpdated": "Commandes mises à jour !",
|
"commandsUpdated": "Commandes mises à jour !",
|
||||||
"createUserDir": "Auto create user home dir while adding new user",
|
"createUserDir": "Créer automatiquement un dossier pour l'utilisateur",
|
||||||
"customStylesheet": "Feuille de style personnalisée",
|
"customStylesheet": "Feuille de style personnalisée",
|
||||||
"defaultUserDescription": "This are the default settings for new users.",
|
"defaultUserDescription": "Paramètres par défaut pour les nouveaux utilisateurs.",
|
||||||
"disableExternalLinks": "Disable external links (except documentation)",
|
"disableExternalLinks": "Désactiver les liens externes (sauf la documentation)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "documentation",
|
"documentation": "documentation",
|
||||||
"examples": "Exemples",
|
"examples": "Exemples",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "Exécuter dans le shell",
|
||||||
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.",
|
"executeOnShellDescription": "Par défaut, File Browser exécute les commandes en appelant directement leurs binaires. Si vous voulez les exécuter sur un shell à la place (comme Bash ou PowerShell), vous pouvez le définir ici avec les arguments et les drapeaux requis. S'il est défini, la commande que vous exécutez sera ajoutée en tant qu'argument. Cela s'applique à la fois aux commandes utilisateur et aux crochets d'événements.",
|
||||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
"globalRules": "Il s'agit d'un ensemble global de règles d'autorisation et d'interdiction. Elles s'appliquent à tous les utilisateurs. Vous pouvez définir des règles spécifiques sur les paramètres de chaque utilisateur pour remplacer celles-ci.",
|
||||||
"globalSettings": "Paramètres généraux",
|
"globalSettings": "Paramètres généraux",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "Cacher les fichiers de configuration utilisateur (dotfiles)",
|
||||||
"insertPath": "Insert the path",
|
"insertPath": "Insérez le chemin",
|
||||||
"insertRegex": "Insert regex expression",
|
"insertRegex": "Insérez l'expression régulière",
|
||||||
"instanceName": "Instance name",
|
"instanceName": "Nom de l'instance",
|
||||||
"language": "Langue",
|
"language": "Langue",
|
||||||
"lockPassword": "Prevent the user from changing the password",
|
"lockPassword": "Empêcher l'utilisateur de changer son mot de passe",
|
||||||
"newPassword": "Votre nouveau mot de passe",
|
"newPassword": "Votre nouveau mot de passe",
|
||||||
"newPasswordConfirm": "Confirmation du nouveau mot de passe",
|
"newPasswordConfirm": "Confirmation du nouveau mot de passe",
|
||||||
"newUser": "Nouvel Utilisateur",
|
"newUser": "Nouvel Utilisateur",
|
||||||
@@ -194,13 +207,13 @@
|
|||||||
"passwordUpdated": "Mot de passe mis à jour !",
|
"passwordUpdated": "Mot de passe mis à jour !",
|
||||||
"path": "",
|
"path": "",
|
||||||
"perm": {
|
"perm": {
|
||||||
"create": "Create files and directories",
|
"create": "Créer des fichiers et des dossiers",
|
||||||
"delete": "Delete files and directories",
|
"delete": "Supprimer des fichiers et des dossiers",
|
||||||
"download": "Download",
|
"download": "Télécharger",
|
||||||
"execute": "Execute commands",
|
"execute": "Exécuter des commandes",
|
||||||
"modify": "Edit files",
|
"modify": "Modifier des fichiers",
|
||||||
"rename": "Rename or move files and directories",
|
"rename": "Renommer ou déplacer des fichiers ou des dossiers",
|
||||||
"share": "Share files"
|
"share": "Partager des fichiers"
|
||||||
},
|
},
|
||||||
"permissions": "Permissions",
|
"permissions": "Permissions",
|
||||||
"permissionsHelp": "Vous pouvez définir l'utilisateur comme étant un administrateur ou encore choisir les permissions individuellement. Si vous sélectionnez \"Administrateur\", toutes les autres options seront automatiquement activées. La gestion des utilisateurs est un privilège que seul l'administrateur possède.\n",
|
"permissionsHelp": "Vous pouvez définir l'utilisateur comme étant un administrateur ou encore choisir les permissions individuellement. Si vous sélectionnez \"Administrateur\", toutes les autres options seront automatiquement activées. La gestion des utilisateurs est un privilège que seul l'administrateur possède.\n",
|
||||||
@@ -210,14 +223,16 @@
|
|||||||
"rules": "Règles",
|
"rules": "Règles",
|
||||||
"rulesHelp": "Vous pouvez définir ici un ensemble de règles pour cet utilisateur. Les fichiers bloqués ne seront pas affichés et ne seront pas accessibles par l'utilisateur. Les expressions régulières sont supportées et les chemins d'accès sont relatifs par rapport au dossier de l'utilisateur.\n",
|
"rulesHelp": "Vous pouvez définir ici un ensemble de règles pour cet utilisateur. Les fichiers bloqués ne seront pas affichés et ne seront pas accessibles par l'utilisateur. Les expressions régulières sont supportées et les chemins d'accès sont relatifs par rapport au dossier de l'utilisateur.\n",
|
||||||
"scope": "Portée du dossier utilisateur",
|
"scope": "Portée du dossier utilisateur",
|
||||||
|
"setDateFormat": "Définir le format de la date",
|
||||||
"settingsUpdated": "Les paramètres ont été mis à jour !",
|
"settingsUpdated": "Les paramètres ont été mis à jour !",
|
||||||
"shareDuration": "",
|
"shareDuration": "Durée du partage",
|
||||||
"shareManagement": "",
|
"shareManagement": "Gestion des partages",
|
||||||
"singleClick": "",
|
"shareDeleted": "Partage supprimé !",
|
||||||
|
"singleClick": "Utiliser un simple clic pour ouvrir les fichiers et les dossiers",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "",
|
"dark": "Sombre",
|
||||||
"light": "",
|
"light": "Lumineux",
|
||||||
"title": ""
|
"title": "Thème"
|
||||||
},
|
},
|
||||||
"user": "Utilisateur",
|
"user": "Utilisateur",
|
||||||
"userCommands": "Commandes",
|
"userCommands": "Commandes",
|
||||||
@@ -240,11 +255,11 @@
|
|||||||
"newFolder": "Nouveau dossier",
|
"newFolder": "Nouveau dossier",
|
||||||
"preview": "Prévisualiser",
|
"preview": "Prévisualiser",
|
||||||
"settings": "Paramètres",
|
"settings": "Paramètres",
|
||||||
"signup": "Signup",
|
"signup": "S'inscrire",
|
||||||
"siteSettings": "Paramètres du site"
|
"siteSettings": "Paramètres du site"
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
"linkCopied": "Link copied!"
|
"linkCopied": "Lien copié!"
|
||||||
},
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"days": "Jours",
|
"days": "Jours",
|
||||||
|
|||||||
273
frontend/src/i18n/he.json
Normal file
273
frontend/src/i18n/he.json
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
{
|
||||||
|
"buttons": {
|
||||||
|
"cancel": "ביטול",
|
||||||
|
"close": "סגירה",
|
||||||
|
"copy": "העתק",
|
||||||
|
"copyFile": "העתק קובץ",
|
||||||
|
"copyToClipboard": "העתק ללוח",
|
||||||
|
"create": "צור",
|
||||||
|
"delete": "מחק",
|
||||||
|
"download": "הורד",
|
||||||
|
"file": "קובץ",
|
||||||
|
"folder": "תקייה",
|
||||||
|
"hideDotfiles": "הסתר קבצים נסתרים",
|
||||||
|
"info": "מידע",
|
||||||
|
"more": "עוד",
|
||||||
|
"move": "העבר",
|
||||||
|
"moveFile": "העבר קובץ",
|
||||||
|
"new": "חדש",
|
||||||
|
"next": "הבא",
|
||||||
|
"ok": "אישור",
|
||||||
|
"permalink": "צור קישור קבוע",
|
||||||
|
"previous": "הקודם",
|
||||||
|
"publish": "יצירה",
|
||||||
|
"rename": "שנה שם",
|
||||||
|
"replace": "החלף",
|
||||||
|
"reportIssue": "דווח על תקלה",
|
||||||
|
"save": "שמור",
|
||||||
|
"schedule": "תזמון",
|
||||||
|
"search": "חיפוש",
|
||||||
|
"select": "בחר",
|
||||||
|
"selectMultiple": "בחירה מרובה",
|
||||||
|
"share": "שתף",
|
||||||
|
"shell": "פתיחת מסוף",
|
||||||
|
"submit": "אישור",
|
||||||
|
"switchView": "שנה תצוגה",
|
||||||
|
"toggleSidebar": "פתיחת / סגירת סרגל צד",
|
||||||
|
"update": "עדכון",
|
||||||
|
"upload": "העלאה",
|
||||||
|
"openFile": "פתח קובץ"
|
||||||
|
},
|
||||||
|
"download": {
|
||||||
|
"downloadFile": "הורד קובץ",
|
||||||
|
"downloadFolder": "הורד תקייה",
|
||||||
|
"downloadSelected": "הורד קבצים שנבחרו"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"forbidden": "אין לך הרשאות גישה",
|
||||||
|
"internal": "משהו השתבש",
|
||||||
|
"notFound": "לא ניתן להגיע למיקום זה",
|
||||||
|
"connection": "לא ניתן להגיע לשרת"
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"body": "גוף",
|
||||||
|
"clear": "נקה",
|
||||||
|
"closePreview": "סגירת תצוגה מקדימה",
|
||||||
|
"files": "קבצים",
|
||||||
|
"folders": "תקיות",
|
||||||
|
"home": "ראשי",
|
||||||
|
"lastModified": "שונה לאחרונה",
|
||||||
|
"loading": "טוען...",
|
||||||
|
"lonely": "בודד כאן",
|
||||||
|
"metadata": "נתונים",
|
||||||
|
"multipleSelectionEnabled": "בחירה מרובה מופעלת",
|
||||||
|
"name": "שם",
|
||||||
|
"size": "גודל",
|
||||||
|
"sortByLastModified": "מיין לפי השינוי האחרון",
|
||||||
|
"sortByName": "מיין לפי שם",
|
||||||
|
"sortBySize": "מיין לפי גודל",
|
||||||
|
"noPreview": "תצוגה מקדימה לא זמינה לקובץ זה"
|
||||||
|
},
|
||||||
|
"help": {
|
||||||
|
"click": "בחר קובץ או תקייה",
|
||||||
|
"ctrl": {
|
||||||
|
"click": "בחר מספר קבצים או תקיות",
|
||||||
|
"f": "פותח את החיפוש",
|
||||||
|
"s": "לשמור קובץ או להוריד את התקייה שבה אתה נמצא"
|
||||||
|
},
|
||||||
|
"del": "מחק את מה שנבחר",
|
||||||
|
"doubleClick": "פתח קובץ או תקייה",
|
||||||
|
"esc": "נקה את הבחירה ו/או סגור את השדה",
|
||||||
|
"f1": "המידע הזה",
|
||||||
|
"f2": "שנה שם קובץ",
|
||||||
|
"help": "עזרה"
|
||||||
|
},
|
||||||
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
|
"ar": "العربية",
|
||||||
|
"de": "Deutsch",
|
||||||
|
"en": "English",
|
||||||
|
"es": "Español",
|
||||||
|
"fr": "Français",
|
||||||
|
"is": "Icelandic",
|
||||||
|
"it": "Italiano",
|
||||||
|
"ja": "日本語",
|
||||||
|
"ko": "한국어",
|
||||||
|
"nlBE": "Dutch (Belgium)",
|
||||||
|
"pl": "Polski",
|
||||||
|
"pt": "Português",
|
||||||
|
"ptBR": "Português (Brasil)",
|
||||||
|
"ro": "Romanian",
|
||||||
|
"ru": "Русский",
|
||||||
|
"sk": "Slovenčina",
|
||||||
|
"svSE": "Swedish (Sweden)",
|
||||||
|
"tr": "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
|
"zhCN": "中文 (简体)",
|
||||||
|
"zhTW": "中文 (繁體)"
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"createAnAccount": "צור חשבון",
|
||||||
|
"loginInstead": "חשבון קיים",
|
||||||
|
"password": "סיסמא",
|
||||||
|
"passwordConfirm": "אימות סיסמא",
|
||||||
|
"passwordsDontMatch": "סיסמאות אינן תואמות",
|
||||||
|
"signup": "הרשמה",
|
||||||
|
"submit": "התחברות",
|
||||||
|
"username": "שם משתמש",
|
||||||
|
"usernameTaken": "שם משתמש כבר קיים",
|
||||||
|
"wrongCredentials": "פרטי התחברות שגויים"
|
||||||
|
},
|
||||||
|
"permanent": "קבוע",
|
||||||
|
"prompts": {
|
||||||
|
"copy": "העתק",
|
||||||
|
"copyMessage": "בחר לאן להעתיק את הקבצים:",
|
||||||
|
"currentlyNavigating": "כרגע מנווט ב:",
|
||||||
|
"deleteMessageMultiple": "האם אתה בטוח שברצונך למחוק {count} קבצים?",
|
||||||
|
"deleteMessageSingle": "האם אתה בטוח שברצונך למחוק את הקובץ או התקייה?",
|
||||||
|
"deleteMessageShare": "האם אתה בטוח שברצונך למחוק את השיתוף הזה?({path})?",
|
||||||
|
"deleteTitle": "מחק קבצים",
|
||||||
|
"displayName": "שם:",
|
||||||
|
"download": "הורד קבצים",
|
||||||
|
"downloadMessage": "בחר את הפורמט שברצונך להוריד",
|
||||||
|
"error": "משהו השתבש",
|
||||||
|
"fileInfo": "מידע על הקובץ",
|
||||||
|
"filesSelected": "{count} קבצים נבחרו.",
|
||||||
|
"lastModified": "שונה לאחרונה",
|
||||||
|
"move": "העבר",
|
||||||
|
"moveMessage": "בחר מיקום חדש לקובץ / תקייה:",
|
||||||
|
"newArchetype": "צור פוסט חדש. הקובץ יווצר בתקיית התוכן",
|
||||||
|
"newDir": "תקייה חדשה",
|
||||||
|
"newDirMessage": "כתוב את שם התקייה החדשה",
|
||||||
|
"newFile": "קובץ חדש",
|
||||||
|
"newFileMessage": "כתוב את שם הקובץ החדש",
|
||||||
|
"numberDirs": "מספר התקיות",
|
||||||
|
"numberFiles": "מספר הקבצים",
|
||||||
|
"rename": "שנה שם",
|
||||||
|
"renameMessage": "הכנס שם חדש עבור",
|
||||||
|
"replace": "החלף",
|
||||||
|
"replaceMessage": "אחד הקבצים בעל שם זהה לקובץ קיים, האם ברצונך להחליף את הקובץ הקיים בחדש? זהירות - הקובץ הישן ימחק\n",
|
||||||
|
"schedule": "תזמון",
|
||||||
|
"scheduleMessage": "בחר תאריך ושעה לתזמון הפרסום של פוסט זה.",
|
||||||
|
"show": "הצג",
|
||||||
|
"size": "גודל",
|
||||||
|
"upload": "העלאה",
|
||||||
|
"uploadFiles": "מעלה {files} קבצים...",
|
||||||
|
"uploadMessage": "בחר אפשרות העלאה.",
|
||||||
|
"optionalPassword": "סיסמא אופציונלית"
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"images": "תמונות",
|
||||||
|
"music": "מוזיקה",
|
||||||
|
"pdf": "PDF",
|
||||||
|
"pressToSearch": "הקש אנטר לחיפוש...",
|
||||||
|
"search": "חפש...",
|
||||||
|
"typeToSearch": "הקלד לחיפוש...",
|
||||||
|
"types": "סוג",
|
||||||
|
"video": "וידאו"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"admin": "מנהל",
|
||||||
|
"administrator": "מנהל ראשי",
|
||||||
|
"allowCommands": "הפעל פקודות",
|
||||||
|
"allowEdit": "ערוך, שנה שם ומחק קבצים או תקיות",
|
||||||
|
"allowNew": "צור קבצים ותקיות חדשות",
|
||||||
|
"allowPublish": "פרסם פוסטים ודפים חדשים",
|
||||||
|
"allowSignup": "אפשר למשתמשים להירשם",
|
||||||
|
"avoidChanges": "(השאר ריק כדי למנוע שינויים)",
|
||||||
|
"branding": "מיתוג",
|
||||||
|
"brandingDirectoryPath": "נתיב תקיית מיתוג",
|
||||||
|
"brandingHelp": "אתה יכול להגדיר את האופן שבו האפליקציה תראה על ידי שינוי שם האפליקציה, החלפת הלוגו, הוספת עיצוב מותאם אישית ואפילו השבתת קישורים חיצוניים לGithub.\nלמידע נוסף עיין ב-{0}.",
|
||||||
|
"changePassword": "שנה סיסמא",
|
||||||
|
"commandRunner": "הרצת פקודות",
|
||||||
|
"commandRunnerHelp": "אתה יכול להגדיר פקודות שיבוצעו באירועים שונים. עליך לכתוב אחד בכל שורה. משתני הסביבה {0} ו-{1} יהיו זמינים, בהיותם {0} ביחס ל-{1}. למידע נוסף על תכונה זו ועל משתני הסביבה הזמינים, עיין ב {2}.",
|
||||||
|
"commandsUpdated": "הפקודות עודכנו.",
|
||||||
|
"createUserDir": "צור תקיית בית במהלך הוספת משתמש חדש",
|
||||||
|
"userHomeBasePath": "נתיב ראשי לתקיות הבית של משתמשים",
|
||||||
|
"userScopeGenerationPlaceholder": "התחום יווצר אוטומטית",
|
||||||
|
"createUserHomeDirectory": "צור תקיית בית למשתמש",
|
||||||
|
"customStylesheet": "עיצוב מותאם אישית (Stylesheet)",
|
||||||
|
"defaultUserDescription": "אלה הגדרות ברירת המחדל למשתמשים חדשים",
|
||||||
|
"disableExternalLinks": "השבת קישורים חיצוניים (למעט תיעוד)",
|
||||||
|
"documentation": "תיעוד",
|
||||||
|
"examples": "דוגמאות",
|
||||||
|
"executeOnShell": "בצע במסוף",
|
||||||
|
"executeOnShellDescription": "כברירת מחדל, האפליקציה מבצעת את הפקודות על ידי הפעלה ישירה לקבצים (הבינארים). אם אתה רוצה להפעיל אותם מתוך מעטפת כלשהי, (לדוגמא מתוך Bash או PowerShell) אתה יכול להגדיר אותם כאן עם הפרמטרים הנדרשים. שים לב שזה יבוצע גם על פקודות משתמש וגם על הוקים (Hooks) לאירועים.",
|
||||||
|
"globalRules": "זוהי קבוצה גלובלית של חוקים והרשאות (מה מותר ומה אסור), הם חלים על כל משתמש. אתה יכול להגדיר כללים ספציפיים בהגדרות של כל משתמש, כדי לעקוף את החוקים הגלובלים.",
|
||||||
|
"globalSettings": "הגדרות גלובליות",
|
||||||
|
"hideDotfiles": "הסתר קבצים נסתרים",
|
||||||
|
"insertPath": "הכנס את הנתיב",
|
||||||
|
"insertRegex": "הוסף ביטוי רגולרי",
|
||||||
|
"instanceName": "שם",
|
||||||
|
"language": "שפה",
|
||||||
|
"lockPassword": "מנע ממשתמש להחליף סיסמא",
|
||||||
|
"newPassword": "הסיסמא החדשה שלך",
|
||||||
|
"newPasswordConfirm": "אשר את הסיסמה החדשה שלך",
|
||||||
|
"newUser": "משתמש חדש",
|
||||||
|
"password": "סיסמא",
|
||||||
|
"passwordUpdated": "הסיסמא עודכנה!",
|
||||||
|
"path": "נתיב",
|
||||||
|
"perm": {
|
||||||
|
"create": "יצירת קבצים ותקיות",
|
||||||
|
"delete": "מחיקת קבצים ותקיות",
|
||||||
|
"download": "הורדת קבצים ותקיות",
|
||||||
|
"execute": "ביצוע פקודות",
|
||||||
|
"modify": "עריכת קבצים קבצים",
|
||||||
|
"rename": "שינוי שם או העברת קבצים ותקיות",
|
||||||
|
"share": "שיתוף קבצים"
|
||||||
|
},
|
||||||
|
"permissions": "הרשאות",
|
||||||
|
"permissionsHelp": "אתה יכול להגדיר את המשתמש להיות מנהל מערכת או לבחור את ההרשאות בנפרד. אם תבחר \"מנהל מערכת\", כל ההרשאות ייבחרו אוטומטית. ניהול המשתמשים נשאר הרשאה של מנהל מערכת.\n",
|
||||||
|
"profileSettings": "הגדרות פרופיל",
|
||||||
|
"ruleExample1": "מנע גישה לקבצים נסתרים (כל קובץ שמתחיל בנקודה, לדוגמא .git)",
|
||||||
|
"ruleExample2": "חסימת גישה לקובץ בשם Caddyfile בתחום הראשי.",
|
||||||
|
"rules": "חוקים",
|
||||||
|
"rulesHelp": "כאן אתה יכול להגדיר רשימה של כללים למשתמש ספציפי, רשימה שחורה ולבנה. הקבצים החסומים לא יופיעו ברשימת הקבצים ולא יהיו נגישים למשתמש. יש תמיכה בנתיבים (ביחס לתקייה הראשית של המשתמש), וגם בביטוי רגולרי.\n",
|
||||||
|
"scope": "תחום",
|
||||||
|
"setDateFormat": "הגדר פורמט תאריך",
|
||||||
|
"settingsUpdated": "ההגדרות עודכנו!",
|
||||||
|
"shareDuration": "משך השיתוף",
|
||||||
|
"shareManagement": "ניהול שיתוף",
|
||||||
|
"shareDeleted": "שיתוף נמחק!",
|
||||||
|
"singleClick": "השתמש בלחיצות בודדות כדי לפתוח קבצים ותקיות",
|
||||||
|
"themes": {
|
||||||
|
"dark": "כהה",
|
||||||
|
"light": "בהיר",
|
||||||
|
"title": "ערכת נושא"
|
||||||
|
},
|
||||||
|
"user": "משתמש",
|
||||||
|
"userCommands": "פקודות",
|
||||||
|
"userCommandsHelp": "רשימה מופרדת עם רווחים עם הפקודות הזמינות עבור משתמש זה. דוגמא:\n",
|
||||||
|
"userCreated": "משתמש נוצר!",
|
||||||
|
"userDefaults": "הגדרות ברירת מחדל למשתמש",
|
||||||
|
"userDeleted": "משתמש נמחק!",
|
||||||
|
"userManagement": "ניהול משתמש",
|
||||||
|
"userUpdated": "המשתמש עודכן!",
|
||||||
|
"username": "שם משתמש",
|
||||||
|
"users": "משתמשים"
|
||||||
|
},
|
||||||
|
"sidebar": {
|
||||||
|
"help": "עזרה",
|
||||||
|
"hugoNew": "הוגו חדש",
|
||||||
|
"login": "התחבר",
|
||||||
|
"logout": "התנתק",
|
||||||
|
"myFiles": "הקבצים שלי",
|
||||||
|
"newFile": "קובץ חדש",
|
||||||
|
"newFolder": "תקייה חדשה",
|
||||||
|
"preview": "תצוגה מקדימה",
|
||||||
|
"settings": "הגדרות",
|
||||||
|
"signup": "הרשמה",
|
||||||
|
"siteSettings": "הגדרות"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"linkCopied": "הקישור הועתק!"
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"days": "ימים",
|
||||||
|
"hours": "שעות",
|
||||||
|
"minutes": "דקות",
|
||||||
|
"seconds": "שניות",
|
||||||
|
"unit": "יחידת זמן"
|
||||||
|
}
|
||||||
|
}
|
||||||
273
frontend/src/i18n/hu.json
Normal file
273
frontend/src/i18n/hu.json
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
{
|
||||||
|
"buttons": {
|
||||||
|
"cancel": "Mégse",
|
||||||
|
"close": "Bezárás",
|
||||||
|
"copy": "Másolás",
|
||||||
|
"copyFile": "Fájl másolása",
|
||||||
|
"copyToClipboard": "Másolás vágólapra",
|
||||||
|
"create": "Létrehozás",
|
||||||
|
"delete": "Törlése",
|
||||||
|
"download": "Letöltés",
|
||||||
|
"file": "Fájl",
|
||||||
|
"folder": "Mappa",
|
||||||
|
"hideDotfiles": "Rejtett fájlok elrejtése",
|
||||||
|
"info": "Infó",
|
||||||
|
"more": "További",
|
||||||
|
"move": "Mozgatás",
|
||||||
|
"moveFile": "Fájl mozgatása",
|
||||||
|
"new": "Új",
|
||||||
|
"next": "Következő",
|
||||||
|
"ok": "OK",
|
||||||
|
"permalink": "Állandó link lekérése",
|
||||||
|
"previous": "Előző",
|
||||||
|
"publish": "Publikálása",
|
||||||
|
"rename": "Átnevezés",
|
||||||
|
"replace": "Csere",
|
||||||
|
"reportIssue": "Hiba jelentése",
|
||||||
|
"save": "Mentés",
|
||||||
|
"schedule": "Ütemezés",
|
||||||
|
"search": "Keresés",
|
||||||
|
"select": "Kijelölés",
|
||||||
|
"selectMultiple": "Többszörös kijelölés",
|
||||||
|
"share": "Megosztás",
|
||||||
|
"shell": "Parancsértelmező átváltása",
|
||||||
|
"submit": "Beküldés",
|
||||||
|
"switchView": "Nézet váltása",
|
||||||
|
"toggleSidebar": "Oldalsáv átváltása",
|
||||||
|
"update": "Frissítés",
|
||||||
|
"upload": "Feltöltés",
|
||||||
|
"openFile": "Fájl megnyitása"
|
||||||
|
},
|
||||||
|
"download": {
|
||||||
|
"downloadFile": "Fájl letöltése",
|
||||||
|
"downloadFolder": "Mappa letöltése",
|
||||||
|
"downloadSelected": "Kijelölés letöltése"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"forbidden": "Nincs jogosultsága a hozzáféréshez.",
|
||||||
|
"internal": "Valami nagyon elromlott.",
|
||||||
|
"notFound": "Ez a hely nem érhető el.",
|
||||||
|
"connection": "A kiszolgáló nem érhető el."
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"body": "Törzs",
|
||||||
|
"clear": "Törlése",
|
||||||
|
"closePreview": "Előnézet bezárása",
|
||||||
|
"files": "Fájlok",
|
||||||
|
"folders": "Mappák",
|
||||||
|
"home": "Kezdőlap",
|
||||||
|
"lastModified": "Utoljára módosítva",
|
||||||
|
"loading": "Betöltés…",
|
||||||
|
"lonely": "Ez egy magányos érzés…",
|
||||||
|
"metadata": "Metaadat",
|
||||||
|
"multipleSelectionEnabled": "Többszörös kijelölés aktiválva",
|
||||||
|
"name": "Név",
|
||||||
|
"size": "Méret",
|
||||||
|
"sortByLastModified": "Rendezés utolsó módosítás szerint",
|
||||||
|
"sortByName": "Rendezés név szerint",
|
||||||
|
"sortBySize": "Rendezés méret szerint",
|
||||||
|
"noPreview": "Ehhez a fájlhoz nincs előnézet."
|
||||||
|
},
|
||||||
|
"help": {
|
||||||
|
"click": "mappa vagy fájl kijelölése",
|
||||||
|
"ctrl": {
|
||||||
|
"click": "több mappa vagy fájl kijelölése",
|
||||||
|
"f": "keresés megnyitása",
|
||||||
|
"s": "az aktuális fájl vagy mappa letöltése"
|
||||||
|
},
|
||||||
|
"del": "kijelölt elemek törlése",
|
||||||
|
"doubleClick": "fájl vagy mappa megnyitása",
|
||||||
|
"esc": "kijelölés törlése és/vagy parancssor bezárása",
|
||||||
|
"f1": "ezen információ megjelenítése",
|
||||||
|
"f2": "fájl átnevezése",
|
||||||
|
"help": "Súgó"
|
||||||
|
},
|
||||||
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
|
"ar": "العربية",
|
||||||
|
"de": "Deutsch",
|
||||||
|
"en": "English",
|
||||||
|
"es": "Español",
|
||||||
|
"fr": "Français",
|
||||||
|
"is": "Icelandic",
|
||||||
|
"it": "Italiano",
|
||||||
|
"ja": "日本語",
|
||||||
|
"ko": "한국어",
|
||||||
|
"nlBE": "Dutch (Belgium)",
|
||||||
|
"pl": "Polski",
|
||||||
|
"pt": "Português",
|
||||||
|
"ptBR": "Português (Brasil)",
|
||||||
|
"ro": "Romanian",
|
||||||
|
"ru": "Русский",
|
||||||
|
"sk": "Slovenčina",
|
||||||
|
"svSE": "Swedish (Sweden)",
|
||||||
|
"tr": "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
|
"zhCN": "中文 (简体)",
|
||||||
|
"zhTW": "中文 (繁體)"
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"createAnAccount": "Fiók létrehozása",
|
||||||
|
"loginInstead": "Már van fiókom",
|
||||||
|
"password": "Jelszó",
|
||||||
|
"passwordConfirm": "Jelszó megerősítése",
|
||||||
|
"passwordsDontMatch": "A jelszavak nem egyeznek",
|
||||||
|
"signup": "Regisztráció",
|
||||||
|
"submit": "Belépés",
|
||||||
|
"username": "Felhasználói név",
|
||||||
|
"usernameTaken": "A felhasználói név már foglalt",
|
||||||
|
"wrongCredentials": "Hibás hitelesítő adatok"
|
||||||
|
},
|
||||||
|
"permanent": "Állandó",
|
||||||
|
"prompts": {
|
||||||
|
"copy": "Másolása",
|
||||||
|
"copyMessage": "Válassza ki a másolás célját:",
|
||||||
|
"currentlyNavigating": "Jelenlegi helyzet:",
|
||||||
|
"deleteMessageMultiple": "Biztosan törölni szeretne {count} fájlt?",
|
||||||
|
"deleteMessageSingle": "Biztosan törölni szeretné ezt a fájl vagy mappát?",
|
||||||
|
"deleteMessageShare": "Biztosan törölni szeretné ezt a megosztást ({path})?",
|
||||||
|
"deleteTitle": "Fájlok törlése",
|
||||||
|
"displayName": "Megjelenített név:",
|
||||||
|
"download": "Fájlok letöltése",
|
||||||
|
"downloadMessage": "Válassza ki a letöltés formátumát.",
|
||||||
|
"error": "Valami rosszul sült el",
|
||||||
|
"fileInfo": "Fájlinformáció",
|
||||||
|
"filesSelected": "{count} fájl van kijelölve.",
|
||||||
|
"lastModified": "Utolsó módosítás",
|
||||||
|
"move": "Mozgatás",
|
||||||
|
"moveMessage": "Válasszon új helyet a fájl(ok)nak/mappá(k)nak:",
|
||||||
|
"newArchetype": "Új bejegyzést hoz létre egy archetípus alapján. A fájl a tartalom mappában jön létre.",
|
||||||
|
"newDir": "Új mappa",
|
||||||
|
"newDirMessage": "Adja meg az új mappa nevét.",
|
||||||
|
"newFile": "Új fájl",
|
||||||
|
"newFileMessage": "Adja meg az új fájl nevét.",
|
||||||
|
"numberDirs": "Mappák száma",
|
||||||
|
"numberFiles": "Fájlok száma",
|
||||||
|
"rename": "Átnevezés",
|
||||||
|
"renameMessage": "Adja meg az új nevét:",
|
||||||
|
"replace": "Csere",
|
||||||
|
"replaceMessage": "Az egyik feltölteni kívánt fájl a neve miatt ütközik. Szeretné lecserélni a meglévő fájlt?\n",
|
||||||
|
"schedule": "Ütemezés",
|
||||||
|
"scheduleMessage": "Válasszon egy dátumot és időpontot a bejegyzés közzétételének ütemezéséhez.",
|
||||||
|
"show": "Megjelenítés",
|
||||||
|
"size": "Méret",
|
||||||
|
"upload": "Feltöltés",
|
||||||
|
"uploadFiles": "{files} fájl feltöltése…",
|
||||||
|
"uploadMessage": "Válasszon egy feltöltési módot.",
|
||||||
|
"optionalPassword": "Választható jelszó"
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"images": "Képek",
|
||||||
|
"music": "Zene",
|
||||||
|
"pdf": "PDF",
|
||||||
|
"pressToSearch": "Keresés indítása Enterrel…",
|
||||||
|
"search": "Keresés…",
|
||||||
|
"typeToSearch": "Keresés indítása beírással…",
|
||||||
|
"types": "Típusok",
|
||||||
|
"video": "Videó"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"admin": "Admin",
|
||||||
|
"administrator": "Adminisztrátor",
|
||||||
|
"allowCommands": "Parancsok futtatása",
|
||||||
|
"allowEdit": "Fájlok és mappák szerkesztése, átnevezése és törlése",
|
||||||
|
"allowNew": "Új fájlok és mappák létrehozása",
|
||||||
|
"allowPublish": "Új bejegyzések és oldalak létrehozása",
|
||||||
|
"allowSignup": "Felhasználók regisztrációjának engedélyezése",
|
||||||
|
"avoidChanges": "(üresen hagyva nincs változás)",
|
||||||
|
"branding": "Márkázás",
|
||||||
|
"brandingDirectoryPath": "Márkázás mappaútvonala",
|
||||||
|
"brandingHelp": "Testre szabhatja a File Browser példányának megjelenését a név megváltoztatásával, a logó cseréjével, egyéni stílusok hozzáadásával és még a GitHubra mutató külső hivatkozások letiltásával is.\nAz egyéni márkázással kapcsolatos további információkért tekintse meg: {0}.",
|
||||||
|
"changePassword": "Jelszó módosítása",
|
||||||
|
"commandRunner": "Parancsfuttató",
|
||||||
|
"commandRunnerHelp": "Beállíthatja azokat a parancsokat, amelyek a megnevezett események során végrehajtásra kerülnek. Soronként egyet kell megadni. A {0} és a {1} környezeti változók lesznek elérhetőek, ahol a {0} relatív a {1}-hez. A funkcióról és a rendelkezésre álló környezeti változókról további információ: {2}.",
|
||||||
|
"commandsUpdated": "Parancsok frissítve!",
|
||||||
|
"createUserDir": "Felhasználók saját mappáinak automatikus létrehozása új felhasználók hozzáadásakor",
|
||||||
|
"userHomeBasePath": "Alap elérési útvonal a felhasználók saját mappáihoz",
|
||||||
|
"userScopeGenerationPlaceholder": "A környezet automatikus lesz létrehozva",
|
||||||
|
"createUserHomeDirectory": "Felhasználói saját mappák létrehozása",
|
||||||
|
"customStylesheet": "Egyéni stíluslap",
|
||||||
|
"defaultUserDescription": "Ezek az alapértelmezett beállítások az új felhasználók számára.",
|
||||||
|
"disableExternalLinks": "Külső linkek letiltása (kivéve a dokumentáció)",
|
||||||
|
"documentation": "dokumentáció",
|
||||||
|
"examples": "Példák",
|
||||||
|
"executeOnShell": "Futtatás parancsértelmezőben",
|
||||||
|
"executeOnShellDescription": "Alapértelmezés szerint a File Browser a parancsokat a binárisok közvetlen meghívásával hajtja végre. Ha ehelyett egy parancsértelmezőben (például Bash vagy PowerShell) szeretné futtatni őket, akkor itt definiálhatja azt a szükséges argumentumokkal és jelzőkkel. Ha be van állítva, akkor a végrehajtott parancs argumentumként hozzá lesz csatolva. Ez vonatkozik mind a felhasználói parancsokra, mind az eseményhorgokra.",
|
||||||
|
"globalRules": "Ez egy globális engedélyezési és tiltási szabálykészlet. Ezek minden felhasználóra vonatkoznak. Az egyes felhasználók beállításainál egyedi szabályokat határozhat meg, amelyek felülbírálják ezeket.",
|
||||||
|
"globalSettings": "Általános beállítások",
|
||||||
|
"hideDotfiles": "Rejtett fájlok elrejtése",
|
||||||
|
"insertPath": "Elérési útvonal beszúrása",
|
||||||
|
"insertRegex": "Reguláris kifejezés beszúrása",
|
||||||
|
"instanceName": "Példány neve",
|
||||||
|
"language": "Nyelv",
|
||||||
|
"lockPassword": "Felhasználói jelszó megváltoztatásának megakadályozása",
|
||||||
|
"newPassword": "Új jelszó",
|
||||||
|
"newPasswordConfirm": "Új jelszó ismét",
|
||||||
|
"newUser": "Új felhasználó",
|
||||||
|
"password": "Jelszó",
|
||||||
|
"passwordUpdated": "Jelszó frissítve!",
|
||||||
|
"path": "Elérési útvonal",
|
||||||
|
"perm": {
|
||||||
|
"create": "Fájlok és mappák létrehozása",
|
||||||
|
"delete": "Fájlok és mappák törlése",
|
||||||
|
"download": "Letöltése",
|
||||||
|
"execute": "Parancsok futtatása",
|
||||||
|
"modify": "Fájlok szerkesztése",
|
||||||
|
"rename": "Fájlok és mappák átnevezése vagy mozgatása",
|
||||||
|
"share": "Fájlok megosztása"
|
||||||
|
},
|
||||||
|
"permissions": "Jogosultságok",
|
||||||
|
"permissionsHelp": "A felhasználót beállíthatja rendszergazdának, vagy egyénileg is kiválaszthatja a jogosultságokat. Ha a \"Rendszergazda\" lehetőséget választja, az összes többi opció automatikusan be lesz jelölve. A felhasználók kezelése továbbra is a rendszergazda kiváltsága marad.\n",
|
||||||
|
"profileSettings": "Profilbeállítások",
|
||||||
|
"ruleExample1": "megakadályozza a hozzáférést bármely rejtett fájlhoz (pl. .git, .gitignore) bármely mappában.\n",
|
||||||
|
"ruleExample2": "blokkolja a hozzáférést a Caddyfile nevű fájlhoz a hatókör gyökerében.",
|
||||||
|
"rules": "Szabályok",
|
||||||
|
"rulesHelp": "Meghatározhat egy sor engedélyezési és tiltási szabályt az adott felhasználó számára. A letiltott fájlok nem jelennek meg a listákban, és nem lesznek elérhetőek a felhasználó számára. A reguláris kifejezések és a felhasználói hatókörhöz viszonyított elérési utak támogatottak.\n",
|
||||||
|
"scope": "Hatókör",
|
||||||
|
"setDateFormat": "Pontos dátumformátum beállítása",
|
||||||
|
"settingsUpdated": "Beállítások frissítve!",
|
||||||
|
"shareDuration": "Megosztás időtartama",
|
||||||
|
"shareManagement": "Megosztáskezelés",
|
||||||
|
"shareDeleted": "Megosztás törölve!",
|
||||||
|
"singleClick": "Fájlok és könyvtárak megnyitása egyetlen kattintással",
|
||||||
|
"themes": {
|
||||||
|
"dark": "Sötét",
|
||||||
|
"light": "Világos",
|
||||||
|
"title": "Téma"
|
||||||
|
},
|
||||||
|
"user": "Felhasználó",
|
||||||
|
"userCommands": "Parancsok",
|
||||||
|
"userCommandsHelp": "Egy szóközzel elválasztott lista az adott felhasználó számára elérhető parancsokkal. Példa:\n",
|
||||||
|
"userCreated": "Felhasználó létrehozva!",
|
||||||
|
"userDefaults": "Felhasználói alapértelmezett beállítások",
|
||||||
|
"userDeleted": "Felhasználó törölve!",
|
||||||
|
"userManagement": "Felhasználókezelés",
|
||||||
|
"userUpdated": "Felhasználó frissítve!",
|
||||||
|
"username": "Felhasználói név",
|
||||||
|
"users": "Felhasználók"
|
||||||
|
},
|
||||||
|
"sidebar": {
|
||||||
|
"help": "Súgó",
|
||||||
|
"hugoNew": "Új Hugo",
|
||||||
|
"login": "Belépés",
|
||||||
|
"logout": "Kilépés",
|
||||||
|
"myFiles": "Fájljaim",
|
||||||
|
"newFile": "Új fájl",
|
||||||
|
"newFolder": "Új mappa",
|
||||||
|
"preview": "Előnézet",
|
||||||
|
"settings": "Beállítások",
|
||||||
|
"signup": "Regisztráció",
|
||||||
|
"siteSettings": "Oldalbeállítások"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"linkCopied": "Link másolva!"
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"days": "Nap",
|
||||||
|
"hours": "Óra",
|
||||||
|
"minutes": "Perc",
|
||||||
|
"seconds": "Másodperc",
|
||||||
|
"unit": "Időegység"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
import Vue from "vue";
|
import Vue from "vue";
|
||||||
import VueI18n from "vue-i18n";
|
import VueI18n from "vue-i18n";
|
||||||
|
|
||||||
|
import he from "./he.json";
|
||||||
|
import hu from "./hu.json";
|
||||||
import ar from "./ar.json";
|
import ar from "./ar.json";
|
||||||
import de from "./de.json";
|
import de from "./de.json";
|
||||||
import en from "./en.json";
|
import en from "./en.json";
|
||||||
@@ -17,6 +19,7 @@ import ptBR from "./pt-br.json";
|
|||||||
import ro from "./ro.json";
|
import ro from "./ro.json";
|
||||||
import ru from "./ru.json";
|
import ru from "./ru.json";
|
||||||
import sk from "./sk.json";
|
import sk from "./sk.json";
|
||||||
|
import ua from "./ua.json";
|
||||||
import svSE from "./sv-se.json";
|
import svSE from "./sv-se.json";
|
||||||
import zhCN from "./zh-cn.json";
|
import zhCN from "./zh-cn.json";
|
||||||
import zhTW from "./zh-tw.json";
|
import zhTW from "./zh-tw.json";
|
||||||
@@ -26,6 +29,12 @@ Vue.use(VueI18n);
|
|||||||
export function detectLocale() {
|
export function detectLocale() {
|
||||||
let locale = (navigator.language || navigator.browserLangugae).toLowerCase();
|
let locale = (navigator.language || navigator.browserLangugae).toLowerCase();
|
||||||
switch (true) {
|
switch (true) {
|
||||||
|
case /^he.*/i.test(locale):
|
||||||
|
locale = "he";
|
||||||
|
break;
|
||||||
|
case /^hu.*/i.test(locale):
|
||||||
|
locale = "hu";
|
||||||
|
break;
|
||||||
case /^ar.*/i.test(locale):
|
case /^ar.*/i.test(locale):
|
||||||
locale = "ar";
|
locale = "ar";
|
||||||
break;
|
break;
|
||||||
@@ -74,6 +83,9 @@ export function detectLocale() {
|
|||||||
case /^sk.*/i.test(locale):
|
case /^sk.*/i.test(locale):
|
||||||
locale = "sk";
|
locale = "sk";
|
||||||
break;
|
break;
|
||||||
|
case /^ua.*/i.test(locale):
|
||||||
|
locale = "ua";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
locale = "en";
|
locale = "en";
|
||||||
}
|
}
|
||||||
@@ -92,10 +104,14 @@ const removeEmpty = (obj) =>
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const rtlLanguages = ["he", "ar"];
|
||||||
|
|
||||||
const i18n = new VueI18n({
|
const i18n = new VueI18n({
|
||||||
locale: detectLocale(),
|
locale: detectLocale(),
|
||||||
fallbackLocale: "en",
|
fallbackLocale: "en",
|
||||||
messages: {
|
messages: {
|
||||||
|
he: removeEmpty(he),
|
||||||
|
hu: removeEmpty(hu),
|
||||||
ar: removeEmpty(ar),
|
ar: removeEmpty(ar),
|
||||||
de: removeEmpty(de),
|
de: removeEmpty(de),
|
||||||
en: en,
|
en: en,
|
||||||
@@ -113,6 +129,7 @@ const i18n = new VueI18n({
|
|||||||
ro: removeEmpty(ro),
|
ro: removeEmpty(ro),
|
||||||
sk: removeEmpty(sk),
|
sk: removeEmpty(sk),
|
||||||
"sv-se": removeEmpty(svSE),
|
"sv-se": removeEmpty(svSE),
|
||||||
|
ua: removeEmpty(ua),
|
||||||
"zh-cn": removeEmpty(zhCN),
|
"zh-cn": removeEmpty(zhCN),
|
||||||
"zh-tw": removeEmpty(zhTW),
|
"zh-tw": removeEmpty(zhTW),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "Hjálp"
|
"help": "Hjálp"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -175,6 +178,7 @@
|
|||||||
"customStylesheet": "Custom Stylesheet",
|
"customStylesheet": "Custom Stylesheet",
|
||||||
"defaultUserDescription": "Þetta eru sjálfgefnar stillingar fyrir nýja notendur.",
|
"defaultUserDescription": "Þetta eru sjálfgefnar stillingar fyrir nýja notendur.",
|
||||||
"disableExternalLinks": "Sýna ytri-hlekki (fyrir utan leiðbeiningar)",
|
"disableExternalLinks": "Sýna ytri-hlekki (fyrir utan leiðbeiningar)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "leiðbeiningar",
|
"documentation": "leiðbeiningar",
|
||||||
"examples": "Dæmi",
|
"examples": "Dæmi",
|
||||||
"executeOnShell": "Keyra í skel",
|
"executeOnShell": "Keyra í skel",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
"create": "Crea",
|
"create": "Crea",
|
||||||
"delete": "Elimina",
|
"delete": "Elimina",
|
||||||
"download": "Scarica",
|
"download": "Scarica",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "Nascondi dotfile",
|
||||||
"info": "Informazioni",
|
"info": "Informazioni",
|
||||||
"more": "Altro",
|
"more": "Altro",
|
||||||
"move": "Sposta",
|
"move": "Sposta",
|
||||||
@@ -28,19 +28,19 @@
|
|||||||
"select": "Seleziona",
|
"select": "Seleziona",
|
||||||
"selectMultiple": "Seleziona molteplici",
|
"selectMultiple": "Seleziona molteplici",
|
||||||
"share": "Condividi",
|
"share": "Condividi",
|
||||||
"shell": "Toggle shell",
|
"shell": "Mostra/nascondi shell",
|
||||||
"switchView": "Cambia vista",
|
"switchView": "Cambia vista",
|
||||||
"toggleSidebar": "Mostra/nascondi la barra laterale",
|
"toggleSidebar": "Mostra/nascondi la barra laterale",
|
||||||
"update": "Aggiorna",
|
"update": "Aggiorna",
|
||||||
"upload": "Carica"
|
"upload": "Carica"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Download File",
|
"downloadFile": "Scarica file",
|
||||||
"downloadFolder": "Download Folder",
|
"downloadFolder": "Scarica cartella",
|
||||||
"downloadSelected": ""
|
"downloadSelected": "Scarica selezionati"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "You don't have permissions to access this.",
|
"forbidden": "Non hai i permessi per accedere a questo file.",
|
||||||
"internal": "Qualcosa è andato veramente male.",
|
"internal": "Qualcosa è andato veramente male.",
|
||||||
"notFound": "Questo percorso non può essere raggiunto."
|
"notFound": "Questo percorso non può essere raggiunto."
|
||||||
},
|
},
|
||||||
@@ -48,16 +48,16 @@
|
|||||||
"body": "Contenuto",
|
"body": "Contenuto",
|
||||||
"clear": "Cancella",
|
"clear": "Cancella",
|
||||||
"closePreview": "Chiudi anteprima",
|
"closePreview": "Chiudi anteprima",
|
||||||
"files": "Files",
|
"files": "File",
|
||||||
"folders": "Cartelle",
|
"folders": "Cartelle",
|
||||||
"home": "Home",
|
"home": "Home",
|
||||||
"lastModified": "Ultima modifica",
|
"lastModified": "Ultima modifica",
|
||||||
"loading": "Caricamento...",
|
"loading": "Caricamento...",
|
||||||
"lonely": "Ci si sente soli qui...",
|
"lonely": "Ci si sente soli qui...",
|
||||||
"metadata": "Metadata",
|
"metadata": "Metadati",
|
||||||
"multipleSelectionEnabled": "Selezione multipla attivata",
|
"multipleSelectionEnabled": "Selezione multipla attivata",
|
||||||
"name": "Nome",
|
"name": "Nome",
|
||||||
"size": "Grandezza",
|
"size": "Dimensione",
|
||||||
"sortByLastModified": "Ordina per ultima modifica",
|
"sortByLastModified": "Ordina per ultima modifica",
|
||||||
"sortByName": "Ordina per nome",
|
"sortByName": "Ordina per nome",
|
||||||
"sortBySize": "Ordina per dimensione"
|
"sortBySize": "Ordina per dimensione"
|
||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "Aiuto"
|
"help": "Aiuto"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,19 +97,20 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"createAnAccount": "Create an account",
|
"createAnAccount": "Crea un account",
|
||||||
"loginInstead": "Already have an account",
|
"loginInstead": "Hai già un account",
|
||||||
"password": "Password",
|
"password": "Password",
|
||||||
"passwordConfirm": "Password Confirmation",
|
"passwordConfirm": "Conferma password",
|
||||||
"passwordsDontMatch": "Passwords don't match",
|
"passwordsDontMatch": "Le password non corrispondono",
|
||||||
"signup": "Signup",
|
"signup": "Registrati",
|
||||||
"submit": "Entra",
|
"submit": "Entra",
|
||||||
"username": "Nome utente",
|
"username": "Nome utente",
|
||||||
"usernameTaken": "Username already taken",
|
"usernameTaken": "Username già usato",
|
||||||
"wrongCredentials": "Credenziali errate"
|
"wrongCredentials": "Credenziali errate"
|
||||||
},
|
},
|
||||||
"permanent": "Permanente",
|
"permanent": "Permanente",
|
||||||
@@ -115,10 +118,10 @@
|
|||||||
"copy": "Copia",
|
"copy": "Copia",
|
||||||
"copyMessage": "Seleziona la cartella in cui copiare i file:",
|
"copyMessage": "Seleziona la cartella in cui copiare i file:",
|
||||||
"currentlyNavigating": "Attualmente navigando su:",
|
"currentlyNavigating": "Attualmente navigando su:",
|
||||||
"deleteMessageMultiple": "Sei sicuro di voler eliminare {count} file(s)?",
|
"deleteMessageMultiple": "Sei sicuro di voler eliminare {count} file?",
|
||||||
"deleteMessageSingle": "Sei sicuro di voler eliminare questo file/cartella?",
|
"deleteMessageSingle": "Sei sicuro di voler eliminare questo file/cartella?",
|
||||||
"deleteTitle": "Elimina",
|
"deleteTitle": "Elimina",
|
||||||
"displayName": "Nome Mostrato:",
|
"displayName": "Nome visualizzato:",
|
||||||
"download": "Scarica files",
|
"download": "Scarica files",
|
||||||
"downloadMessage": "Seleziona il formato che vuoi scaricare.",
|
"downloadMessage": "Seleziona il formato che vuoi scaricare.",
|
||||||
"error": "Qualcosa è andato per il verso storto",
|
"error": "Qualcosa è andato per il verso storto",
|
||||||
@@ -133,7 +136,7 @@
|
|||||||
"newFile": "Nuovo file",
|
"newFile": "Nuovo file",
|
||||||
"newFileMessage": "Scrivi il nome del nuovo file.",
|
"newFileMessage": "Scrivi il nome del nuovo file.",
|
||||||
"numberDirs": "Numero di cartelle",
|
"numberDirs": "Numero di cartelle",
|
||||||
"numberFiles": "Numero di files",
|
"numberFiles": "Numero di file",
|
||||||
"rename": "Rinomina",
|
"rename": "Rinomina",
|
||||||
"renameMessage": "Inserisci un nuovo nome per",
|
"renameMessage": "Inserisci un nuovo nome per",
|
||||||
"replace": "Sostituisci",
|
"replace": "Sostituisci",
|
||||||
@@ -141,17 +144,17 @@
|
|||||||
"schedule": "Pianifica",
|
"schedule": "Pianifica",
|
||||||
"scheduleMessage": "Seleziona data e ora per programmare la pubbilicazione di questo post",
|
"scheduleMessage": "Seleziona data e ora per programmare la pubbilicazione di questo post",
|
||||||
"show": "Mostra",
|
"show": "Mostra",
|
||||||
"size": "Grandezza",
|
"size": "Dimensione",
|
||||||
"upload": "",
|
"upload": "Carica",
|
||||||
"uploadMessage": ""
|
"uploadMessage": "Seleziona un'opzione per il caricamento."
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "Immagini",
|
"images": "Immagini",
|
||||||
"music": "Musica",
|
"music": "Musica",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "Press enter to search...",
|
"pressToSearch": "Premi Invio per cercare...",
|
||||||
"search": "Cerca...",
|
"search": "Cerca...",
|
||||||
"typeToSearch": "Type to search...",
|
"typeToSearch": "Scrivi per cercare...",
|
||||||
"types": "Tipi",
|
"types": "Tipi",
|
||||||
"video": "Video"
|
"video": "Video"
|
||||||
},
|
},
|
||||||
@@ -162,29 +165,30 @@
|
|||||||
"allowEdit": "Modifica, rinomina ed elimina file o cartelle",
|
"allowEdit": "Modifica, rinomina ed elimina file o cartelle",
|
||||||
"allowNew": "Crea nuovi files o cartelle",
|
"allowNew": "Crea nuovi files o cartelle",
|
||||||
"allowPublish": "Pubblica nuovi post e pagine",
|
"allowPublish": "Pubblica nuovi post e pagine",
|
||||||
"allowSignup": "Allow users to signup",
|
"allowSignup": "Permetti agli utenti di registrarsi",
|
||||||
"avoidChanges": "(lascia vuoto per evitare cambiamenti)",
|
"avoidChanges": "(lascia vuoto per evitare cambiamenti)",
|
||||||
"branding": "Branding",
|
"branding": "Branding",
|
||||||
"brandingDirectoryPath": "Branding directory path",
|
"brandingDirectoryPath": "Directory del branding",
|
||||||
"brandingHelp": "You can customize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
"brandingHelp": "Puoi personalizzare l'aspetto e il comportamento di File Browser cambiando il suo nome, logo, aggiungendo stili personalizzati e anche disabilitando link esterni verso GitHub.\nPer altre informazioni sul branding personalizzato, vai alla {0}.",
|
||||||
"changePassword": "Modifica password",
|
"changePassword": "Modifica password",
|
||||||
"commandRunner": "Command runner",
|
"commandRunner": "Esecutore di comandi",
|
||||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
"commandRunnerHelp": "Qui puoi impostare i comandi da eseguire negli eventi nominati. Ne devi scrivere uno per riga. Le variabili d'ambiente {0} e {1} sono disponibili, essendo {0} relativo a {1}. Per altre informazioni su questa funzionalità e sulle variabili d'ambiente utilizzabili, leggi la {2}.",
|
||||||
"commandsUpdated": "Comandi aggiornati!",
|
"commandsUpdated": "Comandi aggiornati!",
|
||||||
"createUserDir": "Auto create user home dir while adding new user",
|
"createUserDir": "Crea automaticamente la home directory dell'utente quando lo aggiungi",
|
||||||
"customStylesheet": "Folgio di stile personalizzato",
|
"customStylesheet": "Foglio di stile personalizzato",
|
||||||
"defaultUserDescription": "This are the default settings for new users.",
|
"defaultUserDescription": "Queste sono le impostazioni predefinite per i nuovi utenti.",
|
||||||
"disableExternalLinks": "Disable external links (except documentation)",
|
"disableExternalLinks": "Disabilita link esterni (tranne per la documentazione)",
|
||||||
"documentation": "documentation",
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
|
"documentation": "documentazione",
|
||||||
"examples": "Esempi",
|
"examples": "Esempi",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "Esegui nella shell",
|
||||||
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.",
|
"executeOnShellDescription": "Di default File Browser esegue i comandi chiamando direttamente i loro binari. Se invece vuoi eseguirli su una shell (come Bash o PowerShell), puoi definirli qui con gli argomenti e i flag richiesti. Se impostato, il comando che esegui sarà concatenato come argomento. Questo si applica sia ai comandi utente che agli hook di eventi.",
|
||||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
"globalRules": "Questo è un insieme globale di regole permetti/nega, che si applicano ad ogni utente. Puoi definire regole specifiche per ogni utente, per sovrascrivere queste.",
|
||||||
"globalSettings": "Impostazioni Globali",
|
"globalSettings": "Impostazioni globali",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "Nascondi dotfile",
|
||||||
"insertPath": "Insert the path",
|
"insertPath": "Inserisci il percorso",
|
||||||
"insertRegex": "Insert regex expression",
|
"insertRegex": "Inserisci la regex",
|
||||||
"instanceName": "Instance name",
|
"instanceName": "Nome dell'istanza",
|
||||||
"language": "Lingua",
|
"language": "Lingua",
|
||||||
"lockPassword": "Impedisci all'utente di modificare la password",
|
"lockPassword": "Impedisci all'utente di modificare la password",
|
||||||
"newPassword": "La tua nuova password",
|
"newPassword": "La tua nuova password",
|
||||||
@@ -192,38 +196,38 @@
|
|||||||
"newUser": "Nuovo utente",
|
"newUser": "Nuovo utente",
|
||||||
"password": "Password",
|
"password": "Password",
|
||||||
"passwordUpdated": "Password aggiornata!",
|
"passwordUpdated": "Password aggiornata!",
|
||||||
"path": "",
|
"path": "Percorso",
|
||||||
"perm": {
|
"perm": {
|
||||||
"create": "Create files and directories",
|
"create": "Creare file e cartelle",
|
||||||
"delete": "Delete files and directories",
|
"delete": "Eliminare file e cartelle",
|
||||||
"download": "Download",
|
"download": "Scaricare",
|
||||||
"execute": "Execute commands",
|
"execute": "Eseguire comandi",
|
||||||
"modify": "Edit files",
|
"modify": "Modificare file",
|
||||||
"rename": "Rename or move files and directories",
|
"rename": "Rinominare o spostare file e cartelle",
|
||||||
"share": "Share files"
|
"share": "Condividere file"
|
||||||
},
|
},
|
||||||
"permissions": "Permessi",
|
"permissions": "Permessi",
|
||||||
"permissionsHelp": "È possibile impostare l'utente come amministratore o scegliere i permessi singolarmente. Se si seleziona \"Amministratore\", tutte le altre opzioni saranno automaticamente assegnate. La gestione degli utenti rimane un privilegio di un amministratore.\n",
|
"permissionsHelp": "È possibile impostare l'utente come amministratore o scegliere i permessi singolarmente. Se si seleziona \"Amministratore\", tutte le altre opzioni saranno automaticamente assegnate. La gestione degli utenti rimane un privilegio di un amministratore.\n",
|
||||||
"profileSettings": "Impostazioni del profilo",
|
"profileSettings": "Impostazioni del profilo",
|
||||||
"ruleExample1": "Impedisci l'accesso a qualsiasi file avente come prefisso un punto\n (ad esempio .git, .gitignore) presente in ogni cartella.\n",
|
"ruleExample1": "impedisci l'accesso a qualsiasi file avente come prefisso un punto\n (ad esempio .git, .gitignore) presente in ogni cartella.\n",
|
||||||
"ruleExample2": "blocca l'accesso al file denominato Caddyfile nella radice del campo di applicazione.",
|
"ruleExample2": "blocca l'accesso al file denominato Caddyfile nella radice del campo di applicazione.",
|
||||||
"rules": "Regole",
|
"rules": "Regole",
|
||||||
"rulesHelp": "Qui è possibile definire una serie di regole e permessi per questo specifico utente. I file bloccati non appariranno negli elenchi e non saranno accessibili dagli utenti. all'utente. Sia regex che i percorsi relativi all'ambito di applicazione degli utenti sono supportati.\n",
|
"rulesHelp": "Qui è possibile definire una serie di regole e permessi per questo specifico utente. I file bloccati non appariranno negli elenchi e non saranno accessibili dagli utenti. all'utente. Sia regex che i percorsi relativi all'ambito di applicazione degli utenti sono supportati.\n",
|
||||||
"scope": "Scopo",
|
"scope": "Scope",
|
||||||
"settingsUpdated": "Impostazioni aggiornate!",
|
"settingsUpdated": "Impostazioni aggiornate!",
|
||||||
"shareDuration": "",
|
"shareDuration": "Durata della condivisione",
|
||||||
"shareManagement": "",
|
"shareManagement": "Gestione delle condivisioni",
|
||||||
"singleClick": "",
|
"singleClick": "Usa un singolo click per aprire file e cartelle",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "",
|
"dark": "Scuro",
|
||||||
"light": "",
|
"light": "Chiaro",
|
||||||
"title": ""
|
"title": "Tema"
|
||||||
},
|
},
|
||||||
"user": "Utente",
|
"user": "Utente",
|
||||||
"userCommands": "Comandi",
|
"userCommands": "Comandi",
|
||||||
"userCommandsHelp": "Una lista separata dal spazi con i comandi disponibili per questo utente. Example:\n",
|
"userCommandsHelp": "Una lista separata dal spazi con i comandi disponibili per questo utente. Example:\n",
|
||||||
"userCreated": "Utente creato!",
|
"userCreated": "Utente creato!",
|
||||||
"userDefaults": "User default settings",
|
"userDefaults": "Impostazioni predefinite utente",
|
||||||
"userDeleted": "Utente eliminato!",
|
"userDeleted": "Utente eliminato!",
|
||||||
"userManagement": "Gestione degli utenti",
|
"userManagement": "Gestione degli utenti",
|
||||||
"userUpdated": "Utente aggiornato!",
|
"userUpdated": "Utente aggiornato!",
|
||||||
@@ -240,8 +244,8 @@
|
|||||||
"newFolder": "Nuova cartella",
|
"newFolder": "Nuova cartella",
|
||||||
"preview": "Anteprima",
|
"preview": "Anteprima",
|
||||||
"settings": "Impostazioni",
|
"settings": "Impostazioni",
|
||||||
"signup": "Signup",
|
"signup": "Registrati",
|
||||||
"siteSettings": "Impostaizoni del sito"
|
"siteSettings": "Impostazioni del sito"
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
"linkCopied": "Link copiato!"
|
"linkCopied": "Link copiato!"
|
||||||
|
|||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "ヘルプ"
|
"help": "ヘルプ"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -175,6 +178,7 @@
|
|||||||
"customStylesheet": "カスタムスタイルシ ート",
|
"customStylesheet": "カスタムスタイルシ ート",
|
||||||
"defaultUserDescription": "This are the default settings for new users.",
|
"defaultUserDescription": "This are the default settings for new users.",
|
||||||
"disableExternalLinks": "Disable external links (except documentation)",
|
"disableExternalLinks": "Disable external links (except documentation)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "documentation",
|
"documentation": "documentation",
|
||||||
"examples": "例",
|
"examples": "例",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "Execute on shell",
|
||||||
|
|||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "도움말"
|
"help": "도움말"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -175,6 +178,7 @@
|
|||||||
"customStylesheet": "커스텀 스타일시트",
|
"customStylesheet": "커스텀 스타일시트",
|
||||||
"defaultUserDescription": "아래 사항은 신규 사용자들에 대한 기본 설정입니다.",
|
"defaultUserDescription": "아래 사항은 신규 사용자들에 대한 기본 설정입니다.",
|
||||||
"disableExternalLinks": "외부 링크 감추기",
|
"disableExternalLinks": "외부 링크 감추기",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "문서",
|
"documentation": "문서",
|
||||||
"examples": "예",
|
"examples": "예",
|
||||||
"executeOnShell": "쉘에서 실행",
|
"executeOnShell": "쉘에서 실행",
|
||||||
|
|||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "Help"
|
"help": "Help"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "Arabisch",
|
"ar": "Arabisch",
|
||||||
"de": "Duits",
|
"de": "Duits",
|
||||||
"en": "Engels",
|
"en": "Engels",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "Chinees (vereenvoudigd)",
|
"zhCN": "Chinees (vereenvoudigd)",
|
||||||
"zhTW": "Chinees (traditioneel)"
|
"zhTW": "Chinees (traditioneel)"
|
||||||
},
|
},
|
||||||
@@ -175,6 +178,7 @@
|
|||||||
"customStylesheet": "Aangepast Stylesheet",
|
"customStylesheet": "Aangepast Stylesheet",
|
||||||
"defaultUserDescription": "Dit zijn de standaardinstellingen voor nieuwe gebruikers.",
|
"defaultUserDescription": "Dit zijn de standaardinstellingen voor nieuwe gebruikers.",
|
||||||
"disableExternalLinks": "Schakel externe links uit (behalve documentatie)",
|
"disableExternalLinks": "Schakel externe links uit (behalve documentatie)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "Documentatie",
|
"documentation": "Documentatie",
|
||||||
"examples": "Voorbeelden",
|
"examples": "Voorbeelden",
|
||||||
"executeOnShell": "Uitvoeren in de shell",
|
"executeOnShell": "Uitvoeren in de shell",
|
||||||
|
|||||||
@@ -16,31 +16,31 @@
|
|||||||
"new": "Nowy",
|
"new": "Nowy",
|
||||||
"next": "Następny",
|
"next": "Następny",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"permalink": "Get Permanent Link",
|
"permalink": "Uzyskaj link bezpośredni (permalink)",
|
||||||
"previous": "Poprzedni",
|
"previous": "Poprzedni",
|
||||||
"publish": "Opublikuj",
|
"publish": "Opublikuj",
|
||||||
"rename": "Zmień Nazwę",
|
"rename": "Zmień nazwę",
|
||||||
"replace": "Zamień",
|
"replace": "Zamień",
|
||||||
"reportIssue": "Zgłoś Problem",
|
"reportIssue": "Zgłoś problem",
|
||||||
"save": "Zapisz",
|
"save": "Zapisz",
|
||||||
"schedule": "Grafik",
|
"schedule": "Grafik",
|
||||||
"search": "Szukaj",
|
"search": "Szukaj",
|
||||||
"select": "Wybierz",
|
"select": "Wybierz",
|
||||||
"selectMultiple": "Zaznacz wiele",
|
"selectMultiple": "Zaznacz wiele",
|
||||||
"share": "Udostępnij",
|
"share": "Udostępnij",
|
||||||
"shell": "Toggle shell",
|
"shell": "Pokaż/ukryj powłokę",
|
||||||
"switchView": "Zmień widok",
|
"switchView": "Zmień widok",
|
||||||
"toggleSidebar": "Toggle sidebar",
|
"toggleSidebar": "Pokaż/ukryj panel boczny",
|
||||||
"update": "Aktualizuj",
|
"update": "Aktualizuj",
|
||||||
"upload": "Upload"
|
"upload": "Wgraj"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Download File",
|
"downloadFile": "Pobierz plik",
|
||||||
"downloadFolder": "Download Folder",
|
"downloadFolder": "Pobierz folder",
|
||||||
"downloadSelected": ""
|
"downloadSelected": "Pobierz zaznaczone"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "You don't have permissions to access this.",
|
"forbidden": "Nie posiadasz uprawnień potrzebnych, by uzyskać do tego dostęp.",
|
||||||
"internal": "Pojawił się poważny problem.",
|
"internal": "Pojawił się poważny problem.",
|
||||||
"notFound": "Ten adres nie jest poprawny."
|
"notFound": "Ten adres nie jest poprawny."
|
||||||
},
|
},
|
||||||
@@ -50,17 +50,17 @@
|
|||||||
"closePreview": "Zamknij poprzednie",
|
"closePreview": "Zamknij poprzednie",
|
||||||
"files": "Pliki",
|
"files": "Pliki",
|
||||||
"folders": "Foldery",
|
"folders": "Foldery",
|
||||||
"home": "Home",
|
"home": "Katalog domowy",
|
||||||
"lastModified": "Ostatnio modyfikowane",
|
"lastModified": "Ostatnio modyfikowane",
|
||||||
"loading": "Ładowanie...",
|
"loading": "Ładowanie...",
|
||||||
"lonely": "Smutno gdy tak pusto...",
|
"lonely": "Smutno gdy tak pusto...",
|
||||||
"metadata": "Metadata",
|
"metadata": "Metadane",
|
||||||
"multipleSelectionEnabled": "Multiple selection enabled",
|
"multipleSelectionEnabled": "Zaznaczenie wielu włączone",
|
||||||
"name": "Nazwa",
|
"name": "Nazwa",
|
||||||
"size": "Rozmiar",
|
"size": "Rozmiar",
|
||||||
"sortByLastModified": "Sortuj po dacie modyfikacji",
|
"sortByLastModified": "Sortuj wg. daty modyfikacji",
|
||||||
"sortByName": "Sortuj po nazwie",
|
"sortByName": "Sortuj wg. nazwy",
|
||||||
"sortBySize": "Sortuj po rozmiarze"
|
"sortBySize": "Sortuj wg. rozmiaru"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "wybierz plik lub foler",
|
"click": "wybierz plik lub foler",
|
||||||
@@ -77,51 +77,54 @@
|
|||||||
"help": "Pomoc"
|
"help": "Pomoc"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
"es": "Español",
|
"es": "Español",
|
||||||
"fr": "Français",
|
"fr": "Français",
|
||||||
"is": "",
|
"is": "Íslenska",
|
||||||
"it": "Italiano",
|
"it": "Italiano",
|
||||||
"ja": "日本語",
|
"ja": "日本語",
|
||||||
"ko": "한국어",
|
"ko": "한국어",
|
||||||
"nlBE": "",
|
"nlBE": "Nederlands (België)",
|
||||||
"pl": "Polski",
|
"pl": "Polski",
|
||||||
"pt": "Português",
|
"pt": "Português",
|
||||||
"ptBR": "Português (Brasil)",
|
"ptBR": "Português (Brasil)",
|
||||||
"ro": "",
|
"ro": "Română",
|
||||||
"ru": "Русский",
|
"ru": "Русский",
|
||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "Svenska (Sverige)",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"createAnAccount": "Create an account",
|
"createAnAccount": "Utwórz konto",
|
||||||
"loginInstead": "Already have an account",
|
"loginInstead": "Takie konto już istnieje",
|
||||||
"password": "Hasło",
|
"password": "Hasło",
|
||||||
"passwordConfirm": "Password Confirmation",
|
"passwordConfirm": "Potwierdzenie hasła",
|
||||||
"passwordsDontMatch": "Passwords don't match",
|
"passwordsDontMatch": "Hasła różnią się",
|
||||||
"signup": "Signup",
|
"signup": "Rejestracja",
|
||||||
"submit": "Login",
|
"submit": "Logowanie",
|
||||||
"username": "Nazwa użytkownika",
|
"username": "Nazwa użytkownika",
|
||||||
"usernameTaken": "Username already taken",
|
"usernameTaken": "Nazwa użytkownika już zajęta",
|
||||||
"wrongCredentials": "Błędne dane logowania"
|
"wrongCredentials": "Błędne dane logowania"
|
||||||
},
|
},
|
||||||
"permanent": "Permanent",
|
"permanent": "Permanentny",
|
||||||
"prompts": {
|
"prompts": {
|
||||||
"copy": "Kopiuj",
|
"copy": "Kopiuj",
|
||||||
"copyMessage": "Wybierz lokalizację do której mają być skopiowane wybrane pliki",
|
"copyMessage": "Wybierz lokalizację do której mają być skopiowane wybrane pliki",
|
||||||
"currentlyNavigating": "Currently navigating on:",
|
"currentlyNavigating": "Obecnie przeglądasz:",
|
||||||
"deleteMessageMultiple": "Czy jesteś pewien że chcesz usunąć {count} plik(ów)?",
|
"deleteMessageMultiple": "Czy jesteś pewien że chcesz usunąć {count} plik(ów)?",
|
||||||
"deleteMessageSingle": "Czy jesteś pewien, że chcesz usunąć ten plik/folder?",
|
"deleteMessageSingle": "Czy jesteś pewien, że chcesz usunąć ten plik/folder?",
|
||||||
"deleteTitle": "Usuń pliki",
|
"deleteTitle": "Usuń pliki",
|
||||||
"displayName": "Wyświetlana Nazwa:",
|
"displayName": "Wyświetlana Nazwa:",
|
||||||
"download": "Pobierz pliki",
|
"download": "Pobierz pliki",
|
||||||
"downloadMessage": "Wybierz format, jaki chesz pobrać.",
|
"downloadMessage": "Wybierz format, jaki chesz pobrać.",
|
||||||
"error": "Pojawił się jakiś błąd",
|
"error": "Pojawił się nieznany błąd",
|
||||||
"fileInfo": "Informacje o pliku",
|
"fileInfo": "Informacje o pliku",
|
||||||
"filesSelected": "{count} plików zostało zaznaczonych.",
|
"filesSelected": "{count} plików zostało zaznaczonych.",
|
||||||
"lastModified": "Osatnio Zmodyfikowane",
|
"lastModified": "Osatnio Zmodyfikowane",
|
||||||
@@ -142,18 +145,19 @@
|
|||||||
"scheduleMessage": "Wybierz datę i czas dla publikacji tego wpisu.",
|
"scheduleMessage": "Wybierz datę i czas dla publikacji tego wpisu.",
|
||||||
"show": "Pokaż",
|
"show": "Pokaż",
|
||||||
"size": "Rozmiar",
|
"size": "Rozmiar",
|
||||||
"upload": "",
|
"upload": "Prześlij",
|
||||||
"uploadMessage": ""
|
"uploadMessage": "Proszę wybrać metodę przesyłania"
|
||||||
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "Zdjęcia",
|
"images": "Zdjęcia",
|
||||||
"music": "Muzyka",
|
"music": "Muzyka",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "Press enter to search...",
|
"pressToSearch": "Wciśnij enter, aby wyszukać...",
|
||||||
"search": "Szukaj...",
|
"search": "Szukaj...",
|
||||||
"typeToSearch": "Type to search...",
|
"typeToSearch": "Zacznij pisać, aby wyszukać...",
|
||||||
"types": "Typy",
|
"types": "Typy",
|
||||||
"video": "Video"
|
"video": "Wideo"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"admin": "Admin",
|
"admin": "Admin",
|
||||||
@@ -162,29 +166,30 @@
|
|||||||
"allowEdit": "Edycja, zmiana nazwy i usuniecie plików lub folderów",
|
"allowEdit": "Edycja, zmiana nazwy i usuniecie plików lub folderów",
|
||||||
"allowNew": "Tworzenie nowych plików lub folderów",
|
"allowNew": "Tworzenie nowych plików lub folderów",
|
||||||
"allowPublish": "Tworzenie nowych wpisów i stron",
|
"allowPublish": "Tworzenie nowych wpisów i stron",
|
||||||
"allowSignup": "Allow users to signup",
|
"allowSignup": "Zezwól na rejestrację użytkowników",
|
||||||
"avoidChanges": "(pozostaw puste aby nie zosatało zmienione)",
|
"avoidChanges": "(pozostaw puste aby nie zosatało zmienione)",
|
||||||
"branding": "Branding",
|
"branding": "Branding",
|
||||||
"brandingDirectoryPath": "Branding directory path",
|
"brandingDirectoryPath": "Folder brandingowy",
|
||||||
"brandingHelp": "You can customize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
"brandingHelp": "Możesz dostosować wygląd i doznania użytkownika swojej instancji File Browser poprzez zmianę jej nazwy, zmianę logo, dodanie własnych stylów, a nawet wyłączyć linki zewnętrzne do GitHuba.\nW celu pozyskania większej ilości informacji nt. osobistego brandingu, zapoznaj się z {0}.",
|
||||||
"changePassword": "Zmień Hasło",
|
"changePassword": "Zmień Hasło",
|
||||||
"commandRunner": "Command runner",
|
"commandRunner": "Narzędzie do wykonywania poleceń",
|
||||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
"commandRunnerHelp": "Tu możesz ustawić komendy, które będą wykonywane przy danych zdarzeniach. Musisz wpisywać po jednej na linjkę. Zmienne środowiskowe {0} i {1} będą dostępne, gdzie {0} jest względne wobec {1}. Więcej informacji o tej funkcji i dostępnych zmiennych środowiskowych znajdziesz tutaj: {2}.",
|
||||||
"commandsUpdated": "Polecenie zaktualizowane!",
|
"commandsUpdated": "Polecenie zaktualizowane!",
|
||||||
"createUserDir": "Auto create user home dir while adding new user",
|
"createUserDir": "Automatycznie utwórz katalog domowy użytkownika podczas dodania nowego użytkownika",
|
||||||
"customStylesheet": "Własny Stylesheet",
|
"customStylesheet": "Własny arkusz stylów",
|
||||||
"defaultUserDescription": "This are the default settings for new users.",
|
"defaultUserDescription": "Oto domyślne ustawienia dla nowych użytkowników.",
|
||||||
"disableExternalLinks": "Disable external links (except documentation)",
|
"disableExternalLinks": "Wyłącz linki zewnętrzne (z wyjątkiem dokumentacji)",
|
||||||
"documentation": "documentation",
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
|
"documentation": "dokumentacja",
|
||||||
"examples": "Przykłady",
|
"examples": "Przykłady",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "Wykonaj w powłoce",
|
||||||
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.",
|
"executeOnShellDescription": "Domyślnie File Browser wykonuje polecenia wywołując ich pliki binarne bezpośrednio. Jesli preferujesz wykonywanie ich w powłoce (jak np. Bash czy PowerShell), możesz zdefiniować to tutaj wraz z wymaganymi flagami i argumentami. Jeśli to ustawienie jest aktywne, polecenie które wykonarz zostanie dodane jako argument. Stosuje się to zarówno do poleceń użytkownika jak i zaczepów zdarzeń.",
|
||||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
"globalRules": "To jest globalne zestawienie reguł zezwalających i zabraniających. Stosują się one do każdego użytkownika. Możesz zdefiniować indywidualne zasady w ustawieniach każdego użytkownika, by zignorować te reguły.",
|
||||||
"globalSettings": "Ustawienia Globalne",
|
"globalSettings": "Ustawienia Globalne",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "Ukryj ukryte pliki",
|
||||||
"insertPath": "Insert the path",
|
"insertPath": "Wstaw ścieżkę",
|
||||||
"insertRegex": "Insert regex expression",
|
"insertRegex": "Wstaw wyrażenie regularne",
|
||||||
"instanceName": "Instance name",
|
"instanceName": "Nazwa instancji",
|
||||||
"language": "Język",
|
"language": "Język",
|
||||||
"lockPassword": "Zablokuj użytkownikowi możliwość zmiany hasła",
|
"lockPassword": "Zablokuj użytkownikowi możliwość zmiany hasła",
|
||||||
"newPassword": "Twoje nowe hasło",
|
"newPassword": "Twoje nowe hasło",
|
||||||
@@ -192,38 +197,38 @@
|
|||||||
"newUser": "Nowy Użytkownik",
|
"newUser": "Nowy Użytkownik",
|
||||||
"password": "Hasło",
|
"password": "Hasło",
|
||||||
"passwordUpdated": "Hasło zostało zapisane!",
|
"passwordUpdated": "Hasło zostało zapisane!",
|
||||||
"path": "",
|
"path": "Ścieżka",
|
||||||
"perm": {
|
"perm": {
|
||||||
"create": "Create files and directories",
|
"create": "Tworzenie plików i katalogów",
|
||||||
"delete": "Delete files and directories",
|
"delete": "Usuwanie plików i katalogów",
|
||||||
"download": "Download",
|
"download": "Pobieranie",
|
||||||
"execute": "Execute commands",
|
"execute": "Wykonywanie poleceń",
|
||||||
"modify": "Edit files",
|
"modify": "Edycja plików",
|
||||||
"rename": "Rename or move files and directories",
|
"rename": "Zmiana nazw lub przenoszenie plików i katalogów",
|
||||||
"share": "Share files"
|
"share": "Udostępnianie plików"
|
||||||
},
|
},
|
||||||
"permissions": "Uprawnienia",
|
"permissions": "Uprawnienia",
|
||||||
"permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n",
|
"permissionsHelp": "Możesz uczynić użytkownika administratorem, lub wybrać uprawnienia indywidualnie. Jeśli zaznaczysz opcję \"Administrator\", wszystkie pozostałe opcje zostaną automatycznie zaznaczone. Zarządzanie użytkownikami pozostaje przywilejem administratora.\n",
|
||||||
"profileSettings": "Twój profil",
|
"profileSettings": "Twój profil",
|
||||||
"ruleExample1": "prevents the access to any dot file (such as .git, .gitignore) in every folder.\n",
|
"ruleExample1": "uniemożliwia dostęp do któregokolwiek z ukrytych plików (takich jak .git, .gitignore) w każdym folderze.\n",
|
||||||
"ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.",
|
"ruleExample2": "blokuje dostęp do pliku Caddyfile w głównym katalogu zakresu.",
|
||||||
"rules": "Uprawnienia",
|
"rules": "Uprawnienia",
|
||||||
"rulesHelp": "Here you can define a set of allow and disallow rules for this specific user. The blocked files won't show up in the listings and they wont be accessible to the user. We support regex and paths relative to the users scope.\n",
|
"rulesHelp": "Tu możesz zdefiniować zestawienie reguł zezwalających i zabraniających dla tego konkretnego użytkownika. Zablokowane pliki nie będą widoczne na listach i nie będą dostępne dla użytkownika. Wspierane są wyrażenia regularne i ścieżki względne wobec zakresu użytkownika.\n",
|
||||||
"scope": "Scope",
|
"scope": "Zakres",
|
||||||
"settingsUpdated": "Uprawnienia Zapisane!",
|
"settingsUpdated": "Uprawnienia Zapisane!",
|
||||||
"shareDuration": "",
|
"shareDuration": "Okres udostępniania",
|
||||||
"shareManagement": "",
|
"shareManagement": "Zarządzanie udostępnianiem",
|
||||||
"singleClick": "",
|
"singleClick": "Pojedyncze kliknięcie",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "",
|
"dark": "ciemny",
|
||||||
"light": "",
|
"light": "jasny",
|
||||||
"title": ""
|
"title": "Motywy"
|
||||||
},
|
},
|
||||||
"user": "Użytkownik",
|
"user": "Użytkownik",
|
||||||
"userCommands": "Polecenia",
|
"userCommands": "Polecenia",
|
||||||
"userCommandsHelp": "A space separated list with the available commands for this user. Example:\n",
|
"userCommandsHelp": "Lista oddzielonych spacjami poleceń dostępnych dla tego użytkownika. Przykład:\n",
|
||||||
"userCreated": "Użytkownik zapisany!",
|
"userCreated": "Użytkownik zapisany!",
|
||||||
"userDefaults": "User default settings",
|
"userDefaults": "Domyślne ustawienia użytkownika",
|
||||||
"userDeleted": "Użytkownik usunięty!",
|
"userDeleted": "Użytkownik usunięty!",
|
||||||
"userManagement": "Zarządzanie użytkownikami",
|
"userManagement": "Zarządzanie użytkownikami",
|
||||||
"userUpdated": "Użytkownik zapisany!",
|
"userUpdated": "Użytkownik zapisany!",
|
||||||
@@ -240,7 +245,7 @@
|
|||||||
"newFolder": "Nowy folder",
|
"newFolder": "Nowy folder",
|
||||||
"preview": "Podgląd",
|
"preview": "Podgląd",
|
||||||
"settings": "Ustawienia",
|
"settings": "Ustawienia",
|
||||||
"signup": "Signup",
|
"signup": "Rejestracja",
|
||||||
"siteSettings": "Ustawienia Strony"
|
"siteSettings": "Ustawienia Strony"
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
|
|||||||
@@ -6,43 +6,48 @@
|
|||||||
"copyFile": "Copiar arquivo",
|
"copyFile": "Copiar arquivo",
|
||||||
"copyToClipboard": "Copiar",
|
"copyToClipboard": "Copiar",
|
||||||
"create": "Criar",
|
"create": "Criar",
|
||||||
"delete": "Deletar",
|
"delete": "Apagar",
|
||||||
"download": "Baixar",
|
"download": "Baixar",
|
||||||
"hideDotfiles": "",
|
"file": "Arquivo",
|
||||||
|
"folder": "Pasta",
|
||||||
|
"hideDotfiles": "Ocultar dotfiles",
|
||||||
"info": "Informações",
|
"info": "Informações",
|
||||||
"more": "Mais",
|
"more": "Mais",
|
||||||
"move": "Mover",
|
"move": "Mover",
|
||||||
"moveFile": "Mover arquivo",
|
"moveFile": "Mover arquivo",
|
||||||
"new": "Novo",
|
"new": "Novo",
|
||||||
"next": "Próximo",
|
"next": "Próximo",
|
||||||
"ok": "Ok",
|
"ok": "OK",
|
||||||
"permalink": "Obter link permanente",
|
"permalink": "Obter link permanente",
|
||||||
"previous": "Anterior",
|
"previous": "Anterior",
|
||||||
"publish": "Publicar",
|
"publish": "Publicar",
|
||||||
"rename": "Renomear",
|
"rename": "Renomear",
|
||||||
"replace": "Substituir",
|
"replace": "Substituir",
|
||||||
"reportIssue": "Reportar erro",
|
"reportIssue": "Relatar erro",
|
||||||
"save": "Salvar",
|
"save": "Salvar",
|
||||||
"schedule": "Agendar",
|
"schedule": "Agendar",
|
||||||
"search": "Pesquisar",
|
"search": "Pesquisar",
|
||||||
"select": "Selecionar",
|
"select": "Selecionar",
|
||||||
"selectMultiple": "Selecionar múltiplos",
|
"selectMultiple": "Selecionar múltiplos",
|
||||||
"share": "Compartilhar",
|
"share": "Compartilhar",
|
||||||
"shell": "Toggle shell",
|
"shell": "Alternar console",
|
||||||
|
"submit": "Enviar",
|
||||||
"switchView": "Alterar modo de visão",
|
"switchView": "Alterar modo de visão",
|
||||||
"toggleSidebar": "Alternar barra lateral",
|
"toggleSidebar": "Alternar barra lateral",
|
||||||
"update": "Atualizar",
|
"update": "Atualizar",
|
||||||
"upload": "Enviar"
|
"upload": "Enviar",
|
||||||
|
"openFile": "Abrir"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Baixar arquivo",
|
"downloadFile": "Baixar arquivo",
|
||||||
"downloadFolder": "Baixar pasta",
|
"downloadFolder": "Baixar pasta",
|
||||||
"downloadSelected": ""
|
"downloadSelected": "Baixar selecionado"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "You don't have permissions to access this.",
|
"forbidden": "Você não tem permissões para acessar isto.",
|
||||||
"internal": "Ops! Algum erro ocorreu.",
|
"internal": "Ops! Algum erro ocorreu.",
|
||||||
"notFound": "Ops! Nada foi encontrado."
|
"notFound": "Ops! Nada foi encontrado.",
|
||||||
|
"connection": "O servidor não pode ser alcançado."
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"body": "Corpo",
|
"body": "Corpo",
|
||||||
@@ -60,7 +65,8 @@
|
|||||||
"size": "Tamanho",
|
"size": "Tamanho",
|
||||||
"sortByLastModified": "Ordenar pela última modificação",
|
"sortByLastModified": "Ordenar pela última modificação",
|
||||||
"sortByName": "Ordenar pelo nome",
|
"sortByName": "Ordenar pelo nome",
|
||||||
"sortBySize": "Ordenar pelo tamanho"
|
"sortBySize": "Ordenar pelo tamanho",
|
||||||
|
"noPreview": "Pré-visualização não disponível para este arquivo."
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "selecionar pasta ou arquivo",
|
"click": "selecionar pasta ou arquivo",
|
||||||
@@ -69,14 +75,16 @@
|
|||||||
"f": "pesquisar",
|
"f": "pesquisar",
|
||||||
"s": "salvar um arquivo ou baixar a pasta que você está"
|
"s": "salvar um arquivo ou baixar a pasta que você está"
|
||||||
},
|
},
|
||||||
"del": "deletar os arquivos selecionados",
|
"del": "apagar os arquivos selecionados",
|
||||||
"doubleClick": "abrir pasta ou arquivo",
|
"doubleClick": "abrir pasta ou arquivo",
|
||||||
"esc": "limpar seleção e/ou fechar menu",
|
"esc": "limpar seleção e/ou fechar menu",
|
||||||
"f1": "está informação",
|
"f1": "esta informação",
|
||||||
"f2": "renomear arquivo",
|
"f2": "renomear arquivo",
|
||||||
"help": "Ajuda"
|
"help": "Ajuda"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,19 +103,20 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"createAnAccount": "Create an account",
|
"createAnAccount": "Criar uma conta",
|
||||||
"loginInstead": "Already have an account",
|
"loginInstead": "Já possui uma conta",
|
||||||
"password": "Senha",
|
"password": "Senha",
|
||||||
"passwordConfirm": "Password Confirmation",
|
"passwordConfirm": "Confirmação de senha",
|
||||||
"passwordsDontMatch": "Passwords don't match",
|
"passwordsDontMatch": "As senhas não coincidem",
|
||||||
"signup": "Signup",
|
"signup": "Cadastrar",
|
||||||
"submit": "Login",
|
"submit": "Login",
|
||||||
"username": "Nome do usuário",
|
"username": "Nome do usuário",
|
||||||
"usernameTaken": "Username already taken",
|
"usernameTaken": "Nome de usuário já existe",
|
||||||
"wrongCredentials": "Ops! Dados incorretos."
|
"wrongCredentials": "Ops! Dados incorretos."
|
||||||
},
|
},
|
||||||
"permanent": "Permanente",
|
"permanent": "Permanente",
|
||||||
@@ -115,13 +124,14 @@
|
|||||||
"copy": "Copiar",
|
"copy": "Copiar",
|
||||||
"copyMessage": "Escolha um lugar para copiar os arquivos:",
|
"copyMessage": "Escolha um lugar para copiar os arquivos:",
|
||||||
"currentlyNavigating": "Navegando em:",
|
"currentlyNavigating": "Navegando em:",
|
||||||
"deleteMessageMultiple": "Deseja deletar {count} arquivo(s)?",
|
"deleteMessageMultiple": "Deseja apagar {count} arquivo(s)?",
|
||||||
"deleteMessageSingle": "Deseja deletar está pasta/arquivo?",
|
"deleteMessageSingle": "Deseja apagar esta pasta/arquivo?",
|
||||||
"deleteTitle": "Deletar arquivos",
|
"deleteMessageShare": "Deseja apagar este compartilhamento ({path})?",
|
||||||
|
"deleteTitle": "Apagar arquivos",
|
||||||
"displayName": "Nome:",
|
"displayName": "Nome:",
|
||||||
"download": "Baixar arquivos",
|
"download": "Baixar arquivos",
|
||||||
"downloadMessage": "Escolha o formato do arquivo.",
|
"downloadMessage": "Escolha o formato do arquivo.",
|
||||||
"error": "Algo de ruim ocorreu",
|
"error": "Algo de errado ocorreu",
|
||||||
"fileInfo": "Informação do arquivo",
|
"fileInfo": "Informação do arquivo",
|
||||||
"filesSelected": "{count} arquivos selecionados.",
|
"filesSelected": "{count} arquivos selecionados.",
|
||||||
"lastModified": "Última modificação",
|
"lastModified": "Última modificação",
|
||||||
@@ -139,19 +149,21 @@
|
|||||||
"replace": "Substituir",
|
"replace": "Substituir",
|
||||||
"replaceMessage": "Já existe um arquivo com nome igual a um dos que está tentando enviar. Deseja substituir?\n",
|
"replaceMessage": "Já existe um arquivo com nome igual a um dos que está tentando enviar. Deseja substituir?\n",
|
||||||
"schedule": "Agendar",
|
"schedule": "Agendar",
|
||||||
"scheduleMessage": "Escolha uma data para publicar este post.",
|
"scheduleMessage": "Escolha uma data para agendar a publicação deste post.",
|
||||||
"show": "Mostrar",
|
"show": "Mostrar",
|
||||||
"size": "Tamanho",
|
"size": "Tamanho",
|
||||||
"upload": "",
|
"upload": "Enviar",
|
||||||
"uploadMessage": ""
|
"uploadFiles": "Enviando {files} arquivos...",
|
||||||
|
"uploadMessage": "Selecione uma opção para enviar.",
|
||||||
|
"optionalPassword": "Senha opcional"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "Imagens",
|
"images": "Imagens",
|
||||||
"music": "Música",
|
"music": "Músicas",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "Press enter to search...",
|
"pressToSearch": "Pressione Enter para pesquisar...",
|
||||||
"search": "Pesquise...",
|
"search": "Pesquise...",
|
||||||
"typeToSearch": "Type to search...",
|
"typeToSearch": "Digite para pesquisar...",
|
||||||
"types": "Tipos",
|
"types": "Tipos",
|
||||||
"video": "Vídeos"
|
"video": "Vídeos"
|
||||||
},
|
},
|
||||||
@@ -159,33 +171,37 @@
|
|||||||
"admin": "Admin",
|
"admin": "Admin",
|
||||||
"administrator": "Administrador",
|
"administrator": "Administrador",
|
||||||
"allowCommands": "Executar comandos",
|
"allowCommands": "Executar comandos",
|
||||||
"allowEdit": "Editar, renomear e deletar arquivos ou pastas",
|
"allowEdit": "Editar, renomear e apagar arquivos ou pastas",
|
||||||
"allowNew": "Criar novos arquivos e pastas",
|
"allowNew": "Criar novos arquivos e pastas",
|
||||||
"allowPublish": "Publicar novas páginas e conteúdos",
|
"allowPublish": "Publicar novas páginas e conteúdos",
|
||||||
"allowSignup": "Allow users to signup",
|
"allowSignup": "Permitir cadastro de usuários",
|
||||||
"avoidChanges": "(deixe em branco para manter)",
|
"avoidChanges": "(deixe em branco para manter)",
|
||||||
"branding": "Branding",
|
"branding": "Customização",
|
||||||
"brandingDirectoryPath": "Branding directory path",
|
"brandingDirectoryPath": "Diretório de customização",
|
||||||
"brandingHelp": "You can customize how your File Browser instance looks and feels by changing its name, replacing the logo, adding custom styles and even disable external links to GitHub.\nFor more information about custom branding, please check out the {0}.",
|
"brandingHelp": "Você pode mudar a aparência e experiência de sua instância do File Browser alterando seu nome, logotipo, adicionando estilos customizados e até desabilitando links externos para o GitHub.\nPara mais informações sobre customizações, confira {0}.",
|
||||||
"changePassword": "Alterar senha",
|
"changePassword": "Alterar senha",
|
||||||
"commandRunner": "Command runner",
|
"commandRunner": "Execução de comandos",
|
||||||
"commandRunnerHelp": "Here you can set commands that are executed in the named events. You must write one per line. The environment variables {0} and {1} will be available, being {0} relative to {1}. For more information about this feature and the available environment variables, please read the {2}.",
|
"commandRunnerHelp": "Aqui você pode definir comandos que serão executados nos eventos descritos. Escreva um por linha. As variáveis de ambiente {0} e {1} estão disponíveis, sendo {0} relativo a {1}. Para mais informações sobre esta função e as variáveis de ambiente disponíveis, leia a {2}.",
|
||||||
"commandsUpdated": "Comandos atualizados!",
|
"commandsUpdated": "Comandos atualizados!",
|
||||||
"createUserDir": "Auto create user home dir while adding new user",
|
"createUserDir": "Criar diretório Home para novos usuários",
|
||||||
|
"userHomeBasePath": "Caminho base para diretórios de usuários",
|
||||||
|
"userScopeGenerationPlaceholder": "O escopo será gerado automaticamente",
|
||||||
|
"createUserHomeDirectory": "Criar diretório Home de usuário",
|
||||||
"customStylesheet": "Estilos personalizados",
|
"customStylesheet": "Estilos personalizados",
|
||||||
"defaultUserDescription": "This are the default settings for new users.",
|
"defaultUserDescription": "Estas são as configurações padrão para novos usuários.",
|
||||||
"disableExternalLinks": "Disable external links (except documentation)",
|
"disableExternalLinks": "Desabilitar links externos (exceto documentação)",
|
||||||
|
"disableUsedDiskPercentage": "Desabilitar gráfico de porcentagem de disco usado",
|
||||||
"documentation": "documentação",
|
"documentation": "documentação",
|
||||||
"examples": "Exemplos",
|
"examples": "Exemplos",
|
||||||
"executeOnShell": "Execute on shell",
|
"executeOnShell": "Executar no console",
|
||||||
"executeOnShellDescription": "By default, File Browser executes the commands by calling their binaries directly. If you want to run them on a shell instead (such as Bash or PowerShell), you can define it here with the required arguments and flags. If set, the command you execute will be appended as an argument. This apply to both user commands and event hooks.",
|
"executeOnShellDescription": "Por padrão, o File Browser executa os comandos chamando os binários diretamente. Se ao invés disso desejar executá-los em um console (como Bash ou PowerShell), você pode defini-los aqui com os argumentos e flags necessários. Se definido, o comando que executar será acrescentado como um argumento. Isto se aplica a comandos de usuário e eventos hook.",
|
||||||
"globalRules": "This is a global set of allow and disallow rules. They apply to every user. You can define specific rules on each user's settings to override this ones.",
|
"globalRules": "Este é um conjunto global de regras de permissão e restrição que se aplicam a todos os usuários. Você pode definir regras específicas em cada usuário para sobrepor estas.",
|
||||||
"globalSettings": "Configurações globais",
|
"globalSettings": "Configurações globais",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "Ocultar dotfiles",
|
||||||
"insertPath": "Insert the path",
|
"insertPath": "Inserir o caminho",
|
||||||
"insertRegex": "Inserir expressão regular",
|
"insertRegex": "Inserir expressão regular",
|
||||||
"instanceName": "Instance name",
|
"instanceName": "Nome da instância",
|
||||||
"language": "Linguagem",
|
"language": "Idioma",
|
||||||
"lockPassword": "Não permitir que o usuário altere a senha",
|
"lockPassword": "Não permitir que o usuário altere a senha",
|
||||||
"newPassword": "Nova senha",
|
"newPassword": "Nova senha",
|
||||||
"newPasswordConfirm": "Confirme a nova senha",
|
"newPasswordConfirm": "Confirme a nova senha",
|
||||||
@@ -194,12 +210,12 @@
|
|||||||
"passwordUpdated": "Senha atualizada!",
|
"passwordUpdated": "Senha atualizada!",
|
||||||
"path": "",
|
"path": "",
|
||||||
"perm": {
|
"perm": {
|
||||||
"create": "Create files and directories",
|
"create": "Criar arquivos e diretórios",
|
||||||
"delete": "Delete files and directories",
|
"delete": "Apagar arquivos e diretórios",
|
||||||
"download": "Baixar",
|
"download": "Baixar",
|
||||||
"execute": "Execute commands",
|
"execute": "Executar comandos",
|
||||||
"modify": "Editar arquivos",
|
"modify": "Editar arquivos",
|
||||||
"rename": "Rename or move files and directories",
|
"rename": "Renomear ou mover arquivos e diretórios",
|
||||||
"share": "Compartilhar arquivos"
|
"share": "Compartilhar arquivos"
|
||||||
},
|
},
|
||||||
"permissions": "Permissões",
|
"permissions": "Permissões",
|
||||||
@@ -208,24 +224,26 @@
|
|||||||
"ruleExample1": "previne o acesso a qualquer \"dotfile\" (como .git, .gitignore) em qualquer pasta\n",
|
"ruleExample1": "previne o acesso a qualquer \"dotfile\" (como .git, .gitignore) em qualquer pasta\n",
|
||||||
"ruleExample2": "bloqueia o acesso ao arquivo chamado Caddyfile.",
|
"ruleExample2": "bloqueia o acesso ao arquivo chamado Caddyfile.",
|
||||||
"rules": "Regras",
|
"rules": "Regras",
|
||||||
"rulesHelp": "Aqui pode definir um conjunto de regras para permitir ou bloquear o acesso do utilizador a determinados arquivos ou pastas. Os arquivos bloqueados não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos dos arquivos devem ser relativos à base do usuário.\n",
|
"rulesHelp": "Aqui você pode definir um conjunto de regras para permitir ou bloquear o acesso do usuário a determinados arquivos ou pastas. Os arquivos bloqueados não irão aparecer durante a navegação. Suportamos expressões regulares e os caminhos dos arquivos devem ser relativos à base do usuário.\n",
|
||||||
"scope": "Base",
|
"scope": "Escopo",
|
||||||
|
"setDateFormat": "Definir formato exato de data",
|
||||||
"settingsUpdated": "Configurações atualizadas!",
|
"settingsUpdated": "Configurações atualizadas!",
|
||||||
"shareDuration": "",
|
"shareDuration": "Duração do compartilhamento",
|
||||||
"shareManagement": "",
|
"shareManagement": "Gerenciamento do compartilhamento",
|
||||||
"singleClick": "",
|
"shareDeleted": "Compartilhamento apagado!",
|
||||||
|
"singleClick": "Usar clique único para abrir arquivos e diretórios",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "",
|
"dark": "Escuro",
|
||||||
"light": "",
|
"light": "Claro",
|
||||||
"title": ""
|
"title": "Tema"
|
||||||
},
|
},
|
||||||
"user": "Usuário",
|
"user": "Usuário",
|
||||||
"userCommands": "Comandos",
|
"userCommands": "Comandos",
|
||||||
"userCommandsHelp": "Uma lista, separada com espaços, de comandos disponíveis para este usuário. Exemplo:",
|
"userCommandsHelp": "Uma lista, separada com espaços, de comandos disponíveis para este usuário. Exemplo:",
|
||||||
"userCreated": "Usuário criado!",
|
"userCreated": "Usuário criado!",
|
||||||
"userDefaults": "User default settings",
|
"userDefaults": "Configurações padrão de usuário",
|
||||||
"userDeleted": "Usuário eliminado!",
|
"userDeleted": "Usuário apagado!",
|
||||||
"userManagement": "Gestão de usuários",
|
"userManagement": "Gerenciamento de usuários",
|
||||||
"userUpdated": "Usuário atualizado!",
|
"userUpdated": "Usuário atualizado!",
|
||||||
"username": "Nome do usuário",
|
"username": "Nome do usuário",
|
||||||
"users": "Usuários"
|
"users": "Usuários"
|
||||||
@@ -240,7 +258,7 @@
|
|||||||
"newFolder": "Nova pasta",
|
"newFolder": "Nova pasta",
|
||||||
"preview": "Pré-visualizar",
|
"preview": "Pré-visualizar",
|
||||||
"settings": "Configurações",
|
"settings": "Configurações",
|
||||||
"signup": "Signup",
|
"signup": "Cadastrar",
|
||||||
"siteSettings": "Configurações do site"
|
"siteSettings": "Configurações do site"
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
|
|||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "Ajuda"
|
"help": "Ajuda"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "Árabe",
|
"ar": "Árabe",
|
||||||
"de": "Alemão",
|
"de": "Alemão",
|
||||||
"en": "Inglês",
|
"en": "Inglês",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "Chinês simplificado",
|
"zhCN": "Chinês simplificado",
|
||||||
"zhTW": "Chinês tradicional"
|
"zhTW": "Chinês tradicional"
|
||||||
},
|
},
|
||||||
@@ -175,6 +178,7 @@
|
|||||||
"customStylesheet": "Folha de estilos personalizada",
|
"customStylesheet": "Folha de estilos personalizada",
|
||||||
"defaultUserDescription": "Estas são as configurações padrão para novos utilizadores.",
|
"defaultUserDescription": "Estas são as configurações padrão para novos utilizadores.",
|
||||||
"disableExternalLinks": "Desativar links externos (exceto documentação)",
|
"disableExternalLinks": "Desativar links externos (exceto documentação)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "documentação",
|
"documentation": "documentação",
|
||||||
"examples": "Exemplos",
|
"examples": "Exemplos",
|
||||||
"executeOnShell": "Executar na shell",
|
"executeOnShell": "Executar na shell",
|
||||||
|
|||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "Ajutor"
|
"help": "Ajutor"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -175,6 +178,7 @@
|
|||||||
"customStylesheet": "CSS personalizat",
|
"customStylesheet": "CSS personalizat",
|
||||||
"defaultUserDescription": "Acestea sunt setările implicite pentru noii utilizatori.",
|
"defaultUserDescription": "Acestea sunt setările implicite pentru noii utilizatori.",
|
||||||
"disableExternalLinks": "Dezactivează linkurile externe (exceptând documentația)",
|
"disableExternalLinks": "Dezactivează linkurile externe (exceptând documentația)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "documentație",
|
"documentation": "documentație",
|
||||||
"examples": "Exemple",
|
"examples": "Exemple",
|
||||||
"executeOnShell": "Execută in linia de comandă",
|
"executeOnShell": "Execută in linia de comandă",
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
"create": "Создать",
|
"create": "Создать",
|
||||||
"delete": "Удалить",
|
"delete": "Удалить",
|
||||||
"download": "Скачать",
|
"download": "Скачать",
|
||||||
|
"file": "Файл",
|
||||||
|
"folder": "Папка",
|
||||||
"hideDotfiles": "Скрыть точечные файлы",
|
"hideDotfiles": "Скрыть точечные файлы",
|
||||||
"info": "Инфо",
|
"info": "Инфо",
|
||||||
"more": "Еще",
|
"more": "Еще",
|
||||||
@@ -29,10 +31,12 @@
|
|||||||
"selectMultiple": "Мультивыбор",
|
"selectMultiple": "Мультивыбор",
|
||||||
"share": "Поделиться",
|
"share": "Поделиться",
|
||||||
"shell": "Командная строка",
|
"shell": "Командная строка",
|
||||||
|
"submit": "Отправить",
|
||||||
"switchView": "Вид",
|
"switchView": "Вид",
|
||||||
"toggleSidebar": "Боковая панель",
|
"toggleSidebar": "Боковая панель",
|
||||||
"update": "Обновить",
|
"update": "Обновить",
|
||||||
"upload": "Загрузить"
|
"upload": "Загрузить",
|
||||||
|
"openFile": "Открыть файл"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "Скачать файл",
|
"downloadFile": "Скачать файл",
|
||||||
@@ -42,7 +46,8 @@
|
|||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "У вас нет прав доступа к этому.",
|
"forbidden": "У вас нет прав доступа к этому.",
|
||||||
"internal": "Что-то пошло не так.",
|
"internal": "Что-то пошло не так.",
|
||||||
"notFound": "Неправильная ссылка."
|
"notFound": "Неправильная ссылка.",
|
||||||
|
"connection": "Нет подключения к серверу."
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"body": "Тело",
|
"body": "Тело",
|
||||||
@@ -60,7 +65,8 @@
|
|||||||
"size": "Размер",
|
"size": "Размер",
|
||||||
"sortByLastModified": "Сортировка по дате изменения",
|
"sortByLastModified": "Сортировка по дате изменения",
|
||||||
"sortByName": "Сортировка по имени",
|
"sortByName": "Сортировка по имени",
|
||||||
"sortBySize": "Сортировка по размеру"
|
"sortBySize": "Сортировка по размеру",
|
||||||
|
"noPreview": "Предварительный просмотр для этого файла недоступен."
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "выбрать файл или каталог",
|
"click": "выбрать файл или каталог",
|
||||||
@@ -77,23 +83,27 @@
|
|||||||
"help": "Помощь"
|
"help": "Помощь"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
"es": "Español",
|
"es": "Español",
|
||||||
"fr": "Français",
|
"fr": "Français",
|
||||||
"is": "",
|
"is": "Icelandic",
|
||||||
"it": "Italiano",
|
"it": "Italiano",
|
||||||
"ja": "日本語",
|
"ja": "日本語",
|
||||||
"ko": "한국어",
|
"ko": "한국어",
|
||||||
"nlBE": "",
|
"nlBE": "Dutch (Belgium)",
|
||||||
"pl": "Polski",
|
"pl": "Polski",
|
||||||
"pt": "Português",
|
"pt": "Português",
|
||||||
"ptBR": "Português (Brasil)",
|
"ptBR": "Português (Brasil)",
|
||||||
"ro": "",
|
"ro": "Romanian",
|
||||||
"ru": "Русский",
|
"ru": "Русский",
|
||||||
"svSE": "",
|
"sk": "Slovenčina",
|
||||||
|
"svSE": "Swedish (Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -116,10 +126,11 @@
|
|||||||
"currentlyNavigating": "Текущий каталог:",
|
"currentlyNavigating": "Текущий каталог:",
|
||||||
"deleteMessageMultiple": "Удалить эти файлы ({count})?",
|
"deleteMessageMultiple": "Удалить эти файлы ({count})?",
|
||||||
"deleteMessageSingle": "Удалить этот файл/каталог?",
|
"deleteMessageSingle": "Удалить этот файл/каталог?",
|
||||||
|
"deleteMessageShare": "Удалить этот общий файл/каталог ({path})?",
|
||||||
"deleteTitle": "Удалить файлы",
|
"deleteTitle": "Удалить файлы",
|
||||||
"displayName": "Отображаемое имя:",
|
"displayName": "Отображаемое имя:",
|
||||||
"download": "Скачать файлы",
|
"download": "Скачать файлы",
|
||||||
"downloadMessage": "Выберите формат а котором хотите скачать.",
|
"downloadMessage": "Выберите формат в котором хотите скачать.",
|
||||||
"error": "Ошибка",
|
"error": "Ошибка",
|
||||||
"fileInfo": "Информация о файле",
|
"fileInfo": "Информация о файле",
|
||||||
"filesSelected": "Файлов выбрано: {count}.",
|
"filesSelected": "Файлов выбрано: {count}.",
|
||||||
@@ -142,7 +153,8 @@
|
|||||||
"show": "Показать",
|
"show": "Показать",
|
||||||
"size": "Размер",
|
"size": "Размер",
|
||||||
"upload": "Загрузить",
|
"upload": "Загрузить",
|
||||||
"uploadMessage": "Выберите вариант для загрузки."
|
"uploadMessage": "Выберите вариант для загрузки.",
|
||||||
|
"optionalPassword": "Необязательный пароль"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"images": "Изображения",
|
"images": "Изображения",
|
||||||
@@ -174,6 +186,7 @@
|
|||||||
"customStylesheet": "Свой стиль",
|
"customStylesheet": "Свой стиль",
|
||||||
"defaultUserDescription": "Это настройки по умолчанию для новых пользователей.",
|
"defaultUserDescription": "Это настройки по умолчанию для новых пользователей.",
|
||||||
"disableExternalLinks": "Отключить внешние ссылки (кроме документации)",
|
"disableExternalLinks": "Отключить внешние ссылки (кроме документации)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "документация",
|
"documentation": "документация",
|
||||||
"examples": "Примеры",
|
"examples": "Примеры",
|
||||||
"executeOnShell": "Выполнить в командной строке",
|
"executeOnShell": "Выполнить в командной строке",
|
||||||
@@ -183,7 +196,7 @@
|
|||||||
"hideDotfiles": "Скрыть точечные файлы",
|
"hideDotfiles": "Скрыть точечные файлы",
|
||||||
"insertPath": "Вставьте путь",
|
"insertPath": "Вставьте путь",
|
||||||
"insertRegex": "Вставить регулярное выражение",
|
"insertRegex": "Вставить регулярное выражение",
|
||||||
"instanceName": "Instance name",
|
"instanceName": "Текущее название программы",
|
||||||
"language": "Язык",
|
"language": "Язык",
|
||||||
"lockPassword": "Запретить пользователю менять пароль",
|
"lockPassword": "Запретить пользователю менять пароль",
|
||||||
"newPassword": "Новый пароль",
|
"newPassword": "Новый пароль",
|
||||||
@@ -209,9 +222,11 @@
|
|||||||
"rules": "Права",
|
"rules": "Права",
|
||||||
"rulesHelp": "Здесь вы можете определить набор разрешающих и запрещающих правил для этого конкретного пользователь. Блокированные файлы не будут отображаться в списках, и не будут доступны для пользователя. Есть поддержка регулярных выражений и относительных путей.\n",
|
"rulesHelp": "Здесь вы можете определить набор разрешающих и запрещающих правил для этого конкретного пользователь. Блокированные файлы не будут отображаться в списках, и не будут доступны для пользователя. Есть поддержка регулярных выражений и относительных путей.\n",
|
||||||
"scope": "Корень",
|
"scope": "Корень",
|
||||||
|
"setDateFormat": "Установить точный формат даты",
|
||||||
"settingsUpdated": "Настройки применены!",
|
"settingsUpdated": "Настройки применены!",
|
||||||
"shareDuration": "Время расшаренной ссылки",
|
"shareDuration": "Время расшаренной ссылки",
|
||||||
"shareManagement": "Управление расшаренными ссылками",
|
"shareManagement": "Управление расшаренными ссылками",
|
||||||
|
"shareDeleted": "Расшаренная ссылка удалена!",
|
||||||
"singleClick": "Открытие файлов и каталогов одним кликом",
|
"singleClick": "Открытие файлов и каталогов одним кликом",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "Темная",
|
"dark": "Темная",
|
||||||
|
|||||||
@@ -83,6 +83,8 @@
|
|||||||
"help": "Pomoc"
|
"help": "Pomoc"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -101,6 +103,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "Swedish (Sweden)",
|
"svSE": "Swedish (Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -183,20 +186,21 @@
|
|||||||
"customStylesheet": "Vlastný Stylesheet",
|
"customStylesheet": "Vlastný Stylesheet",
|
||||||
"defaultUserDescription": "Toto sú predvolané nastavenia nového používateľa.",
|
"defaultUserDescription": "Toto sú predvolané nastavenia nového používateľa.",
|
||||||
"disableExternalLinks": "Vypnúť externé odkazy (okrem dokumentácie)",
|
"disableExternalLinks": "Vypnúť externé odkazy (okrem dokumentácie)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "dokumentácia",
|
"documentation": "dokumentácia",
|
||||||
"examples": "Príklady",
|
"examples": "Príklady",
|
||||||
"executeOnShell": "Vykonať cez shell",
|
"executeOnShell": "Vykonať cez shell",
|
||||||
"executeOnShellDescription": "Predvolene File Browser vykonáva príkazy volaním priamo ich binárok. Ak ich chcete spúšťať cez shell (napr. Bash alebo PowerShell), môžete ho napísať sem a pridať potrebné argumenty a flagy. Ak je nastavený, tak sa príkazy budú spúšťať pridaním na koniec ako argument. Toto sa týka používateľských príkazov aj udalostí.",
|
"executeOnShellDescription": "Predvolene File Browser vykonáva príkazy volaním priamo ich binárok. Ak ich chcete spúšťať cez shell (napr. Bash alebo PowerShell), môžete ho napísať sem a pridať potrebné argumenty a flagy. Ak je nastavený, tak sa príkazy budú spúšťať pridaním na koniec ako argument. Toto sa týka používateľských príkazov aj udalostí.",
|
||||||
"globalRules": "Toto je globálne nastavenie pravidiel. Aplikujú sa na všetkých používateľov. Môžete definovať špecifické pravidlá pre každého používateľa a prekryť tak pravidlá nastavené tu.",
|
"globalRules": "Toto je globálne nastavenie pravidiel. Aplikujú sa na všetkých používateľov. Môžete definovať špecifické pravidlá pre každého používateľa a prekryť tak pravidlá nastavené tu.",
|
||||||
"globalSettings": "Globálne nastavenia",
|
"globalSettings": "Globálne nastavenia",
|
||||||
"hideDotfiles": "Skryť súroby začínajúce bodkou",
|
"hideDotfiles": "Skryť súbory začínajúce bodkou",
|
||||||
"insertPath": "Vložte cestu",
|
"insertPath": "Vložte cestu",
|
||||||
"insertRegex": "Vložte regex výraz",
|
"insertRegex": "Vložte regex výraz",
|
||||||
"instanceName": "Názov inštalácie",
|
"instanceName": "Názov inštalácie",
|
||||||
"language": "Jazyk",
|
"language": "Jazyk",
|
||||||
"lockPassword": "Zabrániť používateľovi meniť heslo",
|
"lockPassword": "Zabrániť používateľovi meniť heslo",
|
||||||
"newPassword": "Nové heslo",
|
"newPassword": "Nové heslo",
|
||||||
"newPasswordConfirm": "Potvrenie nového hesla",
|
"newPasswordConfirm": "Potvrdenie nového hesla",
|
||||||
"newUser": "Nový používateľ",
|
"newUser": "Nový používateľ",
|
||||||
"password": "Heslo",
|
"password": "Heslo",
|
||||||
"passwordUpdated": "Heslo zmenené!",
|
"passwordUpdated": "Heslo zmenené!",
|
||||||
@@ -211,12 +215,12 @@
|
|||||||
"share": "Zdieľať súbory"
|
"share": "Zdieľať súbory"
|
||||||
},
|
},
|
||||||
"permissions": "Práva",
|
"permissions": "Práva",
|
||||||
"permissionsHelp": "Môžete nastaviť používateľa, aby bol administrátorom alebo vybrať práva jednotlivo. Ak zvolíte \"Administrator\", všetky ďalši budú automaticky zaškrtnuté. Manažment používateľov ostáva v správe administrátora.\n",
|
"permissionsHelp": "Môžete nastaviť používateľa, aby bol administrátorom alebo vybrať práva jednotlivo. Ak zvolíte \"Administrator\", všetky ďalšie budú automaticky zaškrtnuté. Manažment používateľov ostáva v správe administrátora.\n",
|
||||||
"profileSettings": "Nastavenia profilu",
|
"profileSettings": "Nastavenia profilu",
|
||||||
"ruleExample1": "blokuje prístup ku všetkým súborom začínajúcim bodkou (napríklad .git, .gitignore) v každom priečinku.\n",
|
"ruleExample1": "blokuje prístup ku všetkým súborom začínajúcim bodkou (napríklad .git, .gitignore) v každom priečinku.\n",
|
||||||
"ruleExample2": "blokuje prístup k súborom s názvom Caddyfile v koreňovom priečinku.",
|
"ruleExample2": "blokuje prístup k súborom s názvom Caddyfile v koreňovom priečinku.",
|
||||||
"rules": "Pravidlá",
|
"rules": "Pravidlá",
|
||||||
"rulesHelp": "Tu môžete definovať pravidilá pre konkrétneho používateľa. Blokované súbory používateľ nebude vidieť a ani nebude k nim mať prístup. Podporujeme regex a cesty relatívne k používateľovi.\n",
|
"rulesHelp": "Tu môžete definovať pravidlá pre konkrétneho používateľa. Blokované súbory používateľ nebude vidieť a ani nebude k nim mať prístup. Podporujeme regex a cesty relatívne k používateľovi.\n",
|
||||||
"scope": "Scope",
|
"scope": "Scope",
|
||||||
"settingsUpdated": "Nastavenia upravené!",
|
"settingsUpdated": "Nastavenia upravené!",
|
||||||
"shareDuration": "Trvanie zdieľania",
|
"shareDuration": "Trvanie zdieľania",
|
||||||
@@ -232,7 +236,7 @@
|
|||||||
"userCommands": "Príkazy",
|
"userCommands": "Príkazy",
|
||||||
"userCommandsHelp": "Zoznam povolených príkazov oddelených medzerou pre tohoto používateľa. Napríklad:\n",
|
"userCommandsHelp": "Zoznam povolených príkazov oddelených medzerou pre tohoto používateľa. Napríklad:\n",
|
||||||
"userCreated": "Používateľ vytvorený!",
|
"userCreated": "Používateľ vytvorený!",
|
||||||
"userDefaults": "Predovolené nastavenia používateľa",
|
"userDefaults": "Predvolené nastavenia používateľa",
|
||||||
"userDeleted": "Používateľ odstránený!",
|
"userDeleted": "Používateľ odstránený!",
|
||||||
"userManagement": "Správa používateľov",
|
"userManagement": "Správa používateľov",
|
||||||
"userUpdated": "Používateľ upravený!",
|
"userUpdated": "Používateľ upravený!",
|
||||||
|
|||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "Hjälp"
|
"help": "Hjälp"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "",
|
"svSE": "",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -175,6 +178,7 @@
|
|||||||
"customStylesheet": "Anpassad formatmall",
|
"customStylesheet": "Anpassad formatmall",
|
||||||
"defaultUserDescription": "Detta är standard inställningar för användare.",
|
"defaultUserDescription": "Detta är standard inställningar för användare.",
|
||||||
"disableExternalLinks": "Inaktivera externa länkar (förutom dokumentation)",
|
"disableExternalLinks": "Inaktivera externa länkar (förutom dokumentation)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "dokumentation",
|
"documentation": "dokumentation",
|
||||||
"examples": "Exempel",
|
"examples": "Exempel",
|
||||||
"executeOnShell": "Exekvera på skal",
|
"executeOnShell": "Exekvera på skal",
|
||||||
|
|||||||
@@ -81,6 +81,8 @@
|
|||||||
"help": "Yardım"
|
"help": "Yardım"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -99,6 +101,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "Swedish (Sweden)",
|
"svSE": "Swedish (Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -181,6 +184,7 @@
|
|||||||
"customStylesheet": "Özel CSS",
|
"customStylesheet": "Özel CSS",
|
||||||
"defaultUserDescription": "Bu, yeni kullanıcılar için varsayılan ayarlardır.",
|
"defaultUserDescription": "Bu, yeni kullanıcılar için varsayılan ayarlardır.",
|
||||||
"disableExternalLinks": "Harici bağlantıları devre dışı bırakın (dökümantasyon hariç)",
|
"disableExternalLinks": "Harici bağlantıları devre dışı bırakın (dökümantasyon hariç)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "dökümantasyon",
|
"documentation": "dökümantasyon",
|
||||||
"examples": "Örnekler",
|
"examples": "Örnekler",
|
||||||
"executeOnShell": "Komut satırında çalıştır",
|
"executeOnShell": "Komut satırında çalıştır",
|
||||||
|
|||||||
270
frontend/src/i18n/ua.json
Normal file
270
frontend/src/i18n/ua.json
Normal file
@@ -0,0 +1,270 @@
|
|||||||
|
{
|
||||||
|
"buttons": {
|
||||||
|
"cancel": "Відмінити",
|
||||||
|
"close": "Закрити",
|
||||||
|
"copy": "Копіювати",
|
||||||
|
"copyFile": "Копіювати файл",
|
||||||
|
"copyToClipboard": "Копіювати в буфер обміну",
|
||||||
|
"create": "Створити",
|
||||||
|
"delete": "Видалити",
|
||||||
|
"download": "Завантажити",
|
||||||
|
"file": "Файл",
|
||||||
|
"folder": "Папка",
|
||||||
|
"hideDotfiles": "Приховати точкові файли",
|
||||||
|
"info": "Інфо",
|
||||||
|
"more": "Більше",
|
||||||
|
"move": "Перемістити",
|
||||||
|
"moveFile": "Перемістити файл",
|
||||||
|
"new": "Новий",
|
||||||
|
"next": "Далі",
|
||||||
|
"ok": "ОК",
|
||||||
|
"permalink": "Отримати постійне посилання",
|
||||||
|
"previous": "Назад",
|
||||||
|
"publish": "Опублікувати",
|
||||||
|
"rename": "Перейменувати",
|
||||||
|
"replace": "Замінити",
|
||||||
|
"reportIssue": "Повідомити про помилку",
|
||||||
|
"save": "Зберегти",
|
||||||
|
"schedule": "Планування",
|
||||||
|
"search": "Пошук",
|
||||||
|
"select": "Вибрати",
|
||||||
|
"selectMultiple": "Мультивибір",
|
||||||
|
"share": "Поділитися",
|
||||||
|
"shell": "Командний рядок",
|
||||||
|
"submit": "Відправити",
|
||||||
|
"switchView": "Вид",
|
||||||
|
"toggleSidebar": "Бічна панель",
|
||||||
|
"update": "Оновити",
|
||||||
|
"upload": "Завантажити",
|
||||||
|
"openFile": "Відкрити файл"
|
||||||
|
},
|
||||||
|
"download": {
|
||||||
|
"downloadFile": "Завантажити файл",
|
||||||
|
"downloadFolder": "Завантажити папку",
|
||||||
|
"downloadSelected": "Завантажити вибране"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"forbidden": "У вас немає прав доступу до цього.",
|
||||||
|
"internal": "Щось пішло не так.",
|
||||||
|
"notFound": "Неправильне посилання.",
|
||||||
|
"connection": "Немає підключення до сервера."
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"body": "Тіло",
|
||||||
|
"clear": "Очистити",
|
||||||
|
"closePreview": "Закрити",
|
||||||
|
"files": "Файли",
|
||||||
|
"folders": "Папки",
|
||||||
|
"home": "Домівка",
|
||||||
|
"lastModified": "Останній раз змінено",
|
||||||
|
"loading": "Завантаження...",
|
||||||
|
"lonely": "Тут пусто...",
|
||||||
|
"metadata": "Метадані",
|
||||||
|
"multipleSelectionEnabled": "Мультивибір включений",
|
||||||
|
"name": "Ім'я",
|
||||||
|
"size": "Розмір",
|
||||||
|
"sortByLastModified": "Сортувати за останнім зміненням",
|
||||||
|
"sortByName": "Сортувати за іменем",
|
||||||
|
"sortBySize": "Сортувати за розміром",
|
||||||
|
"noPreview": "Попередній перегляд для цього файлу недоступний."
|
||||||
|
},
|
||||||
|
"help": {
|
||||||
|
"click": "вибрати файл чи каталог",
|
||||||
|
"ctrl": {
|
||||||
|
"click": "вибрати кілька файлів чи каталогів",
|
||||||
|
"f": "відкрити пошук",
|
||||||
|
"s": "скачати файл або поточний каталог"
|
||||||
|
},
|
||||||
|
"del": "видалити вибрані елементи",
|
||||||
|
"doubleClick": "відкрити файл чи каталог",
|
||||||
|
"esc": "очистити виділення та/або закрити вікно",
|
||||||
|
"f1": "допомога",
|
||||||
|
"f2": "перейменувати файл",
|
||||||
|
"help": "Допомога"
|
||||||
|
},
|
||||||
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
|
"ar": "العربية",
|
||||||
|
"de": "Deutsch",
|
||||||
|
"en": "English",
|
||||||
|
"es": "Español",
|
||||||
|
"fr": "Français",
|
||||||
|
"is": "Icelandic",
|
||||||
|
"it": "Italiano",
|
||||||
|
"ja": "日本語",
|
||||||
|
"ko": "한국어",
|
||||||
|
"nlBE": "Dutch (Belgium)",
|
||||||
|
"pl": "Polski",
|
||||||
|
"pt": "Português",
|
||||||
|
"ptBR": "Português (Brasil)",
|
||||||
|
"ro": "Romanian",
|
||||||
|
"ru": "Русский",
|
||||||
|
"sk": "Slovenčina",
|
||||||
|
"svSE": "Swedish (Sweden)",
|
||||||
|
"tr": "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
|
"zhCN": "中文 (简体)",
|
||||||
|
"zhTW": "中文 (繁體)"
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"createAnAccount": "Створити обліковий запис",
|
||||||
|
"loginInstead": "Вже є обліковий запис",
|
||||||
|
"password": "Пароль",
|
||||||
|
"passwordConfirm": "Підтвердження паролю",
|
||||||
|
"passwordsDontMatch": "Паролі не співпадають",
|
||||||
|
"signup": "Зареєструватися",
|
||||||
|
"submit": "Увійти",
|
||||||
|
"username": "Ім'я користувача",
|
||||||
|
"usernameTaken": "Ім'я користувача вже використовується",
|
||||||
|
"wrongCredentials": "Невірне ім'я користувача або пароль"
|
||||||
|
},
|
||||||
|
"permanent": "Постійний",
|
||||||
|
"prompts": {
|
||||||
|
"copy": "Копіювати",
|
||||||
|
"copyMessage": "Копіювати в:",
|
||||||
|
"currentlyNavigating": "Поточний каталог:",
|
||||||
|
"deleteMessageMultiple": "Видалити ці файли ({count})?",
|
||||||
|
"deleteMessageSingle": "Видалити цей файл/каталог?",
|
||||||
|
"deleteMessageShare": "Видалити цей спільний файл/каталог ({path})?",
|
||||||
|
"deleteTitle": "Видалити файлы",
|
||||||
|
"displayName": "Відображене ім'я:",
|
||||||
|
"download": "Завантажити файлы",
|
||||||
|
"downloadMessage": "Виберіть формат, в якому хочете завантажити.",
|
||||||
|
"error": "Помилка",
|
||||||
|
"fileInfo": "Інформація про файл",
|
||||||
|
"filesSelected": "Файлів вибрано: {count}.",
|
||||||
|
"lastModified": "Останній раз змінено",
|
||||||
|
"move": "Перемістити",
|
||||||
|
"moveMessage": "Перемістити в:",
|
||||||
|
"newArchetype": "Створіть новий запис на основі архетипу. Файл буде створено у каталозі.",
|
||||||
|
"newDir": "Новий каталог",
|
||||||
|
"newDirMessage": "Ім'я нового каталогу.",
|
||||||
|
"newFile": "Новий файл",
|
||||||
|
"newFileMessage": "Ім'я нового файлу.",
|
||||||
|
"numberDirs": "Кількість каталогів",
|
||||||
|
"numberFiles": "Кількість файлів",
|
||||||
|
"rename": "Перейменувати",
|
||||||
|
"renameMessage": "Нове ім'я",
|
||||||
|
"replace": "Замінити",
|
||||||
|
"replaceMessage": "Ім'я одного з файлів, що завантажуються, збігається з вже існуючим файлом. Ви бажаєте замінити існуючий?\n",
|
||||||
|
"schedule": "Планування",
|
||||||
|
"scheduleMessage": "Запланувати дату та час публікації.",
|
||||||
|
"show": "Показати",
|
||||||
|
"size": "Розмір",
|
||||||
|
"upload": "Завантажити",
|
||||||
|
"uploadMessage": "Виберіть варіант для завантаження.",
|
||||||
|
"optionalPassword": "Необов'язковий пароль"
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"images": "Зображення",
|
||||||
|
"music": "Музика",
|
||||||
|
"pdf": "PDF",
|
||||||
|
"pressToSearch": "Натисніть ENTER для пошуку",
|
||||||
|
"search": "Пошук...",
|
||||||
|
"typeToSearch": "Введіть ім'я файлу...",
|
||||||
|
"types": "Типи",
|
||||||
|
"video": "Відео"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"admin": "Адмін",
|
||||||
|
"administrator": "Адміністратор",
|
||||||
|
"allowCommands": "Запуск команд",
|
||||||
|
"allowEdit": "Редагування, перейменування та видалення файлів чи каталогів",
|
||||||
|
"allowNew": "Створення нових файлів або каталогів",
|
||||||
|
"allowPublish": "Публікація нових записів та сторінок",
|
||||||
|
"allowSignup": "Дозволити користувачам реєструватися",
|
||||||
|
"avoidChanges": "(залишіть поле порожнім, щоб уникнути змін)",
|
||||||
|
"branding": "Брендинг",
|
||||||
|
"brandingDirectoryPath": "Шлях до каталогу брендів",
|
||||||
|
"brandingHelp": "Ви можете налаштувати зовнішній вигляд файлового браузера, змінивши його ім'я, замінивши логотип, додавши власні стилі та навіть відключивши зовнішні посилання на GitHub.\nДодаткову інформацію про персоналізований брендинг можна знайти на сторінці {0}.",
|
||||||
|
"changePassword": "Зміна пароля",
|
||||||
|
"commandRunner": "Запуск команд",
|
||||||
|
"commandRunnerHelp": "Тут ви можете встановити команди, які будуть виконуватися у зазначених подіях. Ви повинні вказати по одній команді в кожному рядку. Змінні середовища {0} та {1} будуть доступні, будучи {0} щодо {1}. Додаткові відомості про цю функцію та доступні змінні середовища див. у {2}.",
|
||||||
|
"commandsUpdated": "Команди оновлені!",
|
||||||
|
"createUserDir": "Автоматичне створення домашнього каталогу користувача при додаванні нового користувача",
|
||||||
|
"customStylesheet": "Свій стиль",
|
||||||
|
"defaultUserDescription": "Це налаштування за замовчуванням для нових користувачів.",
|
||||||
|
"disableExternalLinks": "Вимкнути зовнішні посилання (крім документації)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
|
"documentation": "документація",
|
||||||
|
"examples": "Приклади",
|
||||||
|
"executeOnShell": "Виконати в командному рядку",
|
||||||
|
"executeOnShellDescription": "За замовчуванням File Browser виконує команди, безпосередньо викликаючи їх бінарні файли. Якщо ви хочете замість цього запускати їх в оболонці (наприклад, Bash або PowerShell), ви можете визначити їх тут з необхідними аргументами та прапорами. Якщо встановлено, виконуєма вами команда буде додана як аргумент. Це стосується як користувацьких команд, так і обробників подій.",
|
||||||
|
"globalRules": "Це глобальний набір дозволяючих та забороняючих правил. Вони застосовні до кожного користувача. Ви можете визначити певні правила для налаштувань кожного користувача, щоб перевизначити їх.",
|
||||||
|
"globalSettings": "Глобальні налаштування",
|
||||||
|
"hideDotfiles": "Приховати точкові файли",
|
||||||
|
"insertPath": "Вставте шлях",
|
||||||
|
"insertRegex": "Вставити регулярний вираз",
|
||||||
|
"instanceName": "Поточна назва програми",
|
||||||
|
"language": "Мова",
|
||||||
|
"lockPassword": "Заборонити користувачеві змінювати пароль",
|
||||||
|
"newPassword": "Новий пароль",
|
||||||
|
"newPasswordConfirm": "Підтвердження нового пароля",
|
||||||
|
"newUser": "Новий користувач",
|
||||||
|
"password": "Пароль",
|
||||||
|
"passwordUpdated": "Пароль оновлено!",
|
||||||
|
"path": "Шлях",
|
||||||
|
"perm": {
|
||||||
|
"create": "Створювати файли та каталоги",
|
||||||
|
"delete": "Видаляти файли та каталоги",
|
||||||
|
"download": "Завантажувати",
|
||||||
|
"execute": "Виконувати команди",
|
||||||
|
"modify": "Редагувати файли",
|
||||||
|
"rename": "Перейменовувати або переміщувати файли та каталоги",
|
||||||
|
"share": "Ділітися файлами"
|
||||||
|
},
|
||||||
|
"permissions": "Дозволи",
|
||||||
|
"permissionsHelp": "Можна настроїти користувача як адміністратора або вибрати індивідуальні дозволи. При виборі \"Адміністратор\" всі інші параметри будуть автоматично вибрані. Керування користувачами - привілей адміністратора.\n",
|
||||||
|
"profileSettings": "Налаштування профілю",
|
||||||
|
"ruleExample1": "запобігти доступу до будь-якого прихованого файлу (наприклад: .git, .gitignore) у кожній папці.\n",
|
||||||
|
"ruleExample2": "блокує доступ до файлу з ім'ям Caddyfile у кореневій області.",
|
||||||
|
"rules": "Права",
|
||||||
|
"rulesHelp": "Тут ви можете визначити набір дозволяючих та забороняючих правил для цього конкретного користувача. Блоковані файли не відображатимуться у списках, і не будуть доступні для користувача. Є підтримка регулярних виразів та відносних шляхів.\n",
|
||||||
|
"scope": "Корінь",
|
||||||
|
"setDateFormat": "Встановити точний формат дати",
|
||||||
|
"settingsUpdated": "Налаштування застосовані!",
|
||||||
|
"shareDuration": "Тривалість спільного посилання",
|
||||||
|
"shareManagement": "Управління спільними посиланнями",
|
||||||
|
"shareDeleted": "Спільне посилання видалено!",
|
||||||
|
"singleClick": "Відкриття файлів та каталогів одним кліком",
|
||||||
|
"themes": {
|
||||||
|
"dark": "Темна",
|
||||||
|
"light": "Світла",
|
||||||
|
"title": "Тема"
|
||||||
|
},
|
||||||
|
"user": "Користувач",
|
||||||
|
"userCommands": "Команди",
|
||||||
|
"userCommandsHelp": "Список команд, доступних користувачу, розділений пробілами. Приклад:\n",
|
||||||
|
"userCreated": "Користувач створений!",
|
||||||
|
"userDefaults": "Налаштування користувача за замовчуванням",
|
||||||
|
"userDeleted": "Користувач видалений!",
|
||||||
|
"userManagement": "Керування користувачами",
|
||||||
|
"userUpdated": "Користувач змінений!",
|
||||||
|
"username": "Ім'я користувача",
|
||||||
|
"users": "Користувачі"
|
||||||
|
},
|
||||||
|
"sidebar": {
|
||||||
|
"help": "Допомога",
|
||||||
|
"hugoNew": "Hugo New",
|
||||||
|
"login": "Увійти",
|
||||||
|
"logout": "Вийти",
|
||||||
|
"myFiles": "Файли",
|
||||||
|
"newFile": "Новий файл",
|
||||||
|
"newFolder": "Новий каталог",
|
||||||
|
"preview": "Перегляд",
|
||||||
|
"settings": "Налаштування",
|
||||||
|
"signup": "Зареєструватися",
|
||||||
|
"siteSettings": "Налаштування сайту"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"linkCopied": "Посилання скопійоване!"
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"days": "Дні",
|
||||||
|
"hours": "Години",
|
||||||
|
"minutes": "Хвилини",
|
||||||
|
"seconds": "Секунди",
|
||||||
|
"unit": "Одиниця часу"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,12 +8,14 @@
|
|||||||
"create": "创建",
|
"create": "创建",
|
||||||
"delete": "删除",
|
"delete": "删除",
|
||||||
"download": "下载",
|
"download": "下载",
|
||||||
"hideDotfiles": "不显示隐藏的文件",
|
"file": "文件",
|
||||||
|
"folder": "文件夹",
|
||||||
|
"hideDotfiles": "不显示隐藏文件",
|
||||||
"info": "信息",
|
"info": "信息",
|
||||||
"more": "更多",
|
"more": "更多",
|
||||||
"move": "移动",
|
"move": "移动",
|
||||||
"moveFile": "移动文件",
|
"moveFile": "移动文件",
|
||||||
"new": "新",
|
"new": "新建",
|
||||||
"next": "下一个",
|
"next": "下一个",
|
||||||
"ok": "确定",
|
"ok": "确定",
|
||||||
"permalink": "获取永久链接",
|
"permalink": "获取永久链接",
|
||||||
@@ -28,12 +30,13 @@
|
|||||||
"select": "选择",
|
"select": "选择",
|
||||||
"selectMultiple": "选择多个",
|
"selectMultiple": "选择多个",
|
||||||
"share": "分享",
|
"share": "分享",
|
||||||
"shell": "激活 shell",
|
"shell": "激活 Shell",
|
||||||
"submit": "提交",
|
"submit": "提交",
|
||||||
"switchView": "切换显示方式",
|
"switchView": "切换显示方式",
|
||||||
"toggleSidebar": "切换侧边栏",
|
"toggleSidebar": "切换侧边栏",
|
||||||
"update": "更新",
|
"update": "更新",
|
||||||
"upload": "上传"
|
"upload": "上传",
|
||||||
|
"openFile": "打开文件"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"downloadFile": "下载文件",
|
"downloadFile": "下载文件",
|
||||||
@@ -43,7 +46,8 @@
|
|||||||
"errors": {
|
"errors": {
|
||||||
"forbidden": "你无权限访问",
|
"forbidden": "你无权限访问",
|
||||||
"internal": "服务器出了点问题。",
|
"internal": "服务器出了点问题。",
|
||||||
"notFound": "找不到文件。"
|
"notFound": "找不到文件。",
|
||||||
|
"connection": "无法连接到服务器。"
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"body": "内容",
|
"body": "内容",
|
||||||
@@ -61,7 +65,8 @@
|
|||||||
"size": "大小",
|
"size": "大小",
|
||||||
"sortByLastModified": "按最后修改时间排序",
|
"sortByLastModified": "按最后修改时间排序",
|
||||||
"sortByName": "按名称排序",
|
"sortByName": "按名称排序",
|
||||||
"sortBySize": "按大小排序"
|
"sortBySize": "按大小排序",
|
||||||
|
"noPreview": "此文件无法预览。"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"click": "选择文件或目录",
|
"click": "选择文件或目录",
|
||||||
@@ -78,6 +83,8 @@
|
|||||||
"help": "帮助"
|
"help": "帮助"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -96,6 +103,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "Swedish(Sweden)",
|
"svSE": "Swedish(Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文(简体)",
|
"zhCN": "中文(简体)",
|
||||||
"zhTW": "中文(繁體)"
|
"zhTW": "中文(繁體)"
|
||||||
},
|
},
|
||||||
@@ -118,7 +126,7 @@
|
|||||||
"currentlyNavigating": "当前目录:",
|
"currentlyNavigating": "当前目录:",
|
||||||
"deleteMessageMultiple": "你确定要删除这 {count} 个文件吗?",
|
"deleteMessageMultiple": "你确定要删除这 {count} 个文件吗?",
|
||||||
"deleteMessageSingle": "你确定要删除这个文件/文件夹吗?",
|
"deleteMessageSingle": "你确定要删除这个文件/文件夹吗?",
|
||||||
"deleteMessageShare": "你确定要删除这个分享({path})吗?",
|
"deleteMessageShare": "你确定要删除这个分享({path})吗?",
|
||||||
"deleteTitle": "删除文件",
|
"deleteTitle": "删除文件",
|
||||||
"displayName": "名称:",
|
"displayName": "名称:",
|
||||||
"download": "下载文件",
|
"download": "下载文件",
|
||||||
@@ -139,7 +147,7 @@
|
|||||||
"rename": "重命名",
|
"rename": "重命名",
|
||||||
"renameMessage": "请输入新名称,旧名称为:",
|
"renameMessage": "请输入新名称,旧名称为:",
|
||||||
"replace": "替换",
|
"replace": "替换",
|
||||||
"replaceMessage": "您尝试上传的文件中有一个与现有文件的名称存在冲突。是否替换现有的同名文件?",
|
"replaceMessage": "您尝试上传的文件中有一个与现有文件的名称存在冲突。是否替换现有的同名文件?\n",
|
||||||
"schedule": "计划",
|
"schedule": "计划",
|
||||||
"scheduleMessage": "请选择发布这篇帖子的日期与时间。",
|
"scheduleMessage": "请选择发布这篇帖子的日期与时间。",
|
||||||
"show": "点击以显示",
|
"show": "点击以显示",
|
||||||
@@ -152,16 +160,16 @@
|
|||||||
"images": "图像",
|
"images": "图像",
|
||||||
"music": "音乐",
|
"music": "音乐",
|
||||||
"pdf": "PDF",
|
"pdf": "PDF",
|
||||||
"pressToSearch": "回车搜索...",
|
"pressToSearch": "输入回车以搜索...",
|
||||||
"search": "搜索...",
|
"search": "搜索...",
|
||||||
"typeToSearch": "输入搜索...",
|
"typeToSearch": "输入以搜索...",
|
||||||
"types": "类型",
|
"types": "类型",
|
||||||
"video": "视频"
|
"video": "视频"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"admin": "管理员",
|
"admin": "管理员",
|
||||||
"administrator": "管理员",
|
"administrator": "管理员",
|
||||||
"allowCommands": "执行命令(shell 命令)",
|
"allowCommands": "执行命令(Shell 命令)",
|
||||||
"allowEdit": "编辑、重命名或删除文件/目录",
|
"allowEdit": "编辑、重命名或删除文件/目录",
|
||||||
"allowNew": "创建新文件和目录",
|
"allowNew": "创建新文件和目录",
|
||||||
"allowPublish": "发布新的帖子与页面",
|
"allowPublish": "发布新的帖子与页面",
|
||||||
@@ -169,29 +177,30 @@
|
|||||||
"avoidChanges": "(留空以避免更改)",
|
"avoidChanges": "(留空以避免更改)",
|
||||||
"branding": "品牌",
|
"branding": "品牌",
|
||||||
"brandingDirectoryPath": "品牌信息文件夹路径",
|
"brandingDirectoryPath": "品牌信息文件夹路径",
|
||||||
"brandingHelp": "您可以通过改变实例名称,更换Logo,加入自定义样式,甚至禁用到Github的外部链接来自定义File Browser的外观和给人的感觉。\n想获得更多信息,请查看 {0} 。",
|
"brandingHelp": "您可以通过改变实例名称,更换 Logo,加入自定义样式,甚至禁用到 Github 的外部链接来自定义 File Browser 的外观和感觉。\n想获得更多信息,请查看 {0}。",
|
||||||
"changePassword": "更改密码",
|
"changePassword": "更改密码",
|
||||||
"commandRunner": "命令执行器",
|
"commandRunner": "命令执行器",
|
||||||
"commandRunnerHelp": "在这里你可以设置在下面的事件中执行的命令。每行必须写一条命令。可以在命令中使用环境变量 {0} 和 {1}。关于此功能和可用环境变量的更多信息,请阅读{2}.",
|
"commandRunnerHelp": "你可以在此设置在下列事件中执行的命令。每行必须写一条命令。可以在命令中使用环境变量 {0} 和 {1},使 {0} 与 {1} 相关联。关于此功能和可用环境变量的更多信息,请阅读 {2}。",
|
||||||
"commandsUpdated": "命令已更新!",
|
"commandsUpdated": "命令已更新!",
|
||||||
"createUserDir": "在添加新用户的同时自动创建用户的个人目录",
|
"createUserDir": "在添加新用户的同时自动创建用户的个人目录",
|
||||||
"customStylesheet": "自定义样式表(CSS)",
|
"customStylesheet": "自定义样式表(CSS)",
|
||||||
"defaultUserDescription": "这些是新用户的默认设置。",
|
"defaultUserDescription": "这些是新用户的默认设置。",
|
||||||
"disableExternalLinks": "禁止外部链接(帮助文档除外)",
|
"disableExternalLinks": "禁止外部链接(帮助文档除外)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "帮助文档",
|
"documentation": "帮助文档",
|
||||||
"examples": "例子",
|
"examples": "例子",
|
||||||
"executeOnShell": "在Shell中执行",
|
"executeOnShell": "在 Shell 中执行",
|
||||||
"executeOnShellDescription": "默认情况下,File Browser通过直接调用命令的二进制包来执行命令,如果想在shell中执行(如Bash、PowerShell),你可以在这里定义所使用的shell和参数。如果设置了这个选项,所执行的命令会作为参数追加在后面。本选项对用户命令和事件钩子都生效。",
|
"executeOnShellDescription": "默认情况下,File Browser 通过直接调用命令的二进制包来执行命令,如果想在 Shell中 执行(如 Bash 或 PowerShell),你可以在这里定义所使用的 Shell 和参数。设置后,您所执行的命令会作为参数追加。本设置对用户命令和事件钩子都生效。",
|
||||||
"globalRules": "这是全局允许与禁止规则。它们作用于所有用户。您可以给每个用户定义单独的特殊规则来覆盖全局规则。",
|
"globalRules": "这是全局允许与禁止规则。它们作用于所有用户。您可以给每个用户定义单独的特殊规则来覆盖全局规则。",
|
||||||
"globalSettings": "全局设置",
|
"globalSettings": "全局设置",
|
||||||
"hideDotfiles": "",
|
"hideDotfiles": "不显示隐藏文件",
|
||||||
"insertPath": "插入路径",
|
"insertPath": "插入路径",
|
||||||
"insertRegex": "插入正则表达式",
|
"insertRegex": "插入正则表达式",
|
||||||
"instanceName": "实例名称",
|
"instanceName": "实例名称",
|
||||||
"language": "语言",
|
"language": "语言",
|
||||||
"lockPassword": "禁止用户修改密码",
|
"lockPassword": "禁止用户修改密码",
|
||||||
"newPassword": "您的新密码",
|
"newPassword": "您的新密码",
|
||||||
"newPasswordConfirm": "重输一遍新密码",
|
"newPasswordConfirm": "再次输入以确认您的新密码",
|
||||||
"newUser": "新建用户",
|
"newUser": "新建用户",
|
||||||
"password": "密码",
|
"password": "密码",
|
||||||
"passwordUpdated": "密码已更新!",
|
"passwordUpdated": "密码已更新!",
|
||||||
@@ -206,25 +215,27 @@
|
|||||||
"share": "分享文件"
|
"share": "分享文件"
|
||||||
},
|
},
|
||||||
"permissions": "权限",
|
"permissions": "权限",
|
||||||
"permissionsHelp": "您可以将该用户设置为管理员,也可以单独选择各项权限。如果选择了“管理员”,则其他的选项会被自动勾上,同时该用户可以管理其他用户。",
|
"permissionsHelp": "您可以将该用户设置为管理员或单独选择各项权限。如果您选择了“管理员”,则其他的选项会被自动选中,同时该用户可以管理其他用户。\n",
|
||||||
"profileSettings": "个人设置",
|
"profileSettings": "个人设置",
|
||||||
"ruleExample1": "阻止用户访问所有文件夹下任何以 . 开头的文件(隐藏文件, 例如: .git, .gitignore)。",
|
"ruleExample1": "阻止用户访问所有文件夹下任何以 . 开头的文件(隐藏文件, 例如: .git, .gitignore)。\n",
|
||||||
"ruleExample2": "阻止用户访问其目录范围的根目录下名为 Caddyfile 的文件。",
|
"ruleExample2": "阻止用户访问其目录范围的根目录下名为 Caddyfile 的文件。",
|
||||||
"rules": "规则",
|
"rules": "规则",
|
||||||
"rulesHelp": "您可以为该用户制定一组黑名单或白名单式的规则,被屏蔽的文件将不会显示在列表中,用户也无权限访问,支持相对于目录范围的路径。",
|
"rulesHelp": "您可以为该用户制定一组黑名单或白名单式的规则,被屏蔽的文件将不会显示在列表中,用户也无权限访问,支持正则表达式和相对于用户范围的路径。\n",
|
||||||
"scope": "目录范围",
|
"scope": "目录范围",
|
||||||
|
"setDateFormat": "显示精确的日期格式",
|
||||||
"settingsUpdated": "设置已更新!",
|
"settingsUpdated": "设置已更新!",
|
||||||
"shareDuration": "分享期限",
|
"shareDuration": "分享期限",
|
||||||
"shareManagement": "分享管理",
|
"shareManagement": "分享管理",
|
||||||
"singleClick": "",
|
"shareDeleted": "分享已删除!",
|
||||||
|
"singleClick": "使用单击来打开文件和目录",
|
||||||
"themes": {
|
"themes": {
|
||||||
"dark": "深色",
|
"dark": "深色",
|
||||||
"light": "浅色",
|
"light": "浅色",
|
||||||
"title": "主题"
|
"title": "主题"
|
||||||
},
|
},
|
||||||
"user": "用户",
|
"user": "用户",
|
||||||
"userCommands": "用户命令(shell 命令)",
|
"userCommands": "用户命令(Shell 命令)",
|
||||||
"userCommandsHelp": "指定该用户可以执行的命令(shell 代码),用空格分隔。例如:",
|
"userCommandsHelp": "指定该用户可以执行的命令(Shell 命令),用空格分隔。例如:\n",
|
||||||
"userCreated": "用户已创建!",
|
"userCreated": "用户已创建!",
|
||||||
"userDefaults": "用户默认设置",
|
"userDefaults": "用户默认设置",
|
||||||
"userDeleted": "用户已删除!",
|
"userDeleted": "用户已删除!",
|
||||||
@@ -235,7 +246,7 @@
|
|||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"help": "帮助",
|
"help": "帮助",
|
||||||
"hugoNew": "Hugo New",
|
"hugoNew": "Hugo 新建",
|
||||||
"login": "登录",
|
"login": "登录",
|
||||||
"logout": "登出",
|
"logout": "登出",
|
||||||
"myFiles": "我的文件",
|
"myFiles": "我的文件",
|
||||||
|
|||||||
@@ -77,6 +77,8 @@
|
|||||||
"help": "幫助"
|
"help": "幫助"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
|
"he": "עברית",
|
||||||
|
"hu": "Magyar",
|
||||||
"ar": "العربية",
|
"ar": "العربية",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
@@ -95,6 +97,7 @@
|
|||||||
"sk": "Slovenčina",
|
"sk": "Slovenčina",
|
||||||
"svSE": "Swedish(Sweden)",
|
"svSE": "Swedish(Sweden)",
|
||||||
"tr" : "Türkçe",
|
"tr" : "Türkçe",
|
||||||
|
"ua": "Українська",
|
||||||
"zhCN": "中文 (简体)",
|
"zhCN": "中文 (简体)",
|
||||||
"zhTW": "中文 (繁體)"
|
"zhTW": "中文 (繁體)"
|
||||||
},
|
},
|
||||||
@@ -175,6 +178,7 @@
|
|||||||
"customStylesheet": "自定義樣式表",
|
"customStylesheet": "自定義樣式表",
|
||||||
"defaultUserDescription": "這些是新使用者的預設設定。",
|
"defaultUserDescription": "這些是新使用者的預設設定。",
|
||||||
"disableExternalLinks": "禁止外部連結(幫助文件除外)",
|
"disableExternalLinks": "禁止外部連結(幫助文件除外)",
|
||||||
|
"disableUsedDiskPercentage": "Disable used disk percentage graph",
|
||||||
"documentation": "幫助文件",
|
"documentation": "幫助文件",
|
||||||
"examples": "範例",
|
"examples": "範例",
|
||||||
"executeOnShell": "在Shell中執行",
|
"executeOnShell": "在Shell中執行",
|
||||||
|
|||||||
@@ -12,10 +12,26 @@ import ProfileSettings from "@/views/settings/Profile";
|
|||||||
import Shares from "@/views/settings/Shares";
|
import Shares from "@/views/settings/Shares";
|
||||||
import Errors from "@/views/Errors";
|
import Errors from "@/views/Errors";
|
||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
import { baseURL } from "@/utils/constants";
|
import { baseURL, name } from "@/utils/constants";
|
||||||
|
import i18n, { rtlLanguages } from "@/i18n";
|
||||||
|
|
||||||
Vue.use(Router);
|
Vue.use(Router);
|
||||||
|
|
||||||
|
const titles = {
|
||||||
|
Login: "sidebar.login",
|
||||||
|
Share: "buttons.share",
|
||||||
|
Files: "files.files",
|
||||||
|
Settings: "sidebar.settings",
|
||||||
|
ProfileSettings: "settings.profileSettings",
|
||||||
|
Shares: "settings.shareManagement",
|
||||||
|
GlobalSettings: "settings.globalSettings",
|
||||||
|
Users: "settings.users",
|
||||||
|
User: "settings.user",
|
||||||
|
Forbidden: "errors.forbidden",
|
||||||
|
NotFound: "errors.notFound",
|
||||||
|
InternalServerError: "errors.internal",
|
||||||
|
};
|
||||||
|
|
||||||
const router = new Router({
|
const router = new Router({
|
||||||
base: baseURL,
|
base: baseURL,
|
||||||
mode: "history",
|
mode: "history",
|
||||||
@@ -29,7 +45,6 @@ const router = new Router({
|
|||||||
return next({ path: "/files" });
|
return next({ path: "/files" });
|
||||||
}
|
}
|
||||||
|
|
||||||
document.title = "Login";
|
|
||||||
next();
|
next();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -63,7 +78,7 @@ const router = new Router({
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "/settings/profile",
|
path: "/settings/profile",
|
||||||
name: "Profile Settings",
|
name: "ProfileSettings",
|
||||||
component: ProfileSettings,
|
component: ProfileSettings,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -73,7 +88,7 @@ const router = new Router({
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/settings/global",
|
path: "/settings/global",
|
||||||
name: "Global Settings",
|
name: "GlobalSettings",
|
||||||
component: GlobalSettings,
|
component: GlobalSettings,
|
||||||
meta: {
|
meta: {
|
||||||
requiresAdmin: true,
|
requiresAdmin: true,
|
||||||
@@ -108,7 +123,7 @@ const router = new Router({
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/404",
|
path: "/404",
|
||||||
name: "Not Found",
|
name: "NotFound",
|
||||||
component: Errors,
|
component: Errors,
|
||||||
props: {
|
props: {
|
||||||
errorCode: 404,
|
errorCode: 404,
|
||||||
@@ -117,7 +132,7 @@ const router = new Router({
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/500",
|
path: "/500",
|
||||||
name: "Internal Server Error",
|
name: "InternalServerError",
|
||||||
component: Errors,
|
component: Errors,
|
||||||
props: {
|
props: {
|
||||||
errorCode: 500,
|
errorCode: 500,
|
||||||
@@ -140,7 +155,20 @@ const router = new Router({
|
|||||||
});
|
});
|
||||||
|
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
document.title = to.name;
|
const title = i18n.t(titles[to.name]);
|
||||||
|
document.title = title + " - " + name;
|
||||||
|
|
||||||
|
/*** RTL related settings per route ****/
|
||||||
|
const rtlSet = document.querySelector("body").classList.contains("rtl");
|
||||||
|
const shouldSetRtl = rtlLanguages.includes(i18n.locale);
|
||||||
|
switch (true) {
|
||||||
|
case shouldSetRtl && !rtlSet:
|
||||||
|
document.querySelector("body").classList.add("rtl");
|
||||||
|
break;
|
||||||
|
case !shouldSetRtl && rtlSet:
|
||||||
|
document.querySelector("body").classList.remove("rtl");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (to.matched.some((record) => record.meta.requiresAuth)) {
|
if (to.matched.some((record) => record.meta.requiresAuth)) {
|
||||||
if (!store.getters.isLogged) {
|
if (!store.getters.isLogged) {
|
||||||
|
|||||||
@@ -8,8 +8,40 @@ const getters = {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let totalSize = state.upload.sizes.reduce((a, b) => a + b, 0);
|
||||||
|
|
||||||
let sum = state.upload.progress.reduce((acc, val) => acc + val);
|
let sum = state.upload.progress.reduce((acc, val) => acc + val);
|
||||||
return Math.ceil((sum / state.upload.size) * 100);
|
return Math.ceil((sum / totalSize) * 100);
|
||||||
|
},
|
||||||
|
filesInUploadCount: (state) => {
|
||||||
|
let total =
|
||||||
|
Object.keys(state.upload.uploads).length + state.upload.queue.length;
|
||||||
|
return total;
|
||||||
|
},
|
||||||
|
filesInUpload: (state) => {
|
||||||
|
let files = [];
|
||||||
|
|
||||||
|
for (let index in state.upload.uploads) {
|
||||||
|
let upload = state.upload.uploads[index];
|
||||||
|
let id = upload.id;
|
||||||
|
let type = upload.type;
|
||||||
|
let name = upload.file.name;
|
||||||
|
let size = state.upload.sizes[id];
|
||||||
|
let isDir = upload.file.isDir;
|
||||||
|
let progress = isDir
|
||||||
|
? 100
|
||||||
|
: Math.ceil((state.upload.progress[id] / size) * 100);
|
||||||
|
|
||||||
|
files.push({
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
progress,
|
||||||
|
type,
|
||||||
|
isDir,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return files.sort((a, b) => a.progress - b.progress);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ const state = {
|
|||||||
show: null,
|
show: null,
|
||||||
showShell: false,
|
showShell: false,
|
||||||
showConfirm: null,
|
showConfirm: null,
|
||||||
|
showAction: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default new Vuex.Store({
|
export default new Vuex.Store({
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const UPLOADS_LIMIT = 5;
|
|||||||
|
|
||||||
const state = {
|
const state = {
|
||||||
id: 0,
|
id: 0,
|
||||||
size: 0,
|
sizes: [],
|
||||||
progress: [],
|
progress: [],
|
||||||
queue: [],
|
queue: [],
|
||||||
uploads: {},
|
uploads: {},
|
||||||
@@ -19,12 +19,12 @@ const mutations = {
|
|||||||
},
|
},
|
||||||
reset: (state) => {
|
reset: (state) => {
|
||||||
state.id = 0;
|
state.id = 0;
|
||||||
state.size = 0;
|
state.sizes = [];
|
||||||
state.progress = [];
|
state.progress = [];
|
||||||
},
|
},
|
||||||
addJob: (state, item) => {
|
addJob: (state, item) => {
|
||||||
state.queue.push(item);
|
state.queue.push(item);
|
||||||
state.size += item.file.size;
|
state.sizes[state.id] = item.file.size;
|
||||||
state.id++;
|
state.id++;
|
||||||
},
|
},
|
||||||
moveJob(state) {
|
moveJob(state) {
|
||||||
@@ -33,6 +33,7 @@ const mutations = {
|
|||||||
Vue.set(state.uploads, item.id, item);
|
Vue.set(state.uploads, item.id, item);
|
||||||
},
|
},
|
||||||
removeJob(state, id) {
|
removeJob(state, id) {
|
||||||
|
Vue.delete(state.uploads, id);
|
||||||
delete state.uploads[id];
|
delete state.uploads[id];
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ const mutations = {
|
|||||||
closeHovers: (state) => {
|
closeHovers: (state) => {
|
||||||
state.show = null;
|
state.show = null;
|
||||||
state.showConfirm = null;
|
state.showConfirm = null;
|
||||||
|
state.showAction = null;
|
||||||
},
|
},
|
||||||
toggleShell: (state) => {
|
toggleShell: (state) => {
|
||||||
state.showShell = !state.showShell;
|
state.showShell = !state.showShell;
|
||||||
@@ -17,6 +18,9 @@ const mutations = {
|
|||||||
|
|
||||||
state.show = value.prompt;
|
state.show = value.prompt;
|
||||||
state.showConfirm = value.confirm;
|
state.showConfirm = value.confirm;
|
||||||
|
if (value.action !== undefined) {
|
||||||
|
state.showAction = value.action;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
showError: (state) => {
|
showError: (state) => {
|
||||||
state.show = "error";
|
state.show = "error";
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const name = window.FileBrowser.Name || "File Browser";
|
const name = window.FileBrowser.Name || "File Browser";
|
||||||
const disableExternal = window.FileBrowser.DisableExternal;
|
const disableExternal = window.FileBrowser.DisableExternal;
|
||||||
|
const disableUsedPercentage = window.FileBrowser.DisableUsedPercentage;
|
||||||
const baseURL = window.FileBrowser.BaseURL;
|
const baseURL = window.FileBrowser.BaseURL;
|
||||||
const staticURL = window.FileBrowser.StaticURL;
|
const staticURL = window.FileBrowser.StaticURL;
|
||||||
const recaptcha = window.FileBrowser.ReCaptcha;
|
const recaptcha = window.FileBrowser.ReCaptcha;
|
||||||
@@ -14,10 +15,14 @@ const theme = window.FileBrowser.Theme;
|
|||||||
const enableThumbs = window.FileBrowser.EnableThumbs;
|
const enableThumbs = window.FileBrowser.EnableThumbs;
|
||||||
const resizePreview = window.FileBrowser.ResizePreview;
|
const resizePreview = window.FileBrowser.ResizePreview;
|
||||||
const enableExec = window.FileBrowser.EnableExec;
|
const enableExec = window.FileBrowser.EnableExec;
|
||||||
|
const tusSettings = window.FileBrowser.TusSettings;
|
||||||
|
const origin = window.location.origin;
|
||||||
|
const tusEndpoint = `/api/tus`;
|
||||||
|
|
||||||
export {
|
export {
|
||||||
name,
|
name,
|
||||||
disableExternal,
|
disableExternal,
|
||||||
|
disableUsedPercentage,
|
||||||
baseURL,
|
baseURL,
|
||||||
logoURL,
|
logoURL,
|
||||||
recaptcha,
|
recaptcha,
|
||||||
@@ -31,4 +36,7 @@ export {
|
|||||||
enableThumbs,
|
enableThumbs,
|
||||||
resizePreview,
|
resizePreview,
|
||||||
enableExec,
|
enableExec,
|
||||||
|
tusSettings,
|
||||||
|
origin,
|
||||||
|
tusEndpoint,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ export function scanFiles(dt) {
|
|||||||
isDir: true,
|
isDir: true,
|
||||||
size: 0,
|
size: 0,
|
||||||
fullPath: `${directory}${entry.name}`,
|
fullPath: `${directory}${entry.name}`,
|
||||||
|
name: entry.name,
|
||||||
};
|
};
|
||||||
|
|
||||||
contents.push(dir);
|
contents.push(dir);
|
||||||
@@ -99,6 +100,15 @@ export function scanFiles(dt) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function detectType(mimetype) {
|
||||||
|
if (mimetype.startsWith("video")) return "video";
|
||||||
|
if (mimetype.startsWith("audio")) return "audio";
|
||||||
|
if (mimetype.startsWith("image")) return "image";
|
||||||
|
if (mimetype.startsWith("pdf")) return "pdf";
|
||||||
|
if (mimetype.startsWith("text")) return "text";
|
||||||
|
return "blob";
|
||||||
|
}
|
||||||
|
|
||||||
export function handleFiles(files, base, overwrite = false) {
|
export function handleFiles(files, base, overwrite = false) {
|
||||||
for (let i = 0; i < files.length; i++) {
|
for (let i = 0; i < files.length; i++) {
|
||||||
let id = store.state.upload.id;
|
let id = store.state.upload.id;
|
||||||
@@ -120,6 +130,7 @@ export function handleFiles(files, base, overwrite = false) {
|
|||||||
path,
|
path,
|
||||||
file,
|
file,
|
||||||
overwrite,
|
overwrite,
|
||||||
|
...(!file.isDir && { type: detectType(file.type) }),
|
||||||
};
|
};
|
||||||
|
|
||||||
store.dispatch("upload/upload", item);
|
store.dispatch("upload/upload", item);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
function removeLastDir(url) {
|
export function removeLastDir(url) {
|
||||||
var arr = url.split("/");
|
var arr = url.split("/");
|
||||||
if (arr.pop() === "") {
|
if (arr.pop() === "") {
|
||||||
arr.pop();
|
arr.pop();
|
||||||
@@ -9,7 +9,7 @@ function removeLastDir(url) {
|
|||||||
|
|
||||||
// this code borrow from mozilla
|
// this code borrow from mozilla
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent#Examples
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent#Examples
|
||||||
function encodeRFC5987ValueChars(str) {
|
export function encodeRFC5987ValueChars(str) {
|
||||||
return (
|
return (
|
||||||
encodeURIComponent(str)
|
encodeURIComponent(str)
|
||||||
// Note that although RFC3986 reserves "!", RFC5987 does not,
|
// Note that although RFC3986 reserves "!", RFC5987 does not,
|
||||||
@@ -22,7 +22,7 @@ function encodeRFC5987ValueChars(str) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function encodePath(str) {
|
export function encodePath(str) {
|
||||||
return str
|
return str
|
||||||
.split("/")
|
.split("/")
|
||||||
.map((v) => encodeURIComponent(v))
|
.map((v) => encodeURIComponent(v))
|
||||||
@@ -30,7 +30,7 @@ function encodePath(str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
encodeRFC5987ValueChars: encodeRFC5987ValueChars,
|
encodeRFC5987ValueChars,
|
||||||
removeLastDir: removeLastDir,
|
removeLastDir,
|
||||||
encodePath: encodePath,
|
encodePath,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ import Noty from "noty";
|
|||||||
import VueLazyload from "vue-lazyload";
|
import VueLazyload from "vue-lazyload";
|
||||||
import i18n from "@/i18n";
|
import i18n from "@/i18n";
|
||||||
import { disableExternal } from "@/utils/constants";
|
import { disableExternal } from "@/utils/constants";
|
||||||
|
import AsyncComputed from "vue-async-computed";
|
||||||
|
|
||||||
Vue.use(VueLazyload);
|
Vue.use(VueLazyload);
|
||||||
|
Vue.use(AsyncComputed);
|
||||||
|
|
||||||
Vue.config.productionTip = true;
|
Vue.config.productionTip = true;
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user