Compare commits
102 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46783ce463 | ||
|
|
c0cc16fa43 | ||
|
|
4fd29037a0 | ||
|
|
1c7832ad1f | ||
|
|
962ec27df4 | ||
|
|
9268e35141 | ||
|
|
e8be0d60e6 | ||
|
|
0eabf78f13 | ||
|
|
4136bf5778 | ||
|
|
42b3604e2a | ||
|
|
84f4c39c1e | ||
|
|
bfef246d98 | ||
|
|
3b89fb950a | ||
|
|
7afda85f03 | ||
|
|
a3a7a5d9ab | ||
|
|
74cd520cb8 | ||
|
|
a511f24a6b | ||
|
|
b3862f3f3e | ||
|
|
d147614f76 | ||
|
|
c999df15e0 | ||
|
|
908d6e298f | ||
|
|
44c4a2e269 | ||
|
|
dc060f258b | ||
|
|
3b1c9f1efb | ||
|
|
a45184995f | ||
|
|
b717663b5c | ||
|
|
0e12ba87bc | ||
|
|
ec1feadee9 | ||
|
|
2e0d8d4fed | ||
|
|
b7f0f9d3ee | ||
|
|
c303454db3 | ||
|
|
3972589f76 | ||
|
|
3c5e0ad513 | ||
|
|
384fd19203 | ||
|
|
9d1a12b0d1 | ||
|
|
24e100bd7b | ||
|
|
1da4feeb89 | ||
|
|
c0a245e11b | ||
|
|
7a15fbb465 | ||
|
|
0bfbaea49a | ||
|
|
82871ce5dc | ||
|
|
593a65dac1 | ||
|
|
92ee1ab527 | ||
|
|
e71f6cd159 | ||
|
|
0b07bfbc14 | ||
|
|
63842cd0cc | ||
|
|
9f686c6ee3 | ||
|
|
c6d8188e4e | ||
|
|
6d87e20e29 | ||
|
|
b8efb9f54b | ||
|
|
013b9886af | ||
|
|
43bff91db2 | ||
|
|
1aa3d8e5e8 | ||
|
|
4dae7e250a | ||
|
|
7e91d83f9a | ||
|
|
e11dbfe893 | ||
|
|
ea83cf3876 | ||
|
|
5ca0bffc0a | ||
|
|
64515d77cf | ||
|
|
6058dca273 | ||
|
|
d01cba4a06 | ||
|
|
98aa9f97ea | ||
|
|
9c734ec439 | ||
|
|
e663da45b1 | ||
|
|
f52dffdaac | ||
|
|
e572506d4f | ||
|
|
416eba6ae6 | ||
|
|
3880854240 | ||
|
|
43d186a370 | ||
|
|
76df6f66d9 | ||
|
|
c189cd97a5 | ||
|
|
d83e28a1c3 | ||
|
|
3299f767d3 | ||
|
|
16a9724693 | ||
|
|
0ccb836444 | ||
|
|
067652aa80 | ||
|
|
1523d1b5b2 | ||
|
|
ea14e28dd8 | ||
|
|
d7750086b5 | ||
|
|
eb7216b4b1 | ||
|
|
1d62225019 | ||
|
|
bf5250c4a7 | ||
|
|
cdd0a864d1 | ||
|
|
692c1bef25 | ||
|
|
fe09d0e25f | ||
|
|
3ce18dc1dc | ||
|
|
6fb31abd84 | ||
|
|
7a301b455c | ||
|
|
5781a7b540 | ||
|
|
2efbeee5bf | ||
|
|
be4ff0f0f0 | ||
|
|
3ea52a24ef | ||
|
|
f179189b59 | ||
|
|
bc333f768f | ||
|
|
26c98e2b41 | ||
|
|
4b7732838d | ||
|
|
021b9ac5d5 | ||
|
|
5f94c7295a | ||
|
|
d9a9523c9a | ||
|
|
384d2343d5 | ||
|
|
7a387d86d6 | ||
|
|
330eef51e4 |
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 💬 Discord
|
||||
url: https://discord.gg/wHRQ9nFRcK
|
||||
about: For help and chatting with the community
|
||||
17
.github/ISSUE_TEMPLATE/question.yml
vendored
17
.github/ISSUE_TEMPLATE/question.yml
vendored
@@ -1,17 +0,0 @@
|
||||
name: ❓ Question
|
||||
description: "Submit a question"
|
||||
title: "❓ Question:"
|
||||
labels: [question]
|
||||
body:
|
||||
- type: textarea
|
||||
id: feature-description
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: "🙋♂️ Question"
|
||||
description: "A clear question. Please provide as much detail as possible."
|
||||
placeholder: "How do I ...?"
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Before submitting, please check if the question hasn't been asked before.
|
||||
23
.github/workflows/close_inactive_issues.yml
vendored
23
.github/workflows/close_inactive_issues.yml
vendored
@@ -1,23 +0,0 @@
|
||||
name: Close inactive issues
|
||||
on:
|
||||
schedule:
|
||||
- cron: "00 00 * * *"
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v4
|
||||
with:
|
||||
days-before-issue-stale: 30
|
||||
days-before-issue-close: 14
|
||||
exempt-issue-labels: "feature"
|
||||
stale-issue-label: "stale"
|
||||
stale-issue-message: "This issue is stale because it has been open for 30 days with no activity."
|
||||
close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale."
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
139
CHANGELOG.md
139
CHANGELOG.md
@@ -1,3 +1,142 @@
|
||||
## [0.25.0](https://github.com/stonith404/pingvin-share/compare/v0.24.2...v0.25.0) (2024-06-10)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add auto open share modal config for global. ([#474](https://github.com/stonith404/pingvin-share/issues/474)) ([4fd2903](https://github.com/stonith404/pingvin-share/commit/4fd29037a08dbe505bdd8cf20f6f114cbade8483))
|
||||
* **frontend:** locale for dates and tooltip for copy link button ([#492](https://github.com/stonith404/pingvin-share/issues/492)) ([1c7832a](https://github.com/stonith404/pingvin-share/commit/1c7832ad1fb445fd1dbe1c111be5a331eaa4b797))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* share size not displayed on my shares page ([c0cc16f](https://github.com/stonith404/pingvin-share/commit/c0cc16fa430bc64afb024c19d5faf24456bd417c))
|
||||
|
||||
## [0.24.2](https://github.com/stonith404/pingvin-share/compare/v0.24.1...v0.24.2) (2024-05-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* admin couldn't delete shares created by anonymous users ([7afda85](https://github.com/stonith404/pingvin-share/commit/7afda85f03d410a6c611860d0c3fb2b88a2e3679))
|
||||
* whitespace in title on homepage ([74cd520](https://github.com/stonith404/pingvin-share/commit/74cd520cb8c4ea87822ab6d54c0bf010455f401b))
|
||||
|
||||
## [0.24.1](https://github.com/stonith404/pingvin-share/compare/v0.24.0...v0.24.1) (2024-05-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* error on admin share management page if a share was created by an anonymous user ([c999df1](https://github.com/stonith404/pingvin-share/commit/c999df15e04a927f6e952db3c807b9591fb14894))
|
||||
|
||||
## [0.24.0](https://github.com/stonith404/pingvin-share/compare/v0.23.1...v0.24.0) (2024-05-04)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add admin-exclusive share-management page ([#461](https://github.com/stonith404/pingvin-share/issues/461)) ([3b1c9f1](https://github.com/stonith404/pingvin-share/commit/3b1c9f1efb7d02469e92537a2d1378b6cb412878))
|
||||
* add name property to share ([#462](https://github.com/stonith404/pingvin-share/issues/462)) ([b717663](https://github.com/stonith404/pingvin-share/commit/b717663b5c3a4a98e361e7e39b680f4852537c59))
|
||||
|
||||
## [0.23.1](https://github.com/stonith404/pingvin-share/compare/v0.23.0...v0.23.1) (2024-04-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **backend:** crash on unhandled promise rejections ([1da4fee](https://github.com/stonith404/pingvin-share/commit/1da4feeb895a13d0a0ae754bd716a84e8186d081))
|
||||
* changing the chunk size needed an app restart ([24e100b](https://github.com/stonith404/pingvin-share/commit/24e100bd7be8bf20778bdf2767aa35cae8d7e502))
|
||||
* disable js execution on raw file view ([9d1a12b](https://github.com/stonith404/pingvin-share/commit/9d1a12b0d1812214f1fe6fa56e3848091ce4945c))
|
||||
* incorrect layout on 404 page ([3c5e0ad](https://github.com/stonith404/pingvin-share/commit/3c5e0ad5134ee2d405ac420152b5825102f65bfc))
|
||||
* normal shares were added to the previous reverse share ([3972589](https://github.com/stonith404/pingvin-share/commit/3972589f76519b03074d916fb2460c795b1f0737))
|
||||
* redirect vulnerability on error, sign in and totp page ([384fd19](https://github.com/stonith404/pingvin-share/commit/384fd19203b63eeb4b952f83a9e1eaab1b19b90d))
|
||||
|
||||
## [0.23.0](https://github.com/stonith404/pingvin-share/compare/v0.22.2...v0.23.0) (2024-04-04)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add config variable to adjust chunk size ([0bfbaea](https://github.com/stonith404/pingvin-share/commit/0bfbaea49aad0c695fee6558c89c661687912e4f))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* delete share files if user gets deleted ([e71f6cd](https://github.com/stonith404/pingvin-share/commit/e71f6cd1598ed87366074398042a6b88675587ca))
|
||||
* error in logs if "allow unauthenticated shares" is enabled ([c6d8188](https://github.com/stonith404/pingvin-share/commit/c6d8188e4e33ba682551a3ca79205ff5a6d7ead5))
|
||||
* memory leak while uploading files by disabling base64 encoding of chunks ([7a15fbb](https://github.com/stonith404/pingvin-share/commit/7a15fbb4651c2fee32fb4c1ee2c9d7f12323feb0))
|
||||
|
||||
## [0.22.2](https://github.com/stonith404/pingvin-share/compare/v0.22.1...v0.22.2) (2024-02-29)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* extend access token cookie expiration ([013b988](https://github.com/stonith404/pingvin-share/commit/013b9886af5629b2ead6000b962267afc761c612))
|
||||
* reduce refresh access token calls ([1aa3d8e](https://github.com/stonith404/pingvin-share/commit/1aa3d8e5e89b3696cc9554f41e9ce13806dde406))
|
||||
* replace Nginx with Caddy to fix "premature close" error while downloading larger files ([43bff91](https://github.com/stonith404/pingvin-share/commit/43bff91db2ba4ec68d76e601f7bc42cb7a506bc5))
|
||||
|
||||
## [0.22.1](https://github.com/stonith404/pingvin-share/compare/v0.22.0...v0.22.1) (2024-02-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* back links on error modals ([f52dffd](https://github.com/stonith404/pingvin-share/commit/f52dffdaac5a893804525913943f3f4f99b7c55a))
|
||||
* prevent zoom on input field click on mobile ([9c734ec](https://github.com/stonith404/pingvin-share/commit/9c734ec439aeaeebe172caa41bf531e6d8b3fac3))
|
||||
* replace middleware backend url with local backend url ([76df6f6](https://github.com/stonith404/pingvin-share/commit/76df6f66d965dd751146468abfafb0c6acd46310))
|
||||
* user `id` and `totpVerified` can't be changed by user ([e663da4](https://github.com/stonith404/pingvin-share/commit/e663da45b1d15f5e6e33118e6a28e1504688034c))
|
||||
* user enumaration on forgot password page ([64515d7](https://github.com/stonith404/pingvin-share/commit/64515d77cfc116a243d78610395ccc383ba62940))
|
||||
|
||||
## [0.22.0](https://github.com/stonith404/pingvin-share/compare/v0.21.5...v0.22.0) (2024-02-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **translations:** typo in string ([c189cd9](https://github.com/stonith404/pingvin-share/commit/c189cd97a502cee8ea79e5187d9288d636d4983c))
|
||||
|
||||
## [0.21.5](https://github.com/stonith404/pingvin-share/compare/v0.21.4...v0.21.5) (2024-01-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* password can be changed with wrong password ([0ccb836](https://github.com/stonith404/pingvin-share/commit/0ccb8364448d27ea07c8b11972ff454d610893c6))
|
||||
|
||||
## [0.21.4](https://github.com/stonith404/pingvin-share/compare/v0.21.3...v0.21.4) (2024-01-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **frontend:** add navigateToLink button for CopyTextField. close [#372](https://github.com/stonith404/pingvin-share/issues/372). ([#376](https://github.com/stonith404/pingvin-share/issues/376)) ([d775008](https://github.com/stonith404/pingvin-share/commit/d7750086b5b796cfc70d8dc0c7d0ab4bd1996ca0))
|
||||
|
||||
## [0.21.3](https://github.com/stonith404/pingvin-share/compare/v0.21.2...v0.21.3) (2024-01-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* don't show validation error on upload modal if password or max views are empty ([fe09d0e](https://github.com/stonith404/pingvin-share/commit/fe09d0e25f6fbfc4e1c9302054d3387fe8b1f0ea))
|
||||
|
||||
## [0.21.2](https://github.com/stonith404/pingvin-share/compare/v0.21.1...v0.21.2) (2023-12-29)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* missing logo images on fresh installation ([6fb31ab](https://github.com/stonith404/pingvin-share/commit/6fb31abd84b22cd464b6b45bf7ca6f83853e8720))
|
||||
* missing translations on reset password page ([7a301b4](https://github.com/stonith404/pingvin-share/commit/7a301b455cdea4b1dbc04cc6223e094fee9aca7b))
|
||||
|
||||
## [0.21.1](https://github.com/stonith404/pingvin-share/compare/v0.21.0...v0.21.1) (2023-12-20)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **oauth:** add oidc username claim ([#357](https://github.com/stonith404/pingvin-share/issues/357)) ([3ea52a2](https://github.com/stonith404/pingvin-share/commit/3ea52a24ef7c3b6845bc13382616ea0c8d784585))
|
||||
|
||||
## [0.21.0](https://github.com/stonith404/pingvin-share/compare/v0.20.3...v0.21.0) (2023-12-01)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **oauth:** limited discord server sign-in ([#346](https://github.com/stonith404/pingvin-share/issues/346)) ([5f94c72](https://github.com/stonith404/pingvin-share/commit/5f94c7295ab8594ed2ed615628214e869a02da2d))
|
||||
|
||||
## [0.20.3](https://github.com/stonith404/pingvin-share/compare/v0.20.2...v0.20.3) (2023-11-17)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* max expiration gets ignored if expiration is set to "never" ([330eef5](https://github.com/stonith404/pingvin-share/commit/330eef51e4f3f3fb29833bc9337e705553340aaa))
|
||||
|
||||
## [0.20.2](https://github.com/stonith404/pingvin-share/compare/v0.20.1...v0.20.2) (2023-11-11)
|
||||
|
||||
|
||||
|
||||
15
Caddyfile
Normal file
15
Caddyfile
Normal file
@@ -0,0 +1,15 @@
|
||||
:3000 {
|
||||
# Reverse proxy for /api
|
||||
reverse_proxy /api/* http://localhost:8080 {
|
||||
header_up X-Forwarded-Host {host}:{server_port}
|
||||
header_up X-Forwarded-For {remote_host}
|
||||
header_up X-Forwarded-Proto {scheme}
|
||||
}
|
||||
|
||||
# Reverse proxy for all other requests
|
||||
reverse_proxy http://localhost:3333 {
|
||||
header_up X-Forwarded-Host {host}:{server_port}
|
||||
header_up X-Forwarded-For {remote_host}
|
||||
header_up X-Forwarded-Proto {scheme}
|
||||
}
|
||||
}
|
||||
17
Dockerfile
17
Dockerfile
@@ -30,12 +30,12 @@ RUN npm run build && npm prune --production
|
||||
FROM node:20-alpine AS runner
|
||||
ENV NODE_ENV=docker
|
||||
|
||||
# Alpine specific dependencies
|
||||
RUN apk update --no-cache
|
||||
RUN apk upgrade --no-cache
|
||||
RUN apk add --no-cache curl nginx
|
||||
# Install Caddy
|
||||
RUN apk update --no-cache \
|
||||
&& apk upgrade --no-cache \
|
||||
&& apk add --no-cache curl caddy
|
||||
|
||||
COPY ./nginx/nginx.conf /etc/nginx/nginx.conf
|
||||
COPY ./Caddyfile /etc/caddy/Caddyfile
|
||||
|
||||
WORKDIR /opt/app/frontend
|
||||
COPY --from=frontend-builder /opt/app/public ./public
|
||||
@@ -53,9 +53,8 @@ WORKDIR /opt/app
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
# Add a health check to ensure the container is healthy
|
||||
# Health check remains unchanged
|
||||
HEALTHCHECK --interval=10s --timeout=3s CMD curl -f http://localhost:3000/api/health || exit 1
|
||||
|
||||
# Application startup
|
||||
# HOSTNAME=0.0.0.0 fixes https://github.com/vercel/next.js/issues/51684. It can be removed as soon as the issue is fixed
|
||||
CMD cp -rn /tmp/img /opt/app/frontend/public && nginx && PORT=3333 HOSTNAME=0.0.0.0 node frontend/server.js & cd backend && npm run prod
|
||||
# Application startup updated for Caddy
|
||||
CMD cp -rn /tmp/img/* /opt/app/frontend/public/img && caddy run --config /etc/caddy/Caddyfile & PORT=3333 HOSTNAME=0.0.0.0 node frontend/server.js & cd backend && npm run prod
|
||||
17
README.md
17
README.md
@@ -1,8 +1,8 @@
|
||||
# <div align="center"><img src="https://user-images.githubusercontent.com/58886915/166198400-c2134044-1198-4647-a8b6-da9c4a204c68.svg" width="40"/> </br>Pingvin Share</div>
|
||||
|
||||
---
|
||||
[](https://discord.gg/wHRQ9nFRcK) [](https://crowdin.com/project/pingvin-share) [](https://github.com/sponsors/stonith404)
|
||||
|
||||
_Read this in another language: [Spanish](/docs/README.es.md), [English](/README.md), [Simplified Chinese](/docs/README.zh-cn.md), [日本語](/docs/README.ja-jp.md)_
|
||||
_Read this in another language: [Spanish](/docs/README.es.md), [English](/README.md), [简体中文](/docs/README.zh-cn.md), [日本語](/docs/README.ja-jp.md)_
|
||||
|
||||
---
|
||||
|
||||
@@ -31,7 +31,7 @@ Pingvin Share is self-hosted file sharing platform and an alternative for WeTran
|
||||
### Installation with Docker (recommended)
|
||||
|
||||
1. Download the `docker-compose.yml` file
|
||||
2. Run `docker-compose up -d`
|
||||
2. Run `docker compose up -d`
|
||||
|
||||
The website is now listening on `http://localhost:3000`, have fun with Pingvin Share 🐧!
|
||||
|
||||
@@ -60,10 +60,11 @@ pm2 start --name="pingvin-share-backend" npm -- run prod
|
||||
cd ../frontend
|
||||
npm install
|
||||
npm run build
|
||||
pm2 start --name="pingvin-share-frontend" npm -- run start
|
||||
API_URL=http://localhost:8080 # Set the URL of the backend, default: http://localhost:8080
|
||||
pm2 start --name="pingvin-share-frontend" .next/standalone/server.js
|
||||
```
|
||||
|
||||
**Uploading Large Files**: By default, Pingvin Share uses a built-in reverse proxy to reduce the installation steps. However, this reverse proxy is not optimized for uploading large files. If you wish to upload larger files, you can either use the Docker installation or set up your own reverse proxy. An example configuration for Nginx can be found in `/nginx/nginx.conf`.
|
||||
**Uploading Large Files**: By default, Pingvin Share uses a built-in reverse proxy to reduce the installation steps. However, this reverse proxy is not optimized for uploading large files. If you wish to upload larger files, you can either use the Docker installation or set up your own reverse proxy. An example configuration for Caddy can be found in `./Caddyfile`.
|
||||
|
||||
The website is now listening on `http://localhost:3000`, have fun with Pingvin Share 🐧!
|
||||
|
||||
@@ -86,6 +87,7 @@ View the [OAuth 2 guide](/docs/oauth2-guide.md) for more information.
|
||||
### Additional resources
|
||||
|
||||
- [Synology NAS installation](https://mariushosting.com/how-to-install-pingvin-share-on-your-synology-nas/)
|
||||
- [Zeabur installation](https://zeabur.com/templates/19G6OK)
|
||||
|
||||
### Upgrade to a new version
|
||||
|
||||
@@ -114,18 +116,21 @@ docker compose up -d
|
||||
|
||||
# Start the backend
|
||||
cd backend
|
||||
npm install
|
||||
npm run build
|
||||
pm2 restart pingvin-share-backend
|
||||
|
||||
# Start the frontend
|
||||
cd ../frontend
|
||||
npm install
|
||||
npm run build
|
||||
API_URL=http://localhost:8080 # Set the URL of the backend, default: http://localhost:8080
|
||||
pm2 restart pingvin-share-frontend
|
||||
```
|
||||
|
||||
### Configuration
|
||||
|
||||
You can customize Pingvin Share by going to the configuration page in your admin dashboard.
|
||||
You can customize Pingvin Share like changing your domain by going to the configuration page in your admin dashboard `/admin/config`.
|
||||
|
||||
#### Environment variables
|
||||
|
||||
|
||||
9528
backend/package-lock.json
generated
9528
backend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pingvin-share-backend",
|
||||
"version": "0.20.2",
|
||||
"version": "0.25.0",
|
||||
"scripts": {
|
||||
"build": "nest build",
|
||||
"dev": "cross-env NODE_ENV=development nest start --watch",
|
||||
@@ -13,73 +13,73 @@
|
||||
"seed": "ts-node prisma/seed/config.seed.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@nestjs/cache-manager": "^2.1.0",
|
||||
"@nestjs/common": "^10.1.2",
|
||||
"@nestjs/config": "^3.0.0",
|
||||
"@nestjs/core": "^10.1.2",
|
||||
"@nestjs/jwt": "^10.1.0",
|
||||
"@nestjs/passport": "^10.0.0",
|
||||
"@nestjs/platform-express": "^10.1.2",
|
||||
"@nestjs/schedule": "^3.0.1",
|
||||
"@nestjs/swagger": "^7.1.4",
|
||||
"@nestjs/cache-manager": "^2.2.2",
|
||||
"@nestjs/common": "^10.3.8",
|
||||
"@nestjs/config": "^3.2.2",
|
||||
"@nestjs/core": "^10.3.8",
|
||||
"@nestjs/jwt": "^10.2.0",
|
||||
"@nestjs/passport": "^10.0.3",
|
||||
"@nestjs/platform-express": "^10.3.8",
|
||||
"@nestjs/schedule": "^3.0.4",
|
||||
"@nestjs/swagger": "^7.3.1",
|
||||
"@nestjs/throttler": "^4.2.1",
|
||||
"@prisma/client": "^5.0.0",
|
||||
"archiver": "^5.3.1",
|
||||
"argon2": "^0.30.3",
|
||||
"@prisma/client": "^5.14.0",
|
||||
"archiver": "^5.3.2",
|
||||
"argon2": "^0.40.1",
|
||||
"body-parser": "^1.20.2",
|
||||
"cache-manager": "^5.2.4",
|
||||
"clamscan": "^2.1.2",
|
||||
"cache-manager": "^5.5.2",
|
||||
"clamscan": "^2.2.1",
|
||||
"class-transformer": "^0.5.1",
|
||||
"class-validator": "^0.14.0",
|
||||
"class-validator": "^0.14.1",
|
||||
"content-disposition": "^0.5.4",
|
||||
"cookie-parser": "^1.4.6",
|
||||
"mime-types": "^2.1.35",
|
||||
"moment": "^2.29.4",
|
||||
"nanoid": "^3.3.6",
|
||||
"moment": "^2.30.1",
|
||||
"nanoid": "^3.3.7",
|
||||
"node-fetch": "^2.7.0",
|
||||
"nodemailer": "^6.9.4",
|
||||
"nodemailer": "^6.9.13",
|
||||
"otplib": "^12.0.1",
|
||||
"passport": "^0.6.0",
|
||||
"passport": "^0.7.0",
|
||||
"passport-jwt": "^4.0.1",
|
||||
"passport-local": "^1.0.0",
|
||||
"qrcode-svg": "^1.1.0",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"rimraf": "^5.0.1",
|
||||
"reflect-metadata": "^0.1.12",
|
||||
"rimraf": "^5.0.7",
|
||||
"rxjs": "^7.8.1",
|
||||
"sharp": "^0.32.4",
|
||||
"ts-node": "^10.9.1"
|
||||
"ts-node": "^10.9.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/cli": "^10.1.10",
|
||||
"@nestjs/schematics": "^10.0.1",
|
||||
"@nestjs/testing": "^10.1.2",
|
||||
"@types/archiver": "^5.3.2",
|
||||
"@types/clamscan": "^2.0.4",
|
||||
"@types/cookie-parser": "^1.4.3",
|
||||
"@nestjs/cli": "^10.3.2",
|
||||
"@nestjs/schematics": "^10.1.1",
|
||||
"@nestjs/testing": "^10.3.8",
|
||||
"@types/archiver": "^5.3.4",
|
||||
"@types/clamscan": "^2.0.8",
|
||||
"@types/cookie-parser": "^1.4.7",
|
||||
"@types/cron": "^2.0.1",
|
||||
"@types/express": "^4.17.17",
|
||||
"@types/mime-types": "^2.1.1",
|
||||
"@types/multer": "^1.4.7",
|
||||
"@types/node": "^20.4.5",
|
||||
"@types/node-fetch": "^2.6.6",
|
||||
"@types/nodemailer": "^6.4.9",
|
||||
"@types/passport-jwt": "^3.0.9",
|
||||
"@types/qrcode-svg": "^1.1.1",
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/mime-types": "^2.1.4",
|
||||
"@types/multer": "^1.4.11",
|
||||
"@types/node": "^20.12.12",
|
||||
"@types/node-fetch": "^2.6.11",
|
||||
"@types/nodemailer": "^6.4.15",
|
||||
"@types/passport-jwt": "^3.0.13",
|
||||
"@types/qrcode-svg": "^1.1.4",
|
||||
"@types/sharp": "^0.31.1",
|
||||
"@types/supertest": "^2.0.12",
|
||||
"@typescript-eslint/eslint-plugin": "^6.2.0",
|
||||
"@typescript-eslint/parser": "^6.2.0",
|
||||
"@types/supertest": "^2.0.16",
|
||||
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
||||
"@typescript-eslint/parser": "^6.21.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "^8.46.0",
|
||||
"eslint-config-prettier": "^8.9.0",
|
||||
"eslint-plugin-prettier": "^5.0.0",
|
||||
"newman": "^5.3.2",
|
||||
"prettier": "^3.0.0",
|
||||
"prisma": "^5.0.0",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-prettier": "^8.10.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"newman": "^6.1.2",
|
||||
"prettier": "^3.2.5",
|
||||
"prisma": "^5.14.0",
|
||||
"source-map-support": "^0.5.21",
|
||||
"ts-loader": "^9.4.4",
|
||||
"ts-loader": "^9.5.1",
|
||||
"tsconfig-paths": "4.2.0",
|
||||
"typescript": "^5.1.6",
|
||||
"wait-on": "^7.0.1"
|
||||
"typescript": "^5.4.5",
|
||||
"wait-on": "^7.2.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "Share" ADD COLUMN "name" TEXT;
|
||||
@@ -75,6 +75,7 @@ model Share {
|
||||
id String @id @default(uuid())
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
name String?
|
||||
uploadLocked Boolean @default(false)
|
||||
isZipReady Boolean @default(false)
|
||||
views Int @default(0)
|
||||
|
||||
@@ -51,6 +51,16 @@ const configVariables: ConfigVariables = {
|
||||
type: "number",
|
||||
defaultValue: "9",
|
||||
},
|
||||
chunkSize: {
|
||||
type: "number",
|
||||
defaultValue: "10000000",
|
||||
secret: false,
|
||||
},
|
||||
autoOpenShareModal: {
|
||||
type: "boolean",
|
||||
defaultValue: "false",
|
||||
secret: false,
|
||||
},
|
||||
},
|
||||
email: {
|
||||
enableShareEmailRecipients: {
|
||||
@@ -180,6 +190,10 @@ const configVariables: ConfigVariables = {
|
||||
type: "boolean",
|
||||
defaultValue: "false",
|
||||
},
|
||||
"discord-limitedGuild": {
|
||||
type: "string",
|
||||
defaultValue: "",
|
||||
},
|
||||
"discord-clientId": {
|
||||
type: "string",
|
||||
defaultValue: "",
|
||||
@@ -197,6 +211,10 @@ const configVariables: ConfigVariables = {
|
||||
type: "string",
|
||||
defaultValue: "",
|
||||
},
|
||||
"oidc-usernameClaim": {
|
||||
type: "string",
|
||||
defaultValue: "",
|
||||
},
|
||||
"oidc-clientId": {
|
||||
type: "string",
|
||||
defaultValue: "",
|
||||
@@ -262,8 +280,8 @@ async function migrateConfigVariables() {
|
||||
for (const existingConfigVariable of existingConfigVariables) {
|
||||
const configVariable =
|
||||
configVariables[existingConfigVariable.category]?.[
|
||||
existingConfigVariable.name
|
||||
];
|
||||
existingConfigVariable.name
|
||||
];
|
||||
if (!configVariable) {
|
||||
await prisma.config.delete({
|
||||
where: {
|
||||
|
||||
@@ -96,9 +96,9 @@ export class AuthController {
|
||||
|
||||
@Post("resetPassword/:email")
|
||||
@Throttle(5, 5 * 60)
|
||||
@HttpCode(204)
|
||||
@HttpCode(202)
|
||||
async requestResetPassword(@Param("email") email: string) {
|
||||
return await this.authService.requestResetPassword(email);
|
||||
this.authService.requestResetPassword(email);
|
||||
}
|
||||
|
||||
@Post("resetPassword")
|
||||
|
||||
@@ -99,7 +99,7 @@ export class AuthService {
|
||||
include: { resetPasswordToken: true },
|
||||
});
|
||||
|
||||
if (!user) throw new BadRequestException("User not found");
|
||||
if (!user) return;
|
||||
|
||||
// Delete old reset password token
|
||||
if (user.resetPasswordToken) {
|
||||
@@ -139,7 +139,7 @@ export class AuthService {
|
||||
|
||||
async updatePassword(user: User, newPassword: string, oldPassword?: string) {
|
||||
const isPasswordValid =
|
||||
!user.password || !(await argon.verify(user.password, oldPassword));
|
||||
!user.password || (await argon.verify(user.password, oldPassword));
|
||||
|
||||
if (!isPasswordValid) throw new ForbiddenException("Invalid password");
|
||||
|
||||
@@ -227,13 +227,16 @@ export class AuthService {
|
||||
accessToken?: string,
|
||||
) {
|
||||
if (accessToken)
|
||||
response.cookie("access_token", accessToken, { sameSite: "lax" });
|
||||
response.cookie("access_token", accessToken, {
|
||||
sameSite: "lax",
|
||||
maxAge: 1000 * 60 * 60 * 24 * 30 * 3, // 3 months
|
||||
});
|
||||
if (refreshToken)
|
||||
response.cookie("refresh_token", refreshToken, {
|
||||
path: "/api/auth/token",
|
||||
httpOnly: true,
|
||||
sameSite: "strict",
|
||||
maxAge: 1000 * 60 * 60 * 24 * 30 * 3,
|
||||
maxAge: 1000 * 60 * 60 * 24 * 30 * 3, // 3 months
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -26,18 +26,21 @@ export class FileController {
|
||||
@SkipThrottle()
|
||||
@UseGuards(CreateShareGuard, ShareOwnerGuard)
|
||||
async create(
|
||||
@Query() query: any,
|
||||
|
||||
@Query()
|
||||
query: {
|
||||
id: string;
|
||||
name: string;
|
||||
chunkIndex: string;
|
||||
totalChunks: string;
|
||||
},
|
||||
@Body() body: string,
|
||||
@Param("shareId") shareId: string,
|
||||
) {
|
||||
const { id, name, chunkIndex, totalChunks } = query;
|
||||
|
||||
// Data can be empty if the file is empty
|
||||
const data = body.toString().split(",")[1] ?? "";
|
||||
|
||||
return await this.fileService.create(
|
||||
data,
|
||||
body,
|
||||
{ index: parseInt(chunkIndex), total: parseInt(totalChunks) },
|
||||
{ id, name },
|
||||
shareId,
|
||||
@@ -72,6 +75,7 @@ export class FileController {
|
||||
const headers = {
|
||||
"Content-Type": file.metaData.mimeType,
|
||||
"Content-Length": file.metaData.size,
|
||||
"Content-Security-Policy": "script-src 'none'",
|
||||
};
|
||||
|
||||
if (download === "true") {
|
||||
|
||||
@@ -47,7 +47,7 @@ export class FileService {
|
||||
}
|
||||
|
||||
// If the sent chunk index and the expected chunk index doesn't match throw an error
|
||||
const chunkSize = 10 * 1024 * 1024; // 10MB
|
||||
const chunkSize = this.config.get("share.chunkSize");
|
||||
const expectedChunkIndex = Math.ceil(diskFileSize / chunkSize);
|
||||
|
||||
if (expectedChunkIndex != chunk.index)
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
import { ClassSerializerInterceptor, ValidationPipe } from "@nestjs/common";
|
||||
import {
|
||||
ClassSerializerInterceptor,
|
||||
Logger,
|
||||
ValidationPipe,
|
||||
} from "@nestjs/common";
|
||||
import { NestFactory, Reflector } from "@nestjs/core";
|
||||
import { NestExpressApplication } from "@nestjs/platform-express";
|
||||
import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";
|
||||
import * as bodyParser from "body-parser";
|
||||
import * as cookieParser from "cookie-parser";
|
||||
import { NextFunction, Request, Response } from "express";
|
||||
import * as fs from "fs";
|
||||
import { AppModule } from "./app.module";
|
||||
import { ConfigService } from "./config/config.service";
|
||||
import { DATA_DIRECTORY } from "./constants";
|
||||
|
||||
async function bootstrap() {
|
||||
@@ -13,7 +19,16 @@ async function bootstrap() {
|
||||
app.useGlobalPipes(new ValidationPipe({ whitelist: true }));
|
||||
app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get(Reflector)));
|
||||
|
||||
app.use(bodyParser.raw({ type: "application/octet-stream", limit: "20mb" }));
|
||||
const config = app.get<ConfigService>(ConfigService);
|
||||
|
||||
app.use((req: Request, res: Response, next: NextFunction) => {
|
||||
const chunkSize = config.get("share.chunkSize");
|
||||
bodyParser.raw({
|
||||
type: "application/octet-stream",
|
||||
limit: `${chunkSize}B`,
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
app.use(cookieParser());
|
||||
app.set("trust proxy", true);
|
||||
|
||||
@@ -34,5 +49,8 @@ async function bootstrap() {
|
||||
}
|
||||
|
||||
await app.listen(parseInt(process.env.PORT) || 8080);
|
||||
|
||||
const logger = new Logger("UnhandledAsyncError");
|
||||
process.on("unhandledRejection", (e) => logger.error(e));
|
||||
}
|
||||
bootstrap();
|
||||
|
||||
@@ -7,7 +7,7 @@ export class ErrorPageException extends Error {
|
||||
*/
|
||||
constructor(
|
||||
public readonly key: string = "default",
|
||||
public readonly redirect: string = "/",
|
||||
public readonly redirect?: string,
|
||||
public readonly params?: string[],
|
||||
) {
|
||||
super("error");
|
||||
|
||||
@@ -9,14 +9,27 @@ export class ErrorPageExceptionFilter implements ExceptionFilter {
|
||||
constructor(private config: ConfigService) {}
|
||||
|
||||
catch(exception: ErrorPageException, host: ArgumentsHost) {
|
||||
this.logger.error(exception);
|
||||
this.logger.error(
|
||||
JSON.stringify({
|
||||
error: exception.key,
|
||||
params: exception.params,
|
||||
redirect: exception.redirect,
|
||||
}),
|
||||
);
|
||||
|
||||
const ctx = host.switchToHttp();
|
||||
const response = ctx.getResponse();
|
||||
|
||||
const url = new URL(`${this.config.get("general.appUrl")}/error`);
|
||||
url.searchParams.set("redirect", exception.redirect);
|
||||
url.searchParams.set("error", exception.key);
|
||||
if (exception.redirect) {
|
||||
url.searchParams.set("redirect", exception.redirect);
|
||||
} else {
|
||||
const redirect = ctx.getRequest().cookies.access_token
|
||||
? "/account"
|
||||
: "/auth/signIn";
|
||||
url.searchParams.set("redirect", redirect);
|
||||
}
|
||||
if (exception.params) {
|
||||
url.searchParams.set("params", exception.params.join(","));
|
||||
}
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
import { OAuthProvider, OAuthToken } from "./oauthProvider.interface";
|
||||
import { Injectable } from "@nestjs/common";
|
||||
import fetch from "node-fetch";
|
||||
import { ConfigService } from "../../config/config.service";
|
||||
import { OAuthCallbackDto } from "../dto/oauthCallback.dto";
|
||||
import { OAuthSignInDto } from "../dto/oauthSignIn.dto";
|
||||
import { ConfigService } from "../../config/config.service";
|
||||
import { BadRequestException, Injectable } from "@nestjs/common";
|
||||
import fetch from "node-fetch";
|
||||
|
||||
import { ErrorPageException } from "../exceptions/errorPage.exception";
|
||||
import { OAuthProvider, OAuthToken } from "./oauthProvider.interface";
|
||||
@Injectable()
|
||||
export class DiscordProvider implements OAuthProvider<DiscordToken> {
|
||||
constructor(private config: ConfigService) {}
|
||||
|
||||
getAuthEndpoint(state: string): Promise<string> {
|
||||
let scope = "identify email";
|
||||
if (this.config.get("oauth.discord-limitedGuild")) {
|
||||
scope += " guilds";
|
||||
}
|
||||
return Promise.resolve(
|
||||
"https://discord.com/api/oauth2/authorize?" +
|
||||
new URLSearchParams({
|
||||
@@ -17,8 +21,8 @@ export class DiscordProvider implements OAuthProvider<DiscordToken> {
|
||||
redirect_uri:
|
||||
this.config.get("general.appUrl") + "/api/oauth/callback/discord",
|
||||
response_type: "code",
|
||||
state: state,
|
||||
scope: "identify email",
|
||||
state,
|
||||
scope,
|
||||
}).toString(),
|
||||
);
|
||||
}
|
||||
@@ -69,7 +73,14 @@ export class DiscordProvider implements OAuthProvider<DiscordToken> {
|
||||
});
|
||||
const user = (await res.json()) as DiscordUser;
|
||||
if (user.verified === false) {
|
||||
throw new BadRequestException("Unverified account.");
|
||||
throw new ErrorPageException("unverified_account", undefined, [
|
||||
"provider_discord",
|
||||
]);
|
||||
}
|
||||
|
||||
const guild = this.config.get("oauth.discord-limitedGuild");
|
||||
if (guild) {
|
||||
await this.checkLimitedGuild(token, guild);
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -79,6 +90,24 @@ export class DiscordProvider implements OAuthProvider<DiscordToken> {
|
||||
email: user.email,
|
||||
};
|
||||
}
|
||||
|
||||
async checkLimitedGuild(token: OAuthToken<DiscordToken>, guildId: string) {
|
||||
try {
|
||||
const res = await fetch("https://discord.com/api/v10/users/@me/guilds", {
|
||||
method: "get",
|
||||
headers: {
|
||||
Accept: "application/json",
|
||||
Authorization: `${token.tokenType || "Bearer"} ${token.accessToken}`,
|
||||
},
|
||||
});
|
||||
const guilds = (await res.json()) as DiscordPartialGuild[];
|
||||
if (!guilds.some((guild) => guild.id === guildId)) {
|
||||
throw new ErrorPageException("discord_guild_permission_denied");
|
||||
}
|
||||
} catch {
|
||||
throw new ErrorPageException("discord_guild_permission_denied");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export interface DiscordToken {
|
||||
@@ -96,3 +125,12 @@ export interface DiscordUser {
|
||||
email: string;
|
||||
verified: boolean;
|
||||
}
|
||||
|
||||
export interface DiscordPartialGuild {
|
||||
id: string;
|
||||
name: string;
|
||||
icon: string;
|
||||
owner: boolean;
|
||||
permissions: string;
|
||||
features: string[];
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { BadRequestException } from "@nestjs/common";
|
||||
import { Logger } from "@nestjs/common";
|
||||
import fetch from "node-fetch";
|
||||
import { ConfigService } from "../../config/config.service";
|
||||
import { JwtService } from "@nestjs/jwt";
|
||||
@@ -7,11 +7,15 @@ import { nanoid } from "nanoid";
|
||||
import { OAuthCallbackDto } from "../dto/oauthCallback.dto";
|
||||
import { OAuthProvider, OAuthToken } from "./oauthProvider.interface";
|
||||
import { OAuthSignInDto } from "../dto/oauthSignIn.dto";
|
||||
import { ErrorPageException } from "../exceptions/errorPage.exception";
|
||||
|
||||
export abstract class GenericOidcProvider implements OAuthProvider<OidcToken> {
|
||||
protected discoveryUri: string;
|
||||
private configuration: OidcConfigurationCache;
|
||||
private jwk: OidcJwkCache;
|
||||
private logger: Logger = new Logger(
|
||||
Object.getPrototypeOf(this).constructor.name,
|
||||
);
|
||||
|
||||
protected constructor(
|
||||
protected name: string,
|
||||
@@ -104,6 +108,7 @@ export abstract class GenericOidcProvider implements OAuthProvider<OidcToken> {
|
||||
async getUserInfo(
|
||||
token: OAuthToken<OidcToken>,
|
||||
query: OAuthCallbackDto,
|
||||
claim?: string,
|
||||
): Promise<OAuthSignInDto> {
|
||||
const idTokenData = this.decodeIdToken(token.idToken);
|
||||
// maybe it's not necessary to verify the id token since it's directly obtained from the provider
|
||||
@@ -112,14 +117,36 @@ export abstract class GenericOidcProvider implements OAuthProvider<OidcToken> {
|
||||
const nonce = await this.cache.get(key);
|
||||
await this.cache.del(key);
|
||||
if (nonce !== idTokenData.nonce) {
|
||||
throw new BadRequestException("Invalid token");
|
||||
this.logger.error(
|
||||
`Invalid nonce. Expected ${nonce}, but got ${idTokenData.nonce}`,
|
||||
);
|
||||
throw new ErrorPageException("invalid_token");
|
||||
}
|
||||
|
||||
const username = claim
|
||||
? idTokenData[claim]
|
||||
: idTokenData.name ||
|
||||
idTokenData.nickname ||
|
||||
idTokenData.preferred_username;
|
||||
|
||||
if (!username) {
|
||||
this.logger.error(
|
||||
`Can not get username from ID Token ${JSON.stringify(
|
||||
idTokenData,
|
||||
undefined,
|
||||
2,
|
||||
)}`,
|
||||
);
|
||||
throw new ErrorPageException("cannot_get_user_info", undefined, [
|
||||
`provider_${this.name}`,
|
||||
]);
|
||||
}
|
||||
|
||||
return {
|
||||
provider: this.name as any,
|
||||
email: idTokenData.email,
|
||||
providerId: idTokenData.sub,
|
||||
providerUsername: idTokenData.name,
|
||||
providerUsername: username,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -204,5 +231,7 @@ export interface OidcIdToken {
|
||||
iat: number;
|
||||
email: string;
|
||||
name: string;
|
||||
nickname: string;
|
||||
preferred_username: string;
|
||||
nonce: string;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { OAuthProvider, OAuthToken } from "./oauthProvider.interface";
|
||||
import { Injectable } from "@nestjs/common";
|
||||
import fetch from "node-fetch";
|
||||
import { ConfigService } from "../../config/config.service";
|
||||
import { OAuthCallbackDto } from "../dto/oauthCallback.dto";
|
||||
import { OAuthSignInDto } from "../dto/oauthSignIn.dto";
|
||||
import { ConfigService } from "../../config/config.service";
|
||||
import fetch from "node-fetch";
|
||||
import { BadRequestException, Injectable } from "@nestjs/common";
|
||||
import { ErrorPageException } from "../exceptions/errorPage.exception";
|
||||
import { OAuthProvider, OAuthToken } from "./oauthProvider.interface";
|
||||
|
||||
@Injectable()
|
||||
export class GitHubProvider implements OAuthProvider<GitHubToken> {
|
||||
@@ -48,12 +49,12 @@ export class GitHubProvider implements OAuthProvider<GitHubToken> {
|
||||
|
||||
async getUserInfo(token: OAuthToken<GitHubToken>): Promise<OAuthSignInDto> {
|
||||
if (!token.scope.includes("user:email")) {
|
||||
throw new BadRequestException("No email permission granted");
|
||||
throw new ErrorPageException("no_email", undefined, ["provider_github"]);
|
||||
}
|
||||
const user = await this.getGitHubUser(token);
|
||||
const email = await this.getGitHubEmail(token);
|
||||
if (!email) {
|
||||
throw new BadRequestException("No email found");
|
||||
throw new ErrorPageException("no_email", undefined, ["provider_github"]);
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import { GenericOidcProvider } from "./genericOidc.provider";
|
||||
import { GenericOidcProvider, OidcToken } from "./genericOidc.provider";
|
||||
import { Inject, Injectable } from "@nestjs/common";
|
||||
import { ConfigService } from "../../config/config.service";
|
||||
import { JwtService } from "@nestjs/jwt";
|
||||
import { CACHE_MANAGER } from "@nestjs/cache-manager";
|
||||
import { Cache } from "cache-manager";
|
||||
import { OAuthCallbackDto } from "../dto/oauthCallback.dto";
|
||||
import { OAuthSignInDto } from "../dto/oauthSignIn.dto";
|
||||
import { OAuthToken } from "./oauthProvider.interface";
|
||||
|
||||
@Injectable()
|
||||
export class OidcProvider extends GenericOidcProvider {
|
||||
@@ -24,4 +27,13 @@ export class OidcProvider extends GenericOidcProvider {
|
||||
protected getDiscoveryUri(): string {
|
||||
return this.config.get("oauth.oidc-discoveryUri");
|
||||
}
|
||||
|
||||
getUserInfo(
|
||||
token: OAuthToken<OidcToken>,
|
||||
query: OAuthCallbackDto,
|
||||
_?: string,
|
||||
): Promise<OAuthSignInDto> {
|
||||
const claim = this.config.get("oauth.oidc-usernameClaim") || undefined;
|
||||
return super.getUserInfo(token, query, claim);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ export class ReverseShareTokenWithShares extends OmitType(ReverseShareDTO, [
|
||||
@Type(() => OmitType(MyShareDTO, ["recipients", "hasPassword"] as const))
|
||||
shares: Omit<
|
||||
MyShareDTO,
|
||||
"recipients" | "files" | "from" | "fromList" | "hasPassword"
|
||||
"recipients" | "files" | "from" | "fromList" | "hasPassword" | "size"
|
||||
>[];
|
||||
|
||||
@Expose()
|
||||
|
||||
27
backend/src/share/dto/adminShare.dto.ts
Normal file
27
backend/src/share/dto/adminShare.dto.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { OmitType } from "@nestjs/swagger";
|
||||
import { Expose, plainToClass } from "class-transformer";
|
||||
import { ShareDTO } from "./share.dto";
|
||||
|
||||
export class AdminShareDTO extends OmitType(ShareDTO, [
|
||||
"files",
|
||||
"from",
|
||||
"fromList",
|
||||
] as const) {
|
||||
@Expose()
|
||||
views: number;
|
||||
|
||||
@Expose()
|
||||
createdAt: Date;
|
||||
|
||||
from(partial: Partial<AdminShareDTO>) {
|
||||
return plainToClass(AdminShareDTO, partial, {
|
||||
excludeExtraneousValues: true,
|
||||
});
|
||||
}
|
||||
|
||||
fromList(partial: Partial<AdminShareDTO>[]) {
|
||||
return partial.map((part) =>
|
||||
plainToClass(AdminShareDTO, part, { excludeExtraneousValues: true }),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,10 @@ export class CreateShareDTO {
|
||||
@Length(3, 50)
|
||||
id: string;
|
||||
|
||||
@Length(3, 30)
|
||||
@IsOptional()
|
||||
name: string;
|
||||
|
||||
@IsString()
|
||||
expiration: string;
|
||||
|
||||
|
||||
@@ -6,6 +6,9 @@ export class ShareDTO {
|
||||
@Expose()
|
||||
id: string;
|
||||
|
||||
@Expose()
|
||||
name?: string;
|
||||
|
||||
@Expose()
|
||||
expiration: Date;
|
||||
|
||||
@@ -23,6 +26,9 @@ export class ShareDTO {
|
||||
@Expose()
|
||||
hasPassword: boolean;
|
||||
|
||||
@Expose()
|
||||
size: number;
|
||||
|
||||
from(partial: Partial<ShareDTO>) {
|
||||
return plainToClass(ShareDTO, partial, { excludeExtraneousValues: true });
|
||||
}
|
||||
|
||||
@@ -20,9 +20,8 @@ export class CreateShareGuard extends JwtGuard {
|
||||
|
||||
if (!reverseShareTokenId) return false;
|
||||
|
||||
const isReverseShareTokenValid = await this.reverseShareService.isValid(
|
||||
reverseShareTokenId,
|
||||
);
|
||||
const isReverseShareTokenValid =
|
||||
await this.reverseShareService.isValid(reverseShareTokenId);
|
||||
|
||||
return isReverseShareTokenValid;
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ import {
|
||||
} from "@nestjs/common";
|
||||
import { User } from "@prisma/client";
|
||||
import { Request } from "express";
|
||||
import { ConfigService } from "src/config/config.service";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { JwtGuard } from "../../auth/guard/jwt.guard";
|
||||
import { ConfigService } from "src/config/config.service";
|
||||
|
||||
@Injectable()
|
||||
export class ShareOwnerGuard extends JwtGuard {
|
||||
@@ -19,7 +19,6 @@ export class ShareOwnerGuard extends JwtGuard {
|
||||
}
|
||||
|
||||
async canActivate(context: ExecutionContext) {
|
||||
|
||||
const request: Request = context.switchToHttp().getRequest();
|
||||
const shareId = Object.prototype.hasOwnProperty.call(
|
||||
request.params,
|
||||
@@ -35,10 +34,20 @@ export class ShareOwnerGuard extends JwtGuard {
|
||||
|
||||
if (!share) throw new NotFoundException("Share not found");
|
||||
|
||||
// Run the JWTGuard to set the user
|
||||
await super.canActivate(context);
|
||||
const user = request.user as User;
|
||||
|
||||
// If the user is an admin, allow access
|
||||
if (user?.isAdmin) return true;
|
||||
|
||||
// If it's a anonymous share, allow access
|
||||
if (!share.creatorId) return true;
|
||||
|
||||
if (!(await super.canActivate(context))) return false;
|
||||
// If not signed in, deny access
|
||||
if (!user) return false;
|
||||
|
||||
return share.creatorId == (request.user as User).id;
|
||||
// If the user is the creator of the share, allow access
|
||||
return share.creatorId == user.id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import { Throttle } from "@nestjs/throttler";
|
||||
import { User } from "@prisma/client";
|
||||
import { Request, Response } from "express";
|
||||
import { GetUser } from "src/auth/decorator/getUser.decorator";
|
||||
import { AdministratorGuard } from "src/auth/guard/isAdmin.guard";
|
||||
import { JwtGuard } from "src/auth/guard/jwt.guard";
|
||||
import { CreateShareDTO } from "./dto/createShare.dto";
|
||||
import { MyShareDTO } from "./dto/myShare.dto";
|
||||
@@ -25,10 +26,17 @@ import { ShareOwnerGuard } from "./guard/shareOwner.guard";
|
||||
import { ShareSecurityGuard } from "./guard/shareSecurity.guard";
|
||||
import { ShareTokenSecurity } from "./guard/shareTokenSecurity.guard";
|
||||
import { ShareService } from "./share.service";
|
||||
import { AdminShareDTO } from "./dto/adminShare.dto";
|
||||
@Controller("shares")
|
||||
export class ShareController {
|
||||
constructor(private shareService: ShareService) {}
|
||||
|
||||
@Get("all")
|
||||
@UseGuards(JwtGuard, AdministratorGuard)
|
||||
async getAllShares() {
|
||||
return new AdminShareDTO().fromList(await this.shareService.getShares());
|
||||
}
|
||||
|
||||
@Get()
|
||||
@UseGuards(JwtGuard)
|
||||
async getMyShares(@GetUser() user: User) {
|
||||
@@ -86,8 +94,9 @@ export class ShareController {
|
||||
|
||||
@Delete(":id")
|
||||
@UseGuards(ShareOwnerGuard)
|
||||
async remove(@Param("id") id: string) {
|
||||
await this.shareService.remove(id);
|
||||
async remove(@Param("id") id: string, @GetUser() user: User) {
|
||||
const isDeleterAdmin = user?.isAdmin === true;
|
||||
await this.shareService.remove(id, isDeleterAdmin);
|
||||
}
|
||||
|
||||
@Throttle(10, 60)
|
||||
|
||||
@@ -46,18 +46,22 @@ export class ShareService {
|
||||
let expirationDate: Date;
|
||||
|
||||
// If share is created by a reverse share token override the expiration date
|
||||
const reverseShare = await this.reverseShareService.getByToken(
|
||||
reverseShareToken,
|
||||
);
|
||||
const reverseShare =
|
||||
await this.reverseShareService.getByToken(reverseShareToken);
|
||||
if (reverseShare) {
|
||||
expirationDate = reverseShare.shareExpiration;
|
||||
} else {
|
||||
const parsedExpiration = parseRelativeDateToAbsolute(share.expiration);
|
||||
|
||||
const expiresNever = moment(0).toDate() == parsedExpiration;
|
||||
|
||||
if (
|
||||
this.config.get("share.maxExpiration") !== 0 &&
|
||||
parsedExpiration >
|
||||
moment().add(this.config.get("share.maxExpiration"), "hours").toDate()
|
||||
(expiresNever ||
|
||||
parsedExpiration >
|
||||
moment()
|
||||
.add(this.config.get("share.maxExpiration"), "hours")
|
||||
.toDate())
|
||||
) {
|
||||
throw new BadRequestException(
|
||||
"Expiration date exceeds maximum expiration date",
|
||||
@@ -189,6 +193,22 @@ export class ShareService {
|
||||
});
|
||||
}
|
||||
|
||||
async getShares() {
|
||||
const shares = await this.prisma.share.findMany({
|
||||
orderBy: {
|
||||
expiration: "desc",
|
||||
},
|
||||
include: { files: true, creator: true },
|
||||
});
|
||||
|
||||
return shares.map((share) => {
|
||||
return {
|
||||
...share,
|
||||
size: share.files.reduce((acc, file) => acc + parseInt(file.size), 0),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
async getSharesByUser(userId: string) {
|
||||
const shares = await this.prisma.share.findMany({
|
||||
where: {
|
||||
@@ -209,6 +229,7 @@ export class ShareService {
|
||||
return shares.map((share) => {
|
||||
return {
|
||||
...share,
|
||||
size: share.files.reduce((acc, file) => acc + parseInt(file.size), 0),
|
||||
recipients: share.recipients.map((recipients) => recipients.email),
|
||||
};
|
||||
});
|
||||
@@ -246,13 +267,14 @@ export class ShareService {
|
||||
return share;
|
||||
}
|
||||
|
||||
async remove(shareId: string) {
|
||||
async remove(shareId: string, isDeleterAdmin = false) {
|
||||
const share = await this.prisma.share.findUnique({
|
||||
where: { id: shareId },
|
||||
});
|
||||
|
||||
if (!share) throw new NotFoundException("Share not found");
|
||||
if (!share.creatorId)
|
||||
|
||||
if (!share.creatorId && !isDeleterAdmin)
|
||||
throw new ForbiddenException("Anonymous shares can't be deleted");
|
||||
|
||||
await this.fileService.deleteAllFiles(shareId);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { OmitType, PartialType } from "@nestjs/swagger";
|
||||
import { PartialType, PickType } from "@nestjs/swagger";
|
||||
import { UserDTO } from "./user.dto";
|
||||
|
||||
export class UpdateOwnUserDTO extends PartialType(
|
||||
OmitType(UserDTO, ["isAdmin", "password"] as const),
|
||||
PickType(UserDTO, ["username", "email"] as const),
|
||||
) {}
|
||||
|
||||
@@ -27,7 +27,8 @@ export class UserController {
|
||||
// Own user operations
|
||||
@Get("me")
|
||||
@UseGuards(JwtGuard)
|
||||
async getCurrentUser(@GetUser() user: User) {
|
||||
async getCurrentUser(@GetUser() user?: User) {
|
||||
if (!user) return null;
|
||||
const userDTO = new UserDTO().from(user);
|
||||
userDTO.hasPassword = !!user.password;
|
||||
return userDTO;
|
||||
|
||||
@@ -2,9 +2,10 @@ import { Module } from "@nestjs/common";
|
||||
import { EmailModule } from "src/email/email.module";
|
||||
import { UserController } from "./user.controller";
|
||||
import { UserSevice } from "./user.service";
|
||||
import { FileModule } from "src/file/file.module";
|
||||
|
||||
@Module({
|
||||
imports: [EmailModule],
|
||||
imports: [EmailModule, FileModule],
|
||||
providers: [UserSevice],
|
||||
controllers: [UserController],
|
||||
})
|
||||
|
||||
@@ -4,6 +4,7 @@ import * as argon from "argon2";
|
||||
import * as crypto from "crypto";
|
||||
import { EmailService } from "src/email/email.service";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { FileService } from "../file/file.service";
|
||||
import { CreateUserDTO } from "./dto/createUser.dto";
|
||||
import { UpdateUserDto } from "./dto/updateUser.dto";
|
||||
|
||||
@@ -12,6 +13,7 @@ export class UserSevice {
|
||||
constructor(
|
||||
private prisma: PrismaService,
|
||||
private emailService: EmailService,
|
||||
private fileService: FileService,
|
||||
) {}
|
||||
|
||||
async list() {
|
||||
@@ -74,6 +76,16 @@ export class UserSevice {
|
||||
}
|
||||
|
||||
async delete(id: string) {
|
||||
const user = await this.prisma.user.findUnique({
|
||||
where: { id },
|
||||
include: { shares: true },
|
||||
});
|
||||
if (!user) throw new BadRequestException("User not found");
|
||||
|
||||
await Promise.all(
|
||||
user.shares.map((share) => this.fileService.deleteAllFiles(share.id)),
|
||||
);
|
||||
|
||||
return await this.prisma.user.delete({ where: { id } });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -432,7 +432,7 @@
|
||||
" const responseBody = pm.response.json();",
|
||||
" pm.expect(responseBody).to.have.property(\"id\")",
|
||||
" pm.expect(responseBody).to.have.property(\"expiration\")",
|
||||
" pm.expect(Object.keys(responseBody).length).be.equal(3)",
|
||||
" pm.expect(Object.keys(responseBody).length).be.equal(4)",
|
||||
"});",
|
||||
""
|
||||
],
|
||||
@@ -626,7 +626,7 @@
|
||||
" const responseBody = pm.response.json();",
|
||||
" pm.expect(responseBody).to.have.property(\"id\")",
|
||||
" pm.expect(responseBody).to.have.property(\"expiration\")",
|
||||
" pm.expect(Object.keys(responseBody).length).be.equal(3)",
|
||||
" pm.expect(Object.keys(responseBody).length).be.equal(4)",
|
||||
"});",
|
||||
""
|
||||
],
|
||||
|
||||
@@ -20,7 +20,8 @@ Pingvin Share es una plataforma de intercambio de archivos autoalojada y una alt
|
||||
## 🐧 Conoce Pingvin Share
|
||||
|
||||
- [Demo](https://pingvin-share.dev.eliasschneider.com)
|
||||
- [Reseña por DB Tech](https://www.youtube.com/watch?v=rWwNeZCOPJA)
|
||||
- [Reseña realizada por No Solo Hacking (español)](https://www.youtube.com/watch?v=ocd4EpLTYkU)
|
||||
- [Reseña por DB Tech (inglés)](https://www.youtube.com/watch?v=rWwNeZCOPJA)
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/58886915/225038319-b2ef742c-3a74-4eb6-9689-4207a36842a4.png" width="700"/>
|
||||
|
||||
|
||||
5934
frontend/package-lock.json
generated
5934
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pingvin-share-frontend",
|
||||
"version": "0.20.2",
|
||||
"version": "0.25.0",
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
@@ -9,45 +9,47 @@
|
||||
"format": "prettier --end-of-line=auto --write \"src/**/*.ts*\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.11.1",
|
||||
"@emotion/react": "^11.11.4",
|
||||
"@emotion/server": "^11.11.0",
|
||||
"@mantine/core": "^6.0.17",
|
||||
"@mantine/dropzone": "^6.0.17",
|
||||
"@mantine/form": "^6.0.17",
|
||||
"@mantine/hooks": "^6.0.17",
|
||||
"@mantine/modals": "^6.0.17",
|
||||
"@mantine/next": "^6.0.17",
|
||||
"@mantine/notifications": "^6.0.17",
|
||||
"axios": "^1.4.0",
|
||||
"@mantine/core": "^6.0.21",
|
||||
"@mantine/dropzone": "^6.0.21",
|
||||
"@mantine/form": "^6.0.21",
|
||||
"@mantine/hooks": "^6.0.21",
|
||||
"@mantine/modals": "^6.0.21",
|
||||
"@mantine/next": "^6.0.21",
|
||||
"@mantine/notifications": "^6.0.21",
|
||||
"axios": "^1.7.2",
|
||||
"cookies-next": "^2.1.2",
|
||||
"file-saver": "^2.0.5",
|
||||
"jose": "^4.14.4",
|
||||
"jose": "^4.15.5",
|
||||
"jwt-decode": "^3.1.2",
|
||||
"markdown-to-jsx": "^7.4.7",
|
||||
"mime-types": "^2.1.35",
|
||||
"moment": "^2.29.4",
|
||||
"next": "^13.4.12",
|
||||
"moment": "^2.30.1",
|
||||
"next": "^14.2.3",
|
||||
"next-cookies": "^2.0.3",
|
||||
"next-http-proxy-middleware": "^1.2.5",
|
||||
"next-http-proxy-middleware": "^1.2.6",
|
||||
"next-pwa": "^5.6.0",
|
||||
"p-limit": "^4.0.0",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-icons": "^4.10.1",
|
||||
"react-intl": "^6.4.4",
|
||||
"sharp": "^0.32.4",
|
||||
"yup": "^1.2.0"
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-icons": "^4.12.0",
|
||||
"react-intl": "^6.6.8",
|
||||
"sharp": "^0.33.4",
|
||||
"yup": "^1.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/mime-types": "^2.1.1",
|
||||
"@types/node": "20.4.5",
|
||||
"@types/react": "18.2.17",
|
||||
"@types/react-dom": "18.2.7",
|
||||
"axios": "^1.4.0",
|
||||
"eslint": "8.46.0",
|
||||
"eslint-config-next": "^13.4.12",
|
||||
"eslint-config-prettier": "^8.9.0",
|
||||
"prettier": "^3.0.0",
|
||||
"tar": "^6.1.15",
|
||||
"typescript": "^5.1.6"
|
||||
"@types/mime-types": "^2.1.4",
|
||||
"@types/node": "20.12.12",
|
||||
"@types/react": "18.3.2",
|
||||
"@types/react-dom": "18.3.0",
|
||||
"@typescript-eslint/parser": "^7.10.0",
|
||||
"axios": "^1.7.2",
|
||||
"eslint": "8.57.0",
|
||||
"eslint-config-next": "^13.5.6",
|
||||
"eslint-config-prettier": "^8.10.0",
|
||||
"prettier": "^3.2.5",
|
||||
"tar": "^6.2.1",
|
||||
"typescript": "^5.4.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ const CreateEnableTotpModal = ({
|
||||
</span>
|
||||
</Center>
|
||||
|
||||
<Tooltip label={t("account.modal.totp.clickToCopy")}>
|
||||
<Tooltip label={t("common.button.clickToCopy")}>
|
||||
<Button
|
||||
onClick={() => {
|
||||
navigator.clipboard.writeText(options.secret);
|
||||
|
||||
@@ -12,18 +12,14 @@ const showShareInformationsModal = (
|
||||
modals: ModalsContextProps,
|
||||
share: MyShare,
|
||||
appUrl: string,
|
||||
maxShareSize: number
|
||||
maxShareSize: number,
|
||||
) => {
|
||||
const t = translateOutsideContext();
|
||||
const link = `${appUrl}/s/${share.id}`;
|
||||
|
||||
let shareSize: number = 0;
|
||||
for (let file of share.files as FileMetaData[])
|
||||
shareSize += parseInt(file.size);
|
||||
|
||||
const formattedShareSize = byteToHumanSizeString(shareSize);
|
||||
const formattedShareSize = byteToHumanSizeString(share.size);
|
||||
const formattedMaxShareSize = byteToHumanSizeString(maxShareSize);
|
||||
const shareSizeProgress = (shareSize / maxShareSize) * 100;
|
||||
const shareSizeProgress = (share.size / maxShareSize) * 100;
|
||||
|
||||
const formattedCreatedAt = moment(share.createdAt).format("LLL");
|
||||
const formattedExpiration =
|
||||
@@ -42,12 +38,18 @@ const showShareInformationsModal = (
|
||||
</b>
|
||||
{share.id}
|
||||
</Text>
|
||||
<Text size="sm">
|
||||
<b>
|
||||
<FormattedMessage id="account.shares.table.name" />:{" "}
|
||||
</b>
|
||||
{share.name || "-"}
|
||||
</Text>
|
||||
|
||||
<Text size="sm">
|
||||
<b>
|
||||
<FormattedMessage id="account.shares.table.description" />:{" "}
|
||||
</b>
|
||||
{share.description || "No description"}
|
||||
{share.description || "-"}
|
||||
</Text>
|
||||
|
||||
<Text size="sm">
|
||||
@@ -75,15 +77,15 @@ const showShareInformationsModal = (
|
||||
</Text>
|
||||
|
||||
<Flex align="center" justify="center">
|
||||
{shareSize / maxShareSize < 0.1 && (
|
||||
{share.size / maxShareSize < 0.1 && (
|
||||
<Text size="xs" style={{ marginRight: "4px" }}>
|
||||
{formattedShareSize}
|
||||
</Text>
|
||||
)}
|
||||
<Progress
|
||||
value={shareSizeProgress}
|
||||
label={shareSize / maxShareSize >= 0.1 ? formattedShareSize : ""}
|
||||
style={{ width: shareSize / maxShareSize < 0.1 ? "70%" : "80%" }}
|
||||
label={share.size / maxShareSize >= 0.1 ? formattedShareSize : ""}
|
||||
style={{ width: share.size / maxShareSize < 0.1 ? "70%" : "80%" }}
|
||||
size="xl"
|
||||
radius="xl"
|
||||
/>
|
||||
|
||||
@@ -33,6 +33,7 @@ const LogoConfigInput = ({
|
||||
value={logo}
|
||||
onChange={(v) => setLogo(v)}
|
||||
accept=".png"
|
||||
// @ts-ignore (https://github.com/mantinedev/mantine/issues/5401)
|
||||
placeholder={t("admin.config.general.logo.placeholder")}
|
||||
/>
|
||||
</Box>
|
||||
|
||||
149
frontend/src/components/admin/shares/ManageShareTable.tsx
Normal file
149
frontend/src/components/admin/shares/ManageShareTable.tsx
Normal file
@@ -0,0 +1,149 @@
|
||||
import {
|
||||
ActionIcon,
|
||||
Box,
|
||||
Group,
|
||||
MediaQuery,
|
||||
Skeleton,
|
||||
Table,
|
||||
Text,
|
||||
} from "@mantine/core";
|
||||
import { useClipboard } from "@mantine/hooks";
|
||||
import { useModals } from "@mantine/modals";
|
||||
import moment from "moment";
|
||||
import { TbLink, TbTrash } from "react-icons/tb";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import useConfig from "../../../hooks/config.hook";
|
||||
import useTranslate from "../../../hooks/useTranslate.hook";
|
||||
import { MyShare } from "../../../types/share.type";
|
||||
import { byteToHumanSizeString } from "../../../utils/fileSize.util";
|
||||
import toast from "../../../utils/toast.util";
|
||||
import showShareLinkModal from "../../account/showShareLinkModal";
|
||||
|
||||
const ManageShareTable = ({
|
||||
shares,
|
||||
deleteShare,
|
||||
isLoading,
|
||||
}: {
|
||||
shares: MyShare[];
|
||||
deleteShare: (share: MyShare) => void;
|
||||
isLoading: boolean;
|
||||
}) => {
|
||||
const modals = useModals();
|
||||
const clipboard = useClipboard();
|
||||
const config = useConfig();
|
||||
const t = useTranslate();
|
||||
|
||||
return (
|
||||
<Box sx={{ display: "block", overflowX: "auto" }}>
|
||||
<Table verticalSpacing="sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<FormattedMessage id="account.shares.table.id" />
|
||||
</th>
|
||||
<th>
|
||||
<FormattedMessage id="account.shares.table.name" />
|
||||
</th>
|
||||
<th>
|
||||
<FormattedMessage id="admin.shares.table.username" />
|
||||
</th>
|
||||
<th>
|
||||
<FormattedMessage id="account.shares.table.visitors" />
|
||||
</th>
|
||||
<th>
|
||||
<FormattedMessage id="account.shares.table.size" />
|
||||
</th>
|
||||
<th>
|
||||
<FormattedMessage id="account.shares.table.expiresAt" />
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{isLoading
|
||||
? skeletonRows
|
||||
: shares.map((share) => (
|
||||
<tr key={share.id}>
|
||||
<td>{share.id}</td>
|
||||
<td>{share.name}</td>
|
||||
<td>
|
||||
{share.creator ? (
|
||||
share.creator.username
|
||||
) : (
|
||||
<Text color="dimmed">Anonymous</Text>
|
||||
)}
|
||||
</td>
|
||||
<td>{share.views}</td>
|
||||
<td>{byteToHumanSizeString(share.size)}</td>
|
||||
<td>
|
||||
{moment(share.expiration).unix() === 0
|
||||
? "Never"
|
||||
: moment(share.expiration).format("LLL")}
|
||||
</td>
|
||||
<td>
|
||||
<Group position="right">
|
||||
<ActionIcon
|
||||
color="victoria"
|
||||
variant="light"
|
||||
size={25}
|
||||
onClick={() => {
|
||||
if (window.isSecureContext) {
|
||||
clipboard.copy(
|
||||
`${config.get("general.appUrl")}/s/${share.id}`,
|
||||
);
|
||||
toast.success(t("common.notify.copied"));
|
||||
} else {
|
||||
showShareLinkModal(
|
||||
modals,
|
||||
share.id,
|
||||
config.get("general.appUrl"),
|
||||
);
|
||||
}
|
||||
}}
|
||||
>
|
||||
<TbLink />
|
||||
</ActionIcon>
|
||||
<ActionIcon
|
||||
variant="light"
|
||||
color="red"
|
||||
size="sm"
|
||||
onClick={() => deleteShare(share)}
|
||||
>
|
||||
<TbTrash />
|
||||
</ActionIcon>
|
||||
</Group>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</Table>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
const skeletonRows = [...Array(10)].map((v, i) => (
|
||||
<tr key={i}>
|
||||
<td>
|
||||
<Skeleton key={i} height={20} />
|
||||
</td>
|
||||
<MediaQuery smallerThan="md" styles={{ display: "none" }}>
|
||||
<td>
|
||||
<Skeleton key={i} height={20} />
|
||||
</td>
|
||||
</MediaQuery>
|
||||
<td>
|
||||
<Skeleton key={i} height={20} />
|
||||
</td>
|
||||
<td>
|
||||
<Skeleton key={i} height={20} />
|
||||
</td>
|
||||
<td>
|
||||
<Skeleton key={i} height={20} />
|
||||
</td>
|
||||
<td>
|
||||
<Skeleton key={i} height={20} />
|
||||
</td>
|
||||
</tr>
|
||||
));
|
||||
|
||||
export default ManageShareTable;
|
||||
@@ -25,6 +25,7 @@ import useTranslate from "../../hooks/useTranslate.hook";
|
||||
import authService from "../../services/auth.service";
|
||||
import { getOAuthIcon, getOAuthUrl } from "../../utils/oauth.util";
|
||||
import toast from "../../utils/toast.util";
|
||||
import { safeRedirectPath } from "../../utils/router.util";
|
||||
|
||||
const useStyles = createStyles((theme) => ({
|
||||
or: {
|
||||
@@ -98,7 +99,7 @@ const SignInForm = ({ redirectPath }: { redirectPath: string }) => {
|
||||
);
|
||||
} else {
|
||||
await refreshUser();
|
||||
router.replace(redirectPath);
|
||||
router.replace(safeRedirectPath(redirectPath));
|
||||
}
|
||||
})
|
||||
.catch(toast.axiosError);
|
||||
|
||||
@@ -6,15 +6,16 @@ import {
|
||||
PinInput,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { useForm, yupResolver } from "@mantine/form";
|
||||
import { useRouter } from "next/router";
|
||||
import { useState } from "react";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import * as yup from "yup";
|
||||
import useTranslate from "../../hooks/useTranslate.hook";
|
||||
import { useForm, yupResolver } from "@mantine/form";
|
||||
import { useState } from "react";
|
||||
import authService from "../../services/auth.service";
|
||||
import toast from "../../utils/toast.util";
|
||||
import { useRouter } from "next/router";
|
||||
import useUser from "../../hooks/user.hook";
|
||||
import authService from "../../services/auth.service";
|
||||
import { safeRedirectPath } from "../../utils/router.util";
|
||||
import toast from "../../utils/toast.util";
|
||||
|
||||
function TotpForm({ redirectPath }: { redirectPath: string }) {
|
||||
const t = useTranslate();
|
||||
@@ -46,7 +47,7 @@ function TotpForm({ redirectPath }: { redirectPath: string }) {
|
||||
router.query.loginToken as string,
|
||||
);
|
||||
await refreshUser();
|
||||
await router.replace(redirectPath);
|
||||
await router.replace(safeRedirectPath(redirectPath));
|
||||
} catch (e) {
|
||||
toast.axiosError(e);
|
||||
form.setFieldError("code", "error");
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
import { Button, Center, Stack, Text, Title } from "@mantine/core";
|
||||
import {
|
||||
Button,
|
||||
Center,
|
||||
Stack,
|
||||
Text,
|
||||
Title,
|
||||
useMantineTheme,
|
||||
} from "@mantine/core";
|
||||
import { modals } from "@mantine/modals";
|
||||
import Link from "next/link";
|
||||
import React, { Dispatch, SetStateAction, useEffect, useState } from "react";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import api from "../../services/api.service";
|
||||
import Markdown from "markdown-to-jsx";
|
||||
|
||||
const FilePreviewContext = React.createContext<{
|
||||
shareId: string;
|
||||
@@ -115,23 +123,38 @@ const ImagePreview = () => {
|
||||
|
||||
const TextPreview = () => {
|
||||
const { shareId, fileId } = React.useContext(FilePreviewContext);
|
||||
const [text, setText] = useState<string | null>(null);
|
||||
const [text, setText] = useState<string>("");
|
||||
const { colorScheme } = useMantineTheme();
|
||||
|
||||
useEffect(() => {
|
||||
api
|
||||
.get(`/shares/${shareId}/files/${fileId}?download=false`)
|
||||
.then((res) => setText(res.data));
|
||||
.then((res) => setText(res.data ?? "Preview couldn't be fetched."));
|
||||
}, [shareId, fileId]);
|
||||
|
||||
return (
|
||||
<Center style={{ minHeight: 200 }}>
|
||||
<Stack align="center" spacing={10} style={{ width: "100%" }}>
|
||||
<Text sx={{ whiteSpace: "pre-wrap" }} size="sm">
|
||||
{text}
|
||||
</Text>
|
||||
</Stack>
|
||||
</Center>
|
||||
);
|
||||
const options = {
|
||||
overrides: {
|
||||
pre: {
|
||||
props: {
|
||||
style: {
|
||||
backgroundColor:
|
||||
colorScheme == "dark"
|
||||
? "rgba(50, 50, 50, 0.5)"
|
||||
: "rgba(220, 220, 220, 0.5)",
|
||||
padding: "0.75em",
|
||||
whiteSpace: "pre-wrap",
|
||||
},
|
||||
},
|
||||
},
|
||||
table: {
|
||||
props: {
|
||||
className: "md",
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
return <Markdown options={options}>{text}</Markdown>;
|
||||
};
|
||||
|
||||
const PdfPreview = () => {
|
||||
|
||||
@@ -8,6 +8,7 @@ const showErrorModal = (
|
||||
modals: ModalsContextProps,
|
||||
title: string,
|
||||
text: string,
|
||||
action: "go-back" | "go-home" = "go-back",
|
||||
) => {
|
||||
return modals.openModal({
|
||||
closeOnClickOutside: false,
|
||||
@@ -15,11 +16,17 @@ const showErrorModal = (
|
||||
closeOnEscape: false,
|
||||
title: title,
|
||||
|
||||
children: <Body text={text} />,
|
||||
children: <Body text={text} action={action} />,
|
||||
});
|
||||
};
|
||||
|
||||
const Body = ({ text }: { text: string }) => {
|
||||
const Body = ({
|
||||
text,
|
||||
action,
|
||||
}: {
|
||||
text: string;
|
||||
action: "go-back" | "go-home";
|
||||
}) => {
|
||||
const modals = useModals();
|
||||
const router = useRouter();
|
||||
return (
|
||||
@@ -29,10 +36,14 @@ const Body = ({ text }: { text: string }) => {
|
||||
<Button
|
||||
onClick={() => {
|
||||
modals.closeAll();
|
||||
router.back();
|
||||
if (action === "go-back") {
|
||||
router.back();
|
||||
} else if (action === "go-home") {
|
||||
router.push("/");
|
||||
}
|
||||
}}
|
||||
>
|
||||
<FormattedMessage id="common.button.go-back" />
|
||||
<FormattedMessage id={`common.button.${action}`} />
|
||||
</Button>
|
||||
</Stack>
|
||||
</>
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { ActionIcon, TextInput } from "@mantine/core";
|
||||
import { ActionIcon, TextInput, Tooltip } from "@mantine/core";
|
||||
import { useClipboard } from "@mantine/hooks";
|
||||
import { useRef, useState } from "react";
|
||||
import { TbCheck, TbCopy } from "react-icons/tb";
|
||||
import { IoOpenOutline } from "react-icons/io5";
|
||||
import useTranslate from "../../hooks/useTranslate.hook";
|
||||
import toast from "../../utils/toast.util";
|
||||
|
||||
@@ -37,12 +38,35 @@ function CopyTextField(props: { link: string }) {
|
||||
setTextClicked(true);
|
||||
}
|
||||
}}
|
||||
rightSectionWidth={62}
|
||||
rightSection={
|
||||
window.isSecureContext && (
|
||||
<ActionIcon onClick={copyLink}>
|
||||
{checkState ? <TbCheck /> : <TbCopy />}
|
||||
</ActionIcon>
|
||||
)
|
||||
<>
|
||||
<Tooltip
|
||||
label={t("common.text.navigate-to-link")}
|
||||
position="top"
|
||||
offset={-2}
|
||||
openDelay={200}
|
||||
>
|
||||
<a href={props.link}>
|
||||
<ActionIcon>
|
||||
<IoOpenOutline />
|
||||
</ActionIcon>
|
||||
</a>
|
||||
</Tooltip>
|
||||
|
||||
{window.isSecureContext && (
|
||||
<Tooltip
|
||||
label={t("common.button.clickToCopy")}
|
||||
position="top"
|
||||
offset={-2}
|
||||
openDelay={200}
|
||||
>
|
||||
<ActionIcon onClick={copyLink}>
|
||||
{checkState ? <TbCheck /> : <TbCopy />}
|
||||
</ActionIcon>
|
||||
</Tooltip>
|
||||
)}
|
||||
</>
|
||||
}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -36,12 +36,12 @@ const Dropzone = ({
|
||||
title,
|
||||
isUploading,
|
||||
maxShareSize,
|
||||
showCreateUploadModalCallback,
|
||||
onFilesChanged,
|
||||
}: {
|
||||
title?: string;
|
||||
isUploading: boolean;
|
||||
maxShareSize: number;
|
||||
showCreateUploadModalCallback: (files: FileUpload[]) => void;
|
||||
onFilesChanged: (files: FileUpload[]) => void;
|
||||
}) => {
|
||||
const t = useTranslate();
|
||||
|
||||
@@ -69,7 +69,7 @@ const Dropzone = ({
|
||||
newFile.uploadingProgress = 0;
|
||||
return newFile;
|
||||
});
|
||||
showCreateUploadModalCallback(files);
|
||||
onFilesChanged(files);
|
||||
}
|
||||
}}
|
||||
className={classes.dropzone}
|
||||
|
||||
@@ -1,22 +1,19 @@
|
||||
import { Button, Group } from "@mantine/core";
|
||||
import { useModals } from "@mantine/modals";
|
||||
import { cleanNotifications } from "@mantine/notifications";
|
||||
import { AxiosError } from "axios";
|
||||
import { useRouter } from "next/router";
|
||||
import pLimit from "p-limit";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import { useEffect, useMemo, useRef, useState } from "react";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import Dropzone from "../../components/upload/Dropzone";
|
||||
import FileList from "../../components/upload/FileList";
|
||||
import showCompletedUploadModal from "../../components/upload/modals/showCompletedUploadModal";
|
||||
import useConfig from "../../hooks/config.hook";
|
||||
import useTranslate from "../../hooks/useTranslate.hook";
|
||||
import shareService from "../../services/share.service";
|
||||
import { FileListItem, FileMetaData, FileUpload } from "../../types/File.type";
|
||||
import toast from "../../utils/toast.util";
|
||||
import { useRouter } from "next/router";
|
||||
|
||||
const promiseLimit = pLimit(3);
|
||||
const chunkSize = 10 * 1024 * 1024; // 10MB
|
||||
let errorToastShown = false;
|
||||
|
||||
const EditableUpload = ({
|
||||
@@ -33,6 +30,8 @@ const EditableUpload = ({
|
||||
const router = useRouter();
|
||||
const config = useConfig();
|
||||
|
||||
const chunkSize = useRef(parseInt(config.get("share.chunkSize")));
|
||||
|
||||
const [existingFiles, setExistingFiles] =
|
||||
useState<Array<FileMetaData & { deleted?: boolean }>>(savedFiles);
|
||||
const [uploadingFiles, setUploadingFiles] = useState<FileUpload[]>([]);
|
||||
@@ -66,7 +65,7 @@ const EditableUpload = ({
|
||||
const fileUploadPromises = files.map(async (file, fileIndex) =>
|
||||
// Limit the number of concurrent uploads to 3
|
||||
promiseLimit(async () => {
|
||||
let fileId: string;
|
||||
let fileId: string | undefined;
|
||||
|
||||
const setFileProgress = (progress: number) => {
|
||||
setUploadingFiles((files) =>
|
||||
@@ -81,38 +80,30 @@ const EditableUpload = ({
|
||||
|
||||
setFileProgress(1);
|
||||
|
||||
let chunks = Math.ceil(file.size / chunkSize);
|
||||
let chunks = Math.ceil(file.size / chunkSize.current);
|
||||
|
||||
// If the file is 0 bytes, we still need to upload 1 chunk
|
||||
if (chunks == 0) chunks++;
|
||||
|
||||
for (let chunkIndex = 0; chunkIndex < chunks; chunkIndex++) {
|
||||
const from = chunkIndex * chunkSize;
|
||||
const to = from + chunkSize;
|
||||
const from = chunkIndex * chunkSize.current;
|
||||
const to = from + chunkSize.current;
|
||||
const blob = file.slice(from, to);
|
||||
try {
|
||||
await new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.onload = async (event) =>
|
||||
await shareService
|
||||
.uploadFile(
|
||||
shareId,
|
||||
event,
|
||||
{
|
||||
id: fileId,
|
||||
name: file.name,
|
||||
},
|
||||
chunkIndex,
|
||||
chunks,
|
||||
)
|
||||
.then((response) => {
|
||||
fileId = response.id;
|
||||
resolve(response);
|
||||
})
|
||||
.catch(reject);
|
||||
|
||||
reader.readAsDataURL(blob);
|
||||
});
|
||||
await shareService
|
||||
.uploadFile(
|
||||
shareId,
|
||||
blob,
|
||||
{
|
||||
id: fileId,
|
||||
name: file.name,
|
||||
},
|
||||
chunkIndex,
|
||||
chunks,
|
||||
)
|
||||
.then((response) => {
|
||||
fileId = response.id;
|
||||
});
|
||||
|
||||
setFileProgress(((chunkIndex + 1) / chunks) * 100);
|
||||
} catch (e) {
|
||||
@@ -226,7 +217,7 @@ const EditableUpload = ({
|
||||
<Dropzone
|
||||
title={t("share.edit.append-upload")}
|
||||
maxShareSize={maxShareSize}
|
||||
showCreateUploadModalCallback={appendFiles}
|
||||
onFilesChanged={appendFiles}
|
||||
isUploading={isUploading}
|
||||
/>
|
||||
{existingAndUploadedFiles.length > 0 && (
|
||||
|
||||
@@ -92,12 +92,25 @@ const CreateUploadModalBody = ({
|
||||
.matches(new RegExp("^[a-zA-Z0-9_-]*$"), {
|
||||
message: t("upload.modal.link.error.invalid"),
|
||||
}),
|
||||
password: yup.string().min(3).max(30),
|
||||
maxViews: yup.number().min(1),
|
||||
name: yup
|
||||
.string()
|
||||
.transform((value) => value || undefined)
|
||||
.min(3, t("common.error.too-short", { length: 3 }))
|
||||
.max(30, t("common.error.too-long", { length: 30 })),
|
||||
password: yup
|
||||
.string()
|
||||
.transform((value) => value || undefined)
|
||||
.min(3, t("common.error.too-short", { length: 3 }))
|
||||
.max(30, t("common.error.too-long", { length: 30 })),
|
||||
maxViews: yup
|
||||
.number()
|
||||
.transform((value) => value || undefined)
|
||||
.min(1),
|
||||
});
|
||||
|
||||
const form = useForm({
|
||||
initialValues: {
|
||||
name: undefined,
|
||||
link: generatedLink,
|
||||
recipients: [] as string[],
|
||||
password: undefined,
|
||||
@@ -125,11 +138,13 @@ const CreateUploadModalBody = ({
|
||||
"",
|
||||
) as moment.unitOfTime.DurationConstructor,
|
||||
);
|
||||
|
||||
if (
|
||||
options.maxExpirationInHours != 0 &&
|
||||
expirationDate.isAfter(
|
||||
moment().add(options.maxExpirationInHours, "hours"),
|
||||
)
|
||||
(form.values.never_expires ||
|
||||
expirationDate.isAfter(
|
||||
moment().add(options.maxExpirationInHours, "hours"),
|
||||
))
|
||||
) {
|
||||
form.setFieldError(
|
||||
"expiration_num",
|
||||
@@ -145,12 +160,13 @@ const CreateUploadModalBody = ({
|
||||
uploadCallback(
|
||||
{
|
||||
id: values.link,
|
||||
name: values.name,
|
||||
expiration: expirationString,
|
||||
recipients: values.recipients,
|
||||
description: values.description,
|
||||
security: {
|
||||
password: values.password,
|
||||
maxViews: values.maxViews,
|
||||
password: values.password || undefined,
|
||||
maxViews: values.maxViews || undefined,
|
||||
},
|
||||
},
|
||||
files,
|
||||
@@ -273,10 +289,12 @@ const CreateUploadModalBody = ({
|
||||
/>
|
||||
</Col>
|
||||
</Grid>
|
||||
<Checkbox
|
||||
label={t("upload.modal.expires.never-long")}
|
||||
{...form.getInputProps("never_expires")}
|
||||
/>
|
||||
{options.maxExpirationInHours == 0 && (
|
||||
<Checkbox
|
||||
label={t("upload.modal.expires.never-long")}
|
||||
{...form.getInputProps("never_expires")}
|
||||
/>
|
||||
)}
|
||||
<Text
|
||||
italic
|
||||
size="xs"
|
||||
@@ -297,14 +315,21 @@ const CreateUploadModalBody = ({
|
||||
<Accordion>
|
||||
<Accordion.Item value="description" sx={{ borderBottom: "none" }}>
|
||||
<Accordion.Control>
|
||||
<FormattedMessage id="upload.modal.accordion.description.title" />
|
||||
<FormattedMessage id="upload.modal.accordion.name-and-description.title" />
|
||||
</Accordion.Control>
|
||||
<Accordion.Panel>
|
||||
<Stack align="stretch">
|
||||
<TextInput
|
||||
variant="filled"
|
||||
placeholder={t(
|
||||
"upload.modal.accordion.name-and-description.name.placeholder",
|
||||
)}
|
||||
{...form.getInputProps("name")}
|
||||
/>
|
||||
<Textarea
|
||||
variant="filled"
|
||||
placeholder={t(
|
||||
"upload.modal.accordion.description.placeholder",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder",
|
||||
)}
|
||||
{...form.getInputProps("description")}
|
||||
/>
|
||||
|
||||
@@ -1,18 +1,26 @@
|
||||
import arabic from "./translations/ar-EG";
|
||||
import danish from "./translations/da-DK";
|
||||
import german from "./translations/de-DE";
|
||||
import greek from "./translations/el-GR";
|
||||
import english from "./translations/en-US";
|
||||
import spanish from "./translations/es-ES";
|
||||
import finnish from "./translations/fi-FI";
|
||||
import french from "./translations/fr-FR";
|
||||
import hungarian from "./translations/hu-HU";
|
||||
import italian from "./translations/it-IT";
|
||||
import japanese from "./translations/ja-JP";
|
||||
import korean from "./translations/ko-KR";
|
||||
import dutch from "./translations/nl-BE";
|
||||
import polish from "./translations/pl-PL";
|
||||
import portuguese from "./translations/pt-BR";
|
||||
import russian from "./translations/ru-RU";
|
||||
import slovenian from "./translations/sl-SI";
|
||||
import serbian from "./translations/sr-SP";
|
||||
import swedish from "./translations/sv-SE";
|
||||
import thai from "./translations/th-TH";
|
||||
import ukrainian from "./translations/uk-UA";
|
||||
import chineseSimplified from "./translations/zh-CN";
|
||||
import chineseTraditional from "./translations/zh-TW";
|
||||
|
||||
export const LOCALES = {
|
||||
ENGLISH: {
|
||||
@@ -50,6 +58,11 @@ export const LOCALES = {
|
||||
code: "zh-CN",
|
||||
messages: chineseSimplified,
|
||||
},
|
||||
CHINESE_TRADITIONAL: {
|
||||
name: "正體中文",
|
||||
code: "zh-TW",
|
||||
messages: chineseTraditional,
|
||||
},
|
||||
FINNISH: {
|
||||
name: "Suomi",
|
||||
code: "fi-FI",
|
||||
@@ -60,6 +73,11 @@ export const LOCALES = {
|
||||
code: "ru-RU",
|
||||
messages: russian,
|
||||
},
|
||||
UKRAINIAN: {
|
||||
name: "Українська",
|
||||
code: "uk-UA",
|
||||
messages: ukrainian,
|
||||
},
|
||||
THAI: {
|
||||
name: "ไทย",
|
||||
code: "th-TH",
|
||||
@@ -90,4 +108,34 @@ export const LOCALES = {
|
||||
code: "sv-SE",
|
||||
messages: swedish,
|
||||
},
|
||||
ITALIAN: {
|
||||
name: "Italiano",
|
||||
code: "it-IT",
|
||||
messages: italian,
|
||||
},
|
||||
GREEK: {
|
||||
name: "Ελληνικά",
|
||||
code: "el-GR",
|
||||
messages: greek,
|
||||
},
|
||||
SLOVENIAN: {
|
||||
name: "Slovenščina",
|
||||
code: "sl-SI",
|
||||
messages: slovenian,
|
||||
},
|
||||
ARABIC: {
|
||||
name: "العربية",
|
||||
code: "ar-EG",
|
||||
messages: arabic,
|
||||
},
|
||||
HUNGARIAN: {
|
||||
name: "Hungarian",
|
||||
code: "hu-HU",
|
||||
messages: hungarian,
|
||||
},
|
||||
KOREAN: {
|
||||
name: "한국어",
|
||||
code: "ko-KR",
|
||||
messages: korean,
|
||||
},
|
||||
};
|
||||
|
||||
512
frontend/src/i18n/translations/ar-EG.ts
Normal file
512
frontend/src/i18n/translations/ar-EG.ts
Normal file
@@ -0,0 +1,512 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "رفع",
|
||||
"navbar.signin": "تسجيل الدخول",
|
||||
"navbar.home": "الصفحة الرئيسية",
|
||||
"navbar.signup": "إنشاء حساب",
|
||||
"navbar.links.shares": "مشاركاتي",
|
||||
"navbar.links.reverse": "مشاركاتي العكسية",
|
||||
"navbar.avatar.account": "حسابي",
|
||||
"navbar.avatar.admin": "الإدارة",
|
||||
"navbar.avatar.signout": "تسجيل الخروج",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "منصة لمشاركة الملفات <h>باستضافة ذاتية</h>.",
|
||||
"home.description":
|
||||
"أحقًا تريد تسليم ملفاتك الشخصية لطرف ثالث مثل WeTransfer؟",
|
||||
"home.bullet.a.name": "استضافة ذاتية",
|
||||
"home.bullet.a.description": "قم باستضافة Pingvin Share على جهازك.",
|
||||
"home.bullet.b.name": "الخصوصية",
|
||||
"home.bullet.b.description":
|
||||
"ملفاتك تخصّك وحدك فقط، ولا ينبغي أبدًا أن تقع بأيدي طرفٍ ثالث.",
|
||||
"home.bullet.c.name": "ليس هناك أية قيود على حجم الملفات",
|
||||
"home.bullet.c.description":
|
||||
"ارفع أي ملف تريده مهما كان حجمه كبيرًا. إن مساحة قرصك الصلب هي المحدد الوحيد هنا.",
|
||||
"home.button.start": "ابدأ",
|
||||
"home.button.source": "النص البرمجي المصدري",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "أهلًا بعودتك",
|
||||
"signin.description": "ليس لديك حساب؟",
|
||||
"signin.button.signup": "إنشاء حساب",
|
||||
"signin.input.email-or-username": "البريد أو اسم المستخدم",
|
||||
"signin.input.email-or-username.placeholder": "بريدك أو اسم المستخدم",
|
||||
"signin.input.password": "كلمة السر",
|
||||
"signin.input.password.placeholder": "كلمة السر",
|
||||
"signin.button.submit": "تسجيل الدخول",
|
||||
"signIn.notify.totp-required.title": "إن المصادقة الثنائية ضرورية",
|
||||
"signIn.notify.totp-required.description": "فضلًا أدخل رمز المصادقة الثنائية",
|
||||
"signIn.oauth.or": "أو",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
"signIn.oauth.discord": "Discord",
|
||||
"signIn.oauth.oidc": "OpenID",
|
||||
// END /auth/signin
|
||||
// /auth/signup
|
||||
"signup.title": "أنشئ حسابًا",
|
||||
"signup.description": "لديك حساب بالفعل؟",
|
||||
"signup.button.signin": "تسجيل الدخول",
|
||||
"signup.input.username": "اسم المستخدم",
|
||||
"signup.input.username.placeholder": "اسم المستخدم",
|
||||
"signup.input.email": "البريد",
|
||||
"signup.input.email.placeholder": "بريدك",
|
||||
"signup.button.submit": "لنبدأ",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "كلمة المرور لمرة واحدة المؤقتة TOTP",
|
||||
"totp.button.signIn": "تسجيل الدخول",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "نسيت كلمة سرّك؟",
|
||||
"resetPassword.description": "اكتب بريدك لتعيد تعيين كلمة السر.",
|
||||
"resetPassword.notify.success":
|
||||
"إذا كان هذا البريد مسجلًا لدينا فستصله الآن رسالة فيها رابط لإعادة تعيين كلمة السرّ.",
|
||||
"resetPassword.button.back": "العودة لصفحة تسجيل الدخول",
|
||||
"resetPassword.text.resetPassword": "إعادة تعيين كلمة السر",
|
||||
"resetPassword.text.enterNewPassword": "أدخل كلمة السر الجديدة",
|
||||
"resetPassword.input.password": "كلمة السر الجديدة",
|
||||
"resetPassword.notify.passwordReset": "أعدتَ تعيين كلمة السر بنجاح.",
|
||||
// /account
|
||||
"account.title": "حسابي",
|
||||
"account.card.info.title": "معلومات الحساب",
|
||||
"account.card.info.username": "اسم المستخدم",
|
||||
"account.card.info.email": "البريد",
|
||||
"account.notify.info.success": "تم تحديث الحساب بنجاح",
|
||||
"account.card.password.title": "كلمة السر",
|
||||
"account.card.password.old": "كلمة السر القديمة",
|
||||
"account.card.password.new": "كلمة السر الجديدة",
|
||||
"account.card.password.noPasswordSet":
|
||||
"ليس لحسابك كلمة سر. إذا أردت تسجيل الدخول باستخدام البريد وكلمة سر، فعليك أن تُعيِّن كلمة سر.",
|
||||
"account.notify.password.success": "غيرت كلمة السر بنجاح",
|
||||
"account.card.oauth.title": "الدخول بحساب تواصل اجتماعي",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "ربط",
|
||||
"account.card.oauth.unlink": "فك الربط",
|
||||
"account.card.oauth.unlinked": "تم فك الربط",
|
||||
"account.modal.unlink.title": "فك ربط الحساب",
|
||||
"account.modal.unlink.description":
|
||||
"قد يؤدي إلغاء ربط حساباتك الاجتماعية إلى فقدان وصولك لحسابك إذا كنت لا تتذكر اسم المستخدم وكلمة السر الخاصة بك.",
|
||||
"account.notify.oauth.unlinked.success": "تم فك الربط بنجاح",
|
||||
"account.card.security.title": "الأمان",
|
||||
"account.card.security.totp.enable.description":
|
||||
"اكتب كلمة سرّك لبدء تمكين TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"اكتب كلمة سرّك لتعطيل TOTP",
|
||||
"account.card.security.totp.button.start": "ابدأ",
|
||||
"account.modal.totp.title": "تمكين TOTP",
|
||||
"account.modal.totp.step1": "الخطوة 1: أضف تطبيق المصادقة",
|
||||
"account.modal.totp.step2": "الخطوة 2: تحقّق من صحة رمزك",
|
||||
"account.modal.totp.enterManually": "أدخل يدوياً",
|
||||
"account.modal.totp.code": "الرمز",
|
||||
"common.button.clickToCopy": "انقر للنسخ",
|
||||
"account.modal.totp.verify": "تحقق",
|
||||
"account.notify.totp.disable": "تم تعطيل TOTP بنجاح",
|
||||
"account.notify.totp.enable": "تم تمكين TOTP بنجاح",
|
||||
"account.card.language.title": "اللغة",
|
||||
"account.card.language.description":
|
||||
"يقوم المجتمع بترجمة هذا المشروع. ربما بعض اللغات لم تكتمل ترجمتها بعد.",
|
||||
"account.card.color.title": "نظام الألوان",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "داكن",
|
||||
"account.theme.light": "فاتح",
|
||||
"account.theme.system": "حسب النظام",
|
||||
"account.button.delete": "حذف الحساب",
|
||||
"account.modal.delete.title": "حذف الحساب",
|
||||
"account.modal.delete.description":
|
||||
"هل تريد حقاً حذف حسابك بما في ذلك جميع مشاركاتك النشطة؟",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "مشاركاتي",
|
||||
"account.shares.title.empty": "المكان خالٍ هنا 👀",
|
||||
"account.shares.description.empty": "ليس لديك أي مشاركات.",
|
||||
"account.shares.button.create": "أنشئ واحدًا",
|
||||
"account.shares.info.title": "معلومات المشاركة",
|
||||
"account.shares.table.id": "الرقم التعريفي",
|
||||
"account.shares.table.name": "الاسم",
|
||||
"account.shares.table.description": "الوصف",
|
||||
"account.shares.table.visitors": "الزوار",
|
||||
"account.shares.table.expiresAt": "تاريخ انتهاء الصلاحية",
|
||||
"account.shares.table.createdAt": "تاريخ الإنشاء",
|
||||
"account.shares.table.size": "الحجم",
|
||||
"account.shares.modal.share-informations": "معلومات المشاركة",
|
||||
"account.shares.modal.share-link": "رابط المشاركة",
|
||||
"account.shares.modal.delete.title": "حذف المشاركة {share}",
|
||||
"account.shares.modal.delete.description": "هل تريد حذف هذه المشاركة حقاً؟",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "المشاركات العكسية",
|
||||
"account.reverseShares.description":
|
||||
"تسمح لك المشاركة العكسية بإنشاء رابط فريد يسمح للمستخدمين الخارجيين بإنشاء مشاركة.",
|
||||
"account.reverseShares.title.empty": "المكان خالٍ هنا 👀",
|
||||
"account.reverseShares.description.empty": "ليس لديك أي مشاركات عكسية.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "إنشاء مشاركة عكسية",
|
||||
"account.reverseShares.modal.expiration.label": "انتهاء الصلاحية",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "دقيقة",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "دقائق",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "ساعة",
|
||||
"account.reverseShares.modal.expiration.hour-plural": "ساعات",
|
||||
"account.reverseShares.modal.expiration.day-singular": "يوم",
|
||||
"account.reverseShares.modal.expiration.day-plural": "أيام",
|
||||
"account.reverseShares.modal.expiration.week-singular": "أسبوع",
|
||||
"account.reverseShares.modal.expiration.week-plural": "أسابيع",
|
||||
"account.reverseShares.modal.expiration.month-singular": "شهر",
|
||||
"account.reverseShares.modal.expiration.month-plural": "أشهر",
|
||||
"account.reverseShares.modal.expiration.year-singular": "سنة",
|
||||
"account.reverseShares.modal.expiration.year-plural": "سنوات",
|
||||
"account.reverseShares.modal.max-size.label": "الحد الأقصى لحجم المشاركة",
|
||||
"account.reverseShares.modal.send-email": "أرسل إشعارًا بالبريد",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"إرسال إشعار بالبريد الإلكتروني عند إنشاء مشاركة باستخدام رابط المشاركة العكسي هذا.",
|
||||
"account.reverseShares.modal.max-use.label": "الحد الأقصى لعدد الاستخدامات",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"أقصى عدد من المرّات التي يمكن فيها استخدام هذا الرابط لإنشاء مشاركة.",
|
||||
"account.reverseShare.never-expires":
|
||||
"لن تنتهي صلاحية هذه المشاركة العكسية أبدًا.",
|
||||
"account.reverseShare.expires-on":
|
||||
"هذه المشاركة العكسية ستنتهي صلاحيتها في {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "لم يتم إنشاء أي مشاركة بعد",
|
||||
"account.reverseShares.table.count.singular": "مشاركة",
|
||||
"account.reverseShares.table.count.plural": "مشاركات",
|
||||
"account.reverseShares.table.shares": "مشاركات",
|
||||
"account.reverseShares.table.remaining": "الاستخدامات المتبقية",
|
||||
"account.reverseShares.table.max-size": "الحد الأقصى لحجم المشاركة",
|
||||
"account.reverseShares.table.expires": "تاريخ انتهاء الصلاحية",
|
||||
"account.reverseShares.modal.reverse-share-link": "رابط المشاركة العكسية",
|
||||
"account.reverseShares.modal.delete.title": "حذف المشاركة العكسية",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"هل تريد حقاً حذف هذه المشاركة العكسية؟ إذا قمت بذلك، فسيتم حذف المشاركات المرتبطة بها أيضاً.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "الإدارة",
|
||||
"admin.button.users": "إدارة المستخدم",
|
||||
"admin.button.shares": "إدارة المشاركة",
|
||||
"admin.button.config": "الإعدادات",
|
||||
"admin.version": "الإصدار",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "إدارة المستخدم",
|
||||
"admin.users.table.username": "اسم المستخدم",
|
||||
"admin.users.table.email": "البريد",
|
||||
"admin.users.table.admin": "المدير",
|
||||
"admin.users.edit.update.title": "تحديث المستخدم {username}",
|
||||
"admin.users.edit.update.admin-privileges": "صلاحيات المدير",
|
||||
"admin.users.edit.update.change-password.title": "تغيير كلمة السر",
|
||||
"admin.users.edit.update.change-password.field": "كلمة السر الجديدة",
|
||||
"admin.users.edit.update.change-password.button": "حفظ كلمة السر الجديدة",
|
||||
"admin.users.edit.update.notify.password.success": "غيرت كلمة السر بنجاح",
|
||||
"admin.users.edit.delete.title": "حذف المستخدم {username}",
|
||||
"admin.users.edit.delete.description":
|
||||
"هل تريد حقاً حذف هذا المستخدم وكل مشاركاته؟",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "أنشئ مستخدمًا",
|
||||
"admin.users.modal.create.username": "اسم المستخدم",
|
||||
"admin.users.modal.create.email": "البريد",
|
||||
"admin.users.modal.create.password": "كلمة السر",
|
||||
"admin.users.modal.create.manual-password": "تعيين كلمة السر يدوياً",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"بدون هذا الخيار، سيتلقى المستخدم رسالة بريد إلكتروني فيها رابط لتعيين كلمة السر الخاصة به.",
|
||||
"admin.users.modal.create.admin": "صلاحيات المدير",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"مع هذا الخيار، سيتمكن المستخدم من الدخول إلى لوحة الإدارة.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "إدارة المشاركة",
|
||||
"admin.shares.table.id": "معرّف المشاركة",
|
||||
"admin.shares.table.username": "المُنشئ",
|
||||
"admin.shares.table.visitors": "الزوار",
|
||||
"admin.shares.table.expires": "تاريخ انتهاء الصلاحية",
|
||||
"admin.shares.edit.delete.title": "حذف المشاركة {id}",
|
||||
"admin.shares.edit.delete.description": "هل تريد حذف هذه المشاركة حقاً؟",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "رفع",
|
||||
"upload.notify.generic-error": "حدث خطأ أثناء إنهاء مشاركتك.",
|
||||
"upload.notify.count-failed": "فشل رفع {count} ملفات. تجري المحاولة مجددًا.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "رفع الملفات",
|
||||
"upload.dropzone.description":
|
||||
"اسحب الملفات إلى هنا لبدء مشاركتك. يمكننا فقط قبول الملفات التي لا يزيد حجمها عن {maxSize} بالمجمل.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"تتجاوز ملفاتك الحجم الأقصى للمشاركة والذي هو {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "الاسم",
|
||||
"upload.filelist.size": "الحجم",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "إنشاء مشاركة",
|
||||
"upload.modal.link.error.invalid":
|
||||
"يمكن أن يحتوي فقط على الأحرف والأرقام والشرطات السفلية والواصلات",
|
||||
"upload.modal.link.error.taken": "هذا الرابط مستخدم مسبقاً",
|
||||
"upload.modal.not-signed-in": "لم تقم بتسجيل الدخول",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"لن تتمكن من حذف مشاركتك يدوياً أو عرض عدد الزوار.",
|
||||
"upload.modal.expires.never": "أبدًا",
|
||||
"upload.modal.expires.never-long": "لا تنتهي الصلاحية أبداً",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"انتهاء الصلاحية يتجاوز الحد الأقصى لتاريخ انتهاء الصلاحية والذي هو {max}.",
|
||||
"upload.modal.link.label": "الرابط",
|
||||
"upload.modal.expires.label": "انتهاء الصلاحية",
|
||||
"upload.modal.expires.minute-singular": "دقيقة",
|
||||
"upload.modal.expires.minute-plural": "دقائق",
|
||||
"upload.modal.expires.hour-singular": "ساعة",
|
||||
"upload.modal.expires.hour-plural": "ساعات",
|
||||
"upload.modal.expires.day-singular": "يوم",
|
||||
"upload.modal.expires.day-plural": "أيام",
|
||||
"upload.modal.expires.week-singular": "أسبوع",
|
||||
"upload.modal.expires.week-plural": "أسابيع",
|
||||
"upload.modal.expires.month-singular": "شهر",
|
||||
"upload.modal.expires.month-plural": "أشهر",
|
||||
"upload.modal.expires.year-singular": "سنة",
|
||||
"upload.modal.expires.year-plural": "سنوات",
|
||||
"upload.modal.accordion.name-and-description.title": "الاسم والوصف",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "الاسم",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"ملاحظة لمستقبلي هذه المشاركة",
|
||||
"upload.modal.accordion.email.title": "مستلمو البريد الإلكتروني",
|
||||
"upload.modal.accordion.email.placeholder": "أدخل مستلمي البريد",
|
||||
"upload.modal.accordion.email.invalid-email": "عنوان البريد غير صحيح",
|
||||
"upload.modal.accordion.security.title": "خيارات الأمان",
|
||||
"upload.modal.accordion.security.password.label": "الحماية بكلمة السر",
|
||||
"upload.modal.accordion.security.password.placeholder": "لا توجد كلمة سر",
|
||||
"upload.modal.accordion.security.max-views.label": "الحد الأقصى للمشاهدات",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "لا يوجد حد",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "لن تنتهي صلاحية هذه المشاركة أبدًا.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"هذه المشاركة ستنتهي صلاحيتها في {expiration}.",
|
||||
"upload.modal.completed.share-ready": "المشاركة جاهزة",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "المشاركة {shareId}",
|
||||
"share.description": "انظر ما الذي شاركته معك!",
|
||||
"share.error.visitor-limit-exceeded.title": "تم تجاوز حد المشاهدات",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"تم تجاوز الحد الأقصى لزوار هذه المشاركة.",
|
||||
"share.error.removed.title": "تمت إزالة المشاركة",
|
||||
"share.error.not-found.title": "المشاركة غير موجودة",
|
||||
"share.error.not-found.description": "المشاركة التي تبحث عنها غير موجودة.",
|
||||
"share.modal.password.title": "كلمة السر مطلوبة",
|
||||
"share.modal.password.description":
|
||||
"للوصول إلى هذه المشاركة الرجاء إدخال كلمة سر المشاركة.",
|
||||
"share.modal.password": "كلمة السر",
|
||||
"share.modal.error.invalid-password": "كلمة السر غير صحيحة",
|
||||
"share.button.download-all": "تنزيل الكل",
|
||||
"share.notify.download-all-preparing":
|
||||
"يتم تحضير المشاركة. حاول مرة أخرى في بضع دقائق.",
|
||||
"share.modal.file-link": "رابط الملف",
|
||||
"share.table.name": "الاسم",
|
||||
"share.table.size": "الحجم",
|
||||
"share.modal.file-preview.error.not-supported.title": "المعاينة غير مدعومة",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"معاينة هذا النوع من الملفات غير مدعومة. الرجاء تنزيل الملف لعرضه.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "تحرير {shareId}",
|
||||
"share.edit.append-upload": "إضافة ملف",
|
||||
"share.edit.notify.generic-error": "حدث خطأ أثناء إنهاء مشاركتك.",
|
||||
"share.edit.notify.save-success": "تم تحديث المشاركة بنجاح",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "الإعدادات",
|
||||
"admin.config.category.general": "عام",
|
||||
"admin.config.category.share": "مشاركة",
|
||||
"admin.config.category.email": "البريد",
|
||||
"admin.config.category.smtp": "بروتوكول نقل البريد البسيط SMTP",
|
||||
"admin.config.category.oauth": "الدخول بحساب تواصل اجتماعي",
|
||||
"admin.config.general.app-name": "اسم التطبيق",
|
||||
"admin.config.general.app-name.description": "اسم التطبيق",
|
||||
"admin.config.general.app-url": "رابط التطبيق",
|
||||
"admin.config.general.app-url.description":
|
||||
"الرابط الذي تكون مشاركة Pingvin صالحة عليه",
|
||||
"admin.config.general.show-home-page": "إظهار الصفحة الرئيسية",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"تحديد ما إذا كان سيتم عرض الصفحة الرئيسية",
|
||||
"admin.config.general.logo": "الشعار",
|
||||
"admin.config.general.logo.description":
|
||||
"يمكنك تغيير شعارك عن طريق تحميل صورة جديدة. يجب أن تكون الصورة PNG ويجب أن يكون تنسيقها 1:1.",
|
||||
"admin.config.general.logo.placeholder": "اختر صورة",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"تفعيل مستلمي البريد الإلكتروني لهذه المشاركة",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"السماح لرسائل البريد بأن تُشارك المستلمين. لا تفعّل هذا الخيار ما لم تفعّل SMTP مسبقًا.",
|
||||
"admin.config.email.share-recipients-subject":
|
||||
"عنوان الرسالة لمستلمي المشاركة",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"عنوان البريد الذي سيُرسَل لمستقبِلي المشاركة.",
|
||||
"admin.config.email.share-recipients-message": "رسالتك لمستقبِلي المشاركة",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"الرسالة التي ستُرسل لمستقبِلي المشاركة. يمكنك استخدام هذه المتغيرات:\n{creator} - اسم المستخدم الذي أنشأ المشاركة\n{shareUrl} - رابط المشاركة\n{desc} - وصف المشاركة\n{expires} - تاريخ انتهاء صلاحية المشاركة\nستتم كتابة قيم هذه المتغيرات تلقائيًا.",
|
||||
"admin.config.email.reverse-share-subject": "عنوان المشاركة العكسية",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"عنوان البريد الذي سيُرسل عندما يُنشئ شخص ما مشاركةً باستخدام رابط المشاركة العكسية الخاص بك.",
|
||||
"admin.config.email.reverse-share-message": "رسالة المشاركة العكسية",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"الرسالة التي ستُرسل عندما يُنشئ شخص ما مشاركة باستخدام رابط المشاركة الخاص بك. سيُوضع اسم المُنشِئ ورابط المشاركة مكان {shareUrl}.",
|
||||
"admin.config.email.reset-password-subject": "رسالة إعادة تعيين كلمة السر",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"عنوان البريد الذي سيُرسل حين يطلب مستخدم ما إعادة تعيين كلمة سرّه.",
|
||||
"admin.config.email.reset-password-message": "رسالة إعادة تعيين كلمة السر",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"الرسالة التي ستُرسل عندما يطلب المستخدم إعادة تعيين كلمة سرّه. سيُوضع رابط إعادة تعيين كلمة السر مكان {url}.",
|
||||
"admin.config.email.invite-subject": "عنوان الدعوة",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"عنوان البريد الذي سيُرسل عندما يقوم المشرف بدعوة مستخدم ما.",
|
||||
"admin.config.email.invite-message": "رسالة الدعوة",
|
||||
"admin.config.email.invite-message.description":
|
||||
"الرسالة التي ستُرسل عندما يدعو مشرفٌ مستخدمًا. سيُوضع رابط الدعوة مكان {url} وكلمة السر مكان {password}.",
|
||||
"admin.config.share.allow-registration": "السماح بالتسجيل",
|
||||
"admin.config.share.allow-registration.description": "إتاحة تسجيل حساب جديد",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"السماح بالمشاركات غير المصادق عليها",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"إتاحة إنشاء المشاركات للمستخدمين غير الموثقين",
|
||||
"admin.config.share.max-expiration": "أبعد زمن لانتهاء الصلاحية",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"أطول زمن لانتهاء صلاحية المشاركات بالساعات. الصفر يعني أن المشاركة لن تنتهي صلاحيتها.",
|
||||
"admin.config.share.max-size": "أكبر حجم",
|
||||
"admin.config.share.max-size.description": "أكبر حجم للمشاركة مقيسًا بالبايت",
|
||||
"admin.config.share.zip-compression-level": "مستوى ضغط الZip",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"ضبط الميزان بين حجم الملف وسرعة الضغط. يمكنك إدخال قيم بين 0 إلى 9، حيث 0 تعني بدون ضغط و9 تعني أقصى ضغط. ",
|
||||
"admin.config.share.chunk-size": "حجم القطعة",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"ضبط حجم القطعة (بالبايت) لملفاتك المرفوعة للموازنة بين الكفاءة والفعالية حسب قوة اتصالك بالإنترنت. القطع الأصغر يمكن أن ترفع معدل النجاح في حال كان اتصالك بالإنترنت غير مستقر، بينما القطع الأكبر يمكنها أن تُسرّع رفع الملفات في حال كان الاتصال بالإنترنت مستقرًا.",
|
||||
"admin.config.smtp.enabled": "مفعل",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"تفعيل الـSMTP. لا تفعّله إلا إذا قمت بإدخال المضيف، والمنفذ، والبريد الإلكتروني، واسم المستخدم، وكلمة السر لخادم الـSMTP.",
|
||||
"admin.config.smtp.host": "المُضيف",
|
||||
"admin.config.smtp.host.description": "مضيف خادم الـSMTP",
|
||||
"admin.config.smtp.port": "المنفذ",
|
||||
"admin.config.smtp.port.description": "منفذ خادم الـSMTP",
|
||||
"admin.config.smtp.email": "البريد الإلكتروني",
|
||||
"admin.config.smtp.email.description":
|
||||
"عنوان البريد الذي ستُرسَل الرسائل منه",
|
||||
"admin.config.smtp.username": "اسم المستخدم",
|
||||
"admin.config.smtp.username.description": "اسم المستخدم لخادم الـSMTP",
|
||||
"admin.config.smtp.password": "كلمة السر",
|
||||
"admin.config.smtp.password.description": "كلمة السر لخادم الـSMTP",
|
||||
"admin.config.smtp.button.test": "إرسال رسالة بريد تجريبية",
|
||||
"admin.config.oauth.allow-registration": "السماح بتسجيل الحسابات الجديدة",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"السماح للمستخدمين بالدخول بواسطة حساباتهم الاجتماعية",
|
||||
"admin.config.oauth.ignore-totp": "تجاهل TOTP",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"تجاهل TOTP إذا دخل المستخدم بحسابه الاجتماعي",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"تفعيل خيار الدخول بحساب GitHub",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"معرف العميل لتطبيق GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret": "الرمز السرّي لـGitHub Client",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"الرّمز السرّي للعميل لتطبيق GitHub OAuth",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"تفعيل خيار الدخول بحساب Google",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"معرف العميل لتطبيق Google OAuth",
|
||||
"admin.config.oauth.google-client-secret": "الرمز السرّي لـ Google Client",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"الرّمز السرّي للعميل لتطبيق Google OAuth",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"تفعيل خيار الدخول بحساب Microsoft",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"معرف Tenant لتطبيق مايكروسوفت OAuth\nالشائع: يمكن للمستخدمين الذين لديهم حساب مايكروسوفت شخصي وحساب عمل أو مدرسة من معرف Microsoft Entra أن يسجلوا الدخول إلى التطبيق. بالنسبة المؤسسات: يمكن فقط للمستخدمين الذين لديهم حسابات عمل أو مدرسة من Microsoft Entra ID تسجيل الدخول إلى التطبيق.\nالمستهلكين: يمكن فقط للمستخدمين الذين لديهم حساب مايكروسوفت الشخصي تسجيل الدخول إلى التطبيق.\nاسم نطاق مستأجر Microsoft Entra أو معرف المستأجر بتنسيق GUID: يمكن فقط للمستخدمين من مستأجر Microsoft Entra محدد (أعضاء الإدارة الذين لديهم حساب عمل أو مدرسة أو ضيوف الإدارة الذين لديهم حساب شخصي لمايكروسوفت) تسجيل الدخول إلى التطبيق.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"معرف العميل لتطبيق Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret":
|
||||
"الرمز السرّي لـMicrosoft Client",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"الرّمز السرّي للعميل لتطبيق Microsoft OAuth",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"تفعيل خيار الدخول بحساب Discord",
|
||||
"admin.config.oauth.discord-limited-guild": "مُعرِّف خادم Discord المحدود",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"حصر تسجيل الدخول على المستخدمين الموجودين في خادم محدّد. اترك هذا الخيار فارغًا لتعطيله.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"معرف العميل لتطبيق Discord OAuth",
|
||||
"admin.config.oauth.discord-client-secret": "الرمز السرّي لـDiscord Client",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"الرّمز السرّي للعميل لتطبيق Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"تفعيل الدخول باستخدام OpenID Connect",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"رابط الاستكشاف لتطبيق OpenID Connect OAuth",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"طلب اسم المستخدم في رمز معرف OpenID Connect. إذا كنت لا تعرف معنى هذا الإعداد، اتركه فارغًا.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"معرف العميل لتطبيق OpenID Connect OAuth",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"الرّمز السرّي للعميل لتطبيق OpenID Connect OAuth",
|
||||
// 404
|
||||
"404.description": "هذه الصفحة غير موجودة.",
|
||||
"404.button.home": "أعدني للصفحة الرئيسية",
|
||||
// error
|
||||
"error.title": "خطأ",
|
||||
"error.description": "عذرًا!",
|
||||
"error.button.back": "العودة",
|
||||
"error.msg.default": "حَدث خطأ ما.",
|
||||
"error.msg.access_denied":
|
||||
"قمت بإلغاء عملية المصادقة، الرجاء المحاولة مرة أخرى.",
|
||||
"error.msg.expired_token":
|
||||
"استغرقت عملية المصادقة وقتًا طويلًا، يرجى المحاولة مرة أخرى.",
|
||||
"error.msg.invalid_token": "خطأ داخلي",
|
||||
"error.msg.no_user": "المستخدم المرتبط بهذا الحساب {0} غير موجود.",
|
||||
"error.msg.no_email":
|
||||
"لا يمكن الحصول على عنوان البريد الإلكتروني من هذا الحساب {0}.",
|
||||
"error.msg.already_linked": "حساب {0} هذا مرتبط بالفعل بحساب آخر.",
|
||||
"error.msg.not_linked": "لم يتم ربط حساب {0} هذا بأي حساب حتى الآن.",
|
||||
"error.msg.unverified_account":
|
||||
"لم يتم التحقق من حساب {0} هذا، يرجى المحاولة مرة أخرى بعد التحقق.",
|
||||
"error.msg.discord_guild_permission_denied": "غير مسموح لك بتسجيل الدخول.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"فشلت عملية جلب معلومات المستخدم الخاصة بك من حساب {0} هذا.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "حفظ",
|
||||
"common.button.create": "إنشاء",
|
||||
"common.button.submit": "إرسال",
|
||||
"common.button.delete": "حذف",
|
||||
"common.button.cancel": "إلغاء",
|
||||
"common.button.confirm": "تأكيد",
|
||||
"common.button.disable": "إيقاف",
|
||||
"common.button.share": "مشاركة",
|
||||
"common.button.generate": "توليد",
|
||||
"common.button.done": "تم",
|
||||
"common.text.link": "الرابط",
|
||||
"common.text.navigate-to-link": "الذهاب إلى الرابط",
|
||||
"common.text.or": "أو",
|
||||
"common.button.go-back": "العودة",
|
||||
"common.button.go-home": "العودة للصفحة الرئيسية",
|
||||
"common.notify.copied": "تم نسخ الرابط إلى الحافظة",
|
||||
"common.success": "تم",
|
||||
"common.error": "خطأ",
|
||||
"common.error.unknown": "حدث خطأ غير معروف",
|
||||
"common.error.invalid-email": "عنوان البريد غير صحيح",
|
||||
"common.error.too-short": "يجب أن يكون على الأقل {length} حرفًا",
|
||||
"common.error.too-long": "يجب أن يكون على الأكثر {length} حرفًا",
|
||||
"common.error.exact-length": "يجب أن يكون بالضبط {length} حرفًا",
|
||||
"common.error.invalid-number": "يجب أن يكون رقماً",
|
||||
"common.error.field-required": "هذا الحقل مطلوب",
|
||||
};
|
||||
@@ -12,13 +12,16 @@ export default {
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "En <h>self-hosted</h> fildelingsplatform.",
|
||||
"home.description": "Er du sikker på, at du vil overlade dine personlige filer til tredjeparter som WeTransfer?",
|
||||
"home.description":
|
||||
"Er du sikker på, at du vil overlade dine personlige filer til tredjeparter som WeTransfer?",
|
||||
"home.bullet.a.name": "Self-Hosted",
|
||||
"home.bullet.a.description": "Host Pingvin Share på din egen maskine.",
|
||||
"home.bullet.b.name": "Privatliv",
|
||||
"home.bullet.b.description": "Dine filer er dine filer og bør ikke komme i hænderne på tredjeparter.",
|
||||
"home.bullet.b.description":
|
||||
"Dine filer er dine filer og bør ikke komme i hænderne på tredjeparter.",
|
||||
"home.bullet.c.name": "Ingen irriterende grænse for filstørrelse",
|
||||
"home.bullet.c.description": "Upload så store filer, som du vil. Kun din harddisk sætter grænsen.",
|
||||
"home.bullet.c.description":
|
||||
"Upload så store filer, som du vil. Kun din harddisk sætter grænsen.",
|
||||
"home.button.start": "Kom i gang",
|
||||
"home.button.source": "Source code",
|
||||
// END /
|
||||
@@ -27,12 +30,14 @@ export default {
|
||||
"signin.description": "Har du ikke en bruger endnu?",
|
||||
"signin.button.signup": "Opret bruger",
|
||||
"signin.input.email-or-username": "E-mail eller brugernavn",
|
||||
"signin.input.email-or-username.placeholder": "Din e-mail eller dit brugernavn",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"Din e-mail eller dit brugernavn",
|
||||
"signin.input.password": "Adgangskode",
|
||||
"signin.input.password.placeholder": "Din adgangskode",
|
||||
"signin.button.submit": "Log ind",
|
||||
"signIn.notify.totp-required.title": "2-faktor login påkrævet",
|
||||
"signIn.notify.totp-required.description": "Indtast den aktuelle engangskode fra din 2-faktor Authenticator",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Indtast den aktuelle engangskode fra din 2-faktor Authenticator",
|
||||
"signIn.oauth.or": "OR",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -56,8 +61,10 @@ export default {
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Glemt din adgangskode?",
|
||||
"resetPassword.description": "Indtast din e-mail for at nulstille din adgangskode.",
|
||||
"resetPassword.notify.success": "En e-mail er blevet sendt med et link til at nulstille din adgangskode.",
|
||||
"resetPassword.description":
|
||||
"Indtast din e-mail for at nulstille din adgangskode.",
|
||||
"resetPassword.notify.success":
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.button.back": "Tilbage til login",
|
||||
"resetPassword.text.resetPassword": "Nulstil adgangskode",
|
||||
"resetPassword.text.enterNewPassword": "Indtast din nye adgangskode",
|
||||
@@ -72,7 +79,8 @@ export default {
|
||||
"account.card.password.title": "Adgangskode",
|
||||
"account.card.password.old": "Gammel adgangskode",
|
||||
"account.card.password.new": "Ny adgangskode",
|
||||
"account.card.password.noPasswordSet": "You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.notify.password.success": "Adgangskoden er ændret",
|
||||
"account.card.oauth.title": "Social login",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +92,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Unlink",
|
||||
"account.card.oauth.unlinked": "Unlinked",
|
||||
"account.modal.unlink.title": "Unlink account",
|
||||
"account.modal.unlink.description": "Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.modal.unlink.description":
|
||||
"Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.notify.oauth.unlinked.success": "Unlinked successfully",
|
||||
"account.card.security.title": "Sikkerhed",
|
||||
"account.card.security.totp.enable.description": "Indtast din nuværende adgangskode for at begynde opsætningen af 2-faktor login",
|
||||
"account.card.security.totp.disable.description": "Indtast din nuværende adgangskode for at begynde opsætningen af 2-faktor login",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Indtast din nuværende adgangskode for at begynde opsætningen af 2-faktor login",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Indtast din nuværende adgangskode for at begynde opsætningen af 2-faktor login",
|
||||
"account.card.security.totp.button.start": "Start",
|
||||
"account.modal.totp.title": "Aktiver 2-faktor login",
|
||||
"account.modal.totp.step1": "Trin 1: Tilføj din 2-faktor Authenticator",
|
||||
"account.modal.totp.step2": "Trin 2: Valider din kode",
|
||||
"account.modal.totp.enterManually": "Indtast manuelt",
|
||||
"account.modal.totp.code": "Kode",
|
||||
"account.modal.totp.clickToCopy": "Klik for at kopiere",
|
||||
"common.button.clickToCopy": "Klik for at kopiere",
|
||||
"account.modal.totp.verify": "Bekræft",
|
||||
"account.notify.totp.disable": "2-faktor blev deaktiveret",
|
||||
"account.notify.totp.enable": "2-faktor blev deaktiveret",
|
||||
"account.card.language.title": "Sprog",
|
||||
"account.card.language.description": "The project is translated by the community. Some languages might be incomplete.",
|
||||
"account.card.language.description":
|
||||
"The project is translated by the community. Some languages might be incomplete.",
|
||||
"account.card.color.title": "Farveskema",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Mørkt",
|
||||
@@ -108,7 +120,8 @@ export default {
|
||||
"account.theme.system": "System",
|
||||
"account.button.delete": "Slet bruger",
|
||||
"account.modal.delete.title": "Slet bruger",
|
||||
"account.modal.delete.description": "Er du sikker på at du vil slette din bruger, herunder alle dine aktive delinger?",
|
||||
"account.modal.delete.description":
|
||||
"Er du sikker på at du vil slette din bruger, herunder alle dine aktive delinger?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Mine delte filer",
|
||||
@@ -126,13 +139,16 @@ export default {
|
||||
"account.shares.modal.share-informations": "Share informations",
|
||||
"account.shares.modal.share-link": "Del link",
|
||||
"account.shares.modal.delete.title": "Slet share {share}",
|
||||
"account.shares.modal.delete.description": "Ønsker du virkelig at slette denne deling?",
|
||||
"account.shares.modal.delete.description":
|
||||
"Ønsker du virkelig at slette denne deling?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Omvendt deling",
|
||||
"account.reverseShares.description": "A reverse share allows you to generate a unique URL that allows external users to create a share.",
|
||||
"account.reverseShares.description":
|
||||
"A reverse share allows you to generate a unique URL that allows external users to create a share.",
|
||||
"account.reverseShares.title.empty": "Der er tomt her 👀",
|
||||
"account.reverseShares.description.empty": "You don't have any reverse shares.",
|
||||
"account.reverseShares.description.empty":
|
||||
"You don't have any reverse shares.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Create reverse share",
|
||||
"account.reverseShares.modal.expiration.label": "Udløb",
|
||||
@@ -150,12 +166,16 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "År",
|
||||
"account.reverseShares.modal.max-size.label": "Maksimal størrelse for deling",
|
||||
"account.reverseShares.modal.send-email": "Send e-mail notifikation",
|
||||
"account.reverseShares.modal.send-email.description": "Send en e-mail notifikation, når der oprettes en deling med dette omvendte delingslink.",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Send en e-mail notifikation, når der oprettes en deling med dette omvendte delingslink.",
|
||||
"account.reverseShares.modal.max-use.label": "Maksimal anvendelser",
|
||||
"account.reverseShares.modal.max-use.description": "Det maksimale antal gange, denne URL kan bruges til at oprette en deling.",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Det maksimale antal gange, denne URL kan bruges til at oprette en deling.",
|
||||
"account.reverseShare.never-expires": "Denne omvendte deling udløber aldrig.",
|
||||
"account.reverseShare.expires-on": "Denne omvendte deling udløber den {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Der er ikke oprettet nogle delinger endnu",
|
||||
"account.reverseShare.expires-on":
|
||||
"Denne omvendte deling udløber den {expiration}.",
|
||||
"account.reverseShares.table.no-shares":
|
||||
"Der er ikke oprettet nogle delinger endnu",
|
||||
"account.reverseShares.table.count.singular": "del",
|
||||
"account.reverseShares.table.count.plural": "shares",
|
||||
"account.reverseShares.table.shares": "Delinger",
|
||||
@@ -164,11 +184,13 @@ export default {
|
||||
"account.reverseShares.table.expires": "Udløber d",
|
||||
"account.reverseShares.modal.reverse-share-link": "Reverse share link",
|
||||
"account.reverseShares.modal.delete.title": "Delete reverse share",
|
||||
"account.reverseShares.modal.delete.description": "Ønsker du virkelig at slette denne omvendte deling? Hvis du gør det, vil de tilknyttede delinger også blive slettet.",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Ønsker du virkelig at slette denne omvendte deling? Hvis du gør det, vil de tilknyttede delinger også blive slettet.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Administration",
|
||||
"admin.button.users": "Brugeradministration",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Konfiguration",
|
||||
"admin.version": "Version",
|
||||
// END /admin
|
||||
@@ -184,37 +206,56 @@ export default {
|
||||
"admin.users.edit.update.change-password.button": "Gem ny adgangskode",
|
||||
"admin.users.edit.update.notify.password.success": "Adgangskoden er ændret",
|
||||
"admin.users.edit.delete.title": "Slet bruger {username}",
|
||||
"admin.users.edit.delete.description": "Er du sikker på du vil slette denne bruger og tilhørende delinger?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Er du sikker på du vil slette denne bruger og tilhørende delinger?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Opret bruger",
|
||||
"admin.users.modal.create.username": "Brugernavn",
|
||||
"admin.users.modal.create.email": "E-mail",
|
||||
"admin.users.modal.create.password": "Adgangskode",
|
||||
"admin.users.modal.create.manual-password": "Angiv adgangskode manuelt",
|
||||
"admin.users.modal.create.manual-password.description": "If not checked, the user will receive an email with a link to set their password.",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"If not checked, the user will receive an email with a link to set their password.",
|
||||
"admin.users.modal.create.admin": "Admin rettigheder",
|
||||
"admin.users.modal.create.admin.description": "If checked, the user will be able to access the admin panel.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"If checked, the user will be able to access the admin panel.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Upload",
|
||||
"upload.notify.generic-error": "Der opstod en fejl under afslutningen af din deling.",
|
||||
"upload.notify.generic-error":
|
||||
"Der opstod en fejl under afslutningen af din deling.",
|
||||
"upload.notify.count-failed": "{count} files failed to upload. Trying again.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Upload filer",
|
||||
"upload.dropzone.description": "Drag'n'drop files here to start your share. We can accept only files that are less than {maxSize} in total.",
|
||||
"upload.dropzone.notify.file-too-big": "Your files exceed the maximum share size of {maxSize}.",
|
||||
"upload.dropzone.description":
|
||||
"Drag'n'drop files here to start your share. We can accept only files that are less than {maxSize} in total.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Your files exceed the maximum share size of {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Navn",
|
||||
"upload.filelist.size": "Størrelse",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Opret Deling",
|
||||
"upload.modal.link.error.invalid": "Can only contain letters, numbers, underscores, and hyphens",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Can only contain letters, numbers, underscores, and hyphens",
|
||||
"upload.modal.link.error.taken": "Det valgte link er allerede i brug",
|
||||
"upload.modal.not-signed-in": "Du er ikke logget ind",
|
||||
"upload.modal.not-signed-in-description": "Du vil ikke være i stand til at slette din deling manuelt og se antallet af besøgende.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Du vil ikke være i stand til at slette din deling manuelt og se antallet af besøgende.",
|
||||
"upload.modal.expires.never": "aldrig",
|
||||
"upload.modal.expires.never-long": "Udløber aldrig",
|
||||
"upload.modal.expires.error.too-long": "Udløbsdatoen overskrider den maksimalt tilladte udløbsdato på {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Udløbsdatoen overskrider den maksimalt tilladte udløbsdato på {max}.",
|
||||
"upload.modal.link.label": "Link",
|
||||
"upload.modal.expires.label": "Udløb",
|
||||
"upload.modal.expires.minute-singular": "Minut",
|
||||
@@ -229,8 +270,10 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Måneder",
|
||||
"upload.modal.expires.year-singular": "År",
|
||||
"upload.modal.expires.year-plural": "År",
|
||||
"upload.modal.accordion.description.title": "Beskrivelse",
|
||||
"upload.modal.accordion.description.placeholder": "Bemærkning til modtagerne af dette share",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "E-mail modtagere",
|
||||
"upload.modal.accordion.email.placeholder": "Indtast e-mail modtagere",
|
||||
"upload.modal.accordion.email.invalid-email": "Ugyldig e-mailadresse",
|
||||
@@ -241,33 +284,42 @@ export default {
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Ingen begrænsning",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Denne deling vil aldrig udløbe.",
|
||||
"upload.modal.completed.expires-on": "Denne omvendte deling udløber den {expiration}.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"Denne omvendte deling udløber den {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Delingen er klar",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Del {shareId}",
|
||||
"share.description": "Se hvad jeg har delt med dig!",
|
||||
"share.error.visitor-limit-exceeded.title": "Grænsen for besøgende overskredet",
|
||||
"share.error.visitor-limit-exceeded.description": "Besøgsgrænsen for denne deling er blevet overskredet.",
|
||||
"share.error.visitor-limit-exceeded.title":
|
||||
"Grænsen for besøgende overskredet",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Besøgsgrænsen for denne deling er blevet overskredet.",
|
||||
"share.error.removed.title": "Deling fjernet",
|
||||
"share.error.not-found.title": "Delingen blev ikke fundet",
|
||||
"share.error.not-found.description": "Den deling, du leder efter, eksisterer ikke.",
|
||||
"share.error.not-found.description":
|
||||
"Den deling, du leder efter, eksisterer ikke.",
|
||||
"share.modal.password.title": "Adgangskode påkrævet",
|
||||
"share.modal.password.description": "For at få adgang til denne deling, indtast venligst adgangskoden til delingen.",
|
||||
"share.modal.password.description":
|
||||
"For at få adgang til denne deling, indtast venligst adgangskoden til delingen.",
|
||||
"share.modal.password": "Adgangskode",
|
||||
"share.modal.error.invalid-password": "Ugyldig adgangskode",
|
||||
"share.button.download-all": "Download alle",
|
||||
"share.notify.download-all-preparing": "Delingen forberedes. Prøv igen om et par minutter.",
|
||||
"share.notify.download-all-preparing":
|
||||
"Delingen forberedes. Prøv igen om et par minutter.",
|
||||
"share.modal.file-link": "Fil link",
|
||||
"share.table.name": "Navn",
|
||||
"share.table.size": "Størrelse",
|
||||
"share.modal.file-preview.error.not-supported.title": "Forhåndsvisning ikke understøttet",
|
||||
"share.modal.file-preview.error.not-supported.description": "En forhåndsvisning for thise filtype er ikke understøttet. Download venligst filen for at se den.",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Forhåndsvisning ikke understøttet",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"A preview for this file type is unsupported. Please download the file to view it.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Edit {shareId}",
|
||||
"share.edit.append-upload": "Append file",
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.generic-error":
|
||||
"An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,110 +332,167 @@ export default {
|
||||
"admin.config.general.app-name": "App-navn",
|
||||
"admin.config.general.app-name.description": "Navnet på applikationen",
|
||||
"admin.config.general.app-url": "App URL",
|
||||
"admin.config.general.app-url.description": "På hvilken URL Pingvin Share er tilgængelig",
|
||||
"admin.config.general.app-url.description":
|
||||
"På hvilken URL Pingvin Share er tilgængelig",
|
||||
"admin.config.general.show-home-page": "Vis forside",
|
||||
"admin.config.general.show-home-page.description": "Om forsiden skal vises",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Skift dit logo ved at uploade et nyt billede. Billedet skal være PNG og skal have formatet 1:1.",
|
||||
"admin.config.general.logo.description":
|
||||
"Skift dit logo ved at uploade et nyt billede. Billedet skal være PNG og skal have formatet 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Vælg billede",
|
||||
"admin.config.email.enable-share-email-recipients": "Aktiver deling til e-mail modtagere",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Whether to allow emails to share recipients. Only enable this if you have enabled SMTP.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Aktiver deling til e-mail modtagere",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Whether to allow emails to share recipients. Only enable this if you have enabled SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Share recipients subject",
|
||||
"admin.config.email.share-recipients-subject.description": "Subject of the email which gets sent to the share recipients.",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Subject of the email which gets sent to the share recipients.",
|
||||
"admin.config.email.share-recipients-message": "Share recipients message",
|
||||
"admin.config.email.share-recipients-message.description": "Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {shareUrl} - The URL of the share\n {desc} - The description of the share\n {expires} - The expiration date of the share\n The variables will be replaced with the actual value.",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {shareUrl} - The URL of the share\n {desc} - The description of the share\n {expires} - The expiration date of the share\n The variables will be replaced with the actual value.",
|
||||
"admin.config.email.reverse-share-subject": "Reverse share subject",
|
||||
"admin.config.email.reverse-share-subject.description": "Subject of the email which gets sent when someone created a share with your reverse share link.",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Subject of the email which gets sent when someone created a share with your reverse share link.",
|
||||
"admin.config.email.reverse-share-message": "Reverse share message",
|
||||
"admin.config.email.reverse-share-message.description": "Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.",
|
||||
"admin.config.email.reset-password-subject": "Reset password subject",
|
||||
"admin.config.email.reset-password-subject.description": "Subject of the email which gets sent when a user requests a password reset.",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Subject of the email which gets sent when a user requests a password reset.",
|
||||
"admin.config.email.reset-password-message": "Nulstil adgangskode besked",
|
||||
"admin.config.email.reset-password-message.description": "Message which gets sent when a user requests a password reset. {url} will be replaced with the reset password URL.",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Message which gets sent when a user requests a password reset. {url} will be replaced with the reset password URL.",
|
||||
"admin.config.email.invite-subject": "Invitations emne",
|
||||
"admin.config.email.invite-subject.description": "Emne for den e-mail, der sendes, når en administrator inviterer en ny bruger.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Emne for den e-mail, der sendes, når en administrator inviterer en ny bruger.",
|
||||
"admin.config.email.invite-message": "Invitations besked",
|
||||
"admin.config.email.invite-message.description": "Besked som bliver sendt, når en administrator inviterer en bruger. {url} vil blive erstattet med invitations-URL'en og {password} med adgangskoden.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Besked som bliver sendt, når en administrator inviterer en bruger. {url} vil blive erstattet med invitations-URL'en og {password} med adgangskoden.",
|
||||
"admin.config.share.allow-registration": "Tillad oprettelser",
|
||||
"admin.config.share.allow-registration.description": "Om alle skal kunne oprette en bruger",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Tillad uautoriserede delinger",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Whether unauthenticated users can create shares",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Om alle skal kunne oprette en bruger",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Tillad uautoriserede delinger",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Whether unauthenticated users can create shares",
|
||||
"admin.config.share.max-expiration": "Maks. udløb",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.max-size": "Maks. størrelse",
|
||||
"admin.config.share.max-size.description": "Maksimal filstørrelse i bytes",
|
||||
"admin.config.share.zip-compression-level": "Zip compression level",
|
||||
"admin.config.share.zip-compression-level.description": "Adjust the level to balance between file size and compression speed. Valid values range from 0 to 9, with 0 being no compression and 9 being maximum compression. ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Adjust the level to balance between file size and compression speed. Valid values range from 0 to 9, with 0 being no compression and 9 being maximum compression. ",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "Aktiveret",
|
||||
"admin.config.smtp.enabled.description": "Om SMTP er aktiveret. Aktiver kun SMTP, hvis du har indtastet SMTP-server vært, port, e-mail, bruger og adgangskode.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Om SMTP er aktiveret. Aktiver kun SMTP, hvis du har indtastet SMTP-server vært, port, e-mail, bruger og adgangskode.",
|
||||
"admin.config.smtp.host": "Vært",
|
||||
"admin.config.smtp.host.description": "Vært for SMTP serveren",
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "Porten til SMTP serveren",
|
||||
"admin.config.smtp.email": "E-mail",
|
||||
"admin.config.smtp.email.description": "E-mail adressen som der skal afsendes fra",
|
||||
"admin.config.smtp.email.description":
|
||||
"E-mail adressen som der skal afsendes fra",
|
||||
"admin.config.smtp.username": "Brugernavn",
|
||||
"admin.config.smtp.username.description": "Brugernavnet til SMTP serveren",
|
||||
"admin.config.smtp.password": "Adgangskode",
|
||||
"admin.config.smtp.password.description": "Adgangskoden til SMTP serveren",
|
||||
"admin.config.smtp.button.test": "Send test e-mail",
|
||||
"admin.config.oauth.allow-registration": "Allow registration",
|
||||
"admin.config.oauth.allow-registration.description": "Allow users to register via social login",
|
||||
"admin.config.oauth.allow-registration": "Tillad registrering",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Allow users to register via social login",
|
||||
"admin.config.oauth.ignore-totp": "Ignore TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description": "Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Whether Google login is enabled",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Whether Google login is enabled",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord limited server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limit signing in to users in a specific server. Leave it blank to disable.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Whether OpenID login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID OAuth app",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Whether OpenID Connect login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "Ups! Denne side findes ikke.",
|
||||
"404.button.home": "Gå tilbage",
|
||||
// error
|
||||
"error.title": "Error",
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Go back",
|
||||
"error.title": "Fejl",
|
||||
"error.description": "Hovsa!",
|
||||
"error.button.back": "Gå tilbage",
|
||||
"error.msg.default": "Something went wrong.",
|
||||
"error.msg.access_denied": "You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token": "The authentication process took too long, please try again.",
|
||||
"error.msg.access_denied":
|
||||
"You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token":
|
||||
"The authentication process took too long, please try again.",
|
||||
"error.msg.invalid_token": "Intern Fejl",
|
||||
"error.msg.no_user": "User linked to this {0} account doesn't exist.",
|
||||
"error.msg.no_email": "Can't get email address from this {0} account.",
|
||||
"error.msg.already_linked": "This {0} account is already linked to another account.",
|
||||
"error.msg.already_linked":
|
||||
"This {0} account is already linked to another account.",
|
||||
"error.msg.not_linked": "This {0} account haven't linked to any account yet.",
|
||||
"error.msg.unverified_account":
|
||||
"This {0} account is unverified, please try again after verification.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"Du har ikke tilladelse til at logge ind.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Can not get your user info from this {0} account.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Gem",
|
||||
"common.button.create": "Opret",
|
||||
@@ -396,8 +505,10 @@ export default {
|
||||
"common.button.generate": "Generer",
|
||||
"common.button.done": "Færdig",
|
||||
"common.text.link": "Link",
|
||||
"common.text.navigate-to-link": "Go to the link",
|
||||
"common.text.or": "eller",
|
||||
"common.button.go-back": "Gå tilbage",
|
||||
"common.button.go-home": "Go home",
|
||||
"common.notify.copied": "Linket blev kopieret til udklipsholderen",
|
||||
"common.success": "Success",
|
||||
"common.error": "Fejl",
|
||||
@@ -407,5 +518,5 @@ export default {
|
||||
"common.error.too-long": "Må højst være {length} tegn",
|
||||
"common.error.exact-length": "Skal være præcis {length} tegn",
|
||||
"common.error.invalid-number": "Skal være et tal",
|
||||
"common.error.field-required": "Dette felt er påkrævet"
|
||||
};
|
||||
"common.error.field-required": "Dette felt er påkrævet",
|
||||
};
|
||||
|
||||
@@ -12,13 +12,17 @@ export default {
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "Eine <h>selbst gehostete</h> Dateifreigabe-Plattform.",
|
||||
"home.description": "Möchtest du wirklich deine persönlichen Dateien an Drittanbieter wie WeTransfer weitergeben?",
|
||||
"home.description":
|
||||
"Möchtest du wirklich deine persönlichen Dateien an Drittanbieter wie WeTransfer weitergeben?",
|
||||
"home.bullet.a.name": "Selbst gehostet",
|
||||
"home.bullet.a.description": "Betreibe Pingvin Share auf deinem eigenen Server.",
|
||||
"home.bullet.a.description":
|
||||
"Betreibe Pingvin Share auf deinem eigenen Server.",
|
||||
"home.bullet.b.name": "Privatsphäre",
|
||||
"home.bullet.b.description": "Deine Dateien gehören dir und sollten niemals in die Hände Dritter gelangen.",
|
||||
"home.bullet.b.description":
|
||||
"Deine Dateien gehören dir und sollten niemals in die Hände Dritter gelangen.",
|
||||
"home.bullet.c.name": "Keine lästige Dateigrößenbegrenzung",
|
||||
"home.bullet.c.description": "Lade Dateien beliebiger Größe hoch. Nur dein Festplattenspeicher stellt die Grenze dar.",
|
||||
"home.bullet.c.description":
|
||||
"Lade Dateien beliebiger Größe hoch. Nur dein Festplattenspeicher stellt die Grenze dar.",
|
||||
"home.button.start": "Lege los",
|
||||
"home.button.source": "Quellcode",
|
||||
// END /
|
||||
@@ -27,12 +31,14 @@ export default {
|
||||
"signin.description": "Du hast noch kein Konto?",
|
||||
"signin.button.signup": "Registrieren",
|
||||
"signin.input.email-or-username": "Email oder Benutzername",
|
||||
"signin.input.email-or-username.placeholder": "Deine Email Adresse oder Benutzername",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"Deine Email Adresse oder Benutzername",
|
||||
"signin.input.password": "Passwort",
|
||||
"signin.input.password.placeholder": "Dein Passwort",
|
||||
"signin.button.submit": "Anmelden",
|
||||
"signIn.notify.totp-required.title": "Zwei-Faktor-Authentifizierung benötigt",
|
||||
"signIn.notify.totp-required.description": "Bitte füge deinen Zwei-Faktor-Authentifizierungscode ein",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Bitte füge deinen Zwei-Faktor-Authentifizierungscode ein",
|
||||
"signIn.oauth.or": "ODER",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -56,13 +62,16 @@ export default {
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Passwort vergessen?",
|
||||
"resetPassword.description": "Gib deine Email Adresse ein, um dein Passwort zurückzusetzen.",
|
||||
"resetPassword.notify.success": "Ein Link zum Rücksetzen des Passwortes wurde an deine Emailadresse versandt.",
|
||||
"resetPassword.description":
|
||||
"Gib deine Email Adresse ein, um dein Passwort zurückzusetzen.",
|
||||
"resetPassword.notify.success":
|
||||
"Wir haben dir einen Link gesendet, unter dem du dein Passwort zurücksetzen kannst.",
|
||||
"resetPassword.button.back": "Zurück zur Anmeldeseite",
|
||||
"resetPassword.text.resetPassword": "Passwort zurücksetzen",
|
||||
"resetPassword.text.enterNewPassword": "Gib dein neues Passwort ein",
|
||||
"resetPassword.input.password": "Neues Passwort",
|
||||
"resetPassword.notify.passwordReset": "Dein Passwort wurde erfolgreich zurückgesetzt.",
|
||||
"resetPassword.notify.passwordReset":
|
||||
"Dein Passwort wurde erfolgreich zurückgesetzt.",
|
||||
// /account
|
||||
"account.title": "Mein Konto",
|
||||
"account.card.info.title": "Kontoinformationen",
|
||||
@@ -72,35 +81,40 @@ export default {
|
||||
"account.card.password.title": "Passwort",
|
||||
"account.card.password.old": "Altes Passwort",
|
||||
"account.card.password.new": "Neues Passwort",
|
||||
"account.card.password.noPasswordSet": "You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Du hast kein Passwort erstellt. Wenn Du Dich mit E-Mail und Passwort anmelden möchtest, musst Du ein Passwort festlegen.",
|
||||
"account.notify.password.success": "Passwort erfolgreich geändert",
|
||||
"account.card.oauth.title": "Social login",
|
||||
"account.card.oauth.title": "Anmeldung über soziale Netzwerke",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "Link",
|
||||
"account.card.oauth.unlink": "Unlink",
|
||||
"account.card.oauth.unlinked": "Unlinked",
|
||||
"account.modal.unlink.title": "Unlink account",
|
||||
"account.modal.unlink.description": "Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.notify.oauth.unlinked.success": "Unlinked successfully",
|
||||
"account.card.oauth.link": "Verknüpfen",
|
||||
"account.card.oauth.unlink": "Verknüpfung aufheben",
|
||||
"account.card.oauth.unlinked": "Verknüpfung aufgehoben",
|
||||
"account.modal.unlink.title": "Kontoverknüpfung aufheben",
|
||||
"account.modal.unlink.description":
|
||||
"Das Entfernen der Verknüpfung mit Deinem sozialen Konten kann dazu führen, dass Du Dein Konto verlierst, wenn Du Dich nicht an Deinen Benutzernamen und Dein Passwort erinnerst.",
|
||||
"account.notify.oauth.unlinked.success": "Verknüpfung erfolgreich aufgehoben",
|
||||
"account.card.security.title": "Sicherheit",
|
||||
"account.card.security.totp.enable.description": "Gib dein aktuelles Passwort ein, um TOTP zu aktivieren",
|
||||
"account.card.security.totp.disable.description": "Gib dein aktuelles Passwort ein, um TOTP zu deaktivieren",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Gib dein aktuelles Passwort ein, um TOTP zu aktivieren",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Gib dein aktuelles Passwort ein, um TOTP zu deaktivieren",
|
||||
"account.card.security.totp.button.start": "Starten",
|
||||
"account.modal.totp.title": "TOTP aktivieren",
|
||||
"account.modal.totp.step1": "Schritt 1: Füge deinen Authenticator hinzu",
|
||||
"account.modal.totp.step2": "Schritt 2: Bestätige deinen Code",
|
||||
"account.modal.totp.enterManually": "Manuell eingeben",
|
||||
"account.modal.totp.code": "Code",
|
||||
"account.modal.totp.clickToCopy": "Klicken zum Kopieren",
|
||||
"common.button.clickToCopy": "Klicken zum Kopieren",
|
||||
"account.modal.totp.verify": "Überprüfen",
|
||||
"account.notify.totp.disable": "TOTP erfolgreich deaktiviert",
|
||||
"account.notify.totp.enable": "TOTP erfolgreich aktiviert",
|
||||
"account.card.language.title": "Sprache",
|
||||
"account.card.language.description": "Das Projekt wird von der Community übersetzt. Einige Sprachen könnten unvollständig sein.",
|
||||
"account.card.language.description":
|
||||
"Das Projekt wird von der Community übersetzt. Einige Sprachen könnten unvollständig sein.",
|
||||
"account.card.color.title": "Farbschema",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Dunkel",
|
||||
@@ -108,7 +122,8 @@ export default {
|
||||
"account.theme.system": "System",
|
||||
"account.button.delete": "Konto löschen",
|
||||
"account.modal.delete.title": "Konto löschen",
|
||||
"account.modal.delete.description": "Möchtest du wirklich dein Konto inklusive aller aktiven Freigaben löschen?",
|
||||
"account.modal.delete.description":
|
||||
"Möchtest du wirklich dein Konto inklusive aller aktiven Freigaben löschen?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Meine Freigaben",
|
||||
@@ -126,13 +141,16 @@ export default {
|
||||
"account.shares.modal.share-informations": "Teile deine Information",
|
||||
"account.shares.modal.share-link": "Freigabe teilen",
|
||||
"account.shares.modal.delete.title": "Lösche Freigabe {share}",
|
||||
"account.shares.modal.delete.description": "Möchtest du wirklich diese Freigabe löschen?",
|
||||
"account.shares.modal.delete.description":
|
||||
"Möchtest du wirklich diese Freigabe löschen?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Externe Freigaben",
|
||||
"account.reverseShares.description": "Eine externe Freigabe erlaubt dir eine einzigartige URL zu erstellen, die externen Benutzern erlaubt Dateien hochzuladen.",
|
||||
"account.reverseShares.description":
|
||||
"Eine externe Freigabe erlaubt dir eine einzigartige URL zu erstellen, die externen Benutzern erlaubt Dateien hochzuladen.",
|
||||
"account.reverseShares.title.empty": "Es ist leer hier 👀",
|
||||
"account.reverseShares.description.empty": "Du hast keine externen Freigaben erstellt.",
|
||||
"account.reverseShares.description.empty":
|
||||
"Du hast keine externen Freigaben erstellt.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Externe Freigabe erstellen",
|
||||
"account.reverseShares.modal.expiration.label": "Gültig bis",
|
||||
@@ -150,11 +168,15 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "Jahre",
|
||||
"account.reverseShares.modal.max-size.label": "Max. Freigabengröße",
|
||||
"account.reverseShares.modal.send-email": "Email Benachrichtigung senden",
|
||||
"account.reverseShares.modal.send-email.description": "Sendet eine Email Benachrichtigung, wenn eine Datei auf einer externen Freigabe hochgeladen wurde.",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Sendet eine Email Benachrichtigung, wenn eine Datei auf einer externen Freigabe hochgeladen wurde.",
|
||||
"account.reverseShares.modal.max-use.label": "Maximale Nutzungen",
|
||||
"account.reverseShares.modal.max-use.description": "Die maximale Anzahl von Verwendungen der URL, um Dateien hochzuladen.",
|
||||
"account.reverseShare.never-expires": "Diese externe Freigabe wird nicht ablaufen.",
|
||||
"account.reverseShare.expires-on": "Diese externe Freigabe wird am {expiration} ablaufen.",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Die maximale Anzahl von Verwendungen der URL, um Dateien hochzuladen.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Diese externe Freigabe wird nicht ablaufen.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Diese externe Freigabe wird am {expiration} ablaufen.",
|
||||
"account.reverseShares.table.no-shares": "Noch keine Freigaben erstellt",
|
||||
"account.reverseShares.table.count.singular": "Freigabe",
|
||||
"account.reverseShares.table.count.plural": "Freigaben",
|
||||
@@ -164,11 +186,13 @@ export default {
|
||||
"account.reverseShares.table.expires": "Läuft ab am",
|
||||
"account.reverseShares.modal.reverse-share-link": "Link zu externer Freigabe",
|
||||
"account.reverseShares.modal.delete.title": "Lösche externe Freigabe",
|
||||
"account.reverseShares.modal.delete.description": "Möchtest du wirklich diese externe Freigabe löschen? In diesem Falle werden auch hiermit verbundene Freigaben gelöscht.",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Möchtest du wirklich diese externe Freigabe löschen? In diesem Falle werden auch hiermit verbundene Freigaben gelöscht.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Verwaltung",
|
||||
"admin.button.users": "Benutzerverwaltung",
|
||||
"admin.button.shares": "Freigabenverwaltung",
|
||||
"admin.button.config": "Konfiguration",
|
||||
"admin.version": "Version",
|
||||
// END /admin
|
||||
@@ -182,39 +206,60 @@ export default {
|
||||
"admin.users.edit.update.change-password.title": "Passwort ändern",
|
||||
"admin.users.edit.update.change-password.field": "Neues Passwort",
|
||||
"admin.users.edit.update.change-password.button": "Neues Passwort speichern",
|
||||
"admin.users.edit.update.notify.password.success": "Passwort erfolgreich geändert",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Passwort erfolgreich geändert",
|
||||
"admin.users.edit.delete.title": "Löschen des Nutzers {username}",
|
||||
"admin.users.edit.delete.description": "Möchtest du wirklich diesen Benutzer und all seine Freigaben löschen?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Möchtest du wirklich diesen Benutzer und all seine Freigaben löschen?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Benutzer erstellen",
|
||||
"admin.users.modal.create.username": "Benutzername",
|
||||
"admin.users.modal.create.email": "Email",
|
||||
"admin.users.modal.create.password": "Passwort",
|
||||
"admin.users.modal.create.manual-password": "Passwort manuell festlegen",
|
||||
"admin.users.modal.create.manual-password.description": "Wenn nicht aktiviert, erhält der Benutzer eine Email mit einem Link, um sein Passwort festzulegen.",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Wenn nicht aktiviert, erhält der Benutzer eine Email mit einem Link, um sein Passwort festzulegen.",
|
||||
"admin.users.modal.create.admin": "Administratorrechte",
|
||||
"admin.users.modal.create.admin.description": "Wenn aktiviert, kann der Benutzer auf das Administrator-Panel zugreifen.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Wenn aktiviert, kann der Benutzer auf das Administrator-Panel zugreifen.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Freigabenverwaltung",
|
||||
"admin.shares.table.id": "ID teilen",
|
||||
"admin.shares.table.username": "Ersteller",
|
||||
"admin.shares.table.visitors": "Besucher",
|
||||
"admin.shares.table.expires": "Läuft ab am",
|
||||
"admin.shares.edit.delete.title": "Lösche Freigabe {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Möchtest du wirklich diese Freigabe löschen?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Upload",
|
||||
"upload.notify.generic-error": "Während der Erstellung der Freigabe ist ein Fehler aufgetreten.",
|
||||
"upload.notify.count-failed": "{count} Dateien konnten nicht hochgeladen werden. Wird erneut versucht.",
|
||||
"upload.notify.generic-error":
|
||||
"Während der Erstellung der Freigabe ist ein Fehler aufgetreten.",
|
||||
"upload.notify.count-failed":
|
||||
"{count} Dateien konnten nicht hochgeladen werden. Wird erneut versucht.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Dateien hochladen",
|
||||
"upload.dropzone.description": "Ziehe Dateien hierher, um deine Freigabe zu starten. Wir können nur Dateien akzeptieren, die insgesamt weniger als {maxSize} groß sind.",
|
||||
"upload.dropzone.notify.file-too-big": "Ihre Dateien überschreiten die maximale Freigabegröße von {maxSize}.",
|
||||
"upload.dropzone.description":
|
||||
"Ziehe Dateien hierher, um deine Freigabe zu starten. Wir können nur Dateien akzeptieren, die insgesamt weniger als {maxSize} groß sind.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Ihre Dateien überschreiten die maximale Freigabegröße von {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Name",
|
||||
"upload.filelist.size": "Größe",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Erstelle Freigabe",
|
||||
"upload.modal.link.error.invalid": "Darf nur Buchstaben, Zahlen, Unterstriche und Bindestriche enthalten",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Darf nur Buchstaben, Zahlen, Unterstriche und Bindestriche enthalten",
|
||||
"upload.modal.link.error.taken": "Dieser Link wird bereits verwendet",
|
||||
"upload.modal.not-signed-in": "Du bist nicht angemeldet",
|
||||
"upload.modal.not-signed-in-description": "Du wirst deine Freigabe nicht löschen können oder die Besucheranzahl sehen.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Du wirst deine Freigabe nicht löschen können oder die Besucheranzahl sehen.",
|
||||
"upload.modal.expires.never": "niemals",
|
||||
"upload.modal.expires.never-long": "Läuft nicht ab",
|
||||
"upload.modal.expires.error.too-long": "Expiration exceeds maximum expiration date of {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Ablauf überschreitet das maximale Ablaufdatum von {max}.",
|
||||
"upload.modal.link.label": "Link",
|
||||
"upload.modal.expires.label": "Gültig bis",
|
||||
"upload.modal.expires.minute-singular": "Minute",
|
||||
@@ -229,8 +274,10 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Monate",
|
||||
"upload.modal.expires.year-singular": "Jahr",
|
||||
"upload.modal.expires.year-plural": "Year",
|
||||
"upload.modal.accordion.description.title": "Beschreibung",
|
||||
"upload.modal.accordion.description.placeholder": "Hinweis für die Empfänger dieser Freigabe",
|
||||
"upload.modal.accordion.name-and-description.title": "Name und Beschreibung",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Hinweis für die Empfänger dieser Freigabe",
|
||||
"upload.modal.accordion.email.title": "Email Empfänger",
|
||||
"upload.modal.accordion.email.placeholder": "Email der Empfänger eingeben",
|
||||
"upload.modal.accordion.email.invalid-email": "Ungültige Emailadresse",
|
||||
@@ -241,34 +288,41 @@ export default {
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Unbegrenzt",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Diese Freigabe läuft niemals ab.",
|
||||
"upload.modal.completed.expires-on": "Diese Freigabe wird am {expiration} ablaufen.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"Diese Freigabe wird am {expiration} ablaufen.",
|
||||
"upload.modal.completed.share-ready": "Freigabe bereit",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Freigabe {shareId}",
|
||||
"share.description": "Schau, was ich mit dir geteilt habe!",
|
||||
"share.error.visitor-limit-exceeded.title": "Besucher Limit erreicht",
|
||||
"share.error.visitor-limit-exceeded.description": "Die maximale Besucheranzahl für diese Freigabe ist überschritten.",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Die maximale Besucheranzahl für diese Freigabe ist überschritten.",
|
||||
"share.error.removed.title": "Freigabe entfernt",
|
||||
"share.error.not-found.title": "Freigabe nicht gefunden",
|
||||
"share.error.not-found.description": "Die gesuchte Freigabe existiert nicht.",
|
||||
"share.modal.password.title": "Passwort erforderlich",
|
||||
"share.modal.password.description": "Um auf diese Freigabe zuzugreifen, gib bitte das Passwort für die Freigabe ein.",
|
||||
"share.modal.password.description":
|
||||
"Um auf diese Freigabe zuzugreifen, gib bitte das Passwort für die Freigabe ein.",
|
||||
"share.modal.password": "Passwort",
|
||||
"share.modal.error.invalid-password": "Ungültiges Passwort",
|
||||
"share.button.download-all": "Alles herunterladen",
|
||||
"share.notify.download-all-preparing": "Die Freigabe wird vorbereitet. Versuche es in ein paar Minuten erneut.",
|
||||
"share.notify.download-all-preparing":
|
||||
"Die Freigabe wird vorbereitet. Versuche es in ein paar Minuten erneut.",
|
||||
"share.modal.file-link": "Dateilink",
|
||||
"share.table.name": "Name",
|
||||
"share.table.size": "Größe",
|
||||
"share.modal.file-preview.error.not-supported.title": "Vorschau wird nicht unterstützt",
|
||||
"share.modal.file-preview.error.not-supported.description": "Eine Vorschau für diesen Dateityp wird nicht unterstützt. Bitte lade die Datei herunter, um sie anzuzeigen.",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Vorschau wird nicht unterstützt",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"Eine Vorschau für diesen Dateityp wird nicht unterstützt. Bitte lade die Datei herunter, um sie anzusehen.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Edit {shareId}",
|
||||
"share.edit.append-upload": "Append file",
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
"share.edit.title": "{shareId} bearbeiten",
|
||||
"share.edit.append-upload": "Datei anfügen",
|
||||
"share.edit.notify.generic-error":
|
||||
"Während der Erstellung der Freigabe ist ein Fehler aufgetreten.",
|
||||
"share.edit.notify.save-success": "Freigabe erfolgreich aktualisiert",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "Einstellungen",
|
||||
@@ -276,114 +330,178 @@ export default {
|
||||
"admin.config.category.share": "Freigabe",
|
||||
"admin.config.category.email": "E-Mail",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "Social Login",
|
||||
"admin.config.category.oauth": "OAuth-Anmeldung",
|
||||
"admin.config.general.app-name": "App-Name",
|
||||
"admin.config.general.app-name.description": "Name der Applikation",
|
||||
"admin.config.general.app-url": "App-URL",
|
||||
"admin.config.general.app-url.description": "Auf welcher URL Pingvin Share verfügbar ist",
|
||||
"admin.config.general.app-url.description":
|
||||
"Auf welcher URL Pingvin Share verfügbar ist",
|
||||
"admin.config.general.show-home-page": "Startseite anzeigen",
|
||||
"admin.config.general.show-home-page.description": "Ob die Startseite angezeigt werden soll",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Ob die Startseite angezeigt werden soll",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Ändere dein Logo durch Hochladen eines Bildes. Das Bild muss im PNG-Format vorliegen und sollte mit Seitenverhältnis 1:1 sein.",
|
||||
"admin.config.general.logo.description":
|
||||
"Ändere dein Logo durch Hochladen eines Bildes. Das Bild muss im PNG-Format vorliegen und sollte mit Seitenverhältnis 1:1 sein.",
|
||||
"admin.config.general.logo.placeholder": "Bild auswählen",
|
||||
"admin.config.email.enable-share-email-recipients": "Erlaube das Teilen der Freigabe via Email",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Gibt an, ob Emails an Freigabe-Empfänger ermöglicht werden sollen. Aktiviere dies nur, wenn Du SMTP aktivierst hast.",
|
||||
"admin.config.email.share-recipients-subject": "Betreff für Freigabe-Empfänger",
|
||||
"admin.config.email.share-recipients-subject.description": "Betreff der E-Mail, die an die Freigabe-Empfänger gesendet wird.",
|
||||
"admin.config.email.share-recipients-message": "Nachricht für Freigabe-Empfänger",
|
||||
"admin.config.email.share-recipients-message.description": "Nachricht, die an die Freigabe-Empfänger gesendet wird. Verfügbare Variablen:\n- {creator} - Der Benutzername des Erstellers der Freigabe\n- {shareUrl} - Die URL der Freigabe\n- {desc} - Die Beschreibung der Freigabe\n- {expires} - Das Ablaufdatum der Freigabe\nVariablen werden durch die tatsächlichen Werte ersetzt.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Erlaube das Teilen der Freigabe via Email",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Gibt an, ob Emails an Freigabe-Empfänger ermöglicht werden sollen. Aktiviere dies nur, wenn Du SMTP aktivierst hast.",
|
||||
"admin.config.email.share-recipients-subject":
|
||||
"Betreff für Freigabe-Empfänger",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Betreff der E-Mail, die an die Freigabe-Empfänger gesendet wird.",
|
||||
"admin.config.email.share-recipients-message":
|
||||
"Nachricht für Freigabe-Empfänger",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Nachricht, die an die Freigabe-Empfänger gesendet wird. Verfügbare Variablen:\n- {creator} - Der Benutzername des Erstellers der Freigabe\n- {shareUrl} - Die URL der Freigabe\n- {desc} - Die Beschreibung der Freigabe\n- {expires} - Das Ablaufdatum der Freigabe\nVariablen werden durch die tatsächlichen Werte ersetzt.",
|
||||
"admin.config.email.reverse-share-subject": "Name der externen Freigabe",
|
||||
"admin.config.email.reverse-share-subject.description": "Betreff der Email, die gesendet wird, wenn jemand eine Datei mit deinem externen Freigabe-Link hochlädt.",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Betreff der Email, die gesendet wird, wenn jemand eine Datei mit deinem externen Freigabe-Link hochlädt.",
|
||||
"admin.config.email.reverse-share-message": "Nachricht für externe Freigabe",
|
||||
"admin.config.email.reverse-share-message.description": "Nachricht, die gesendet wird, wenn jemand eine Freigabe mit deinem externen Freigabe-Link erstellt. {shareUrl} wird durch den Namen des Erstellers und die Freigabe-URL ersetzt.",
|
||||
"admin.config.email.reset-password-subject": "Betreff für Passwortzurücksetzung",
|
||||
"admin.config.email.reset-password-subject.description": "Betreff der E-Mail, die gesendet wird, wenn ein Benutzer eine Passwortzurücksetzung anfordert.",
|
||||
"admin.config.email.reset-password-message": "Nachricht für Passwortzurücksetzung",
|
||||
"admin.config.email.reset-password-message.description": "Nachricht, die gesendet wird, wenn ein Benutzer eine Passwortzurücksetzung anfordert. {url} wird durch die URL für das Zurücksetzen des Passworts ersetzt.",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Nachricht, die gesendet wird, wenn jemand eine Freigabe mit deinem externen Freigabe-Link erstellt. {shareUrl} wird durch den Namen des Erstellers und die Freigabe-URL ersetzt.",
|
||||
"admin.config.email.reset-password-subject":
|
||||
"Betreff für Passwortzurücksetzung",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Betreff der E-Mail, die gesendet wird, wenn ein Benutzer eine Passwortzurücksetzung anfordert.",
|
||||
"admin.config.email.reset-password-message":
|
||||
"Nachricht für Passwortzurücksetzung",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Nachricht, die gesendet wird, wenn ein Benutzer eine Passwortzurücksetzung anfordert. {url} wird durch die URL für das Zurücksetzen des Passworts ersetzt.",
|
||||
"admin.config.email.invite-subject": "Betreff für Einladung",
|
||||
"admin.config.email.invite-subject.description": "Betreff der E-Mail, die gesendet wird, wenn ein Administrator einen Benutzer einlädt.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Betreff der E-Mail, die gesendet wird, wenn ein Administrator einen Benutzer einlädt.",
|
||||
"admin.config.email.invite-message": "Nachricht für Einladung",
|
||||
"admin.config.email.invite-message.description": "Nachricht, die gesendet wird, wenn ein Administrator einen Benutzer einlädt. {url} wird durch die Einladungs-URL und {password} durch das Passwort ersetzt.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Nachricht, die gesendet wird, wenn ein Administrator einen Benutzer einlädt. {url} wird durch die Einladungs-URL und {password} durch das Passwort ersetzt.",
|
||||
"admin.config.share.allow-registration": "Registrierung erlauben",
|
||||
"admin.config.share.allow-registration.description": "Gibt an, ob eine Registrierung erlaubt ist",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Nicht authentifizierte Freigaben erlauben",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Gibt an, ob nicht authentifizierte Benutzer Freigaben erstellen können",
|
||||
"admin.config.share.max-expiration": "Max expiration",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Gibt an, ob eine Registrierung erlaubt ist",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Nicht authentifizierte Freigaben erlauben",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Gibt an, ob nicht authentifizierte Benutzer Freigaben erstellen können",
|
||||
"admin.config.share.max-expiration": "Max. Ablaufdatum",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Maximale Ablaufzeit in Stunden. Auf 0 setzen, um kein Ablaufdatum zu definieren.",
|
||||
"admin.config.share.max-size": "Maximale Größe",
|
||||
"admin.config.share.max-size.description": "Maximale Größe einer Freigabe in Bytes",
|
||||
"admin.config.share.max-size.description":
|
||||
"Maximale Größe einer Freigabe in Bytes",
|
||||
"admin.config.share.zip-compression-level": "Zip Komprimierungsstufe",
|
||||
"admin.config.share.zip-compression-level.description": "Passe den Wert an, um ein Gleichgewicht zwischen Dateigröße und Komprimierungsgeschwindigkeit herzustellen. Gültige Werte liegen zwischen 0 und 9, wobei 0 für keine Komprimierung und 9 für maximale Komprimierung steht.",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Passe den Wert an, um ein Gleichgewicht zwischen Dateigröße und Komprimierungsgeschwindigkeit herzustellen. Gültige Werte liegen zwischen 0 und 9, wobei 0 für keine Komprimierung und 9 für maximale Komprimierung steht.",
|
||||
"admin.config.share.chunk-size": "Chunkgröße",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Passe die Chunkgröße (in Bytes) für deine Uploads an, um die Zuverlässigkeit deiner Internetverbindung auszugleichen. Kleinere Chunks können die Erfolgsraten für instabile Verbindungen verbessern, während größere Chunks Uploads für stabile Verbindungen beschleunigen können.",
|
||||
"admin.config.smtp.enabled": "Aktiviert",
|
||||
"admin.config.smtp.enabled.description": "Gibt an, ob SMTP aktiviert ist. Aktiviere dies nur, wenn Du den Host, den Port, die Email, den Benutzernamen und das Passwort deines SMTP-Servers eingegeben hast.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Gibt an, ob SMTP aktiviert ist. Aktiviere dies nur, wenn Du den Host, den Port, die Email, den Benutzernamen und das Passwort deines SMTP-Servers eingegeben hast.",
|
||||
"admin.config.smtp.host": "Host",
|
||||
"admin.config.smtp.host.description": "Host des SMTP-Servers",
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "Port des SMTP-Servers",
|
||||
"admin.config.smtp.email": "E-Mail",
|
||||
"admin.config.smtp.email.description": "E-Mail-Adresse, von der die E-Mails gesendet werden",
|
||||
"admin.config.smtp.email.description":
|
||||
"E-Mail-Adresse, von der die E-Mails gesendet werden",
|
||||
"admin.config.smtp.username": "Benutzername",
|
||||
"admin.config.smtp.username.description": "Benutzername des SMTP-Servers",
|
||||
"admin.config.smtp.password": "Passwort",
|
||||
"admin.config.smtp.password.description": "Passwort des SMTP-Servers",
|
||||
"admin.config.smtp.button.test": "Test-E-Mail senden",
|
||||
"admin.config.oauth.allow-registration": "Allow registration",
|
||||
"admin.config.oauth.allow-registration.description": "Allow users to register via social login",
|
||||
"admin.config.oauth.ignore-totp": "Ignore TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.allow-registration": "Registrierung erlauben",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Benutzern erlauben, sich über Soziale Netzwerke zu registrieren",
|
||||
"admin.config.oauth.ignore-totp": "TOTP ignorieren",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Gibt an, ob TOTP ignoriert werden soll, wenn sich der Benutzer über Soziale Netzwerke anmeldet",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description": "Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-enabled.description": "GitHub Anmeldung erlaubt",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client-ID",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"Client-ID der GitHub OAuth-App",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client-Secret",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Client-Secret der GitHub OAuth-App",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Whether Google login is enabled",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.google-enabled.description": "Google Anmeldung erlaubt",
|
||||
"admin.config.oauth.google-client-id": "Google Client-ID",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Client-ID der Google OAuth-App",
|
||||
"admin.config.oauth.google-client-secret": "Google Client-Secret",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Client-Secret der Google OAuth-App",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Microsoft Anmeldung erlaubt",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Mandant",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Mandant-ID der Microsoft OAuth App\ncommon: Benutzer mit einem persönlichen Microsoft-Konto und einem Arbeits- oder Schulkonto von Microsoft Entra ID können sich in der Anwendung anmelden.\norganizations: Nur Benutzer mit Arbeits- oder Schulkonten von Microsoft Entra ID können sich in der Anwendung anmelden.\nconsumers: Nur Benutzer mit einem persönlichen Microsoft-Konto können sich in der Anwendung anmelden.\nDomänenname des Microsoft Entra Mandanten oder die Mandanten-ID im GUID-Format: Nur Benutzer eines bestimmten Microsoft Entra Mandanten (Verzeichnismitglieder mit einem Arbeits- oder Schulkonto oder Verzeichnis Gäste mit einem persönlichen Microsoft-Konto) können sich anmelden.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client-ID",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Client-ID der Microsoft OAuth-App",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client-Secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client-Secret der Microsoft OAuth-App",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Whether OpenID login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID OAuth app",
|
||||
"admin.config.oauth.discord-enabled.description": "Discord Anmeldung erlaubt",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord Server-ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Die Anmeldung auf Benutzer in einem bestimmten Server beschränken. Leer lassen, um zu deaktivieren.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client-ID",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Client-ID der Discord OAuth-App",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client-Secret",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Client-Secret der Discord OAuth-App",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"OpenID Connect Anmeldung erlaubt",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Verbindung Discovery URL",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery-URL der OpenID OAuth App",
|
||||
"admin.config.oauth.oidc-username-claim":
|
||||
"OpenID Connect Benutzername anfordern",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Benutzername im OpenID Token. Leer lassen, wenn du nicht weißt, was diese Konfiguration bedeutet.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client-ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client-ID der OpenID Connect OAuth-App",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client-Secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client-Secret der OpenID Connect OAuth-App",
|
||||
// 404
|
||||
"404.description": "Ups, diese Seite existiert nicht.",
|
||||
"404.button.home": "Zurück zur Startseite",
|
||||
// error
|
||||
"error.title": "Error",
|
||||
"error.title": "Fehler",
|
||||
"error.description": "Ups!",
|
||||
"error.button.back": "Zurück",
|
||||
"error.msg.default": "Etwas ist schief gelaufen.",
|
||||
"error.msg.access_denied": "You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token": "The authentication process took too long, please try again.",
|
||||
"error.msg.no_user": "User linked to this {0} account doesn't exist.",
|
||||
"error.msg.no_email": "Can't get email address from this {0} account.",
|
||||
"error.msg.already_linked": "This {0} account is already linked to another account.",
|
||||
"error.msg.not_linked": "This {0} account haven't linked to any account yet.",
|
||||
"error.msg.access_denied":
|
||||
"Du hast den Authentifizierungsprozess abgebrochen, bitte versuche es erneut.",
|
||||
"error.msg.expired_token":
|
||||
"Der Authentifizierungsprozess hat zu lange gedauert, bitte versuche es erneut.",
|
||||
"error.msg.invalid_token": "Interner Fehler",
|
||||
"error.msg.no_user":
|
||||
"Der mit diesem {0} Konto verknüpfte Benutzer existiert nicht.",
|
||||
"error.msg.no_email":
|
||||
"Kann die E-Mail-Adresse von dem Konto {0} nicht abrufen.",
|
||||
"error.msg.already_linked":
|
||||
"Das Konto {0} ist bereits mit einem anderen Konto verknüpft.",
|
||||
"error.msg.not_linked":
|
||||
"Das Konto {0} wurde noch nicht mit einem Konto verknüpft.",
|
||||
"error.msg.unverified_account":
|
||||
"Dieses Konto {0} wurde noch nicht verifiziert, bitte versuchen Sie es nach der Verifikation erneut.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"Du bist nicht berechtigt, Dich anzumelden.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Deine Benutzerinformationen können nicht von diesem Konto {0} abgerufen werden.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Speichern",
|
||||
"common.button.create": "Erstellen",
|
||||
@@ -396,8 +514,10 @@ export default {
|
||||
"common.button.generate": "Generieren",
|
||||
"common.button.done": "Fertig",
|
||||
"common.text.link": "Link",
|
||||
"common.text.navigate-to-link": "Link öffnen",
|
||||
"common.text.or": "oder",
|
||||
"common.button.go-back": "Zurück",
|
||||
"common.button.go-home": "Zur Startseite",
|
||||
"common.notify.copied": "Dein Link wurde in die Zwischenablage kopiert",
|
||||
"common.success": "Erfolg",
|
||||
"common.error": "Fehler",
|
||||
@@ -407,5 +527,5 @@ export default {
|
||||
"common.error.too-long": "Muss maximal {length} Zeichen enthalten",
|
||||
"common.error.exact-length": "Muss genau {length} Zeichen lang sein",
|
||||
"common.error.invalid-number": "Muss eine Zahl sein",
|
||||
"common.error.field-required": "Dieses Feld ist erforderlich"
|
||||
};
|
||||
"common.error.field-required": "Dieses Feld ist erforderlich",
|
||||
};
|
||||
|
||||
548
frontend/src/i18n/translations/el-GR.ts
Normal file
548
frontend/src/i18n/translations/el-GR.ts
Normal file
@@ -0,0 +1,548 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "Μεταφόρτωση",
|
||||
"navbar.signin": "Είσοδος",
|
||||
"navbar.home": "Αρχική",
|
||||
"navbar.signup": "Εγγραφή",
|
||||
"navbar.links.shares": "",
|
||||
"navbar.links.reverse": "Αντίστροφος σύνδεσμος κοινής χρήσης",
|
||||
"navbar.avatar.account": "Ο λογαριασμός μου",
|
||||
"navbar.avatar.admin": "Διαχείριση",
|
||||
"navbar.avatar.signout": "Αποσύνδεση",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title":
|
||||
"Μια πλατφόρμα κοινής χρήσης αρχείων <h>σε ιδιωτική εγκατάσταση</h>.",
|
||||
"home.description":
|
||||
"Θέλετε πραγματικά να δώσετε τα προσωπικά σας αρχεία στο χέρι τρίτων όπως WeTransfer?",
|
||||
"home.bullet.a.name": "Ιδιωτική εγκατάσταση",
|
||||
"home.bullet.a.description":
|
||||
"Φιλοξενήστε το Pingvin Share στο δικό σας μηχάνημα.",
|
||||
"home.bullet.b.name": "Απόρρητο",
|
||||
"home.bullet.b.description":
|
||||
"Τα αρχεία σας είναι αρχεία σας και δεν πρέπει ποτέ να μπείτε στα χέρια τρίτων.",
|
||||
"home.bullet.c.name": "Χωρίς όριο μεγέθους αρχείου",
|
||||
"home.bullet.c.description":
|
||||
"Ανεβάστε όσο μεγάλα αρχεία θέλετε. Μόνο ο σκληρός σας δίσκος θα είναι το όριό σας.",
|
||||
"home.button.start": "Ας αρχίσουμε",
|
||||
"home.button.source": "Πηγαίος κώδικας",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "Καλώς ήρθατε ξανά",
|
||||
"signin.description": "Δεν έχετε ακόμα λογαριασμό;",
|
||||
"signin.button.signup": "Εγγραφή",
|
||||
"signin.input.email-or-username": "E-mail ή όνομα χρήστη",
|
||||
"signin.input.email-or-username.placeholder": "Το email ή το όνομα χρήστη",
|
||||
"signin.input.password": "Κωδικόs πρόσβασης",
|
||||
"signin.input.password.placeholder": "Ο κωδικός πρόσβασής σας",
|
||||
"signin.button.submit": "Είσοδος",
|
||||
"signIn.notify.totp-required.title":
|
||||
"Απαιτείται έλεγχος ταυτότητας δύο παραγόντων.",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Παρακαλώ εισάγετε τον κωδικό 2FA.",
|
||||
"signIn.oauth.or": "Ή",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
"signIn.oauth.discord": "Discord",
|
||||
"signIn.oauth.oidc": "OpenID",
|
||||
// END /auth/signin
|
||||
// /auth/signup
|
||||
"signup.title": "Δημιουργία λογαριασμού",
|
||||
"signup.description": "Έχετε ήδη λογαριασμό;",
|
||||
"signup.button.signin": "Είσοδος",
|
||||
"signup.input.username": "Όνομα χρήστη",
|
||||
"signup.input.username.placeholder": "Το όνομα χρήστη σας",
|
||||
"signup.input.email": "E-mail",
|
||||
"signup.input.email.placeholder": "Το email σας",
|
||||
"signup.button.submit": "Ας ξεκινήσουμε",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "Ταυτοποίηση TOTP",
|
||||
"totp.button.signIn": "Είσοδος",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Ξεχάσατε τον κωδικό σας;",
|
||||
"resetPassword.description":
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.notify.success":
|
||||
"Εισάγετε το email σας για επαναφορά κωδικού.",
|
||||
"resetPassword.button.back": "Πίσω στη σελίδα εισόδου",
|
||||
"resetPassword.text.resetPassword": "Επαναφορά κωδικού πρόσβασης",
|
||||
"resetPassword.text.enterNewPassword": "Εισάγετε το νέο σας κωδικό",
|
||||
"resetPassword.input.password": "Νέος κωδικός",
|
||||
"resetPassword.notify.passwordReset":
|
||||
"Η επαναφορά του κωδικού πρόσβασης σας ολοκληρώθηκε με επιτυχία!",
|
||||
// /account
|
||||
"account.title": "Ο λογαριασμός μου",
|
||||
"account.card.info.title": "Πληροφορίες λογαριασμού",
|
||||
"account.card.info.username": "Όνομα χρήστη",
|
||||
"account.card.info.email": "E-mail",
|
||||
"account.notify.info.success": "Ο λογαριασμός ενημερώθηκε επιτυχώς!",
|
||||
"account.card.password.title": "Κωδικόs πρόσβασης",
|
||||
"account.card.password.old": "Παλιός κωδικός",
|
||||
"account.card.password.new": "Νέος κωδικός",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Δεν έχετε ορίσει κωδικό πρόσβασης. Αν θέλετε να συνδεθείτε με email και κωδικό πρόσβασης, πρέπει να ορίσετε έναν κωδικό πρόσβασης.",
|
||||
"account.notify.password.success": "Ο κωδικός πρόσβασης άλλαξε επιτυχώς",
|
||||
"account.card.oauth.title": "Σύνδεση με λογαριασμό μέσων κοινωνικού δικτύου",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "Σύνδεσμος",
|
||||
"account.card.oauth.unlink": "Αποσύνδεση",
|
||||
"account.card.oauth.unlinked": "Αποσυνδεδεμένο",
|
||||
"account.modal.unlink.title": "Αποσύνδεση Λογαριασμού",
|
||||
"account.modal.unlink.description":
|
||||
"Η αποσύνδεση των κοινωνικών λογαριασμών σας μπορεί να προκαλέσει απώλεια του λογαριασμού σας αν δε θυμάστε το όνομα χρήστη και τον κωδικό πρόσβασης.",
|
||||
"account.notify.oauth.unlinked.success": "Επιτυχής αποσύνδεση",
|
||||
"account.card.security.title": "Ασφάλεια",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Εισάγετε τον τρέχοντα κωδικό σας για να ξεκινήσετε την ενεργοποίηση του TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Εισάγετε τον τρέχοντα κωδικό πρόσβασης για να απενεργοποιήσετε το TOTP",
|
||||
"account.card.security.totp.button.start": "Έναρξη",
|
||||
"account.modal.totp.title": "Ενεργοποίηση TOTP",
|
||||
"account.modal.totp.step1": "Βήμα 1: Προσθέστε τον έλεγχο ταυτότητας",
|
||||
"account.modal.totp.step2": "Βήμα 2: Επικυρώστε τον κωδικό σας",
|
||||
"account.modal.totp.enterManually": "Χειροκίνητη εισαγωγή",
|
||||
"account.modal.totp.code": "Κώδικας",
|
||||
"common.button.clickToCopy": "Κάνε κλικ για αντιγραφή",
|
||||
"account.modal.totp.verify": "Επαλήθευση",
|
||||
"account.notify.totp.disable": "Το TOTP απενεργοποιήθηκε επιτυχώς",
|
||||
"account.notify.totp.enable": "Το TOTP ενεργοποιήθηκε επιτυχώς",
|
||||
"account.card.language.title": "Γλώσσα",
|
||||
"account.card.language.description":
|
||||
"Η μετάφραση της εφαρμογής γίνεται από την εθελοντές της κοινότητας. Μερικές γλώσσες μπορεί να είναι ελλιπείς.",
|
||||
"account.card.color.title": "Συνδυασμός χρωμάτων",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Σκοτεινό",
|
||||
"account.theme.light": "Φωτεινό",
|
||||
"account.theme.system": "Σύστημα",
|
||||
"account.button.delete": "Διαγραφή Λογαριασμού",
|
||||
"account.modal.delete.title": "Διαγραφή Λογαριασμού",
|
||||
"account.modal.delete.description":
|
||||
"Θέλετε πραγματικά να διαγράψετε το λογαριασμό σας, συμπεριλαμβανομένων όλων των ενεργών μετοχών σας?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Οι κοινοποιήσεις μου",
|
||||
"account.shares.title.empty": "Είναι κενό εδώ 👀",
|
||||
"account.shares.description.empty": "Δεν διαμοιράζεστε τίποτα.",
|
||||
"account.shares.button.create": "Δημιουργία",
|
||||
"account.shares.info.title": "Πληροφορίες διαμοιρασμού",
|
||||
"account.shares.table.id": "Αναγνωριστικό",
|
||||
"account.shares.table.name": "Όνομα",
|
||||
"account.shares.table.description": "Περιγραφή",
|
||||
"account.shares.table.visitors": "Επισκέπτες",
|
||||
"account.shares.table.expiresAt": "Λήξη",
|
||||
"account.shares.table.createdAt": "Δημιουργήθηκε",
|
||||
"account.shares.table.size": "Μέγεθος",
|
||||
"account.shares.modal.share-informations": "Πληροφορίες διαμοιρασμού",
|
||||
"account.shares.modal.share-link": "Κοινοποίηση συνδέσμου",
|
||||
"account.shares.modal.delete.title": "Διαγραφή κοινοποίησης {share}",
|
||||
"account.shares.modal.delete.description":
|
||||
"Θέλετε πραγματικά να διαγράψετε αυτό το διαμοιρασμό;",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Αντίστροφες κοινοποιήσεις",
|
||||
"account.reverseShares.description":
|
||||
"Μια αντίστροφη κοινοποίηση σάς επιτρέπει να δημιουργήσετε μια μοναδική διεύθυνση URL που επιτρέπει σε εξωτερικούς χρήστες να δημιουργήσουν μια κοινή χρήση.",
|
||||
"account.reverseShares.title.empty": "Είναι κενό εδώ 👀",
|
||||
"account.reverseShares.description.empty":
|
||||
"Δεν έχετε καμία αντίστροφη μετοχή.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Δημιουργία αντίστροφης κοινοποίησης",
|
||||
"account.reverseShares.modal.expiration.label": "Λήξη",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "Λεπτό",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "Λεπτά",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "Ώρα",
|
||||
"account.reverseShares.modal.expiration.hour-plural": "Ώρες",
|
||||
"account.reverseShares.modal.expiration.day-singular": "Ημέρα",
|
||||
"account.reverseShares.modal.expiration.day-plural": "Ημέρες",
|
||||
"account.reverseShares.modal.expiration.week-singular": "Εβδομάδα",
|
||||
"account.reverseShares.modal.expiration.week-plural": "Εβδομάδες",
|
||||
"account.reverseShares.modal.expiration.month-singular": "Μήνας",
|
||||
"account.reverseShares.modal.expiration.month-plural": "Μήνες",
|
||||
"account.reverseShares.modal.expiration.year-singular": "Έτος",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Έτη",
|
||||
"account.reverseShares.modal.max-size.label": "Μέγιστο μέγεθος κοινοποίησης",
|
||||
"account.reverseShares.modal.send-email": "Αποστολή ειδοποιήσεων με email",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Στείλτε μια ειδοποίηση μέσω ηλεκτρονικού ταχυδρομείου όταν δημιουργείται ένας διαμοιρασμός με αυτόν τον σύνδεσμο ανάστροφης κοινοποίησης.",
|
||||
"account.reverseShares.modal.max-use.label": "Μέγιστες χρήσεις",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Ο μέγιστος αριθμός που μπορεί να χρησιμοποιηθεί αυτό το URL για τη δημιουργία ενός διαμοιρασμού.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Αυτός ο αντίστροφος διαμοιρασμός δε λήγει.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Αυτός ο αντίστροφος διαμοιρασμός θα λήξει {expiration}.",
|
||||
"account.reverseShares.table.no-shares":
|
||||
"Δε δημιουργήθηκαν κοινοποιήσεις ακόμα",
|
||||
"account.reverseShares.table.count.singular": "διαμοιρασμός",
|
||||
"account.reverseShares.table.count.plural": "διαμοιρασμοί",
|
||||
"account.reverseShares.table.shares": "Διαμοιρασμοί",
|
||||
"account.reverseShares.table.remaining": "Υπόλοιπες χρήσεις",
|
||||
"account.reverseShares.table.max-size": "Μέγιστο μέγεθος κοινοποίησης",
|
||||
"account.reverseShares.table.expires": "Λήγει στις",
|
||||
"account.reverseShares.modal.reverse-share-link":
|
||||
"Αντίστροφος σύνδεσμος κοινής χρήσης",
|
||||
"account.reverseShares.modal.delete.title":
|
||||
"Διαγραφή αντίστροφης κοινοποίησης",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Θέλετε πραγματικά να διαγράψετε αυτή την αντίστροφη κοινοποίηση; Εάν το κάνετε, οι συνδεδεμένες κοινοποιήσεις θα διαγραφούν επίσης.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Διαχείριση",
|
||||
"admin.button.users": "Διαχείριση χρηστών",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Διαμόρφωση",
|
||||
"admin.version": "Έκδοση",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "Διαχείριση χρηστών",
|
||||
"admin.users.table.username": "Όνομα χρήστη",
|
||||
"admin.users.table.email": "E-mail",
|
||||
"admin.users.table.admin": "Διαχειριστής",
|
||||
"admin.users.edit.update.title": "Ενημέρωση χρήστη {username}",
|
||||
"admin.users.edit.update.admin-privileges": "Δικαιώματα διαχειριστή",
|
||||
"admin.users.edit.update.change-password.title": "Αλλαγή κωδικού πρόσβασής",
|
||||
"admin.users.edit.update.change-password.field": "Νέος κωδικός πρόσβασης",
|
||||
"admin.users.edit.update.change-password.button":
|
||||
"Αποθήκευση νέου κωδικού πρόσβασης",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Ο κωδικός πρόσβασης άλλαξε επιτυχώς",
|
||||
"admin.users.edit.delete.title": "Διαγραφή χρήστη {username}",
|
||||
"admin.users.edit.delete.description":
|
||||
"Θέλετε να διαγράψετε το χρήστη και όλες τις κοινοποιήσεις του;",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Δημιουργία χρήστη",
|
||||
"admin.users.modal.create.username": "Όνομα χρήστη",
|
||||
"admin.users.modal.create.email": "E-mail",
|
||||
"admin.users.modal.create.password": "Κωδικός πρόσβασης",
|
||||
"admin.users.modal.create.manual-password":
|
||||
"Χειροκίνητος ορισμός κωδικού πρόσβασης",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Εάν δεν είναι επιλεγμένο, ο χρήστης θα λάβει ένα email με ένα σύνδεσμο για να ορίσει τον κωδικό πρόσβασής του.",
|
||||
"admin.users.modal.create.admin": "Δικαιώματα διαχειριστή",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Αν ενεργοποιηθεί, ο χρήστης θα μπορεί να έχει πρόσβαση στον πίνακα διαχείρισης.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Μεταφόρτωση",
|
||||
"upload.notify.generic-error":
|
||||
"Παρουσιάστηκε σφάλμα κατά την ολοκλήρωση της κοινής χρήσης σας.",
|
||||
"upload.notify.count-failed":
|
||||
"Τα αρχεία {count} απέτυχαν να μεταφορτώσουν. Δοκιμάστε ξανά.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Μεταφόρτωση αρχείων",
|
||||
"upload.dropzone.description":
|
||||
"Σύρετε και αποθέστε αρχεία εδώ για να ξεκινήσει η κοινή χρήση σας. Μπορούμε να δεχτούμε μόνο αρχεία που είναι λιγότερο από {maxSize} συνολικά.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Τα αρχεία σας υπερβαίνουν το μέγιστο μέγεθος κοινής χρήσης του {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Όνομα",
|
||||
"upload.filelist.size": "Μέγεθος",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Δημιουργία Κοινοποίησης",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Μπορεί να περιέχει μόνο γράμματα, αριθμούς, κάτω παύλες και παύλες",
|
||||
"upload.modal.link.error.taken": "Αυτός ο σύνδεσμος χρησιμοποιείται ήδη",
|
||||
"upload.modal.not-signed-in": "Δεν είστε συνδεδεμένος/η",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Δεν θα μπορείτε να διαγράψετε την κοινή χρήση σας χειροκίνητα και να δείτε την αρίθμηση επισκεπτών.",
|
||||
"upload.modal.expires.never": "ποτέ",
|
||||
"upload.modal.expires.never-long": "Χωρίς λήξη",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Η λήξη υπερβαίνει τη μέγιστη ημερομηνία λήξης {max}.",
|
||||
"upload.modal.link.label": "Σύνδεσμος",
|
||||
"upload.modal.expires.label": "Λήξη",
|
||||
"upload.modal.expires.minute-singular": "Λεπτό",
|
||||
"upload.modal.expires.minute-plural": "Λεπτά",
|
||||
"upload.modal.expires.hour-singular": "Ώρα",
|
||||
"upload.modal.expires.hour-plural": "Ώρες",
|
||||
"upload.modal.expires.day-singular": "Ημέρα",
|
||||
"upload.modal.expires.day-plural": "Ημέρες",
|
||||
"upload.modal.expires.week-singular": "Εβδομάδα",
|
||||
"upload.modal.expires.week-plural": "Εβδομάδες",
|
||||
"upload.modal.expires.month-singular": "Μήνας",
|
||||
"upload.modal.expires.month-plural": "Μήνες",
|
||||
"upload.modal.expires.year-singular": "Έτος",
|
||||
"upload.modal.expires.year-plural": "Έτη",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "Αποδέκτες email",
|
||||
"upload.modal.accordion.email.placeholder": "Εισάγετε αποδέκτες email",
|
||||
"upload.modal.accordion.email.invalid-email": "Μη έγκυρη διεύθυνση e-mail",
|
||||
"upload.modal.accordion.security.title": "Επιλογές ασφαλείας",
|
||||
"upload.modal.accordion.security.password.label":
|
||||
"Προστασία με κωδικό πρόσβασης",
|
||||
"upload.modal.accordion.security.password.placeholder": "Χωρίς Κωδικό",
|
||||
"upload.modal.accordion.security.max-views.label":
|
||||
"Μέγιστος αριθμός εμφανίσεων",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Χωρίς όριο",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Αυτός ο διαμοιρασμός δεν λήγει.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"Αυτός ο διαμοιρασμός θα λήξει {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Κοινοποίηση έτοιμου",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Διαμοιρασμός {shareId}",
|
||||
"share.description": "Σας προωθώ αρχεία προς κοινοποίηση.",
|
||||
"share.error.visitor-limit-exceeded.title": "Υπέρβαση ορίου επισκέπτη",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Ξεπεράστηκε το όριο επισκεπτών σε αυτή την κοινοποίηση.",
|
||||
"share.error.removed.title": "Κοινοποίηση αφαιρέθηκε",
|
||||
"share.error.not-found.title": "Η κοινοποίηση δε βρέθηκε",
|
||||
"share.error.not-found.description": "Η κοινοποίηση που ψάχνετε δεν υπάρχει.",
|
||||
"share.modal.password.title": "Απαιτείται κωδικός",
|
||||
"share.modal.password.description":
|
||||
"Για να αποκτήσετε πρόσβαση σε αυτή την κοινοποίηση εισάγετε τον κωδικό πρόσβασης.",
|
||||
"share.modal.password": "Κωδικός πρόσβασης",
|
||||
"share.modal.error.invalid-password": "Μη έγκυρος κωδικός πρόσβασης",
|
||||
"share.button.download-all": "Λήψη όλων",
|
||||
"share.notify.download-all-preparing":
|
||||
"Αυτός ο διαμοιρασμός βρίσκεται σε επεξεργασία. Προσπαθήστε ξανά σε λίγο.",
|
||||
"share.modal.file-link": "Σύνδεσμος αρχείου",
|
||||
"share.table.name": "Όνομα",
|
||||
"share.table.size": "Μέγεθος",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Η προεπισκόπηση δεν υποστηρίζεται",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"Η προεπισκόπηση για αυτό τον τύπο αρχείου δεν υποστηρίζεται. Παρακαλώ κατεβάστε το αρχείο για να το δείτε.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Ενημέρωση {shareId}",
|
||||
"share.edit.append-upload": "Προσθήκη αρχείου",
|
||||
"share.edit.notify.generic-error":
|
||||
"Παρουσιάστηκε σφάλμα κατά την ολοκλήρωση του διαμοιρασμού.",
|
||||
"share.edit.notify.save-success": "Ο διαμοιρασμός ενημερώθηκε επιτυχώς",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "Διαμόρφωση",
|
||||
"admin.config.category.general": "Γενικά",
|
||||
"admin.config.category.share": "Διαμοιρασμός",
|
||||
"admin.config.category.email": "Email",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth":
|
||||
"Σύνδεση με λογαριασμό μέσων κοινωνικού δικτύου",
|
||||
"admin.config.general.app-name": "Όνομα εφαρμογής",
|
||||
"admin.config.general.app-name.description": "Ονομασία της εφαρμογής",
|
||||
"admin.config.general.app-url": "URL Εφαρμογής",
|
||||
"admin.config.general.app-url.description":
|
||||
"Η διεύθυνση URL όπου το Pingvin Share είναι διαθέσιμο",
|
||||
"admin.config.general.show-home-page": "Εμφάνιση αρχικής σελίδας",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Εάν θα εμφανίζεται η αρχική σελίδα",
|
||||
"admin.config.general.logo": "Λογότυπο",
|
||||
"admin.config.general.logo.description":
|
||||
"Αλλάξτε το λογότυπό σας ανεβάζοντας μια νέα εικόνα. Η εικόνα πρέπει να είναι PNG και αναλογία 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Επιλέξτε εικόνα",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Ενεργοποίηση κοινής χρήσης μέσω email",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Εάν θα ενεργοποιηθεί η κοινή χρήση μέσω email. Δυνατή μόνον με την ενεργοποίηση SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Θέμα στο email διαμοιρασμού",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Το θέμα του email διαμοιρασμού που θα φτάσει στον παραλήπτη.",
|
||||
"admin.config.email.share-recipients-message":
|
||||
"Το θέμα του email για τον διαμοιρασμό που θα φτάσει στον παραλήπτη ",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Μήνυμα που αποστέλλεται στους παραλήπτες κοινής χρήσης. Διαθέσιμες μεταβλητές:\n {creator} - Το όνομα χρήστη του δημιουργού της κοινής χρήσης\n {shareUrl} - Η διεύθυνση URL της κοινής χρήσης\n {desc} - Η περιγραφή της κοινής χρήσης\n {expires} - Η ημερομηνία λήξης της κοινής χρήσης\n Οι μεταβλητές θα αντικατασταθούν με την πραγματική τιμή.",
|
||||
"admin.config.email.reverse-share-subject":
|
||||
"Θέμα email αντίστροφου διαμοιρασμού",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Θέμα του ηλεκτρονικού ταχυδρομείου που αποστέλλεται όταν κάποιος δημιούργησε έναν αντίστροφο διαμοιρασμό.",
|
||||
"admin.config.email.reverse-share-message":
|
||||
"Μήνυμα email αντίστροφου διαμοιρασμού",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Μήνυμα που αποστέλλεται όταν κάποιος δημιουργεί έναν σύνδεσμο αντίστροφου διαμοιρασμού. Το {shareUrl} θα αντικατασταθεί με το όνομα του δημιουργού και τη διεύθυνση URL κοινής χρήσης.",
|
||||
"admin.config.email.reset-password-subject":
|
||||
"Θέμα μηνύματος επαναφοράς κωδικού πρόσβασης",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Θέμα του email που αποστέλλεται όταν ένας χρήστης ζητήσει επαναφορά κωδικού πρόσβασης.",
|
||||
"admin.config.email.reset-password-message":
|
||||
"Κείμενο μηνύματος επαναφοράς κωδικού πρόσβασης",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Μήνυμα που αποστέλλεται όταν ένας χρήστης ζητά επαναφορά κωδικού πρόσβασης. Το {url} θα αντικατασταθεί με τη διεύθυνση URL επαναφοράς κωδικού πρόσβασης.",
|
||||
"admin.config.email.invite-subject": "Θέμα μηνύματος πρόσκλησης",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Θέμα του email που αποστέλλεται όταν ένας διαχειριστής προσκαλεί έναν χρήστη.",
|
||||
"admin.config.email.invite-message": "Μήνυμα μηνύματος πρόσκλησης",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Το μήνυμα που αποστέλλεται όταν ένας διαχειριστής προσκαλεί έναν χρήστη. Το {url} θα αντικατασταθεί με το URL πρόσκλησης και το {password} με τον κωδικό πρόσβασης.",
|
||||
"admin.config.share.allow-registration": "Να επιτρέπεται η εγγραφή",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Αν επιτρέπεται η εγγραφή",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Επιτρέψτε κοινές χρήσεις χωρίς έλεγχο ταυτότητας",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Εάν οι χρήστες χωρίς έλεγχο ταυτότητας μπορούν να δημιουργήσουν κοινόχρηστα στοιχεία",
|
||||
"admin.config.share.max-expiration": "Μέγιστη λήξη",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Μέγιστη λήξη κοινής χρήσης σε ώρες. Ορίστε το 0 για να επιτρέψετε απεριόριστη λήξη.",
|
||||
"admin.config.share.max-size": "Μέγιστο μέγεθος",
|
||||
"admin.config.share.max-size.description":
|
||||
"Μέγιστο μέγεθος κοινοποίησης σε bytes",
|
||||
"admin.config.share.zip-compression-level": "Βαθμός συμπίεσης ZIP",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Προσαρμόστε το βαθμό συμπίεσης για να εξισορροπηθεί το μέγεθος του αρχείου και η ταχύτητα επεξεργασίας. Έγκυρες τιμές κυμαίνονται από 0 έως 9, με 0 χωρίς συμπίεση και 9 μέγιστη συμπίεση.",
|
||||
"admin.config.share.chunk-size": "Μέγεθος κομματιών",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Προσαρμόστε το μέγεθος κομματιών (σε bytes) για να εξισορροπήσετε την αποδοτικότητα και την αξιοπιστία του συστήματος σύμφωνα με τη σύνδεσή σας στο διαδίκτυο. Μικρότερα κομμάτια μπορούν να βελτιώσουν τα ποσοστά επιτυχίας σε ασταθείς συνδέσεις, ενώ μεγαλύτερα κομμάτια επιταχύνουν τις μεταφορτώσεις σε σταθερές συνδέσεις.",
|
||||
"admin.config.smtp.enabled": "Ενεργοποιημένο",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Εάν η λειτουργία SMTP είναι ενεργοποιημένη. Ενεργοποιήστε τη μόνον όταν ορίσετε σωστά τις παραμέτρους που ακολουθούν.",
|
||||
"admin.config.smtp.host": "Εξυπηρετητής",
|
||||
"admin.config.smtp.host.description": "SMTP εξυπηρετητής",
|
||||
"admin.config.smtp.port": "Θύρα",
|
||||
"admin.config.smtp.port.description": "SMTP θύρα",
|
||||
"admin.config.smtp.email": "Email",
|
||||
"admin.config.smtp.email.description":
|
||||
"Διεύθυνση email από όπου αποστέλλονται τα μηνύματα",
|
||||
"admin.config.smtp.username": "Όνομα χρήστη",
|
||||
"admin.config.smtp.username.description":
|
||||
"Όνομα χρήστη στον SMTP εξυπηρετητή",
|
||||
"admin.config.smtp.password": "Κωδικός πρόσβασης",
|
||||
"admin.config.smtp.password.description":
|
||||
"Κωδικός πρόσβασης στον εξυπηρετητή SMTP",
|
||||
"admin.config.smtp.button.test": "Αποστολή δοκιμαστικού email",
|
||||
"admin.config.oauth.allow-registration": "Να επιτρέπεται η εγγραφή",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Επιτρέψτε στους χρήστες να εγγραφούν μέσω λογαριασμών κοινωνικής δικτύωσης",
|
||||
"admin.config.oauth.ignore-totp": "Παράβλεψη TOTP",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Αν θα αγνοηθεί το TOTP όταν ο χρήστης χρησιμοποιεί την κοινωνική σύνδεση",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Αν είναι ενεργοποιημένη η σύνδεση GitHub",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"Αναγνωριστικό πελάτη της εφαρμογής GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Αν θα είναι ενεργοποιημένη η σύνδεση Google",
|
||||
"admin.config.oauth.google-client-id": "Αναγνωριστικό Πελάτη Google",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Αναγνωριστικό πελάτη της εφαρμογής Google OAuth",
|
||||
"admin.config.oauth.google-client-secret": "Google κωδικός",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Κωδικός της εφαρμογής Google OAuth",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Αν είναι ενεργοποιημένη η σύνδεση της Microsoft",
|
||||
"admin.config.oauth.microsoft-tenant": "Αναγνωριστικό Microsoft",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Αναγνωριστικό για την εφαρμογή Microsoft OAuth\nΚοινή: Οι χρήστες με προσωπικό λογαριασμό Microsoft και λογαριασμό εργασίας ή σχολείου από το Microsoft Entra ID μπορούν να συνδεθούν στην εφαρμογή.\nΟργανισμοί: Μόνο χρήστες με λογαριασμούς εργασίας ή σχολείου από το Microsoft Entra ID μπορούν να συνδεθούν στην εφαρμογή.\nΚαταναλωτές: Μόνο οι χρήστες με προσωπικό λογαριασμό Microsoft μπορούν να συνδεθούν στην εφαρμογή.\nΜε όνομα τομέα του μισθωτή Microsoft Entra ή το αναγνωριστικό μισθωτή σε μορφή GUID: Μόνο χρήστες από έναν συγκεκριμένο μισθωτή της Microsoft Entra (μέλη καταλόγου με λογαριασμό εργασίας ή σχολείου ή επισκέπτες καταλόγου με προσωπικό λογαριασμό Microsoft) μπορούν να συνδεθούν στην εφαρμογή.",
|
||||
"admin.config.oauth.microsoft-client-id": "Αναγνωριστικό πελάτη Microsoft",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Αναγνωριστικό πελάτη της εφαρμογής Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret": "Μυστικό πελάτη Microsoft",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Μυστικό πελάτη της εφαρμογής Microsoft OAuth",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Αν είναι ενεργοποιημένη η σύνδεση στο Discord",
|
||||
"admin.config.oauth.discord-limited-guild":
|
||||
"Αναγνωριστικό διακομιστή περιορισμένης ισχύος Discord",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Περιορισμός σύνδεσης σε χρήστες σε ένα συγκεκριμένο διακομιστή. Αφήστε κενό για να απενεργοποιήσετε.",
|
||||
"admin.config.oauth.discord-client-id": "Αναγνωριστικό Πελάτη Discord",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Αναγνωριστικό πελάτη της εφαρμογής Discord OAuth",
|
||||
"admin.config.oauth.discord-client-secret": "Μυστικό πελάτη Discord",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Μυστικό πελάτη της εφαρμογής Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "Σύνδεση OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Αν είναι ενεργοποιημένη η σύνδεση OpenID",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Αφήστε κενό αν δε γνωρίζετε για αυτή τη ρύθμιση",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "Ουπς. Αυτή η σελίδα δεν υπάρχει.",
|
||||
"404.button.home": "Πήγαινέ με πίσω",
|
||||
// error
|
||||
"error.title": "Σφάλμα",
|
||||
"error.description": "Ωχ!",
|
||||
"error.button.back": "Πάμε πίσω",
|
||||
"error.msg.default": "Κάτι πήγε στραβά.",
|
||||
"error.msg.access_denied":
|
||||
"Ακυρώσατε τη διαδικασία ελέγχου ταυτότητας, παρακαλώ προσπαθήστε ξανά.",
|
||||
"error.msg.expired_token":
|
||||
"Η διαδικασία ελέγχου ταυτότητας διήρκεσε πολύ, παρακαλώ προσπαθήστε ξανά.",
|
||||
"error.msg.invalid_token": "Εσωτερικό σφάλμα",
|
||||
"error.msg.no_user":
|
||||
"Ο χρήστης που συνδέεται με αυτόν τον λογαριασμό {0} δεν υπάρχει.",
|
||||
"error.msg.no_email":
|
||||
"Δεν είναι δυνατή η λήψη διεύθυνσης ηλεκτρονικού ταχυδρομείου για αυτόν τον λογαριασμό {0}.",
|
||||
"error.msg.already_linked":
|
||||
"Αυτός ο λογαριασμός {0} είναι ήδη συνδεδεμένος με άλλο λογαριασμό.",
|
||||
"error.msg.not_linked":
|
||||
"Αυτός ο λογαριασμός {0} δεν έχει συνδεθεί με κανένα λογαριασμό ακόμα.",
|
||||
"error.msg.unverified_account":
|
||||
"Αυτός ο λογαριασμός {0} δεν έχει επαληθευτεί, παρακαλώ προσπαθήστε ξανά μετά την επαλήθευση.",
|
||||
"error.msg.discord_guild_permission_denied": "Δεν σας επιτρέπεται η σύνδεση.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Δεν είναι δυνατή η λήψη των πληροφοριών χρήστη από αυτόν τον λογαριασμό {0}.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "Σύνδεση OpenID",
|
||||
// Common translations
|
||||
"common.button.save": "Αποθήκευση",
|
||||
"common.button.create": "Δημιουργία",
|
||||
"common.button.submit": "Υποβολή",
|
||||
"common.button.delete": "Διαγραφή",
|
||||
"common.button.cancel": "Ακύρωση",
|
||||
"common.button.confirm": "Επιβεβαίωση",
|
||||
"common.button.disable": "Απενεργοποίηση",
|
||||
"common.button.share": "Διαμοιρασμός",
|
||||
"common.button.generate": "Δημιουργία",
|
||||
"common.button.done": "Ολοκληρώθηκε",
|
||||
"common.text.link": "Σύνδεσμος",
|
||||
"common.text.navigate-to-link": "Μεταβείτε στο σύνδεσμο",
|
||||
"common.text.or": "ή",
|
||||
"common.button.go-back": "Επιστροφή",
|
||||
"common.button.go-home": "Μετάβαση στην αρχική",
|
||||
"common.notify.copied": "Ο σύνδεσμος σας αντιγράφηκε στο πρόχειρο",
|
||||
"common.success": "Επιτυχία",
|
||||
"common.error": "Σφάλμα",
|
||||
"common.error.unknown": "Προέκυψε άγνωστο σφάλμα",
|
||||
"common.error.invalid-email": "Μη έγκυρη διεύθυνση e-mail",
|
||||
"common.error.too-short":
|
||||
"Πρέπει να αποτελείται τουλάχιστον {length} χαρακτήρες",
|
||||
"common.error.too-long":
|
||||
"Πρέπει να αποτελείται το πολύ από {length} χαρακτήρες",
|
||||
"common.error.exact-length":
|
||||
"Πρέπει να αποτελείται ακριβώς από {length} χαρακτήρες",
|
||||
"common.error.invalid-number": "Πρέπει να είναι αριθμός",
|
||||
"common.error.field-required": "Αυτό το πεδίο είναι υποχρεωτικό",
|
||||
};
|
||||
@@ -74,7 +74,7 @@ export default {
|
||||
"resetPassword.title": "Forgot your password?",
|
||||
"resetPassword.description": "Enter your email to reset your password.",
|
||||
"resetPassword.notify.success":
|
||||
"An email has been sent with a link to reset your password.",
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.button.back": "Back to sign in page",
|
||||
"resetPassword.text.resetPassword": "Reset password",
|
||||
"resetPassword.text.enterNewPassword": "Enter your new password",
|
||||
@@ -93,7 +93,8 @@ export default {
|
||||
"account.card.password.title": "Password",
|
||||
"account.card.password.old": "Old password",
|
||||
"account.card.password.new": "New password",
|
||||
"account.card.password.noPasswordSet": "You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.notify.password.success": "Password changed successfully",
|
||||
|
||||
"account.card.oauth.title": "Social login",
|
||||
@@ -106,10 +107,10 @@ export default {
|
||||
"account.card.oauth.unlink": "Unlink",
|
||||
"account.card.oauth.unlinked": "Unlinked",
|
||||
"account.modal.unlink.title": "Unlink account",
|
||||
"account.modal.unlink.description": "Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.modal.unlink.description":
|
||||
"Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.notify.oauth.unlinked.success": "Unlinked successfully",
|
||||
|
||||
|
||||
"account.card.security.title": "Security",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Enter your current password to start enabling TOTP",
|
||||
@@ -121,7 +122,7 @@ export default {
|
||||
"account.modal.totp.step2": "Step 2: Validate your code",
|
||||
"account.modal.totp.enterManually": "Enter manually",
|
||||
"account.modal.totp.code": "Code",
|
||||
"account.modal.totp.clickToCopy": "Click to copy",
|
||||
"common.button.clickToCopy": "Click to copy",
|
||||
"account.modal.totp.verify": "Verify",
|
||||
"account.notify.totp.disable": "TOTP disabled successfully",
|
||||
"account.notify.totp.enable": "TOTP enabled successfully",
|
||||
@@ -223,6 +224,7 @@ export default {
|
||||
// /admin
|
||||
"admin.title": "Administration",
|
||||
"admin.button.users": "User management",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Configuration",
|
||||
"admin.version": "Version",
|
||||
// END /admin
|
||||
@@ -259,6 +261,19 @@ export default {
|
||||
|
||||
// END /admin/users
|
||||
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
|
||||
// END /admin/shares
|
||||
|
||||
// /upload
|
||||
"upload.title": "Upload",
|
||||
|
||||
@@ -288,7 +303,8 @@ export default {
|
||||
|
||||
"upload.modal.expires.never": "never",
|
||||
"upload.modal.expires.never-long": "Never Expires",
|
||||
"upload.modal.expires.error.too-long": "Expiration exceeds maximum expiration date of {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Expiration exceeds maximum expiration date of {max}.",
|
||||
|
||||
"upload.modal.link.label": "Link",
|
||||
"upload.modal.expires.label": "Expiration",
|
||||
@@ -305,8 +321,9 @@ export default {
|
||||
"upload.modal.expires.year-singular": "Year",
|
||||
"upload.modal.expires.year-plural": "Years",
|
||||
|
||||
"upload.modal.accordion.description.title": "Description",
|
||||
"upload.modal.accordion.description.placeholder":
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
|
||||
"upload.modal.accordion.email.title": "Email recipients",
|
||||
@@ -354,14 +371,15 @@ export default {
|
||||
|
||||
"share.modal.file-preview.error.not-supported.title": "Preview not supported",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"A preview for thise file type is unsupported. Please download the file to view it.",
|
||||
"A preview for this file type is unsupported. Please download the file to view it.",
|
||||
|
||||
// END /share/[id]
|
||||
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Edit {shareId}",
|
||||
"share.edit.append-upload": "Append file",
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.generic-error":
|
||||
"An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
// END /share/[id]/edit
|
||||
|
||||
@@ -429,6 +447,10 @@ export default {
|
||||
"admin.config.share.zip-compression-level": "Zip compression level",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Adjust the level to balance between file size and compression speed. Valid values range from 0 to 9, with 0 being no compression and 9 being maximum compression. ",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.share.auto-open-share-modal": "Auto open create share modal",
|
||||
"admin.config.share.auto-open-share-modal.description": "The share creation modal automatically appears when a user selects files, eliminating the need to manually click the button.",
|
||||
|
||||
"admin.config.smtp.enabled": "Enabled",
|
||||
"admin.config.smtp.enabled.description":
|
||||
@@ -447,43 +469,68 @@ export default {
|
||||
"admin.config.smtp.button.test": "Send test email",
|
||||
|
||||
"admin.config.oauth.allow-registration": "Allow registration",
|
||||
"admin.config.oauth.allow-registration.description": "Allow users to register via social login",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Allow users to register via social login",
|
||||
"admin.config.oauth.ignore-totp": "Ignore TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description": "Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Whether Google login is enabled",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Whether Google login is enabled",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord limited server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limit signing in to users in a specific server. Leave it blank to disable.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Whether OpenID login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID OAuth app",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Whether OpenID Connect login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
|
||||
// 404
|
||||
"404.description": "Oops this page doesn't exist.",
|
||||
@@ -494,17 +541,27 @@ export default {
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Go back",
|
||||
"error.msg.default": "Something went wrong.",
|
||||
"error.msg.access_denied": "You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token": "The authentication process took too long, please try again.",
|
||||
"error.msg.access_denied":
|
||||
"You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token":
|
||||
"The authentication process took too long, please try again.",
|
||||
"error.msg.invalid_token": "Internal Error",
|
||||
"error.msg.no_user": "User linked to this {0} account doesn't exist.",
|
||||
"error.msg.no_email": "Can't get email address from this {0} account.",
|
||||
"error.msg.already_linked": "This {0} account is already linked to another account.",
|
||||
"error.msg.already_linked":
|
||||
"This {0} account is already linked to another account.",
|
||||
"error.msg.not_linked": "This {0} account haven't linked to any account yet.",
|
||||
"error.msg.unverified_account":
|
||||
"This {0} account is unverified, please try again after verification.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"You are not allowed to sign in.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Can not get your user info from this {0} account.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
|
||||
// Common translations
|
||||
"common.button.save": "Save",
|
||||
@@ -518,8 +575,10 @@ export default {
|
||||
"common.button.generate": "Generate",
|
||||
"common.button.done": "Done",
|
||||
"common.text.link": "Link",
|
||||
"common.text.navigate-to-link": "Go to the link",
|
||||
"common.text.or": "or",
|
||||
"common.button.go-back": "Go back",
|
||||
"common.button.go-home": "Go home",
|
||||
"common.notify.copied": "Your link was copied to the clipboard",
|
||||
"common.success": "Success",
|
||||
|
||||
|
||||
@@ -12,13 +12,16 @@ export default {
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "Una plataforma <h>autoalojada</h> para compartir archivos.",
|
||||
"home.description": "¿En realidad quieres dejar tus archivos personales en manos de terceros como WeTransfer?",
|
||||
"home.description":
|
||||
"¿En realidad quieres dejar tus archivos personales en manos de terceros como WeTransfer?",
|
||||
"home.bullet.a.name": "Autoalojada",
|
||||
"home.bullet.a.description": "Aloja Pingvin Share en tu propio equipo.",
|
||||
"home.bullet.b.name": "Privacidad",
|
||||
"home.bullet.b.description": "Tus archivos son tus archivos y nunca deberían terminar en manos de terceros.",
|
||||
"home.bullet.b.description":
|
||||
"Tus archivos son tus archivos y nunca deberían terminar en manos de terceros.",
|
||||
"home.bullet.c.name": "Sin molestos límites de tamaño de archivo",
|
||||
"home.bullet.c.description": "Sube archivos tan grandes como quieras. El único límite es la capacidad de tu disco duro.",
|
||||
"home.bullet.c.description":
|
||||
"Sube archivos tan grandes como quieras. El único límite es la capacidad de tu disco duro.",
|
||||
"home.button.start": "Comenzar",
|
||||
"home.button.source": "Código fuente",
|
||||
// END /
|
||||
@@ -31,9 +34,11 @@ export default {
|
||||
"signin.input.password": "Contraseña",
|
||||
"signin.input.password.placeholder": "Tu contraseña",
|
||||
"signin.button.submit": "Iniciar sesión",
|
||||
"signIn.notify.totp-required.title": "Se requiere autenticación de dos factores",
|
||||
"signIn.notify.totp-required.description": "Por favor ingrese su código de autenticación de dos factores",
|
||||
"signIn.oauth.or": "OR",
|
||||
"signIn.notify.totp-required.title":
|
||||
"Se requiere autenticación de dos factores",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Por favor ingrese su código de autenticación de dos factores",
|
||||
"signIn.oauth.or": "O",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
@@ -56,13 +61,16 @@ export default {
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "¿Olvidaste tu contraseña?",
|
||||
"resetPassword.description": "Ingresa tu correo para restablecer tu contraseña.",
|
||||
"resetPassword.notify.success": "Se ha enviado un correo con el enlace para restablecer tu contraseña.",
|
||||
"resetPassword.description":
|
||||
"Ingresa tu correo para restablecer tu contraseña.",
|
||||
"resetPassword.notify.success":
|
||||
"Se ha enviado un mensaje con un enlace para restablecer tu contraseña.",
|
||||
"resetPassword.button.back": "Volver al inicio de sesión",
|
||||
"resetPassword.text.resetPassword": "Restablecer contraseña",
|
||||
"resetPassword.text.enterNewPassword": "Ingresa tu nueva contraseña",
|
||||
"resetPassword.input.password": "Nueva contraseña",
|
||||
"resetPassword.notify.passwordReset": "Tu contraseña se ha restablecido correctamente.",
|
||||
"resetPassword.notify.passwordReset":
|
||||
"Tu contraseña se ha restablecido correctamente.",
|
||||
// /account
|
||||
"account.title": "Mi cuenta",
|
||||
"account.card.info.title": "Información de cuenta",
|
||||
@@ -72,7 +80,8 @@ export default {
|
||||
"account.card.password.title": "Contraseña",
|
||||
"account.card.password.old": "Anterior contraseña",
|
||||
"account.card.password.new": "Nueva contraseña",
|
||||
"account.card.password.noPasswordSet": "No tienes una establecida contraseña. Si deseas iniciar sesión con correo electrónico y una contraseña necesitas crear una contraseña.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"No tienes una establecida contraseña. Si deseas iniciar sesión con correo electrónico y una contraseña necesitas crear una contraseña.",
|
||||
"account.notify.password.success": "Contraseña cambiada correctamente",
|
||||
"account.card.oauth.title": "Inicio de sesión con red social",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +93,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Desvincular",
|
||||
"account.card.oauth.unlinked": "Desvinculado",
|
||||
"account.modal.unlink.title": "Desvincular cuenta",
|
||||
"account.modal.unlink.description": "Desvincular tus cuentas sociales puede causar que pierdas tu cuenta si no recuerdas tu nombre de usuario y contraseña.",
|
||||
"account.modal.unlink.description":
|
||||
"Desvincular tus cuentas sociales puede causar que pierdas tu cuenta si no recuerdas tu nombre de usuario y contraseña.",
|
||||
"account.notify.oauth.unlinked.success": "Desvinculado correctamente",
|
||||
"account.card.security.title": "Seguridad",
|
||||
"account.card.security.totp.enable.description": "Ingrese su contraseña actual para habilitar TOTP",
|
||||
"account.card.security.totp.disable.description": "Ingrese su contraseña actual para deshabilitar TOTP",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Ingrese su contraseña actual para habilitar TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Ingrese su contraseña actual para deshabilitar TOTP",
|
||||
"account.card.security.totp.button.start": "Iniciar",
|
||||
"account.modal.totp.title": "Habilitar TOTP",
|
||||
"account.modal.totp.step1": "Paso 1: Añadir tu autentificador",
|
||||
"account.modal.totp.step2": "Paso 2: Validar tu código",
|
||||
"account.modal.totp.enterManually": "Ingresar manualmente",
|
||||
"account.modal.totp.code": "Código",
|
||||
"account.modal.totp.clickToCopy": "Clic para copiar",
|
||||
"common.button.clickToCopy": "Clic para copiar",
|
||||
"account.modal.totp.verify": "Verificar",
|
||||
"account.notify.totp.disable": "TOTP deshabilitado correctamente",
|
||||
"account.notify.totp.enable": "TOTP habilitado correctamente",
|
||||
"account.card.language.title": "Idioma",
|
||||
"account.card.language.description": "El proyecto ha sido traducido por la comunidad. Algunos idiomas pueden estar incompletos.",
|
||||
"account.card.language.description":
|
||||
"El proyecto ha sido traducido por la comunidad. Algunos idiomas pueden estar incompletos.",
|
||||
"account.card.color.title": "Esquema de colores",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Oscuro",
|
||||
@@ -108,7 +121,8 @@ export default {
|
||||
"account.theme.system": "Sistema",
|
||||
"account.button.delete": "Eliminar Cuenta",
|
||||
"account.modal.delete.title": "Eliminar Cuenta",
|
||||
"account.modal.delete.description": "¿Realmente quieres eliminar tu cuenta con todos los archivos que estás compartiendo actualmente?",
|
||||
"account.modal.delete.description":
|
||||
"¿Realmente quieres eliminar tu cuenta con todos los archivos que estás compartiendo actualmente?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Mis compartidos",
|
||||
@@ -126,13 +140,16 @@ export default {
|
||||
"account.shares.modal.share-informations": "Información del compartido",
|
||||
"account.shares.modal.share-link": "Enlace",
|
||||
"account.shares.modal.delete.title": "Eliminar compartido {share}",
|
||||
"account.shares.modal.delete.description": "¿Seguro que quieres eliminar este compartido?",
|
||||
"account.shares.modal.delete.description":
|
||||
"¿Seguro que quieres eliminar este compartido?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Comparticiones inversas",
|
||||
"account.reverseShares.description": "Una compartición inversa te permite generar una URL única con la que usuarios externos pueden compartir archivos.",
|
||||
"account.reverseShares.description":
|
||||
"Una compartición inversa te permite generar una URL única con la que usuarios externos pueden compartir archivos.",
|
||||
"account.reverseShares.title.empty": "Aquí está vacío 👀",
|
||||
"account.reverseShares.description.empty": "No tienes ninguna compartición inversa.",
|
||||
"account.reverseShares.description.empty":
|
||||
"No tienes ninguna compartición inversa.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Crear compartición inversa",
|
||||
"account.reverseShares.modal.expiration.label": "Expiración",
|
||||
@@ -150,25 +167,33 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "Años",
|
||||
"account.reverseShares.modal.max-size.label": "Tamaño máximo del compartido",
|
||||
"account.reverseShares.modal.send-email": "Enviar notificación por correo",
|
||||
"account.reverseShares.modal.send-email.description": "Enviar una notificación por correo cuando se comparta algo con este enlace de compartición inversa.",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Enviar una notificación por correo cuando se comparta algo con este enlace de compartición inversa.",
|
||||
"account.reverseShares.modal.max-use.label": "Máximo de usos",
|
||||
"account.reverseShares.modal.max-use.description": "Cantidad máxima de veces que esta URL se puede usar para crear un compartido.",
|
||||
"account.reverseShare.never-expires": "Esta compartición inversa nunca expirará.",
|
||||
"account.reverseShare.expires-on": "Esta compartición inversa expirará en {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Todavía no se han creado compartidos",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Cantidad máxima de veces que esta URL se puede usar para crear un compartido.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Esta compartición inversa nunca expirará.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Esta compartición inversa expirará en {expiration}.",
|
||||
"account.reverseShares.table.no-shares":
|
||||
"Todavía no se han creado compartidos",
|
||||
"account.reverseShares.table.count.singular": "compartido",
|
||||
"account.reverseShares.table.count.plural": "compartidos",
|
||||
"account.reverseShares.table.shares": "Compartidos",
|
||||
"account.reverseShares.table.remaining": "Usos restantes",
|
||||
"account.reverseShares.table.max-size": "Tamaño máximo del compartido",
|
||||
"account.reverseShares.table.expires": "Expira en",
|
||||
"account.reverseShares.modal.reverse-share-link": "Enlace de compartición inversa",
|
||||
"account.reverseShares.modal.reverse-share-link":
|
||||
"Enlace de compartición inversa",
|
||||
"account.reverseShares.modal.delete.title": "Eliminar compartición inversa",
|
||||
"account.reverseShares.modal.delete.description": "¿Seguro que quieres eliminar esta compartición inversa? Si lo haces, todos los archivos asociados también serán eliminados.",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"¿Seguro que quieres eliminar esta compartición inversa? Si lo haces, todos los archivos asociados también serán eliminados.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Administración",
|
||||
"admin.button.users": "Gestión de usuarios",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Configuración",
|
||||
"admin.version": "Versión",
|
||||
// END /admin
|
||||
@@ -182,39 +207,61 @@ export default {
|
||||
"admin.users.edit.update.change-password.title": "Cambiar contraseña",
|
||||
"admin.users.edit.update.change-password.field": "Nueva contraseña",
|
||||
"admin.users.edit.update.change-password.button": "Guardar nueva contraseña",
|
||||
"admin.users.edit.update.notify.password.success": "Contraseña cambiada correctamente",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Contraseña cambiada correctamente",
|
||||
"admin.users.edit.delete.title": "Eliminar usuario {username}",
|
||||
"admin.users.edit.delete.description": "¿Realmente quiere eliminar este usuario y todos sus archivos compartidos?",
|
||||
"admin.users.edit.delete.description":
|
||||
"¿Realmente quiere eliminar este usuario y todos sus archivos compartidos?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Crear usuario",
|
||||
"admin.users.modal.create.username": "Nombre de usuario",
|
||||
"admin.users.modal.create.email": "Correo",
|
||||
"admin.users.modal.create.password": "Contraseña",
|
||||
"admin.users.modal.create.manual-password": "Establecer contraseña manualmente",
|
||||
"admin.users.modal.create.manual-password.description": "Si no se marca, el usuario recibirá un correo con un enlace para configurar su contraseña.",
|
||||
"admin.users.modal.create.manual-password":
|
||||
"Establecer contraseña manualmente",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Si no se marca, el usuario recibirá un correo con un enlace para configurar su contraseña.",
|
||||
"admin.users.modal.create.admin": "Privilegios de administrador",
|
||||
"admin.users.modal.create.admin.description": "Si se marca, el usuario podrá acceder al panel de administrador.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Si se marca, el usuario podrá acceder al panel de administrador.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Subir",
|
||||
"upload.notify.generic-error": "Ha ocurrido un error mientras se compartía tu archivo.",
|
||||
"upload.notify.count-failed": "No se pudo cargar {count} archivos. Intentando nuevamente.",
|
||||
"upload.notify.generic-error":
|
||||
"Ha ocurrido un error mientras se compartía tu archivo.",
|
||||
"upload.notify.count-failed":
|
||||
"No se pudo cargar {count} archivos. Intentando nuevamente.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Subir archivos",
|
||||
"upload.dropzone.description": "Arrastra archivos aquí para comenzar a compartir. Aceptamos archivos de un tamaño menor a {maxSize} en total.",
|
||||
"upload.dropzone.notify.file-too-big": "Tus archivos exceden el tamaño máximo de {maxSize}.",
|
||||
"upload.dropzone.description":
|
||||
"Arrastra archivos aquí para comenzar a compartir. Aceptamos archivos de un tamaño menor a {maxSize} en total.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Tus archivos exceden el tamaño máximo de {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Nombre",
|
||||
"upload.filelist.size": "Tamaño",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Crear compartido",
|
||||
"upload.modal.link.error.invalid": "Solo puede contener letras, números, guiones y guiones bajos",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Solo puede contener letras, números, guiones y guiones bajos",
|
||||
"upload.modal.link.error.taken": "Este enlace ya está en uso",
|
||||
"upload.modal.not-signed-in": "No has iniciado sesión",
|
||||
"upload.modal.not-signed-in-description": "No podrás eliminar tus compartidos manualmente ni ver el número de visitas.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"No podrás eliminar tus compartidos manualmente ni ver el número de visitas.",
|
||||
"upload.modal.expires.never": "nunca",
|
||||
"upload.modal.expires.never-long": "Nunca Expira",
|
||||
"upload.modal.expires.error.too-long": "La caducidad excede la fecha de caducidad máxima de {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"La caducidad excede la fecha de caducidad máxima de {max}.",
|
||||
"upload.modal.link.label": "Enlace",
|
||||
"upload.modal.expires.label": "Expiración",
|
||||
"upload.modal.expires.minute-singular": "Minuto",
|
||||
@@ -229,10 +276,13 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Meses",
|
||||
"upload.modal.expires.year-singular": "Año",
|
||||
"upload.modal.expires.year-plural": "Años",
|
||||
"upload.modal.accordion.description.title": "Descripción",
|
||||
"upload.modal.accordion.description.placeholder": "Nota para los destinatarios de este compartido",
|
||||
"upload.modal.accordion.name-and-description.title": "Nombre y descripción",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Nombre",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Nota para los destinatarios de este compartido",
|
||||
"upload.modal.accordion.email.title": "Correo de los destinatarios",
|
||||
"upload.modal.accordion.email.placeholder": "Ingresa los correos de los destinatarios",
|
||||
"upload.modal.accordion.email.placeholder":
|
||||
"Ingresa los correos de los destinatarios",
|
||||
"upload.modal.accordion.email.invalid-email": "Dirección de correo inválida",
|
||||
"upload.modal.accordion.security.title": "Opciones de seguridad",
|
||||
"upload.modal.accordion.security.password.label": "Protección por contraseña",
|
||||
@@ -241,33 +291,41 @@ export default {
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Sin límite",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Este compartido nunca expirará.",
|
||||
"upload.modal.completed.expires-on": "Este compartido expira en {expiration}.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"Este compartido expira en {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Compartido listo",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Compartido {shareId}",
|
||||
"share.description": "¡Mira lo que he compartido contigo!",
|
||||
"share.error.visitor-limit-exceeded.title": "Se excedió el límite de visitas",
|
||||
"share.error.visitor-limit-exceeded.description": "Se ha excedido el límite de visitas para este compartido.",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Se ha excedido el límite de visitas para este compartido.",
|
||||
"share.error.removed.title": "Compartido eliminado",
|
||||
"share.error.not-found.title": "Compartido no encontrado",
|
||||
"share.error.not-found.description": "El compartido que estás buscando no existe.",
|
||||
"share.error.not-found.description":
|
||||
"El compartido que estás buscando no existe.",
|
||||
"share.modal.password.title": "Se requiere contraseña",
|
||||
"share.modal.password.description": "Por favor ingrese la contraseña para poder acceder a este compartido.",
|
||||
"share.modal.password.description":
|
||||
"Por favor ingrese la contraseña para poder acceder a este compartido.",
|
||||
"share.modal.password": "Contraseña",
|
||||
"share.modal.error.invalid-password": "Contraseña inválida",
|
||||
"share.button.download-all": "Descargar todo",
|
||||
"share.notify.download-all-preparing": "Se está preparando el compartido. Intente de nuevo en unos minutos.",
|
||||
"share.notify.download-all-preparing":
|
||||
"Se está preparando el compartido. Intente de nuevo en unos minutos.",
|
||||
"share.modal.file-link": "Enlace del archivo",
|
||||
"share.table.name": "Nombre",
|
||||
"share.table.size": "Tamaño",
|
||||
"share.modal.file-preview.error.not-supported.title": "Vista previa no disponible",
|
||||
"share.modal.file-preview.error.not-supported.description": "La vista previa para este tipo de archivo no está disponible. Por favor descargue el archivo para verlo.",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Vista previa no disponible",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"La vista previa para este tipo de archivo no está disponible. Por favor descargue el archivo para verlo.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Editar {shareId}",
|
||||
"share.edit.append-upload": "Agregar archivo",
|
||||
"share.edit.notify.generic-error": "Ha ocurrido un error mientras se compartía tu archivo.",
|
||||
"share.edit.notify.generic-error":
|
||||
"Ha ocurrido un error mientras se compartía tu archivo.",
|
||||
"share.edit.notify.save-success": "Compartir actualizado correctamente",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,110 +338,176 @@ export default {
|
||||
"admin.config.general.app-name": "Nombre de la App",
|
||||
"admin.config.general.app-name.description": "Nombre de la aplicación",
|
||||
"admin.config.general.app-url": "App URL",
|
||||
"admin.config.general.app-url.description": "En cuál URL está disponible Pingvin Share",
|
||||
"admin.config.general.app-url.description":
|
||||
"En cuál URL está disponible Pingvin Share",
|
||||
"admin.config.general.show-home-page": "Mostrar página de inicio",
|
||||
"admin.config.general.show-home-page.description": "Mostrar o no la página de inicio",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Mostrar o no la página de inicio",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Cambia tu logo subiendo una nueva imagen. La imagen debe ser un PNG y debe estar en formato 1:1.",
|
||||
"admin.config.general.logo.description":
|
||||
"Cambia tu logo subiendo una nueva imagen. La imagen debe ser un PNG y debe estar en formato 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Elegir imagen",
|
||||
"admin.config.email.enable-share-email-recipients": "Activar destinatarios por correo",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Si desea permitir a los destinatarios compartir por correo. Activa esto solo si tienes habilitado SMTP.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Activar destinatarios por correo",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Si desea permitir a los destinatarios compartir por correo. Activa esto solo si tienes habilitado SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Asunto destinatario",
|
||||
"admin.config.email.share-recipients-subject.description": "Asunto del correo el cual es enviado al destinatario del compartido.",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Asunto del correo el cual es enviado al destinatario del compartido.",
|
||||
"admin.config.email.share-recipients-message": "Mensaje destinatario",
|
||||
"admin.config.email.share-recipients-message.description": "Mensaje el cual es enviado al destinatario del compartido. Variables disponibles:\n{creator} - Nombre del creador del compartido\n {shareUrl} - URL del compartido\n {desc} - Descripción del compartido\n {expires} - Fecha de expiración del compartido\nLas variables serán remplazadas con los valores reales.",
|
||||
"admin.config.email.reverse-share-subject": "Asunto de la compartición inversa",
|
||||
"admin.config.email.reverse-share-subject.description": "Asunto del correo el cual se envía cuando alguien comparte algo con tu enlace de compartición inversa.",
|
||||
"admin.config.email.reverse-share-message": "Mensaje de la compartición inversa",
|
||||
"admin.config.email.reverse-share-message.description": "Mensaje que se envía cuando alguien comparte algo con tu enlace de compartición inversa. {shareUrl} Se remplazará con el nombre del creador y la URL del compartido.",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Mensaje el cual es enviado al destinatario del compartido. Variables disponibles:\n{creator} - Nombre del creador del compartido\n {shareUrl} - URL del compartido\n {desc} - Descripción del compartido\n {expires} - Fecha de expiración del compartido\nLas variables serán remplazadas con los valores reales.",
|
||||
"admin.config.email.reverse-share-subject":
|
||||
"Asunto de la compartición inversa",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Asunto del correo el cual se envía cuando alguien comparte algo con tu enlace de compartición inversa.",
|
||||
"admin.config.email.reverse-share-message":
|
||||
"Mensaje de la compartición inversa",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Mensaje que se envía cuando alguien comparte algo con tu enlace de compartición inversa. {shareUrl} Se remplazará con el nombre del creador y la URL del compartido.",
|
||||
"admin.config.email.reset-password-subject": "Asunto restablecer contraseña",
|
||||
"admin.config.email.reset-password-subject.description": "Asunto del correo que se envía cuando un usuario solicita restablecer la contraseña.",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Asunto del correo que se envía cuando un usuario solicita restablecer la contraseña.",
|
||||
"admin.config.email.reset-password-message": "Mensaje restablecer contraseña",
|
||||
"admin.config.email.reset-password-message.description": "Mensaje que se envía cuando un usuario solicita restablecer la contraseña. {url} se remplazará con la URL para restablecer la contraseña.",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Mensaje que se envía cuando un usuario solicita restablecer la contraseña. {url} se remplazará con la URL para restablecer la contraseña.",
|
||||
"admin.config.email.invite-subject": "Asunto de la invitación",
|
||||
"admin.config.email.invite-subject.description": "Asunto del correo que se envía cuando un administrador invita a un usuario.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Asunto del correo que se envía cuando un administrador invita a un usuario.",
|
||||
"admin.config.email.invite-message": "Mensaje de invitación",
|
||||
"admin.config.email.invite-message.description": "Mensaje que se envía cuando un administrador invita a un usuario. {url} Se remplazará con la URL de invitación y {password} con la contraseña.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Mensaje que se envía cuando un administrador invita a un usuario. {url} Se remplazará con la URL de invitación y {password} con la contraseña.",
|
||||
"admin.config.share.allow-registration": "Permitir registro",
|
||||
"admin.config.share.allow-registration.description": "Si se permite el registro",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Permitir compartir sin iniciar sesión",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Si los usuarios que no han iniciado sesión pueden compartir",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Si se permite el registro",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Permitir compartir sin iniciar sesión",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Si los usuarios que no han iniciado sesión pueden compartir",
|
||||
"admin.config.share.max-expiration": "Expiración máxima",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Expiración máxima para compartir en horas. Establezca en 0 para permitir una expiración ilimitada.",
|
||||
"admin.config.share.max-size": "Tamaño máximo",
|
||||
"admin.config.share.max-size.description": "Tamaño máximo de los archivos, en bytes",
|
||||
"admin.config.share.max-size.description":
|
||||
"Tamaño máximo de los archivos, en bytes",
|
||||
"admin.config.share.zip-compression-level": "Nivel de compresión del Zip",
|
||||
"admin.config.share.zip-compression-level.description": "Ajustar el nivel para equilibrar entre el tamaño del archivo y la velocidad de compresión. Los valores válidos van del 0 al 9, siendo 0 sin compresión y 9 el nivel máximo de compresión. ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Ajustar el nivel para equilibrar entre el tamaño del archivo y la velocidad de compresión. Los valores válidos van del 0 al 9, siendo 0 sin compresión y 9 el nivel máximo de compresión. ",
|
||||
"admin.config.share.chunk-size": "Tamaño de los fragmentos",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Ajusta el tamaño de los fragmentos (en bytes) para tus cargas para equilibrar la eficiencia y la fiabilidad según tu conexión a internet. Fragmentos más pequeños pueden mejorar las tasas de éxito para conexiones inestables, mientras que fragmentos más grandes aceleran las cargas para conexiones estables.",
|
||||
"admin.config.smtp.enabled": "Habilitado",
|
||||
"admin.config.smtp.enabled.description": "Si SMTP está habilitado. Active solo si ha introducido el host, el puerto, el correo, el usuario y la contraseña de su servidor SMTP.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Si SMTP está habilitado. Active solo si ha introducido el host, el puerto, el correo, el usuario y la contraseña de su servidor SMTP.",
|
||||
"admin.config.smtp.host": "Host",
|
||||
"admin.config.smtp.host.description": "Host del servidor SMTP",
|
||||
"admin.config.smtp.port": "Puerto",
|
||||
"admin.config.smtp.port.description": "Puerto del servidor SMTP",
|
||||
"admin.config.smtp.email": "Correo",
|
||||
"admin.config.smtp.email.description": "Dirección de correo desde la cual se envían los correos",
|
||||
"admin.config.smtp.email.description":
|
||||
"Dirección de correo desde la cual se envían los correos",
|
||||
"admin.config.smtp.username": "Usuario",
|
||||
"admin.config.smtp.username.description": "Usuario del servidor SMTP",
|
||||
"admin.config.smtp.password": "Contraseña",
|
||||
"admin.config.smtp.password.description": "Contraseña del servidor SMTP",
|
||||
"admin.config.smtp.button.test": "Enviar correo de prueba",
|
||||
"admin.config.oauth.allow-registration": "Allow registration",
|
||||
"admin.config.oauth.allow-registration.description": "Allow users to register via social login",
|
||||
"admin.config.oauth.ignore-totp": "Ignore TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.allow-registration": "Permitir registro",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Permitir a los usuarios registrarse mediante login social",
|
||||
"admin.config.oauth.ignore-totp": "Ignorar TOTP",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Ignorar TOTP cuando el usuario utiliza inicio de sesión social",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description": "Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Si el inicio de sesión de GitHub está habilitado",
|
||||
"admin.config.oauth.github-client-id": "ID del Cliente de GitHub",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"ID de cliente de la aplicación OAuth de GitHub",
|
||||
"admin.config.oauth.github-client-secret":
|
||||
"Palabra secreta del Cliente de GitHub",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Secreto de cliente de la aplicación OAuth de GitHub",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Whether Google login is enabled",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Si el inicio de sesión de Google está habilitado",
|
||||
"admin.config.oauth.google-client-id": "ID del Cliente de Google",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"ID de cliente de la aplicación de Google OAuth",
|
||||
"admin.config.oauth.google-client-secret":
|
||||
"Palabra secreta del cliente de Google",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Secreto del cliente de la aplicación Google OAuth",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Si el inicio de sesión de Microsoft está habilitado",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-client-id": "ID del cliente de Microsoft",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"ID de cliente de la app OAuth de Microsoft",
|
||||
"admin.config.oauth.microsoft-client-secret":
|
||||
"Secreto del cliente de Microsoft",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Si el inicio de sesión de Discord está habilitado",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord limited server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limitar el inicio de sesión a usuarios en un servidor específico. Déjelo en blanco para desactivarlo.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Whether OpenID login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID OAuth app",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "Conexión OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Whether OpenID Connect login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "Oops esta página no existe.",
|
||||
"404.button.home": "Regrésame al inicio",
|
||||
// error
|
||||
"error.title": "Error",
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Go back",
|
||||
"error.msg.default": "Something went wrong.",
|
||||
"error.msg.access_denied": "You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token": "The authentication process took too long, please try again.",
|
||||
"error.msg.no_user": "User linked to this {0} account doesn't exist.",
|
||||
"error.msg.no_email": "Can't get email address from this {0} account.",
|
||||
"error.msg.already_linked": "This {0} account is already linked to another account.",
|
||||
"error.msg.not_linked": "This {0} account haven't linked to any account yet.",
|
||||
"error.description": "¡Ups!",
|
||||
"error.button.back": "Volver",
|
||||
"error.msg.default": "Algo ha salido mal.",
|
||||
"error.msg.access_denied":
|
||||
"Ha cancelado el proceso de autenticación, por favor inténtelo de nuevo.",
|
||||
"error.msg.expired_token":
|
||||
"El proceso de autenticación ha tardado demasiado, por favor inténtelo de nuevo.",
|
||||
"error.msg.invalid_token": "Error interno",
|
||||
"error.msg.no_user": "El usuario vinculado a esta cuenta {0} no existe.",
|
||||
"error.msg.no_email":
|
||||
"No se puede obtener la dirección de correo electrónico de esta cuenta {0}.",
|
||||
"error.msg.already_linked":
|
||||
"Esta cuenta {0} ya está vinculada a otra cuenta.",
|
||||
"error.msg.not_linked":
|
||||
"Esta cuenta {0} aún no ha sido vinculada a ninguna cuenta.",
|
||||
"error.msg.unverified_account":
|
||||
"Esta cuenta {0} no está verificada, por favor inténtalo de nuevo después de la verificación.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"No tienes permitido iniciar sesion.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"No se puede obtener la información de usuario de la cuenta {0}.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "Conexión OpenID",
|
||||
// Common translations
|
||||
"common.button.save": "Guardar",
|
||||
"common.button.create": "Crear",
|
||||
@@ -396,8 +520,10 @@ export default {
|
||||
"common.button.generate": "Generar",
|
||||
"common.button.done": "Listo",
|
||||
"common.text.link": "Enlace",
|
||||
"common.text.navigate-to-link": "Ir al enlace",
|
||||
"common.text.or": "o",
|
||||
"common.button.go-back": "Volver",
|
||||
"common.button.go-home": "Página de inicio",
|
||||
"common.notify.copied": "Tu enlace se ha copiado al portapapeles",
|
||||
"common.success": "Éxito",
|
||||
"common.error": "Error",
|
||||
@@ -407,5 +533,5 @@ export default {
|
||||
"common.error.too-long": "Debe tener como máximo {length} caracteres",
|
||||
"common.error.exact-length": "Debe tener exactamente {length} caracteres",
|
||||
"common.error.invalid-number": "Debe ser un número",
|
||||
"common.error.field-required": "Este campo es requerido"
|
||||
};
|
||||
"common.error.field-required": "Este campo es requerido",
|
||||
};
|
||||
|
||||
@@ -11,14 +11,17 @@ export default {
|
||||
"navbar.avatar.signout": "Kirjaudu ulos",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "<h>\"Itse isännöitty\"</h> tiedostojen jakamisen alusta.",
|
||||
"home.description": "Haluatko oikeasti jakaa yksityisiä tiedostojasi kolmannen osapuolen yhtiöille niin kuin WeTransfer?",
|
||||
"home.title": '<h>"Itse isännöitty"</h> tiedostojen jakamisen alusta.',
|
||||
"home.description":
|
||||
"Haluatko oikeasti jakaa yksityisiä tiedostojasi kolmannen osapuolen yhtiöille niin kuin WeTransfer?",
|
||||
"home.bullet.a.name": "Itse-Isännöitty",
|
||||
"home.bullet.a.description": "Isännöi \"Pingvin Share\" omalla palvelimellasi.",
|
||||
"home.bullet.a.description": 'Isännöi "Pingvin Share" omalla palvelimellasi.',
|
||||
"home.bullet.b.name": "Yksityisyys",
|
||||
"home.bullet.b.description": "Sinun tiedostosi ovat sinun ja niiden ei ikinä pidä päättyä kolmannen osapuolen käsiin.",
|
||||
"home.bullet.b.description":
|
||||
"Sinun tiedostosi ovat sinun ja niiden ei ikinä pidä päättyä kolmannen osapuolen käsiin.",
|
||||
"home.bullet.c.name": "Ei ärsyttävää tiedoston kokorajoitusta",
|
||||
"home.bullet.c.description": "Lataa niin paljon isoja tiedostoja kuin tykkäät. Vain kovalevysi on rajana.",
|
||||
"home.bullet.c.description":
|
||||
"Lataa niin paljon isoja tiedostoja kuin tykkäät. Vain kovalevysi on rajana.",
|
||||
"home.button.start": "Aloita",
|
||||
"home.button.source": "Lähdekoodi",
|
||||
// END /
|
||||
@@ -27,12 +30,15 @@ export default {
|
||||
"signin.description": "Eikö sinulla ole vielä tiliä?",
|
||||
"signin.button.signup": "Rekisteröidy",
|
||||
"signin.input.email-or-username": "Sähköposti tai käyttäjänimi",
|
||||
"signin.input.email-or-username.placeholder": "Sähköpostisi tai käyttäjänimesi",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"Sähköpostisi tai käyttäjänimesi",
|
||||
"signin.input.password": "Salasana",
|
||||
"signin.input.password.placeholder": "Salasana",
|
||||
"signin.button.submit": "Kirjaudu sisään",
|
||||
"signIn.notify.totp-required.title": "Kaksivaiheinen tunnistautuminen vaadittu",
|
||||
"signIn.notify.totp-required.description": "Syötä kaksivaiheisen tunnistautumisen koodi tähän",
|
||||
"signIn.notify.totp-required.title":
|
||||
"Kaksivaiheinen tunnistautuminen vaadittu",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Syötä kaksivaiheisen tunnistautumisen koodi tähän",
|
||||
"signIn.oauth.or": "OR",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -56,8 +62,10 @@ export default {
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Unohditko salasanan?",
|
||||
"resetPassword.description": "Kirjoita sähköpostiosoitteesi palauttaaksesi salasanasi.",
|
||||
"resetPassword.notify.success": "Sähköpostiosoite on lähetetty linkillä, jolla voit nollata salasanasi.",
|
||||
"resetPassword.description":
|
||||
"Kirjoita sähköpostiosoitteesi palauttaaksesi salasanasi.",
|
||||
"resetPassword.notify.success":
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.button.back": "Takaisin kirjautumiseen",
|
||||
"resetPassword.text.resetPassword": "Nollaa salasana",
|
||||
"resetPassword.text.enterNewPassword": "Anna uusi salasana",
|
||||
@@ -72,7 +80,8 @@ export default {
|
||||
"account.card.password.title": "Salasana",
|
||||
"account.card.password.old": "Vanha salasana",
|
||||
"account.card.password.new": "Uusi salasana",
|
||||
"account.card.password.noPasswordSet": "You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.notify.password.success": "Salasana vaihdettu",
|
||||
"account.card.oauth.title": "Social login",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +93,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Unlink",
|
||||
"account.card.oauth.unlinked": "Unlinked",
|
||||
"account.modal.unlink.title": "Unlink account",
|
||||
"account.modal.unlink.description": "Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.modal.unlink.description":
|
||||
"Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.notify.oauth.unlinked.success": "Unlinked successfully",
|
||||
"account.card.security.title": "Turvallisuus",
|
||||
"account.card.security.totp.enable.description": "Anna nykyinen salasanasi aloittaaksesi TOTP käytön",
|
||||
"account.card.security.totp.disable.description": "Syötä nykyinen salasanasi poistaaksesi TOTP käytöstä",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Anna nykyinen salasanasi aloittaaksesi TOTP käytön",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Syötä nykyinen salasanasi poistaaksesi TOTP käytöstä",
|
||||
"account.card.security.totp.button.start": "Aloita",
|
||||
"account.modal.totp.title": "Ota Käyttöön TOTP",
|
||||
"account.modal.totp.step1": "Vaihe 1: Lisää todentaja",
|
||||
"account.modal.totp.step2": "Vaihe 2: Vahvista koodisi",
|
||||
"account.modal.totp.enterManually": "Syötä manuaalisesti",
|
||||
"account.modal.totp.code": "Koodi",
|
||||
"account.modal.totp.clickToCopy": "Klikkaa kopioidaksesi",
|
||||
"common.button.clickToCopy": "Klikkaa kopioidaksesi",
|
||||
"account.modal.totp.verify": "Vahvista",
|
||||
"account.notify.totp.disable": "TOTP poistettu käytöstä",
|
||||
"account.notify.totp.enable": "TOTP otettu käyttöön onnistuneesti",
|
||||
"account.card.language.title": "Kieli",
|
||||
"account.card.language.description": "Projekti on yhteisön kääntämä. Jotkut kielet saattavat olla puutteellisia.",
|
||||
"account.card.language.description":
|
||||
"Projekti on yhteisön kääntämä. Jotkut kielet saattavat olla puutteellisia.",
|
||||
"account.card.color.title": "Väriteema",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Tumma",
|
||||
@@ -108,7 +121,8 @@ export default {
|
||||
"account.theme.system": "Järjestelmä",
|
||||
"account.button.delete": "Poista tili",
|
||||
"account.modal.delete.title": "Poista tili",
|
||||
"account.modal.delete.description": "Haluatko varmasti poistaa tilisi mukaan lukien kaikki aktiiviset jaetut tiedostot?",
|
||||
"account.modal.delete.description":
|
||||
"Haluatko varmasti poistaa tilisi mukaan lukien kaikki aktiiviset jaetut tiedostot?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Minun jakaukset",
|
||||
@@ -126,13 +140,16 @@ export default {
|
||||
"account.shares.modal.share-informations": "Jaetun tiedot",
|
||||
"account.shares.modal.share-link": "Jaa linkki",
|
||||
"account.shares.modal.delete.title": "Poista jaettu {share}",
|
||||
"account.shares.modal.delete.description": "Haluatko todella poistaa tämän jaetun tiedoston/ot?",
|
||||
"account.shares.modal.delete.description":
|
||||
"Haluatko todella poistaa tämän jaetun tiedoston/ot?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Takaperin jaetut",
|
||||
"account.reverseShares.description": "Käänteisen jaon avulla voit luoda ainutlaatuisen URL-osoitteen, jonka avulla ulkoiset käyttäjät voivat luoda jaon.",
|
||||
"account.reverseShares.description":
|
||||
"Käänteisen jaon avulla voit luoda ainutlaatuisen URL-osoitteen, jonka avulla ulkoiset käyttäjät voivat luoda jaon.",
|
||||
"account.reverseShares.title.empty": "Täällä on tyhjää 👀",
|
||||
"account.reverseShares.description.empty": "Sinulla ei ole käänteisiä jakoja.",
|
||||
"account.reverseShares.description.empty":
|
||||
"Sinulla ei ole käänteisiä jakoja.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Create reverse share",
|
||||
"account.reverseShares.modal.expiration.label": "Vanhentuminen",
|
||||
@@ -150,11 +167,15 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "Vuotta",
|
||||
"account.reverseShares.modal.max-size.label": "Suurin tiedostonkoko",
|
||||
"account.reverseShares.modal.send-email": "Lähetä sähköposti-ilmoitus",
|
||||
"account.reverseShares.modal.send-email.description": "Lähetä sähköpostiilmoitus kun jako on luotu tällä käänteisellä jakolinkillä.",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Lähetä sähköpostiilmoitus kun jako on luotu tällä käänteisellä jakolinkillä.",
|
||||
"account.reverseShares.modal.max-use.label": "Käyttökertoja enintään",
|
||||
"account.reverseShares.modal.max-use.description": "Enimmäismäärä kertoja, joilla tämä URL-osoite voidaan käyttää joita luomiseen.",
|
||||
"account.reverseShare.never-expires": "Tämä käänteinen jako ei koskaan vanhene.",
|
||||
"account.reverseShare.expires-on": "Tämä käänteinen jako vanhenee kun on {expiration}.",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Enimmäismäärä kertoja, joilla tämä URL-osoite voidaan käyttää joita luomiseen.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Tämä käänteinen jako ei koskaan vanhene.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Tämä käänteinen jako vanhenee kun on {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Ei vielä luotuja jakoja",
|
||||
"account.reverseShares.table.count.singular": "jaa",
|
||||
"account.reverseShares.table.count.plural": "jaot",
|
||||
@@ -162,13 +183,16 @@ export default {
|
||||
"account.reverseShares.table.remaining": "Jäljellä olevat käyttökerrat",
|
||||
"account.reverseShares.table.max-size": "Suurin tiedostonkoko",
|
||||
"account.reverseShares.table.expires": "Vanhenee",
|
||||
"account.reverseShares.modal.reverse-share-link": "Takaperin jaetun jaon linkki",
|
||||
"account.reverseShares.modal.reverse-share-link":
|
||||
"Takaperin jaetun jaon linkki",
|
||||
"account.reverseShares.modal.delete.title": "Poista käänteinen jako",
|
||||
"account.reverseShares.modal.delete.description": "Haluatko varmasti poistaa tämän käänteisen jaon? Jos kyllä, myös siihen liittyvät jaot poistetaan.",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Haluatko varmasti poistaa tämän käänteisen jaon? Jos kyllä, myös siihen liittyvät jaot poistetaan.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Ylläpito",
|
||||
"admin.button.users": "Käyttäjien Hallinta",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Asetukset",
|
||||
"admin.version": "Versio",
|
||||
// END /admin
|
||||
@@ -184,37 +208,57 @@ export default {
|
||||
"admin.users.edit.update.change-password.button": "Tallenna uusi salasana",
|
||||
"admin.users.edit.update.notify.password.success": "Salasana vaihdettu",
|
||||
"admin.users.edit.delete.title": "Poista käyttäjä {username}",
|
||||
"admin.users.edit.delete.description": "Haluatko varmasti poistaa tämän käyttäjän ja kaikki hänen jaot?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Haluatko varmasti poistaa tämän käyttäjän ja kaikki hänen jaot?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Luo käyttäjä",
|
||||
"admin.users.modal.create.username": "Käyttäjätunnus",
|
||||
"admin.users.modal.create.email": "Sähköposti",
|
||||
"admin.users.modal.create.password": "Salasana",
|
||||
"admin.users.modal.create.manual-password": "Aseta salasana manuaalisesti",
|
||||
"admin.users.modal.create.manual-password.description": "Jos ei ole valittuna, käyttäjä saa sähköpostiviestin, jossa on linkki, joka määrittää heidän salasanansa.",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Jos ei ole valittuna, käyttäjä saa sähköpostiviestin, jossa on linkki, joka määrittää heidän salasanansa.",
|
||||
"admin.users.modal.create.admin": "Ylläpitäjän oikeudet",
|
||||
"admin.users.modal.create.admin.description": "Jos valittu, käyttäjä voi käyttää hallintapaneelia.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Jos valittu, käyttäjä voi käyttää hallintapaneelia.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Pilvetä",
|
||||
"upload.notify.generic-error": "Kohdattiin odottamaton virhe jaon luomisessa.",
|
||||
"upload.notify.count-failed": "{count} tiedostoa ei voitu ladata. Yritetään uudelleen.",
|
||||
"upload.notify.generic-error":
|
||||
"Kohdattiin odottamaton virhe jaon luomisessa.",
|
||||
"upload.notify.count-failed":
|
||||
"{count} tiedostoa ei voitu ladata. Yritetään uudelleen.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Pilvetä tiedostoja",
|
||||
"upload.dropzone.description": "Vedä ja pudota tiedostot tähän aloittaaksesi jakamisen. Voimme hyväksyä vain tiedostot, jotka ovat yhteensä alle {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big": "Tiedostojen enimmäiskoko ylittää {maxSize} -arvon enimmäismäärän.",
|
||||
"upload.dropzone.description":
|
||||
"Vedä ja pudota tiedostot tähän aloittaaksesi jakamisen. Voimme hyväksyä vain tiedostot, jotka ovat yhteensä alle {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Tiedostojen enimmäiskoko ylittää {maxSize} -arvon enimmäismäärän.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Nimi",
|
||||
"upload.filelist.size": "Koko",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Luo Jako",
|
||||
"upload.modal.link.error.invalid": "Voi sisältää vain kirjaimia, numeroita, alaviivoja ja väliviivoja",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Voi sisältää vain kirjaimia, numeroita, alaviivoja ja väliviivoja",
|
||||
"upload.modal.link.error.taken": "Tämä linkki on jo käytössä",
|
||||
"upload.modal.not-signed-in": "Et ole kirjautunut sisään",
|
||||
"upload.modal.not-signed-in-description": "Et voi poistaa jakoasi manuaalisesti ja tarkastella kävijöiden määrää.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Et voi poistaa jakoasi manuaalisesti ja tarkastella kävijöiden määrää.",
|
||||
"upload.modal.expires.never": "ei koskaan",
|
||||
"upload.modal.expires.never-long": "Ei vanhene koskaan",
|
||||
"upload.modal.expires.error.too-long": "Expiration exceeds maximum expiration date of {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Expiration exceeds maximum expiration date of {max}.",
|
||||
"upload.modal.link.label": "Linkki",
|
||||
"upload.modal.expires.label": "Vanhentuminen",
|
||||
"upload.modal.expires.minute-singular": "Minuutti",
|
||||
@@ -229,10 +273,13 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Kuukautta",
|
||||
"upload.modal.expires.year-singular": "Vuosi",
|
||||
"upload.modal.expires.year-plural": "Vuotta",
|
||||
"upload.modal.accordion.description.title": "Kuvaus",
|
||||
"upload.modal.accordion.description.placeholder": "Huomautus tämän jaon vastaanottajille",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "Sähköpostin vastaanottajat",
|
||||
"upload.modal.accordion.email.placeholder": "Syötä sähköpostin vastaanottajat",
|
||||
"upload.modal.accordion.email.placeholder":
|
||||
"Syötä sähköpostin vastaanottajat",
|
||||
"upload.modal.accordion.email.invalid-email": "Virheellinen sähköpostiosoite",
|
||||
"upload.modal.accordion.security.title": "Turvallisuusasetukset",
|
||||
"upload.modal.accordion.security.password.label": "Salasanasuojaus",
|
||||
@@ -240,34 +287,41 @@ export default {
|
||||
"upload.modal.accordion.security.max-views.label": "Näkymien enimmäismäärä",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Ei rajoitusta",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Tämä käänteinen jako ei koskaan vanhene.",
|
||||
"upload.modal.completed.expires-on": "Tämä käänteinen jako vanhenee kun on {expiration}.",
|
||||
"upload.modal.completed.never-expires":
|
||||
"Tämä käänteinen jako ei koskaan vanhene.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"Tämä käänteinen jako vanhenee kun on {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Jako valmiina",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Jaa {shareId}",
|
||||
"share.description": "Katso, mitä olen jakanut kanssasi!",
|
||||
"share.error.visitor-limit-exceeded.title": "Vierailijoiden raja ylitetty",
|
||||
"share.error.visitor-limit-exceeded.description": "Tämän jaon kävijäraja on ylittynyt.",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Tämän jaon kävijäraja on ylittynyt.",
|
||||
"share.error.removed.title": "Jako poistettu",
|
||||
"share.error.not-found.title": "Jakoa ei löydetty",
|
||||
"share.error.not-found.description": "Etsimääsi sivua ei ole olemassa.",
|
||||
"share.modal.password.title": "Salasana vaaditaan",
|
||||
"share.modal.password.description": "Päästäksesi käsiksi tähän jakoon anna jaon salasana.",
|
||||
"share.modal.password.description":
|
||||
"Päästäksesi käsiksi tähän jakoon anna jaon salasana.",
|
||||
"share.modal.password": "Salasana",
|
||||
"share.modal.error.invalid-password": "Virheellinen salasana",
|
||||
"share.button.download-all": "Lataa kaikki",
|
||||
"share.notify.download-all-preparing": "Jako on valmistumassa. Yritä uudelleen muutaman minuutin kuluttua.",
|
||||
"share.notify.download-all-preparing":
|
||||
"Jako on valmistumassa. Yritä uudelleen muutaman minuutin kuluttua.",
|
||||
"share.modal.file-link": "Tiedoston linkki",
|
||||
"share.table.name": "Nimi",
|
||||
"share.table.size": "Koko",
|
||||
"share.modal.file-preview.error.not-supported.title": "Esikatselua ei tuettu",
|
||||
"share.modal.file-preview.error.not-supported.description": "Esikatselua thise tiedostotyypille ei tueta. Ole hyvä ja lataa tiedosto nähdäksesi sen.",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"A preview for this file type is unsupported. Please download the file to view it.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Edit {shareId}",
|
||||
"share.edit.append-upload": "Append file",
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.generic-error":
|
||||
"An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,91 +334,139 @@ export default {
|
||||
"admin.config.general.app-name": "Sovelluksen nimi",
|
||||
"admin.config.general.app-name.description": "Sovelluksen nimi",
|
||||
"admin.config.general.app-url": "Sovelluksen URL",
|
||||
"admin.config.general.app-url.description": "Millä URL-osoitteella Pingvin Share on saatavilla",
|
||||
"admin.config.general.app-url.description":
|
||||
"Millä URL-osoitteella Pingvin Share on saatavilla",
|
||||
"admin.config.general.show-home-page": "Näytä kotisivu",
|
||||
"admin.config.general.show-home-page.description": "Näytetäänkö kotisivu vai ei",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Näytetäänkö kotisivu vai ei",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Muuta logoa lataamalla uusi kuva. Kuvan on oltava PNG ja sen on oltava formaatti 1:1.",
|
||||
"admin.config.general.logo.description":
|
||||
"Muuta logoa lataamalla uusi kuva. Kuvan on oltava PNG ja sen on oltava formaatti 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Valitse kuva",
|
||||
"admin.config.email.enable-share-email-recipients": "Salli sähköpostin vastaanottajien jakaminen",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Salli sähköpostien jakaminen vastaanottajille. Ota tämä käyttöön vain, jos olet ottanut SMTP:n käyttöön.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Salli sähköpostin vastaanottajien jakaminen",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Salli sähköpostien jakaminen vastaanottajille. Ota tämä käyttöön vain, jos olet ottanut SMTP:n käyttöön.",
|
||||
"admin.config.email.share-recipients-subject": "Sähköpostijaon otsikko",
|
||||
"admin.config.email.share-recipients-subject.description": "Sähköpostin aihe, joka saa lähetetään jaon vastaanottajille.",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Sähköpostin aihe, joka saa lähetetään jaon vastaanottajille.",
|
||||
"admin.config.email.share-recipients-message": "Sähköpostijaon viesti",
|
||||
"admin.config.email.share-recipients-message.description": "Viesti joka lähetetään jaon vastaanottajille. Saatavilla olevat muuttujat:\n {creator} - Jaon luojan käyttäjänimi\n {shareUrl} - Jaon URL\n {desc} - Jaon kuvaus\n {expires} - Jaon päättymispäivä\n Muuttujat korvataan todellisella arvolla.",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Viesti joka lähetetään jaon vastaanottajille. Saatavilla olevat muuttujat:\n {creator} - Jaon luojan käyttäjänimi\n {shareUrl} - Jaon URL\n {desc} - Jaon kuvaus\n {expires} - Jaon päättymispäivä\n Muuttujat korvataan todellisella arvolla.",
|
||||
"admin.config.email.reverse-share-subject": "Käänteisen jaon aihe",
|
||||
"admin.config.email.reverse-share-subject.description": "Aihe sähköpostin joka lähetetään kun joku loi jaon käänteisen jakolinkin kanssa.",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Aihe sähköpostin joka lähetetään kun joku loi jaon käänteisen jakolinkin kanssa.",
|
||||
"admin.config.email.reverse-share-message": "Käänteisen jakoviestin viesti",
|
||||
"admin.config.email.reverse-share-message.description": "Viesti joka lähetetään kun joku loi jaon käänteisen jakolinkin kanssa. {shareUrl} korvataan luojan nimellä ja jaon URL:lla.",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Viesti joka lähetetään kun joku loi jaon käänteisen jakolinkin kanssa. {shareUrl} korvataan luojan nimellä ja jaon URL:lla.",
|
||||
"admin.config.email.reset-password-subject": "Nollaa salasanan aihe",
|
||||
"admin.config.email.reset-password-subject.description": "Sähköpostin aihe, joka lähetetään kun käyttäjä pyytää salasanan palauttamista.",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Sähköpostin aihe, joka lähetetään kun käyttäjä pyytää salasanan palauttamista.",
|
||||
"admin.config.email.reset-password-message": "Nollaa salasanan viesti",
|
||||
"admin.config.email.reset-password-message.description": "Viesti joka lähetetään kun käyttäjä pyytää salasanan nollausta. {url} korvataan nollaussalasanan URL-osoitteella.",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Viesti joka lähetetään kun käyttäjä pyytää salasanan nollausta. {url} korvataan nollaussalasanan URL-osoitteella.",
|
||||
"admin.config.email.invite-subject": "Kutsun aihe",
|
||||
"admin.config.email.invite-subject.description": "Sähköpostin aihe, mikä lähetetään kun ylläpitäjä kutsuu käyttäjää.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Sähköpostin aihe, mikä lähetetään kun ylläpitäjä kutsuu käyttäjää.",
|
||||
"admin.config.email.invite-message": "Kutsun viesti",
|
||||
"admin.config.email.invite-message.description": "Viesti mikä lähetetään kuin yp invaa käyttäjän. {url} korvataan kutsuosoitteella ja {password} salasanalla.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Viesti mikä lähetetään kuin yp invaa käyttäjän. {url} korvataan kutsuosoitteella ja {password} salasanalla.",
|
||||
"admin.config.share.allow-registration": "Salli rekisteröinti",
|
||||
"admin.config.share.allow-registration.description": "Onko rekisteröinti sallittu",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Onko rekisteröinti sallittu",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Salli anonyymit jaot",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Voiko tunnistamattomat käyttäjät luoda jakoja",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Voiko tunnistamattomat käyttäjät luoda jakoja",
|
||||
"admin.config.share.max-expiration": "Max expiration",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.max-size": "Maksimikoko",
|
||||
"admin.config.share.max-size.description": "Jaon enimmäiskoko tavuissa (bytes)",
|
||||
"admin.config.share.max-size.description":
|
||||
"Jaon enimmäiskoko tavuissa (bytes)",
|
||||
"admin.config.share.zip-compression-level": "Zip puristustaso",
|
||||
"admin.config.share.zip-compression-level.description": "Säädä tasoa tiedoston koon ja pakkausnopeuden välillä. Kelvolliset arvot vaihtelevat 0–9, 0 ei puristusta ja 9 on suurin puristusvoima. ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Säädä tasoa tiedoston koon ja pakkausnopeuden välillä. Kelvolliset arvot vaihtelevat 0–9, 0 ei puristusta ja 9 on suurin puristusvoima. ",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "Käytössä",
|
||||
"admin.config.smtp.enabled.description": "Onko SMTP käytössä. Aseta tämä todeksi vain, jos olet syöttänyt SMTP-palvelimen isäntän, portin, sähköpostin, käyttäjän ja salasanan.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Onko SMTP käytössä. Aseta tämä todeksi vain, jos olet syöttänyt SMTP-palvelimen isäntän, portin, sähköpostin, käyttäjän ja salasanan.",
|
||||
"admin.config.smtp.host": "Isäntä",
|
||||
"admin.config.smtp.host.description": "SMTP palvelimen isäntä",
|
||||
"admin.config.smtp.port": "Portti",
|
||||
"admin.config.smtp.port.description": "SMTP palvelimen portti",
|
||||
"admin.config.smtp.email": "Sähköposti",
|
||||
"admin.config.smtp.email.description": "Sähköpostiosoite, josta sähköpostit on lähetetty",
|
||||
"admin.config.smtp.email.description":
|
||||
"Sähköpostiosoite, josta sähköpostit on lähetetty",
|
||||
"admin.config.smtp.username": "Käyttäjätunnus",
|
||||
"admin.config.smtp.username.description": "SMTP palvelimen käyttäjänimi",
|
||||
"admin.config.smtp.password": "Salasana",
|
||||
"admin.config.smtp.password.description": "SMTP palvelimen salasana",
|
||||
"admin.config.smtp.button.test": "Lähetä testisähköposti",
|
||||
"admin.config.oauth.allow-registration": "Allow registration",
|
||||
"admin.config.oauth.allow-registration.description": "Allow users to register via social login",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Allow users to register via social login",
|
||||
"admin.config.oauth.ignore-totp": "Ignore TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description": "Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Whether Google login is enabled",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Whether Google login is enabled",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord limited server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limit signing in to users in a specific server. Leave it blank to disable.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Whether OpenID login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID OAuth app",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Whether OpenID Connect login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "Hups tätä sivua ei ole olemassa.",
|
||||
"404.button.home": "Tuo minut takaisin kotiin",
|
||||
@@ -373,17 +475,27 @@ export default {
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Go back",
|
||||
"error.msg.default": "Something went wrong.",
|
||||
"error.msg.access_denied": "You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token": "The authentication process took too long, please try again.",
|
||||
"error.msg.access_denied":
|
||||
"You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token":
|
||||
"The authentication process took too long, please try again.",
|
||||
"error.msg.invalid_token": "Internal Error",
|
||||
"error.msg.no_user": "User linked to this {0} account doesn't exist.",
|
||||
"error.msg.no_email": "Can't get email address from this {0} account.",
|
||||
"error.msg.already_linked": "This {0} account is already linked to another account.",
|
||||
"error.msg.already_linked":
|
||||
"This {0} account is already linked to another account.",
|
||||
"error.msg.not_linked": "This {0} account haven't linked to any account yet.",
|
||||
"error.msg.unverified_account":
|
||||
"This {0} account is unverified, please try again after verification.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"You are not allowed to sign in.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Can not get your user info from this {0} account.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Tallenna",
|
||||
"common.button.create": "Luo",
|
||||
@@ -396,8 +508,10 @@ export default {
|
||||
"common.button.generate": "Luo",
|
||||
"common.button.done": "Valmis",
|
||||
"common.text.link": "Linkki",
|
||||
"common.text.navigate-to-link": "Go to the link",
|
||||
"common.text.or": "tai",
|
||||
"common.button.go-back": "Takaisin",
|
||||
"common.button.go-home": "Go home",
|
||||
"common.notify.copied": "Linkki kopioitiin leikepöydälle",
|
||||
"common.success": "Suoritettu",
|
||||
"common.error": "Virhe",
|
||||
@@ -407,5 +521,5 @@ export default {
|
||||
"common.error.too-long": "Täytyy olla enintään {length} merkkiä",
|
||||
"common.error.exact-length": "On oltava tarkasti {length} merkkiä pitkä",
|
||||
"common.error.invalid-number": "Pitää olla luku",
|
||||
"common.error.field-required": "Tämä kenttä on pakollinen"
|
||||
};
|
||||
"common.error.field-required": "Tämä kenttä on pakollinen",
|
||||
};
|
||||
|
||||
@@ -12,13 +12,17 @@ export default {
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "Une plateforme de partage de fichier <h>auto-hébergée</h>.",
|
||||
"home.description": "Voulez-vous vraiment remettre vos fichiers personnels dans les mains de tiers comme WeTransfer ?",
|
||||
"home.description":
|
||||
"Voulez-vous vraiment remettre vos fichiers personnels dans les mains de tiers comme WeTransfer ?",
|
||||
"home.bullet.a.name": "Auto-hébergé",
|
||||
"home.bullet.a.description": "Hébergez Pingvin Share sur votre propre machine.",
|
||||
"home.bullet.a.description":
|
||||
"Hébergez Pingvin Share sur votre propre machine.",
|
||||
"home.bullet.b.name": "Confidentialité",
|
||||
"home.bullet.b.description": "Vos fichiers sont vos fichiers et ne devraient jamais être mis entre les mains de tiers.",
|
||||
"home.bullet.b.description":
|
||||
"Vos fichiers sont vos fichiers et ne devraient jamais être mis entre les mains de tiers.",
|
||||
"home.bullet.c.name": "Aucune rébarbative limite de taille",
|
||||
"home.bullet.c.description": "Téléchargez des fichiers aussi volumineux que vous le souhaitez. Seul votre disque dur est la limite.",
|
||||
"home.bullet.c.description":
|
||||
"Téléchargez des fichiers aussi volumineux que vous le souhaitez. Seul votre disque dur est la limite.",
|
||||
"home.button.start": "Commencer",
|
||||
"home.button.source": "Code source",
|
||||
// END /
|
||||
@@ -31,8 +35,10 @@ export default {
|
||||
"signin.input.password": "Mot de passe",
|
||||
"signin.input.password.placeholder": "Votre mot de passe",
|
||||
"signin.button.submit": "Se connecter",
|
||||
"signIn.notify.totp-required.title": "Une authentification à deux facteurs est requise",
|
||||
"signIn.notify.totp-required.description": "Veuillez entrer votre code d'authentification à deux facteurs",
|
||||
"signIn.notify.totp-required.title":
|
||||
"Une authentification à deux facteurs est requise",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Veuillez entrer votre code d'authentification à deux facteurs",
|
||||
"signIn.oauth.or": "OU",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -56,13 +62,16 @@ export default {
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Mot de passe oublié ?",
|
||||
"resetPassword.description": "Saisissez votre courriel pour réinitialiser votre mot de passe.",
|
||||
"resetPassword.notify.success": "Un courriel a été envoyé avec un lien pour réinitialiser votre mot de passe.",
|
||||
"resetPassword.description":
|
||||
"Saisissez votre courriel pour réinitialiser votre mot de passe.",
|
||||
"resetPassword.notify.success":
|
||||
"Un message avec un lien pour réinitialiser votre mot de passe a été envoyé si le courriel existe.",
|
||||
"resetPassword.button.back": "Retour à la page de connexion",
|
||||
"resetPassword.text.resetPassword": "Réinitialiser le mot de passe",
|
||||
"resetPassword.text.enterNewPassword": "Saisissez votre nouveau mot de passe",
|
||||
"resetPassword.input.password": "Nouveau mot de passe",
|
||||
"resetPassword.notify.passwordReset": "Votre mot de passe a bien été réinitialisé.",
|
||||
"resetPassword.notify.passwordReset":
|
||||
"Votre mot de passe a bien été réinitialisé.",
|
||||
// /account
|
||||
"account.title": "Mon compte",
|
||||
"account.card.info.title": "Détails du compte",
|
||||
@@ -72,8 +81,10 @@ export default {
|
||||
"account.card.password.title": "Mot de passe",
|
||||
"account.card.password.old": "Ancien mot de passe",
|
||||
"account.card.password.new": "Nouveau mot de passe",
|
||||
"account.card.password.noPasswordSet": "Vous n’avez pas de mot de passe défini. Si vous voulez vous connecter avec un e-mail et un mot de passe, vous devez définir un mot de passe.",
|
||||
"account.notify.password.success": "Le mot de passe a été modifié avec succès",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Vous n’avez pas de mot de passe défini. Si vous voulez vous connecter avec un e-mail et un mot de passe, vous devez définir un mot de passe.",
|
||||
"account.notify.password.success":
|
||||
"Le mot de passe a été modifié avec succès",
|
||||
"account.card.oauth.title": "Identifiant social",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
@@ -84,23 +95,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Dissocier",
|
||||
"account.card.oauth.unlinked": "Dissocié",
|
||||
"account.modal.unlink.title": "Dissocier le compte",
|
||||
"account.modal.unlink.description": "Dissocier vos comptes de réseaux sociaux peut vous faire perdre votre compte si jamais vous ne vous souvenez pas de votre nom d’utilisateur et de votre mot de passe.",
|
||||
"account.modal.unlink.description":
|
||||
"Dissocier vos comptes de réseaux sociaux peut vous faire perdre votre compte si jamais vous ne vous souvenez pas de votre nom d’utilisateur et de votre mot de passe.",
|
||||
"account.notify.oauth.unlinked.success": "Dissocié avec succès",
|
||||
"account.card.security.title": "Sécurité",
|
||||
"account.card.security.totp.enable.description": "Entrez votre mot de passe actuel pour activer TOTP",
|
||||
"account.card.security.totp.disable.description": "Entrez votre mot de passe actuel pour désactiver TOTP",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Entrez votre mot de passe actuel pour activer TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Entrez votre mot de passe actuel pour désactiver TOTP",
|
||||
"account.card.security.totp.button.start": "Démarrer",
|
||||
"account.modal.totp.title": "Activer TOTP",
|
||||
"account.modal.totp.step1": "Étape 1 : Ajouter votre authentificateur",
|
||||
"account.modal.totp.step2": "Étape 2 : Valider votre code",
|
||||
"account.modal.totp.enterManually": "Saisir manuellement",
|
||||
"account.modal.totp.code": "Code",
|
||||
"account.modal.totp.clickToCopy": "Cliquez pour copier",
|
||||
"common.button.clickToCopy": "Cliquez pour copier",
|
||||
"account.modal.totp.verify": "Vérifier",
|
||||
"account.notify.totp.disable": "TOTP désactivé avec succès",
|
||||
"account.notify.totp.enable": "TOTP activé avec succès",
|
||||
"account.card.language.title": "Langue",
|
||||
"account.card.language.description": "Le projet est traduit par la communauté. Certaines traductions peuvent être incomplètes.",
|
||||
"account.card.language.description":
|
||||
"Le projet est traduit par la communauté. Certaines traductions peuvent être incomplètes.",
|
||||
"account.card.color.title": "Thème de couleurs",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Sombre",
|
||||
@@ -108,7 +123,8 @@ export default {
|
||||
"account.theme.system": "Système",
|
||||
"account.button.delete": "Supprimer le compte",
|
||||
"account.modal.delete.title": "Supprimer le compte",
|
||||
"account.modal.delete.description": "Voulez-vous vraiment supprimer votre compte, y compris tous vos partages actifs ?",
|
||||
"account.modal.delete.description":
|
||||
"Voulez-vous vraiment supprimer votre compte, y compris tous vos partages actifs ?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Mes partages",
|
||||
@@ -126,13 +142,16 @@ export default {
|
||||
"account.shares.modal.share-informations": "Détails du partage",
|
||||
"account.shares.modal.share-link": "Lien de partage",
|
||||
"account.shares.modal.delete.title": "Supprimer le partage {share}",
|
||||
"account.shares.modal.delete.description": "Voulez-vous vraiment supprimer ce partage ?",
|
||||
"account.shares.modal.delete.description":
|
||||
"Voulez-vous vraiment supprimer ce partage ?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Partages inversés",
|
||||
"account.reverseShares.description": "Un partage inversé vous permet de générer une URL unique qui permet à des utilisateurs externes de créer un partage.",
|
||||
"account.reverseShares.description":
|
||||
"Un partage inversé vous permet de générer une URL unique qui permet à des utilisateurs externes de créer un partage.",
|
||||
"account.reverseShares.title.empty": "C’est plutôt vide 👀",
|
||||
"account.reverseShares.description.empty": "Vous n’avez aucun partage inversé.",
|
||||
"account.reverseShares.description.empty":
|
||||
"Vous n’avez aucun partage inversé.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Créer un partage inversé",
|
||||
"account.reverseShares.modal.expiration.label": "Expiration",
|
||||
@@ -149,12 +168,16 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-singular": "An",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Ans",
|
||||
"account.reverseShares.modal.max-size.label": "Taille maximale du partage",
|
||||
"account.reverseShares.modal.send-email": "Envoyer un courriel de notification",
|
||||
"account.reverseShares.modal.send-email.description": "Envoyer une notification par courriel lorsqu'un partage est créé depuis ce partage inversé.",
|
||||
"account.reverseShares.modal.send-email":
|
||||
"Envoyer un courriel de notification",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Envoyer une notification par courriel lorsqu'un partage est créé depuis ce partage inversé.",
|
||||
"account.reverseShares.modal.max-use.label": "Nombre d'utilisation max",
|
||||
"account.reverseShares.modal.max-use.description": "Le nombre maximal de fois que cette URL peut être utilisée pour créer un partage.",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Le nombre maximal de fois que cette URL peut être utilisée pour créer un partage.",
|
||||
"account.reverseShare.never-expires": "Ce partage inversé n'expirera jamais.",
|
||||
"account.reverseShare.expires-on": "Ce partage inversé expirera le {expiration}.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Ce partage inversé expirera le {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Aucun partage créé pour le moment",
|
||||
"account.reverseShares.table.count.singular": "partage",
|
||||
"account.reverseShares.table.count.plural": "partages",
|
||||
@@ -164,11 +187,13 @@ export default {
|
||||
"account.reverseShares.table.expires": "Expire le",
|
||||
"account.reverseShares.modal.reverse-share-link": "Lien du partage inversé",
|
||||
"account.reverseShares.modal.delete.title": "Supprimer le partage inversé",
|
||||
"account.reverseShares.modal.delete.description": "Voulez-vous vraiment supprimer ce partage inversé ? Si vous le faites, les partages qu’il contient seront également supprimés.",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Voulez-vous vraiment supprimer ce partage inversé ? Si vous le faites, les partages qu’il contient seront également supprimés.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Administration",
|
||||
"admin.button.users": "Gestion des utilisateurs",
|
||||
"admin.button.shares": "Gestion des partages",
|
||||
"admin.button.config": "Paramètres",
|
||||
"admin.version": "Version",
|
||||
// END /admin
|
||||
@@ -181,40 +206,63 @@ export default {
|
||||
"admin.users.edit.update.admin-privileges": "Privilèges d’admin",
|
||||
"admin.users.edit.update.change-password.title": "Changer le mot de passe",
|
||||
"admin.users.edit.update.change-password.field": "Nouveau mot de passe",
|
||||
"admin.users.edit.update.change-password.button": "Enregistrer le nouveau mot de passe",
|
||||
"admin.users.edit.update.notify.password.success": "Le mot de passe a été modifié",
|
||||
"admin.users.edit.update.change-password.button":
|
||||
"Enregistrer le nouveau mot de passe",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Le mot de passe a été modifié",
|
||||
"admin.users.edit.delete.title": "Supprimer l'utilisateur {username}",
|
||||
"admin.users.edit.delete.description": "Voulez-vous vraiment supprimer cet utilisateur et toutes ses partages ?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Voulez-vous vraiment supprimer cet utilisateur et toutes ses partages ?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Créer un utilisateur",
|
||||
"admin.users.modal.create.username": "Surnom",
|
||||
"admin.users.modal.create.email": "Courriel",
|
||||
"admin.users.modal.create.password": "Mot de passe",
|
||||
"admin.users.modal.create.manual-password": "Définir le mot de passe manuellement",
|
||||
"admin.users.modal.create.manual-password.description": "S’il n'est pas coché, l’utilisateur recevra un email avec un lien pour définir son mot de passe.",
|
||||
"admin.users.modal.create.manual-password":
|
||||
"Définir le mot de passe manuellement",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"S’il n'est pas coché, l’utilisateur recevra un email avec un lien pour définir son mot de passe.",
|
||||
"admin.users.modal.create.admin": "Privilèges d’admin",
|
||||
"admin.users.modal.create.admin.description": "Si coché, l’utilisateur pourra accéder au panneau d'administration.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Si coché, l’utilisateur pourra accéder au panneau d'administration.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Gestion des partages",
|
||||
"admin.shares.table.id": "ID de partage",
|
||||
"admin.shares.table.username": "Créateur",
|
||||
"admin.shares.table.visitors": "Visiteurs",
|
||||
"admin.shares.table.expires": "Expire le",
|
||||
"admin.shares.edit.delete.title": "Supprimer le partage {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Voulez-vous vraiment supprimer ce partage ?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Envoyer",
|
||||
"upload.notify.generic-error": "Une erreur est survenue durant le traitement de votre partage.",
|
||||
"upload.notify.count-failed": "{count} fichier(s) n’a(ont) pas pu être envoyé(s). Veuillez réessayer.",
|
||||
"upload.notify.generic-error":
|
||||
"Une erreur est survenue durant le traitement de votre partage.",
|
||||
"upload.notify.count-failed":
|
||||
"{count} fichier(s) n’a(ont) pas pu être envoyé(s). Veuillez réessayer.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Téléverser des fichiers",
|
||||
"upload.dropzone.description": "Glissez-déposez des fichiers ici pour commencer votre partage. Ils ne peuvent avoir une taille supérieur à {maxSize} au total.",
|
||||
"upload.dropzone.notify.file-too-big": "Vos fichiers dépassent la taille maximale de {maxSize}.",
|
||||
"upload.dropzone.description":
|
||||
"Glissez-déposez des fichiers ici pour commencer votre partage. Ils ne peuvent avoir une taille supérieure à {maxSize} au total.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Vos fichiers dépassent la taille maximale de {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Nom",
|
||||
"upload.filelist.size": "Taille",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Créer un partage",
|
||||
"upload.modal.link.error.invalid": "Ne peut contenir que des lettres, des chiffres, des tirets bas et des traits d'union",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Ne peut contenir que des lettres, des chiffres, des tirets bas et des traits d'union",
|
||||
"upload.modal.link.error.taken": "Ce lien est déjà utilisé",
|
||||
"upload.modal.not-signed-in": "Vous n'êtes pas connecté",
|
||||
"upload.modal.not-signed-in-description": "Vous ne pourrez pas supprimer votre partage manuellement et afficher le nombre de visiteurs.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Vous ne pourrez pas supprimer votre partage manuellement et afficher le nombre de visiteurs.",
|
||||
"upload.modal.expires.never": "jamais",
|
||||
"upload.modal.expires.never-long": "N’expire jamais",
|
||||
"upload.modal.expires.error.too-long": "L’expiration dépasse la date d'expiration du {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"L’expiration dépasse la date d'expiration du {max}.",
|
||||
"upload.modal.link.label": "Lien",
|
||||
"upload.modal.expires.label": "Expiration",
|
||||
"upload.modal.expires.minute-singular": "Minute",
|
||||
@@ -229,13 +277,17 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Mois",
|
||||
"upload.modal.expires.year-singular": "An",
|
||||
"upload.modal.expires.year-plural": "Ans",
|
||||
"upload.modal.accordion.description.title": "Description",
|
||||
"upload.modal.accordion.description.placeholder": "Note pour les destinataires de ce partage",
|
||||
"upload.modal.accordion.name-and-description.title": "Nom et description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Nom",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note pour les destinataires de ce partage",
|
||||
"upload.modal.accordion.email.title": "Adresse courriel des destinataires",
|
||||
"upload.modal.accordion.email.placeholder": "Saisir les destinataires de ce partage",
|
||||
"upload.modal.accordion.email.placeholder":
|
||||
"Saisir les destinataires de ce partage",
|
||||
"upload.modal.accordion.email.invalid-email": "Courriel invalide",
|
||||
"upload.modal.accordion.security.title": "Options de sécurité",
|
||||
"upload.modal.accordion.security.password.label": "Protection par mot de passe",
|
||||
"upload.modal.accordion.security.password.label":
|
||||
"Protection par mot de passe",
|
||||
"upload.modal.accordion.security.password.placeholder": "Aucun mot de passe",
|
||||
"upload.modal.accordion.security.max-views.label": "Nombre de vues maximum",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Aucune limite",
|
||||
@@ -248,26 +300,32 @@ export default {
|
||||
"share.title": "Partage {shareId}",
|
||||
"share.description": "Regardez ce que j’ai partagé !",
|
||||
"share.error.visitor-limit-exceeded.title": "Limite de visiteurs dépassée",
|
||||
"share.error.visitor-limit-exceeded.description": "La limite de visiteurs de ce partage a été dépassée.",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"La limite de visiteurs de ce partage a été dépassée.",
|
||||
"share.error.removed.title": "Partage supprimé",
|
||||
"share.error.not-found.title": "Partage introuvable",
|
||||
"share.error.not-found.description": "Le partage que vous cherchez n’existe pas.",
|
||||
"share.error.not-found.description":
|
||||
"Le partage que vous cherchez n’existe pas.",
|
||||
"share.modal.password.title": "Mot de passe requis",
|
||||
"share.modal.password.description": "Pour accéder à ce partage, veuillez entrer le mot de passe du partage.",
|
||||
"share.modal.password.description":
|
||||
"Pour accéder à ce partage, veuillez entrer le mot de passe du partage.",
|
||||
"share.modal.password": "Mot de passe",
|
||||
"share.modal.error.invalid-password": "Mot de passe incorrect",
|
||||
"share.button.download-all": "Télécharger tout",
|
||||
"share.notify.download-all-preparing": "Le partage est en préparation. Réessayez dans quelques minutes.",
|
||||
"share.notify.download-all-preparing":
|
||||
"Le partage est en préparation. Réessayez dans quelques minutes.",
|
||||
"share.modal.file-link": "Lien du fichier",
|
||||
"share.table.name": "Nom",
|
||||
"share.table.size": "Taille",
|
||||
"share.modal.file-preview.error.not-supported.title": "Aperçu non supporté",
|
||||
"share.modal.file-preview.error.not-supported.description": "Un aperçu pour ce type de fichier n'est pas pris en charge. Veuillez télécharger le fichier pour le voir.",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"Un aperçu de ce type de fichier n'est pas pris en charge. Veuillez télécharger le fichier pour le visualiser.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Modifier {shareId}",
|
||||
"share.edit.append-upload": "Ajouter un fichier",
|
||||
"share.edit.notify.generic-error": "Une erreur est survenue durant le traitement de votre partage.",
|
||||
"share.edit.notify.generic-error":
|
||||
"Une erreur est survenue durant le traitement de votre partage.",
|
||||
"share.edit.notify.save-success": "Partage mis à jour avec succès",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,91 +338,143 @@ export default {
|
||||
"admin.config.general.app-name": "Nom de l’appli",
|
||||
"admin.config.general.app-name.description": "Le nom de l’application",
|
||||
"admin.config.general.app-url": "URL de l’appli",
|
||||
"admin.config.general.app-url.description": "Depuis quel URL le partage Pingvin est disponible",
|
||||
"admin.config.general.app-url.description":
|
||||
"Depuis quel URL le partage Pingvin est disponible",
|
||||
"admin.config.general.show-home-page": "Afficher la page d’accueil",
|
||||
"admin.config.general.show-home-page.description": "Afficher ou non la page d’accueil",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Afficher ou non la page d’accueil",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Changez de logo en envoyant une nouvelle image. L’image doit être au format PNG et doit avoir un ratio 1:1.",
|
||||
"admin.config.general.logo.description":
|
||||
"Changez de logo en envoyant une nouvelle image. L’image doit être au format PNG et doit avoir un ratio 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Sélectionner une image",
|
||||
"admin.config.email.enable-share-email-recipients": "Autoriser le partage par courriel",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Permet d'envoyer le lien du partage par courriel. N'activez cette option que si vous avez activé SMTP.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Autoriser le partage par courriel",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Permet d'envoyer le lien du partage par courriel. N'activez cette option que si vous avez activé SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Sujet d’un partage",
|
||||
"admin.config.email.share-recipients-subject.description": "Intitulé du courriel envoyé aux destinataires d’un partage.",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Intitulé du courriel envoyé aux destinataires d’un partage.",
|
||||
"admin.config.email.share-recipients-message": "Message d’un partage",
|
||||
"admin.config.email.share-recipients-message.description": "Contenu du courriel qui est envoyé aux destinataires du partage. Variables possibles :\n• {creator} : Le pseudo de l’auteur du partage\n• {shareUrl} : L’URL du partage\n• {desc} : La description du partage\n• {expires} : La date d'expiration du partage\nLes variables seront remplacées par leur valeur réelle.",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Contenu du courriel qui est envoyé aux destinataires du partage. Variables possibles :\n• {creator} : Le pseudo de l’auteur du partage\n• {shareUrl} : L’URL du partage\n• {desc} : La description du partage\n• {expires} : La date d'expiration du partage\nLes variables seront remplacées par leur valeur réelle.",
|
||||
"admin.config.email.reverse-share-subject": "Sujet d’un partage inversé",
|
||||
"admin.config.email.reverse-share-subject.description": "Intitulé du courriel envoyé lorsque quelqu’un a partagé des fichiers depuis votre partage inversé.",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Intitulé du courriel envoyé lorsque quelqu’un a partagé des fichiers depuis votre partage inversé.",
|
||||
"admin.config.email.reverse-share-message": "Message d’un partage inversé",
|
||||
"admin.config.email.reverse-share-message.description": "Contenu du courriel envoyé lorsque quelqu’un partage des fichiers depuis votre partage inversé. {shareUrl} sera remplacé par le nom du créateur et l’URL de partage.",
|
||||
"admin.config.email.reset-password-subject": "Sujet d’une réinitialisation du mot de passe",
|
||||
"admin.config.email.reset-password-subject.description": "Intitulé du courriel envoyé lorsqu’un utilisateur demande une réinitialisation de son mot de passe.",
|
||||
"admin.config.email.reset-password-message": "Message de réinitialisation du mot de passe",
|
||||
"admin.config.email.reset-password-message.description": "Contenu du courriel envoyé lorsqu’un utilisateur demande à réinitialiser son mot de passe. {url} sera remplacé par l’URL de réinitialisation du mot de passe.",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Contenu du courriel envoyé lorsque quelqu’un partage des fichiers depuis votre partage inversé. {shareUrl} sera remplacé par le nom du créateur et l’URL de partage.",
|
||||
"admin.config.email.reset-password-subject":
|
||||
"Sujet d’une réinitialisation du mot de passe",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Intitulé du courriel envoyé lorsqu’un utilisateur demande une réinitialisation de son mot de passe.",
|
||||
"admin.config.email.reset-password-message":
|
||||
"Message de réinitialisation du mot de passe",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Contenu du courriel envoyé lorsqu’un utilisateur demande à réinitialiser son mot de passe. {url} sera remplacé par l’URL de réinitialisation du mot de passe.",
|
||||
"admin.config.email.invite-subject": "Sujet d’une invitation",
|
||||
"admin.config.email.invite-subject.description": "Intitulé du courriel envoyé lorsqu’un administrateur invite un utilisateur.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Intitulé du courriel envoyé lorsqu’un administrateur invite un utilisateur.",
|
||||
"admin.config.email.invite-message": "Message d’une invitation",
|
||||
"admin.config.email.invite-message.description": "Contenu du courriel envoyé lorsqu’un administrateur invite un utilisateur. {url} sera remplacé par l’URL d'invitation et {password} par le mot de passe.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Contenu du courriel envoyé lorsqu’un administrateur invite un utilisateur. {url} sera remplacé par l’URL d'invitation et {password} par le mot de passe.",
|
||||
"admin.config.share.allow-registration": "Autoriser les inscriptions",
|
||||
"admin.config.share.allow-registration.description": "Permet aux visiteurs de créer un compte.",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Autoriser les partages anonymes",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Permet aux visiteurs de créer des partages",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Permet aux visiteurs de créer un compte.",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Autoriser les partages anonymes",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Permet aux visiteurs de créer des partages",
|
||||
"admin.config.share.max-expiration": "Échéance",
|
||||
"admin.config.share.max-expiration.description": "Échéance du partage en heures. Indiquez 0 pour qu’il n’expire jamais.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Échéance du partage en heures. Indiquez 0 pour qu’il n’expire jamais.",
|
||||
"admin.config.share.max-size": "Taille max",
|
||||
"admin.config.share.max-size.description": "Taille maximale du partage en octets",
|
||||
"admin.config.share.max-size.description":
|
||||
"Taille maximale du partage en octets",
|
||||
"admin.config.share.zip-compression-level": "Niveau de compression",
|
||||
"admin.config.share.zip-compression-level.description": "Ajustez le niveau pour trouver l'équilibre entre la taille du fichier et la vitesse de compression. Les valeurs valides vont de 0 à 9, 0 étant sans compression et 9 étant la compression maximale. ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Ajustez le niveau pour trouver l'équilibre entre la taille du fichier et la vitesse de compression. Les valeurs valides vont de 0 à 9, 0 étant sans compression et 9 étant la compression maximale. ",
|
||||
"admin.config.share.chunk-size": "Taille des tronçons",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Ajustez la taille des tronçons (en octets) pour que vos téléchargements équilibrent efficacité et fiabilité en fonction de votre connexion Internet. Les petits tronçons peuvent améliorer les taux de succès sur les connexions instables, tandis que les tronçons plus importants accélèrent les téléchargements sur les connexions stables.",
|
||||
"admin.config.smtp.enabled": "Activer",
|
||||
"admin.config.smtp.enabled.description": "Active SMTP. Activez ceci uniquement si vous avez saisi l’hôte, le port, le courriel, l’utilisateur et son mot de passe, de votre serveur SMTP.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Active SMTP. Activez ceci uniquement si vous avez saisi l’hôte, le port, le courriel, l’utilisateur et son mot de passe, de votre serveur SMTP.",
|
||||
"admin.config.smtp.host": "Hôte",
|
||||
"admin.config.smtp.host.description": "Nom du serveur SMTP",
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "Port du serveur SMTP",
|
||||
"admin.config.smtp.email": "Courriel",
|
||||
"admin.config.smtp.email.description": "Adresse à partir de laquelle les courriels sont envoyés",
|
||||
"admin.config.smtp.email.description":
|
||||
"Adresse à partir de laquelle les courriels sont envoyés",
|
||||
"admin.config.smtp.username": "Nom d’utilisateur",
|
||||
"admin.config.smtp.username.description": "Nom d’utilisateur du serveur SMTP",
|
||||
"admin.config.smtp.password": "Mot de passe",
|
||||
"admin.config.smtp.password.description": "Mot de passe du serveur SMTP",
|
||||
"admin.config.smtp.button.test": "Envoyer un courriel de test",
|
||||
"admin.config.oauth.allow-registration": "Autoriser l’inscription",
|
||||
"admin.config.oauth.allow-registration.description": "Permettre aux utilisateurs de s’inscrire via leur identifiant social",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Permettre aux utilisateurs de s’inscrire via leur identifiant social",
|
||||
"admin.config.oauth.ignore-totp": "Ignorer TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Ignorer le TOTP lorsque l’utilisateur utilise un identifiant social.",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Ignorer le TOTP lorsque l’utilisateur utilise un identifiant social.",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Permettre la connexion via GitHub.",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Permettre la connexion via GitHub.",
|
||||
"admin.config.oauth.github-client-id": "ID client de GitHub",
|
||||
"admin.config.oauth.github-client-id.description": "L’ID du client de l’application OAuth GitHub",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"L’ID du client de l’application OAuth GitHub",
|
||||
"admin.config.oauth.github-client-secret": "Secret du client GitHub",
|
||||
"admin.config.oauth.github-client-secret.description": "Le secret du client de l’application OAuth GitHub",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Le secret du client de l’application OAuth GitHub",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Permettre la connexion via Google.",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Permettre la connexion via Google.",
|
||||
"admin.config.oauth.google-client-id": "ID du client Google",
|
||||
"admin.config.oauth.google-client-id.description": "L’ID du client de l’application OAuth Google",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"L’ID du client de l’application OAuth Google",
|
||||
"admin.config.oauth.google-client-secret": "Secret client de Google",
|
||||
"admin.config.oauth.google-client-secret.description": "Le secret du client de l’application OAuth Google",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Le secret du client de l’application OAuth Google",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Permettre la connexion via Microsoft.",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Permettre la connexion via Microsoft.",
|
||||
"admin.config.oauth.microsoft-tenant": "Locataire Microsoft",
|
||||
"admin.config.oauth.microsoft-tenant.description": "ID locataire de l'application OAuth Microsoft\nCommun : les utilisateurs ayant au choix un compte personnel ou d’entreprise issue de Microsoft Entra.\nOrganisations : limité aux utilisateurs ayant un compte d’entreprise ou d’université issue de Microsoft Entra.\nPersonnel : limité aux utilisateurs ayant un compte personnel\nDomanial : limité aux utilisateurs d'un domaine Microsoft Entra spécifié ou d’un ID locataire (au format GUID), qu’ils soient membres d’un registre d’entreprise ou d’université ou bien enregistrés en tant qu’invités avec un compte personnel.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"ID locataire de l'application OAuth Microsoft\nCommun : les utilisateurs ayant au choix un compte personnel ou d’entreprise issue de Microsoft Entra.\nOrganisations : limité aux utilisateurs ayant un compte d’entreprise ou d’université issue de Microsoft Entra.\nPersonnel : limité aux utilisateurs ayant un compte personnel\nDomanial : limité aux utilisateurs d'un domaine Microsoft Entra spécifié ou d’un ID locataire (au format GUID), qu’ils soient membres d’un registre d’entreprise ou d’université ou bien enregistrés en tant qu’invités avec un compte personnel.",
|
||||
"admin.config.oauth.microsoft-client-id": "ID du client Microsoft",
|
||||
"admin.config.oauth.microsoft-client-id.description": "L’ID du client de l’application Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"L’ID du client de l’application Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret": "Secret du client Microsoft",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Le secret du client de l’application Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Le secret du client de l’application Microsoft OAuth",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Permettre la connexion via Discord.",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Permettre la connexion via Discord.",
|
||||
"admin.config.oauth.discord-limited-guild": "ID de serveur restreint Discord",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limiter la connexion aux utilisateurs sur un serveur spécifique. Laissez vide pour désactiver.",
|
||||
"admin.config.oauth.discord-client-id": "ID du client Discord",
|
||||
"admin.config.oauth.discord-client-id.description": "L’ID du client de l’application OAuth Discord",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"L’ID du client de l’application OAuth Discord",
|
||||
"admin.config.oauth.discord-client-secret": "Secret du client Discord",
|
||||
"admin.config.oauth.discord-client-secret.description": "Le secret du client de l’application OAuth Discord",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Permettre la connexion via OpenID.",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Le secret du client de l’application OAuth Discord",
|
||||
"admin.config.oauth.oidc-enabled": "Connexion OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Permettre la connexion via OpenID",
|
||||
"admin.config.oauth.oidc-discovery-uri": "URI de découverte OpenID",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "URI de découverte de l’application OpenID OAuth",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"L’URI de découverte de la connexion à l'application OpenID OAuth",
|
||||
"admin.config.oauth.oidc-username-claim":
|
||||
"Revendication du nom d’utilisateur OpenID",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Le champ contenant la revendication du nom d’utilisateur dans le jeton OpenID Connect. Laissez vide si vous ne savez pas quoi indiquer.",
|
||||
"admin.config.oauth.oidc-client-id": "ID du client OpenID",
|
||||
"admin.config.oauth.oidc-client-id.description": "L’ID du client de l’application OAuth OpenID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"L’ID du client de l’application OAuth OpenID Connect",
|
||||
"admin.config.oauth.oidc-client-secret": "Secret du client OpenID",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Le secret du client de l’application OAuth OpenID",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Le secret du client de l’application OAuth OpenID Connect",
|
||||
// 404
|
||||
"404.description": "Désolé, mais cette page n’existe pas.",
|
||||
"404.button.home": "Retour à l’accueil",
|
||||
@@ -373,17 +483,27 @@ export default {
|
||||
"error.description": "Oups !",
|
||||
"error.button.back": "Retour",
|
||||
"error.msg.default": "Quelque chose a mal tourné.",
|
||||
"error.msg.access_denied": "Vous avez annulé le processus d’authentification, veuillez réessayer.",
|
||||
"error.msg.expired_token": "Le processus d’authentification a pris trop de temps, veuillez réessayer.",
|
||||
"error.msg.access_denied":
|
||||
"Vous avez annulé le processus d’authentification, veuillez réessayer.",
|
||||
"error.msg.expired_token":
|
||||
"Le processus d’authentification a pris trop de temps, veuillez réessayer.",
|
||||
"error.msg.invalid_token": "Erreur Interne",
|
||||
"error.msg.no_user": "L’utilisateur associé au compte {0} n’existe pas.",
|
||||
"error.msg.no_email": "Impossible d’obtenir le courriel du compte {0}.",
|
||||
"error.msg.already_linked": "Le compte {0} est déjà associé à un autre compte.",
|
||||
"error.msg.already_linked":
|
||||
"Le compte {0} est déjà associé à un autre compte.",
|
||||
"error.msg.not_linked": "Le compte {0} n’est pas encore associé à compte.",
|
||||
"error.msg.unverified_account":
|
||||
"Le compte {0} n'est pas vérifié, veuillez réessayer après vérification.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"Vous n’êtes pas autorisé à vous authentifier.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Impossible d’obtenir vos informations utilisateur à partir du compte {0}.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "Connexion OpenID",
|
||||
// Common translations
|
||||
"common.button.save": "Sauvegarder",
|
||||
"common.button.create": "Créer",
|
||||
@@ -396,8 +516,10 @@ export default {
|
||||
"common.button.generate": "Générer",
|
||||
"common.button.done": "Terminer",
|
||||
"common.text.link": "Lien",
|
||||
"common.text.navigate-to-link": "Accéder au lien",
|
||||
"common.text.or": "ou",
|
||||
"common.button.go-back": "Précédent",
|
||||
"common.button.go-home": "Accueil",
|
||||
"common.notify.copied": "Votre lien a été copié dans le presse-papiers",
|
||||
"common.success": "Opération réussie",
|
||||
"common.error": "Erreur",
|
||||
@@ -407,5 +529,5 @@ export default {
|
||||
"common.error.too-long": "Doit comporter au plus {length} caractères",
|
||||
"common.error.exact-length": "Doit comporter exactement {length} caractères",
|
||||
"common.error.invalid-number": "Doit être un nombre",
|
||||
"common.error.field-required": "Ce champ est obligatoire"
|
||||
};
|
||||
"common.error.field-required": "Ce champ est obligatoire",
|
||||
};
|
||||
|
||||
529
frontend/src/i18n/translations/hu-HU.ts
Normal file
529
frontend/src/i18n/translations/hu-HU.ts
Normal file
@@ -0,0 +1,529 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "Feltöltés",
|
||||
"navbar.signin": "Bejelentkezés",
|
||||
"navbar.home": "Home",
|
||||
"navbar.signup": "Feliratkozás",
|
||||
"navbar.links.shares": "Megosztásaim",
|
||||
"navbar.links.reverse": "Fordított megosztások",
|
||||
"navbar.avatar.account": "Fiókom",
|
||||
"navbar.avatar.admin": "Admin ügyek",
|
||||
"navbar.avatar.signout": "Kijelentkezés",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "<h>Saját üzemeltetésű</h> fájl megosztó platform.",
|
||||
"home.description":
|
||||
"Valóban hozzáférhetővé akarja tenni fájljait a WeTransfer és más hasonló harmadik felek számára?",
|
||||
"home.bullet.a.name": "Saját üzemeltetés",
|
||||
"home.bullet.a.description":
|
||||
"A Pingvin Share megosztót saját gépéről futtathatja.",
|
||||
"home.bullet.b.name": "Adatvédelem",
|
||||
"home.bullet.b.description":
|
||||
"A saját fájlok személyesek és semmi keresnivalójuk harmadik feleknél.",
|
||||
"home.bullet.c.name": "Nincs bosszantó fájl méretkorlát",
|
||||
"home.bullet.c.description":
|
||||
"Akkora fájlokat oszt meg, amekkorákat csak akar. Határt csak a lemezterület szab.",
|
||||
"home.button.start": "Nosza, kezdjük",
|
||||
"home.button.source": "Forráskód",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "Üdv ismét itt",
|
||||
"signin.description": "Nincsen még fiókja?",
|
||||
"signin.button.signup": "Feliratkozás",
|
||||
"signin.input.email-or-username": "Email vagy felhasználónév",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"Az Ön emailcíme vagy felhasználóneve",
|
||||
"signin.input.password": "Jelszó",
|
||||
"signin.input.password.placeholder": "Az Ön jelszava",
|
||||
"signin.button.submit": "Bejelentkezés",
|
||||
"signIn.notify.totp-required.title": "Kétfaktoros hitelesítésre van szükség",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Adja meg a másik úton kapott kódját",
|
||||
"signIn.oauth.or": "VAGY",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
"signIn.oauth.discord": "Discord",
|
||||
"signIn.oauth.oidc": "OpenID",
|
||||
// END /auth/signin
|
||||
// /auth/signup
|
||||
"signup.title": "Fiók létrehozása",
|
||||
"signup.description": "Már van fiókja?",
|
||||
"signup.button.signin": "Bejelentkezés",
|
||||
"signup.input.username": "Felhasználónév",
|
||||
"signup.input.username.placeholder": "Az Ön felhasználói neve",
|
||||
"signup.input.email": "Email",
|
||||
"signup.input.email.placeholder": "Az Ön emailcíme",
|
||||
"signup.button.submit": "Kezdhetjük",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "TOTP hitelesítés",
|
||||
"totp.button.signIn": "Bejelentkezés",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Elfelejtette jelszavát?",
|
||||
"resetPassword.description":
|
||||
"Adja meg emailcímét a jelszó alaphelyzetbe állításához.",
|
||||
"resetPassword.notify.success":
|
||||
"A jelszó visszaállítására szolgáló linket tartalmazó üzenetet küldtünk, ha az e-mail létezik.",
|
||||
"resetPassword.button.back": "Vissza a bejelentkezési oldalra",
|
||||
"resetPassword.text.resetPassword": "Jelszó alaphelyzetbe állítása",
|
||||
"resetPassword.text.enterNewPassword": "Adja meg új jelszavát",
|
||||
"resetPassword.input.password": "Új jelszó",
|
||||
"resetPassword.notify.passwordReset": "Sikeresen megadta az új jelszót.",
|
||||
// /account
|
||||
"account.title": "Fiókom",
|
||||
"account.card.info.title": "Fiókinformáció",
|
||||
"account.card.info.username": "Felhasználónév",
|
||||
"account.card.info.email": "Email",
|
||||
"account.notify.info.success": "A fiók sikeresen frissítésre került",
|
||||
"account.card.password.title": "Jelszó",
|
||||
"account.card.password.old": "Régi jelszó",
|
||||
"account.card.password.new": "Új jelszó",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Még nincs jelszava. Ha email és jelszó kombinációval kíván bejelentkezni, létre kell hoznia egy jelszót.",
|
||||
"account.notify.password.success": "A jelszó sikeresen frissítésre került",
|
||||
"account.card.oauth.title": "Közösségi bejelentkezés",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "Összekapcsolás",
|
||||
"account.card.oauth.unlink": "Leválasztás",
|
||||
"account.card.oauth.unlinked": "Leválasztva",
|
||||
"account.modal.unlink.title": "Fiók leválasztása",
|
||||
"account.modal.unlink.description":
|
||||
"A közösségi hálón keresztül csatolt fiók leválasztásával elveszítheti hozzáférését a fiókhoz, ha a név és jelszó kombinációra nem emlékszik.",
|
||||
"account.notify.oauth.unlinked.success": "Leválasztás sikeres",
|
||||
"account.card.security.title": "Biztonság",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Adja meg az aktuális jelszavát a TOTP engedélyezéséhez",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Adja meg aktuális jelszavát a TOTP letiltásához",
|
||||
"account.card.security.totp.button.start": "Kezdés",
|
||||
"account.modal.totp.title": "TOTP engedélyezése",
|
||||
"account.modal.totp.step1": "1. lépés: Hitelesítő megadása",
|
||||
"account.modal.totp.step2": "2. lépés: Kód érvényesítése",
|
||||
"account.modal.totp.enterManually": "Kézi megadás",
|
||||
"account.modal.totp.code": "Kód",
|
||||
"common.button.clickToCopy": "Kattintson a másoláshoz",
|
||||
"account.modal.totp.verify": "Hitelesítés",
|
||||
"account.notify.totp.disable": "TOTP sikeresen letiltva",
|
||||
"account.notify.totp.enable": "TOTP sikeresen engedélyezve",
|
||||
"account.card.language.title": "Nyelv",
|
||||
"account.card.language.description":
|
||||
"A projekt nyelvi verzióit a közösség fordítja. Egyes nyelvi verziók nem feltétlenül teljesek.",
|
||||
"account.card.color.title": "Színséma",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Sötét",
|
||||
"account.theme.light": "Világos",
|
||||
"account.theme.system": "Rendszer",
|
||||
"account.button.delete": "Fiók törlése",
|
||||
"account.modal.delete.title": "Fiók törlése",
|
||||
"account.modal.delete.description":
|
||||
"Valóban törölni kívánja a fiókot és vele az összes meglévő aktív megosztást?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Megosztásaim",
|
||||
"account.shares.title.empty": "Üres 👀, itt nincs semmi",
|
||||
"account.shares.description.empty": "Nincsenek megosztások.",
|
||||
"account.shares.button.create": "Létrehozás",
|
||||
"account.shares.info.title": "Megosztás adatai",
|
||||
"account.shares.table.id": "ID",
|
||||
"account.shares.table.name": "Megnevezés",
|
||||
"account.shares.table.description": "Leírás",
|
||||
"account.shares.table.visitors": "Látogatók",
|
||||
"account.shares.table.expiresAt": "Lejárat",
|
||||
"account.shares.table.createdAt": "Létrehozás időpontja",
|
||||
"account.shares.table.size": "Méret",
|
||||
"account.shares.modal.share-informations": "Megosztás adatai",
|
||||
"account.shares.modal.share-link": "Hivatkozás",
|
||||
"account.shares.modal.delete.title": "Törlés: {share}",
|
||||
"account.shares.modal.delete.description":
|
||||
"Biztos abban, hogy törölni kívánja ezt a megosztást?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Fordított megosztás",
|
||||
"account.reverseShares.description":
|
||||
"A fordított megosztással egy egyedi URL azonosító készül, amivel a rendszeren kívülről készíthető megosztás.",
|
||||
"account.reverseShares.title.empty": "Üres 👀, itt nincs semmi",
|
||||
"account.reverseShares.description.empty": "Nincsenek fordított megosztások.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Fordított megosztás létrehozása",
|
||||
"account.reverseShares.modal.expiration.label": "Lejárat",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "perc",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "perc",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "óra",
|
||||
"account.reverseShares.modal.expiration.hour-plural": "óra",
|
||||
"account.reverseShares.modal.expiration.day-singular": "nap",
|
||||
"account.reverseShares.modal.expiration.day-plural": "nap",
|
||||
"account.reverseShares.modal.expiration.week-singular": "hét",
|
||||
"account.reverseShares.modal.expiration.week-plural": "hét",
|
||||
"account.reverseShares.modal.expiration.month-singular": "hónap",
|
||||
"account.reverseShares.modal.expiration.month-plural": "hónap",
|
||||
"account.reverseShares.modal.expiration.year-singular": "év",
|
||||
"account.reverseShares.modal.expiration.year-plural": "év",
|
||||
"account.reverseShares.modal.max-size.label":
|
||||
"Megosztás megengedett max mérete",
|
||||
"account.reverseShares.modal.send-email": "Email értesítés küldése",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Email értesítés arról, amikor a fordított megosztási hivatkozást használva megosztást hoznak létre.",
|
||||
"account.reverseShares.modal.max-use.label": "Megengedett alkalmak száma",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"A megosztási hivatkozás megengedett felhasználási alkalmainak száma.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Ez a fordított megosztás soha nem fog lejárni.",
|
||||
"account.reverseShare.expires-on":
|
||||
"A fordított megosztás lejárata: {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Még nincsenek megosztások",
|
||||
"account.reverseShares.table.count.singular": "megosztás",
|
||||
"account.reverseShares.table.count.plural": "megosztás",
|
||||
"account.reverseShares.table.shares": "Megosztások",
|
||||
"account.reverseShares.table.remaining": "Fennmaradó alkalmak",
|
||||
"account.reverseShares.table.max-size": "Megengedett max méret",
|
||||
"account.reverseShares.table.expires": "Lejárat",
|
||||
"account.reverseShares.modal.reverse-share-link":
|
||||
"Fordított megosztási hivatkozás",
|
||||
"account.reverseShares.modal.delete.title": "Fordított megosztás törlése",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Valóban törölni kívánja ezt a fordított megosztást? A használatával készített megosztások is törlésre kerülnek.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Admin ügyek",
|
||||
"admin.button.users": "Felhasználókezelés",
|
||||
"admin.button.shares": "Megosztáskezelés",
|
||||
"admin.button.config": "Konfiguráció",
|
||||
"admin.version": "Verzió",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "Felhasználókezelés",
|
||||
"admin.users.table.username": "Felhasználónév",
|
||||
"admin.users.table.email": "Email",
|
||||
"admin.users.table.admin": "Admin ügyek",
|
||||
"admin.users.edit.update.title": "{username} felhasználó frissítése",
|
||||
"admin.users.edit.update.admin-privileges": "Adminisztrátori jogosultságok",
|
||||
"admin.users.edit.update.change-password.title": "Jelszó módosítása",
|
||||
"admin.users.edit.update.change-password.field": "Új jelszó",
|
||||
"admin.users.edit.update.change-password.button": "Új jelszó mentése",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"A jelszó sikeresen frissítésre került",
|
||||
"admin.users.edit.delete.title": "{username} felhasználó törlése",
|
||||
"admin.users.edit.delete.description":
|
||||
"Valóban törölni kívánja ezt a felhasználót és vele az ő minden egyes megosztását?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Felhasználó létrehozása",
|
||||
"admin.users.modal.create.username": "Felhasználónév",
|
||||
"admin.users.modal.create.email": "Email",
|
||||
"admin.users.modal.create.password": "Jelszó",
|
||||
"admin.users.modal.create.manual-password": "Jelszó kézi megadása",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Ha nincs bejelölve, akkor a felhasználó egy emailt és benne egy jelszó létrehozási hivatkozást kap.",
|
||||
"admin.users.modal.create.admin": "Adminisztrátori jogosultságok",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Bejelölt állapotában a felhasználó hozzáfér az admin beállító oldalhoz.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Megosztáskezelés",
|
||||
"admin.shares.table.id": "Megosztás ID",
|
||||
"admin.shares.table.username": "Létrehozó",
|
||||
"admin.shares.table.visitors": "Látogatók",
|
||||
"admin.shares.table.expires": "Lejárat",
|
||||
"admin.shares.edit.delete.title": "{id} megosztás törlése",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Valóban törölni kívánja ezt a megosztást?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Feltöltés",
|
||||
"upload.notify.generic-error":
|
||||
"Hiba lépett fel a megosztás befejezése közben.",
|
||||
"upload.notify.count-failed":
|
||||
"{count} darab fájlt nem sikerült feltölteni. Próbálja ismét.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Fájlok feltöltése",
|
||||
"upload.dropzone.description":
|
||||
"Húzza ide a fájlokat a megosztás elkészítéséhez. Összesen legfeljebb {maxSize} fájl húzható egy megosztásba.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"A fájlok mérete meghaladja a megengedett {maxSize} méretet.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Megnevezés",
|
||||
"upload.filelist.size": "Méret",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Megosztás létrehozása",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Csak betű, szám, aláhúzás és kötőjel karaktereket tartalmazhat",
|
||||
"upload.modal.link.error.taken": "Ez a hivatkozás név már használatban van",
|
||||
"upload.modal.not-signed-in": "Nincs bejelentkezve",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Nem lesz képes megosztását kézzel törölni vagy megtekinteni a látogatók számát.",
|
||||
"upload.modal.expires.never": "soha",
|
||||
"upload.modal.expires.never-long": "Nincs lejárat",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"A lejárat meghaladja a megengedett max {max} értéket.",
|
||||
"upload.modal.link.label": "Hivatkozás",
|
||||
"upload.modal.expires.label": "Lejárat",
|
||||
"upload.modal.expires.minute-singular": "perc",
|
||||
"upload.modal.expires.minute-plural": "perc",
|
||||
"upload.modal.expires.hour-singular": "óra",
|
||||
"upload.modal.expires.hour-plural": "óra",
|
||||
"upload.modal.expires.day-singular": "nap",
|
||||
"upload.modal.expires.day-plural": "nap",
|
||||
"upload.modal.expires.week-singular": "hét",
|
||||
"upload.modal.expires.week-plural": "hét",
|
||||
"upload.modal.expires.month-singular": "hónap",
|
||||
"upload.modal.expires.month-plural": "hónap",
|
||||
"upload.modal.expires.year-singular": "év",
|
||||
"upload.modal.expires.year-plural": "év",
|
||||
"upload.modal.accordion.name-and-description.title": "Megnevezés és leírás",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Megnevezés",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"A megosztást kapóknak küldendő üzenet",
|
||||
"upload.modal.accordion.email.title": "Email címzettek",
|
||||
"upload.modal.accordion.email.placeholder": "Adja meg az email címzetteket",
|
||||
"upload.modal.accordion.email.invalid-email": "Érvénytelen emailcím",
|
||||
"upload.modal.accordion.security.title": "Biztonsági beállítások",
|
||||
"upload.modal.accordion.security.password.label": "Jelszavas védelem",
|
||||
"upload.modal.accordion.security.password.placeholder": "Nincs jelszó",
|
||||
"upload.modal.accordion.security.max-views.label": "Megtekintések max száma",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Nincs korlát",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires":
|
||||
"Ez a megosztás soha nem fog lejárni.",
|
||||
"upload.modal.completed.expires-on": "A megosztás lejárata: {expiration}.",
|
||||
"upload.modal.completed.share-ready": "A megosztás készen áll",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Megosztás: {shareId}",
|
||||
"share.description": "Megosztottak Önnel valami fontosat!",
|
||||
"share.error.visitor-limit-exceeded.title": "Túl sok látogató",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"A látogatók száma elérte a megszabott korlátot.",
|
||||
"share.error.removed.title": "Korábban már eltávolított megosztás",
|
||||
"share.error.not-found.title": "Fel nem lelhető megosztás",
|
||||
"share.error.not-found.description": "A keresett megosztás nem létezik.",
|
||||
"share.modal.password.title": "Jelszó szükséges",
|
||||
"share.modal.password.description":
|
||||
"A megosztott tartalom eléréséhez adja meg a megosztás jelszavát.",
|
||||
"share.modal.password": "Jelszó",
|
||||
"share.modal.error.invalid-password": "Érvénytelen jelszó",
|
||||
"share.button.download-all": "Mindet letölti",
|
||||
"share.notify.download-all-preparing":
|
||||
"A megosztás éppen előkészületben. Kérjük próbálja újra néhány perc múlva.",
|
||||
"share.modal.file-link": "Fájl hivatkozás",
|
||||
"share.table.name": "Megnevezés",
|
||||
"share.table.size": "Méret",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Az előnézetek nem támogatottak",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"E fájltípushoz nincsen támogatott előnézet. Töltse le a fájlt a megtekintéshez.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Módosítás: {shareId}",
|
||||
"share.edit.append-upload": "Fájl hozzáfűzése",
|
||||
"share.edit.notify.generic-error":
|
||||
"Hiba lépett fel a megosztás befejezése közben.",
|
||||
"share.edit.notify.save-success": "A megosztás frissítésre került",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "Konfiguráció",
|
||||
"admin.config.category.general": "Általános",
|
||||
"admin.config.category.share": "Megosztás",
|
||||
"admin.config.category.email": "Email",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "Közösségi bejelentkezés",
|
||||
"admin.config.general.app-name": "Alkalmazás neve",
|
||||
"admin.config.general.app-name.description": "Az alkalmazás neve",
|
||||
"admin.config.general.app-url": "Alkalmazás URL hivatkozás",
|
||||
"admin.config.general.app-url.description":
|
||||
"A Pingvin Share megosztáskezelőre mutató hivatkozás",
|
||||
"admin.config.general.show-home-page": "Kezdőlap mutatása",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"A kezdőlap mutatásának ki- és bekapcsolása",
|
||||
"admin.config.general.logo": "Logó",
|
||||
"admin.config.general.logo.description":
|
||||
"A logó személyessé tételéhez töltsön fel egy új képet. A formátum legyen PNG, az oldalarány 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Kép kiválasztása",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Megosztás emailben küldésének engedélyezése",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Email küldése a megosztásról a címzetteknek. Csak akkor engedélyezze, ha az SMTP már engedélyezett.",
|
||||
"admin.config.email.share-recipients-subject": "Megosztási email tárgya",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"A megosztások címzettjeinek küldött email tárgya.",
|
||||
"admin.config.email.share-recipients-message": "Megosztási email szövege",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"A megosztás címzettjeinek küldött email tartalma. Beépíthető változók:\n {creator} - A megosztás létrehozójának neve\n {shareUrl} - A megosztás URL hivatkozása\n {desc} - A megosztás ismertetése\n {expires} - A megosztás lejáratának dátuma\n A változók helyén az aktuális tartalom fog szerepelni.",
|
||||
"admin.config.email.reverse-share-subject": "Fordított megosztás tárgya",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Annak az emailnek a tárgya, ami a fordított megosztást használva készített megosztásról kerül kiküldésre.",
|
||||
"admin.config.email.reverse-share-message": "Fordított megosztás üzenete",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Az Ön által kiküldött fordított megosztási hivatkozás használatával készített megosztás emailjének szövege. A(z) {shareUrl} helyére a létrehozó neve és a megosztás URL hivatkozása kerül.",
|
||||
"admin.config.email.reset-password-subject": "Jelszó visszaállítási tárgy",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"A felhasználó által kezdeményezett jelszó visszaállításkor küldött email tárgya.",
|
||||
"admin.config.email.reset-password-message": "Jelszó visszaállítási üzenet",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"A felhasználó által kezdeményezett jelszó visszaállításkor küldött email szövege. A(z) {url} helyére a jelszó visszaállítási URL hivatkozás kerül.",
|
||||
"admin.config.email.invite-subject": "Meghívó tárgya",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Az adminisztrátortól a meghívott felhasználó felé küldött email tárgya.",
|
||||
"admin.config.email.invite-message": "Meghívó szövege",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Az adminisztrátortól a meghívott felhasználó felé küldött email szövege. A(z) {url} helyére a meghívó URL hivatkozása kerül, a(z) {password} helyére a jelszó.",
|
||||
"admin.config.share.allow-registration": "Regisztráció engedélyezése",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Regisztráció engedélyezésének ki- és bekapcsolása",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Hitelesítés nélküli megosztások engedélyezése",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Hitelesítés nélküli felhasználók létre hozhatnak-e megosztásokat",
|
||||
"admin.config.share.max-expiration": "Max lejárat",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"A megosztások megengedett leghosszabb lejárata órában. 0 értékkel a lejárat kikapcsolható.",
|
||||
"admin.config.share.max-size": "Max méret",
|
||||
"admin.config.share.max-size.description":
|
||||
"A megosztások megengedett legnagyobb mérete bájtban",
|
||||
"admin.config.share.zip-compression-level": "Zip tömörítési szint",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"A fájlméret és a tömörítésre fordított idő közötti választás. Az érték 0 - 9 közül választható, 0: nincs tömörítés, 9: legnagyobb mértékű tömörítés. ",
|
||||
"admin.config.share.chunk-size": "Darabolási méret",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Az internet kapcsolat megbízhatóságának és átvitelének megfelelően választható feltöltési darabok mérete bájtban. A kisebb darabok növelhetik a szakadozó kapcsolatok használatának sikerességét, a nagyobb darabok a stabil kapcsolatokat gyorsítják.",
|
||||
"admin.config.smtp.enabled": "Engedélyezett",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"A(z) SMTP bekapcsolása. Csak akkor engedélyezze, ha már megadta a kiszolgáló, port, email, felhasználónév és jelszó beállításokat az SMTP kiszolgálóhoz.",
|
||||
"admin.config.smtp.host": "Kiszolgáló",
|
||||
"admin.config.smtp.host.description": "Az SMTP szerver kiszolgáló gépe",
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "Az SMTP kiszolgáló portja",
|
||||
"admin.config.smtp.email": "Email",
|
||||
"admin.config.smtp.email.description":
|
||||
"Az emailek kiküldésére használt email cím",
|
||||
"admin.config.smtp.username": "Felhasználónév",
|
||||
"admin.config.smtp.username.description":
|
||||
"Felhasználónév az SMTP kiszolgálón",
|
||||
"admin.config.smtp.password": "Jelszó",
|
||||
"admin.config.smtp.password.description": "Jelszó az SMTP kiszolgálón",
|
||||
"admin.config.smtp.button.test": "Teszt email küldése",
|
||||
"admin.config.oauth.allow-registration": "Regisztráció engedélyezése",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"A felhasználók közösségi bejelentkezésen át is regisztrálhatnak",
|
||||
"admin.config.oauth.ignore-totp": "TOTP mellőzése",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"TOTP mellőzése a közösségi bejelentkezést használó felhasználónál",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"GitHub bejelentkezés engedélyezése",
|
||||
"admin.config.oauth.github-client-id": "GitHub ügyfél ID",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"A GitHub OAuth applikáció ügyfél ID azonosítója",
|
||||
"admin.config.oauth.github-client-secret": "GitHub ügyfél titok",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"A GitHub OAuth applikáció ügyfél titka",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Google bejelentkezés engedélyezése",
|
||||
"admin.config.oauth.google-client-id": "Google ügyfél ID azonosító",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"A Google OAuth applikáció ügyfél ID azonosítója",
|
||||
"admin.config.oauth.google-client-secret": "Google ügyfél titok",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"A Google OAuth applikáció ügyfél titka",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Microsoft login engedélyezése",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft bérlő",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"A Microsoft OAuth applikáció bérlő ID azonosítója\náltalános (common): személyes Microsoft fiókkal és munkahelyi vagy iskolai fiókkal rendelkező Microsoft Entra ID azonosítókkal egyaránt lehetséges a bejelentkezés. \nszervezetek (organizations): Csak a Microsoft Entra ID munkahelyi vagy iskolai fiókkal rendelkező felhasználók jelentkezhetnek be az alkalmazásba.\nfogyasztók (consumers): Csak személyes Microsoft-fiókkal rendelkező felhasználók jelentkezhetnek be az alkalmazásba.\nA Microsoft Entra bérlő tartományneve vagy a bérlő azonosítója GUID formátumban: Az alkalmazásba csak egy adott Microsoft Entra bérlő felhasználói jelentkezhetnek be (munkahelyi vagy iskolai fiókkal rendelkező könyvtártagok vagy személyes Microsoft-fiókkal rendelkező könyvtárvendégek).",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft ügyfél ID azonosító",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"A Microsoft OAuth applikáció ügyfél ID azonosítója",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft ügyfél titok",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"A Microsoft Oauth applikáció ügyfél titka",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Discord bejelentkezés engedélyezése",
|
||||
"admin.config.oauth.discord-limited-guild":
|
||||
"Discord limitált kiszolgáló ID azonosítója",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"A kiszolgálón engedélyezett bejelentkezett felhasználók száma. Hagyja üresen a kikapcsoláshoz.",
|
||||
"admin.config.oauth.discord-client-id": "Discord ügyfél ID azonosító",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"A Discord OAuth applikáció ügyfél ID azonosítója",
|
||||
"admin.config.oauth.discord-client-secret": "Discord ügyfél titok",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"A Discord OAuth applikáció ügyfél titka",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"OpenID Connect bejelentkezés engedélyezése",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Az OpenID Connect OAuth applikáció Discovery URI azonosítója",
|
||||
"admin.config.oauth.oidc-username-claim":
|
||||
"OpenID Connect felhasználónév igény",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Az OpenID Connect ID token felhasználónév igénye. Hagyja üresen ha nincs információja a beállításról.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect ügyfél ID azonosító",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Az OpenID Connect OAuth applikáció ügyfél ID azonosítója",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect ügyfél titok",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Az OpenID Connect OAuth applikáció ügyfél titka",
|
||||
// 404
|
||||
"404.description": "Hoppá - ez az oldal nem létezik.",
|
||||
"404.button.home": "Vissza a Kezdőlapra",
|
||||
// error
|
||||
"error.title": "Hiba",
|
||||
"error.description": "Hoppá!",
|
||||
"error.button.back": "Vissza",
|
||||
"error.msg.default": "Hiba történt.",
|
||||
"error.msg.access_denied":
|
||||
"Megszakította a hitelesítési folyamatot, kérem próbálja újra.",
|
||||
"error.msg.expired_token":
|
||||
"A hitelesítési folyamat túl sokáig tartott, kérem próbálja újra.",
|
||||
"error.msg.invalid_token": "Belső hiba",
|
||||
"error.msg.no_user": "A(z) {0} fiókhoz kapcsolt felhasználó nem létezik.",
|
||||
"error.msg.no_email": "Nem nyerhető ki a(z) {0} fiók emailcíme.",
|
||||
"error.msg.already_linked":
|
||||
"Ez a(z) {0} fiók már kapcsolódik egy másik fiókhoz.",
|
||||
"error.msg.not_linked":
|
||||
"Ez a(z){0} fiók még nem kapcsolódott egyetlen fiókhoz sem.",
|
||||
"error.msg.unverified_account":
|
||||
"Ezt a(z) {0} fiókot még nem igazolták vissza, kérem próbálja újra a megerősítés után.",
|
||||
"error.msg.discord_guild_permission_denied": "Nem jelentkezhet be.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Nem nyerhető ki felhasználói információ ebből a(z) {0} fiókból.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Mentés",
|
||||
"common.button.create": "Létrehozás",
|
||||
"common.button.submit": "Küldés",
|
||||
"common.button.delete": "Törlés",
|
||||
"common.button.cancel": "Mégse",
|
||||
"common.button.confirm": "Megerősítés",
|
||||
"common.button.disable": "Letiltás",
|
||||
"common.button.share": "Megosztás",
|
||||
"common.button.generate": "Létrehozás",
|
||||
"common.button.done": "Kész",
|
||||
"common.text.link": "Hivatkozás",
|
||||
"common.text.navigate-to-link": "Ugrás a hivatkozásra",
|
||||
"common.text.or": "vagy",
|
||||
"common.button.go-back": "Vissza",
|
||||
"common.button.go-home": "Kezdőlap",
|
||||
"common.notify.copied": "A hivatkozást a Vágólapra másoltuk",
|
||||
"common.success": "Siker",
|
||||
"common.error": "Hiba",
|
||||
"common.error.unknown": "Ismeretlen hiba lépett fel",
|
||||
"common.error.invalid-email": "Érvénytelen emailcím",
|
||||
"common.error.too-short": "Legalább {length} karakter kell",
|
||||
"common.error.too-long": "Legfejlebb {length} karakter adható meg",
|
||||
"common.error.exact-length": "Pontosan {length} karakter szükséges",
|
||||
"common.error.invalid-number": "Számot kell megadnia",
|
||||
"common.error.field-required": "Ez egy kötelező mező",
|
||||
};
|
||||
539
frontend/src/i18n/translations/it-IT.ts
Normal file
539
frontend/src/i18n/translations/it-IT.ts
Normal file
@@ -0,0 +1,539 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "Carica",
|
||||
"navbar.signin": "Registrati",
|
||||
"navbar.home": "Home",
|
||||
"navbar.signup": "Accedi",
|
||||
"navbar.links.shares": "Le mie condivisioni",
|
||||
"navbar.links.reverse": "Condivisioni Inverse",
|
||||
"navbar.avatar.account": "Il mio account",
|
||||
"navbar.avatar.admin": "Amministrazione",
|
||||
"navbar.avatar.signout": "Disconetti",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "Una piattaforma di condivisione di file <h>autohosted</h>.",
|
||||
"home.description":
|
||||
"Vuoi davvero dare i tuoi file personali in mano a terzi come WeTransfer?",
|
||||
"home.bullet.a.name": "Self-hosted",
|
||||
"home.bullet.a.description": "Ospita Pingvin Condividi sulla tua macchina.",
|
||||
"home.bullet.b.name": "Privacy",
|
||||
"home.bullet.b.description":
|
||||
"I tuoi file sono i tuoi file e non dovrebbero mai entrare nelle mani di terzi.",
|
||||
"home.bullet.c.name": "Nessun fastidioso limite alle dimensioni dei files",
|
||||
"home.bullet.c.description":
|
||||
"Carica file grandi quanto vuoi. Solo il tuo disco rigido sarà il tuo limite.",
|
||||
"home.button.start": "Inizia adesso",
|
||||
"home.button.source": "Codice sorgente",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "Bentornato",
|
||||
"signin.description": "Non hai ancora un account?",
|
||||
"signin.button.signup": "Registrazione",
|
||||
"signin.input.email-or-username": "Email o nome utente",
|
||||
"signin.input.email-or-username.placeholder": "La tua email o nome utente",
|
||||
"signin.input.password": "Password",
|
||||
"signin.input.password.placeholder": "Password",
|
||||
"signin.button.submit": "Accedi",
|
||||
"signIn.notify.totp-required.title": "Autenticazione a due fattori richiesta",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Inserisci il tuo codice di autenticazione a due fattori",
|
||||
"signIn.oauth.or": "OPPURE",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
"signIn.oauth.discord": "Discord",
|
||||
"signIn.oauth.oidc": "OpenID",
|
||||
// END /auth/signin
|
||||
// /auth/signup
|
||||
"signup.title": "Crea un account",
|
||||
"signup.description": "Hai già un account?",
|
||||
"signup.button.signin": "Accedi",
|
||||
"signup.input.username": "Nome utente",
|
||||
"signup.input.username.placeholder": "Il tuo nome utente",
|
||||
"signup.input.email": "Email",
|
||||
"signup.input.email.placeholder": "La tua email",
|
||||
"signup.button.submit": "Iniziamo",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "Autenticazione TOTP",
|
||||
"totp.button.signIn": "Accedi",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Hai dimenticato la password?",
|
||||
"resetPassword.description":
|
||||
"Inserisci la tua email per reimpostare la password.",
|
||||
"resetPassword.notify.success":
|
||||
"Un messaggio con un link per reimpostare la password è stato inviato se l'e-mail esiste.",
|
||||
"resetPassword.button.back": "Torna alla pagina di login",
|
||||
"resetPassword.text.resetPassword": "Reimposta password",
|
||||
"resetPassword.text.enterNewPassword": "Inserisci la tua nuova password",
|
||||
"resetPassword.input.password": "Nuova password",
|
||||
"resetPassword.notify.passwordReset":
|
||||
"La password è stata reimpostata correttamente.",
|
||||
// /account
|
||||
"account.title": "Il mio account",
|
||||
"account.card.info.title": "Informazioni sull'account",
|
||||
"account.card.info.username": "Nome utente",
|
||||
"account.card.info.email": "Email",
|
||||
"account.notify.info.success": "Account aggiornato correttamente",
|
||||
"account.card.password.title": "Password",
|
||||
"account.card.password.old": "Vecchia password",
|
||||
"account.card.password.new": "Nuova password",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Non hai una password impostata. Se vuoi accedere con email e password devi impostare una password.",
|
||||
"account.notify.password.success": "Password cambiata con successo",
|
||||
"account.card.oauth.title": "Effettua il login con i Social",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "Collegamento",
|
||||
"account.card.oauth.unlink": "Scollega",
|
||||
"account.card.oauth.unlinked": "Scollegato",
|
||||
"account.modal.unlink.title": "Scollega account",
|
||||
"account.modal.unlink.description":
|
||||
"Scollegare i tuoi account social potrebbe causare la perdita del tuo account se non ricordi il tuo nome utente e la password.",
|
||||
"account.notify.oauth.unlinked.success": "Disconnessione Riuscita",
|
||||
"account.card.security.title": "Sicurezza",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Inserisci la tua password attuale per iniziare ad abilitare TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Inserisci la tua password attuale per iniziare ad abilitare TOTP",
|
||||
"account.card.security.totp.button.start": "Iniziare",
|
||||
"account.modal.totp.title": "Abilita TOTP",
|
||||
"account.modal.totp.step1": "Passo 1: Aggiungi il tuo autenticatore",
|
||||
"account.modal.totp.step2": "Passo 2: Convalida il tuo codice",
|
||||
"account.modal.totp.enterManually": "Inserisci manualmente",
|
||||
"account.modal.totp.code": "Codice",
|
||||
"common.button.clickToCopy": "Clicca per copiare",
|
||||
"account.modal.totp.verify": "Verifica",
|
||||
"account.notify.totp.disable": "TOTP disabilitato con successo",
|
||||
"account.notify.totp.enable": "TOTP abilitato con successo",
|
||||
"account.card.language.title": "Lingua",
|
||||
"account.card.language.description":
|
||||
"Il progetto è tradotto dalla community. Alcune lingue potrebbero essere incomplete.",
|
||||
"account.card.color.title": "Schema di colori",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Scuro",
|
||||
"account.theme.light": "Chiaro",
|
||||
"account.theme.system": "Sistema",
|
||||
"account.button.delete": "Elimina account",
|
||||
"account.modal.delete.title": "Cancella Account",
|
||||
"account.modal.delete.description":
|
||||
"Vuoi davvero eliminare il tuo account, incluse tutte le tue condivisioni attive?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Le mie condivisioni",
|
||||
"account.shares.title.empty": "È vuoto qui 👀",
|
||||
"account.shares.description.empty": "Non hai nessuna condivisione.",
|
||||
"account.shares.button.create": "Creane uno",
|
||||
"account.shares.info.title": "Condividi le informazioni",
|
||||
"account.shares.table.id": "ID",
|
||||
"account.shares.table.name": "Nome",
|
||||
"account.shares.table.description": "Descrizione",
|
||||
"account.shares.table.visitors": "Visitatori",
|
||||
"account.shares.table.expiresAt": "Scadenza",
|
||||
"account.shares.table.createdAt": "Creato il",
|
||||
"account.shares.table.size": "Dimensione",
|
||||
"account.shares.modal.share-informations": "Condividi le informazioni",
|
||||
"account.shares.modal.share-link": "Condividi link",
|
||||
"account.shares.modal.delete.title": "Elimina condivisione {share}",
|
||||
"account.shares.modal.delete.description":
|
||||
"Vuoi davvero cancellare questa condivisione?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Condivisione Inversa",
|
||||
"account.reverseShares.description":
|
||||
"Una condivisione inversa consente di generare un URL univoco che consente agli utenti esterni di creare una condivisione.",
|
||||
"account.reverseShares.title.empty": "È vuoto qui 👀",
|
||||
"account.reverseShares.description.empty":
|
||||
"Non hai nessuna condivisione inversa.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Crea condivisione inversa",
|
||||
"account.reverseShares.modal.expiration.label": "Valido fino a",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "Minuto",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "Minuti",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "Ora",
|
||||
"account.reverseShares.modal.expiration.hour-plural": "Ore",
|
||||
"account.reverseShares.modal.expiration.day-singular": "Giorno",
|
||||
"account.reverseShares.modal.expiration.day-plural": "Giorni",
|
||||
"account.reverseShares.modal.expiration.week-singular": "Settimana",
|
||||
"account.reverseShares.modal.expiration.week-plural": "Settimane",
|
||||
"account.reverseShares.modal.expiration.month-singular": "Mese",
|
||||
"account.reverseShares.modal.expiration.month-plural": "Mesi",
|
||||
"account.reverseShares.modal.expiration.year-singular": "Anno",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Anni",
|
||||
"account.reverseShares.modal.max-size.label":
|
||||
"Dimensione massima della condivisione",
|
||||
"account.reverseShares.modal.send-email": "Invia una notifica via email",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Invia una notifica email quando viene creata una condivisione con questo link di condivisione inversa.",
|
||||
"account.reverseShares.modal.max-use.label": "Utilizzo massimo",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"La quantità massima di volte che questo URL può essere usato per creare una condivisione.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Questa condivisione inversa non scadrà mai.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Questa condivisione inversa scadrà il {expiration}.",
|
||||
"account.reverseShares.table.no-shares":
|
||||
"Nessuna condivisione è stata creata",
|
||||
"account.reverseShares.table.count.singular": "condivisione",
|
||||
"account.reverseShares.table.count.plural": "condivisioni",
|
||||
"account.reverseShares.table.shares": "Condivisioni",
|
||||
"account.reverseShares.table.remaining": "Utenti rimanenti",
|
||||
"account.reverseShares.table.max-size":
|
||||
"Dimensione massima della condivisione",
|
||||
"account.reverseShares.table.expires": "Scade il",
|
||||
"account.reverseShares.modal.reverse-share-link":
|
||||
"Link di condivisione inversa",
|
||||
"account.reverseShares.modal.delete.title": "Elimina condivisione inversa",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Vuoi davvero eliminare questa condivisione inversa? Se lo fai, anche le azioni associate verranno eliminate.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Amministrazione",
|
||||
"admin.button.users": "Gestione degli utenti",
|
||||
"admin.button.shares": "Gestione condivisioni",
|
||||
"admin.button.config": "Configurazione",
|
||||
"admin.version": "Versione",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "Gestione degli utenti",
|
||||
"admin.users.table.username": "Nome utente",
|
||||
"admin.users.table.email": "Email",
|
||||
"admin.users.table.admin": "Admin",
|
||||
"admin.users.edit.update.title": "Aggiorna utente {username}",
|
||||
"admin.users.edit.update.admin-privileges": "Privilegi di amministrazione",
|
||||
"admin.users.edit.update.change-password.title": "Cambia la password",
|
||||
"admin.users.edit.update.change-password.field": "Nuova password",
|
||||
"admin.users.edit.update.change-password.button": "Salva la nuova password",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Password cambiata con successo",
|
||||
"admin.users.edit.delete.title": "Elimina l'utente: {username}",
|
||||
"admin.users.edit.delete.description":
|
||||
"Vuoi davvero eliminare questo utente e tutte le sue condivisioni?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Crea utente",
|
||||
"admin.users.modal.create.username": "Nome utente",
|
||||
"admin.users.modal.create.email": "Email",
|
||||
"admin.users.modal.create.password": "Password",
|
||||
"admin.users.modal.create.manual-password": "Imposta la password manualmente",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Se non selezionato, l'utente riceverà un'email con un link per impostare la propria password.",
|
||||
"admin.users.modal.create.admin": "Privilegi di amministrazione",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Se selezionato, l'utente sarà in grado di accedere al pannello amministratore.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Gestione condivisioni",
|
||||
"admin.shares.table.id": "ID Condivisione",
|
||||
"admin.shares.table.username": "Autore",
|
||||
"admin.shares.table.visitors": "Visitatori",
|
||||
"admin.shares.table.expires": "Scade il",
|
||||
"admin.shares.edit.delete.title": "Elimina condivisione {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Vuoi davvero cancellare questa condivisione?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Upload",
|
||||
"upload.notify.generic-error":
|
||||
"Si è verificato un errore durante il completamento della condivisione.",
|
||||
"upload.notify.count-failed": "Impossibile caricare {count} file. Riprovare.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Upload files",
|
||||
"upload.dropzone.description":
|
||||
"Trascina qui i file per iniziare la tua condivisione. Possiamo accettare solo i file che sono inferiori a {maxSize} in totale.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"I tuoi file superano la dimensione massima di condivisione di {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Nome",
|
||||
"upload.filelist.size": "Dimensione",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Crea Condivisione",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Può contenere solo lettere, numeri, underscore e trattini",
|
||||
"upload.modal.link.error.taken": "Questo link è gia in uso",
|
||||
"upload.modal.not-signed-in": "Non sei loggato",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Non sarai in grado di eliminare la tua condivisione manualmente e visualizzare il numero dei visitatori.",
|
||||
"upload.modal.expires.never": "mai",
|
||||
"upload.modal.expires.never-long": "Non Scade Mai",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"La scadenza supera la data di scadenza massima di {max}.",
|
||||
"upload.modal.link.label": "Collegamento",
|
||||
"upload.modal.expires.label": "Valido fino a",
|
||||
"upload.modal.expires.minute-singular": "Minuto",
|
||||
"upload.modal.expires.minute-plural": "Minuti",
|
||||
"upload.modal.expires.hour-singular": "Ora",
|
||||
"upload.modal.expires.hour-plural": "Ore",
|
||||
"upload.modal.expires.day-singular": "Giorno",
|
||||
"upload.modal.expires.day-plural": "Giorni",
|
||||
"upload.modal.expires.week-singular": "Settimana",
|
||||
"upload.modal.expires.week-plural": "Settimane",
|
||||
"upload.modal.expires.month-singular": "Mese",
|
||||
"upload.modal.expires.month-plural": "Mesi",
|
||||
"upload.modal.expires.year-singular": "Anno",
|
||||
"upload.modal.expires.year-plural": "Anni",
|
||||
"upload.modal.accordion.name-and-description.title": "Nome e descrizione",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Nome",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Nota per i destinatari di questa condivisione",
|
||||
"upload.modal.accordion.email.title": "Destinatari di posta elettronica",
|
||||
"upload.modal.accordion.email.placeholder":
|
||||
"Inserisci le email dei destinatari",
|
||||
"upload.modal.accordion.email.invalid-email": "Indirizzo email non valido",
|
||||
"upload.modal.accordion.security.title": "Opzioni di sicurezza",
|
||||
"upload.modal.accordion.security.password.label": "Protezione con password",
|
||||
"upload.modal.accordion.security.password.placeholder": "Nessuna password",
|
||||
"upload.modal.accordion.security.max-views.label": "Visualizzazioni massime",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Nessun limite",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Questa condivisione non scadrà mai.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"Questa condivisione scadrà il {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Condivisione pronta",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Condividi {shareId}",
|
||||
"share.description": "Guarda cosa ho condiviso con te!",
|
||||
"share.error.visitor-limit-exceeded.title": "Limite visitatori superato",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Il limite di visitatori di questa condivisione è stato superato.",
|
||||
"share.error.removed.title": "Condivisione rimossa",
|
||||
"share.error.not-found.title": "Condivisione non trovata",
|
||||
"share.error.not-found.description":
|
||||
"La condivisione che stai cercando non esiste.",
|
||||
"share.modal.password.title": "Password richiesta",
|
||||
"share.modal.password.description":
|
||||
"Per accedere a questa condivisione inserisci la password.",
|
||||
"share.modal.password": "Password",
|
||||
"share.modal.error.invalid-password": "Password non valida",
|
||||
"share.button.download-all": "Scarica tutto",
|
||||
"share.notify.download-all-preparing":
|
||||
"La condivisione è in preparazione. Riprova tra qualche minuto.",
|
||||
"share.modal.file-link": "Link dei File",
|
||||
"share.table.name": "Nome",
|
||||
"share.table.size": "Dimensione",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Anteprima non supportata",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"Un'anteprima per questo tipo di file non è supportata. Per favore scarica il file per visualizzarlo.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Modifica {shareId}",
|
||||
"share.edit.append-upload": "Aggiungi file",
|
||||
"share.edit.notify.generic-error":
|
||||
"Si è verificato un errore durante il completamento della condivisione.",
|
||||
"share.edit.notify.save-success": "Condivisione aggiornata correttamente",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "Configurazione",
|
||||
"admin.config.category.general": "Generale",
|
||||
"admin.config.category.share": "Condivisioni",
|
||||
"admin.config.category.email": "Email",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "Effettua il login con i Social",
|
||||
"admin.config.general.app-name": "Nome dell'App",
|
||||
"admin.config.general.app-name.description": "Nome dell' applicazione",
|
||||
"admin.config.general.app-url": "URL dell'App",
|
||||
"admin.config.general.app-url.description":
|
||||
"Su quale URL Pingvin Share è pubblicato",
|
||||
"admin.config.general.show-home-page": "Visualizza Home Page",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Indica se mostrare la home page",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description":
|
||||
"Cambia il tuo logo caricando una nuova immagine. L'immagine deve essere un PNG e dovrebbe avere il formato 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Scegli un'immagine",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Abilita le email di notifica",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Indica se consentire la spedizione di email di notifica sulle share. Abilita questa opzione solo se hai abilitato SMTP.",
|
||||
"admin.config.email.share-recipients-subject":
|
||||
"Oggetto dell'email di condivisione",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Oggetto dell'email che viene inviata ai destinatari della condivisione.",
|
||||
"admin.config.email.share-recipients-message":
|
||||
"Testo dell'email di condivisione",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Messaggio che viene inviato ai destinatari della condivisione. Variabili disponibili:\n {creator} - Il nome utente del creatore della condivisione\n {shareUrl} - L'URL della condivisione\n {desc} - La descrizione della condivisione\n {expires} - La data di scadenza della condivisione\n Le variabili saranno sostituite con il valore effettivo.",
|
||||
"admin.config.email.reverse-share-subject":
|
||||
"Oggetto dell'email di condivisione inversa",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Oggetto dell'email che viene inviata quando qualcuno ha creato una condivisione con il tuo link di condivisione inversa.",
|
||||
"admin.config.email.reverse-share-message":
|
||||
"Testo dell'email di condivisione inversa",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Messaggio che viene inviato quando qualcuno ha creato una condivisione con il tuo link di condivisione inversa. {shareUrl} sarà sostituito con il nome del creatore e l'URL di condivisione.",
|
||||
"admin.config.email.reset-password-subject":
|
||||
"Oggetto della mail per il reset della password",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Oggetto dell'email che viene inviata quando un utente richiede il ripristino della password.",
|
||||
"admin.config.email.reset-password-message":
|
||||
"Testo dell'email per il reset della password",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Messaggio che viene inviato quando un utente richiede un reset della password. {url} verrà sostituito con l'URL di reset della password.",
|
||||
"admin.config.email.invite-subject": "Oggetto dell'email di invito",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Oggetto dell'email che viene inviata quando un amministratore invita un utente.",
|
||||
"admin.config.email.invite-message": "Testo dell'email di invito",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Messaggio che viene inviato quando un amministratore invita un utente. {url} verrà sostituito con l'URL di invito e {password} con la password.",
|
||||
"admin.config.share.allow-registration": "Consenti la registrazione",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Indica se la registrazione è autorizzata",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Consenti condivisioni non autenticate",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Indica se gli utenti non autenticati possono creare condivisioni",
|
||||
"admin.config.share.max-expiration": "Scadenza massima",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Scadenza massima di condivisione in ore. Impostare a 0 per consentire la scadenza illimitata.",
|
||||
"admin.config.share.max-size": "Dim. massima",
|
||||
"admin.config.share.max-size.description":
|
||||
"Dimensione massima di condivisione in byte",
|
||||
"admin.config.share.zip-compression-level": "Livello di compressione Zip",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Regola il livello per bilanciare la dimensione del file e la velocità di compressione. Valori validi da 0 a 9, con 0 senza compressione e 9 con compressione massima. ",
|
||||
"admin.config.share.chunk-size": "Dimensione dei chunk",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Regola la dimensione del chunk (in byte) per i tuoi caricamenti per bilanciare l'efficienza e l'affidabilità in base alla tua connessione internet. I chunk più piccoli possono migliorare i tassi di successo per connessioni instabili, mentre i chunks più grandi velocizzano i caricamenti per connessioni stabili.",
|
||||
"admin.config.smtp.enabled": "Abilitato",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Indica se SMTP è abilitato. Impostalo a VERO solo se hai inserito host, porta, email, utente e password del tuo server SMTP.",
|
||||
"admin.config.smtp.host": "Host",
|
||||
"admin.config.smtp.host.description": "Host del server SMTP",
|
||||
"admin.config.smtp.port": "Porta",
|
||||
"admin.config.smtp.port.description": "Porta del server SMTP",
|
||||
"admin.config.smtp.email": "Email",
|
||||
"admin.config.smtp.email.description":
|
||||
"Indirizzo da cui vengono inviate le email",
|
||||
"admin.config.smtp.username": "Nome utente",
|
||||
"admin.config.smtp.username.description": "Nome utente del server SMTP",
|
||||
"admin.config.smtp.password": "Password",
|
||||
"admin.config.smtp.password.description": "Password del server SMTP",
|
||||
"admin.config.smtp.button.test": "Invia e-mail di prova",
|
||||
"admin.config.oauth.allow-registration": "Consenti la registrazione",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Consenti agli utenti di registrarsi tramite social login",
|
||||
"admin.config.oauth.ignore-totp": "Ignora TOTP",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Indica se ignorare TOTP quando l'utente utilizza il social login",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Se l'accesso tramite GitHub è abilitato",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"ID client dell'app GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Client secret dell'app GitHub OAuth",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Se il login tramite Google è abilitato",
|
||||
"admin.config.oauth.google-client-id": "Id Client Goole",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"ID client dell'app Google OAuth",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Client secret dell'app Google OAuth",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Se il login tramite Microsoft è abilitato",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Tenant ID dell'app Microsoft OAuth\ngenerico: Gli utenti con un account Microsoft personale e un account di lavoro o scuola da Microsoft Entra ID possono accedere all'applicazione. organizzazioni: Solo gli utenti con account di lavoro o scolastici di Microsoft Entra ID possono accedere all'applicazione.\nclienti: Solo gli utenti con un account Microsoft personale possono accedere all'applicazione.\nnome di dominio del tenant Microsoft Entra o l'ID del tenant in formato GUID: Solo gli utenti di uno specifico tenant Microsoft Entra (membri di directory con un account di lavoro o di scuola o ospiti di directory con un account Microsoft personale) possono accedere all'applicazione.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"ID client dell'app Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client secret dell'app Microsoft OAuth",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Se l'accesso tramite Discord è abilitato",
|
||||
"admin.config.oauth.discord-limited-guild":
|
||||
"Limita a un particolare server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limita l'accesso agli utenti in un server specifico. Lascialo vuoto per disabilitare.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"ID client dell'app Discord OAuth",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Client secret dell'applicazione Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "OpenId Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Se il login tramite OpenID Connect è abilitato",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"URI di scoperta dell'app OAuth di OpenID Connect",
|
||||
"admin.config.oauth.oidc-username-claim":
|
||||
"Richiesta nome utente OpenID Connect",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Nome utente nel token OpenID Connect. Lascialo vuoto se non sai cos'è questa configurazione.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID dell'app OAuth di OpenID Connect",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret dell'app OAuth OpenID Connect",
|
||||
// 404
|
||||
"404.description": "Ops, questa pagina non esiste.",
|
||||
"404.button.home": "Riportami a casa",
|
||||
// error
|
||||
"error.title": "Errore",
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Torna indietro",
|
||||
"error.msg.default": "Si è verificato un errore.",
|
||||
"error.msg.access_denied":
|
||||
"Hai annullato il processo di autenticazione, per favore riprova.",
|
||||
"error.msg.expired_token":
|
||||
"Il processo di autenticazione ha richiesto troppo tempo, per favore riprova.",
|
||||
"error.msg.invalid_token": "Errore Interno",
|
||||
"error.msg.no_user": "L'utente collegato a questo account {0} non esiste.",
|
||||
"error.msg.no_email":
|
||||
"Impossibile ottenere l'indirizzo email da questo account {0}.",
|
||||
"error.msg.already_linked":
|
||||
"Questo account {0} è già collegato ad un altro account.",
|
||||
"error.msg.not_linked":
|
||||
"Questo account {0} non è ancora collegato ad alcun account.",
|
||||
"error.msg.unverified_account":
|
||||
"Questo account {0} non è verificato, per favore riprova dopo la verifica.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"Non sei autorizzato ad accedere.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Non è possibile ottenere le informazioni utente da questo account {0}.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenId Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Salva",
|
||||
"common.button.create": "Crea",
|
||||
"common.button.submit": "Invia",
|
||||
"common.button.delete": "Cancella",
|
||||
"common.button.cancel": "Annulla",
|
||||
"common.button.confirm": "Conferma",
|
||||
"common.button.disable": "Disabilita",
|
||||
"common.button.share": "Condividi",
|
||||
"common.button.generate": "Genera",
|
||||
"common.button.done": "Fatto",
|
||||
"common.text.link": "Collegamento",
|
||||
"common.text.navigate-to-link": "Vai al collegamento",
|
||||
"common.text.or": "o",
|
||||
"common.button.go-back": "Torna indietro",
|
||||
"common.button.go-home": "Vai alla Home Page",
|
||||
"common.notify.copied": "Il tuo collegamento e' stato copiato negli appunti",
|
||||
"common.success": "Successo",
|
||||
"common.error": "Errore",
|
||||
"common.error.unknown": "Si è verificato un errore sconosciuto",
|
||||
"common.error.invalid-email": "Indirizzo email non valido",
|
||||
"common.error.too-short": "Deve contenere almeno {length} caratteri",
|
||||
"common.error.too-long": "Deve contenere al massimo {length} caratteri",
|
||||
"common.error.exact-length": "Deve essere esattamente {length} caratteri",
|
||||
"common.error.invalid-number": "Deve essere un numero",
|
||||
"common.error.field-required": "Questo campo è obbligatorio",
|
||||
};
|
||||
@@ -12,13 +12,17 @@ export default {
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "<h>セルフホスト</h>のファイル共有プラットフォーム。",
|
||||
"home.description": "WeTransferのようなサードパーティーサービスに自分のファイルを渡したいですか?",
|
||||
"home.description":
|
||||
"WeTransferのようなサードパーティーサービスに自分のファイルを渡したいですか?",
|
||||
"home.bullet.a.name": "セルフホスト",
|
||||
"home.bullet.a.description": "Pingvin Shareをあなたのマシンでホストしましょう。",
|
||||
"home.bullet.a.description":
|
||||
"Pingvin Shareをあなたのマシンでホストしましょう。",
|
||||
"home.bullet.b.name": "プライバシー",
|
||||
"home.bullet.b.description": "あなたのファイルはあなたのものであり、決して第三者の手に入るべきではありません。",
|
||||
"home.bullet.b.description":
|
||||
"あなたのファイルはあなたのものであり、決して第三者の手に入るべきではありません。",
|
||||
"home.bullet.c.name": "ファイルサイズ制限に悩まされることはありません",
|
||||
"home.bullet.c.description": "大きなファイルもアップロード。ストレージのサイズだけが唯一の制限です。",
|
||||
"home.bullet.c.description":
|
||||
"大きなファイルもアップロード。ストレージのサイズだけが唯一の制限です。",
|
||||
"home.button.start": "始めましょう",
|
||||
"home.button.source": "ソースコード",
|
||||
// END /
|
||||
@@ -27,12 +31,14 @@ export default {
|
||||
"signin.description": "アカウントをお持ちではありませんか?",
|
||||
"signin.button.signup": "会員登録",
|
||||
"signin.input.email-or-username": "メールアドレスまたはユーザー名",
|
||||
"signin.input.email-or-username.placeholder": "メールアドレスまたはユーザー名",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"メールアドレスまたはユーザー名",
|
||||
"signin.input.password": "パスワード",
|
||||
"signin.input.password.placeholder": "あなたのパスワード",
|
||||
"signin.button.submit": "サインイン",
|
||||
"signIn.notify.totp-required.title": "二段階認証が必要です",
|
||||
"signIn.notify.totp-required.description": "二段階認証コードを入力してください",
|
||||
"signIn.notify.totp-required.description":
|
||||
"二段階認証コードを入力してください",
|
||||
"signIn.oauth.or": "または",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -57,7 +63,8 @@ export default {
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "パスワードを忘れてしまいましたか?",
|
||||
"resetPassword.description": "登録しているメールアドレスを入力してください。",
|
||||
"resetPassword.notify.success": "パスワードをリセットするためのリンクをメールで送信しました。",
|
||||
"resetPassword.notify.success":
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.button.back": "サインインページに戻る",
|
||||
"resetPassword.text.resetPassword": "パスワードをリセット",
|
||||
"resetPassword.text.enterNewPassword": "新規パスワードを入力",
|
||||
@@ -72,7 +79,8 @@ export default {
|
||||
"account.card.password.title": "パスワード",
|
||||
"account.card.password.old": "現在のパスワード",
|
||||
"account.card.password.new": "新規パスワード",
|
||||
"account.card.password.noPasswordSet": "パスワードが設定されていません。メールアドレスとパスワードでサインインしたい場合は、パスワードの設定が必要です。",
|
||||
"account.card.password.noPasswordSet":
|
||||
"パスワードが設定されていません。メールアドレスとパスワードでサインインしたい場合は、パスワードの設定が必要です。",
|
||||
"account.notify.password.success": "パスワードの変更に成功しました",
|
||||
"account.card.oauth.title": "ソーシャルログイン",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +92,27 @@ export default {
|
||||
"account.card.oauth.unlink": "リンク解除",
|
||||
"account.card.oauth.unlinked": "リンクされていません",
|
||||
"account.modal.unlink.title": "アカウントのリンクを解除",
|
||||
"account.modal.unlink.description": "ソーシャルアカウントのリンクを解除すると、ユーザー名とパスワードを覚えていない場合にアカウントへのアクセスが失われる可能性があります。",
|
||||
"account.modal.unlink.description":
|
||||
"ソーシャルアカウントのリンクを解除すると、ユーザー名とパスワードを覚えていない場合にアカウントへのアクセスが失われる可能性があります。",
|
||||
"account.notify.oauth.unlinked.success": "リンク解除に成功しました",
|
||||
"account.card.security.title": "セキュリティ",
|
||||
"account.card.security.totp.enable.description": "2段階認証を有効にするため、現在のパスワードを入力してください",
|
||||
"account.card.security.totp.disable.description": "2段階認証を無効にするため、現在のパスワードを入力してください",
|
||||
"account.card.security.totp.enable.description":
|
||||
"2段階認証を有効にするため、現在のパスワードを入力してください",
|
||||
"account.card.security.totp.disable.description":
|
||||
"2段階認証を無効にするため、現在のパスワードを入力してください",
|
||||
"account.card.security.totp.button.start": "開始",
|
||||
"account.modal.totp.title": "2段階認証を有効にする",
|
||||
"account.modal.totp.step1": "ステップ1: 認証アプリを追加する",
|
||||
"account.modal.totp.step2": "ステップ2: コードを検証",
|
||||
"account.modal.totp.enterManually": "手動で入力",
|
||||
"account.modal.totp.code": "コピー",
|
||||
"account.modal.totp.clickToCopy": "ここをクリックしてコピー",
|
||||
"common.button.clickToCopy": "ここをクリックしてコピー",
|
||||
"account.modal.totp.verify": "検証",
|
||||
"account.notify.totp.disable": "2段階認証の無効化に成功しました",
|
||||
"account.notify.totp.enable": "2段階認証の有効化に成功しました",
|
||||
"account.card.language.title": "言語",
|
||||
"account.card.language.description": "プロジェクトはコミュニティによって翻訳されています。一部の言語の翻訳は不完全の場合があります。",
|
||||
"account.card.language.description":
|
||||
"プロジェクトはコミュニティによって翻訳されています。一部の言語の翻訳は不完全の場合があります。",
|
||||
"account.card.color.title": "カラースキーム",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "ダーク",
|
||||
@@ -108,7 +120,8 @@ export default {
|
||||
"account.theme.system": "システムに合わせる",
|
||||
"account.button.delete": "アカウントを削除",
|
||||
"account.modal.delete.title": "アカウントを削除",
|
||||
"account.modal.delete.description": "全ての有効な共有を含め、アカウントに関する全てのデータを完全に削除してもよろしいですか?",
|
||||
"account.modal.delete.description":
|
||||
"全ての有効な共有を含め、アカウントに関する全てのデータを完全に削除してもよろしいですか?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "自分の共有",
|
||||
@@ -126,11 +139,13 @@ export default {
|
||||
"account.shares.modal.share-informations": "共有情報",
|
||||
"account.shares.modal.share-link": "共有リンク",
|
||||
"account.shares.modal.delete.title": "共有を削除 {share}",
|
||||
"account.shares.modal.delete.description": "この共有を削除してもよろしいですか?",
|
||||
"account.shares.modal.delete.description":
|
||||
"この共有を削除してもよろしいですか?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "ファイルリクエスト",
|
||||
"account.reverseShares.description": "ファイルリクエストは、外部のユーザーにファイルをアップロードしてもらえるユニークなURLを生成できます。",
|
||||
"account.reverseShares.description":
|
||||
"ファイルリクエストは、外部のユーザーにファイルをアップロードしてもらえるユニークなURLを生成できます。",
|
||||
"account.reverseShares.title.empty": "まだ何もありません 👀",
|
||||
"account.reverseShares.description.empty": "ファイルリクエストがありません。",
|
||||
// showCreateReverseShareModal.tsx
|
||||
@@ -150,12 +165,17 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "年間",
|
||||
"account.reverseShares.modal.max-size.label": "最大ファイルサイズ",
|
||||
"account.reverseShares.modal.send-email": "メール通知を送信",
|
||||
"account.reverseShares.modal.send-email.description": "このファイルリクエストリンクを使用して、ファイルがアップロードされた場合にメールで通知します。",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"このファイルリクエストリンクを使用して、ファイルがアップロードされた場合にメールで通知します。",
|
||||
"account.reverseShares.modal.max-use.label": "最大回数",
|
||||
"account.reverseShares.modal.max-use.description": "このURLを使用してファイルをアップロードできる最大回数です。",
|
||||
"account.reverseShare.never-expires": "このファイルリクエストリンクは期限切れになりません。",
|
||||
"account.reverseShare.expires-on": "このファイルリクエストリンクは、{expiration} に期限切れとなります。",
|
||||
"account.reverseShares.table.no-shares": "まだファイルがアップロードされていません",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"このURLを使用してファイルをアップロードできる最大回数です。",
|
||||
"account.reverseShare.never-expires":
|
||||
"このファイルリクエストリンクは期限切れになりません。",
|
||||
"account.reverseShare.expires-on":
|
||||
"このファイルリクエストリンクは、{expiration} に期限切れとなります。",
|
||||
"account.reverseShares.table.no-shares":
|
||||
"まだファイルがアップロードされていません",
|
||||
"account.reverseShares.table.count.singular": "共有",
|
||||
"account.reverseShares.table.count.plural": "共有",
|
||||
"account.reverseShares.table.shares": "共有",
|
||||
@@ -164,11 +184,13 @@ export default {
|
||||
"account.reverseShares.table.expires": "有効期限",
|
||||
"account.reverseShares.modal.reverse-share-link": "ファイルリクエストリンク",
|
||||
"account.reverseShares.modal.delete.title": "ファイルリクエストを削除",
|
||||
"account.reverseShares.modal.delete.description": "本当にこのファイルリクエストを削除しますか?削除すると、関連するファイルアップロードも削除されます。",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"本当にこのファイルリクエストを削除しますか?削除すると、関連するファイルアップロードも削除されます。",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "管理画面",
|
||||
"admin.button.users": "ユーザー管理",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "設定",
|
||||
"admin.version": "バージョン",
|
||||
// END /admin
|
||||
@@ -182,39 +204,60 @@ export default {
|
||||
"admin.users.edit.update.change-password.title": "パスワードを変更",
|
||||
"admin.users.edit.update.change-password.field": "新規パスワード",
|
||||
"admin.users.edit.update.change-password.button": "新しいパスワードを保存",
|
||||
"admin.users.edit.update.notify.password.success": "パスワードの変更に成功しました",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"パスワードの変更に成功しました",
|
||||
"admin.users.edit.delete.title": "ユーザーを削除 {username}",
|
||||
"admin.users.edit.delete.description": "このユーザーとこのユーザーに関連する全てのファイルアップロードを削除してもよろしいですか?",
|
||||
"admin.users.edit.delete.description":
|
||||
"このユーザーとこのユーザーに関連する全てのファイルアップロードを削除してもよろしいですか?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "ユーザーを作成",
|
||||
"admin.users.modal.create.username": "ユーザー名",
|
||||
"admin.users.modal.create.email": "メールアドレス",
|
||||
"admin.users.modal.create.password": "パスワード",
|
||||
"admin.users.modal.create.manual-password": "パスワードを手動で設定",
|
||||
"admin.users.modal.create.manual-password.description": "チェックされていない場合、ユーザーにパスワードを設定する為のリンクが記載されたメールを送信します。",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"チェックされていない場合、ユーザーにパスワードを設定する為のリンクが記載されたメールを送信します。",
|
||||
"admin.users.modal.create.admin": "管理者権限",
|
||||
"admin.users.modal.create.admin.description": "チェックされている場合、ユーザーは管理画面にアクセスできるようになります。",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"チェックされている場合、ユーザーは管理画面にアクセスできるようになります。",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "アップロード",
|
||||
"upload.notify.generic-error": "共有を仕上げている最中にエラーが発生しました。",
|
||||
"upload.notify.count-failed": "{count} ファイルがアップロードに失敗しました。再度お試しください。",
|
||||
"upload.notify.generic-error":
|
||||
"共有を仕上げている最中にエラーが発生しました。",
|
||||
"upload.notify.count-failed":
|
||||
"{count} ファイルがアップロードに失敗しました。再度お試しください。",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "ファイルをアップロード",
|
||||
"upload.dropzone.description": "ここにファイルをドラッグしてアップロードを開始しましょう。{maxSize} 以下のファイルがアップロードできます。",
|
||||
"upload.dropzone.notify.file-too-big": "アップロードしようとしたファイルは、最大ファイルサイズの{maxSize} を超えています。",
|
||||
"upload.dropzone.description":
|
||||
"ここにファイルをドラッグしてアップロードを開始しましょう。{maxSize} 以下のファイルがアップロードできます。",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"アップロードしようとしたファイルは、最大ファイルサイズの{maxSize} を超えています。",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "ファイル名",
|
||||
"upload.filelist.size": "サイズ",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "共有を作成",
|
||||
"upload.modal.link.error.invalid": "文字、数字、アンダースコア、ハイフンのみ使用できます",
|
||||
"upload.modal.link.error.invalid":
|
||||
"文字、数字、アンダースコア、ハイフンのみ使用できます",
|
||||
"upload.modal.link.error.taken": "このリンクは既に使用されています",
|
||||
"upload.modal.not-signed-in": "サインインしていません",
|
||||
"upload.modal.not-signed-in-description": "共有の手動削除と訪問者カウンターは表示できません。",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"共有の手動削除と訪問者カウンターは表示できません。",
|
||||
"upload.modal.expires.never": "永久",
|
||||
"upload.modal.expires.never-long": "期限切れにさせない",
|
||||
"upload.modal.expires.error.too-long": "設定可能な有効期限を越えています。有効期限の上限は{max} です。",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"設定可能な有効期限を越えています。有効期限の上限は{max} です。",
|
||||
"upload.modal.link.label": "リンク",
|
||||
"upload.modal.expires.label": "有効期限",
|
||||
"upload.modal.expires.minute-singular": "分間",
|
||||
@@ -229,8 +272,10 @@ export default {
|
||||
"upload.modal.expires.month-plural": "ヶ月間",
|
||||
"upload.modal.expires.year-singular": "年間",
|
||||
"upload.modal.expires.year-plural": "年間",
|
||||
"upload.modal.accordion.description.title": "説明",
|
||||
"upload.modal.accordion.description.placeholder": "この共有に関する受信者へのメモ",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "メールで受け取る相手",
|
||||
"upload.modal.accordion.email.placeholder": "メールの宛先を入力",
|
||||
"upload.modal.accordion.email.invalid-email": "無効なメールアドレスです",
|
||||
@@ -241,28 +286,34 @@ export default {
|
||||
"upload.modal.accordion.security.max-views.placeholder": "制限なし",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "この共有は期限切れになりません。",
|
||||
"upload.modal.completed.expires-on": "この共有は、{expiration} に期限切れとなります。",
|
||||
"upload.modal.completed.expires-on":
|
||||
"この共有は、{expiration} に期限切れとなります。",
|
||||
"upload.modal.completed.share-ready": "共有の準備ができました",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "「{shareId}」が共有されました",
|
||||
"share.description": "あなたと共有したファイルをご確認ください!",
|
||||
"share.error.visitor-limit-exceeded.title": "訪問者の上限を超えました",
|
||||
"share.error.visitor-limit-exceeded.description": "この共有からの訪問者の回数が制限を超えています。",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"この共有からの訪問者の回数が制限を超えています。",
|
||||
"share.error.removed.title": "共有が削除されました",
|
||||
"share.error.not-found.title": "共有が見つかりません",
|
||||
"share.error.not-found.description": "お探しの共有が見つかりません。",
|
||||
"share.modal.password.title": "パスワードが必要です",
|
||||
"share.modal.password.description": "この共有にアクセスするには、共有相手から伝えられているパスワードを入力してください。",
|
||||
"share.modal.password.description":
|
||||
"この共有にアクセスするには、共有相手から伝えられているパスワードを入力してください。",
|
||||
"share.modal.password": "パスワード",
|
||||
"share.modal.error.invalid-password": "パスワードが間違っています",
|
||||
"share.button.download-all": "全てダウンロード",
|
||||
"share.notify.download-all-preparing": "共有は準備中です。数分後に再度お試しください。",
|
||||
"share.notify.download-all-preparing":
|
||||
"共有は準備中です。数分後に再度お試しください。",
|
||||
"share.modal.file-link": "ファイルリンク",
|
||||
"share.table.name": "ファイル名",
|
||||
"share.table.size": "サイズ",
|
||||
"share.modal.file-preview.error.not-supported.title": "プレビューに対応していません",
|
||||
"share.modal.file-preview.error.not-supported.description": "これらのファイルのプレビューには対応していません。ファイルをダウンロードして、直接確認してください。",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"プレビューに対応していません",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"A preview for this file type is unsupported. Please download the file to view it.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "編集 {shareId}",
|
||||
@@ -282,40 +333,61 @@ export default {
|
||||
"admin.config.general.app-url": "アプリ名",
|
||||
"admin.config.general.app-url.description": "Pingvin Shareで利用できるURL",
|
||||
"admin.config.general.show-home-page": "ホームページを表示する",
|
||||
"admin.config.general.show-home-page.description": "ホームページを表示するかどうか選択",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"ホームページを表示するかどうか選択",
|
||||
"admin.config.general.logo": "ロゴ",
|
||||
"admin.config.general.logo.description": "新しい画像をアップロードしてロゴを変更できます。画像は、PNG形式でアスペクト比が1:1である必要があります。",
|
||||
"admin.config.general.logo.description":
|
||||
"新しい画像をアップロードしてロゴを変更できます。画像は、PNG形式でアスペクト比が1:1である必要があります。",
|
||||
"admin.config.general.logo.placeholder": "画像を選択",
|
||||
"admin.config.email.enable-share-email-recipients": "メールでの共有を有効にする",
|
||||
"admin.config.email.enable-share-email-recipients.description": "メールで共有を送信できるようにするか選択してください。SMTPが有効になっている場合にのみ機能します。",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"メールでの共有を有効にする",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"メールで共有を送信できるようにするか選択してください。SMTPが有効になっている場合にのみ機能します。",
|
||||
"admin.config.email.share-recipients-subject": "宛先への件名",
|
||||
"admin.config.email.share-recipients-subject.description": "メールで共有された相手に送信メールの件名です。",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"メールで共有された相手に送信メールの件名です。",
|
||||
"admin.config.email.share-recipients-message": "宛先への本文",
|
||||
"admin.config.email.share-recipients-message.description": "メールで共有された相手に送信されるメールの本文です。次の変数が利用できます:\n{creator} - 共有作成者のユーザー名\n{shareUrl} - 共有のURL\n{desc} - 共有の説明\n{expires} - 共有の有効期限\n変数は、実際の値によって置き換えられます。",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"メールで共有された相手に送信されるメールの本文です。次の変数が利用できます:\n{creator} - 共有作成者のユーザー名\n{shareUrl} - 共有のURL\n{desc} - 共有の説明\n{expires} - 共有の有効期限\n変数は、実際の値によって置き換えられます。",
|
||||
"admin.config.email.reverse-share-subject": "ファイルリクエストの件名",
|
||||
"admin.config.email.reverse-share-subject.description": "あなたが作成したファイルリクエストリンクからファイルがアップロードされた場合に送信されるメールの件名です。",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"あなたが作成したファイルリクエストリンクからファイルがアップロードされた場合に送信されるメールの件名です。",
|
||||
"admin.config.email.reverse-share-message": "ファイルリクエストの本文",
|
||||
"admin.config.email.reverse-share-message.description": "あなたが作成したファイルリクエストリンクからファイルがアップロードされた場合に送信されるメールの本文です。{shareUrl} は、作成者の名前とURLにより置き換えられます。",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"あなたが作成したファイルリクエストリンクからファイルがアップロードされた場合に送信されるメールの本文です。{shareUrl} は、作成者の名前とURLにより置き換えられます。",
|
||||
"admin.config.email.reset-password-subject": "パスワードリセットの件名",
|
||||
"admin.config.email.reset-password-subject.description": "パスワードリセットのリクエストがされた時に送信されるメールの件名です。",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"パスワードリセットのリクエストがされた時に送信されるメールの件名です。",
|
||||
"admin.config.email.reset-password-message": "パスワードリセットの本文",
|
||||
"admin.config.email.reset-password-message.description": "あなたが作成したファイルリクエストリンクからファイルがアップロードされた場合に送信されるメールの本文です。{url} は、実際のパスワードリセットURLによって置き換えられます。",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"あなたが作成したファイルリクエストリンクからファイルがアップロードされた場合に送信されるメールの本文です。{url} は、実際のパスワードリセットURLによって置き換えられます。",
|
||||
"admin.config.email.invite-subject": "無効な件名",
|
||||
"admin.config.email.invite-subject.description": "管理者がユーザーを招待したときに送信されるメールの件名です。",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"管理者がユーザーを招待したときに送信されるメールの件名です。",
|
||||
"admin.config.email.invite-message": "無効な本文",
|
||||
"admin.config.email.invite-message.description": "管理者がユーザーを招待したときに送信されるメールの本文です。{url} は、招待URLに、{password} は、パスワードに置き換えられます。",
|
||||
"admin.config.email.invite-message.description":
|
||||
"管理者がユーザーを招待したときに送信されるメールの本文です。{url} は、招待URLに、{password} は、パスワードに置き換えられます。",
|
||||
"admin.config.share.allow-registration": "登録を許可する",
|
||||
"admin.config.share.allow-registration.description": "登録を許可するかどうかを選択してください。",
|
||||
"admin.config.share.allow-unauthenticated-shares": "ログインしていない状態での共有を許可する",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "ログインしていないユーザーに共有の作成を許可するかどうかを選択してください。",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"登録を許可するかどうかを選択してください。",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"ログインしていない状態での共有を許可する",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"ログインしていないユーザーに共有の作成を許可するかどうかを選択してください。",
|
||||
"admin.config.share.max-expiration": "有効期限の上限",
|
||||
"admin.config.share.max-expiration.description": "共有に設定可能な有効期限の上限を時間単位で設定できます。0を設定すると、有効期限が無制限になります。",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"共有に設定可能な有効期限の上限を時間単位で設定できます。0を設定すると、有効期限が無制限になります。",
|
||||
"admin.config.share.max-size": "最大ファイルサイズ",
|
||||
"admin.config.share.max-size.description": "最大ファイルサイズ(byte単位)",
|
||||
"admin.config.share.zip-compression-level": "Zip圧縮レベル",
|
||||
"admin.config.share.zip-compression-level.description": "ファイルサイズと圧縮速度のバランスを取るように、レベルを調整できます。有効な値は0~9の間で、0が無圧縮、9で最大限の圧縮となります。 ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"ファイルサイズと圧縮速度のバランスを取るように、レベルを調整できます。有効な値は0~9の間で、0が無圧縮、9で最大限の圧縮となります。 ",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "有効",
|
||||
"admin.config.smtp.enabled.description": "SMTPを有効にするかどうかを選択してください。SMTPサーバーのホスト名、ポート番号、電子メールアドレス、ユーザー名、パスワードが入力されている場合にのみ、有効にしてください。",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"SMTPを有効にするかどうかを選択してください。SMTPサーバーのホスト名、ポート番号、電子メールアドレス、ユーザー名、パスワードが入力されている場合にのみ、有効にしてください。",
|
||||
"admin.config.smtp.host": "ホスト名",
|
||||
"admin.config.smtp.host.description": "SMTPサーバーのホスト名",
|
||||
"admin.config.smtp.port": "ポート番号",
|
||||
@@ -328,43 +400,70 @@ export default {
|
||||
"admin.config.smtp.password.description": "SMTPサーバーのパスワード",
|
||||
"admin.config.smtp.button.test": "テストメールを送信",
|
||||
"admin.config.oauth.allow-registration": "登録を許可する",
|
||||
"admin.config.oauth.allow-registration.description": "ユーザーにソーシャルアカウント経由での登録を許可します",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"ユーザーにソーシャルアカウント経由での登録を許可します",
|
||||
"admin.config.oauth.ignore-totp": "二段階認証を無視する",
|
||||
"admin.config.oauth.ignore-totp.description": "ソーシャルログイン時に二段階認証を無視するかどうかを設定します",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"ソーシャルログイン時に二段階認証を無視するかどうかを設定します",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "GitHubアカウントを使用したログインを許可するかどうかを設定します",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"GitHubアカウントを使用したログインを許可するかどうかを設定します",
|
||||
"admin.config.oauth.github-client-id": "GitHub クライアントID",
|
||||
"admin.config.oauth.github-client-id.description": "GitHub OAuthアプリのクライアントID",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"GitHub OAuthアプリのクライアントID",
|
||||
"admin.config.oauth.github-client-secret": "GitHub クライアントシークレット",
|
||||
"admin.config.oauth.github-client-secret.description": "GitHub OAuthアプリのクライアントシークレット",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"GitHub OAuthアプリのクライアントシークレット",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Googleアカウントを使用したログインを許可するかどうかを設定します",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Googleアカウントを使用したログインを許可するかどうかを設定します",
|
||||
"admin.config.oauth.google-client-id": "Google クライアントID",
|
||||
"admin.config.oauth.google-client-id.description": "Google OAuthアプリのクライアントID",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Google OAuthアプリのクライアントID",
|
||||
"admin.config.oauth.google-client-secret": "Google クライアントシークレット",
|
||||
"admin.config.oauth.google-client-secret.description": "Google OAuthアプリのクライアントシークレット",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Google OAuthアプリのクライアントシークレット",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Microsoftアカウントを使用したログインを許可するかどうかを設定します",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Microsoftアカウントを使用したログインを許可するかどうかを設定します",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoftテナント",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Microsoft OAuthアプリのテナントID\ncommon: 個人のMicrosoftアカウントとMicrosoft Entra IDの職場または学校のアカウントを持つユーザーは、アプリケーションにサインインできます。 \norganizations: Microsoft Entra IDからの職場または学校のアカウントを持つユーザーのみがアプリケーションにサインインできます。\nconsumers: 個人のMicrosoftアカウントを持つユーザーのみがアプリケーションにサインインできます。\nMicrosoft Entraテナントのドメイン名またはGUID形式のテナントID: 特定のMicrosoft Entraテナント (職場または学校のアカウントを持つディレクトリメンバーまたはパーソナルMicrosoftアカウントを持つディレクトリゲスト) からのユーザーのみがアプリケーションにサインインできます。",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Microsoft OAuthアプリのテナントID\ncommon: 個人のMicrosoftアカウントとMicrosoft Entra IDの職場または学校のアカウントを持つユーザーは、アプリケーションにサインインできます。 \norganizations: Microsoft Entra IDからの職場または学校のアカウントを持つユーザーのみがアプリケーションにサインインできます。\nconsumers: 個人のMicrosoftアカウントを持つユーザーのみがアプリケーションにサインインできます。\nMicrosoft Entraテナントのドメイン名またはGUID形式のテナントID: 特定のMicrosoft Entraテナント (職場または学校のアカウントを持つディレクトリメンバーまたはパーソナルMicrosoftアカウントを持つディレクトリゲスト) からのユーザーのみがアプリケーションにサインインできます。",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft クライアントID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Microsoft OAuthアプリのクライアントID",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft クライアントシークレット",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Microsoft OAuthアプリのクライアントシークレット",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Microsoft OAuthアプリのクライアントID",
|
||||
"admin.config.oauth.microsoft-client-secret":
|
||||
"Microsoft クライアントシークレット",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Microsoft OAuthアプリのクライアントシークレット",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Discordアカウントを使用したログインを許可するかどうかを設定します",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Discordアカウントを使用したログインを許可するかどうかを設定します",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord limited server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limit signing in to users in a specific server. Leave it blank to disable.",
|
||||
"admin.config.oauth.discord-client-id": "Discord クライアントID",
|
||||
"admin.config.oauth.discord-client-id.description": "Discord OAuthアプリのクライアントID",
|
||||
"admin.config.oauth.discord-client-secret": "Discord クライアントシークレット",
|
||||
"admin.config.oauth.discord-client-secret.description": "Discord OAuthアプリのクライアントシークレット",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "OpenIDアカウントを使用したログインを許可するかどうかを設定します",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "OpenID OAuthアプリのDiscovery URI",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID クライアントID",
|
||||
"admin.config.oauth.oidc-client-id.description": "OpenID OAuthアプリのクライアントID",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID クライアントシークレット",
|
||||
"admin.config.oauth.oidc-client-secret.description": "OpenID OAuthアプリのクライアントシークレット",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Discord OAuthアプリのクライアントID",
|
||||
"admin.config.oauth.discord-client-secret":
|
||||
"Discord クライアントシークレット",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Discord OAuthアプリのクライアントシークレット",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Whether OpenID Connect login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "ページが見つかりません。",
|
||||
"404.button.home": "ホームに戻る",
|
||||
@@ -374,16 +473,27 @@ export default {
|
||||
"error.button.back": "戻る",
|
||||
"error.msg.default": "問題が発生しました。",
|
||||
"error.msg.access_denied": "認証処理を中止しました、後で再度お試しください。",
|
||||
"error.msg.expired_token": "認証処理に時間がかかりすぎています、後で再度お試しください。",
|
||||
"error.msg.expired_token":
|
||||
"認証処理に時間がかかりすぎています、後で再度お試しください。",
|
||||
"error.msg.invalid_token": "Internal Error",
|
||||
"error.msg.no_user": "この{0} アカウントにリンクしたユーザーが存在しません。",
|
||||
"error.msg.no_email": "この{0} アカウントからメールアドレスを取得出来ません。",
|
||||
"error.msg.already_linked": "この{0} アカウントは、既に別のアカウントにリンクされています。",
|
||||
"error.msg.not_linked": "この{0} アカウントはどのアカウントにもリンクされていません。",
|
||||
"error.msg.no_email":
|
||||
"この{0} アカウントからメールアドレスを取得出来ません。",
|
||||
"error.msg.already_linked":
|
||||
"この{0} アカウントは、既に別のアカウントにリンクされています。",
|
||||
"error.msg.not_linked":
|
||||
"この{0} アカウントはどのアカウントにもリンクされていません。",
|
||||
"error.msg.unverified_account":
|
||||
"This {0} account is unverified, please try again after verification.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"You are not allowed to sign in.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Can not get your user info from this {0} account.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "保存",
|
||||
"common.button.create": "作成",
|
||||
@@ -396,8 +506,10 @@ export default {
|
||||
"common.button.generate": "生成",
|
||||
"common.button.done": "完了",
|
||||
"common.text.link": "リンク",
|
||||
"common.text.navigate-to-link": "Go to the link",
|
||||
"common.text.or": "または",
|
||||
"common.button.go-back": "戻る",
|
||||
"common.button.go-home": "Go home",
|
||||
"common.notify.copied": "リンクをクリップボードにコピーしました",
|
||||
"common.success": "成功",
|
||||
"common.error": "エラー",
|
||||
@@ -407,5 +519,5 @@ export default {
|
||||
"common.error.too-long": "最大{length} 文字である必要があります",
|
||||
"common.error.exact-length": "{length} 文字である必要があります",
|
||||
"common.error.invalid-number": "数字でなければなりません",
|
||||
"common.error.field-required": "これは必須項目です"
|
||||
};
|
||||
"common.error.field-required": "これは必須項目です",
|
||||
};
|
||||
|
||||
453
frontend/src/i18n/translations/ko-KR.ts
Normal file
453
frontend/src/i18n/translations/ko-KR.ts
Normal file
@@ -0,0 +1,453 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "업로드",
|
||||
"navbar.signin": "로그인",
|
||||
"navbar.home": "홈",
|
||||
"navbar.signup": "계정 만들기",
|
||||
"navbar.links.shares": "내 공유",
|
||||
"navbar.links.reverse": "역방향 공유",
|
||||
"navbar.avatar.account": "내 계정",
|
||||
"navbar.avatar.admin": "관리자",
|
||||
"navbar.avatar.signout": "로그아웃",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "<h>직접 호스팅</h>하는 파일 공유 플랫폼.",
|
||||
"home.description":
|
||||
"정말 WeTransfer와 같은 제3자에게 개인 파일을 맡기고 싶으세요?",
|
||||
"home.bullet.a.name": "직접 호스팅",
|
||||
"home.bullet.a.description":
|
||||
"자신의 컴퓨터에서 Pingvin Share를 호스팅하세요.",
|
||||
"home.bullet.b.name": "개인 정보 보호",
|
||||
"home.bullet.b.description":
|
||||
"당신의 파일은 당신의 것이므로 절대로 제3자의 손에 들어가서는 안 됩니다.",
|
||||
"home.bullet.c.name": "귀찮은 파일 크기 제한 없음",
|
||||
"home.bullet.c.description":
|
||||
"원하는 만큼 큰 파일을 업로드하세요. 오직 여러분의 하드 디스크만이 한계가 될 것입니다.",
|
||||
"home.button.start": "시작하기",
|
||||
"home.button.source": "소스 코드",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "다시 오신 것을 환영합니다!",
|
||||
"signin.description": "아직 계정이 없으신가요?",
|
||||
"signin.button.signup": "계정 만들기",
|
||||
"signin.input.email-or-username": "이메일 또는 사용자 이름",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"당신의 이메일 또는 사용자 이름",
|
||||
"signin.input.password": "비밀번호",
|
||||
"signin.input.password.placeholder": "당신의 비밀번호",
|
||||
"signin.button.submit": "로그인",
|
||||
"signIn.notify.totp-required.title": "2단계 인증이 필요합니다",
|
||||
"signIn.notify.totp-required.description": "2단계 인증 코드를 입력해주세요",
|
||||
"signIn.oauth.or": "또는",
|
||||
"signIn.oauth.github": "깃허브",
|
||||
"signIn.oauth.google": "구글",
|
||||
"signIn.oauth.microsoft": "마이크로소프트",
|
||||
"signIn.oauth.discord": "디스코드",
|
||||
"signIn.oauth.oidc": "오픈ID",
|
||||
// END /auth/signin
|
||||
// /auth/signup
|
||||
"signup.title": "계정 만들기",
|
||||
"signup.description": "이미 계정이 있으신가요?",
|
||||
"signup.button.signin": "로그인",
|
||||
"signup.input.username": "사용자 이름",
|
||||
"signup.input.username.placeholder": "당신의 사용지 이름",
|
||||
"signup.input.email": "이메일",
|
||||
"signup.input.email.placeholder": "당신의 이메일",
|
||||
"signup.button.submit": "시작하기",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "TOTP 인증",
|
||||
"totp.button.signIn": "로그인",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "비밀번호를 잊으셨나요?",
|
||||
"resetPassword.description": "비밀번호를 재설정하려면 이메일을 입력하세요.",
|
||||
"resetPassword.notify.success":
|
||||
"이메일이 존재한다면 비밀번호를 재설정하는 링크를 포함한 메시지가 발송되었습니다.",
|
||||
"resetPassword.button.back": "로그인 페이지로 돌아가기",
|
||||
"resetPassword.text.resetPassword": "비밀번호 재설정",
|
||||
"resetPassword.text.enterNewPassword": "새로운 비밀번호를 입력하세요",
|
||||
"resetPassword.input.password": "새로운 비밀번호",
|
||||
"resetPassword.notify.passwordReset":
|
||||
"비밀번호가 성공적으로 재설정되었습니다.",
|
||||
// /account
|
||||
"account.title": "내 계정",
|
||||
"account.card.info.title": "계정 정보",
|
||||
"account.card.info.username": "사용자 이름",
|
||||
"account.card.info.email": "이메일",
|
||||
"account.notify.info.success": "계정이 업데이트되었습니다.",
|
||||
"account.card.password.title": "비밀번호",
|
||||
"account.card.password.old": "기존 비밀번호",
|
||||
"account.card.password.new": "새로운 비밀번호",
|
||||
"account.card.password.noPasswordSet":
|
||||
"비밀번호를 설정하지 않았습니다. 이메일과 비밀번호로 로그인하려면 비밀번호를 설정해야 합니다.",
|
||||
"account.notify.password.success": "비밀번호 변경 완료",
|
||||
"account.card.oauth.title": "소셜 로그인",
|
||||
"account.card.oauth.github": "깃허브",
|
||||
"account.card.oauth.google": "구글",
|
||||
"account.card.oauth.microsoft": "마이크로소프트",
|
||||
"account.card.oauth.discord": "디스코드",
|
||||
"account.card.oauth.oidc": "오픈ID",
|
||||
"account.card.oauth.link": "연결",
|
||||
"account.card.oauth.unlink": "연결 해제",
|
||||
"account.card.oauth.unlinked": "연결 해제",
|
||||
"account.modal.unlink.title": "계정 연결 해제",
|
||||
"account.modal.unlink.description":
|
||||
"소셜 계정 연결을 해제하면 사용자 이름과 비밀번호를 기억하지 못할 경우 계정을 잃을 수 있습니다.",
|
||||
"account.notify.oauth.unlinked.success": "연결 해제됨",
|
||||
"account.card.security.title": "보안",
|
||||
"account.card.security.totp.enable.description":
|
||||
"TOTP 활성화를 시작하려면 현재 비밀번호를 입력하세요.",
|
||||
"account.card.security.totp.disable.description":
|
||||
"TOTP 를 비활성화 하려면 비밀번호를 입력하세요.",
|
||||
"account.card.security.totp.button.start": "시작",
|
||||
"account.modal.totp.title": "TOTP 활성화",
|
||||
"account.modal.totp.step1": "1단계: 인증기를 추가하세요.",
|
||||
"account.modal.totp.step2": "2 단계: 코드 유효성 검사",
|
||||
"account.modal.totp.enterManually": "직접 입력",
|
||||
"account.modal.totp.code": "코드",
|
||||
"common.button.clickToCopy": "클릭하여 복사",
|
||||
"account.modal.totp.verify": "인증",
|
||||
"account.notify.totp.disable": "TOTP가 비활성화되었습니다.",
|
||||
"account.notify.totp.enable": "TOTP가 활성화 되었습니다.",
|
||||
"account.card.language.title": "언어",
|
||||
"account.card.language.description":
|
||||
"이 프로젝트는 커뮤니티에 의해 번역됩니다. 일부 언어는 불완전할 수 있습니다.",
|
||||
"account.card.color.title": "배경 설정",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "어두운 배경",
|
||||
"account.theme.light": "밝은 배경",
|
||||
"account.theme.system": "시스템",
|
||||
"account.button.delete": "계정 삭제",
|
||||
"account.modal.delete.title": "계정 삭제",
|
||||
"account.modal.delete.description":
|
||||
"정말로 활성화된 모든 공유를 포함하여 계정을 삭제하시겠습니까?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "내 공유",
|
||||
"account.shares.title.empty": "이곳은 아무것도 없는것 같아요 👀",
|
||||
"account.shares.description.empty": "당신은 아무것도 공유한것이 없어요.",
|
||||
"account.shares.button.create": "파일 업로드",
|
||||
"account.shares.info.title": "공유 정보",
|
||||
"account.shares.table.id": "ID",
|
||||
"account.shares.table.name": "이름",
|
||||
"account.shares.table.description": "설명",
|
||||
"account.shares.table.visitors": "방문자",
|
||||
"account.shares.table.expiresAt": "만료일",
|
||||
"account.shares.table.createdAt": "생성일",
|
||||
"account.shares.table.size": "크기",
|
||||
"account.shares.modal.share-informations": "공유 정보",
|
||||
"account.shares.modal.share-link": "공유 링크",
|
||||
"account.shares.modal.delete.title": "공유 삭제 {share}",
|
||||
"account.shares.modal.delete.description":
|
||||
"정말로 이 공유를 삭제하시겠습니까?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "역방향 공유",
|
||||
"account.reverseShares.description":
|
||||
"역방향 공유를 통해 외부 사용자가 공유를 생성할 수 있는 고유 URL을 생성할 수 있습니다.",
|
||||
"account.reverseShares.title.empty": "이곳은 아무것도 없는것 같아요 👀",
|
||||
"account.reverseShares.description.empty": "당신은 역방향 공유한것이 없어요.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "새로운 역방향 공유 생성",
|
||||
"account.reverseShares.modal.expiration.label": "만료일",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "분",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "분",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "시",
|
||||
"account.reverseShares.modal.expiration.hour-plural": "시",
|
||||
"account.reverseShares.modal.expiration.day-singular": "일",
|
||||
"account.reverseShares.modal.expiration.day-plural": "일",
|
||||
"account.reverseShares.modal.expiration.week-singular": "주",
|
||||
"account.reverseShares.modal.expiration.week-plural": "주",
|
||||
"account.reverseShares.modal.expiration.month-singular": "개월",
|
||||
"account.reverseShares.modal.expiration.month-plural": "개월",
|
||||
"account.reverseShares.modal.expiration.year-singular": "년",
|
||||
"account.reverseShares.modal.expiration.year-plural": "년",
|
||||
"account.reverseShares.modal.max-size.label": "최대 공유 크기",
|
||||
"account.reverseShares.modal.send-email": "이메일 알림 보내기",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"이 역방향 공유 링크를 사용하여 공유가 생성되면 이메일 알림을 보냅니다.",
|
||||
"account.reverseShares.modal.max-use.label": "공유 생성 제한",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"이 URL을 사용하여 공유를 생성할 수 있는 최대 횟수입니다.",
|
||||
"account.reverseShare.never-expires": "이 역공유 링크는 만료되지 않습니다.",
|
||||
"account.reverseShare.expires-on":
|
||||
"이 역방향 공유는 {expiration} 에 만료됩니다.",
|
||||
"account.reverseShares.table.no-shares": "아직 생성된 공유가 없습니다.",
|
||||
"account.reverseShares.table.count.singular": "공유",
|
||||
"account.reverseShares.table.count.plural": "공유",
|
||||
"account.reverseShares.table.shares": "공유",
|
||||
"account.reverseShares.table.remaining": "남은 링크 사용 횟수",
|
||||
"account.reverseShares.table.max-size": "최대 공유 크기",
|
||||
"account.reverseShares.table.expires": "만료 날짜",
|
||||
"account.reverseShares.modal.reverse-share-link": "역방향 공유 링크",
|
||||
"account.reverseShares.modal.delete.title": "역방향 공유 삭제",
|
||||
"account.reverseShares.modal.delete.description": "이 역방향 공유를 삭제하시겠습니까? 삭제하면 관련 공유도 삭제됩니다.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "관리자",
|
||||
"admin.button.users": "사용자 관리",
|
||||
"admin.button.shares": "공유 관리",
|
||||
"admin.button.config": "구성",
|
||||
"admin.version": "버전",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "사용자 관리",
|
||||
"admin.users.table.username": "사용자 이름",
|
||||
"admin.users.table.email": "이메일",
|
||||
"admin.users.table.admin": "관리자",
|
||||
"admin.users.edit.update.title": "{username} 사용자 업데이트",
|
||||
"admin.users.edit.update.admin-privileges": "Admin Privilege",
|
||||
"admin.users.edit.update.change-password.title": "비밀번호 변경",
|
||||
"admin.users.edit.update.change-password.field": "새로운 비밀번호",
|
||||
"admin.users.edit.update.change-password.button": "새 비밀번호 저장",
|
||||
"admin.users.edit.update.notify.password.success": "비밀번호 변경 완료",
|
||||
"admin.users.edit.delete.title": "{username} 사용자 삭제",
|
||||
"admin.users.edit.delete.description": "이 사용자의 모든 공유를 삭제하시겠습니까?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "사용자 생성",
|
||||
"admin.users.modal.create.username": "사용자 이름",
|
||||
"admin.users.modal.create.email": "이메일",
|
||||
"admin.users.modal.create.password": "비밀번호",
|
||||
"admin.users.modal.create.manual-password": "수동 암호 설정",
|
||||
"admin.users.modal.create.manual-password.description": "선택하지 않으면 사용자는 암호를 설정할 수 있는 링크가 포함된 이메일을 받게 됩니다.",
|
||||
"admin.users.modal.create.admin": "Admin Privilege",
|
||||
"admin.users.modal.create.admin.description": "이 옵션을 선택하면 사용자는 관리 패널에 액세스할 수 있습니다.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "공유 관리",
|
||||
"admin.shares.table.id": "공유 ID",
|
||||
"admin.shares.table.username": "만든이",
|
||||
"admin.shares.table.visitors": "방문자",
|
||||
"admin.shares.table.expires": "만료일",
|
||||
"admin.shares.edit.delete.title": "공유 삭제 {id}",
|
||||
"admin.shares.edit.delete.description": "정말로 이 공유를 삭제하시겠습니까?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "업로드",
|
||||
"upload.notify.generic-error": "공유를 완료하는 동안 오류가 발생했습니다.",
|
||||
"upload.notify.count-failed": "{count}개의 파일을 업로드하지 못했습니다. 다시 시도하세요.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "파일 업로드",
|
||||
"upload.dropzone.description": "파일을 여기로 드래그&드랍하여 파일 업로드를 시작합니다. {maxSize} 를 초과하지 않는 파일만 업로드할 수 있습니다.",
|
||||
"upload.dropzone.notify.file-too-big": "파일이 {maxSize} 의 최대 공유 크기를 초과합니다.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "이름",
|
||||
"upload.filelist.size": "크기",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "공유 생성",
|
||||
"upload.modal.link.error.invalid": "문자, 숫자, 밑줄 및 하이픈만 포함할 수 있습니다",
|
||||
"upload.modal.link.error.taken": "이미 사용 중인 링크입니다",
|
||||
"upload.modal.not-signed-in": "로그인하지 않았습니다",
|
||||
"upload.modal.not-signed-in-description": "공유를 수동으로 삭제하고 방문자 수를 볼 수 없습니다.",
|
||||
"upload.modal.expires.never": "절대 안 함",
|
||||
"upload.modal.expires.never-long": "만료 없음",
|
||||
"upload.modal.expires.error.too-long": "만료가 {max} 의 최대 만료일을 초과합니다.",
|
||||
"upload.modal.link.label": "링크",
|
||||
"upload.modal.expires.label": "만료일",
|
||||
"upload.modal.expires.minute-singular": "분",
|
||||
"upload.modal.expires.minute-plural": "분",
|
||||
"upload.modal.expires.hour-singular": "시",
|
||||
"upload.modal.expires.hour-plural": "시",
|
||||
"upload.modal.expires.day-singular": "일",
|
||||
"upload.modal.expires.day-plural": "일",
|
||||
"upload.modal.expires.week-singular": "주",
|
||||
"upload.modal.expires.week-plural": "주",
|
||||
"upload.modal.expires.month-singular": "개월",
|
||||
"upload.modal.expires.month-plural": "개월",
|
||||
"upload.modal.expires.year-singular": "년",
|
||||
"upload.modal.expires.year-plural": "년",
|
||||
"upload.modal.accordion.name-and-description.title": "이름과 설명",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "이름",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder": "공유를 받을 사람에게 메모",
|
||||
"upload.modal.accordion.email.title": "받는 사람 메일 주소",
|
||||
"upload.modal.accordion.email.placeholder": "메일 주소 입력",
|
||||
"upload.modal.accordion.email.invalid-email": "이메일 주소가 틀립니다",
|
||||
"upload.modal.accordion.security.title": "보안 설정",
|
||||
"upload.modal.accordion.security.password.label": "비밀번호로 보호",
|
||||
"upload.modal.accordion.security.password.placeholder": "비밀번호 없음",
|
||||
"upload.modal.accordion.security.max-views.label": "최대 보기 횟수",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "제한 없음",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "이 공유 만료되지 않습니다.",
|
||||
"upload.modal.completed.expires-on": "이 공유는 {expiration} 에 만료됩니다.",
|
||||
"upload.modal.completed.share-ready": "공유 준비",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "공유 {shareId}",
|
||||
"share.description": "내가 당신과 공유한 것을 보세요!",
|
||||
"share.error.visitor-limit-exceeded.title": "방문자 제한 초과",
|
||||
"share.error.visitor-limit-exceeded.description": "The visitor limit from this share has been exceeded.",
|
||||
"share.error.removed.title": "공유가 삭제됨",
|
||||
"share.error.not-found.title": "공유를 찾을 수 없습니다.",
|
||||
"share.error.not-found.description": "당신이 찾는 공유는 존재하지 않습니다.",
|
||||
"share.modal.password.title": "비밀번호 필요",
|
||||
"share.modal.password.description": "이 공유에 액세스하려면 공유의 암호를 입력하십시오.",
|
||||
"share.modal.password": "비밀번호",
|
||||
"share.modal.error.invalid-password": "잘못된 비밀번호",
|
||||
"share.button.download-all": "모두 다운로드",
|
||||
"share.notify.download-all-preparing": "공유가 준비 중입니다. 잠시 후에 다시 시도하십시오.",
|
||||
"share.modal.file-link": "파일 링크",
|
||||
"share.table.name": "이름",
|
||||
"share.table.size": "크기",
|
||||
"share.modal.file-preview.error.not-supported.title": "미리보기는 지원되지 않습니다",
|
||||
"share.modal.file-preview.error.not-supported.description": "이 파일 형식의 미리보기가 지원되지 않습니다. 파일을 다운로드하여 확인하십시오.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "수정 {shareId}",
|
||||
"share.edit.append-upload": "파일 추가",
|
||||
"share.edit.notify.generic-error": "공유를 완료하는 동안 오류가 발생했습니다.",
|
||||
"share.edit.notify.save-success": "공유가 업데이트 되었습니다.",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "구성",
|
||||
"admin.config.category.general": "일반",
|
||||
"admin.config.category.share": "공유",
|
||||
"admin.config.category.email": "이메일",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "소셜 로그인",
|
||||
"admin.config.general.app-name": "앱 이름",
|
||||
"admin.config.general.app-name.description": "Name of the application",
|
||||
"admin.config.general.app-url": "앱 URL",
|
||||
"admin.config.general.app-url.description": "Pingvin Share를 사용할 수 있는 URL",
|
||||
"admin.config.general.show-home-page": "홈 페이지 표시",
|
||||
"admin.config.general.show-home-page.description": "홈 페이지를 표시할지 여부를 점검하십시오.",
|
||||
"admin.config.general.logo": "로고",
|
||||
"admin.config.general.logo.description": "새 이미지를 업로드하여 로고를 변경하십시오. 이미지는 PNG여야 하며 1:1 비율이어야 합니다.",
|
||||
"admin.config.general.logo.placeholder": "이미지 선택",
|
||||
"admin.config.email.enable-share-email-recipients": "메일 수신 허용",
|
||||
"admin.config.email.enable-share-email-recipients.description": "메일이 수신자를 공유하도록 허용할지 여부. SMTP를 사용 가능으로 설정한 경우에만 이 옵션을 사용 가능으로 설정합니다.",
|
||||
"admin.config.email.share-recipients-subject": "공유 제목",
|
||||
"admin.config.email.share-recipients-subject.description": "공유 수신자에게 전송되는 이메일의 제목입니다.",
|
||||
"admin.config.email.share-recipients-message": "수신자 메시지 공유",
|
||||
"admin.config.email.share-recipients-message.description": "공유 수신자에게 보내는 메시지입니다. 사용 가능한 변수:\n {creator} - 공유 작성자의 사용자 이름\n {shareUrl} - 공유의 URL\n {desc} - 공유에 대한 설명\n {expires} - 공유 만료일\n 변수는 실제 값으로 대체됩니다.",
|
||||
"admin.config.email.reverse-share-subject": "역공유 제목",
|
||||
"admin.config.email.reverse-share-subject.description": "누군가 당신이 공유한 역방향 공유 링크를 사용하여 공유를 생성했을 때 전송되는 이메일의 제목입니다.",
|
||||
"admin.config.email.reverse-share-message": "역공유 메시지",
|
||||
"admin.config.email.reverse-share-message.description": "누군가 귀하의 역방향 공유 링크를 사용하여 공유를 생성하면 전송되는 메시지입니다.. {shareUrl} 은 작성자 이름 및 공유 URL로 대체됩니다.",
|
||||
"admin.config.email.reset-password-subject": "비밀번호 재설정 제목",
|
||||
"admin.config.email.reset-password-subject.description": "사용자가 암호 재설정을 요청할 때 전송되는 메일의 제목입니다.",
|
||||
"admin.config.email.reset-password-message": "비밀번호 재설정 메시지",
|
||||
"admin.config.email.reset-password-message.description": "사용자가 비밀번호 재설정을 요청할 때 전송되는 메시지입니다. {url} 은 비밀번호 재설정 URL로 대체됩니다.",
|
||||
"admin.config.email.invite-subject": "초대 제목",
|
||||
"admin.config.email.invite-subject.description": "관리자가 사용자를 초대할 때 전송되는 이메일의 제목입니다.",
|
||||
"admin.config.email.invite-message": "초대 메시지",
|
||||
"admin.config.email.invite-message.description": "관리자가 사용자를 초대하면 전송되는 메시지입니다. {url} 은 초대 URL로, {password} 는 비밀번호로 대체됩니다.",
|
||||
"admin.config.share.allow-registration": "가입 허용",
|
||||
"admin.config.share.allow-registration.description": "등록 가능 여부",
|
||||
"admin.config.share.allow-unauthenticated-shares": "인증되지 않은 공유 허용",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "인증되지 않은 사용자가 공유를 생성할 수 있는지 여부",
|
||||
"admin.config.share.max-expiration": "최대 만료일",
|
||||
"admin.config.share.max-expiration.description": "최대 공유 만료 시간입니다. 만료 기간을 설정하지 않는경우 0으로 설정합니다.",
|
||||
"admin.config.share.max-size": "최대 크기",
|
||||
"admin.config.share.max-size.description": "공유 최대 크기 - 바이트",
|
||||
"admin.config.share.zip-compression-level": "압축 레벨",
|
||||
"admin.config.share.zip-compression-level.description": "파일 크기와 압축 속도 간의 균형을 맞추도록 레벨을 조정합니다. 유효한 값의 범위는 0에서 9까지이며, 0은 압축되지 않고 9는 최대 압축입니다. ",
|
||||
"admin.config.share.chunk-size": "청크 크기",
|
||||
"admin.config.share.chunk-size.description": "업로드할 청크 크기(바이트 단위)를 조정하여 인터넷 연결에 따라 효율성과 신뢰성의 균형을 유지합니다. 더 작은 청크는 불안정한 연결에 대한 성공률을 향상시킬 수 있고, 더 큰 청크는 안정적인 연결에 대한 업로드 속도를 높일 수 있습니다.",
|
||||
"admin.config.smtp.enabled": "활성화됨",
|
||||
"admin.config.smtp.enabled.description": "SMTP 사용 여부 SMTP 서버의 호스트, 포트, 전자 메일, 사용자 및 암호를 입력한 경우에만 true로 설정합니다.",
|
||||
"admin.config.smtp.host": "호스트",
|
||||
"admin.config.smtp.host.description": "SMTP 서버의 호스트",
|
||||
"admin.config.smtp.port": "포트",
|
||||
"admin.config.smtp.port.description": "SMTP 서버 포트",
|
||||
"admin.config.smtp.email": "이메일",
|
||||
"admin.config.smtp.email.description": "전자 메일을 보낸 전자 메일 주소",
|
||||
"admin.config.smtp.username": "사용자 이름",
|
||||
"admin.config.smtp.username.description": "SMTP 사용자 이름, 서버 비밀번호",
|
||||
"admin.config.smtp.password": "비밀번호",
|
||||
"admin.config.smtp.password.description": "SMTP 서버 비밀번호",
|
||||
"admin.config.smtp.button.test": "테스트 이메일 보내기",
|
||||
"admin.config.oauth.allow-registration": "가입 허용",
|
||||
"admin.config.oauth.allow-registration.description": "사용자가 소셜 로그인을 통해 등록할 수 있도록 허용",
|
||||
"admin.config.oauth.ignore-totp": "TOTP 무시",
|
||||
"admin.config.oauth.ignore-totp.description": "사용자가 소셜 로그인을 사용하는 경우 TOTP를 무시할 것인지 여부",
|
||||
"admin.config.oauth.github-enabled": "깃허브",
|
||||
"admin.config.oauth.github-enabled.description": "깃허브 로그인 사용 여부",
|
||||
"admin.config.oauth.github-client-id": "GitHub 클라이언트 ID",
|
||||
"admin.config.oauth.github-client-id.description": "GitHub OAuth 앱의 클라이언트 ID",
|
||||
"admin.config.oauth.github-client-secret": "GitHub 클라이언트 secret",
|
||||
"admin.config.oauth.github-client-secret.description": "GitHub OAuth 앱의 클라이언트 secret",
|
||||
"admin.config.oauth.google-enabled": "구글",
|
||||
"admin.config.oauth.google-enabled.description": "구글 로그인 활성화 여부",
|
||||
"admin.config.oauth.google-client-id": "Google 클라이언트 ID",
|
||||
"admin.config.oauth.google-client-id.description": "Google OAuth 앱의 클라이언트 ID",
|
||||
"admin.config.oauth.google-client-secret": "Google 클라이언트 secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Google OAuth 앱의 클라이언트 secret",
|
||||
"admin.config.oauth.microsoft-enabled": "마이크로소프트",
|
||||
"admin.config.oauth.microsoft-enabled.description": "마이크로소프트 로그인 사용 여부",
|
||||
"admin.config.oauth.microsoft-tenant": "마이크로소프트 테넌트",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Microsoft OAuth 앱의 테넌트 ID\n공통: Microsoft 개인 계정과 Microsoft Entra ID의 직장 또는 학교 계정을 모두 가진 사용자는 응용 프로그램에 로그인할 수 있습니다. 조직: Microsoft Entra ID의 직장 또는 학교 계정을 가진 사용자만 응용 프로그램에 로그인할 수 있습니다.\n소비자: 개인 마이크로소프트 계정을 가진 사용자만 애플리케이션에 로그인할 수 있습니다.\nMicrosoft Entra 테넌트의 도메인 이름 또는 GUID 형식의 테넌트 ID: 특정 Microsoft Entra 테넌트의 사용자(직장 또는 학교 계정을 가진 디렉토리 구성원 또는 개인 Microsoft 계정을 가진 디렉토리 게스트)만 응용 프로그램에 로그인할 수 있습니다.",
|
||||
"admin.config.oauth.microsoft-client-id": "마이크로소프트 클라이언트 ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Microsoft OAuth 앱의 클라이언트 ID",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft 클라이언트 secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Microsoft OAuth 앱의 클라이언트 비밀",
|
||||
"admin.config.oauth.discord-enabled": "디스코드",
|
||||
"admin.config.oauth.discord-enabled.description": "Discord 로그인 활성화 여부",
|
||||
"admin.config.oauth.discord-limited-guild": "디스코드 제한 서버 ID",
|
||||
"admin.config.oauth.discord-limited-guild.description": "특정 서버의 사용자로 로그인을 제한합니다. 사용하지 않으려면 비워 둡니다.",
|
||||
"admin.config.oauth.discord-client-id": "디스코드 클라이언트 ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Discord OAuth 앱의 클라이언트 ID",
|
||||
"admin.config.oauth.discord-client-secret": "Discord 클라이언트 secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Discord OAuth 앱의 클라이언트 secret",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID 연결",
|
||||
"admin.config.oauth.oidc-enabled.description": "OpenID Connect 로그인 사용 여부",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID 토큰의 Username claim 입니다. 이 구성이 무엇인지 모르면 비워 둡니다.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect 클라이언트 ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "OpenID Connect OAuth 앱의 클라이언트 ID",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID 클라이언트 secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "OpenID Connect OAuth 앱의 클라이언트 secret",
|
||||
// 404
|
||||
"404.description": "이런, 이 페이지는 존재하지 않습니다.",
|
||||
"404.button.home": "나를 집으로 데려다 줘",
|
||||
// error
|
||||
"error.title": "에러",
|
||||
"error.description": "이런!",
|
||||
"error.button.back": "뒤로 가기",
|
||||
"error.msg.default": "문제가 발생했습니다",
|
||||
"error.msg.access_denied": "인증 프로세스가 취소되었습니다. 다시 시도하십시오.",
|
||||
"error.msg.expired_token": "인증 절차가 너무 오래 걸렸습니다. 다시 시도하십시오.",
|
||||
"error.msg.invalid_token": "내부 오류",
|
||||
"error.msg.no_user": "{0} 계정에 연결된 사용자가 없습니다.",
|
||||
"error.msg.no_email": "이 {0} 계정에서 메일 주소를 가져올 수 없습니다.",
|
||||
"error.msg.already_linked": "이 {0} 계정은 이미 다른 계정에 연결되어 있습니다.",
|
||||
"error.msg.not_linked": "이 {0} 계정은 아직 어떤 계정에도 연결되지 않았습니다.",
|
||||
"error.msg.unverified_account": "이 {0} 계정은 확인되지 않았습니다. 확인 후 다시 시도하십시오.",
|
||||
"error.msg.discord_guild_permission_denied": "로그인할 수 없습니다.",
|
||||
"error.msg.cannot_get_user_info": "이 {0} 계정에서 사용자 정보를 가져올 수 없습니다",
|
||||
"error.param.provider_github": "깃허브",
|
||||
"error.param.provider_google": "구글",
|
||||
"error.param.provider_microsoft": "마이크로소프트",
|
||||
"error.param.provider_discord": "디스코드",
|
||||
"error.param.provider_oidc": "OpenID 연결",
|
||||
// Common translations
|
||||
"common.button.save": "저장",
|
||||
"common.button.create": "새로 만들기",
|
||||
"common.button.submit": "제출",
|
||||
"common.button.delete": "삭제",
|
||||
"common.button.cancel": "취소",
|
||||
"common.button.confirm": "확인",
|
||||
"common.button.disable": "비활성화",
|
||||
"common.button.share": "공유",
|
||||
"common.button.generate": "생성",
|
||||
"common.button.done": "완료",
|
||||
"common.text.link": "링크",
|
||||
"common.text.navigate-to-link": "링크로 이동",
|
||||
"common.text.or": "또는",
|
||||
"common.button.go-back": "뒤로 가기",
|
||||
"common.button.go-home": "첫 페이지",
|
||||
"common.notify.copied": "당신의 링크가 클립보드에 복사되었습니다.",
|
||||
"common.success": "성공",
|
||||
"common.error": "에러",
|
||||
"common.error.unknown": "알 수 없는 오류가 발생했습니다.",
|
||||
"common.error.invalid-email": "이메일 주소가 틀립니다",
|
||||
"common.error.too-short": "최소 {length} 자 이상이어야 합니다",
|
||||
"common.error.too-long": "최대 {length} 자 까지 입력가능합니다.",
|
||||
"common.error.exact-length": "{length} 자 이어야 합니다.",
|
||||
"common.error.invalid-number": "숫자만 가능합니다.",
|
||||
"common.error.field-required": "이 필드는 필수입니다"
|
||||
};
|
||||
@@ -1,39 +1,44 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "Verzenden",
|
||||
"navbar.upload": "Delen",
|
||||
"navbar.signin": "Aanmelden",
|
||||
"navbar.home": "Startpagina",
|
||||
"navbar.signup": "Registreren",
|
||||
"navbar.links.shares": "Mijn gedeelde bestanden",
|
||||
"navbar.links.reverse": "Reverse shares",
|
||||
"navbar.links.reverse": "Omgekeerd delen",
|
||||
"navbar.avatar.account": "Mijn account",
|
||||
"navbar.avatar.admin": "Beheer",
|
||||
"navbar.avatar.signout": "Afmelden",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "Een <h>zelfgehost</h> platform voor het delen van bestanden.",
|
||||
"home.description": "Wil je echt je persoonlijke bestanden geven aan derden zoals WeTransfer?",
|
||||
"home.bullet.a.name": "Zelf-gehost",
|
||||
"home.description":
|
||||
"Wil je echt je persoonlijke bestanden geven aan derden zoals WeTransfer?",
|
||||
"home.bullet.a.name": "Zelfgehost",
|
||||
"home.bullet.a.description": "Host Pingvin Share op uw eigen machine.",
|
||||
"home.bullet.b.name": "Privacy",
|
||||
"home.bullet.b.description": "Uw bestanden zijn van u en mogen nooit in handen komen van derden.",
|
||||
"home.bullet.b.description":
|
||||
"Uw bestanden zijn van u en mogen nooit in handen komen van derden.",
|
||||
"home.bullet.c.name": "Geen vervelende limiet voor bestandsgrootte",
|
||||
"home.bullet.c.description": "Upload zo grote bestanden als je wilt. Alleen je harde schijf is je limiet.",
|
||||
"home.bullet.c.description":
|
||||
"Upload zo grote bestanden als je wilt. Alleen je harde schijf is je limiet.",
|
||||
"home.button.start": "Aan de slag",
|
||||
"home.button.source": "Bron code",
|
||||
"home.button.source": "Broncode",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "Welkom terug",
|
||||
"signin.description": "Heeft u nog geen account?",
|
||||
"signin.button.signup": "Registreren",
|
||||
"signin.input.email-or-username": "E-mailadres of gebruikersnaam",
|
||||
"signin.input.email-or-username.placeholder": "Uw e-mailadres of gebruikersnaam",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"Uw e-mailadres of gebruikersnaam",
|
||||
"signin.input.password": "Wachtwoord",
|
||||
"signin.input.password.placeholder": "Uw wachtwoord",
|
||||
"signin.button.submit": "Aanmelden",
|
||||
"signIn.notify.totp-required.title": "Tweestapsverificatie vereist",
|
||||
"signIn.notify.totp-required.description": "Voer uw tweestapsverificatiecode in",
|
||||
"signIn.oauth.or": "OR",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Voer uw tweestapsverificatiecode in",
|
||||
"signIn.oauth.or": "OF",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
@@ -51,64 +56,73 @@ export default {
|
||||
"signup.button.submit": "Laten we beginnen",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "TOTP Authentication",
|
||||
"totp.button.signIn": "Sign in",
|
||||
"totp.title": "TOTP Authenticatie",
|
||||
"totp.button.signIn": "Aanmelden",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Wachtwoord vergeten?",
|
||||
"resetPassword.description": "Voer uw e-mailadres in om uw wachtwoord opnieuw in te stellen.",
|
||||
"resetPassword.notify.success": "Een e-mail is verzonden met een link om uw wachtwoord te resetten.",
|
||||
"resetPassword.description":
|
||||
"Voer uw e-mailadres in om uw wachtwoord opnieuw in te stellen.",
|
||||
"resetPassword.notify.success":
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.button.back": "Terug naar login pagina",
|
||||
"resetPassword.text.resetPassword": "Wachtwoord opnieuw instellen",
|
||||
"resetPassword.text.enterNewPassword": "Voer uw nieuwe wachtwoord in",
|
||||
"resetPassword.input.password": "Nieuw wachtwoord",
|
||||
"resetPassword.notify.passwordReset": "Uw wachtwoord is met succes opnieuw ingesteld.",
|
||||
"resetPassword.notify.passwordReset":
|
||||
"Uw wachtwoord is met succes opnieuw ingesteld.",
|
||||
// /account
|
||||
"account.title": "Mijn account",
|
||||
"account.card.info.title": "Account informatie",
|
||||
"account.card.info.title": "Accountinformatie",
|
||||
"account.card.info.username": "Gebruikersnaam",
|
||||
"account.card.info.email": "E-mailadres",
|
||||
"account.notify.info.success": "Account succesvol bijgewerkt",
|
||||
"account.card.password.title": "Wachtwoord",
|
||||
"account.card.password.old": "Oud wachtwoord",
|
||||
"account.card.password.old": "Oude wachtwoord",
|
||||
"account.card.password.new": "Nieuw wachtwoord",
|
||||
"account.card.password.noPasswordSet": "You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.notify.password.success": "Wachtwoord succesvol gewijzigd",
|
||||
"account.card.password.noPasswordSet":
|
||||
"U hebt nog geen wachtwoord ingesteld. Stel deze eerst in als u via email wilt inloggen.",
|
||||
"account.notify.password.success": "Wachtwoord succesvol gewijzigd!",
|
||||
"account.card.oauth.title": "Social login",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "Link",
|
||||
"account.card.oauth.unlink": "Unlink",
|
||||
"account.card.oauth.unlinked": "Unlinked",
|
||||
"account.modal.unlink.title": "Unlink account",
|
||||
"account.modal.unlink.description": "Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.notify.oauth.unlinked.success": "Unlinked successfully",
|
||||
"account.card.oauth.link": "Koppelen",
|
||||
"account.card.oauth.unlink": "Ontkoppel",
|
||||
"account.card.oauth.unlinked": "Niet-gekoppeld",
|
||||
"account.modal.unlink.title": "Ontkoppel account",
|
||||
"account.modal.unlink.description":
|
||||
"Het ontkoppelen van uw sociale accounts kan leiden tot verlies van uw account. Vergeet uw gebruikersnaam en wachtwoord niet.",
|
||||
"account.notify.oauth.unlinked.success": "Ontkoppelen succesvol",
|
||||
"account.card.security.title": "Beveiliging",
|
||||
"account.card.security.totp.enable.description": "Voer uw huidige wachtwoord in om TOTP in te schakelen",
|
||||
"account.card.security.totp.disable.description": "Voer uw huidige wachtwoord in om TOTP uit te schakelen",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Voer uw huidige wachtwoord in om TOTP in te schakelen",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Voer uw huidige wachtwoord in om TOTP uit te schakelen",
|
||||
"account.card.security.totp.button.start": "Start",
|
||||
"account.modal.totp.title": "TOTP inschakelen",
|
||||
"account.modal.totp.step1": "Stap 1: Voeg uw authenticator toe",
|
||||
"account.modal.totp.step2": "Stap 2: Valideer uw code",
|
||||
"account.modal.totp.enterManually": "Handmatig invoeren",
|
||||
"account.modal.totp.code": "Code",
|
||||
"account.modal.totp.clickToCopy": "Klik om te kopiëren",
|
||||
"common.button.clickToCopy": "Klik om te kopiëren",
|
||||
"account.modal.totp.verify": "Verifiëren",
|
||||
"account.notify.totp.disable": "TOTP succesvol uitgeschakeld",
|
||||
"account.notify.totp.enable": "TOTP succesvol ingeschakeld",
|
||||
"account.card.language.title": "Taal",
|
||||
"account.card.language.description": "Het project is vertaald door de community. Sommige talen zijn mogelijk onvolledig.",
|
||||
"account.card.color.title": "Kleuren schema",
|
||||
"account.card.language.description":
|
||||
"Het project is vertaald door de community. Sommige talen zijn mogelijk onvolledig.",
|
||||
"account.card.color.title": "Kleurenschema",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Donker",
|
||||
"account.theme.light": "Licht",
|
||||
"account.theme.system": "Systeem",
|
||||
"account.button.delete": "Account verwijderen",
|
||||
"account.modal.delete.title": "Account verwijderen",
|
||||
"account.modal.delete.description": "Weet u zeker dat u uw account met al uw gedeelde bestanden wilt verwijderen?",
|
||||
"account.modal.delete.description":
|
||||
"Weet u zeker dat u uw account met al uw gedeelde bestanden wilt verwijderen?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Mijn gedeelde bestanden",
|
||||
@@ -125,16 +139,19 @@ export default {
|
||||
"account.shares.table.size": "Grootte",
|
||||
"account.shares.modal.share-informations": "Gegevens delen",
|
||||
"account.shares.modal.share-link": "Deel link",
|
||||
"account.shares.modal.delete.title": "Delete share {share}",
|
||||
"account.shares.modal.delete.description": "Do you really want to delete this share?",
|
||||
"account.shares.modal.delete.title": "Verwijder share {share}",
|
||||
"account.shares.modal.delete.description":
|
||||
"Weet u zeker dat u deze share wilt verwijderen?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Reverse shares",
|
||||
"account.reverseShares.description": "A reverse share allows you to generate a unique URL that allows external users to create a share.",
|
||||
"account.reverseShares.title": "Omgekeerde share",
|
||||
"account.reverseShares.description":
|
||||
"Met een omgekeerde share kan een externe gebruiker via unieke genereerde URL bestanden uploaden.",
|
||||
"account.reverseShares.title.empty": "Het is hier leeg 👀",
|
||||
"account.reverseShares.description.empty": "You don't have any reverse shares.",
|
||||
"account.reverseShares.description.empty":
|
||||
"U hebt nog geen omgekeerde shares. Maak er een aan.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Create reverse share",
|
||||
"account.reverseShares.modal.title": "Creeër een omgekeerde share",
|
||||
"account.reverseShares.modal.expiration.label": "Vervaldatum",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "Minuut",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "Minuten",
|
||||
@@ -148,27 +165,34 @@ export default {
|
||||
"account.reverseShares.modal.expiration.month-plural": "Maanden",
|
||||
"account.reverseShares.modal.expiration.year-singular": "Jaar",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Jaren",
|
||||
"account.reverseShares.modal.max-size.label": "Max share size",
|
||||
"account.reverseShares.modal.send-email": "Stuur e-mail notificatie",
|
||||
"account.reverseShares.modal.send-email.description": "Send an email notification when a share is created with this reverse share link.",
|
||||
"account.reverseShares.modal.max-use.label": "Max uses",
|
||||
"account.reverseShares.modal.max-use.description": "The maximum amount of times this URL can be used to create a share.",
|
||||
"account.reverseShare.never-expires": "This reverse share will never expire.",
|
||||
"account.reverseShare.expires-on": "This reverse share will expire on {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "No shares created yet",
|
||||
"account.reverseShares.table.count.singular": "share",
|
||||
"account.reverseShares.table.count.plural": "shares",
|
||||
"account.reverseShares.table.shares": "Shares",
|
||||
"account.reverseShares.table.remaining": "Remaining uses",
|
||||
"account.reverseShares.table.max-size": "Max share size",
|
||||
"account.reverseShares.modal.max-size.label": "Maximale share-grootte",
|
||||
"account.reverseShares.modal.send-email": "Stuur e-mailnotificatie",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Stuur een e-mailnotificatie wanneer er bestanden zijn gedeeld via deze omgekeerde share link.",
|
||||
"account.reverseShares.modal.max-use.label": "Maximaal gebruikte keren",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Maximale keren dat deze URL gebruikt kan worden om een share aan te maken.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Deze omgekeerde share zal nooit verlopen.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Dit omgekeerde share verloopt op {expiration}.",
|
||||
"account.reverseShares.table.no-shares":
|
||||
"Nog geen omgekeerde share aangemaakt",
|
||||
"account.reverseShares.table.count.singular": "deel",
|
||||
"account.reverseShares.table.count.plural": "delen",
|
||||
"account.reverseShares.table.shares": "Delen",
|
||||
"account.reverseShares.table.remaining": "Nog te gebruiken",
|
||||
"account.reverseShares.table.max-size": "Maximale sharegrootte",
|
||||
"account.reverseShares.table.expires": "Verloopt op",
|
||||
"account.reverseShares.modal.reverse-share-link": "Reverse share link",
|
||||
"account.reverseShares.modal.delete.title": "Delete reverse share",
|
||||
"account.reverseShares.modal.delete.description": "Do you really want to delete this reverse share? If you do, the associated shares will be deleted as well.",
|
||||
"account.reverseShares.modal.reverse-share-link": "Omgekeerde share link",
|
||||
"account.reverseShares.modal.delete.title": "Omgekeerde share verwijderen",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Weet u zeker dat u deze omgekeerde share wilt verwijderen? Als u dit doet, worden de bijbehorende bestanden ook verwijderd.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Beheer",
|
||||
"admin.title": "Instellingen",
|
||||
"admin.button.users": "Gebruikers beheer",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Configuratie",
|
||||
"admin.version": "Versie",
|
||||
// END /admin
|
||||
@@ -178,43 +202,64 @@ export default {
|
||||
"admin.users.table.email": "E-mailadres",
|
||||
"admin.users.table.admin": "Beheerder",
|
||||
"admin.users.edit.update.title": "Gebruiker {username} bijwerken",
|
||||
"admin.users.edit.update.admin-privileges": "Beheerder privileges",
|
||||
"admin.users.edit.update.admin-privileges": "Beheerdersrechten",
|
||||
"admin.users.edit.update.change-password.title": "Wachtwoord wijzigen",
|
||||
"admin.users.edit.update.change-password.field": "Nieuw wachtwoord",
|
||||
"admin.users.edit.update.change-password.button": "Nieuw wachtwoord opslaan",
|
||||
"admin.users.edit.update.notify.password.success": "Wachtwoord succesvol gewijzigd",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Wachtwoord succesvol gewijzigd",
|
||||
"admin.users.edit.delete.title": "Gebruiker {username} verwijderen",
|
||||
"admin.users.edit.delete.description": "Do you really want to delete this user and all his shares?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Wilt u echt deze gebruiker en al zijn shares verwijderen?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Gebruiker aanmaken",
|
||||
"admin.users.modal.create.username": "Gebruikersnaam",
|
||||
"admin.users.modal.create.email": "E-mailadres",
|
||||
"admin.users.modal.create.password": "Wachtwoord",
|
||||
"admin.users.modal.create.manual-password": "Wachtwoord handmatig instellen",
|
||||
"admin.users.modal.create.manual-password.description": "Indien niet aangevinkt, ontvangt de gebruiker een e-mail met een link om zijn wachtwoord in te stellen.",
|
||||
"admin.users.modal.create.admin": "Beheerder privileges",
|
||||
"admin.users.modal.create.admin.description": "Indien aangevinkt, heeft de gebruiker toegang tot de beheeromgeving.",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Indien niet aangevinkt, ontvangt de gebruiker een e-mail met een link om zijn wachtwoord in te stellen.",
|
||||
"admin.users.modal.create.admin": "Beheerdersrechten",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Indien aangevinkt, heeft de gebruiker toegang tot de beheeromgeving.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Uploaden",
|
||||
"upload.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"upload.notify.count-failed": "{count} bestanden konden niet worden geüpload. Opnieuw proberen.",
|
||||
"upload.notify.generic-error":
|
||||
"Er is een fout opgetreden tijdens het voltooien van uw share.",
|
||||
"upload.notify.count-failed":
|
||||
"{count} bestanden konden niet worden geüpload. Probeer het nogmaals.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Bestanden uploaden",
|
||||
"upload.dropzone.description": "Drag'n'drop files here to start your share. We can accept only files that are less than {maxSize} in total.",
|
||||
"upload.dropzone.notify.file-too-big": "Your files exceed the maximum share size of {maxSize}.",
|
||||
"upload.dropzone.description":
|
||||
"Sleep uw bestanden hier om uw share te beginnen. We kunnen alleen bestanden accepteren die kleiner zijn dan {maxSize} in totaal.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Uw bestanden overschrijden de maximale share-grootte van {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Naam",
|
||||
"upload.filelist.size": "Grootte",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Create Share",
|
||||
"upload.modal.link.error.invalid": "Can only contain letters, numbers, underscores, and hyphens",
|
||||
"upload.modal.title": "Share aanmaken",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Het mag alleen letters, cijfers, onderstrepingstekens en koppeltekens bevatten",
|
||||
"upload.modal.link.error.taken": "Deze link is al in gebruik",
|
||||
"upload.modal.not-signed-in": "U bent niet aangemeld",
|
||||
"upload.modal.not-signed-in-description": "You will be unable to delete your share manually and view the visitor count.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Het is niet mogelijk uw gedeelde bestanden handmatig te verwijderen en het aantal bezoekers te bekijken.",
|
||||
"upload.modal.expires.never": "nooit",
|
||||
"upload.modal.expires.never-long": "Verloopt nooit",
|
||||
"upload.modal.expires.error.too-long": "Expiration exceeds maximum expiration date of {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"De maximale vervaldatum van {max} is overschreven.",
|
||||
"upload.modal.link.label": "Koppeling",
|
||||
"upload.modal.expires.label": "Vervaldatum",
|
||||
"upload.modal.expires.minute-singular": "Minuut",
|
||||
@@ -229,46 +274,57 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Maanden",
|
||||
"upload.modal.expires.year-singular": "Jaar",
|
||||
"upload.modal.expires.year-plural": "Jaren",
|
||||
"upload.modal.accordion.description.title": "Beschrijving",
|
||||
"upload.modal.accordion.description.placeholder": "Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "E-mail ontvangers",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "E-mail van de ontvangers",
|
||||
"upload.modal.accordion.email.placeholder": "Voer e-mail ontvangers in",
|
||||
"upload.modal.accordion.email.invalid-email": "Ongeldig e-mailadres",
|
||||
"upload.modal.accordion.security.title": "Beveiliging opties",
|
||||
"upload.modal.accordion.security.password.label": "Paswoord beveiling",
|
||||
"upload.modal.accordion.security.title": "Beveiligingsopties",
|
||||
"upload.modal.accordion.security.password.label": "Wachtwoordbeveiling",
|
||||
"upload.modal.accordion.security.password.placeholder": "Geen wachtwoord",
|
||||
"upload.modal.accordion.security.max-views.label": "Maximum aantal weergaven",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Onbeperkt",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "This share will never expire.",
|
||||
"upload.modal.completed.expires-on": "This share will expire on {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Share ready",
|
||||
"upload.modal.completed.never-expires":
|
||||
"Deze omgekeerde share zal nooit verlopen.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"Deze omgekeerde share verloopt op {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Share is gereed",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Share {shareId}",
|
||||
"share.description": "Kijk eens wat ik met je heb gedeeld!",
|
||||
"share.error.visitor-limit-exceeded.title": "Bezoekerslimiet overschreden",
|
||||
"share.error.visitor-limit-exceeded.description": "The visitor limit from this share has been exceeded.",
|
||||
"share.error.removed.title": "Share removed",
|
||||
"share.error.not-found.title": "Share not found",
|
||||
"share.error.not-found.description": "The share you're looking for doesn't exist.",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"De bezoekerslimiet van deze share is overschreden.",
|
||||
"share.error.removed.title": "Share was verwijderd",
|
||||
"share.error.not-found.title": "Share niet gevonden",
|
||||
"share.error.not-found.description":
|
||||
"De share die u zoekt kan niet gevonden worden.",
|
||||
"share.modal.password.title": "Wachtwoord vereist",
|
||||
"share.modal.password.description": "To access this share please enter the password for the share.",
|
||||
"share.modal.password.description":
|
||||
"Vul een wachtwoord in om toegang te krijgen tot deze share.",
|
||||
"share.modal.password": "Wachtwoord",
|
||||
"share.modal.error.invalid-password": "Ongeldig wachtwoord",
|
||||
"share.button.download-all": "Alles downloaden",
|
||||
"share.notify.download-all-preparing": "The share is preparing. Try again in a few minutes.",
|
||||
"share.modal.file-link": "Bestand koppeling",
|
||||
"share.notify.download-all-preparing":
|
||||
"De share word gebundeld. Probeer het over een paar minuten opnieuw.",
|
||||
"share.modal.file-link": "Link naar bestand",
|
||||
"share.table.name": "Naam",
|
||||
"share.table.size": "Grootte",
|
||||
"share.modal.file-preview.error.not-supported.title": "Voorbeeld niet ondersteund",
|
||||
"share.modal.file-preview.error.not-supported.description": "Een voorbeeld voor dit bestandstype wordt niet ondersteund. Download het bestand om het te bekijken.",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Voorbeeld niet ondersteund",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"Een voorbeeld voor dit bestandstype wordt niet ondersteund. Download het bestand om het te bekijken.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Edit {shareId}",
|
||||
"share.edit.append-upload": "Append file",
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
"share.edit.title": "{shareId} bewerken",
|
||||
"share.edit.append-upload": "Bestand toevoegen",
|
||||
"share.edit.notify.generic-error":
|
||||
"Er is een fout opgetreden tijdens het voltooien van uw share.",
|
||||
"share.edit.notify.save-success": "Share is succesvol bijgewerkt",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "Configuratie",
|
||||
@@ -276,114 +332,177 @@ export default {
|
||||
"admin.config.category.share": "Delen",
|
||||
"admin.config.category.email": "E-mail",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "Social Login",
|
||||
"admin.config.general.app-name": "App naam",
|
||||
"admin.config.category.oauth": "Social login",
|
||||
"admin.config.general.app-name": "App-naam",
|
||||
"admin.config.general.app-name.description": "Naam van de applicatie",
|
||||
"admin.config.general.app-url": "App URL",
|
||||
"admin.config.general.app-url.description": "On which URL Pingvin Share is available",
|
||||
"admin.config.general.app-url": "App-URL",
|
||||
"admin.config.general.app-url.description":
|
||||
"De URL waar Pingvin Share bereikbaar is",
|
||||
"admin.config.general.show-home-page": "Toon startpagina",
|
||||
"admin.config.general.show-home-page.description": "Toon of verberg de home pagina",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Toon of verberg de home pagina",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Verander uw logo door een nieuwe afbeelding te uploaden. De afbeelding moet PNG zijn en het formaat moet 1:1 hebben.",
|
||||
"admin.config.general.logo.description":
|
||||
"Verander uw logo door een nieuwe afbeelding te uploaden. De afbeelding moet PNG zijn en het formaat moet 1:1 hebben.",
|
||||
"admin.config.general.logo.placeholder": "Afbeelding kiezen",
|
||||
"admin.config.email.enable-share-email-recipients": "Enable share email recipients",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Whether to allow emails to share recipients. Only enable this if you have enabled SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Share recipients subject",
|
||||
"admin.config.email.share-recipients-subject.description": "Subject of the email which gets sent to the share recipients.",
|
||||
"admin.config.email.share-recipients-message": "Share recipients message",
|
||||
"admin.config.email.share-recipients-message.description": "Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {shareUrl} - The URL of the share\n {desc} - The description of the share\n {expires} - The expiration date of the share\n The variables will be replaced with the actual value.",
|
||||
"admin.config.email.reverse-share-subject": "Reverse share subject",
|
||||
"admin.config.email.reverse-share-subject.description": "Subject of the email which gets sent when someone created a share with your reverse share link.",
|
||||
"admin.config.email.reverse-share-message": "Reverse share message",
|
||||
"admin.config.email.reverse-share-message.description": "Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.",
|
||||
"admin.config.email.reset-password-subject": "Reset wachtwoord onderwerp",
|
||||
"admin.config.email.reset-password-subject.description": "Onderwerp van de e-mail die wordt verzonden wanneer een gebruiker een wachtwoordreset aanvraagt.",
|
||||
"admin.config.email.reset-password-message": "Wachtwoord opnieuw instellen bericht",
|
||||
"admin.config.email.reset-password-message.description": "Bericht dat wordt verzonden wanneer een gebruiker een wachtwoord reset aanvraagt. {url} zal worden vervangen door de wachtwoord reset URL.",
|
||||
"admin.config.email.invite-subject": "Onderwerp uitnodiging",
|
||||
"admin.config.email.invite-subject.description": "Onderwerp van de e-mail die wordt verzonden wanneer een beheerder een gebruiker uitnodigt.",
|
||||
"admin.config.email.invite-message": "Bericht uitnodiging",
|
||||
"admin.config.email.invite-message.description": "Bericht dat wordt verzonden wanneer een beheerder een gebruiker uitnodigt. {url} zal worden vervangen door de uitnodigings-URL en {password} met het wachtwoord.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Voer e-mail ontvangers in",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Sta e-mails toe om de ontvangers de deel link te versturen. Schakel dit alleen in als je SMTP hebt ingeschakeld.",
|
||||
"admin.config.email.share-recipients-subject":
|
||||
"Onderwerp van ontvangers' share",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Het onderwerp van de e-mail die wordt verzonden naar de share-ontvangers.",
|
||||
"admin.config.email.share-recipients-message":
|
||||
"Bericht voor ontvangers van de share",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Bericht dat wordt verzonden naar de share ontvangers. Beschikbare variabelen:\n {creator} - De gebruikersnaam van de maker van de share\n {shareUrl} - De URL van de share\n {desc} - De beschrijving van de share\n {expires} - De vervaldatum van de share\n De variabelen worden vervangen door hun werkelijke waarde bij verzending.",
|
||||
"admin.config.email.reverse-share-subject":
|
||||
"Omgekeerde share email onderwerp",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Het onderwerp van de e-mail die wordt verzonden wanneer iemand een share heeft gemaakt met uw omgekeerde share link.",
|
||||
"admin.config.email.reverse-share-message": "Omgekeerde share-bericht",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Het bericht dat wordt verzonden wanneer iemand een share heeft aangemaakt via de omgekeerde share-link. {shareUrl} zal worden vervangen door de naam van de maker en de URL van de share.",
|
||||
"admin.config.email.reset-password-subject":
|
||||
"E-mailonderwerp voor wachtwoordherstel",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Het onderwerp van de e-mail die wordt verzonden wanneer een gebruiker een wachtwoordherstel aanvraagt.",
|
||||
"admin.config.email.reset-password-message": "Bericht voor wachtwoordherstel",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Bericht dat wordt verzonden wanneer een gebruiker een wachtwoordherstel aanvraagt. {url} zal worden vervangen door de wachtwoordherstel-URL.",
|
||||
"admin.config.email.invite-subject": "Onderwerp voor uitnodiging",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Onderwerp van de e-mail die wordt verzonden wanneer een beheerder een gebruiker uitnodigt.",
|
||||
"admin.config.email.invite-message": "Bericht voor uitnodiging",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Bericht dat wordt verzonden wanneer een beheerder een gebruiker uitnodigt. {url} zal worden vervangen door de uitnodigings-URL en {password} met het wachtwoord.",
|
||||
"admin.config.share.allow-registration": "Sta registratie toe",
|
||||
"admin.config.share.allow-registration.description": "Of registratie is toegestaan",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Allow unauthenticated shares",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Whether unauthenticated users can create shares",
|
||||
"admin.config.share.max-expiration": "Max expiration",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.max-size": "Max grootte",
|
||||
"admin.config.share.max-size.description": "Maximum share size in bytes",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Of registratie is toegestaan",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Ongeverifieerde shares toestaan",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Sta niet-geverifieerde gebruikers toe shares te kunnen aanmaken",
|
||||
"admin.config.share.max-expiration": "Max. vervaldatum",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Maximale verval tijd van de share in uren. Stel in op 0 om onbeperkte vervaldatum toe te staan.",
|
||||
"admin.config.share.max-size": "Max. grootte",
|
||||
"admin.config.share.max-size.description": "Maximale share grootte in bytes",
|
||||
"admin.config.share.zip-compression-level": "Zip compressie niveau",
|
||||
"admin.config.share.zip-compression-level.description": "Pas het niveau aan voor evenwicht tussen bestandsgrootte en compressie snelheid. Geldige waarden variëren van 0 tot 9, waarbij 0 geen compressie is en 9 de maximale compressie is. ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Pas het niveau aan voor evenwicht tussen bestandsgrootte en compressie snelheid. Geldige waarden variëren van 0 tot 9, waarbij 0 geen compressie is en 9 de maximale compressie is. ",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "Inschakelen",
|
||||
"admin.config.smtp.enabled.description": "Of SMTP is ingeschakeld. Stel dit alleen in op true als u de host hebt ingevoerd, poort, e-mail, gebruiker en wachtwoord van uw SMTP-server.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Of SMTP is ingeschakeld. Stel dit alleen in op true als u de host hebt ingevoerd, poort, e-mail, gebruiker en wachtwoord van uw SMTP-server.",
|
||||
"admin.config.smtp.host": "Host",
|
||||
"admin.config.smtp.host.description": "Host van de SMTP-server",
|
||||
"admin.config.smtp.port": "Poort",
|
||||
"admin.config.smtp.port.description": "Poort van de SMTP-server",
|
||||
"admin.config.smtp.email": "E-mail",
|
||||
"admin.config.smtp.email.description": "E-mailadres waar de e-mails van worden verzonden",
|
||||
"admin.config.smtp.email.description":
|
||||
"E-mailadres waar de e-mails van worden verzonden",
|
||||
"admin.config.smtp.username": "Gebruikersnaam",
|
||||
"admin.config.smtp.username.description": "Gebruikersnaam van de SMTP-server",
|
||||
"admin.config.smtp.password": "Wachtwoord",
|
||||
"admin.config.smtp.password.description": "Wachtwoord van de SMTP-server",
|
||||
"admin.config.smtp.button.test": "Test e-mail verzenden",
|
||||
"admin.config.oauth.allow-registration": "Allow registration",
|
||||
"admin.config.oauth.allow-registration.description": "Allow users to register via social login",
|
||||
"admin.config.oauth.ignore-totp": "Ignore TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login",
|
||||
"admin.config.smtp.button.test": "Teste-mail verzenden",
|
||||
"admin.config.oauth.allow-registration": "Sta registratie toe",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Gebruikers toestaan zich te registreren via sociale login",
|
||||
"admin.config.oauth.ignore-totp": "TOTP negeren",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"TOTP negeren wanneer gebruiker sociale login gebruikt",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Ofdat GitHub login is ingeschakeld",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"Client-ID van de GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description": "Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Client secret van de GitHub OAuth app",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Whether Google login is enabled",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Ofdat GitHub login is ingeschakeld",
|
||||
"admin.config.oauth.google-client-id": "Google Client-ID",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Client-ID van de Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Client secret van de Google OAuth app",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Ofdat Microsoft login is ingeschakeld",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Tenant ID van de Microsoft OAuth app\ncommon: Gebruikers met zowel een persoonlijk Microsoft-account als een werk- of schoolaccount van Microsoft Entra ID kunnen zich aanmelden bij de applicatie. organisaties: alleen gebruikers met werk of schoolaccounts van Microsoft Entra ID kunnen zich aanmelden bij de applicatie.\nconsumenten: Alleen gebruikers met een persoonlijk Microsoft-account kunnen zich aanmelden bij de applicatie.\ndomeinnaam van de Microsoft Entra tenant of de tenant ID in GUID formaat: alleen gebruikers van een specifieke Microsoft Entra tenant (directory leden met een werk- of schoolaccount of map gasten met een persoonlijk Microsoft-account) kunnen zich aanmelden bij de toepassing.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Client-ID van de Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client-secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client-secret van de Microsoft OAuth app",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Ofdat discord login is ingeschakeld",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord beperkte server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Beperk het inloggen tot gebruikers in een specifieke server. Laat leeg om uit te schakelen.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Client-ID van de discord OAuth app",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Whether OpenID login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID OAuth app",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Client-secret van de discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Ofdat OpenID Connect login is ingeschakeld",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI van de OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Gebruikersnaam claim in OpenID Connect-ID-token. Laat het leeg als u niet weet wat deze configuratie is.",
|
||||
"admin.config.oauth.oidc-client-id": "Client-ID OpenID Connect",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client-ID van de OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret van de OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "Oeps, deze pagina bestaat niet.",
|
||||
"404.button.home": "Breng me terug naar huis",
|
||||
// error
|
||||
"error.title": "Error",
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Go back",
|
||||
"error.msg.default": "Something went wrong.",
|
||||
"error.msg.access_denied": "You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token": "The authentication process took too long, please try again.",
|
||||
"error.msg.no_user": "User linked to this {0} account doesn't exist.",
|
||||
"error.msg.no_email": "Can't get email address from this {0} account.",
|
||||
"error.msg.already_linked": "This {0} account is already linked to another account.",
|
||||
"error.msg.not_linked": "This {0} account haven't linked to any account yet.",
|
||||
"error.title": "Fout",
|
||||
"error.description": "Oeps!",
|
||||
"error.button.back": "Terug",
|
||||
"error.msg.default": "Er ging iets mis.",
|
||||
"error.msg.access_denied":
|
||||
"U heeft het verificatieproces geannuleerd, probeer het opnieuw.",
|
||||
"error.msg.expired_token":
|
||||
"Het verificatieproces duurde te lang. Probeer het opnieuw.",
|
||||
"error.msg.invalid_token": "Interne fout",
|
||||
"error.msg.no_user": "De gekoppelde gebruiker aan {0} account bestaat niet.",
|
||||
"error.msg.no_email": "Kan geen e-mailadres ophalen van dit {0} account.",
|
||||
"error.msg.already_linked":
|
||||
"Dit {0} account is al gekoppeld aan een ander account.",
|
||||
"error.msg.not_linked":
|
||||
"Dit {0} account is nog aan geen enkel account gekoppeld.",
|
||||
"error.msg.unverified_account":
|
||||
"Dit {0} account is nog niet geverifieerd, probeer het opnieuw na de verificatie.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"U heeft geen toestemming om in te loggen.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Kan uw gebruikersgegevens van dit {0} account niet ophalen.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Opslaan",
|
||||
"common.button.create": "Aanmaken",
|
||||
@@ -396,8 +515,10 @@ export default {
|
||||
"common.button.generate": "Genereren",
|
||||
"common.button.done": "Voltooid",
|
||||
"common.text.link": "Koppeling",
|
||||
"common.text.navigate-to-link": "Ga naar de koppeling",
|
||||
"common.text.or": "of",
|
||||
"common.button.go-back": "Ga terug",
|
||||
"common.button.go-home": "Go home",
|
||||
"common.notify.copied": "Uw link is gekopieerd naar het klembord",
|
||||
"common.success": "Succes",
|
||||
"common.error": "Fout",
|
||||
@@ -407,5 +528,5 @@ export default {
|
||||
"common.error.too-long": "Moet maximaal {length} tekens bevatten",
|
||||
"common.error.exact-length": "Moet precies {length} tekens bevatten",
|
||||
"common.error.invalid-number": "Moet een getal zijn",
|
||||
"common.error.field-required": "Dit veld is verplicht"
|
||||
};
|
||||
"common.error.field-required": "Dit veld is verplicht",
|
||||
};
|
||||
|
||||
@@ -11,14 +11,18 @@ export default {
|
||||
"navbar.avatar.signout": "Wyloguj się",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "<h>Samodzielnie utrzymywana</h> platforma udostępniania plików.",
|
||||
"home.description": "Czy na pewno chcesz przekazać swoje prywatne pliki w ręce osób trzecich, takich jak WeTransfer?",
|
||||
"home.title":
|
||||
"<h>Samodzielnie utrzymywana</h> platforma udostępniania plików.",
|
||||
"home.description":
|
||||
"Czy na pewno chcesz przekazać swoje prywatne pliki w ręce osób trzecich, takich jak WeTransfer?",
|
||||
"home.bullet.a.name": "Samodzielnie Utrzymywana",
|
||||
"home.bullet.a.description": "Utrzymuj Pingvin Share na własnym serwerze.",
|
||||
"home.bullet.b.name": "Prywatność",
|
||||
"home.bullet.b.description": "To są twoje pliki i nigdy nie powinny trafiać w ręce osób trzecich.",
|
||||
"home.bullet.b.description":
|
||||
"To są twoje pliki i nigdy nie powinny trafiać w ręce osób trzecich.",
|
||||
"home.bullet.c.name": "Brak irytującego ograniczenia rozmiaru pliku",
|
||||
"home.bullet.c.description": "Prześlij tak duże pliki, jak chcesz. Ograniczeniem będzie tylko twój dysk twardy.",
|
||||
"home.bullet.c.description":
|
||||
"Prześlij tak duże pliki, jak chcesz. Ograniczeniem będzie tylko twój dysk twardy.",
|
||||
"home.button.start": "Zaczynajmy",
|
||||
"home.button.source": "Kod źródłowy",
|
||||
// END /
|
||||
@@ -27,12 +31,15 @@ export default {
|
||||
"signin.description": "Nie masz jeszcze konta?",
|
||||
"signin.button.signup": "Zarejestruj się",
|
||||
"signin.input.email-or-username": "Adres e-mail lub nazwa użytkownika",
|
||||
"signin.input.email-or-username.placeholder": "Adres e-mail lub nazwa użytkownika",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"Adres e-mail lub nazwa użytkownika",
|
||||
"signin.input.password": "Hasło",
|
||||
"signin.input.password.placeholder": "Twoje hasło",
|
||||
"signin.button.submit": "Zaloguj się",
|
||||
"signIn.notify.totp-required.title": "Wymagane jest uwierzytelnianie dwuetapowe",
|
||||
"signIn.notify.totp-required.description": "Wprowadź kod uwierzytelniania dwuetapowego",
|
||||
"signIn.notify.totp-required.title":
|
||||
"Wymagane jest uwierzytelnianie dwuetapowe",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Wprowadź kod uwierzytelniania dwuetapowego",
|
||||
"signIn.oauth.or": "LUB",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -56,8 +63,10 @@ export default {
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Nie pamiętasz hasła?",
|
||||
"resetPassword.description": "Wprowadź swój e-mail, aby zresetować swoje hasło.",
|
||||
"resetPassword.notify.success": "Został wysłany e-mail z linkiem do resetowania hasła.",
|
||||
"resetPassword.description":
|
||||
"Wprowadź swój e-mail, aby zresetować swoje hasło.",
|
||||
"resetPassword.notify.success":
|
||||
"Jeśli e-mail istnieje, to została wysłana wiadomość z linkiem do zresetowania hasła.",
|
||||
"resetPassword.button.back": "Powrót do strony logowania",
|
||||
"resetPassword.text.resetPassword": "Resetuj hasło",
|
||||
"resetPassword.text.enterNewPassword": "Wprowadź nowe hasło",
|
||||
@@ -72,7 +81,8 @@ export default {
|
||||
"account.card.password.title": "Hasło",
|
||||
"account.card.password.old": "Dotychczasowe hasło",
|
||||
"account.card.password.new": "Nowe hasło",
|
||||
"account.card.password.noPasswordSet": "Nie masz ustawionego hasła. Jeśli chcesz zalogować się za pomocą adresu e-mail i hasła, musisz ustawić hasło.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Nie masz ustawionego hasła. Jeśli chcesz zalogować się za pomocą adresu e-mail i hasła, musisz ustawić hasło.",
|
||||
"account.notify.password.success": "Hasło zostało pomyślnie zmienione",
|
||||
"account.card.oauth.title": "Logowanie za pomocą konta społecznościowego",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +94,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Odłącz",
|
||||
"account.card.oauth.unlinked": "Rozłączono",
|
||||
"account.modal.unlink.title": "Odłącz konto",
|
||||
"account.modal.unlink.description": "Odłączenie kont społecznościowych, jeśli nie pamiętasz nazwy użytkownika i hasła, może spowodować utratę konta.",
|
||||
"account.modal.unlink.description":
|
||||
"Odłączenie kont społecznościowych, jeśli nie pamiętasz nazwy użytkownika i hasła, może spowodować utratę konta.",
|
||||
"account.notify.oauth.unlinked.success": "Odłączono pomyślnie",
|
||||
"account.card.security.title": "Zabezpieczenia",
|
||||
"account.card.security.totp.enable.description": "Wprowadź aktualne hasło, aby móc włączyć TOTP",
|
||||
"account.card.security.totp.disable.description": "Wprowadź aktualne hasło, aby wyłączyć TOTP",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Wprowadź aktualne hasło, aby móc włączyć TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Wprowadź aktualne hasło, aby wyłączyć TOTP",
|
||||
"account.card.security.totp.button.start": "Uruchom",
|
||||
"account.modal.totp.title": "Uruchom TOTP",
|
||||
"account.modal.totp.step1": "Krok 1: Dodaj swój uwierzytelniacz",
|
||||
"account.modal.totp.step2": "Krok 2: Potwierdź swój kod",
|
||||
"account.modal.totp.enterManually": "Wpisz ręcznie",
|
||||
"account.modal.totp.code": "Kod",
|
||||
"account.modal.totp.clickToCopy": "Kliknij, aby skopiować",
|
||||
"common.button.clickToCopy": "Kliknij, aby skopiować",
|
||||
"account.modal.totp.verify": "Weryfikuj",
|
||||
"account.notify.totp.disable": "%s wyłączono pomyślnie",
|
||||
"account.notify.totp.enable": "TOTP włączono pomyślnie",
|
||||
"account.card.language.title": "Język",
|
||||
"account.card.language.description": "Projekt jest tłumaczony przez społeczność. Niektóre języki mogą być niekompletne.",
|
||||
"account.card.language.description":
|
||||
"Projekt jest tłumaczony przez społeczność. Niektóre języki mogą być niekompletne.",
|
||||
"account.card.color.title": "Schemat kolorów",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Ciemny",
|
||||
@@ -108,11 +122,12 @@ export default {
|
||||
"account.theme.system": "System",
|
||||
"account.button.delete": "Usuń Konto",
|
||||
"account.modal.delete.title": "Usuń Konto",
|
||||
"account.modal.delete.description": "Czy na pewno chcesz usunąć swoje konto, w tym wszystkie aktywne udziały?",
|
||||
"account.modal.delete.description":
|
||||
"Czy na pewno chcesz usunąć swoje konto, w tym wszystkie aktywne udziały?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Moje udziały",
|
||||
"account.shares.title.empty": "Tu jest pusto :eys:",
|
||||
"account.shares.title.empty": "Tu jest pusto 👀",
|
||||
"account.shares.description.empty": "Nie masz żadnych udziałów.",
|
||||
"account.shares.button.create": "Utwórz go",
|
||||
"account.shares.info.title": "Informacje udziału",
|
||||
@@ -126,13 +141,16 @@ export default {
|
||||
"account.shares.modal.share-informations": "Informacje udziału",
|
||||
"account.shares.modal.share-link": "Udostępnij link",
|
||||
"account.shares.modal.delete.title": "Usuń udostępnianie {share}",
|
||||
"account.shares.modal.delete.description": "Czy na pewno chcesz usunąć to udostępnianie?",
|
||||
"account.shares.modal.delete.description":
|
||||
"Czy na pewno chcesz usunąć to udostępnianie?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Udziały odwrotne",
|
||||
"account.reverseShares.description": "Udostępnianie odwrotne pozwala na wygenerowanie unikalnego adresu URL, który umożliwia użytkownikom zewnętrznym na tworzenie udostępniania.",
|
||||
"account.reverseShares.title.empty": "Tu jest pusto :eys:",
|
||||
"account.reverseShares.description.empty": "Nie masz żadnych udostępnień odwrotnych.",
|
||||
"account.reverseShares.description":
|
||||
"Udostępnianie odwrotne pozwala na wygenerowanie unikalnego adresu URL, który umożliwia użytkownikom zewnętrznym na tworzenie udostępniania.",
|
||||
"account.reverseShares.title.empty": "Tu jest pusto 👀",
|
||||
"account.reverseShares.description.empty":
|
||||
"Nie masz żadnych udostępnień odwrotnych.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Utwórz udostępnianie odwrotne",
|
||||
"account.reverseShares.modal.expiration.label": "Wygasanie",
|
||||
@@ -150,11 +168,15 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "Lata/lat",
|
||||
"account.reverseShares.modal.max-size.label": "Maksymalny rozmiar udziału",
|
||||
"account.reverseShares.modal.send-email": "Wysyłanie powiadomienia e-mail",
|
||||
"account.reverseShares.modal.send-email.description": "Wyślij powiadomienie e-mail, gdy udostępnianie zostanie utworzone za pomocą linku udostępniania odwrotnego.",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Wyślij powiadomienie e-mail, gdy udostępnianie zostanie utworzone za pomocą linku udostępniania odwrotnego.",
|
||||
"account.reverseShares.modal.max-use.label": "Limit użyć",
|
||||
"account.reverseShares.modal.max-use.description": "Maksymalna ilość razy, kiedy ten adres URL może być użyty do utworzenia udostępniania.",
|
||||
"account.reverseShare.never-expires": "To udostępnienie odwrotne nigdy nie wygasa.",
|
||||
"account.reverseShare.expires-on": "To udostępnienie odwrotne wygaśnie dnia {expiration}.",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Maksymalna ilość razy, kiedy ten adres URL może być użyty do utworzenia udostępniania.",
|
||||
"account.reverseShare.never-expires":
|
||||
"To udostępnienie odwrotne nigdy nie wygasa.",
|
||||
"account.reverseShare.expires-on":
|
||||
"To udostępnienie odwrotne wygaśnie dnia {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Nie utworzono jeszcze udostępnień",
|
||||
"account.reverseShares.table.count.singular": "udostępnij",
|
||||
"account.reverseShares.table.count.plural": "udziały",
|
||||
@@ -162,13 +184,16 @@ export default {
|
||||
"account.reverseShares.table.remaining": "Pozostało miejsca",
|
||||
"account.reverseShares.table.max-size": "Maksymalny rozmiar udziału",
|
||||
"account.reverseShares.table.expires": "Wygasa",
|
||||
"account.reverseShares.modal.reverse-share-link": "Link udostępnienia odwrotnego",
|
||||
"account.reverseShares.modal.reverse-share-link":
|
||||
"Link udostępnienia odwrotnego",
|
||||
"account.reverseShares.modal.delete.title": "Usuń udostępnienie odwrotnie",
|
||||
"account.reverseShares.modal.delete.description": "Czy na pewno chcesz usunąć to udostępnienie odwrotne? Jeśli tak, to również zostaną usunięte powiązane z nim udostępnienia.",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Czy na pewno chcesz usunąć to udostępnienie odwrotne? Jeśli tak, to również zostaną usunięte powiązane z nim udostępnienia.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Administracja",
|
||||
"admin.button.users": "Zarządzanie użytkownikami",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Konfiguracja",
|
||||
"admin.version": "Wersja",
|
||||
// END /admin
|
||||
@@ -182,39 +207,60 @@ export default {
|
||||
"admin.users.edit.update.change-password.title": "Zmień hasło",
|
||||
"admin.users.edit.update.change-password.field": "Nowe hasło",
|
||||
"admin.users.edit.update.change-password.button": "Zapisz nowe hasło",
|
||||
"admin.users.edit.update.notify.password.success": "Hasło pomyślnie zmienione",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Hasło pomyślnie zmienione",
|
||||
"admin.users.edit.delete.title": "Usuń użytkownika {username}",
|
||||
"admin.users.edit.delete.description": "Czy na pewno chcesz usunąć tego użytkownika i wszystkie jego udziały?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Czy na pewno chcesz usunąć tego użytkownika i wszystkie jego udziały?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Utwórz użytkownika",
|
||||
"admin.users.modal.create.username": "Nazwa użytkownika",
|
||||
"admin.users.modal.create.email": "Adres e-mail",
|
||||
"admin.users.modal.create.password": "Hasło",
|
||||
"admin.users.modal.create.manual-password": "Ustaw ręcznie hasło",
|
||||
"admin.users.modal.create.manual-password.description": "Jeśli nie zaznaczone, użytkownik otrzyma e-mail z linkiem do ustawienia hasła.",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Jeśli nie zaznaczone, użytkownik otrzyma e-mail z linkiem do ustawienia hasła.",
|
||||
"admin.users.modal.create.admin": "Uprawnienia administratora",
|
||||
"admin.users.modal.create.admin.description": "Jeśli zaznaczone, użytkownik będzie miał dostęp do panelu administratora.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Jeśli zaznaczone, użytkownik będzie miał dostęp do panelu administratora.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Prześlij",
|
||||
"upload.notify.generic-error": "Wystąpił błąd podczas zakończenia tworzenia udziału.",
|
||||
"upload.notify.count-failed": "Nie udało się przesłać {count} plików. Próbuję ponownie.",
|
||||
"upload.notify.generic-error":
|
||||
"Wystąpił błąd podczas zakończenia tworzenia udziału.",
|
||||
"upload.notify.count-failed":
|
||||
"Nie udało się przesłać {count} plików. Próbuję ponownie.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Prześlij pliki",
|
||||
"upload.dropzone.description": "Przeciągnij i upuść pliki tutaj, aby rozpocząć udostępnianie. Możemy zaakceptować tylko pliki mniejsze niż {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big": "Twoje pliki przekraczają maksymalny rozmiar {maxSize}.",
|
||||
"upload.dropzone.description":
|
||||
"Przeciągnij i upuść pliki tutaj, aby rozpocząć udostępnianie. Możemy zaakceptować tylko pliki mniejsze niż {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Twoje pliki przekraczają maksymalny rozmiar {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Nazwa",
|
||||
"upload.filelist.size": "Rozmiar",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Utwórz Udział",
|
||||
"upload.modal.link.error.invalid": "Może zawierać tylko litery, cyfry, znaki podkreślenia i myślniki",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Może zawierać tylko litery, cyfry, znaki podkreślenia i myślniki",
|
||||
"upload.modal.link.error.taken": "Ten link jest już w użyciu",
|
||||
"upload.modal.not-signed-in": "Nie jesteś zalogowany/a",
|
||||
"upload.modal.not-signed-in-description": "Nie możesz ręcznie usunąć swojego udziału ani wyświetlić licznika odwiedzających.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Nie możesz ręcznie usunąć swojego udziału ani wyświetlić licznika odwiedzających.",
|
||||
"upload.modal.expires.never": "nigdy",
|
||||
"upload.modal.expires.never-long": "Nigdy nie wygasa",
|
||||
"upload.modal.expires.error.too-long": "Termin ważności przekracza maksymalną datę wygaśnięcia {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Termin ważności przekracza maksymalną datę wygaśnięcia {max}.",
|
||||
"upload.modal.link.label": "Link",
|
||||
"upload.modal.expires.label": "Wygasanie",
|
||||
"upload.modal.expires.minute-singular": "Minuta",
|
||||
@@ -229,45 +275,59 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Miesiące/ęcy",
|
||||
"upload.modal.expires.year-singular": "Rok",
|
||||
"upload.modal.expires.year-plural": "Lat/a",
|
||||
"upload.modal.accordion.description.title": "Opis",
|
||||
"upload.modal.accordion.description.placeholder": "Notatka dla odbiorców tego udziału",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "Odbiorcy wiadomości e-mail",
|
||||
"upload.modal.accordion.email.placeholder": "Wprowadź adresatów wiadomości e-mail",
|
||||
"upload.modal.accordion.email.invalid-email": "Adres e-mail jest nieprawidłowy",
|
||||
"upload.modal.accordion.email.placeholder":
|
||||
"Wprowadź adresatów wiadomości e-mail",
|
||||
"upload.modal.accordion.email.invalid-email":
|
||||
"Adres e-mail jest nieprawidłowy",
|
||||
"upload.modal.accordion.security.title": "Ustawienia bezpieczeństwa",
|
||||
"upload.modal.accordion.security.password.label": "Ochrona hasłem",
|
||||
"upload.modal.accordion.security.password.placeholder": "Brak hasła",
|
||||
"upload.modal.accordion.security.max-views.label": "Maksymalna liczba wyświetleń",
|
||||
"upload.modal.accordion.security.max-views.label":
|
||||
"Maksymalna liczba wyświetleń",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Bez ograniczeń",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "To udostępnienie nigdy nie wygaśnie.",
|
||||
"upload.modal.completed.expires-on": "To udostępnienie wygaśnie dnia {expiration}.",
|
||||
"upload.modal.completed.never-expires":
|
||||
"To udostępnienie nigdy nie wygaśnie.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"To udostępnienie wygaśnie dnia {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Udostępnianie gotowe",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Udostępnij {shareId}",
|
||||
"share.description": "Spójrz, co ci udostępniłem!",
|
||||
"share.error.visitor-limit-exceeded.title": "Przekroczono limit odwiedzających",
|
||||
"share.error.visitor-limit-exceeded.description": "Limit odwiedzających dla tego udziału został przekroczony.",
|
||||
"share.error.visitor-limit-exceeded.title":
|
||||
"Przekroczono limit odwiedzających",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Limit odwiedzających dla tego udziału został przekroczony.",
|
||||
"share.error.removed.title": "Udostępnianie usunięte",
|
||||
"share.error.not-found.title": "Nie znaleziono udziału",
|
||||
"share.error.not-found.description": "Udział, który szukasz, nie istnieje.",
|
||||
"share.modal.password.title": "Wymagane hasło",
|
||||
"share.modal.password.description": "Aby uzyskać dostęp do tego udziału, wprowadź hasło.",
|
||||
"share.modal.password.description":
|
||||
"Aby uzyskać dostęp do tego udziału, wprowadź hasło.",
|
||||
"share.modal.password": "Hasło",
|
||||
"share.modal.error.invalid-password": "Hasło jest nieprawidłowe",
|
||||
"share.button.download-all": "Pobierz wszystko",
|
||||
"share.notify.download-all-preparing": "Udostępnianie jest przygotowywane. Spróbuj ponownie za kilka minut.",
|
||||
"share.notify.download-all-preparing":
|
||||
"Udostępnianie jest przygotowywane. Spróbuj ponownie za kilka minut.",
|
||||
"share.modal.file-link": "Link do pliku",
|
||||
"share.table.name": "Nazwa",
|
||||
"share.table.size": "Rozmiar",
|
||||
"share.modal.file-preview.error.not-supported.title": "Podgląd nie jest obsługiwany",
|
||||
"share.modal.file-preview.error.not-supported.description": "Podgląd dla tego typu pliku nie jest obsługiwany. Pobierz plik, aby go zobaczyć.",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Podgląd nie jest obsługiwany",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"Podgląd dla tego typu pliku nie jest obsługiwany. Pobierz plik, aby go zobaczyć.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Edytuj {shareId}",
|
||||
"share.edit.append-upload": "Dołącz plik",
|
||||
"share.edit.notify.generic-error": "W trakcie zakańczania tworzenia udziału wystąpił błąd.",
|
||||
"share.edit.notify.generic-error":
|
||||
"W trakcie zakańczania tworzenia udziału wystąpił błąd.",
|
||||
"share.edit.notify.save-success": "Udział zaktualizowany pomyślnie",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,91 +340,143 @@ export default {
|
||||
"admin.config.general.app-name": "Nazwa aplikacji",
|
||||
"admin.config.general.app-name.description": "Nazwa aplikacji",
|
||||
"admin.config.general.app-url": "Adres URL aplikacji",
|
||||
"admin.config.general.app-url.description": "Pod którym adresem URL Pingvin Share jest dostępny",
|
||||
"admin.config.general.app-url.description":
|
||||
"Pod którym adresem URL Pingvin Share jest dostępny",
|
||||
"admin.config.general.show-home-page": "Pokaż stronę główną",
|
||||
"admin.config.general.show-home-page.description": "Czy wyświetlać stronę główną",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Czy wyświetlać stronę główną",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Zmień logo, przesyłając nowy obraz. Obraz musi być plikiem PNG i mieć proporcje 1:1.",
|
||||
"admin.config.general.logo.description":
|
||||
"Zmień logo, przesyłając nowy obraz. Obraz musi być plikiem PNG i mieć proporcje 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Wybierz obraz",
|
||||
"admin.config.email.enable-share-email-recipients": "Włącz adresatów wiadomości e-mail dla udziału",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Czy zezwolić na wysyłanie e-maili do adresatów udziału? Włącz to tylko wtedy, gdy włączyłeś SMTP.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Włącz adresatów wiadomości e-mail dla udziału",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Czy zezwolić na wysyłanie e-maili do adresatów udziału? Włącz to tylko wtedy, gdy włączyłeś SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Temat dla odbiorców udziału",
|
||||
"admin.config.email.share-recipients-subject.description": "Temat wiadomości e-mail, która zostanie wysłana do odbiorców udziału.",
|
||||
"admin.config.email.share-recipients-message": "Wiadomość dla odbiorców udziału",
|
||||
"admin.config.email.share-recipients-message.description": "Wiadomość, która zostanie wysłana do odbiorców udziału. Dostępne zmienne:\n {creator} - Nazwa użytkownika twórcy udziału\n {shareUrl} - Adres URL udziału\n {desc} - Opis udziału\n {expires} - Data wygaśnięcia udziału\n Zmienne zostaną zastąpione rzeczywistą wartością.",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Temat wiadomości e-mail, która zostanie wysłana do odbiorców udziału.",
|
||||
"admin.config.email.share-recipients-message":
|
||||
"Wiadomość dla odbiorców udziału",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Wiadomość, która zostanie wysłana do odbiorców udziału. Dostępne zmienne:\n {creator} - Nazwa użytkownika twórcy udziału\n {shareUrl} - Adres URL udziału\n {desc} - Opis udziału\n {expires} - Data wygaśnięcia udziału\n Zmienne zostaną zastąpione rzeczywistą wartością.",
|
||||
"admin.config.email.reverse-share-subject": "Temat udziału odwrotnego",
|
||||
"admin.config.email.reverse-share-subject.description": "Temat wiadomości e-mail, która zostanie wysłana, gdy ktoś utworzy udostępnienie za pomocą linku udziału odwrotnego.",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Temat wiadomości e-mail, która zostanie wysłana, gdy ktoś utworzy udostępnienie za pomocą linku udziału odwrotnego.",
|
||||
"admin.config.email.reverse-share-message": "Wiadomość udziału odwrotnego",
|
||||
"admin.config.email.reverse-share-message.description": "Wiadomość, która zostanie wysłana, gdy ktoś utworzy udział za pomocą twojego linku udziału odwrotnego. {shareUrl} zostanie zastąpiony nazwą twórcy i adresem URL udziału.",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Wiadomość, która zostanie wysłana, gdy ktoś utworzy udział za pomocą twojego linku udziału odwrotnego. {shareUrl} zostanie zastąpiony nazwą twórcy i adresem URL udziału.",
|
||||
"admin.config.email.reset-password-subject": "Temat resetowania hasła",
|
||||
"admin.config.email.reset-password-subject.description": "Temat wiadomości e-mail, która zostanie wysłana, gdy użytkownik zażąda zresetowania hasła.",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Temat wiadomości e-mail, która zostanie wysłana, gdy użytkownik zażąda zresetowania hasła.",
|
||||
"admin.config.email.reset-password-message": "Wiadomość resetowania hasła",
|
||||
"admin.config.email.reset-password-message.description": "Wiadomość, która zostanie wysłana, gdy użytkownik zażąda zresetowania hasła. {url} zostanie zastąpiony adresem URL resetowania hasła.",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Wiadomość, która zostanie wysłana, gdy użytkownik zażąda zresetowania hasła. {url} zostanie zastąpiony adresem URL resetowania hasła.",
|
||||
"admin.config.email.invite-subject": "Temat zaproszenia",
|
||||
"admin.config.email.invite-subject.description": "Temat wiadomości e-mail, która zostanie wysłana, gdy administrator zaprasza użytkownika.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Temat wiadomości e-mail, która zostanie wysłana, gdy administrator zaprasza użytkownika.",
|
||||
"admin.config.email.invite-message": "Wiadomość zaproszenia",
|
||||
"admin.config.email.invite-message.description": "Wiadomość, która zostanie wysłana, gdy administrator zaprasza użytkownika. {url} zostanie zastąpiony adresem URL zaproszenia, a {password} hasłem.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Wiadomość, która zostanie wysłana, gdy administrator zaprasza użytkownika. {url} zostanie zastąpiony adresem URL zaproszenia, a {password} hasłem.",
|
||||
"admin.config.share.allow-registration": "Zezwól na rejestrację",
|
||||
"admin.config.share.allow-registration.description": "Czy dozwolona jest rejestracja",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Zezwalaj na nieuwierzytelnione udostępnianie",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Czy nieautoryzowani użytkownicy mogą tworzyć udostępnienia",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Czy dozwolona jest rejestracja",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Zezwalaj na nieuwierzytelnione udostępnianie",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Czy nieautoryzowani użytkownicy mogą tworzyć udostępnienia",
|
||||
"admin.config.share.max-expiration": "Maksymalny okres ważności",
|
||||
"admin.config.share.max-expiration.description": "Maksymalny okres ważności udziału w godzinach. Ustaw na 0, aby zezwolić na nieograniczony okres ważności.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Maksymalny okres ważności udziału w godzinach. Ustaw na 0, aby zezwolić na nieograniczony okres ważności.",
|
||||
"admin.config.share.max-size": "Rozmiar maksymalny",
|
||||
"admin.config.share.max-size.description": "Maksymalny rozmiar udziału w bajtach",
|
||||
"admin.config.share.max-size.description":
|
||||
"Maksymalny rozmiar udziału w bajtach",
|
||||
"admin.config.share.zip-compression-level": "Poziom kompresji Zip",
|
||||
"admin.config.share.zip-compression-level.description": "Dostosuj poziom do równowagi między rozmiarem pliku a szybkością kompresji. Prawidłowe wartości mieszczą się w zakresie od 0 do 9, przy czym 0 to brak kompresji a 9 maksymalną kompresją. ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Dostosuj poziom do równowagi między rozmiarem pliku a szybkością kompresji. Prawidłowe wartości mieszczą się w zakresie od 0 do 9, przy czym 0 to brak kompresji a 9 maksymalną kompresją. ",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "Włączony",
|
||||
"admin.config.smtp.enabled.description": "Czy SMTP ma zostać włączony. Ustaw to, tylko jeśli wprowadziłeś host, port, e-mail, nazwę użytkownika i hasło serwera SMTP.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Czy SMTP ma zostać włączony. Ustaw to, tylko jeśli wprowadziłeś host, port, e-mail, nazwę użytkownika i hasło serwera SMTP.",
|
||||
"admin.config.smtp.host": "Host",
|
||||
"admin.config.smtp.host.description": "Host serwera SMTP",
|
||||
"admin.config.smtp.port": "Numer portu",
|
||||
"admin.config.smtp.port.description": "Numer portu serwera SMTP",
|
||||
"admin.config.smtp.email": "Adres e-mail",
|
||||
"admin.config.smtp.email.description": "Adres e-mail, z którego e-maile są wysyłane",
|
||||
"admin.config.smtp.email.description":
|
||||
"Adres e-mail, z którego e-maile są wysyłane",
|
||||
"admin.config.smtp.username": "Nazwa użytkownika",
|
||||
"admin.config.smtp.username.description": "Nazwa użytkownika serwera SMTP",
|
||||
"admin.config.smtp.password": "Hasło",
|
||||
"admin.config.smtp.password.description": "Hasło serwera SMTP",
|
||||
"admin.config.smtp.button.test": "Wyślij testowego e-maila",
|
||||
"admin.config.oauth.allow-registration": "Zezwól na rejestrację",
|
||||
"admin.config.oauth.allow-registration.description": "Zezwalaj użytkownikom na rejestrację za pomocą konta społecznościowego",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Zezwalaj użytkownikom na rejestrację za pomocą konta społecznościowego",
|
||||
"admin.config.oauth.ignore-totp": "Ignoruj TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Czy zignorować TOTP, kiedy użytkownik loguje się za pomocą konta społecznościowego",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Czy zignorować TOTP, kiedy użytkownik loguje się za pomocą konta społecznościowego",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Czy login na GitHub jest włączony",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Czy login na GitHub jest włączony",
|
||||
"admin.config.oauth.github-client-id": "ID klienta GitHub",
|
||||
"admin.config.oauth.github-client-id.description": "ID klienta aplikacji GitHub OAuth",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"ID klienta aplikacji GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret": "Sekret klienta GitHub",
|
||||
"admin.config.oauth.github-client-secret.description": "Sekret klienta aplikacji GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Sekret klienta aplikacji GitHub OAuth",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Czy jest włączony login na GitHub",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Czy jest włączony login na GitHub",
|
||||
"admin.config.oauth.google-client-id": "ID klienta Google",
|
||||
"admin.config.oauth.google-client-id.description": "ID klienta aplikacji GitHub OAuth",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"ID klienta aplikacji GitHub OAuth",
|
||||
"admin.config.oauth.google-client-secret": "Sekret klienta Google",
|
||||
"admin.config.oauth.google-client-secret.description": "Sekret klienta aplikacji Google OAuth",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Sekret klienta aplikacji Google OAuth",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Czy jest włączony login na GitHub",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Czy jest włączony login na GitHub",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID aplikacji Microsoft OAuth\nogólnie: Użytkownicy zarówno z osobistym kontem Microsoft, jak i kontem do pracy lub szkoły z Microsoft Entra ID mogą się zalogować do aplikacji. organizacje: Zalogować do aplikacji mogą tylko użytkownicy z kontami pracowniczymi lub szkolnymi z Microsoft Entra ID.\nkonsumenci: Zalogować się do aplikacji mogą tylko użytkownicy z osobistym kontem Microsoft.\nNazwa domeny lokatora Microsoft Entra lub identyfikator lokatora w formacie GUID: Zalogować się do aplikacji mogą tylko użytkownicy określonego najemcy Microsoft Entra (z listy członków na koncie służbowym lub szkolnym albo z listy gości na koncie osobistym Microsoft).",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Tenant ID aplikacji Microsoft OAuth\nogólnie: Użytkownicy zarówno z osobistym kontem Microsoft, jak i kontem do pracy lub szkoły z Microsoft Entra ID mogą się zalogować do aplikacji. organizacje: Zalogować do aplikacji mogą tylko użytkownicy z kontami pracowniczymi lub szkolnymi z Microsoft Entra ID.\nkonsumenci: Zalogować się do aplikacji mogą tylko użytkownicy z osobistym kontem Microsoft.\nNazwa domeny lokatora Microsoft Entra lub identyfikator lokatora w formacie GUID: Zalogować się do aplikacji mogą tylko użytkownicy określonego najemcy Microsoft Entra (z listy członków na koncie służbowym lub szkolnym albo z listy gości na koncie osobistym Microsoft).",
|
||||
"admin.config.oauth.microsoft-client-id": "ID klienta Microsoft",
|
||||
"admin.config.oauth.microsoft-client-id.description": "ID klienta aplikacji Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"ID klienta aplikacji Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret": "Sekret klienta Microsoft",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Sekret klienta aplikacji Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Sekret klienta aplikacji Microsoft OAuth",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Czy jest włączony login na Discord",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Czy jest włączony login na Discord",
|
||||
"admin.config.oauth.discord-limited-guild":
|
||||
"ID ograniczonego serwera Discord",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Ogranicz logowanie do użytkowników na określonym serwerze. Pozostaw puste, aby wyłączyć.",
|
||||
"admin.config.oauth.discord-client-id": "ID klienta Discord",
|
||||
"admin.config.oauth.discord-client-id.description": "ID klienta aplikacji Discord OAuth",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"ID klienta aplikacji Discord OAuth",
|
||||
"admin.config.oauth.discord-client-secret": "Sekret klienta Discord",
|
||||
"admin.config.oauth.discord-client-secret.description": "Sekret klienta aplikacji Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Czy jest włączony login OpenID",
|
||||
"admin.config.oauth.oidc-discovery-uri": "Wykrywanie URI OpenID",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Wykrywanie URI aplikacji OpenID OAuth",
|
||||
"admin.config.oauth.oidc-client-id": "ID klienta OpenID",
|
||||
"admin.config.oauth.oidc-client-id.description": "ID klienta aplikacji OpenID OAuth",
|
||||
"admin.config.oauth.oidc-client-secret": "Sekret klienta OpenID",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Sekret klienta aplikacji Discord OAuth",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Sekret klienta aplikacji Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Czy jest włączony login OpenID Connect",
|
||||
"admin.config.oauth.oidc-discovery-uri": "Wykrywanie URI OpenID Connect",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Wykrywanie URI OAuth aplikacji OpenID Connect",
|
||||
"admin.config.oauth.oidc-username-claim":
|
||||
"Żądanie nazwy użytkownika OpenID Connect",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Żądanie nazwy użytkownika w tokenie identyfikatora OpenID Connect. Jeśli nie wiesz, czym jest ta konfiguracja, pozostaw pustą.",
|
||||
"admin.config.oauth.oidc-client-id": "Identyfikator klienta OpenID Connect",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Identyfikator klienta OAuth aplikacji OpenID Connect",
|
||||
"admin.config.oauth.oidc-client-secret": "Sekret klienta OpenID Connect",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Sekret klienta OAuth aplikacji OpenID Connect",
|
||||
// 404
|
||||
"404.description": "Ups! Ta strona nie istnieje.",
|
||||
"404.button.home": "Wróć do strony domowej",
|
||||
@@ -373,21 +485,31 @@ export default {
|
||||
"error.description": "Ups!",
|
||||
"error.button.back": "Wróć",
|
||||
"error.msg.default": "Coś poszło nie tak.",
|
||||
"error.msg.access_denied": "Anulowałeś proces uwierzytelniania, spróbuj ponownie.",
|
||||
"error.msg.expired_token": "Proces uwierzytelniania trwał zbyt długo, spróbuj ponownie.",
|
||||
"error.msg.access_denied":
|
||||
"Anulowałeś proces uwierzytelniania, spróbuj ponownie.",
|
||||
"error.msg.expired_token":
|
||||
"Proces uwierzytelniania trwał zbyt długo, spróbuj ponownie.",
|
||||
"error.msg.invalid_token": "Błąd wewnętrzny",
|
||||
"error.msg.no_user": "Użytkownik powiązany z tym kontem {0} nie istnieje.",
|
||||
"error.msg.no_email": "Nie można pobrać adresu e-mail z tego konta {0}.",
|
||||
"error.msg.already_linked": "To konto {0} zostało już połączone z innym kontem.",
|
||||
"error.msg.not_linked": "To konto {0} nie zostało jeszcze połączone z żadnym kontem.",
|
||||
"error.msg.already_linked":
|
||||
"To konto {0} zostało już połączone z innym kontem.",
|
||||
"error.msg.not_linked":
|
||||
"To konto {0} nie zostało jeszcze połączone z żadnym kontem.",
|
||||
"error.msg.unverified_account":
|
||||
"To konto {0} nie zostało zweryfikowane, spróbuj ponownie po weryfikacji.",
|
||||
"error.msg.discord_guild_permission_denied": "Nie możesz się zalogować.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Nie można uzyskać informacji o użytkowniku z tego konta {0}.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Zapisz",
|
||||
"common.button.create": "Utwórz",
|
||||
"common.button.submit": "Zgłoś",
|
||||
"common.button.submit": "Prześlij",
|
||||
"common.button.delete": "Usuń",
|
||||
"common.button.cancel": "Anuluj",
|
||||
"common.button.confirm": "Potwierdź",
|
||||
@@ -396,8 +518,10 @@ export default {
|
||||
"common.button.generate": "Wygeneruj",
|
||||
"common.button.done": "Gotowe",
|
||||
"common.text.link": "Link",
|
||||
"common.text.navigate-to-link": "Przejdź do linku",
|
||||
"common.text.or": "lub",
|
||||
"common.button.go-back": "Wróć",
|
||||
"common.button.go-home": "Wróć do ekranu głównego",
|
||||
"common.notify.copied": "Link został skopiowany do schowka",
|
||||
"common.success": "Zakończono pomyślnie",
|
||||
"common.error": "Błąd",
|
||||
@@ -407,5 +531,5 @@ export default {
|
||||
"common.error.too-long": "Musi mieć co najmniej {length} znaków",
|
||||
"common.error.exact-length": "Musi mieć dokładnie {length} znaków",
|
||||
"common.error.invalid-number": "Musi być liczbą",
|
||||
"common.error.field-required": "To pole jest wymagane"
|
||||
};
|
||||
"common.error.field-required": "To pole jest wymagane",
|
||||
};
|
||||
|
||||
@@ -11,14 +11,19 @@ export default {
|
||||
"navbar.avatar.signout": "Terminar sessão",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "Uma plataforma de compartilhamento de arquivos <h>auto-hospedada</h>.",
|
||||
"home.description": "Deseja realmente dar os seus arquivos pessoais na mão de terceiros como o WeTransfer?",
|
||||
"home.title":
|
||||
"Uma plataforma de compartilhamento de arquivos <h>auto-hospedada</h>.",
|
||||
"home.description":
|
||||
"Deseja realmente dar os seus arquivos pessoais na mão de terceiros como o WeTransfer?",
|
||||
"home.bullet.a.name": "Auto-Hospedado",
|
||||
"home.bullet.a.description": "Hospede o Pingvin Share em sua própria máquina.",
|
||||
"home.bullet.a.description":
|
||||
"Hospede o Pingvin Share em sua própria máquina.",
|
||||
"home.bullet.b.name": "Privacidade",
|
||||
"home.bullet.b.description": "Seus arquivos são seus arquivos e nunca devem cair nas mãos de terceiros.",
|
||||
"home.bullet.b.description":
|
||||
"Seus arquivos são seus arquivos e nunca devem cair nas mãos de terceiros.",
|
||||
"home.bullet.c.name": "Sem limite de tamanho de arquivo irritante",
|
||||
"home.bullet.c.description": "Carregue os arquivos grandes que desejar. Apenas o seu disco rígido será o seu limite.",
|
||||
"home.bullet.c.description":
|
||||
"Carregue os arquivos grandes que desejar. Apenas o seu disco rígido será o seu limite.",
|
||||
"home.button.start": "Começar",
|
||||
"home.button.source": "Código-fonte",
|
||||
// END /
|
||||
@@ -31,8 +36,10 @@ export default {
|
||||
"signin.input.password": "Senha",
|
||||
"signin.input.password.placeholder": "A sua senha",
|
||||
"signin.button.submit": "Iniciar sessão",
|
||||
"signIn.notify.totp-required.title": "Autenticação de dois fatores necessária",
|
||||
"signIn.notify.totp-required.description": "Insira seu código de autenticação de dois fatores",
|
||||
"signIn.notify.totp-required.title":
|
||||
"Autenticação de dois fatores necessária",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Insira seu código de autenticação de dois fatores",
|
||||
"signIn.oauth.or": "OU",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -56,13 +63,16 @@ export default {
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Esqueceu a sua senha?",
|
||||
"resetPassword.description": "Insira o seu e-mail para redefinir a sua senha.",
|
||||
"resetPassword.notify.success": "Um e-mail foi enviado com um link para redefinir a sua senha.",
|
||||
"resetPassword.description":
|
||||
"Insira o seu e-mail para redefinir a sua senha.",
|
||||
"resetPassword.notify.success":
|
||||
"Uma mensagem com um link para redefinir sua senha foi enviada se o e-mail existir.",
|
||||
"resetPassword.button.back": "Voltar para a página inicial",
|
||||
"resetPassword.text.resetPassword": "Redefinir senha",
|
||||
"resetPassword.text.enterNewPassword": "Digite uma nova senha",
|
||||
"resetPassword.input.password": "Nova senha",
|
||||
"resetPassword.notify.passwordReset": "A sua senha foi redefinida com sucesso.",
|
||||
"resetPassword.notify.passwordReset":
|
||||
"A sua senha foi redefinida com sucesso.",
|
||||
// /account
|
||||
"account.title": "A minha conta",
|
||||
"account.card.info.title": "Informação sobre a conta",
|
||||
@@ -72,7 +82,8 @@ export default {
|
||||
"account.card.password.title": "Senha",
|
||||
"account.card.password.old": "Senha antiga",
|
||||
"account.card.password.new": "Nova senha",
|
||||
"account.card.password.noPasswordSet": "Você não tem uma senha definida. Se quiser entrar com e-mail e senha você precisa definir uma senha.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Você não tem uma senha definida. Se quiser entrar com e-mail e senha você precisa definir uma senha.",
|
||||
"account.notify.password.success": "Senha alterada com sucesso",
|
||||
"account.card.oauth.title": "Login com Redes Sociais",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +95,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Desvincular",
|
||||
"account.card.oauth.unlinked": "Desvinculado",
|
||||
"account.modal.unlink.title": "Desvincular conta",
|
||||
"account.modal.unlink.description": "Desvincular suas redes sociais pode fazer com que você perca sua conta se não se lembrar de seu nome de usuário e senha.",
|
||||
"account.modal.unlink.description":
|
||||
"Desvincular suas redes sociais pode fazer com que você perca sua conta se não se lembrar de seu nome de usuário e senha.",
|
||||
"account.notify.oauth.unlinked.success": "Desvinculado com sucesso",
|
||||
"account.card.security.title": "Segurança",
|
||||
"account.card.security.totp.enable.description": "Digite a sua senha atual para começar a habilitar o TOTP",
|
||||
"account.card.security.totp.disable.description": "Digite a sua senha atual para desabilitar o TOTP",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Digite a sua senha atual para começar a habilitar o TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Digite a sua senha atual para desabilitar o TOTP",
|
||||
"account.card.security.totp.button.start": "Iniciar",
|
||||
"account.modal.totp.title": "Habilitar TOTP",
|
||||
"account.modal.totp.step1": "Passo 1: Adicionar o seu autenticador",
|
||||
"account.modal.totp.step2": "Passo 2: Valide o seu código",
|
||||
"account.modal.totp.enterManually": "Inserir manualmente",
|
||||
"account.modal.totp.code": "Código",
|
||||
"account.modal.totp.clickToCopy": "Clique para copiar",
|
||||
"common.button.clickToCopy": "Clique para copiar",
|
||||
"account.modal.totp.verify": "Verificar",
|
||||
"account.notify.totp.disable": "TOTP desabilitado com sucesso",
|
||||
"account.notify.totp.enable": "TOTP habilitado com sucesso",
|
||||
"account.card.language.title": "Idioma",
|
||||
"account.card.language.description": "O projeto é traduzido pela comunidade. Alguns idiomas podem estar incompletos.",
|
||||
"account.card.language.description":
|
||||
"O projeto é traduzido pela comunidade. Alguns idiomas podem estar incompletos.",
|
||||
"account.card.color.title": "Esquema de cores",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Escuro",
|
||||
@@ -108,7 +123,8 @@ export default {
|
||||
"account.theme.system": "Sistema",
|
||||
"account.button.delete": "Excluir conta",
|
||||
"account.modal.delete.title": "Excluir conta",
|
||||
"account.modal.delete.description": "Você realmente deseja excluir a sua conta, incluindo todos os seus compartilhamentos ativos?",
|
||||
"account.modal.delete.description":
|
||||
"Você realmente deseja excluir a sua conta, incluindo todos os seus compartilhamentos ativos?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Meus compartilhamentos",
|
||||
@@ -126,13 +142,16 @@ export default {
|
||||
"account.shares.modal.share-informations": "Informações do compartilhamento",
|
||||
"account.shares.modal.share-link": "Link do compartilhamento",
|
||||
"account.shares.modal.delete.title": "Excluir o compartilhamento {share}",
|
||||
"account.shares.modal.delete.description": "Tem certeza que deseja excluir este compartilhamento?",
|
||||
"account.shares.modal.delete.description":
|
||||
"Tem certeza que deseja excluir este compartilhamento?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Compartilhamentos reversos",
|
||||
"account.reverseShares.description": "Um compartilhamento reverso permite gerar uma URL única que autoriza usuários externos criarem um compartilhamento.",
|
||||
"account.reverseShares.description":
|
||||
"Um compartilhamento reverso permite gerar uma URL única que autoriza usuários externos criarem um compartilhamento.",
|
||||
"account.reverseShares.title.empty": "Está vazio aqui 👀",
|
||||
"account.reverseShares.description.empty": "Você não tem nenhum compartilhamento reverso.",
|
||||
"account.reverseShares.description.empty":
|
||||
"Você não tem nenhum compartilhamento reverso.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Criar compartilhamento reverso",
|
||||
"account.reverseShares.modal.expiration.label": "Expiração",
|
||||
@@ -148,27 +167,37 @@ export default {
|
||||
"account.reverseShares.modal.expiration.month-plural": "Meses",
|
||||
"account.reverseShares.modal.expiration.year-singular": "Ano",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Anos",
|
||||
"account.reverseShares.modal.max-size.label": "Tamanho máximo do compartilhamento",
|
||||
"account.reverseShares.modal.max-size.label":
|
||||
"Tamanho máximo do compartilhamento",
|
||||
"account.reverseShares.modal.send-email": "Enviar notificação por e-mail",
|
||||
"account.reverseShares.modal.send-email.description": "Enviar uma notificação por e-mail quando um compartilhamento for criado com este link reverso.",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Enviar uma notificação por e-mail quando um compartilhamento for criado com este link reverso.",
|
||||
"account.reverseShares.modal.max-use.label": "Limite de uso",
|
||||
"account.reverseShares.modal.max-use.description": "A quantidade máxima de vezes que esta URL pode ser usada para criar um compartilhamento.",
|
||||
"account.reverseShare.never-expires": "Este compartilhamento reverso nunca irá expirar.",
|
||||
"account.reverseShare.expires-on": "Este compartilhamento reverso irá expirar em {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Nenhum compartilhamento criado ainda",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"A quantidade máxima de vezes que esta URL pode ser usada para criar um compartilhamento.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Este compartilhamento reverso nunca irá expirar.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Este compartilhamento reverso irá expirar em {expiration}.",
|
||||
"account.reverseShares.table.no-shares":
|
||||
"Nenhum compartilhamento criado ainda",
|
||||
"account.reverseShares.table.count.singular": "compartilhar",
|
||||
"account.reverseShares.table.count.plural": "compartilhamentos",
|
||||
"account.reverseShares.table.shares": "Compartilhamentos",
|
||||
"account.reverseShares.table.remaining": "Usos restantes",
|
||||
"account.reverseShares.table.max-size": "Tamanho máximo do compartilhamento",
|
||||
"account.reverseShares.table.expires": "Expira em",
|
||||
"account.reverseShares.modal.reverse-share-link": "Link do compartilhamento reverso",
|
||||
"account.reverseShares.modal.delete.title": "Excluir o compartilhamento reverso",
|
||||
"account.reverseShares.modal.delete.description": "Você realmente deseja excluir este compartilhamento reverso? Se você o fizer, os compartilhamentos associados também serão excluídos.",
|
||||
"account.reverseShares.modal.reverse-share-link":
|
||||
"Link do compartilhamento reverso",
|
||||
"account.reverseShares.modal.delete.title":
|
||||
"Excluir o compartilhamento reverso",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Você realmente deseja excluir este compartilhamento reverso? Se você o fizer, os compartilhamentos associados também serão excluídos.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Administração",
|
||||
"admin.button.users": "Gerenciamento de usuários",
|
||||
"admin.button.shares": "Gerenciamento de compartilhamentos",
|
||||
"admin.button.config": "Configuração",
|
||||
"admin.version": "Versão",
|
||||
// END /admin
|
||||
@@ -182,39 +211,60 @@ export default {
|
||||
"admin.users.edit.update.change-password.title": "Alterar senha",
|
||||
"admin.users.edit.update.change-password.field": "Nova senha",
|
||||
"admin.users.edit.update.change-password.button": "Salvar nova senha",
|
||||
"admin.users.edit.update.notify.password.success": "Senha alterada com sucesso",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Senha alterada com sucesso",
|
||||
"admin.users.edit.delete.title": "Excluir usuário {username}",
|
||||
"admin.users.edit.delete.description": "Você realmente quer excluir este usuário e todos os seus compartilhamentos?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Você realmente quer excluir este usuário e todos os seus compartilhamentos?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Criar usuário",
|
||||
"admin.users.modal.create.username": "Nome de usuário",
|
||||
"admin.users.modal.create.email": "E-mail",
|
||||
"admin.users.modal.create.password": "Senha",
|
||||
"admin.users.modal.create.manual-password": "Definir senha manualmente",
|
||||
"admin.users.modal.create.manual-password.description": "Se não estiver marcado, o usuário receberá um e-mail com um link para definir sua senha.",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Se não estiver marcado, o usuário receberá um e-mail com um link para definir sua senha.",
|
||||
"admin.users.modal.create.admin": "Privilégios de administrador",
|
||||
"admin.users.modal.create.admin.description": "Se marcado, o usuário poderá acessar o painel de administração.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Se marcado, o usuário poderá acessar o painel de administração.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Gerenciamento de compartilhamentos",
|
||||
"admin.shares.table.id": "ID do Compartilhamento",
|
||||
"admin.shares.table.username": "Criador",
|
||||
"admin.shares.table.visitors": "Visitantes",
|
||||
"admin.shares.table.expires": "Expira em",
|
||||
"admin.shares.edit.delete.title": "Excluir compartilhamento {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Tem certeza que deseja excluir este compartilhamento?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Carregar",
|
||||
"upload.notify.generic-error": "Ocorreu um erro ao terminar seu compartilhamento.",
|
||||
"upload.notify.count-failed": "Falha ao enviar {count} arquivos. Tentando novamente.",
|
||||
"upload.notify.generic-error":
|
||||
"Ocorreu um erro ao terminar seu compartilhamento.",
|
||||
"upload.notify.count-failed":
|
||||
"Falha ao enviar {count} arquivos. Tentando novamente.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Carregar arquivos",
|
||||
"upload.dropzone.description": "Arraste os arquivos aqui para iniciar o seu compartilhamento. Podemos aceitar apenas arquivos que são menores que {maxSize} no total.",
|
||||
"upload.dropzone.notify.file-too-big": "Seus arquivos excedem o tamanho máximo do compartilhamento {maxSize}.",
|
||||
"upload.dropzone.description":
|
||||
"Arraste os arquivos aqui para iniciar o seu compartilhamento. Podemos aceitar apenas arquivos que são menores que {maxSize} no total.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Seus arquivos excedem o tamanho máximo do compartilhamento {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Nome",
|
||||
"upload.filelist.size": "Tamanho",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Criar Compartilhamento",
|
||||
"upload.modal.link.error.invalid": "Pode conter apenas letras, números, sublinhados e hífens",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Pode conter apenas letras, números, sublinhados e hífens",
|
||||
"upload.modal.link.error.taken": "Este link já está em uso",
|
||||
"upload.modal.not-signed-in": "Você não está conectado",
|
||||
"upload.modal.not-signed-in-description": "Você não poderá excluir seu compartilhamento manualmente e visualizar a contagem de visitantes.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Você não poderá excluir seu compartilhamento manualmente e visualizar a contagem de visitantes.",
|
||||
"upload.modal.expires.never": "nunca",
|
||||
"upload.modal.expires.never-long": "Nunca expira",
|
||||
"upload.modal.expires.error.too-long": "Expiração excede a data de expiração máxima de {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Expiração excede a data de expiração máxima de {max}.",
|
||||
"upload.modal.link.label": "Link",
|
||||
"upload.modal.expires.label": "Expiração",
|
||||
"upload.modal.expires.minute-singular": "Minuto",
|
||||
@@ -229,45 +279,57 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Meses",
|
||||
"upload.modal.expires.year-singular": "Ano",
|
||||
"upload.modal.expires.year-plural": "Anos",
|
||||
"upload.modal.accordion.description.title": "Descrição",
|
||||
"upload.modal.accordion.description.placeholder": "Nota para os destinatários deste compartilhamento",
|
||||
"upload.modal.accordion.name-and-description.title": "Nome e descrição",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Nome",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Nota para os destinatários deste compartilhamento",
|
||||
"upload.modal.accordion.email.title": "Destinatários de e-mail",
|
||||
"upload.modal.accordion.email.placeholder": "Insira os destinatários do e-mail",
|
||||
"upload.modal.accordion.email.placeholder":
|
||||
"Insira os destinatários do e-mail",
|
||||
"upload.modal.accordion.email.invalid-email": "Endereço de e-mail inválido",
|
||||
"upload.modal.accordion.security.title": "Opções de segurança",
|
||||
"upload.modal.accordion.security.password.label": "Protecção por senha",
|
||||
"upload.modal.accordion.security.password.label": "Proteção por senha",
|
||||
"upload.modal.accordion.security.password.placeholder": "Sem senha",
|
||||
"upload.modal.accordion.security.max-views.label": "Máximo de visualizações",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Sem limite",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Este compartilhamento reverso nunca irá expirar.",
|
||||
"upload.modal.completed.expires-on": "Este compartilhamento reverso irá expirar em {expiration}.",
|
||||
"upload.modal.completed.never-expires":
|
||||
"Este compartilhamento reverso nunca irá expirar.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"Este compartilhamento reverso irá expirar em {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Compartilhamento pronto",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Compartilhar {shareId}",
|
||||
"share.description": "Veja o que eu compartilhei com você!",
|
||||
"share.error.visitor-limit-exceeded.title": "Limite de visitantes excedido",
|
||||
"share.error.visitor-limit-exceeded.description": "O limite de visitantes deste compartilhamento foi excedido.",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"O limite de visitantes deste compartilhamento foi excedido.",
|
||||
"share.error.removed.title": "Compartilhamento removido",
|
||||
"share.error.not-found.title": "Compartilhamento não encontrado",
|
||||
"share.error.not-found.description": "O compartilhamento que você procura não existe.",
|
||||
"share.error.not-found.description":
|
||||
"O compartilhamento que você procura não existe.",
|
||||
"share.modal.password.title": "Senha necessária",
|
||||
"share.modal.password.description": "Para acessar este compartilhamento, por favor digite a senha para o compartilhamento.",
|
||||
"share.modal.password.description":
|
||||
"Para acessar este compartilhamento, por favor digite a senha para o compartilhamento.",
|
||||
"share.modal.password": "Senha",
|
||||
"share.modal.error.invalid-password": "Senha inválida",
|
||||
"share.button.download-all": "Transferir tudo",
|
||||
"share.notify.download-all-preparing": "O compartilhamento está sendo preparado. Tente novamente em alguns minutos.",
|
||||
"share.notify.download-all-preparing":
|
||||
"O compartilhamento está sendo preparado. Tente novamente em alguns minutos.",
|
||||
"share.modal.file-link": "Link do arquivo",
|
||||
"share.table.name": "Nome",
|
||||
"share.table.size": "Tamanho",
|
||||
"share.modal.file-preview.error.not-supported.title": "Visualização não suportada",
|
||||
"share.modal.file-preview.error.not-supported.description": "Uma visualização para este tipo de arquivo não é suportada. Faça o download do arquivo para visualizá-lo.",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Visualização não suportada",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"Uma pré-visualização para este tipo de arquivo não é suportada. Faça o download do arquivo para visualizá-lo.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Editar {shareId}",
|
||||
"share.edit.append-upload": "Anexar arquivo",
|
||||
"share.edit.notify.generic-error": "Ocorreu um erro ao terminar seu compartilhamento.",
|
||||
"share.edit.notify.generic-error":
|
||||
"Ocorreu um erro ao terminar seu compartilhamento.",
|
||||
"share.edit.notify.save-success": "Compartilhamento atualizado com sucesso",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,91 +342,148 @@ export default {
|
||||
"admin.config.general.app-name": "Nome da aplicação",
|
||||
"admin.config.general.app-name.description": "Nome da aplicação",
|
||||
"admin.config.general.app-url": "URL do Aplicativo",
|
||||
"admin.config.general.app-url.description": "Em qual URL o Pingvin Share está disponível",
|
||||
"admin.config.general.app-url.description":
|
||||
"Em qual URL o Pingvin Share está disponível",
|
||||
"admin.config.general.show-home-page": "Mostrar a página inicial",
|
||||
"admin.config.general.show-home-page.description": "Mostrar ou não a página inicial",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Mostrar ou não a página inicial",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Alterar o seu logo carregando uma nova imagem. A imagem deve ser PNG e deve ter o formato 1:1.",
|
||||
"admin.config.general.logo.description":
|
||||
"Alterar o seu logo carregando uma nova imagem. A imagem deve ser PNG e deve ter o formato 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Escolhe uma imagem",
|
||||
"admin.config.email.enable-share-email-recipients": "Ativar compartilhamento de e-mails destinatários",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Se quiser permitir que e-mails compartilhem destinatários. Apenas habilite isso se você tiver ativado o SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Assunto dos destinatários do compartilhamento",
|
||||
"admin.config.email.share-recipients-subject.description": "Assunto do e-mail enviado para os destinatários do compartilhamento.",
|
||||
"admin.config.email.share-recipients-message": "Assunto dos destinatários do compartilhamento",
|
||||
"admin.config.email.share-recipients-message.description": "Mensagem que é enviada aos destinatários do compartilhamento. Variáveis disponíveis:\n {creator} - O nome de usuário do criador do compartilhamento\n {shareUrl} - O URL do compartilhamento\n {desc} - A descrição do compartilhamento\n {expires} - A data de expiração do compartilhamento\n As variáveis serão substituídas pelo valor real.",
|
||||
"admin.config.email.reverse-share-subject": "Assunto do compartilhamento reverso",
|
||||
"admin.config.email.reverse-share-subject.description": "Assunto do e-mail enviado quando alguém criou um compartilhamento com o seu link reverso.",
|
||||
"admin.config.email.reverse-share-message": "Mensagem do compartilhamento reverso",
|
||||
"admin.config.email.reverse-share-message.description": "Mensagem enviada quando alguém criou um compartilhamento com o link reverso. {shareUrl} será substituído pelo nome do criador e pela URL de compartilhamento.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Ativar compartilhamento de e-mails destinatários",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Se quiser permitir que e-mails compartilhem destinatários. Apenas habilite isso se você tiver ativado o SMTP.",
|
||||
"admin.config.email.share-recipients-subject":
|
||||
"Assunto dos destinatários do compartilhamento",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Assunto do e-mail enviado para os destinatários do compartilhamento.",
|
||||
"admin.config.email.share-recipients-message":
|
||||
"Assunto dos destinatários do compartilhamento",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Mensagem que é enviada aos destinatários do compartilhamento. Variáveis disponíveis:\n {creator} - O nome de usuário do criador do compartilhamento\n {shareUrl} - O URL do compartilhamento\n {desc} - A descrição do compartilhamento\n {expires} - A data de expiração do compartilhamento\n As variáveis serão substituídas pelo valor real.",
|
||||
"admin.config.email.reverse-share-subject":
|
||||
"Assunto do compartilhamento reverso",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Assunto do e-mail enviado quando alguém criou um compartilhamento com o seu link reverso.",
|
||||
"admin.config.email.reverse-share-message":
|
||||
"Mensagem do compartilhamento reverso",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Mensagem enviada quando alguém criou um compartilhamento com o link reverso. {shareUrl} será substituído pelo nome do criador e pela URL de compartilhamento.",
|
||||
"admin.config.email.reset-password-subject": "Redefinir assunto da senha",
|
||||
"admin.config.email.reset-password-subject.description": "Assunto do e-mail enviado quando um usuário solicita uma redefinição de senha.",
|
||||
"admin.config.email.reset-password-message": "Mensagem de redefinição de senha",
|
||||
"admin.config.email.reset-password-message.description": "Mensagem enviada quando um usuário solicita uma redefinição de senha. {url} será substituído pela URL de redefinição de senha.",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Assunto do e-mail enviado quando um usuário solicita uma redefinição de senha.",
|
||||
"admin.config.email.reset-password-message":
|
||||
"Mensagem de redefinição de senha",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Mensagem enviada quando um usuário solicita uma redefinição de senha. {url} será substituído pela URL de redefinição de senha.",
|
||||
"admin.config.email.invite-subject": "Assunto do convite",
|
||||
"admin.config.email.invite-subject.description": "Assunto do e-mail enviado quando um administrador convida um usuário.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Assunto do e-mail enviado quando um administrador convida um usuário.",
|
||||
"admin.config.email.invite-message": "Mensagem de convite",
|
||||
"admin.config.email.invite-message.description": "Mensagem enviada quando um administrador convida um usuário. {url} será substituído pelo URL de convite e {password} pela senha.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Mensagem enviada quando um administrador convida um usuário. {url} será substituído pelo URL de convite e {password} pela senha.",
|
||||
"admin.config.share.allow-registration": "Permitir novos registos",
|
||||
"admin.config.share.allow-registration.description": "Se o registro é permitido",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Permitir compartilhamentos sem autenticação",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Se usuários não autenticados podem criar compartilhamentos",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Se o registro é permitido",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Permitir compartilhamentos sem autenticação",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Se usuários não autenticados podem criar compartilhamentos",
|
||||
"admin.config.share.max-expiration": "Expiração máxima",
|
||||
"admin.config.share.max-expiration.description": "Validade máxima de ações em horas. Defina 0 para permitir expiração ilimitada.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Validade máxima de ações em horas. Defina 0 para permitir expiração ilimitada.",
|
||||
"admin.config.share.max-size": "Tamanho máximo",
|
||||
"admin.config.share.max-size.description": "Tamanho máximo do compartilhamento em bytes",
|
||||
"admin.config.share.max-size.description":
|
||||
"Tamanho máximo do compartilhamento em bytes",
|
||||
"admin.config.share.zip-compression-level": "Nível de compressão",
|
||||
"admin.config.share.zip-compression-level.description": "Ajuste o nível para equilibrar entre o tamanho do arquivo e a velocidade de compressão. Valores válidos vão de 0 a 9, com 0 sendo sem compressão e 9 sendo compressão máxima. ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Ajuste o nível para equilibrar entre o tamanho do arquivo e a velocidade de compressão. Valores válidos vão de 0 a 9, com 0 sendo sem compressão e 9 sendo compressão máxima. ",
|
||||
"admin.config.share.chunk-size": "Tamanho do pedaço",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Ajuste o tamanho do pedaço (em bytes) para seus uploads equilibrarem eficiência e confiabilidade de acordo com sua conexão com a internet. Pedaços menores podem aumentar as taxas de sucesso para conexões instáveis, enquanto partes maiores aceleram uploads para conexões estáveis.",
|
||||
"admin.config.smtp.enabled": "Ativado",
|
||||
"admin.config.smtp.enabled.description": "Se o SMTP está habilitado. Apenas defina como verdadeiro se você digitou o servidor, porta, e-mail, usuário e senha do seu servidor SMTP.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Se o SMTP está habilitado. Apenas defina como verdadeiro se você digitou o servidor, porta, e-mail, usuário e senha do seu servidor SMTP.",
|
||||
"admin.config.smtp.host": "Servidor",
|
||||
"admin.config.smtp.host.description": "Nome do Servidor SMTP",
|
||||
"admin.config.smtp.port": "Porta",
|
||||
"admin.config.smtp.port.description": "Porta do Servidor SMTP",
|
||||
"admin.config.smtp.email": "E-mail",
|
||||
"admin.config.smtp.email.description": "Endereço de e-mail do qual os e-mails são enviados",
|
||||
"admin.config.smtp.email.description":
|
||||
"Endereço de e-mail do qual os e-mails são enviados",
|
||||
"admin.config.smtp.username": "Nome de usuário",
|
||||
"admin.config.smtp.username.description": "Nome de usuário do servidor SMTP",
|
||||
"admin.config.smtp.password": "Senha",
|
||||
"admin.config.smtp.password.description": "Senha do servidor SMTP",
|
||||
"admin.config.smtp.button.test": "Enviar email de teste",
|
||||
"admin.config.oauth.allow-registration": "Permitir registro",
|
||||
"admin.config.oauth.allow-registration.description": "Permitir que os usuários se registrem através do login de redes sociais",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Permitir que os usuários se registrem através do login de redes sociais",
|
||||
"admin.config.oauth.ignore-totp": "Ignorar TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Ignorar o TOTP quando usuário usando login social",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Ignorar o TOTP quando usuário usando login social",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Se o login GitHub está habilitado",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Se o login GitHub está habilitado",
|
||||
"admin.config.oauth.github-client-id": "Client ID do GitHub",
|
||||
"admin.config.oauth.github-client-id.description": "ID do cliente do aplicativo GitHub OAuth",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"ID do cliente do aplicativo GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret": "Client Secret do GitHub",
|
||||
"admin.config.oauth.github-client-secret.description": "ID do cliente do aplicativo GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"ID do cliente do aplicativo GitHub OAuth",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Se o login GitHub está habilitado",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Se o login GitHub está habilitado",
|
||||
"admin.config.oauth.google-client-id": "Client ID do Google",
|
||||
"admin.config.oauth.google-client-id.description": "ID do cliente do aplicativo GitHub OAuth",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"ID do cliente do aplicativo GitHub OAuth",
|
||||
"admin.config.oauth.google-client-secret": "Client Secret do Google",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret do aplicativo GitHub OAuth",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Client secret do aplicativo GitHub OAuth",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Se o Microsoft login está habilitado",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Se o Microsoft login está habilitado",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "O ID do Tenant do app Microsoft OAuth\ncomum: Usuários com uma conta pessoal da Microsoft e uma conta de trabalho ou escola do Microsoft Entra podem entrar no aplicativo. organizações: somente usuários com contas de trabalho ou de escola do Microsoft Entra ID podem entrar no aplicativo.\nconsumidores: Somente usuários com uma conta pessoal da Microsoft podem acessar o aplicativo.\nnome de domínio do tenant Microsoft Entra ou do ID do inquilino no formato GUID: Somente usuários de um tenant Microsoft Entra específico (membros do diretório com uma conta de trabalho ou de diretório com uma conta pessoal da Microsoft) podem entrar no aplicativo.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"O ID do Tenant do app Microsoft OAuth\ncomum: Usuários com uma conta pessoal da Microsoft e uma conta de trabalho ou escola do Microsoft Entra podem entrar no aplicativo. organizações: somente usuários com contas de trabalho ou de escola do Microsoft Entra ID podem entrar no aplicativo.\nconsumidores: Somente usuários com uma conta pessoal da Microsoft podem acessar o aplicativo.\nnome de domínio do tenant Microsoft Entra ou do ID do inquilino no formato GUID: Somente usuários de um tenant Microsoft Entra específico (membros do diretório com uma conta de trabalho ou de diretório com uma conta pessoal da Microsoft) podem entrar no aplicativo.",
|
||||
"admin.config.oauth.microsoft-client-id": "ID do Cliente Microsoft",
|
||||
"admin.config.oauth.microsoft-client-id.description": "ID do cliente do aplicativo Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"ID do cliente do aplicativo Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret": "Segredo do Cliente Microsoft",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret do aplicativo Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client secret do aplicativo Microsoft OAuth",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Se o login do Discord está habilitado",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Se o login do Discord está habilitado",
|
||||
"admin.config.oauth.discord-limited-guild":
|
||||
"ID do servidor limitado do Discord",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limite de login para usuários em um servidor específico. Deixe em branco para desativar.",
|
||||
"admin.config.oauth.discord-client-id": "ID do Cliente Discord",
|
||||
"admin.config.oauth.discord-client-id.description": "ID do cliente do aplicativo Discord OAuth",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"ID do cliente do aplicativo Discord OAuth",
|
||||
"admin.config.oauth.discord-client-secret": "Segredo do Cliente Discord",
|
||||
"admin.config.oauth.discord-client-secret.description": "ID do cliente do aplicativo Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Se o OpenID login está habilitado",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "",
|
||||
"admin.config.oauth.oidc-client-id": "ID do Cliente OpenID",
|
||||
"admin.config.oauth.oidc-client-id.description": "ID do cliente do aplicativo OpenID OAuth",
|
||||
"admin.config.oauth.oidc-client-secret": "Segredo do Cliente OpenID",
|
||||
"admin.config.oauth.oidc-client-secret.description": "ID do cliente do aplicativo OpenID OAuth",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"ID do cliente do aplicativo Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "Conectar o OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Se o login do OpenID Connect está ativado",
|
||||
"admin.config.oauth.oidc-discovery-uri":
|
||||
"URI de descoberta do OpenID Connect",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"URI da descoberta do aplicativo OpenID Connect OAuth",
|
||||
"admin.config.oauth.oidc-username-claim":
|
||||
"Reivindicação de nome de usuário OpenID Connect",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Nome de usuário no token de ID OpenID Connect. Deixe em branco se você não sabe o que é esta configuração.",
|
||||
"admin.config.oauth.oidc-client-id": "ID do cliente OpenID Connect",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"ID do cliente do aplicativo OpenID OAuth",
|
||||
"admin.config.oauth.oidc-client-secret": "Segredo do cliente OpenID Connect",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"ID do cliente do aplicativo OpenID OAuth",
|
||||
// 404
|
||||
"404.description": "Ops, esta página não existe.",
|
||||
"404.button.home": "Me traga de volta para casa",
|
||||
@@ -373,17 +492,28 @@ export default {
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Voltar",
|
||||
"error.msg.default": "Algo deu errado.",
|
||||
"error.msg.access_denied": "Você cancelou o processo de autenticação, por favor, tente novamente.",
|
||||
"error.msg.expired_token": "O processo de autenticação demorou muito. Por favor, tente novamente.",
|
||||
"error.msg.access_denied":
|
||||
"Você cancelou o processo de autenticação, por favor, tente novamente.",
|
||||
"error.msg.expired_token":
|
||||
"O processo de autenticação demorou muito. Por favor, tente novamente.",
|
||||
"error.msg.invalid_token": "Erro interno",
|
||||
"error.msg.no_user": "O usuário vinculado a esta conta {0} não existe.",
|
||||
"error.msg.no_email": "Não é possível obter o endereço de e-mail desta conta {0}.",
|
||||
"error.msg.no_email":
|
||||
"Não é possível obter o endereço de e-mail desta conta {0}.",
|
||||
"error.msg.already_linked": "Esta conta {0} já está vinculada a outra conta.",
|
||||
"error.msg.not_linked": "Esta conta {0} ainda não foi vinculada a nenhuma conta.",
|
||||
"error.msg.not_linked":
|
||||
"Esta conta {0} ainda não foi vinculada a nenhuma conta.",
|
||||
"error.msg.unverified_account":
|
||||
"Esta conta {0} não foi verificada, tente novamente após a verificação.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"Você não tem permissão para acessar.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Não é possível obter suas informações de usuário desta conta {0}.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Salvar",
|
||||
"common.button.create": "Criar",
|
||||
@@ -396,8 +526,10 @@ export default {
|
||||
"common.button.generate": "Gerar",
|
||||
"common.button.done": "Concluído",
|
||||
"common.text.link": "Link",
|
||||
"common.text.navigate-to-link": "Ir para o link",
|
||||
"common.text.or": "ou",
|
||||
"common.button.go-back": "Voltar",
|
||||
"common.button.go-home": "Voltar para o Início",
|
||||
"common.notify.copied": "O seu link foi copiado para a área de transferência",
|
||||
"common.success": "Sucesso",
|
||||
"common.error": "Erro",
|
||||
@@ -407,5 +539,5 @@ export default {
|
||||
"common.error.too-long": "Deve ter no máximo {length} caracteres",
|
||||
"common.error.exact-length": "Deve ter exatamente {length} caracteres",
|
||||
"common.error.invalid-number": "Tem que ser um número",
|
||||
"common.error.field-required": "Este campo é obrigatório"
|
||||
};
|
||||
"common.error.field-required": "Este campo é obrigatório",
|
||||
};
|
||||
|
||||
@@ -12,13 +12,16 @@ export default {
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "Платформа для обмена файлами с <h>собственного хостинга</h>.",
|
||||
"home.description": "Вы действительно хотите предоставить свои личные файлы в руки третьих лиц, таких как WeTransfer?",
|
||||
"home.description":
|
||||
"Вы действительно хотите предоставить свои личные файлы в руки третьих лиц, таких как WeTransfer?",
|
||||
"home.bullet.a.name": "На собственном сервере",
|
||||
"home.bullet.a.description": "Pingvin Share работает на вашей машине.",
|
||||
"home.bullet.b.name": "Конфиденциальность",
|
||||
"home.bullet.b.description": "Ваши файлы - это ваши файлы и никогда не должны попадать в руки третьих лиц.",
|
||||
"home.bullet.b.description":
|
||||
"Ваши файлы - это ваши файлы и никогда не должны попадать в руки третьих лиц.",
|
||||
"home.bullet.c.name": "Без раздражающего ограничения размера файла",
|
||||
"home.bullet.c.description": "Загружайте файлы с любым размером. Только ваш жесткий диск будет пределом.",
|
||||
"home.bullet.c.description":
|
||||
"Загружайте файлы с любым размером. Только ваш жесткий диск будет пределом.",
|
||||
"home.button.start": "Начнем",
|
||||
"home.button.source": "Исходный код",
|
||||
// END /
|
||||
@@ -32,7 +35,8 @@ export default {
|
||||
"signin.input.password.placeholder": "Ваш пароль",
|
||||
"signin.button.submit": "Вход",
|
||||
"signIn.notify.totp-required.title": "Требуется двухфакторная аутентификация",
|
||||
"signIn.notify.totp-required.description": "Пожалуйста, введите код Вашей 2-х факторной аутентификации",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Пожалуйста, введите код Вашей 2-х факторной аутентификации",
|
||||
"signIn.oauth.or": "ИЛИ",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -57,7 +61,8 @@ export default {
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Забыли пароль?",
|
||||
"resetPassword.description": "Введите ваш email для восстановления пароля.",
|
||||
"resetPassword.notify.success": "Вам направлено письмо со ссылкой для сброса пароля.",
|
||||
"resetPassword.notify.success":
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.button.back": "Вернуться на страницу входа",
|
||||
"resetPassword.text.resetPassword": "Сбросить пароль",
|
||||
"resetPassword.text.enterNewPassword": "Введите новый пароль",
|
||||
@@ -72,7 +77,8 @@ export default {
|
||||
"account.card.password.title": "Пароль",
|
||||
"account.card.password.old": "Старый пароль",
|
||||
"account.card.password.new": "Новый пароль",
|
||||
"account.card.password.noPasswordSet": "У вас не установлен пароль. Если вы хотите войти с помощью электронной почты и пароля, вам необходимо установить пароль.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"У вас не установлен пароль. Если вы хотите войти с помощью электронной почты и пароля, вам необходимо установить пароль.",
|
||||
"account.notify.password.success": "Пароль успешно изменён",
|
||||
"account.card.oauth.title": "Авторизация через социальные сети",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +90,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Отключить",
|
||||
"account.card.oauth.unlinked": "Отключен",
|
||||
"account.modal.unlink.title": "Отключить связь с учетной записью",
|
||||
"account.modal.unlink.description": "Отключение связи с учетной записью социальных аккаунтов может привести к потере вашей учетной записи, если вы не помните свое имя пользователя и пароль.",
|
||||
"account.modal.unlink.description":
|
||||
"Отключение связи с учетной записью социальных аккаунтов может привести к потере вашей учетной записи, если вы не помните свое имя пользователя и пароль.",
|
||||
"account.notify.oauth.unlinked.success": "Отключение прошло успешно",
|
||||
"account.card.security.title": "Безопасность",
|
||||
"account.card.security.totp.enable.description": "Введите ваш текущий пароль для начала включения TOTP",
|
||||
"account.card.security.totp.disable.description": "Введите ваш текущий пароль, чтобы отключить TOTP",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Введите ваш текущий пароль для начала включения TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Введите ваш текущий пароль, чтобы отключить TOTP",
|
||||
"account.card.security.totp.button.start": "Начать",
|
||||
"account.modal.totp.title": "Включить TOTP",
|
||||
"account.modal.totp.step1": "Шаг 1: Добавьте свой аутентификатор",
|
||||
"account.modal.totp.step2": "Шаг 2: Проверка кода",
|
||||
"account.modal.totp.enterManually": "Ввести вручную",
|
||||
"account.modal.totp.code": "Код",
|
||||
"account.modal.totp.clickToCopy": "Нажмите, чтобы скопировать",
|
||||
"common.button.clickToCopy": "Нажмите, чтобы скопировать",
|
||||
"account.modal.totp.verify": "Подтвердить",
|
||||
"account.notify.totp.disable": "TOTP успешно отключен",
|
||||
"account.notify.totp.enable": "TOTP успешно включен",
|
||||
"account.card.language.title": "Язык",
|
||||
"account.card.language.description": "Проект переведен сообществом. Некоторые языки могут быть неполными.",
|
||||
"account.card.language.description":
|
||||
"Проект переведен сообществом. Некоторые языки могут быть неполными.",
|
||||
"account.card.color.title": "Цветовая схема",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Тёмная",
|
||||
@@ -108,7 +118,8 @@ export default {
|
||||
"account.theme.system": "Системная",
|
||||
"account.button.delete": "Удалить аккаунт",
|
||||
"account.modal.delete.title": "Удалить аккаунт",
|
||||
"account.modal.delete.description": "Вы действительно хотите удалить свою учетную запись, включая все ваши загрузки?",
|
||||
"account.modal.delete.description":
|
||||
"Вы действительно хотите удалить свою учетную запись, включая все ваши загрузки?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Мои загрузки",
|
||||
@@ -126,13 +137,16 @@ export default {
|
||||
"account.shares.modal.share-informations": "Сведения",
|
||||
"account.shares.modal.share-link": "Поделиться ссылкой",
|
||||
"account.shares.modal.delete.title": "Удалить загрузку {share}",
|
||||
"account.shares.modal.delete.description": "Вы действительно хотите удалить эту загрузку?",
|
||||
"account.shares.modal.delete.description":
|
||||
"Вы действительно хотите удалить эту загрузку?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Обратные загрузки",
|
||||
"account.reverseShares.description": "Обратная загрузка позволяет генерировать уникальный URL, позволяющий внешним пользователям загружать файлы.",
|
||||
"account.reverseShares.description":
|
||||
"Обратная загрузка позволяет генерировать уникальный URL, позволяющий внешним пользователям загружать файлы.",
|
||||
"account.reverseShares.title.empty": "Тут пусто 👀",
|
||||
"account.reverseShares.description.empty": "У вас пока нет обратных загрузок.",
|
||||
"account.reverseShares.description.empty":
|
||||
"У вас пока нет обратных загрузок.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Создать обратную ссылку на файл",
|
||||
"account.reverseShares.modal.expiration.label": "Истекает",
|
||||
@@ -149,12 +163,17 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-singular": "Год",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Года (лет)",
|
||||
"account.reverseShares.modal.max-size.label": "Макс. размер загрузки",
|
||||
"account.reverseShares.modal.send-email": "Отправить уведомление по эл. почте",
|
||||
"account.reverseShares.modal.send-email.description": "Отправлять уведомление по электронной почте, когда загрузка создается с помощью этой обратной ссылки.",
|
||||
"account.reverseShares.modal.send-email":
|
||||
"Отправить уведомление по эл. почте",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Отправлять уведомление по электронной почте, когда загрузка создается с помощью этой обратной ссылки.",
|
||||
"account.reverseShares.modal.max-use.label": "Максимум использований",
|
||||
"account.reverseShares.modal.max-use.description": "Максимальное количество раз, когда URL может быть использован для создания загрузки.",
|
||||
"account.reverseShare.never-expires": "Эта обратная загрузка никогда не устареет.",
|
||||
"account.reverseShare.expires-on": "Эта обратная загрузка устареет {expiration}.",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Максимальное количество раз, когда URL может быть использован для создания загрузки.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Эта обратная загрузка никогда не устареет.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Эта обратная загрузка устареет {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Нет созданных загрузок",
|
||||
"account.reverseShares.table.count.singular": "загрузка",
|
||||
"account.reverseShares.table.count.plural": "загрузки",
|
||||
@@ -164,11 +183,13 @@ export default {
|
||||
"account.reverseShares.table.expires": "Действительно до",
|
||||
"account.reverseShares.modal.reverse-share-link": "Ссылка обратной загрузки",
|
||||
"account.reverseShares.modal.delete.title": "Удалить обратную загрузку",
|
||||
"account.reverseShares.modal.delete.description": "Вы действительно хотите удалить эту обратную загрузку? Если вы это сделаете, то все связанные обратные загрузки будут также удалены.",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Вы действительно хотите удалить эту обратную загрузку? Если вы это сделаете, то все связанные обратные загрузки будут также удалены.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Администрирование",
|
||||
"admin.button.users": "Управление пользователями",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Конфигурация",
|
||||
"admin.version": "Версия",
|
||||
// END /admin
|
||||
@@ -184,37 +205,57 @@ export default {
|
||||
"admin.users.edit.update.change-password.button": "Сохранить новый пароль",
|
||||
"admin.users.edit.update.notify.password.success": "Пароль успешно изменён",
|
||||
"admin.users.edit.delete.title": "Удалить пользователя {username}",
|
||||
"admin.users.edit.delete.description": "Вы действительно хотите удалить этого пользователя и все его загрузки?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Вы действительно хотите удалить этого пользователя и все его загрузки?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Создать пользователя",
|
||||
"admin.users.modal.create.username": "Логин",
|
||||
"admin.users.modal.create.email": "Электронная почта",
|
||||
"admin.users.modal.create.password": "Пароль",
|
||||
"admin.users.modal.create.manual-password": "Установить пароль вручную",
|
||||
"admin.users.modal.create.manual-password.description": "Если флажок не установлен, пользователь получит письмо со ссылкой для установки пароля.",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Если флажок не установлен, пользователь получит письмо со ссылкой для установки пароля.",
|
||||
"admin.users.modal.create.admin": "Права администратора",
|
||||
"admin.users.modal.create.admin.description": "Если отмечено, пользователь будет иметь доступ к панели администратора.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Если отмечено, пользователь будет иметь доступ к панели администратора.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Загрузить",
|
||||
"upload.notify.generic-error": "Произошла ошибка при завершении вашей загрузки.",
|
||||
"upload.notify.count-failed": "Не удалось загрузить файлы {count}. Повтор попытки.",
|
||||
"upload.notify.generic-error":
|
||||
"Произошла ошибка при завершении вашей загрузки.",
|
||||
"upload.notify.count-failed":
|
||||
"Не удалось загрузить файлы {count}. Повтор попытки.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Загрузить файлы",
|
||||
"upload.dropzone.description": "Перетащите сюда файлы для начала загрузки. Мы можем принимать только файлы, которые меньше {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big": "Ваши файлы превышают максимальный размер в {maxSize}.",
|
||||
"upload.dropzone.description":
|
||||
"Перетащите сюда файлы для начала загрузки. Мы можем принимать только файлы, которые меньше {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Ваши файлы превышают максимальный размер в {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Название",
|
||||
"upload.filelist.size": "Размер",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Загрузить",
|
||||
"upload.modal.link.error.invalid": "Имя пользователя должно состоять только из букв, цифр, подчёркиваний и дефисов",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Имя пользователя должно состоять только из букв, цифр, подчёркиваний и дефисов",
|
||||
"upload.modal.link.error.taken": "Эта ссылка уже используется",
|
||||
"upload.modal.not-signed-in": "Вы не авторизованы",
|
||||
"upload.modal.not-signed-in-description": "Вы не сможете удалить свои файлы вручную и просмотреть количество посетителей.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Вы не сможете удалить свои файлы вручную и просмотреть количество посетителей.",
|
||||
"upload.modal.expires.never": "никогда",
|
||||
"upload.modal.expires.never-long": "Никогда не истекает",
|
||||
"upload.modal.expires.error.too-long": "Срок действия превышает максимальную дату окончания срока действия {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Срок действия превышает максимальную дату окончания срока действия {max}.",
|
||||
"upload.modal.link.label": "Ссылка",
|
||||
"upload.modal.expires.label": "Истекает",
|
||||
"upload.modal.expires.minute-singular": "Минута",
|
||||
@@ -229,11 +270,13 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Месяца(-ев)",
|
||||
"upload.modal.expires.year-singular": "Год",
|
||||
"upload.modal.expires.year-plural": "Года (лет)",
|
||||
"upload.modal.accordion.description.title": "Описание",
|
||||
"upload.modal.accordion.description.placeholder": "Примечание для получателей этой загрузки",
|
||||
"upload.modal.accordion.name-and-description.title": "Имя и описание",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Имя",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder": "Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "Получатели письма",
|
||||
"upload.modal.accordion.email.placeholder": "Получатели e-mail",
|
||||
"upload.modal.accordion.email.invalid-email": "Недопустимый адрес электронной почты",
|
||||
"upload.modal.accordion.email.invalid-email":
|
||||
"Недопустимый адрес электронной почты",
|
||||
"upload.modal.accordion.security.title": "Параметры безопасности",
|
||||
"upload.modal.accordion.security.password.label": "Защита паролем",
|
||||
"upload.modal.accordion.security.password.placeholder": "Без пароля",
|
||||
@@ -248,26 +291,33 @@ export default {
|
||||
"share.title": "Загрузка {shareId}",
|
||||
"share.description": "Посмотрите, чем я поделился с вами!",
|
||||
"share.error.visitor-limit-exceeded.title": "Превышен лимит посетителей",
|
||||
"share.error.visitor-limit-exceeded.description": "Превышен лимит посетителей.",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Превышен лимит посетителей.",
|
||||
"share.error.removed.title": "Загрузка удалена",
|
||||
"share.error.not-found.title": "Загрузка не найдена",
|
||||
"share.error.not-found.description": "Страница, которую вы ищете, не существует.",
|
||||
"share.error.not-found.description":
|
||||
"Страница, которую вы ищете, не существует.",
|
||||
"share.modal.password.title": "Требуется пароль",
|
||||
"share.modal.password.description": "Для доступа к этому ресурсу введите пароль для общего доступа.",
|
||||
"share.modal.password.description":
|
||||
"Для доступа к этому ресурсу введите пароль для общего доступа.",
|
||||
"share.modal.password": "Пароль",
|
||||
"share.modal.error.invalid-password": "Неверный пароль",
|
||||
"share.button.download-all": "Скачать все",
|
||||
"share.notify.download-all-preparing": "Загрузка готовится. Повторите попытку через несколько минут.",
|
||||
"share.notify.download-all-preparing":
|
||||
"Загрузка готовится. Повторите попытку через несколько минут.",
|
||||
"share.modal.file-link": "Ссылка на файл",
|
||||
"share.table.name": "Название",
|
||||
"share.table.size": "Размер",
|
||||
"share.modal.file-preview.error.not-supported.title": "Предпросмотр не поддерживается",
|
||||
"share.modal.file-preview.error.not-supported.description": "Предварительный просмотр этого типа файла не поддерживается. Пожалуйста, скачайте файл для его просмотра.",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Предпросмотр не поддерживается",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"A preview for this file type is unsupported. Please download the file to view it.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Редактировать {shareId}",
|
||||
"share.edit.append-upload": "Добавить файл",
|
||||
"share.edit.notify.generic-error": "Произошла ошибка при завершении вашей загрузки.",
|
||||
"share.edit.notify.generic-error":
|
||||
"Произошла ошибка при завершении вашей загрузки.",
|
||||
"share.edit.notify.save-success": "Ссылка на ресурс успешна обновлена",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,91 +330,140 @@ export default {
|
||||
"admin.config.general.app-name": "Название приложения",
|
||||
"admin.config.general.app-name.description": "Видимое название приложения",
|
||||
"admin.config.general.app-url": "URL-адрес приложения",
|
||||
"admin.config.general.app-url.description": "Адрес на котором доступен Pingvin Share",
|
||||
"admin.config.general.app-url.description":
|
||||
"Адрес на котором доступен Pingvin Share",
|
||||
"admin.config.general.show-home-page": "Показывать домашнюю страницу",
|
||||
"admin.config.general.show-home-page.description": "Показывать ли домашнюю страницу или нет",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Показывать ли домашнюю страницу или нет",
|
||||
"admin.config.general.logo": "Логотип",
|
||||
"admin.config.general.logo.description": "Измените свой логотип, загрузив новое изображение. Изображение должно быть PNG и должно иметь формат 1:1.",
|
||||
"admin.config.general.logo.description":
|
||||
"Измените свой логотип, загрузив новое изображение. Изображение должно быть PNG и должно иметь формат 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Выберите изображение",
|
||||
"admin.config.email.enable-share-email-recipients": "Включить обмен с получателями электронной почты",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Разрешить ли отправку писем получателям. Включите, только если вы включили SMTP.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Включить обмен с получателями электронной почты",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Разрешить ли отправку писем получателям. Включите, только если вы включили SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Заголовок письма (загрузка)",
|
||||
"admin.config.email.share-recipients-subject.description": "Тема письма, которое отправляется получателям акции.",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Тема письма, которое отправляется получателям акции.",
|
||||
"admin.config.email.share-recipients-message": "Сообщение письма загрузки",
|
||||
"admin.config.email.share-recipients-message.description": "Сообщение, которое отправляется получателям публикации. Доступные переменные:\n {creator} - Имя пользователя создателя загрузки\n {shareUrl} - URL загрузки\n {desc} - Описание загрузки\n {expires} - Дата истечения загрузки\n Переменные будут заменены на фактическое значение.",
|
||||
"admin.config.email.reverse-share-subject": "Заголовок письма (обратная загрузка)",
|
||||
"admin.config.email.reverse-share-subject.description": "Тема письма, которое отправляется, когда кто-то создал загрузку с вашей обратной ссылкой.",
|
||||
"admin.config.email.reverse-share-message": "Сообщение письма обратной загрузки",
|
||||
"admin.config.email.reverse-share-message.description": "Сообщение, которое отправляется, когда кто-то создал загрузку с вашей обратной ссылкой. {shareUrl} будет заменен именем создателя и URL-адресом общего доступа.",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Сообщение, которое отправляется получателям публикации. Доступные переменные:\n {creator} - Имя пользователя создателя загрузки\n {shareUrl} - URL загрузки\n {desc} - Описание загрузки\n {expires} - Дата истечения загрузки\n Переменные будут заменены на фактическое значение.",
|
||||
"admin.config.email.reverse-share-subject":
|
||||
"Заголовок письма (обратная загрузка)",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Тема письма, которое отправляется, когда кто-то создал загрузку с вашей обратной ссылкой.",
|
||||
"admin.config.email.reverse-share-message":
|
||||
"Сообщение письма обратной загрузки",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Сообщение, которое отправляется, когда кто-то создал загрузку с вашей обратной ссылкой. {shareUrl} будет заменен именем создателя и URL-адресом общего доступа.",
|
||||
"admin.config.email.reset-password-subject": "Тема сброса пароля",
|
||||
"admin.config.email.reset-password-subject.description": "Тема письма, которое отправляется, когда пользователь запрашивает сброс пароля.",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Тема письма, которое отправляется, когда пользователь запрашивает сброс пароля.",
|
||||
"admin.config.email.reset-password-message": "Сообщение о сбросе пароля",
|
||||
"admin.config.email.reset-password-message.description": "Сообщение, которое отправляется при запросе сброса пароля. {url} будет заменён ссылкой.",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Сообщение, которое отправляется при запросе сброса пароля. {url} будет заменён ссылкой.",
|
||||
"admin.config.email.invite-subject": "Тема приглашения",
|
||||
"admin.config.email.invite-subject.description": "Тема письма, которое отправляется, когда администратор приглашает пользователя.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Тема письма, которое отправляется, когда администратор приглашает пользователя.",
|
||||
"admin.config.email.invite-message": "Сообщение с приглашением",
|
||||
"admin.config.email.invite-message.description": "Сообщение приглашения. {url} будет заменён ссылкой приглашения, а {password} паролем.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Сообщение приглашения. {url} будет заменён ссылкой приглашения, а {password} паролем.",
|
||||
"admin.config.share.allow-registration": "Разрешить регистрацию",
|
||||
"admin.config.share.allow-registration.description": "Разрешена ли регистрация",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Разрешить неавторизованные загрузки",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Могут ли неавторизованные пользователи создавать загрузки",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Разрешена ли регистрация",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Разрешить неавторизованные загрузки",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Могут ли неавторизованные пользователи создавать загрузки",
|
||||
"admin.config.share.max-expiration": "Максимальная срок действия",
|
||||
"admin.config.share.max-expiration.description": "Максимальный срок действия общего доступа в часах. Установите значение 0, чтобы разрешить неограниченный срок действия.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Максимальный срок действия общего доступа в часах. Установите значение 0, чтобы разрешить неограниченный срок действия.",
|
||||
"admin.config.share.max-size": "Максимальный размер",
|
||||
"admin.config.share.max-size.description": "Максимальный размер файла в байтах",
|
||||
"admin.config.share.max-size.description":
|
||||
"Максимальный размер файла в байтах",
|
||||
"admin.config.share.zip-compression-level": "Уровень сжатия Zip",
|
||||
"admin.config.share.zip-compression-level.description": "Регулировка уровня баланса между размером файла и скоростью сжатия. Допустимые значения от 0 до 9, с 0 без сжатия, а 9 - максимальное сжатие. ",
|
||||
"admin.config.share.chunk-size": "Размер чанка",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "Включено",
|
||||
"admin.config.smtp.enabled.description": "Включено ли SMTP. Установите значение true только если вы ввели хост, порт, email, пользователь и пароль вашего SMTP-сервера.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Включено ли SMTP. Установите значение true только если вы ввели хост, порт, email, пользователь и пароль вашего SMTP-сервера.",
|
||||
"admin.config.smtp.host": "Хост",
|
||||
"admin.config.smtp.host.description": "Сервер SMTP сервера",
|
||||
"admin.config.smtp.port": "Порт",
|
||||
"admin.config.smtp.port.description": "Порт SMTP сервера",
|
||||
"admin.config.smtp.email": "Электронная почта",
|
||||
"admin.config.smtp.email.description": "Адрес электронной почты, от которого отправляются письма",
|
||||
"admin.config.smtp.email.description":
|
||||
"Адрес электронной почты, от которого отправляются письма",
|
||||
"admin.config.smtp.username": "Логин",
|
||||
"admin.config.smtp.username.description": "Имя пользователя SMTP сервера",
|
||||
"admin.config.smtp.password": "Пароль",
|
||||
"admin.config.smtp.password.description": "Пароль SMTP-сервера",
|
||||
"admin.config.smtp.button.test": "Отправить тестовое письмо",
|
||||
"admin.config.oauth.allow-registration": "Разрешить регистрацию",
|
||||
"admin.config.oauth.allow-registration.description": "Разрешить пользователям регистрироваться используя учетные записи социальных сетей",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Разрешить пользователям регистрироваться используя учетные записи социальных сетей",
|
||||
"admin.config.oauth.ignore-totp": "Игнорировать TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Игнорировать TOTP при использовании социальной авторизации",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Игнорировать TOTP при использовании социальной авторизации",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Включен ли логин на GitHub",
|
||||
"admin.config.oauth.github-client-id": "ID клиента GitHub",
|
||||
"admin.config.oauth.github-client-id.description": "ID клиента в приложении GitHub OAuth",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"ID клиента в приложении GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret": "Секретный ключ клиента GitHub",
|
||||
"admin.config.oauth.github-client-secret.description": "Секретный ключ клиента в приложении GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Секретный ключ клиента в приложении GitHub OAuth",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Включен ли логин Google на GitHub",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Включен ли логин Google на GitHub",
|
||||
"admin.config.oauth.google-client-id": "ID клиента Google",
|
||||
"admin.config.oauth.google-client-id.description": "ID клиента в приложении Google OAuth",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"ID клиента в приложении Google OAuth",
|
||||
"admin.config.oauth.google-client-secret": "Секретный ключ клиента Google",
|
||||
"admin.config.oauth.google-client-secret.description": "Секретный ключ клиента в приложении Google OAuth",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Секретный ключ клиента в приложении Google OAuth",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Включен ли логин Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Включен ли логин Microsoft",
|
||||
"admin.config.oauth.microsoft-tenant": "Корпоративный аккаунт Microsoft",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Идентификатор арендатора приложения Microsoft OAuth\ncommon: Пользователи с личным аккаунтом Microsoft и рабочим или учебным аккаунтом от Microsoft Entra ID могут войти в приложение. organizations: Только пользователи с рабочим или учебным аккаунтом от Microsoft Entra ID могут войти в приложение.\nconsumers: Только пользователи с личным аккаунтом Microsoft могут войти в приложение.\nимя домена арендатора Microsoft Entra или идентификатор арендатора в формате GUID: Только пользователи из определенного арендатора Microsoft Entra (участники каталога с рабочим или учебным аккаунтом или гости каталога с личным аккаунтом Microsoft) могут войти в приложение.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Идентификатор арендатора приложения Microsoft OAuth\ncommon: Пользователи с личным аккаунтом Microsoft и рабочим или учебным аккаунтом от Microsoft Entra ID могут войти в приложение. organizations: Только пользователи с рабочим или учебным аккаунтом от Microsoft Entra ID могут войти в приложение.\nconsumers: Только пользователи с личным аккаунтом Microsoft могут войти в приложение.\nимя домена арендатора Microsoft Entra или идентификатор арендатора в формате GUID: Только пользователи из определенного арендатора Microsoft Entra (участники каталога с рабочим или учебным аккаунтом или гости каталога с личным аккаунтом Microsoft) могут войти в приложение.",
|
||||
"admin.config.oauth.microsoft-client-id": "Идентификатор клиента Microsoft",
|
||||
"admin.config.oauth.microsoft-client-id.description": "ID клиента в приложении Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret": "Секретный ключ клиента Microsoft",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Секретный ключ клиента в приложении Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"ID клиента в приложении Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret":
|
||||
"Секретный ключ клиента Microsoft",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Секретный ключ клиента в приложении Microsoft OAuth",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Включен ли логин Discord",
|
||||
"admin.config.oauth.discord-limited-guild":
|
||||
"ID ограниченного сервера Discord",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Ограничение входа для пользователей определенного сервера. Оставьте пустым, чтобы отключить.",
|
||||
"admin.config.oauth.discord-client-id": "ID клиента Discord",
|
||||
"admin.config.oauth.discord-client-id.description": "ID клиента в приложении Discord OAuth",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"ID клиента в приложении Discord OAuth",
|
||||
"admin.config.oauth.discord-client-secret": "Секретный ключ клиента Discord",
|
||||
"admin.config.oauth.discord-client-secret.description": "Секретный ключ клиента в приложении Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Включен ли логин OpenID",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI приложения OpenID OAuth",
|
||||
"admin.config.oauth.oidc-client-id": "ID клиента OpenID",
|
||||
"admin.config.oauth.oidc-client-id.description": "ID клиента в приложении OpenID OAuth",
|
||||
"admin.config.oauth.oidc-client-secret": "Секретный ключ клиента OpenID",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Секретный ключ клиента в приложении OpenID OAuth",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Секретный ключ клиента в приложении Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Whether OpenID Connect login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "Упс, этой страницы не существует.",
|
||||
"404.button.home": "Верните меня домой",
|
||||
@@ -373,17 +472,29 @@ export default {
|
||||
"error.description": "Что-то пошло не так!",
|
||||
"error.button.back": "Назад",
|
||||
"error.msg.default": "Что-то пошло не так.",
|
||||
"error.msg.access_denied": "Вы отменили процесс аутентификации, пожалуйста, попробуйте еще раз.",
|
||||
"error.msg.expired_token": "Процесс аутентификации занял слишком много времени, пожалуйста, попробуйте еще раз.",
|
||||
"error.msg.no_user": "Пользователь связанный с учетной записью {0} не существует.",
|
||||
"error.msg.no_email": "Не удается получить адрес электронной почты от учетной записи {0}.",
|
||||
"error.msg.already_linked": "Эта учетная запись {0} уже привязана к другому аккаунту.",
|
||||
"error.msg.not_linked": "Эта учетная запись {0} ещё не привязана ни к одному аккаунту.",
|
||||
"error.msg.access_denied":
|
||||
"Вы отменили процесс аутентификации, пожалуйста, попробуйте еще раз.",
|
||||
"error.msg.expired_token":
|
||||
"Процесс аутентификации занял слишком много времени, пожалуйста, попробуйте еще раз.",
|
||||
"error.msg.invalid_token": "Внутренняя ошибка",
|
||||
"error.msg.no_user":
|
||||
"Пользователь связанный с учетной записью {0} не существует.",
|
||||
"error.msg.no_email":
|
||||
"Не удается получить адрес электронной почты от учетной записи {0}.",
|
||||
"error.msg.already_linked":
|
||||
"Эта учетная запись {0} уже привязана к другому аккаунту.",
|
||||
"error.msg.not_linked":
|
||||
"Эта учетная запись {0} ещё не привязана ни к одному аккаунту.",
|
||||
"error.msg.unverified_account":
|
||||
"Эта учетная запись {0} не подтверждена, повторите попытку после подтверждения.",
|
||||
"error.msg.discord_guild_permission_denied": "У вас нет разрешения на вход.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Can not get your user info from this {0} account.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Сохранить",
|
||||
"common.button.create": "Создать",
|
||||
@@ -396,8 +507,10 @@ export default {
|
||||
"common.button.generate": "Сгенерировать",
|
||||
"common.button.done": "Готово",
|
||||
"common.text.link": "Ссылка",
|
||||
"common.text.navigate-to-link": "Go to the link",
|
||||
"common.text.or": "или",
|
||||
"common.button.go-back": "Назад",
|
||||
"common.button.go-home": "Домой",
|
||||
"common.notify.copied": "Ваша ссылка скопирована в буфер обмена",
|
||||
"common.success": "Успешно",
|
||||
"common.error": "Ошибочка",
|
||||
@@ -407,5 +520,5 @@ export default {
|
||||
"common.error.too-long": "Должно быть не больше {length} символов",
|
||||
"common.error.exact-length": "Должно быть ровно {length} символов",
|
||||
"common.error.invalid-number": "Должно быть числом",
|
||||
"common.error.field-required": "Поле обязательно для заполнения"
|
||||
};
|
||||
"common.error.field-required": "Поле обязательно для заполнения",
|
||||
};
|
||||
|
||||
525
frontend/src/i18n/translations/sl-SI.ts
Normal file
525
frontend/src/i18n/translations/sl-SI.ts
Normal file
@@ -0,0 +1,525 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "Naloži",
|
||||
"navbar.signin": "Vpis",
|
||||
"navbar.home": "Domov",
|
||||
"navbar.signup": "Registracija",
|
||||
"navbar.links.shares": "Moja deljenja",
|
||||
"navbar.links.reverse": "Deljenja v obratni smeri",
|
||||
"navbar.avatar.account": "Moj račun",
|
||||
"navbar.avatar.admin": "Administracija",
|
||||
"navbar.avatar.signout": "Odjava",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "Platforma za deljenje datotek z <h>lastnim gostovanjem</h>.",
|
||||
"home.description":
|
||||
"Ali res želite predati svoje osebne datoteke v roke tretjih oseb, kot je WeTransfer?",
|
||||
"home.bullet.a.name": "Lastno-Gostovanje",
|
||||
"home.bullet.a.description": "Gostuj Pingvin Share na svoji lastni napravi.",
|
||||
"home.bullet.b.name": "Zasebnost",
|
||||
"home.bullet.b.description":
|
||||
"Vaše datoteke so samo vaše in ne bi nikoli smele pristati v rokah tretjih oseb.",
|
||||
"home.bullet.c.name": "Brez nadležnih omejitev velikosti datoteke",
|
||||
"home.bullet.c.description":
|
||||
"Naložite datoteke, velike kolikor želite. Omejuje vas samo vaš disk.",
|
||||
"home.button.start": "Začnite zdaj",
|
||||
"home.button.source": "Izvorna koda",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "Dobrodošli nazaj",
|
||||
"signin.description": "Še nimate računa?",
|
||||
"signin.button.signup": "Registrirajte se",
|
||||
"signin.input.email-or-username": "E-pošta ali uporabniško ime",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"Vaša e-pošta ali uporabniško ime",
|
||||
"signin.input.password": "Geslo",
|
||||
"signin.input.password.placeholder": "Vaše geslo",
|
||||
"signin.button.submit": "Prijava",
|
||||
"signIn.notify.totp-required.title":
|
||||
"Zahtevana je dvofaktorska avtentikacija",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Prosim vnesite vašo kodo dvofaktorske avtentikacije",
|
||||
"signIn.oauth.or": "ALI",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
"signIn.oauth.discord": "Discord",
|
||||
"signIn.oauth.oidc": "OpenID",
|
||||
// END /auth/signin
|
||||
// /auth/signup
|
||||
"signup.title": "Ustvarite račun",
|
||||
"signup.description": "Že imate račun?",
|
||||
"signup.button.signin": "Prijava",
|
||||
"signup.input.username": "Uporabniško ime",
|
||||
"signup.input.username.placeholder": "Vaše uporabniško ime",
|
||||
"signup.input.email": "E-pošta",
|
||||
"signup.input.email.placeholder": "Vaš e-poštni naslov",
|
||||
"signup.button.submit": "Pa začnimo",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "TOTP Avtentikacija",
|
||||
"totp.button.signIn": "Prijava",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Ste pozabili svoje geslo?",
|
||||
"resetPassword.description":
|
||||
"Vnesite svoj e-poštni naslov za ponastavitev gesla.",
|
||||
"resetPassword.notify.success":
|
||||
"Sporočilo s povezavo za ponastavitev vašega gesla je bilo poslano, če vaš e-poštni naslov obstaja.",
|
||||
"resetPassword.button.back": "Nazaj na stran za prijavo",
|
||||
"resetPassword.text.resetPassword": "Ponastavi geslo",
|
||||
"resetPassword.text.enterNewPassword": "Vnesite novo geslo",
|
||||
"resetPassword.input.password": "Novo geslo",
|
||||
"resetPassword.notify.passwordReset":
|
||||
"Vaše geslo je bilo uspešno ponastavljeno.",
|
||||
// /account
|
||||
"account.title": "Moj račun",
|
||||
"account.card.info.title": "Informacije o računu",
|
||||
"account.card.info.username": "Uporabniško ime",
|
||||
"account.card.info.email": "E-pošta",
|
||||
"account.notify.info.success": "Račun je bil uspešno posodobljen",
|
||||
"account.card.password.title": "Geslo",
|
||||
"account.card.password.old": "Staro geslo",
|
||||
"account.card.password.new": "Novo geslo",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Vaše geslo ni nastavljeno. Če se želite prijaviti z e-pošto in geslom, morate imeti nastavljeno geslo.",
|
||||
"account.notify.password.success": "Geslo je bilo uspešno posodobljeno",
|
||||
"account.card.oauth.title": "Prijava z računi družbenih omrežij",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "Poveži",
|
||||
"account.card.oauth.unlink": "Odstrani povezavo",
|
||||
"account.card.oauth.unlinked": "Povezava je odstranjena",
|
||||
"account.modal.unlink.title": "Odstrani povezavo z računom",
|
||||
"account.modal.unlink.description":
|
||||
"Odstranitev povezave z računom družbenih omrežij lahko privede do izgube vašega računa, če se ne spomnite vašega uporabniškega imena in gesla.",
|
||||
"account.notify.oauth.unlinked.success":
|
||||
"Povezava je bila uspešno odstranjena",
|
||||
"account.card.security.title": "Varnost",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Vnesite vašo trenutno geslo, da omogočite TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Vnesite vašo trenutno geslo, da onemogočite TOTP",
|
||||
"account.card.security.totp.button.start": "Začni",
|
||||
"account.modal.totp.title": "Omogoči TOTP",
|
||||
"account.modal.totp.step1": "1. Korak: Dodajte avtentikator",
|
||||
"account.modal.totp.step2": "2. Korak: Potrdite svojo kodo",
|
||||
"account.modal.totp.enterManually": "Vnesite ročno",
|
||||
"account.modal.totp.code": "Koda",
|
||||
"common.button.clickToCopy": "Kliknite za kopiranje",
|
||||
"account.modal.totp.verify": "Preveri",
|
||||
"account.notify.totp.disable": "TOTP je uspešno onemogočen",
|
||||
"account.notify.totp.enable": "TOTP je uspešno omogočen",
|
||||
"account.card.language.title": "Jezik",
|
||||
"account.card.language.description":
|
||||
"Projekt je preveden s pomočjo skupnosti. Nekateri jeziki morda niso popolno prevedeni.",
|
||||
"account.card.color.title": "Barvna shema",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Temna",
|
||||
"account.theme.light": "Svetla",
|
||||
"account.theme.system": "Sistemska",
|
||||
"account.button.delete": "Izbrišite račun",
|
||||
"account.modal.delete.title": "Izbrišite račun",
|
||||
"account.modal.delete.description":
|
||||
"Ali res želite izbrisati vaš račun vključno z vsemi vašimi deljenji?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Moja deljenja",
|
||||
"account.shares.title.empty": "Prazno je 👀",
|
||||
"account.shares.description.empty": "Nimate nobenih deljenj.",
|
||||
"account.shares.button.create": "Ustvarite ga",
|
||||
"account.shares.info.title": "Delite informacije",
|
||||
"account.shares.table.id": "ID",
|
||||
"account.shares.table.name": "Ime",
|
||||
"account.shares.table.description": "Opis",
|
||||
"account.shares.table.visitors": "Obiskovalci",
|
||||
"account.shares.table.expiresAt": "Poteče dne",
|
||||
"account.shares.table.createdAt": "Ustvarjeno dne",
|
||||
"account.shares.table.size": "Velikost",
|
||||
"account.shares.modal.share-informations": "Delite informacije",
|
||||
"account.shares.modal.share-link": "Delite povezavo",
|
||||
"account.shares.modal.delete.title": "Izbrišite delitev {share}",
|
||||
"account.shares.modal.delete.description":
|
||||
"Ali res želite izbrisati to delitev?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Delitev v obratni smeri",
|
||||
"account.reverseShares.description":
|
||||
"Delitev v obratni smeri vam omogoča, da generirate unikaten URL, ki omogoča zunanjim uporabnikom ustvariti delitev.",
|
||||
"account.reverseShares.title.empty": "Prazno je 👀",
|
||||
"account.reverseShares.description.empty":
|
||||
"Nimate nobenih delitev v obratni smeri.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Ustvari delitev v obratni smeri",
|
||||
"account.reverseShares.modal.expiration.label": "Zapadlost",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "Minuta",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "Minute",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "Ura",
|
||||
"account.reverseShares.modal.expiration.hour-plural": "Ure",
|
||||
"account.reverseShares.modal.expiration.day-singular": "Dan",
|
||||
"account.reverseShares.modal.expiration.day-plural": "Dnevi",
|
||||
"account.reverseShares.modal.expiration.week-singular": "Teden",
|
||||
"account.reverseShares.modal.expiration.week-plural": "Tedni",
|
||||
"account.reverseShares.modal.expiration.month-singular": "Mesec",
|
||||
"account.reverseShares.modal.expiration.month-plural": "Meseci",
|
||||
"account.reverseShares.modal.expiration.year-singular": "Leto",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Leta",
|
||||
"account.reverseShares.modal.max-size.label": "Največja velikost delitve",
|
||||
"account.reverseShares.modal.send-email": "Pošlji e-poštno obvestilo",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Pošlji e-poštno obvestilo, ko je ustvarjena delitev s povezavo te delitve v obratni smeri.",
|
||||
"account.reverseShares.modal.max-use.label": "Največ uporab",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Največje število uporab URL-ja za ustvarjanje delitve.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Ta povezava delitve v obratni smeri ne bo nikoli potekla.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Ta delitev v obratni smeri bo potekla {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Nimate še ustvarjenih delitev",
|
||||
"account.reverseShares.table.count.singular": "delitev",
|
||||
"account.reverseShares.table.count.plural": "delitve",
|
||||
"account.reverseShares.table.shares": "Delitve",
|
||||
"account.reverseShares.table.remaining": "Preostale uporabe",
|
||||
"account.reverseShares.table.max-size": "Največja velikost delitve",
|
||||
"account.reverseShares.table.expires": "Poteče dne",
|
||||
"account.reverseShares.modal.reverse-share-link":
|
||||
"Povezava delitve v obratni smeri",
|
||||
"account.reverseShares.modal.delete.title": "Izbriši delitev v obratni smeri",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Ali res želite izbrisati to delitev v obratni smeri? Če boste izbrisali, bodo izbrisane tudi povezane delitve.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Administracija",
|
||||
"admin.button.users": "Upravljanje uporabnikov",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Nastavitve",
|
||||
"admin.version": "Različica",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "Upravljanje uporabnikov",
|
||||
"admin.users.table.username": "Uporabniško ime",
|
||||
"admin.users.table.email": "E-pošta",
|
||||
"admin.users.table.admin": "Administrator",
|
||||
"admin.users.edit.update.title": "Uredi uporabnika {username}",
|
||||
"admin.users.edit.update.admin-privileges": "Administratorski privilegiji",
|
||||
"admin.users.edit.update.change-password.title": "Spremenite geslo",
|
||||
"admin.users.edit.update.change-password.field": "Novo geslo",
|
||||
"admin.users.edit.update.change-password.button": "Shranite novo geslo",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Geslo je bilo uspešno posodobljeno",
|
||||
"admin.users.edit.delete.title": "Izbrišite uporabnika {username}",
|
||||
"admin.users.edit.delete.description":
|
||||
"Ali res želite izbrisati tega uporabnika in vsa njegova deljenja?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Ustvarite uporabnika",
|
||||
"admin.users.modal.create.username": "Uporabniško ime",
|
||||
"admin.users.modal.create.email": "E-pošta",
|
||||
"admin.users.modal.create.password": "Geslo",
|
||||
"admin.users.modal.create.manual-password": "Ročno nastavite geslo",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Če je omogočeno, bo uporabnik prejel e-poštno sporočilo s povezavo do nastavitve gesla.",
|
||||
"admin.users.modal.create.admin": "Administratorski privilegiji",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Če je omogočeno, bo lahko porabnik dostopal do administratorskega vmesnika.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Naložite",
|
||||
"upload.notify.generic-error":
|
||||
"Prišlo je do napake pri ustvarjanju vašega deljenja.",
|
||||
"upload.notify.count-failed":
|
||||
"Prišlo je do napake pri nalaganju toliko datotek: {count}. Poskušamo ponovno.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Naloži datoteke",
|
||||
"upload.dropzone.description":
|
||||
"Tukaj spustite datoteke, da začnete z delitvijo. Sprejemamo samo datoteke, ki so skupaj manjše od {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Vaše datoteke presegajo največjo dovoljeno velikost {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Ime",
|
||||
"upload.filelist.size": "Velikost",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Ustvarite delitev",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Lahko vsebuje samo črke, številke, podčrtaje in pomišljaje",
|
||||
"upload.modal.link.error.taken": "Ta povezava je že v uporabi",
|
||||
"upload.modal.not-signed-in": "Niste prijavljeni",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Ne boste mogli izbrisati vaših delitev in pregledati števila obiskovalcev.",
|
||||
"upload.modal.expires.never": "nikoli",
|
||||
"upload.modal.expires.never-long": "Nikoli ne poteče",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Dan poteka presega najvišji datum poteka {max}.",
|
||||
"upload.modal.link.label": "Povezava",
|
||||
"upload.modal.expires.label": "Zapadlost",
|
||||
"upload.modal.expires.minute-singular": "Minuta",
|
||||
"upload.modal.expires.minute-plural": "Minute",
|
||||
"upload.modal.expires.hour-singular": "Ura",
|
||||
"upload.modal.expires.hour-plural": "Ure",
|
||||
"upload.modal.expires.day-singular": "Dan",
|
||||
"upload.modal.expires.day-plural": "Dnevi",
|
||||
"upload.modal.expires.week-singular": "Teden",
|
||||
"upload.modal.expires.week-plural": "Tedni",
|
||||
"upload.modal.expires.month-singular": "Mesec",
|
||||
"upload.modal.expires.month-plural": "Meseci",
|
||||
"upload.modal.expires.year-singular": "Leto",
|
||||
"upload.modal.expires.year-plural": "Leta",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "Prejemnik e-pošte",
|
||||
"upload.modal.accordion.email.placeholder": "Vnesite prejemnika e-pošte",
|
||||
"upload.modal.accordion.email.invalid-email": "Neveljaven e-poštni naslov",
|
||||
"upload.modal.accordion.security.title": "Varnostne možnosti",
|
||||
"upload.modal.accordion.security.password.label": "Zaščita z geslom",
|
||||
"upload.modal.accordion.security.password.placeholder": "Brez gesla",
|
||||
"upload.modal.accordion.security.max-views.label": "Največje število ogledov",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Brez omejitve",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Ta delitev ne bo nikoli potekla.",
|
||||
"upload.modal.completed.expires-on": "Ta delitev bo potekla {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Delitev je pripravljena",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Deli {shareId}",
|
||||
"share.description": "Poglej kaj sem delil s taboj!",
|
||||
"share.error.visitor-limit-exceeded.title": "Število ogledov je prekoračena",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Število ogledov za to delitev je bila prekoračena.",
|
||||
"share.error.removed.title": "Delitev je odstranjena",
|
||||
"share.error.not-found.title": "Delitve ni mogoče najti",
|
||||
"share.error.not-found.description": "Delitev, ki jo iščete ne obstaja.",
|
||||
"share.modal.password.title": "Zahtevano geslo",
|
||||
"share.modal.password.description":
|
||||
"Za ogled delitve vnesite geslo te delitve.",
|
||||
"share.modal.password": "Geslo",
|
||||
"share.modal.error.invalid-password": "Napačno geslo",
|
||||
"share.button.download-all": "Prenesi vse",
|
||||
"share.notify.download-all-preparing":
|
||||
"Delitev je v pripravi. Prosimo poskusite ponovno čez nekaj minut.",
|
||||
"share.modal.file-link": "Povezava do datoteke",
|
||||
"share.table.name": "Ime",
|
||||
"share.table.size": "Velikost",
|
||||
"share.modal.file-preview.error.not-supported.title": "Predogled ni mogoč",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"Predogled za to datoteko ni podprt. Prosimo prenesite datoteko, da si jo ogledate.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Uredite {shareId}",
|
||||
"share.edit.append-upload": "Dodaj datoteko",
|
||||
"share.edit.notify.generic-error":
|
||||
"Prišlo je do napake pri ustvarjanju vaše delitve.",
|
||||
"share.edit.notify.save-success": "Delitev je bila uspešno posodbljena",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "Nastavitve",
|
||||
"admin.config.category.general": "Splošno",
|
||||
"admin.config.category.share": "Delitev",
|
||||
"admin.config.category.email": "E-pošta",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "Prijava z računi družbenih omrežij",
|
||||
"admin.config.general.app-name": "Ime aplikacije",
|
||||
"admin.config.general.app-name.description": "Ime vaše aplikacije",
|
||||
"admin.config.general.app-url": "URL aplikacije",
|
||||
"admin.config.general.app-url.description":
|
||||
"Na katerem URL-ju je dostopen Pingvin Share",
|
||||
"admin.config.general.show-home-page": "Prikaži domačo stran",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Ali prikazati domačo stran",
|
||||
"admin.config.general.logo": "Logotip",
|
||||
"admin.config.general.logo.description":
|
||||
"Naložite novo sliko, da spremenite logotip. Datoteka mora biti tipa PNG in imeti razmerje 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Izberite sliko",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Omogoči prejemnike delitve po e-pošti",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Ali dovolite pošiljanje delitve po e-pošti. Omogočite samo v primeru, da imate omogočen SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Zadeva poslane delitve",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Zadeva e-poštnega sporočila, ki bo poslan prejemnikom delitve.",
|
||||
"admin.config.email.share-recipients-message": "Vsebina poslane delitve",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Vsebina e-poštnega sporočila, ki bo poslana prejemnikom delitve. Spremenljivke, ki so na voljo:\n{creator} - uporabniško ime ustvarjalca delitve\n{shareUrl} - URL delitve\n{desc} - vsebina delitve\n{expires} - datum poteka delitve\n Spremenljivke bodo zamenjane z dejanskimi vrednostmi.",
|
||||
"admin.config.email.reverse-share-subject": "Zadeva delitve v obratni smeri",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Zadeva e-poštnega sporočila, ki bo poslan, ko nekdo ustvari delitev z vašo povezavo.",
|
||||
"admin.config.email.reverse-share-message": "Vsebina delitve v obratni smeri",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Vsebina e-poštnega sporočila, ki bo poslan, ko nekdo ustvari delitev v obratni smeri. {shareUrl} bo zamenjan z uporabniškim imenom ustvarjalca in URL-jom delitve.",
|
||||
"admin.config.email.reset-password-subject": "Zadeva ponastavitve gesla",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Zadeva e-poštnega sporočila, ki bo poslan, ko uporabnik zahteva ponastavitev gesla.",
|
||||
"admin.config.email.reset-password-message": "Vsebina za ponastavitev gesla",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Vsebina e-poštnega sporočila, ki bo poslan, ko uporabnik zahteva ponastavitev gesla. {url} bo zamenjan z URL-jem za ponastavitev gesla.",
|
||||
"admin.config.email.invite-subject": "Zadeva povabila",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Zadeva e-poštnega sporočila, ki je poslan, ko administrator povabi uporabnika.",
|
||||
"admin.config.email.invite-message": "Vsebina povabila",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Sporočilo, ki se pošlje, ko administrator povabi uporabnika. {url} bo zamenjan s povezavo do povabila, {password} pa z geslom.",
|
||||
"admin.config.share.allow-registration": "Dovoli registracijo",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Če je registracija dovoljena",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Dovoli delitve s strani neprijavljenih uporabnikov",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Če lahko neprijavljeni uporabniki ustvarijo delitve",
|
||||
"admin.config.share.max-expiration": "Najvišja zapadlost",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Najvišja zapadlost delitve v urah. Nastavljeno na 0 pomeni brez zapadlosti.",
|
||||
"admin.config.share.max-size": "Največja velikost",
|
||||
"admin.config.share.max-size.description":
|
||||
"Največja velikost delitve v bytih",
|
||||
"admin.config.share.zip-compression-level": "Nivo Zip stiskanja",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Nivo stiskanja, ki uravnoveša med velikostjo datoteke in hitrostjo stiskanja. Veljavne vrednosti so med 0 in 9, kjer 0 pomeni brez kompresije in 9 pomeni največjo kompresijo. ",
|
||||
"admin.config.share.chunk-size": "Velikost delcev",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Prilagodite velikost delcev (v bajtih) vaših nalaganj, da uravnovesite med učinkovitostjo in zanesljivostjo glede na vašo internetno povezavo. Manjša velikost delcev lahko zviša uspešnost nalaganj pri nestabilni povezavi, medtem ko večja velikost delcev poviša hitrost nalaganja pri stabilni povezavi.",
|
||||
"admin.config.smtp.enabled": "Omogočeno",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Če je SMTP omogočen. Omogočite samo, če ste vnesli strežnik, vrata, e-pošto, uporabniško ime in geslo vašega SMTP strežnika.",
|
||||
"admin.config.smtp.host": "Gostitelj",
|
||||
"admin.config.smtp.host.description": "Gostitelj SMTP strežnika",
|
||||
"admin.config.smtp.port": "Vrata",
|
||||
"admin.config.smtp.port.description": "Vrata SMTP strežnika",
|
||||
"admin.config.smtp.email": "E-pošta",
|
||||
"admin.config.smtp.email.description":
|
||||
"E-poštni naslov, s katerega bodo poslana e-poštna sporočila",
|
||||
"admin.config.smtp.username": "Uporabniško ime",
|
||||
"admin.config.smtp.username.description": "Uporabniško ime SMTP strežnika",
|
||||
"admin.config.smtp.password": "Geslo",
|
||||
"admin.config.smtp.password.description": "Geslo SMTP strežnika",
|
||||
"admin.config.smtp.button.test": "Pošlji testno sporočilo",
|
||||
"admin.config.oauth.allow-registration": "Dovoli registracijo",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Dovoli registracijo uporabnika prek družbenih omrežij",
|
||||
"admin.config.oauth.ignore-totp": "Ignoriraj TOTP",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Če ignorirati TOTP, ko se uporabnik registrira prek družbenih omrežij",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Če je dovoljena prijava z GitHub računom",
|
||||
"admin.config.oauth.github-client-id": "GitHub ID klienta",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"ID klienta GitHub OAuth aplikacije",
|
||||
"admin.config.oauth.github-client-secret": "GitHub skrivnost klienta",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Skrivnost klienta GitHub OAuth aplikacije",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Če je dovoljena prijava z Google računom",
|
||||
"admin.config.oauth.google-client-id": "Google ID klienta",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"ID Klienta Google OAuth aplikacije",
|
||||
"admin.config.oauth.google-client-secret": "Skrivnost Google klienta",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Skrivnost klienta Google OAuth aplikacije",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Če je dovoljena prijava z Microsoft računom",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft najemnik",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"ID identitete Microsoft OAuth aplikacije\nobičajno: V aplikacijo se lahko prijavijo uporabniki osebnega Microsoft računa in službenega ali šolskega računa z Microsoft Entra ID.\norganizacije: V aplikacijo se lahko prijavijo samo uporabniki službenega ali šolskega računa z Microsoft Entra ID.\nuporabniki: V aplikacijo se lahko prijavijo samo uporabniki osebnega Microsoft računa.\ndomensko ime Microsoft Entra identitete ali ID identitete v formatu GUID: V aplikacijo se lahko prijavijo samo uporabniki specifične Microsoft Entra identitete (člani imenika s službenim ali šolskim računom ali gosti imenika z osebnim Microsoft računom).",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft ID klienta",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"ID Klienta Microsoft OAuth aplikacije",
|
||||
"admin.config.oauth.microsoft-client-secret": "Skrivnost Microsoft klienta",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Skrivnost klienta Microsoft OAuth aplikacije",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Če je dovoljena prijava z Discord računom",
|
||||
"admin.config.oauth.discord-limited-guild": "ID omejenega Discord strežnika",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Omogoči omejitev prijave uporabnika v specifičen strežnik. Pustite prazno, da onemogočite.",
|
||||
"admin.config.oauth.discord-client-id": "Discord ID klienta",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"ID klienta Discord OAuth aplikacije",
|
||||
"admin.config.oauth.discord-client-secret": "Discord skrivnost klienta",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Skrivnost klienta Discord OAuth aplikacije",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Če je dovoljena prijava z OpenID Connect",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect URI za odkrivanje",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"URI za odkrivanje OpenID Connect OAuth aplikacije",
|
||||
"admin.config.oauth.oidc-username-claim":
|
||||
"OpenID Connect zahteva za uporabniško ime",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Zahteva za uporabniško ime za OpenID Connect ID žetona. Pustite prazno, če ne poznate te nastavitve.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect ID klienta",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"ID Klienta OpenID Connect OAuth aplikacije",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect skrivnost klienta",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Skrivnost klienta OpenID Connect OAuth aplikacije",
|
||||
// 404
|
||||
"404.description": "Ups! Ta stran ne obstaja.",
|
||||
"404.button.home": "Pelji me domov",
|
||||
// error
|
||||
"error.title": "Napaka",
|
||||
"error.description": "Ups!",
|
||||
"error.button.back": "Nazaj",
|
||||
"error.msg.default": "Prišlo je do napake.",
|
||||
"error.msg.access_denied":
|
||||
"Prekinili ste proces prijave, prosimo poskusite ponovno.",
|
||||
"error.msg.expired_token":
|
||||
"Proces prijave je trajal predolgo, prosimo poskusite ponovno.",
|
||||
"error.msg.invalid_token": "Interna napaka",
|
||||
"error.msg.no_user": "Uporabnik povezan na račun {0} ne obstaja.",
|
||||
"error.msg.no_email": "Ne najdemo e-poštnega naslova za račun {0}.",
|
||||
"error.msg.already_linked": "Račun {0} je že povezan na drug račun.",
|
||||
"error.msg.not_linked": "Račun {0} še ni povezan z nobenim računom.",
|
||||
"error.msg.unverified_account":
|
||||
"Račun {0} je nepreverjen, prosimo poskusite ponovno po preverjanju.",
|
||||
"error.msg.discord_guild_permission_denied": "Nimate dovoljenja za prijavo.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Ne moremo najti uporabniških informacij za račun {0}.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Shrani",
|
||||
"common.button.create": "Ustvari",
|
||||
"common.button.submit": "Pošlji",
|
||||
"common.button.delete": "Izbriši",
|
||||
"common.button.cancel": "Prekliči",
|
||||
"common.button.confirm": "Potrdi",
|
||||
"common.button.disable": "Onemogoči",
|
||||
"common.button.share": "Deli",
|
||||
"common.button.generate": "Generiraj",
|
||||
"common.button.done": "Končano",
|
||||
"common.text.link": "Poveži",
|
||||
"common.text.navigate-to-link": "Pojdi na povezavo",
|
||||
"common.text.or": "ali",
|
||||
"common.button.go-back": "Nazaj",
|
||||
"common.button.go-home": "Pojdi domov",
|
||||
"common.notify.copied": "Povezava je bila kopirana v odložišče",
|
||||
"common.success": "Uspešno",
|
||||
"common.error": "Napaka",
|
||||
"common.error.unknown": "Prišlo je do neznane napake",
|
||||
"common.error.invalid-email": "Neveljaven e-poštni naslov",
|
||||
"common.error.too-short": "Vsebovati mora vsaj {length} znakov",
|
||||
"common.error.too-long": "Vsebuje lahko največ {length} znakov",
|
||||
"common.error.exact-length": "Dolžina mora biti točno {length} znakov",
|
||||
"common.error.invalid-number": "Mora biti številka",
|
||||
"common.error.field-required": "To polje je obvezno",
|
||||
};
|
||||
@@ -12,13 +12,16 @@ export default {
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "<h>self-hosted</h> платформа за дељење фајлова.",
|
||||
"home.description": "Да ли заиста желите да дате своје личне датотеке у руке трећих страна као што је WeTransfer?",
|
||||
"home.description":
|
||||
"Да ли заиста желите да дате своје личне датотеке у руке трећих страна као што је WeTransfer?",
|
||||
"home.bullet.a.name": "Личан хостинг",
|
||||
"home.bullet.a.description": "Хостујте Pingvin Share на својој машини.",
|
||||
"home.bullet.b.name": "Privatnost",
|
||||
"home.bullet.b.description": "Ваше датотеке су ваше датотеке и никада не би требало да дођу у руке трећих лица.",
|
||||
"home.bullet.b.description":
|
||||
"Ваше датотеке су ваше датотеке и никада не би требало да дођу у руке трећих лица.",
|
||||
"home.bullet.c.name": "Нема досадног ограничења величине датотеке",
|
||||
"home.bullet.c.description": "Отпремите онолико великих датотека колико желите. Само ваш чврсти диск ће бити ваше ограничење.",
|
||||
"home.bullet.c.description":
|
||||
"Отпремите онолико великих датотека колико желите. Само ваш чврсти диск ће бити ваше ограничење.",
|
||||
"home.button.start": "Почети",
|
||||
"home.button.source": "Изворни код",
|
||||
// END /
|
||||
@@ -27,12 +30,15 @@ export default {
|
||||
"signin.description": "Још увек немате налог?",
|
||||
"signin.button.signup": "Региструј се",
|
||||
"signin.input.email-or-username": "Е-пошта или корисничко име",
|
||||
"signin.input.email-or-username.placeholder": "Ваша Е-пошта или корисничко име",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"Ваша Е-пошта или корисничко име",
|
||||
"signin.input.password": "Лозинка",
|
||||
"signin.input.password.placeholder": "Ваша лозинка",
|
||||
"signin.button.submit": "Пријавите се",
|
||||
"signIn.notify.totp-required.title": "Потребна је двофакторска аутентификација",
|
||||
"signIn.notify.totp-required.description": "Унесите свој двофакторски код за аутентификацију",
|
||||
"signIn.notify.totp-required.title":
|
||||
"Потребна је двофакторска аутентификација",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Унесите свој двофакторски код за аутентификацију",
|
||||
"signIn.oauth.or": "Или",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -56,8 +62,10 @@ export default {
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Заборавили сте лозинку?",
|
||||
"resetPassword.description": "Унесите своју е-пошту да бисте ресетовали лозинку.",
|
||||
"resetPassword.notify.success": "Послат је емаил са везом за ресетовање ваше лозинке.",
|
||||
"resetPassword.description":
|
||||
"Унесите своју е-пошту да бисте ресетовали лозинку.",
|
||||
"resetPassword.notify.success":
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.button.back": "Назад на страницу за пријаву",
|
||||
"resetPassword.text.resetPassword": "Обнови лозинку",
|
||||
"resetPassword.text.enterNewPassword": "Унесите вашу нову лозинку",
|
||||
@@ -72,7 +80,8 @@ export default {
|
||||
"account.card.password.title": "Лозинка",
|
||||
"account.card.password.old": "Стара лозинка",
|
||||
"account.card.password.new": "Нова лозинка",
|
||||
"account.card.password.noPasswordSet": "Немате постављену лозинку. Ако желите да се пријавите помоћу е-поште и лозинке, потребно је да поставите лозинку.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Немате постављену лозинку. Ако желите да се пријавите помоћу е-поште и лозинке, потребно је да поставите лозинку.",
|
||||
"account.notify.password.success": "Лозинка је успешно промењена",
|
||||
"account.card.oauth.title": "Социал логин",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +93,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Прекини везу",
|
||||
"account.card.oauth.unlinked": "Веза је прекинута",
|
||||
"account.modal.unlink.title": "Прекини везу са налогом",
|
||||
"account.modal.unlink.description": "Прекидање везе са вашим друштвеним налозима може довести до губитка налога ако се не сећате корисничког имена и лозинке.",
|
||||
"account.modal.unlink.description":
|
||||
"Прекидање везе са вашим друштвеним налозима може довести до губитка налога ако се не сећате корисничког имена и лозинке.",
|
||||
"account.notify.oauth.unlinked.success": "Веза је прекинута",
|
||||
"account.card.security.title": "Безбедност",
|
||||
"account.card.security.totp.enable.description": "Унесите своју тренутну лозинку да бисте почели да омогућавате ТОТП",
|
||||
"account.card.security.totp.disable.description": "Унесите своју тренутну лозинку да бисте онемогућили ТОТП",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Унесите своју тренутну лозинку да бисте почели да омогућавате ТОТП",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Унесите своју тренутну лозинку да бисте онемогућили ТОТП",
|
||||
"account.card.security.totp.button.start": "Започни",
|
||||
"account.modal.totp.title": "Омогући ТОТП",
|
||||
"account.modal.totp.step1": "Корак 1: Додајте свој аутентификатор",
|
||||
"account.modal.totp.step2": "Корак 2: Потврдите свој код",
|
||||
"account.modal.totp.enterManually": "Унесите ручно",
|
||||
"account.modal.totp.code": "Код",
|
||||
"account.modal.totp.clickToCopy": "Кликните за копирање",
|
||||
"common.button.clickToCopy": "Кликните за копирање",
|
||||
"account.modal.totp.verify": "Верификуј",
|
||||
"account.notify.totp.disable": "ТОТП је успешно онемогућен",
|
||||
"account.notify.totp.enable": "ТОТП је успешно омогућен",
|
||||
"account.card.language.title": "Језик",
|
||||
"account.card.language.description": "Пројекат је преведен од стране заједнице. Неки језици могу бити непотпуни.",
|
||||
"account.card.language.description":
|
||||
"Пројекат је преведен од стране заједнице. Неки језици могу бити непотпуни.",
|
||||
"account.card.color.title": "Шема боја",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Тамно",
|
||||
@@ -108,7 +121,8 @@ export default {
|
||||
"account.theme.system": "Систем",
|
||||
"account.button.delete": "Избриши Налог",
|
||||
"account.modal.delete.title": "Избриши Налог",
|
||||
"account.modal.delete.description": "Да ли заиста желите да избришете свој налог укључујући све ваше активне дељења?",
|
||||
"account.modal.delete.description":
|
||||
"Да ли заиста желите да избришете свој налог укључујући све ваше активне дељења?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Moja дељења",
|
||||
@@ -126,11 +140,13 @@ export default {
|
||||
"account.shares.modal.share-informations": "Делите информације",
|
||||
"account.shares.modal.share-link": "Дели везу",
|
||||
"account.shares.modal.delete.title": "Избриши дељење {share}",
|
||||
"account.shares.modal.delete.description": "Да ли заиста желите да избришете ово дељење?",
|
||||
"account.shares.modal.delete.description":
|
||||
"Да ли заиста желите да избришете ово дељење?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Обрнуто дељење",
|
||||
"account.reverseShares.description": "Обрнуто дељење вам омогућава да генеришете јединствени URL који омогућава спољним корисницима да креирају дељење.",
|
||||
"account.reverseShares.description":
|
||||
"Обрнуто дељење вам омогућава да генеришете јединствени URL који омогућава спољним корисницима да креирају дељење.",
|
||||
"account.reverseShares.title.empty": "Овде је празно 👀",
|
||||
"account.reverseShares.description.empty": "Немате обрнутих дељења.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
@@ -150,11 +166,15 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "Године",
|
||||
"account.reverseShares.modal.max-size.label": "Максимална величина дељења",
|
||||
"account.reverseShares.modal.send-email": "Пошаљите обавештење путем е-поште",
|
||||
"account.reverseShares.modal.send-email.description": "Пошаљите обавештење е-поштом када се креира дељење помоћу ове обрнуте везе за дељење.",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Пошаљите обавештење е-поштом када се креира дељење помоћу ове обрнуте везе за дељење.",
|
||||
"account.reverseShares.modal.max-use.label": "Максималан број коришћења",
|
||||
"account.reverseShares.modal.max-use.description": "Максималан број пута који овај URL може да се користи за прављење дељења.",
|
||||
"account.reverseShare.never-expires": "Ово обрнуто дељење никада неће истећи.",
|
||||
"account.reverseShare.expires-on": "Ово обрнуто дељење ће истећи {expiration}.",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Максималан број пута који овај URL може да се користи за прављење дељења.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Ово обрнуто дељење никада неће истећи.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Ово обрнуто дељење ће истећи {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Још нема креираних дељења",
|
||||
"account.reverseShares.table.count.singular": "дељење",
|
||||
"account.reverseShares.table.count.plural": "дељења",
|
||||
@@ -164,11 +184,13 @@ export default {
|
||||
"account.reverseShares.table.expires": "Истиче у",
|
||||
"account.reverseShares.modal.reverse-share-link": "Линк за обрнуто дељење",
|
||||
"account.reverseShares.modal.delete.title": "Обришите обрнуто дељење",
|
||||
"account.reverseShares.modal.delete.description": "Да ли заиста желите да избришете ово обрнуто дељење? Ако то учините, придружена дељења ће такође бити избрисана.",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Да ли заиста желите да избришете ово обрнуто дељење? Ако то учините, придружена дељења ће такође бити избрисана.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Администрација",
|
||||
"admin.button.users": "Управљање корисницима",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Конфигурација",
|
||||
"admin.version": "Верзија",
|
||||
// END /admin
|
||||
@@ -182,39 +204,59 @@ export default {
|
||||
"admin.users.edit.update.change-password.title": "Промените лозинку",
|
||||
"admin.users.edit.update.change-password.field": "Нова лозинка",
|
||||
"admin.users.edit.update.change-password.button": "Снимите нову лозинку",
|
||||
"admin.users.edit.update.notify.password.success": "Лозинка је успешно промењена",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"Лозинка је успешно промењена",
|
||||
"admin.users.edit.delete.title": "Обришите корисника {username}",
|
||||
"admin.users.edit.delete.description": "Да ли заиста желите да избришете овог корисника и сва његова дељења?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Да ли заиста желите да избришете овог корисника и сва његова дељења?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Креирај корисника",
|
||||
"admin.users.modal.create.username": "Корисничко име",
|
||||
"admin.users.modal.create.email": "E-пошта",
|
||||
"admin.users.modal.create.password": "Лозинка",
|
||||
"admin.users.modal.create.manual-password": "Поставите лозинку ручно",
|
||||
"admin.users.modal.create.manual-password.description": "Ако није означено, корисник ће добити е-пошту са везом за постављање лозинке.",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Ако није означено, корисник ће добити е-пошту са везом за постављање лозинке.",
|
||||
"admin.users.modal.create.admin": "Администраторске привилегије",
|
||||
"admin.users.modal.create.admin.description": "Ако је означено, корисник ће моћи да приступи административном панелу.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Ако је означено, корисник ће моћи да приступи административном панелу.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Пошаљи",
|
||||
"upload.notify.generic-error": "Дошло је до грешке при довршавању дељења.",
|
||||
"upload.notify.count-failed": "Отпремање {count} датотека није успело. Покушавам поново.",
|
||||
"upload.notify.count-failed":
|
||||
"Отпремање {count} датотека није успело. Покушавам поново.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Пошаљи датотеке",
|
||||
"upload.dropzone.description": "Превуците и отпустите датотеке овде да бисте започели дељење. Можемо да прихватимо само датотеке које су укупно мање од {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big": "Ваше датотеке премашују максималну величину дељења од {maxSize}.",
|
||||
"upload.dropzone.description":
|
||||
"Превуците и отпустите датотеке овде да бисте започели дељење. Можемо да прихватимо само датотеке које су укупно мање од {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Ваше датотеке премашују максималну величину дељења од {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Назив",
|
||||
"upload.filelist.size": "Величина",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Направи дељење",
|
||||
"upload.modal.link.error.invalid": "Може да садржи само слова, бројеве, доње црте и цртице",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Може да садржи само слова, бројеве, доње црте и цртице",
|
||||
"upload.modal.link.error.taken": "Овај линк је већ у употреби",
|
||||
"upload.modal.not-signed-in": "Нисте пријављени",
|
||||
"upload.modal.not-signed-in-description": "Нећете моћи ручно да избришете своје дељење и видите број посетилаца.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Нећете моћи ручно да избришете своје дељење и видите број посетилаца.",
|
||||
"upload.modal.expires.never": "никад",
|
||||
"upload.modal.expires.never-long": "Никада не истиче",
|
||||
"upload.modal.expires.error.too-long": "Истек премашује максимални датум истека од {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Истек премашује максимални датум истека од {max}.",
|
||||
"upload.modal.link.label": "Линк",
|
||||
"upload.modal.expires.label": "Истиче",
|
||||
"upload.modal.expires.minute-singular": "Минут",
|
||||
@@ -229,8 +271,10 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Месеци",
|
||||
"upload.modal.expires.year-singular": "Година",
|
||||
"upload.modal.expires.year-plural": "Године",
|
||||
"upload.modal.accordion.description.title": "Опис",
|
||||
"upload.modal.accordion.description.placeholder": "Напомена за примаоце овог дељења",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "Примаоци е-поште",
|
||||
"upload.modal.accordion.email.placeholder": "Унесите примаоце е-поште",
|
||||
"upload.modal.accordion.email.invalid-email": "Неисправна адреса е-поште",
|
||||
@@ -247,27 +291,33 @@ export default {
|
||||
// /share/[id]
|
||||
"share.title": "Дељење {shareId}",
|
||||
"share.description": "Погледајте шта сам поделио са вама!",
|
||||
"share.error.visitor-limit-exceeded.title": "Прекорачено је ограничење посетилаца",
|
||||
"share.error.visitor-limit-exceeded.description": "Ограничење посетилаца из овог дељења је премашено.",
|
||||
"share.error.visitor-limit-exceeded.title":
|
||||
"Прекорачено је ограничење посетилаца",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Ограничење посетилаца из овог дељења је премашено.",
|
||||
"share.error.removed.title": "Дељење је уклоњено",
|
||||
"share.error.not-found.title": "Дељење није пронађено",
|
||||
"share.error.not-found.description": "Удео који тражите не постоји.",
|
||||
"share.modal.password.title": "Обавезна лозинка",
|
||||
"share.modal.password.description": "Да бисте приступили овом дељењу, унесите лозинку за дељење.",
|
||||
"share.modal.password.description":
|
||||
"Да бисте приступили овом дељењу, унесите лозинку за дељење.",
|
||||
"share.modal.password": "Лозинка",
|
||||
"share.modal.error.invalid-password": "Неисправна лозинка",
|
||||
"share.button.download-all": "Преузми све",
|
||||
"share.notify.download-all-preparing": "Дељење се спрема. Покушајте поново за неколико минута.",
|
||||
"share.notify.download-all-preparing":
|
||||
"Дељење се спрема. Покушајте поново за неколико минута.",
|
||||
"share.modal.file-link": "Веза датотеке",
|
||||
"share.table.name": "Назив",
|
||||
"share.table.size": "Величина",
|
||||
"share.modal.file-preview.error.not-supported.title": "Преглед није подржан",
|
||||
"share.modal.file-preview.error.not-supported.description": "Преглед за овај тип датотеке није подржан. Преузмите датотеку да бисте је видели.",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"A preview for this file type is unsupported. Please download the file to view it.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Edit {shareId}",
|
||||
"share.edit.append-upload": "Append file",
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.generic-error":
|
||||
"An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,91 +330,140 @@ export default {
|
||||
"admin.config.general.app-name": "Назив апликације",
|
||||
"admin.config.general.app-name.description": "Назив апликације",
|
||||
"admin.config.general.app-url": "URL апликације",
|
||||
"admin.config.general.app-url.description": "На којој URL адреси је доступан Pingvin Share",
|
||||
"admin.config.general.app-url.description":
|
||||
"На којој URL адреси је доступан Pingvin Share",
|
||||
"admin.config.general.show-home-page": "Прикажи почетну страницу",
|
||||
"admin.config.general.show-home-page.description": "Да ли да се прикаже почетна страница",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Да ли да се прикаже почетна страница",
|
||||
"admin.config.general.logo": "Лого",
|
||||
"admin.config.general.logo.description": "Промените свој логотип тако што ћете отпремити нову слику. Слика мора да буде PNG и треба да има формат 1:1.",
|
||||
"admin.config.general.logo.description":
|
||||
"Промените свој логотип тако што ћете отпремити нову слику. Слика мора да буде PNG и треба да има формат 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Изабери слику",
|
||||
"admin.config.email.enable-share-email-recipients": "Омогућите дељење прималаца е-поште",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Да ли да дозволите да имејлови деле примаоце. Омогућите ово само ако сте омогућили SMTP.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Омогућите дељење прималаца е-поште",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Да ли да дозволите да имејлови деле примаоце. Омогућите ово само ако сте омогућили SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Поделите наслов примаоца",
|
||||
"admin.config.email.share-recipients-subject.description": "Тема е-поруке која се шаље примаоцима дељења.",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Тема е-поруке која се шаље примаоцима дељења.",
|
||||
"admin.config.email.share-recipients-message": "Делите поруку примаоца",
|
||||
"admin.config.email.share-recipients-message.description": "Порука која се шаље примаоцима дељења. Доступне променљиве:\n {creator} – корисничко име креатора дељења\n {shareUrl} – URL дељења\n {desc} – Опис дељења\n {expires} - Датум истека акције\n Променљиве ће бити замењене стварном вредношћу.",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Порука која се шаље примаоцима дељења. Доступне променљиве:\n {creator} – корисничко име креатора дељења\n {shareUrl} – URL дељења\n {desc} – Опис дељења\n {expires} - Датум истека акције\n Променљиве ће бити замењене стварном вредношћу.",
|
||||
"admin.config.email.reverse-share-subject": "Тема обрнутог дељења",
|
||||
"admin.config.email.reverse-share-subject.description": "Тема е-поруке која се шаље када је неко направио дељење са вашом обрнутим линком за дељење.",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Тема е-поруке која се шаље када је неко направио дељење са вашом обрнутим линком за дељење.",
|
||||
"admin.config.email.reverse-share-message": "Обрнуто дељење порука",
|
||||
"admin.config.email.reverse-share-message.description": "Порука која се шаље када је неко направио дељење са вашом обрнутом везом за дељење. {shareUrl} ће бити замењен именом креатора и УРЛ-ом за дељење.",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Порука која се шаље када је неко направио дељење са вашом обрнутом везом за дељење. {shareUrl} ће бити замењен именом креатора и УРЛ-ом за дељење.",
|
||||
"admin.config.email.reset-password-subject": "Ресетујте тему лозинке",
|
||||
"admin.config.email.reset-password-subject.description": "Предмет е-поште која се шаље када корисник затражи ресетовање лозинке.",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Предмет е-поште која се шаље када корисник затражи ресетовање лозинке.",
|
||||
"admin.config.email.reset-password-message": "Порука за ресетовање лозинке",
|
||||
"admin.config.email.reset-password-message.description": "Порука која се шаље када корисник затражи ресетовање лозинке. {url} ће бити замењен УРЛ-ом за ресетовање лозинке.",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Порука која се шаље када корисник затражи ресетовање лозинке. {url} ће бити замењен УРЛ-ом за ресетовање лозинке.",
|
||||
"admin.config.email.invite-subject": "Позивна тема",
|
||||
"admin.config.email.invite-subject.description": "Тема е-поруке која се шаље када администратор позове корисника.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Тема е-поруке која се шаље када администратор позове корисника.",
|
||||
"admin.config.email.invite-message": "Позивна порука",
|
||||
"admin.config.email.invite-message.description": "Порука која се шаље када администратор позове корисника. {url} ће бити замењен УРЛ-ом позива, а {password} лозинком.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Порука која се шаље када администратор позове корисника. {url} ће бити замењен УРЛ-ом позива, а {password} лозинком.",
|
||||
"admin.config.share.allow-registration": "Дозволи регистрацију",
|
||||
"admin.config.share.allow-registration.description": "Да ли је регистрација дозвољена",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Дозволи дељење без аутентификације",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Да ли корисници без аутентификације могу да креирају дељења",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Да ли је регистрација дозвољена",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Дозволи дељење без аутентификације",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Да ли корисници без аутентификације могу да креирају дељења",
|
||||
"admin.config.share.max-expiration": "Максимални рок трајања",
|
||||
"admin.config.share.max-expiration.description": "Максимални рок трајања дељења у сатима. Поставите на 0 да бисте омогућили неограничено трајање.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Максимални рок трајања дељења у сатима. Поставите на 0 да бисте омогућили неограничено трајање.",
|
||||
"admin.config.share.max-size": "Максимална величина",
|
||||
"admin.config.share.max-size.description": "Максимална величина дељења у бајтовима",
|
||||
"admin.config.share.max-size.description":
|
||||
"Максимална величина дељења у бајтовима",
|
||||
"admin.config.share.zip-compression-level": "Ниво zip компресије",
|
||||
"admin.config.share.zip-compression-level.description": "Подесите ниво да бисте балансирали између величине датотеке и брзине компресије. Важеће вредности се крећу од 0 до 9, при чему је 0 без компресије, а 9 је максимална компресија. ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Подесите ниво да бисте балансирали између величине датотеке и брзине компресије. Важеће вредности се крећу од 0 до 9, при чему је 0 без компресије, а 9 је максимална компресија. ",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "Омогућено",
|
||||
"admin.config.smtp.enabled.description": "Да ли је SMTP омогућен. Поставите ово на тачно само ако сте унели хост, порт, е-пошту, корисника и лозинку вашег SMTP сервера.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Да ли је SMTP омогућен. Поставите ово на тачно само ако сте унели хост, порт, е-пошту, корисника и лозинку вашег SMTP сервера.",
|
||||
"admin.config.smtp.host": "Домаћин",
|
||||
"admin.config.smtp.host.description": "Домаћин SMTP сервера",
|
||||
"admin.config.smtp.port": "Порт",
|
||||
"admin.config.smtp.port.description": "Порт домаћина SMTP сервера",
|
||||
"admin.config.smtp.email": "E-пошта",
|
||||
"admin.config.smtp.email.description": "Адреса е-поште са које се е-поруке шаљу",
|
||||
"admin.config.smtp.email.description":
|
||||
"Адреса е-поште са које се е-поруке шаљу",
|
||||
"admin.config.smtp.username": "Корисничко име",
|
||||
"admin.config.smtp.username.description": "Корисничко име SMTP сервера",
|
||||
"admin.config.smtp.password": "Лозинка",
|
||||
"admin.config.smtp.password.description": "Лозинка SMTP сервера",
|
||||
"admin.config.smtp.button.test": "Пошаљи тестну е-пошту",
|
||||
"admin.config.oauth.allow-registration": "Дозволи регистрацију",
|
||||
"admin.config.oauth.allow-registration.description": "Дозволите корисницима да се региструју путем друштвене пријаве",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Дозволите корисницима да се региструју путем друштвене пријаве",
|
||||
"admin.config.oauth.ignore-totp": "Занемари ТОТП",
|
||||
"admin.config.oauth.ignore-totp.description": "Да ли да игноришете ТОТП када корисник користи пријаву на друштвеним мрежама",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Да ли да игноришете ТОТП када корисник користи пријаву на друштвеним мрежама",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Да ли је пријављивање на GitHub омогућено",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Да ли је пријављивање на GitHub омогућено",
|
||||
"admin.config.oauth.github-client-id": "GitHub ИД клијента",
|
||||
"admin.config.oauth.github-client-id.description": "ИД клијента GitHub OAuth апликације",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"ИД клијента GitHub OAuth апликације",
|
||||
"admin.config.oauth.github-client-secret": "Тајна GitHub клијента",
|
||||
"admin.config.oauth.github-client-secret.description": "Тајна клијента GitHub OAuth апликације",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Тајна клијента GitHub OAuth апликације",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Да ли је пријављивање на Google омогућено",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Да ли је пријављивање на Google омогућено",
|
||||
"admin.config.oauth.google-client-id": "ИД Google клијента",
|
||||
"admin.config.oauth.google-client-id.description": "ИД клијента Google OAuth апликације",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"ИД клијента Google OAuth апликације",
|
||||
"admin.config.oauth.google-client-secret": "Тајна Google клијента",
|
||||
"admin.config.oauth.google-client-secret.description": "Тајна клијента Google OAuth апликације",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Тајна клијента Google OAuth апликације",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Да ли је пријављивање на Microsoft омогућено",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Да ли је пријављивање на Microsoft омогућено",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "ИД закупца за Microsoft OAuth апликацију\nуобичајено: Корисници са личним Microsoft налогом и пословним или школским налогом са Microsoft Entra ID-а могу да се пријаве у апликацију. организације: Само корисници са пословним или школским налозима са Microsoft Entra ID-а могу да се пријаве у апликацију.\nпотрошачи: Само корисници са личним Microsoft налогом могу да се пријаве у апликацију.\nиме домена закупца Microsoft Entra ID или ИД закупца у ГУИД формату: Само корисници из одређеног Microsoft Entra ID станара (чланови директоријума са пословним или школским налогом или гости директоријума са личним Microsoft налогом) могу да се пријаве у апликацију.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"ИД закупца за Microsoft OAuth апликацију\nуобичајено: Корисници са личним Microsoft налогом и пословним или школским налогом са Microsoft Entra ID-а могу да се пријаве у апликацију. организације: Само корисници са пословним или школским налозима са Microsoft Entra ID-а могу да се пријаве у апликацију.\nпотрошачи: Само корисници са личним Microsoft налогом могу да се пријаве у апликацију.\nиме домена закупца Microsoft Entra ID или ИД закупца у ГУИД формату: Само корисници из одређеног Microsoft Entra ID станара (чланови директоријума са пословним или школским налогом или гости директоријума са личним Microsoft налогом) могу да се пријаве у апликацију.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsotf Цлиент ИД",
|
||||
"admin.config.oauth.microsoft-client-id.description": "ИД клијента Microsoft OAuth апликације",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"ИД клијента Microsoft OAuth апликације",
|
||||
"admin.config.oauth.microsoft-client-secret": "Тајна Microsoft клијента",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Тајна клијента за Microsot OAuth апликацију",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Тајна клијента за Microsot OAuth апликацију",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Да ли је пријављивање на Discord омогућено",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Да ли је пријављивање на Discord омогућено",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord limited server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limit signing in to users in a specific server. Leave it blank to disable.",
|
||||
"admin.config.oauth.discord-client-id": "Discord ИД клијента",
|
||||
"admin.config.oauth.discord-client-id.description": "ИД клијента Discord OAuth апликације",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"ИД клијента Discord OAuth апликације",
|
||||
"admin.config.oauth.discord-client-secret": "Discord клијент тајна",
|
||||
"admin.config.oauth.discord-client-secret.description": "Тајна клијента Discord OAuth апликације",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Да ли је пријављивање на OpenID омогућено",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "УРИ за откривање OpenID OAuth апликације",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID ИД клијента",
|
||||
"admin.config.oauth.oidc-client-id.description": "ИД клијента OpenID OAuth апликације",
|
||||
"admin.config.oauth.oidc-client-secret": "Тајна OpenID клијента",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Тајна клијента OpenID OAuth апликације",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Тајна клијента Discord OAuth апликације",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Whether OpenID Connect login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "Опа - Ова страна не постоји.",
|
||||
"404.button.home": "Врати ме на почетак",
|
||||
@@ -373,17 +472,28 @@ export default {
|
||||
"error.description": "Ooпс!",
|
||||
"error.button.back": "Иди назад",
|
||||
"error.msg.default": "Нешто је пошло наопако.",
|
||||
"error.msg.access_denied": "Отказали сте процес аутентификације, покушајте поново.",
|
||||
"error.msg.expired_token": "Процес аутентификације је трајао предуго, покушајте поново.",
|
||||
"error.msg.access_denied":
|
||||
"Отказали сте процес аутентификације, покушајте поново.",
|
||||
"error.msg.expired_token":
|
||||
"Процес аутентификације је трајао предуго, покушајте поново.",
|
||||
"error.msg.invalid_token": "Internal Error",
|
||||
"error.msg.no_user": "Корисник повезан са овим {0} налогом не постоји.",
|
||||
"error.msg.no_email": "Не могу да добијем адресу е-поште са овог {0} налога.",
|
||||
"error.msg.already_linked": "Овај {0} налог је већ повезан са другим налогом.",
|
||||
"error.msg.not_linked": "Овај {0} налог још увек није повезан ни са једним налогом.",
|
||||
"error.msg.already_linked":
|
||||
"Овај {0} налог је већ повезан са другим налогом.",
|
||||
"error.msg.not_linked":
|
||||
"Овај {0} налог још увек није повезан ни са једним налогом.",
|
||||
"error.msg.unverified_account":
|
||||
"This {0} account is unverified, please try again after verification.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"You are not allowed to sign in.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Can not get your user info from this {0} account.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Сачувај",
|
||||
"common.button.create": "Направи",
|
||||
@@ -396,8 +506,10 @@ export default {
|
||||
"common.button.generate": "Генериши",
|
||||
"common.button.done": "Готово",
|
||||
"common.text.link": "Линк",
|
||||
"common.text.navigate-to-link": "Go to the link",
|
||||
"common.text.or": "или",
|
||||
"common.button.go-back": "Иди назад",
|
||||
"common.button.go-home": "Go home",
|
||||
"common.notify.copied": "Ваша веза је копирана у clipboard",
|
||||
"common.success": "Успешно",
|
||||
"common.error": "Грешка",
|
||||
@@ -407,5 +519,5 @@ export default {
|
||||
"common.error.too-long": "Мора да има највише {length} знакова",
|
||||
"common.error.exact-length": "Мора да има тачно {length} знакова",
|
||||
"common.error.invalid-number": "Мора бити број",
|
||||
"common.error.field-required": "Поље је обавезно"
|
||||
};
|
||||
"common.error.field-required": "Поље је обавезно",
|
||||
};
|
||||
|
||||
@@ -12,13 +12,16 @@ export default {
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "En <h>egen</h> fildelningsplattform.",
|
||||
"home.description": "Vill du verkligen lägga dina personliga filer hos en tredje part som WeTransfer?",
|
||||
"home.description":
|
||||
"Vill du verkligen lägga dina personliga filer hos en tredje part som WeTransfer?",
|
||||
"home.bullet.a.name": "Lokalt installerad",
|
||||
"home.bullet.a.description": "Hosta Pingvin Share på din egen maskin.",
|
||||
"home.bullet.b.name": "Sekretess",
|
||||
"home.bullet.b.description": "Dina filer är dina filer och bör aldrig hamna i händerna på tredje part.",
|
||||
"home.bullet.b.description":
|
||||
"Dina filer är dina filer och bör aldrig hamna i händerna på tredje part.",
|
||||
"home.bullet.c.name": "Ingen irriterande filstorleksbegränsning",
|
||||
"home.bullet.c.description": "Ladda upp så stora filer som du vill. Endast din hårddisk kommer att vara din gräns.",
|
||||
"home.bullet.c.description":
|
||||
"Ladda upp så stora filer som du vill. Endast din hårddisk kommer att vara din gräns.",
|
||||
"home.button.start": "Kom igång",
|
||||
"home.button.source": "Källkod",
|
||||
// END /
|
||||
@@ -27,12 +30,14 @@ export default {
|
||||
"signin.description": "Har du inget konto än?",
|
||||
"signin.button.signup": "Skapa konto",
|
||||
"signin.input.email-or-username": "E-post eller användarnamn",
|
||||
"signin.input.email-or-username.placeholder": "Din e-postadress eller ditt användarnamn",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"Din e-postadress eller ditt användarnamn",
|
||||
"signin.input.password": "Lösenord",
|
||||
"signin.input.password.placeholder": "Lösenord",
|
||||
"signin.button.submit": "Logga in",
|
||||
"signIn.notify.totp-required.title": "Tvåfaktorsautentisering krävs",
|
||||
"signIn.notify.totp-required.description": "Vänligen ange din tvåfaktorsautentiseringskod",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Vänligen ange din tvåfaktorsautentiseringskod",
|
||||
"signIn.oauth.or": "ELLER",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
@@ -56,8 +61,10 @@ export default {
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Glömt ditt lösenord?",
|
||||
"resetPassword.description": "Ange din e-postadress för att återställa ditt lösenord.",
|
||||
"resetPassword.notify.success": "Ett e-postmeddelande har skickats till dig med en länk för att återställa lösenordet.",
|
||||
"resetPassword.description":
|
||||
"Ange din e-postadress för att återställa ditt lösenord.",
|
||||
"resetPassword.notify.success":
|
||||
"Ett meddelande med en länk för att återställa ditt lösenord har skickats om e-postadressen finns.",
|
||||
"resetPassword.button.back": "Tillbaka till inloggningssidan",
|
||||
"resetPassword.text.resetPassword": "Återställ lösenord",
|
||||
"resetPassword.text.enterNewPassword": "Ange ditt nya lösenord",
|
||||
@@ -72,7 +79,8 @@ export default {
|
||||
"account.card.password.title": "Lösenord",
|
||||
"account.card.password.old": "Gammalt lösenord",
|
||||
"account.card.password.new": "Nytt lösenord",
|
||||
"account.card.password.noPasswordSet": "Du har inget lösenord. Om du vill logga in med e-post och lösenord måste du ange ett lösenord.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"Du har inget lösenord. Om du vill logga in med e-post och lösenord måste du ange ett lösenord.",
|
||||
"account.notify.password.success": "Lösenordet har ändrats",
|
||||
"account.card.oauth.title": "Inloggning via sociala nätverk",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +92,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Avlänka",
|
||||
"account.card.oauth.unlinked": "Avlänkad",
|
||||
"account.modal.unlink.title": "Avlänka konto",
|
||||
"account.modal.unlink.description": "Om du kopplar bort dina sociala konton kan det leda till att du förlorar ditt konto om du inte kommer ihåg ditt användarnamn och lösenord.",
|
||||
"account.modal.unlink.description":
|
||||
"Om du kopplar bort dina sociala konton kan det leda till att du förlorar ditt konto om du inte kommer ihåg ditt användarnamn och lösenord.",
|
||||
"account.notify.oauth.unlinked.success": "Avlänkning utförd",
|
||||
"account.card.security.title": "Säkerhet",
|
||||
"account.card.security.totp.enable.description": "Ange ditt nuvarande lösenord för att aktivera TOTP",
|
||||
"account.card.security.totp.disable.description": "Ange ditt lösenord för att inaktivera TOTP",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Ange ditt nuvarande lösenord för att aktivera TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Ange ditt lösenord för att inaktivera TOTP",
|
||||
"account.card.security.totp.button.start": "Start",
|
||||
"account.modal.totp.title": "Aktivera TOTP",
|
||||
"account.modal.totp.step1": "Steg 1: Lägg till din autentiserare",
|
||||
"account.modal.totp.step2": "Steg 2: Bekräfta din kod",
|
||||
"account.modal.totp.enterManually": "Ange manuellt",
|
||||
"account.modal.totp.code": "Kod",
|
||||
"account.modal.totp.clickToCopy": "Klicka för att kopiera",
|
||||
"common.button.clickToCopy": "Klicka för att kopiera",
|
||||
"account.modal.totp.verify": "Verifiera",
|
||||
"account.notify.totp.disable": "TOTP har inaktiverats",
|
||||
"account.notify.totp.enable": "TOTP aktiverat",
|
||||
"account.card.language.title": "Språk",
|
||||
"account.card.language.description": "Projektet är översatt av gemenskapen. Vissa översättningar kan vara ofullständiga.",
|
||||
"account.card.language.description":
|
||||
"Projektet är översatt av gemenskapen. Vissa översättningar kan vara ofullständiga.",
|
||||
"account.card.color.title": "Färgschema",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Mörk",
|
||||
@@ -108,7 +120,8 @@ export default {
|
||||
"account.theme.system": "System",
|
||||
"account.button.delete": "Ta bort konto",
|
||||
"account.modal.delete.title": "Ta bort konto",
|
||||
"account.modal.delete.description": "Vill du verkligen ta bort ditt konto inklusive alla dina aktiva delningar?",
|
||||
"account.modal.delete.description":
|
||||
"Vill du verkligen ta bort ditt konto inklusive alla dina aktiva delningar?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Mina delningar",
|
||||
@@ -126,11 +139,13 @@ export default {
|
||||
"account.shares.modal.share-informations": "Information om delning",
|
||||
"account.shares.modal.share-link": "Delningslänk",
|
||||
"account.shares.modal.delete.title": "Ta bort delning {share}",
|
||||
"account.shares.modal.delete.description": "Vill du verkligen ta bort denna delning?",
|
||||
"account.shares.modal.delete.description":
|
||||
"Vill du verkligen ta bort denna delning?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Omvända delningar",
|
||||
"account.reverseShares.description": "En omvänd delning gör att du kan generera en unik URL som tillåter externa användare att skapa en delning.",
|
||||
"account.reverseShares.description":
|
||||
"En omvänd delning gör att du kan generera en unik URL som tillåter externa användare att skapa en delning.",
|
||||
"account.reverseShares.title.empty": "Här var det tomt 👀",
|
||||
"account.reverseShares.description.empty": "Du har inga omvända delningar.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
@@ -150,11 +165,15 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "År",
|
||||
"account.reverseShares.modal.max-size.label": "Max storlek på delning",
|
||||
"account.reverseShares.modal.send-email": "Skicka e-postavisering",
|
||||
"account.reverseShares.modal.send-email.description": "Skicka ett e-postmeddelande när en delning skapas med denna länk för omvänd delning.",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Skicka ett e-postmeddelande när en delning skapas med denna länk för omvänd delning.",
|
||||
"account.reverseShares.modal.max-use.label": "Maxanvändningar",
|
||||
"account.reverseShares.modal.max-use.description": "Den maximala mängden gånger denna URL kan användas för att skapa en delning.",
|
||||
"account.reverseShare.never-expires": "Denna omvända delning kommer aldrig att förfalla.",
|
||||
"account.reverseShare.expires-on": "Denna sammanlagda delning löper ut på {expiration}.",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Den maximala mängden gånger denna URL kan användas för att skapa en delning.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Denna omvända delning kommer aldrig att förfalla.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Denna sammanlagda delning löper ut på {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Inga delningar har skapats ännu",
|
||||
"account.reverseShares.table.count.singular": "delning",
|
||||
"account.reverseShares.table.count.plural": "delningar",
|
||||
@@ -164,11 +183,13 @@ export default {
|
||||
"account.reverseShares.table.expires": "Förfaller den",
|
||||
"account.reverseShares.modal.reverse-share-link": "Omvänd delningslänk",
|
||||
"account.reverseShares.modal.delete.title": "Ta bort omvänd delning",
|
||||
"account.reverseShares.modal.delete.description": "Vill du verkligen ta bort denna omvänd delning? Om du gör det, kommer de tillhörande delningarna också att raderas.",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Vill du verkligen ta bort denna omvänd delning? Om du gör det, kommer de tillhörande delningarna också att raderas.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Administration",
|
||||
"admin.button.users": "Användarhantering",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Konfiguration",
|
||||
"admin.version": "Version",
|
||||
// END /admin
|
||||
@@ -184,37 +205,57 @@ export default {
|
||||
"admin.users.edit.update.change-password.button": "Spara nytt lösenord",
|
||||
"admin.users.edit.update.notify.password.success": "Lösenordet har ändrats",
|
||||
"admin.users.edit.delete.title": "Ta bort användare {username}",
|
||||
"admin.users.edit.delete.description": "Vill du verkligen ta bort denna användare och alla deras delningar?",
|
||||
"admin.users.edit.delete.description":
|
||||
"Vill du verkligen ta bort denna användare och alla deras delningar?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Skapa användare",
|
||||
"admin.users.modal.create.username": "Användarnamn",
|
||||
"admin.users.modal.create.email": "E-post",
|
||||
"admin.users.modal.create.password": "Lösenord",
|
||||
"admin.users.modal.create.manual-password": "Sätt lösenord manuellt",
|
||||
"admin.users.modal.create.manual-password.description": "Om den inte är markerad kommer användaren att få ett e-postmeddelande med en länk för att ange lösenordet.",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Om den inte är markerad kommer användaren att få ett e-postmeddelande med en länk för att ange lösenordet.",
|
||||
"admin.users.modal.create.admin": "Administratörsbehörigheter",
|
||||
"admin.users.modal.create.admin.description": "Om detta markeras kommer användaren att kunna komma åt administratörspanelen.",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Om detta markeras kommer användaren att kunna komma åt administratörspanelen.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Ladda upp",
|
||||
"upload.notify.generic-error": "Ett fel uppstod när din delning skulle slutföras.",
|
||||
"upload.notify.count-failed": "{count} filer kunde inte laddas upp. Försöker igen.",
|
||||
"upload.notify.generic-error":
|
||||
"Ett fel uppstod när din delning skulle slutföras.",
|
||||
"upload.notify.count-failed":
|
||||
"{count} filer kunde inte laddas upp. Försöker igen.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Ladde upp filer",
|
||||
"upload.dropzone.description": "Drag och släpp filer här för att starta din delning. Vi kan endast acceptera filer som är mindre än {maxSize} totalt.",
|
||||
"upload.dropzone.notify.file-too-big": "Dina filer överskrider den maximala storleken på {maxSize}.",
|
||||
"upload.dropzone.title": "Ladda upp filer",
|
||||
"upload.dropzone.description":
|
||||
"Drag och släpp filer här för att starta din delning. Vi kan endast acceptera filer som är mindre än {maxSize} totalt.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Dina filer överskrider den maximala storleken på {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Namn",
|
||||
"upload.filelist.size": "Storlek",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Skapa delning",
|
||||
"upload.modal.link.error.invalid": "Kan endast innehålla bokstäver, siffror, understreck och bindestreck",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Kan endast innehålla bokstäver, siffror, understreck och bindestreck",
|
||||
"upload.modal.link.error.taken": "Denna länk används redan",
|
||||
"upload.modal.not-signed-in": "Du är inte inloggad",
|
||||
"upload.modal.not-signed-in-description": "Du kommer inte att kunna ta bort din delning manuellt och visa antalet besökare.",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Du kommer inte att kunna ta bort din delning manuellt och visa antalet besökare.",
|
||||
"upload.modal.expires.never": "aldrig",
|
||||
"upload.modal.expires.never-long": "Upphör aldrig",
|
||||
"upload.modal.expires.error.too-long": "Förfallodatum överskrider maximalt utgångsdatum för {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Förfallodatum överskrider maximalt utgångsdatum för {max}.",
|
||||
"upload.modal.link.label": "Länk",
|
||||
"upload.modal.expires.label": "Förfaller",
|
||||
"upload.modal.expires.minute-singular": "Minut",
|
||||
@@ -229,8 +270,10 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Månader",
|
||||
"upload.modal.expires.year-singular": "År",
|
||||
"upload.modal.expires.year-plural": "År",
|
||||
"upload.modal.accordion.description.title": "Beskrivning",
|
||||
"upload.modal.accordion.description.placeholder": "Anteckning till mottagare av denna delning",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "E-postmottagare",
|
||||
"upload.modal.accordion.email.placeholder": "Ange e-postmottagare",
|
||||
"upload.modal.accordion.email.invalid-email": "Ogiltig e-postadress",
|
||||
@@ -240,34 +283,43 @@ export default {
|
||||
"upload.modal.accordion.security.max-views.label": "Max antal visningar",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Ingen gräns",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Denna delning kommer aldrig att upphöra.",
|
||||
"upload.modal.completed.expires-on": "Denna delning upphör att gälla {expiration}.",
|
||||
"upload.modal.completed.never-expires":
|
||||
"Denna delning kommer aldrig att upphöra.",
|
||||
"upload.modal.completed.expires-on":
|
||||
"Denna delning upphör att gälla {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Delning redo",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Delning {shareId}",
|
||||
"share.description": "Titta vad jag har delat med dig!",
|
||||
"share.error.visitor-limit-exceeded.title": "Besökargränsen överskriden",
|
||||
"share.error.visitor-limit-exceeded.description": "Gränsen för antalet besökare för denna delning har överskridits.",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Gränsen för antalet besökare för denna delning har överskridits.",
|
||||
"share.error.removed.title": "Delning borttagen",
|
||||
"share.error.not-found.title": "Delningen hittades inte",
|
||||
"share.error.not-found.description": "Delningen du letar efter existerar inte.",
|
||||
"share.error.not-found.description":
|
||||
"Delningen du letar efter existerar inte.",
|
||||
"share.modal.password.title": "Lösenord krävs",
|
||||
"share.modal.password.description": "För att komma åt denna delning, vänligen ange lösenordet för delningen.",
|
||||
"share.modal.password.description":
|
||||
"För att komma åt denna delning, vänligen ange lösenordet för delningen.",
|
||||
"share.modal.password": "Lösenord",
|
||||
"share.modal.error.invalid-password": "Ogiltigt lösenord",
|
||||
"share.button.download-all": "Ladda ner allt",
|
||||
"share.notify.download-all-preparing": "Delningen förbereds. Försök igen om några minuter.",
|
||||
"share.notify.download-all-preparing":
|
||||
"Delningen förbereds. Försök igen om några minuter.",
|
||||
"share.modal.file-link": "Fillänk",
|
||||
"share.table.name": "Namn",
|
||||
"share.table.size": "Storlek",
|
||||
"share.modal.file-preview.error.not-supported.title": "Förhandsgranskning stöds ej",
|
||||
"share.modal.file-preview.error.not-supported.description": "En förhandsvisning för filtypen stöds inte. Ladda ner filen för att se den.",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Förhandsgranskning stöds ej",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"En förhandsvisning för filtypen stöds inte. Ladda ner filen för att se den.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Redigera {shareId}",
|
||||
"share.edit.append-upload": "Lägg till fil",
|
||||
"share.edit.notify.generic-error": "Ett fel uppstod när din delning skulle slutföras.",
|
||||
"share.edit.notify.generic-error":
|
||||
"Ett fel uppstod när din delning skulle slutföras.",
|
||||
"share.edit.notify.save-success": "Delningen har uppdaterats",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,91 +332,140 @@ export default {
|
||||
"admin.config.general.app-name": "Appnamn",
|
||||
"admin.config.general.app-name.description": "Namn på applikationen",
|
||||
"admin.config.general.app-url": "Appens URL",
|
||||
"admin.config.general.app-url.description": "På vilken URL Pingvin Share finns",
|
||||
"admin.config.general.app-url.description":
|
||||
"På vilken URL Pingvin Share finns",
|
||||
"admin.config.general.show-home-page": "Visa startsidan",
|
||||
"admin.config.general.show-home-page.description": "Om du vill visa startsidan",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Om du vill visa startsidan",
|
||||
"admin.config.general.logo": "Logotyp",
|
||||
"admin.config.general.logo.description": "Ändra din logotyp genom att ladda upp en ny bild. Bilden måste vara en PNG och bör ha formatet 1:1.",
|
||||
"admin.config.general.logo.description":
|
||||
"Ändra din logotyp genom att ladda upp en ny bild. Bilden måste vara en PNG och bör ha formatet 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Välj bild",
|
||||
"admin.config.email.enable-share-email-recipients": "Aktivera e-postmottagare för delning",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Om du vill tillåta e-post till delningsmottagare. Aktivera endast detta om du har aktiverat SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Share recipients subject",
|
||||
"admin.config.email.share-recipients-subject.description": "Subject of the email which gets sent to the share recipients.",
|
||||
"admin.config.email.share-recipients-message": "Share recipients message",
|
||||
"admin.config.email.share-recipients-message.description": "Meddelande som skickas till delningens mottagare. Tillgängliga variabler:\n {creator} - Användarnamnet för skaparen av delningen\n {shareUrl} - URL för delningen\n {desc} - Beskrivningen av delningen\n {expires} - Förfallodatumet för delningen\n Variablerna kommer att ersättas med det faktiska värdet.",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Aktivera e-postmottagare för delning",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Om du vill tillåta e-post till delningsmottagare. Aktivera endast detta om du har aktiverat SMTP.",
|
||||
"admin.config.email.share-recipients-subject": "Delning ämne",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Ämne för e-postmeddelandet som skickas till delningsmottagarna.",
|
||||
"admin.config.email.share-recipients-message": "Delning meddelande",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Meddelande som skickas till delningens mottagare. Tillgängliga variabler:\n {creator} - Användarnamnet för skaparen av delningen\n {shareUrl} - URL för delningen\n {desc} - Beskrivningen av delningen\n {expires} - Förfallodatumet för delningen\n Variablerna kommer att ersättas med det faktiska värdet.",
|
||||
"admin.config.email.reverse-share-subject": "Omvänd delning ämne",
|
||||
"admin.config.email.reverse-share-subject.description": "Subject of the email which gets sent when someone created a share with your reverse share link.",
|
||||
"admin.config.email.reverse-share-message": "Reverse share message",
|
||||
"admin.config.email.reverse-share-message.description": "Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.",
|
||||
"admin.config.email.reset-password-subject": "Reset password subject",
|
||||
"admin.config.email.reset-password-subject.description": "Subject of the email which gets sent when a user requests a password reset.",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Ämne i e-postmeddelandet som skickas när någon skapade en delning med din omvända delningslänk.",
|
||||
"admin.config.email.reverse-share-message": "Omvänd delning meddelande",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Meddelande som skickas när någon skapade en delning med din länk för omvänd delning. {shareUrl} kommer att ersättas med skaparens namn och delningens URL.",
|
||||
"admin.config.email.reset-password-subject": "Återställ lösenord ämne",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Ämne i e-postmeddelandet som skickas när en användare begär en lösenordsåterställning.",
|
||||
"admin.config.email.reset-password-message": "Återställ lösenord meddelande",
|
||||
"admin.config.email.reset-password-message.description": "Meddelande som skickas när en användare begär en lösenordsåterställning. {url} kommer att ersättas med länken för lösenordsåterställningen.",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Meddelande som skickas när en användare begär en lösenordsåterställning. {url} kommer att ersättas med länken för lösenordsåterställningen.",
|
||||
"admin.config.email.invite-subject": "Inbjudan ämne",
|
||||
"admin.config.email.invite-subject.description": "Ämne i e-postmeddelandet som skickas när en administratör bjuder in en användare.",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Ämne i e-postmeddelandet som skickas när en administratör bjuder in en användare.",
|
||||
"admin.config.email.invite-message": "Inbjudningsmeddelanden",
|
||||
"admin.config.email.invite-message.description": "Meddelande som skickas när en administratör bjuder in en användare. {url} kommer att ersättas med inbjudningsadressen och {password} med lösenordet.",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Meddelande som skickas när en administratör bjuder in en användare. {url} kommer att ersättas med inbjudningsadressen och {password} med lösenordet.",
|
||||
"admin.config.share.allow-registration": "Tillåt registrering",
|
||||
"admin.config.share.allow-registration.description": "Om registrering är tillåten",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Tillåt oautentiserade delningar",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Om oautentiserade användare kan skapa delningar",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Om registrering är tillåten",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Tillåt oautentiserade delningar",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Om oautentiserade användare kan skapa delningar",
|
||||
"admin.config.share.max-expiration": "Max utgångsdatum",
|
||||
"admin.config.share.max-expiration.description": "Max längd innan en delning förfaller i timmar. Sätt till 0 för att tillåta obegränsad förfallotid.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Max längd innan en delning förfaller i timmar. Sätt till 0 för att tillåta obegränsad förfallotid.",
|
||||
"admin.config.share.max-size": "Max storlek",
|
||||
"admin.config.share.max-size.description": "Maximal storlek för delning i bytes",
|
||||
"admin.config.share.max-size.description":
|
||||
"Maximal storlek för delning i bytes",
|
||||
"admin.config.share.zip-compression-level": "Komprimeringsnivå för zip",
|
||||
"admin.config.share.zip-compression-level.description": "Adjust the level to balance between file size and compression speed. Valid values range from 0 to 9, with 0 being no compression and 9 being maximum compression. ",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Justera nivån för att balansera mellan filstorlek och komprimeringshastighet. Giltiga värden varierar från 0 till 9, med 0 som ingen komprimering och 9 som maximal komprimering. ",
|
||||
"admin.config.share.chunk-size": "Bitstorleken",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Justera bitstorleken (i bytes) för dina uppladdningar för att balansera effektivitet och tillförlitlighet enligt din internetanslutning. Mindre bitar kan öka framgångsgraden för instabila anslutningar, medan större bitar snabbar upp uppladdningar för stabila anslutningar.",
|
||||
"admin.config.smtp.enabled": "Aktiverad",
|
||||
"admin.config.smtp.enabled.description": "Whether SMTP is enabled. Only set this to true if you entered the host, port, email, user and password of your SMTP server.",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Om SMTP skall vara aktiverat. Ange endast detta som sant om du angav adress, port, e-post, användare och lösenord för din SMTP-server.",
|
||||
"admin.config.smtp.host": "Adress",
|
||||
"admin.config.smtp.host.description": "Adress för SMTP-servern",
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "Port för SMTP-servern",
|
||||
"admin.config.smtp.email": "E-post",
|
||||
"admin.config.smtp.email.description": "E-postadress som e-postmeddelanden skickas från",
|
||||
"admin.config.smtp.email.description":
|
||||
"E-postadress som e-postmeddelanden skickas från",
|
||||
"admin.config.smtp.username": "Användarnamn",
|
||||
"admin.config.smtp.username.description": "Användarnamn för SMTP-servern",
|
||||
"admin.config.smtp.password": "Lösenord",
|
||||
"admin.config.smtp.password.description": "Lösenord för SMTP-servern",
|
||||
"admin.config.smtp.button.test": "Skicka testmeddelande",
|
||||
"admin.config.oauth.allow-registration": "Tillåt registrering",
|
||||
"admin.config.oauth.allow-registration.description": "Tillåt användare att registrera sig via social inloggning",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Tillåt användare att registrera sig via social inloggning",
|
||||
"admin.config.oauth.ignore-totp": "Ignorera TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Om du vill ignorera TOTP när användaren använder social inloggning",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Om du vill ignorera TOTP när användaren använder social inloggning",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Om GitHub-inloggning är aktiverad",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Om GitHub-inloggning är aktiverad",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "Client-ID för GitHub OAuth appen",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"Client-ID för GitHub OAuth appen",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description": "Client secret för GitHub OAuth appen",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Client secret för GitHub OAuth appen",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Om Google-inloggning är aktiverad",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Om Google-inloggning är aktiverad",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Client-ID för Google OAuth appen",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Client-ID för Google OAuth appen",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret för Google OAuth appen",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Client secret för Google OAuth appen",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Om Microsoftinloggning skall vara aktiverat",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Tenant-ID för Microsoft OAuth app\ngemensamt: Användare med både ett personligt Microsoft-konto och ett arbets- eller skolkonto från Microsoft Entra ID kan logga in på programmet.\norganisationer: Endast användare med arbets- eller skolkonton från Microsoft Entra ID kan logga in på programmet.\nkonsumenter: Endast användare med ett personligt Microsoft-konto kan logga in på programmet.\ndomännamn för Microsoft Entra tenant eller tenant ID i GUID-format: Endast användare från en specifik Microsoft Entra tenant (katalogmedlemmar med ett arbets- eller skolkonto eller kataloggäster med ett personligt Microsoft-konto) kan logga in på ansökan.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Client ID för Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client secret för Microsoft OAuth",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Om inloggning via Discord är aktiverat",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord begränsa till server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Begränsa inloggning till användare på en specifik server. Lämna tomt för att inaktivera.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Client ID för Discord OAuth",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Whether OpenID login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID OAuth app",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Client secret för Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Om OpenID-inloggning är aktiverat",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI för OpenID Connect OAuth appen",
|
||||
"admin.config.oauth.oidc-username-claim":
|
||||
"OpenID Connect användarnamnsanspråk",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Användarnamnsanspråk i OpenID Connect ID token. Lämna tomt om du inte vet vad denna konfiguration är.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID för OpenID OAuth",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret för OpenID OAuth",
|
||||
// 404
|
||||
"404.description": "Hoppsan den här sidan finns inte.",
|
||||
"404.button.home": "Ta mig tillbaka hem",
|
||||
@@ -374,16 +475,27 @@ export default {
|
||||
"error.button.back": "Gå tillbaka",
|
||||
"error.msg.default": "Någonting gick fel.",
|
||||
"error.msg.access_denied": "Du avbröt autentiseringsprocessen, försök igen.",
|
||||
"error.msg.expired_token": "Autentiseringsprocessen tog för lång tid, försök igen.",
|
||||
"error.msg.no_user": "Användare som är länkad till detta {0} konto finns inte.",
|
||||
"error.msg.expired_token":
|
||||
"Autentiseringsprocessen tog för lång tid, försök igen.",
|
||||
"error.msg.invalid_token": "Internt fel",
|
||||
"error.msg.no_user":
|
||||
"Användare som är länkad till detta {0} konto finns inte.",
|
||||
"error.msg.no_email": "Kan inte hämta e-postadress från detta {0} konto.",
|
||||
"error.msg.already_linked": "Detta {0} konto är redan länkat till ett annat konto.",
|
||||
"error.msg.not_linked": "Detta {0} konto har ännu inte länkat till något konto.",
|
||||
"error.msg.already_linked":
|
||||
"Detta {0} konto är redan länkat till ett annat konto.",
|
||||
"error.msg.not_linked":
|
||||
"Detta {0} konto har ännu inte länkat till något konto.",
|
||||
"error.msg.unverified_account":
|
||||
"Detta {0} -konto är overifierat, försök igen efter verifiering.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"Du är inte tillåten att logga in.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Kan inte hämta din användarinformation från detta {0} konto.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Spara",
|
||||
"common.button.create": "Skapa",
|
||||
@@ -396,8 +508,10 @@ export default {
|
||||
"common.button.generate": "Generera",
|
||||
"common.button.done": "Klar",
|
||||
"common.text.link": "Länk",
|
||||
"common.text.navigate-to-link": "Gå till länken",
|
||||
"common.text.or": "eller",
|
||||
"common.button.go-back": "Gå tillbaka",
|
||||
"common.button.go-home": "Gå hem",
|
||||
"common.notify.copied": "Din länk har kopierats till urklipp",
|
||||
"common.success": "Slutförd",
|
||||
"common.error": "Fel",
|
||||
@@ -407,5 +521,5 @@ export default {
|
||||
"common.error.too-long": "Får högst innehålla {length} tecken",
|
||||
"common.error.exact-length": "Måste vara exakt {length} tecken långt",
|
||||
"common.error.invalid-number": "Måste vara ett tal",
|
||||
"common.error.field-required": "Obligatoriskt fält"
|
||||
};
|
||||
"common.error.field-required": "Obligatoriskt fält",
|
||||
};
|
||||
|
||||
@@ -12,13 +12,16 @@ export default {
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "แพลตฟอร์มสำหรับแชร์ไฟล์ที่คุณสามารถโฮสต์ด้วยตนเอง.",
|
||||
"home.description": "คุณอยากให้บริษัทภายนอกเช่น WeTransfer เข้าถึงไฟล์ส่วนตัวของคุณหรือเปล่า?",
|
||||
"home.description":
|
||||
"คุณอยากให้บริษัทภายนอกเช่น WeTransfer เข้าถึงไฟล์ส่วนตัวของคุณหรือเปล่า?",
|
||||
"home.bullet.a.name": "Self-Hosted",
|
||||
"home.bullet.a.description": "โฮสต์ Pingvin Share บนเครื่องของคุณเอง.",
|
||||
"home.bullet.b.name": "ความเป็นส่วนตัว",
|
||||
"home.bullet.b.description": "ไฟล์ของคุณคือไฟล์ของคุณ มันไม่ควรตกอยู่บนมือของบุคคลที่สาม",
|
||||
"home.bullet.b.description":
|
||||
"ไฟล์ของคุณคือไฟล์ของคุณ มันไม่ควรตกอยู่บนมือของบุคคลที่สาม",
|
||||
"home.bullet.c.name": "ไม่มีการจำกัดขนาดไฟล์ที่น่ารำคาญ",
|
||||
"home.bullet.c.description": "อัพโหลดใหญ่เท่าไหนก็ได้ จำกัดอย่างเดียวคือความจุของเคื่องคุณ",
|
||||
"home.bullet.c.description":
|
||||
"อัพโหลดใหญ่เท่าไหนก็ได้ จำกัดอย่างเดียวคือความจุของเคื่องคุณ",
|
||||
"home.button.start": "เริ่มต้น",
|
||||
"home.button.source": "ซอร์สโค้ด",
|
||||
// END /
|
||||
@@ -27,7 +30,8 @@ export default {
|
||||
"signin.description": "ยังไม่มีบัญชี?",
|
||||
"signin.button.signup": "สมัครบัญชี",
|
||||
"signin.input.email-or-username": "อีเมล์์์์์์์์หรือชื่อผู้ใช้",
|
||||
"signin.input.email-or-username.placeholder": "อีเมล์์์์์์์หรือชื่อผู้ใช้ของคุณ",
|
||||
"signin.input.email-or-username.placeholder":
|
||||
"อีเมล์์์์์์์หรือชื่อผู้ใช้ของคุณ",
|
||||
"signin.input.password": "รหัสผ่าน",
|
||||
"signin.input.password.placeholder": "รหัสผ่านของคุณ",
|
||||
"signin.button.submit": "เข้าสู่ระบบ",
|
||||
@@ -57,7 +61,8 @@ export default {
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "ลืมรหัสผ่าน?",
|
||||
"resetPassword.description": "กรุณาใส่อีเมล์์์์์์์ของคุณเพื่อรีเซ็ตรหัสผ่าน",
|
||||
"resetPassword.notify.success": "ส่งอีเมล์์์์์์์พร้อมลิงค์เพื่อรีเซ็ตรหัสผ่านของคุณแล้ว",
|
||||
"resetPassword.notify.success":
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.button.back": "กลับไปที่หน้าลงชื่อเข้าใช้",
|
||||
"resetPassword.text.resetPassword": "รีเซ็ตรหัสผ่าน",
|
||||
"resetPassword.text.enterNewPassword": "ป้อนรหัสผ่านใหม่ของคุณ",
|
||||
@@ -72,7 +77,8 @@ export default {
|
||||
"account.card.password.title": "รหัสผ่าน",
|
||||
"account.card.password.old": "รหัสผ่านเก่า",
|
||||
"account.card.password.new": "รหัสผ่านใหม่",
|
||||
"account.card.password.noPasswordSet": "You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.notify.password.success": "อัปเดตรหัสผ่านเรียบร้อยแล้ว",
|
||||
"account.card.oauth.title": "Social login",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -84,23 +90,27 @@ export default {
|
||||
"account.card.oauth.unlink": "Unlink",
|
||||
"account.card.oauth.unlinked": "Unlinked",
|
||||
"account.modal.unlink.title": "Unlink account",
|
||||
"account.modal.unlink.description": "Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.modal.unlink.description":
|
||||
"Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.notify.oauth.unlinked.success": "Unlinked successfully",
|
||||
"account.card.security.title": "ความปลอดภัย",
|
||||
"account.card.security.totp.enable.description": "ใส่รหัสผ่านปัจจุบันของคุณเพื่อเริ่มต้นการเปิดใช้งาน TOTP",
|
||||
"account.card.security.totp.disable.description": "ใส่รหัสผ่านปัจจุบันของคุณเพื่อปิดใช้งาน TOTP",
|
||||
"account.card.security.totp.enable.description":
|
||||
"ใส่รหัสผ่านปัจจุบันของคุณเพื่อเริ่มต้นการเปิดใช้งาน TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"ใส่รหัสผ่านปัจจุบันของคุณเพื่อปิดใช้งาน TOTP",
|
||||
"account.card.security.totp.button.start": "เริ่มต้น",
|
||||
"account.modal.totp.title": "เปิดใช้งาน TOTP",
|
||||
"account.modal.totp.step1": "ขั้นตอนที่ 1: สแกนรหัส QR",
|
||||
"account.modal.totp.step2": "ขั้นตอนที่ 2: ป้อนรหัสยืนยันตัวตน",
|
||||
"account.modal.totp.enterManually": "ป้อนด้วยตนเอง",
|
||||
"account.modal.totp.code": "รหัส",
|
||||
"account.modal.totp.clickToCopy": "คลิกเพื่อคัดลอก",
|
||||
"common.button.clickToCopy": "คลิกเพื่อคัดลอก",
|
||||
"account.modal.totp.verify": "ยืนยัน",
|
||||
"account.notify.totp.disable": "TOTP ถูกปิดใช้งานเรียบร้อยแล้ว",
|
||||
"account.notify.totp.enable": "TOTP ถูกเปิดใช้งานเรียบร้อยแล้ว",
|
||||
"account.card.language.title": "ภาษา",
|
||||
"account.card.language.description": "โปรเจคนี้ถูกแปลโดยชุมชน บางภาษาอาจยังไม่สมบูรณ์",
|
||||
"account.card.language.description":
|
||||
"โปรเจคนี้ถูกแปลโดยชุมชน บางภาษาอาจยังไม่สมบูรณ์",
|
||||
"account.card.color.title": "ธีมสี",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "มืด",
|
||||
@@ -108,7 +118,8 @@ export default {
|
||||
"account.theme.system": "ตามระบบ",
|
||||
"account.button.delete": "ลบบัญชี",
|
||||
"account.modal.delete.title": "ลบบัญชีของคุณ",
|
||||
"account.modal.delete.description": "คุณต้องการลบบัญชีของคุณหรือไม่ รวมถึงแชร์ที่คุณสร้างไว้ทั้งหมด?",
|
||||
"account.modal.delete.description":
|
||||
"คุณต้องการลบบัญชีของคุณหรือไม่ รวมถึงแชร์ที่คุณสร้างไว้ทั้งหมด?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "แชร์ของฉัน",
|
||||
@@ -130,7 +141,8 @@ export default {
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "รีเวิร์สแชร์ของฉัน",
|
||||
"account.reverseShares.description": "รีเวิร์สแชร์สร้างลิงค์สำหรับคนภายนอกเพื่อที่จะแชร์ไฟล์ให้คุณ",
|
||||
"account.reverseShares.description":
|
||||
"รีเวิร์สแชร์สร้างลิงค์สำหรับคนภายนอกเพื่อที่จะแชร์ไฟล์ให้คุณ",
|
||||
"account.reverseShares.title.empty": "มันว่างเปล่าที่นี่ 👀",
|
||||
"account.reverseShares.description.empty": "คุณยังไม่ได้สร้างรีเวิร์สแชร์ใดๆ",
|
||||
// showCreateReverseShareModal.tsx
|
||||
@@ -150,9 +162,11 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "ปี",
|
||||
"account.reverseShares.modal.max-size.label": "ขนาดสูงสุดของแชร์",
|
||||
"account.reverseShares.modal.send-email": "ส่งอีเมล์์์์์์์แจ้งเตือน",
|
||||
"account.reverseShares.modal.send-email.description": "ส่งอีเมล์์์์์์์แจ้งเตือนเมื่อมีการสร้างแชร์ด้วยลิงค์รีเวิร์สนี้",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"ส่งอีเมล์์์์์์์แจ้งเตือนเมื่อมีการสร้างแชร์ด้วยลิงค์รีเวิร์สนี้",
|
||||
"account.reverseShares.modal.max-use.label": "จำนวนการใช้งานสูงสุด",
|
||||
"account.reverseShares.modal.max-use.description": "จำนวนครั้งสูงสุดที่ลิงค์นี้สามารถใช้งานได้",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"จำนวนครั้งสูงสุดที่ลิงค์นี้สามารถใช้งานได้",
|
||||
"account.reverseShare.never-expires": "ลิงค์นี้ไม่มีวันหมดอายุ",
|
||||
"account.reverseShare.expires-on": "ลิงค์นี้จะหมดอายุใน {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "ยังไม่มีการสร้างแชร์",
|
||||
@@ -164,11 +178,13 @@ export default {
|
||||
"account.reverseShares.table.expires": "หมดอายุ",
|
||||
"account.reverseShares.modal.reverse-share-link": "ลิงค์รีเวิร์สแชร์",
|
||||
"account.reverseShares.modal.delete.title": "ลบลิงค์รีเวิร์สแชร์",
|
||||
"account.reverseShares.modal.delete.description": "คุณต้องการลบลิงค์รีเวิร์สแชร์นี้หรือไม่? หากคุณทำเช่นนั้นแชร์ที่เกี่ยวข้องจะถูกลบด้วย",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"คุณต้องการลบลิงค์รีเวิร์สแชร์นี้หรือไม่? หากคุณทำเช่นนั้นแชร์ที่เกี่ยวข้องจะถูกลบด้วย",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "แผงควบคุมระบบ",
|
||||
"admin.button.users": "การจัดการผู้ใช้",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "การตั้งค่า",
|
||||
"admin.version": "เวอร์ชัน",
|
||||
// END /admin
|
||||
@@ -182,39 +198,59 @@ export default {
|
||||
"admin.users.edit.update.change-password.title": "เปลี่ยนรหัสผ่าน",
|
||||
"admin.users.edit.update.change-password.field": "รหัสผ่านใหม่",
|
||||
"admin.users.edit.update.change-password.button": "บันทึกรหัสผ่านใหม่",
|
||||
"admin.users.edit.update.notify.password.success": "รหัสผ่านเปลี่ยนเรียบร้อยแล้ว",
|
||||
"admin.users.edit.update.notify.password.success":
|
||||
"รหัสผ่านเปลี่ยนเรียบร้อยแล้ว",
|
||||
"admin.users.edit.delete.title": "ลบผู้ใช้ {username}",
|
||||
"admin.users.edit.delete.description": "คุณต้องการลบผู้ใช้นี้และการแชร์ทั้งหมดของเขาหรือไม่?",
|
||||
"admin.users.edit.delete.description":
|
||||
"คุณต้องการลบผู้ใช้นี้และการแชร์ทั้งหมดของเขาหรือไม่?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "สร้างผู้ใช้",
|
||||
"admin.users.modal.create.username": "ชื่อผู้ใช้",
|
||||
"admin.users.modal.create.email": "อีเมล์",
|
||||
"admin.users.modal.create.password": "รหัสผ่าน",
|
||||
"admin.users.modal.create.manual-password": "ตั้งรหัสผ่านด้วยตนเอง",
|
||||
"admin.users.modal.create.manual-password.description": "หากไม่ติ๊กเลือก ผู้ใช้จะได้รับอีเมล์พร้อมลิงก์เพื่อตั้งรหัสผ่านด้วยตนเอง",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"หากไม่ติ๊กเลือก ผู้ใช้จะได้รับอีเมล์พร้อมลิงก์เพื่อตั้งรหัสผ่านด้วยตนเอง",
|
||||
"admin.users.modal.create.admin": "สิทธิ์ของผู้ดูแลระบบ",
|
||||
"admin.users.modal.create.admin.description": "หากติ๊กเลือก ผู้ใช้จะสามารถเข้าถึงแผงควบคุมระบบได้",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"หากติ๊กเลือก ผู้ใช้จะสามารถเข้าถึงแผงควบคุมระบบได้",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "อัปโหลด",
|
||||
"upload.notify.generic-error": "เกิดข้อผิดพลาดขณะที่กำลังจัดการการแชร์ของคุณ",
|
||||
"upload.notify.count-failed": "มีไฟล์จำนวน {count} ไฟล์ที่ไม่สามารถอัปโหลดได้ กำลังลองอีกครั้ง",
|
||||
"upload.notify.count-failed":
|
||||
"มีไฟล์จำนวน {count} ไฟล์ที่ไม่สามารถอัปโหลดได้ กำลังลองอีกครั้ง",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "อัปโหลดไฟล์",
|
||||
"upload.dropzone.description": "ลากและวางไฟล์ที่นี่เพื่อเริ่มการแชร์ของคุณ สามารถรับไฟล์ที่มีขนาดรวมไม่เกิน {maxSize} เท่านั้น",
|
||||
"upload.dropzone.notify.file-too-big": "ไฟล์ของคุณเกินขนาดสูงสุดของการแชร์ {maxSize}",
|
||||
"upload.dropzone.description":
|
||||
"ลากและวางไฟล์ที่นี่เพื่อเริ่มการแชร์ของคุณ สามารถรับไฟล์ที่มีขนาดรวมไม่เกิน {maxSize} เท่านั้น",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"ไฟล์ของคุณเกินขนาดสูงสุดของการแชร์ {maxSize}",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "ชื่อ",
|
||||
"upload.filelist.size": "ขนาด",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "สร้างการแชร์",
|
||||
"upload.modal.link.error.invalid": "สามารถใช้ได้เฉพาะตัวอักษร ตัวเลข ขีดล่าง และขีดเส้น",
|
||||
"upload.modal.link.error.invalid":
|
||||
"สามารถใช้ได้เฉพาะตัวอักษร ตัวเลข ขีดล่าง และขีดเส้น",
|
||||
"upload.modal.link.error.taken": "ลิงก์นี้ถูกใช้งานแล้ว",
|
||||
"upload.modal.not-signed-in": "คุณยังไม่ได้เข้าสู่ระบบ",
|
||||
"upload.modal.not-signed-in-description": "คุณจะไม่สามารถลบการแชร์ของคุณด้วยตนเองและดูจำนวนผู้เข้าชมได้",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"คุณจะไม่สามารถลบการแชร์ของคุณด้วยตนเองและดูจำนวนผู้เข้าชมได้",
|
||||
"upload.modal.expires.never": "ไม่มีกำหนด",
|
||||
"upload.modal.expires.never-long": "ไม่มีกำหนดหมดอายุ",
|
||||
"upload.modal.expires.error.too-long": "Expiration exceeds maximum expiration date of {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Expiration exceeds maximum expiration date of {max}.",
|
||||
"upload.modal.link.label": "ลิงค์",
|
||||
"upload.modal.expires.label": "หมดอายุ",
|
||||
"upload.modal.expires.minute-singular": "นาที",
|
||||
@@ -229,8 +265,10 @@ export default {
|
||||
"upload.modal.expires.month-plural": "เดือน",
|
||||
"upload.modal.expires.year-singular": "ปี",
|
||||
"upload.modal.expires.year-plural": "ปี",
|
||||
"upload.modal.accordion.description.title": "คำอธิบาย",
|
||||
"upload.modal.accordion.description.placeholder": "หมายเหตุสำหรับผู้รับการแชร์นี้",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "ผู้รับอีเมล์",
|
||||
"upload.modal.accordion.email.placeholder": "ป้อนผู้รับอีเมล์",
|
||||
"upload.modal.accordion.email.invalid-email": "ที่อยู่อีเมล์ไม่ถูกต้อง",
|
||||
@@ -241,14 +279,16 @@ export default {
|
||||
"upload.modal.accordion.security.max-views.placeholder": "ไม่จำกัด",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "การแชร์นี้จะไม่มีวันหมดอายุ",
|
||||
"upload.modal.completed.expires-on": "การแชร์นี้จะหมดอายุเมื่อวันที่ {expiration}",
|
||||
"upload.modal.completed.expires-on":
|
||||
"การแชร์นี้จะหมดอายุเมื่อวันที่ {expiration}",
|
||||
"upload.modal.completed.share-ready": "แชร์พร้อมใช้งาน",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "แชร์ {shareId}",
|
||||
"share.description": "ดูสิ่งที่ฉันแชร์กับคุณ!",
|
||||
"share.error.visitor-limit-exceeded.title": "เกินขีดจำกัดผู้เข้าชม",
|
||||
"share.error.visitor-limit-exceeded.description": "การแชร์นี้ได้เกินขีดจำกัดผู้เข้าชมแล้ว",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"การแชร์นี้ได้เกินขีดจำกัดผู้เข้าชมแล้ว",
|
||||
"share.error.removed.title": "การแชร์ถูกลบ",
|
||||
"share.error.not-found.title": "ไม่พบการแชร์นี้",
|
||||
"share.error.not-found.description": "การแชร์ที่คุณกำลังมองหาไม่มีอยู่จริง",
|
||||
@@ -257,17 +297,21 @@ export default {
|
||||
"share.modal.password": "รหัสผ่าน",
|
||||
"share.modal.error.invalid-password": "รหัสผ่านไม่ถูกต้อง",
|
||||
"share.button.download-all": "ดาวน์โหลดทั้งหมด",
|
||||
"share.notify.download-all-preparing": "กำลังเตรียมการแชร์นี้ โปรดลองอีกครั้งในไม่กี่นาที",
|
||||
"share.notify.download-all-preparing":
|
||||
"กำลังเตรียมการแชร์นี้ โปรดลองอีกครั้งในไม่กี่นาที",
|
||||
"share.modal.file-link": "ลิงค์ไฟล์",
|
||||
"share.table.name": "ชื่อ",
|
||||
"share.table.size": "ขนาด",
|
||||
"share.modal.file-preview.error.not-supported.title": "ไม่รองรับการแสดงตัวอย่าง",
|
||||
"share.modal.file-preview.error.not-supported.description": "ไม่รองรับการแสดงตัวอย่างสำหรับไฟล์ประเภทนี้ โปรดดาวน์โหลดไฟล์เพื่อดู",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"ไม่รองรับการแสดงตัวอย่าง",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"A preview for this file type is unsupported. Please download the file to view it.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Edit {shareId}",
|
||||
"share.edit.append-upload": "Append file",
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.generic-error":
|
||||
"An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
@@ -280,91 +324,141 @@ export default {
|
||||
"admin.config.general.app-name": "ชื่อแอพ",
|
||||
"admin.config.general.app-name.description": "ชื่อแอพพลิเคชัน",
|
||||
"admin.config.general.app-url": "URL ของแอพ",
|
||||
"admin.config.general.app-url.description": "URL ที่สามารถเข้าถึงแอพพลิเคชัน Pingvin Share ได้",
|
||||
"admin.config.general.app-url.description":
|
||||
"URL ที่สามารถเข้าถึงแอพพลิเคชัน Pingvin Share ได้",
|
||||
"admin.config.general.show-home-page": "แสดงหน้าแรก",
|
||||
"admin.config.general.show-home-page.description": "หากติ๊ก เว็บไซต์จะแสดงหน้าหลักเวลาเข้าถึง URL หลัก",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"หากติ๊ก เว็บไซต์จะแสดงหน้าหลักเวลาเข้าถึง URL หลัก",
|
||||
"admin.config.general.logo": "โลโก้",
|
||||
"admin.config.general.logo.description": "เปลี่ยนโลโก้โดยอัปโหลดรูปภาพใหม่ รูปภาพต้องเป็น PNG และควรมีขนาดอัตราส่วน 1:1",
|
||||
"admin.config.general.logo.description":
|
||||
"เปลี่ยนโลโก้โดยอัปโหลดรูปภาพใหม่ รูปภาพต้องเป็น PNG และควรมีขนาดอัตราส่วน 1:1",
|
||||
"admin.config.general.logo.placeholder": "คลิกที่นี่หรือลากไฟล์มา",
|
||||
"admin.config.email.enable-share-email-recipients": "เปิดใช้งานผู้รับอีเมล์์์์์์ของการแชร์",
|
||||
"admin.config.email.enable-share-email-recipients.description": "เมื่อเปิดใช้งานผู้รับอีเมล์์์์์์ของการแชร์ ผู้ใช้ที่สร้างการแชร์จะสามารถเพิ่มผู้รับอีเมล์์์์์์์ของการแชร์ได้ เปิดเฉพาะเมื่อคุณเปิดใช้งาน SMTP",
|
||||
"admin.config.email.share-recipients-subject": "หัวเรื่องผู้รับอีเมล์์์์์์ของการแชร์",
|
||||
"admin.config.email.share-recipients-subject.description": "หัวเรื่องของอีเมล์์์์์์์์ที่ส่งไปยังผู้รับอีเมล์์์์์์ของการแชร์",
|
||||
"admin.config.email.share-recipients-message": "ข้อความผู้รับอีเมล์์์์์์ของการแชร์",
|
||||
"admin.config.email.share-recipients-message.description": "ข้อความที่ส่งไปยังผู้รับอีเมล์์์์์์ของการแชร์ ตัวแปรที่ใช้ได้:\n {creator} - ชื่อผู้สร้างการแชร์\n {shareUrl} - URL ของการแชร์\n {desc} - คำอธิบายของการแชร์\n {expires} - วันหมดอายุของการแชร์\n ตัวแปรจะถูกแทนที่ด้วยค่าจริง",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"เปิดใช้งานผู้รับอีเมล์์์์์์ของการแชร์",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"เมื่อเปิดใช้งานผู้รับอีเมล์์์์์์ของการแชร์ ผู้ใช้ที่สร้างการแชร์จะสามารถเพิ่มผู้รับอีเมล์์์์์์์ของการแชร์ได้ เปิดเฉพาะเมื่อคุณเปิดใช้งาน SMTP",
|
||||
"admin.config.email.share-recipients-subject":
|
||||
"หัวเรื่องผู้รับอีเมล์์์์์์ของการแชร์",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"หัวเรื่องของอีเมล์์์์์์์์ที่ส่งไปยังผู้รับอีเมล์์์์์์ของการแชร์",
|
||||
"admin.config.email.share-recipients-message":
|
||||
"ข้อความผู้รับอีเมล์์์์์์ของการแชร์",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"ข้อความที่ส่งไปยังผู้รับอีเมล์์์์์์ของการแชร์ ตัวแปรที่ใช้ได้:\n {creator} - ชื่อผู้สร้างการแชร์\n {shareUrl} - URL ของการแชร์\n {desc} - คำอธิบายของการแชร์\n {expires} - วันหมดอายุของการแชร์\n ตัวแปรจะถูกแทนที่ด้วยค่าจริง",
|
||||
"admin.config.email.reverse-share-subject": "หัวเรื่องการแชร์รีเวิร์ส",
|
||||
"admin.config.email.reverse-share-subject.description": "หัวเรื่องของอีเมล์์์์์์ที่ส่งไปยังผู้สร้างการแชร์รีเวิร์ส",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"หัวเรื่องของอีเมล์์์์์์ที่ส่งไปยังผู้สร้างการแชร์รีเวิร์ส",
|
||||
"admin.config.email.reverse-share-message": "ข้อความการแชร์รีเวิร์ส",
|
||||
"admin.config.email.reverse-share-message.description": "ข้อความที่ส่งไปยังผู้สร้างการแชร์รีเวิร์ส ตัวแปรที่ใช้ได้:\n {shareUrl} - ชื่อผู้สร้างแชร์รีเวิร์สและ URL ของการแชร์\n ตัวแปรจะถูกแทนที่ด้วยค่าจริง",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"ข้อความที่ส่งไปยังผู้สร้างการแชร์รีเวิร์ส ตัวแปรที่ใช้ได้:\n {shareUrl} - ชื่อผู้สร้างแชร์รีเวิร์สและ URL ของการแชร์\n ตัวแปรจะถูกแทนที่ด้วยค่าจริง",
|
||||
"admin.config.email.reset-password-subject": "หัวเรื่องการรีเซ็ตรหัสผ่าน",
|
||||
"admin.config.email.reset-password-subject.description": "หัวเรื่องของอีเมล์์์์์์ที่ส่งไปยังผู้ใช้เมื่อขอรีเซ็ตรหัสผ่าน",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"หัวเรื่องของอีเมล์์์์์์ที่ส่งไปยังผู้ใช้เมื่อขอรีเซ็ตรหัสผ่าน",
|
||||
"admin.config.email.reset-password-message": "ข้อความการรีเซ็ตรหัสผ่าน",
|
||||
"admin.config.email.reset-password-message.description": "ข้อความที่ส่งไปยังผู้ใช้เมื่อขอรีเซ็ตรหัสผ่าน ตัวแปรที่ใช้ได้:\n {url} - URL สำหรับรีเซ็ตรหัสผ่าน\n ตัวแปรจะถูกแทนที่ด้วยค่าจริง",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"ข้อความที่ส่งไปยังผู้ใช้เมื่อขอรีเซ็ตรหัสผ่าน ตัวแปรที่ใช้ได้:\n {url} - URL สำหรับรีเซ็ตรหัสผ่าน\n ตัวแปรจะถูกแทนที่ด้วยค่าจริง",
|
||||
"admin.config.email.invite-subject": "หัวเรื่องการเชิญ",
|
||||
"admin.config.email.invite-subject.description": "หัวเรื่องของอีเมล์์์์์์ที่ส่งไปยังผู้ใช้เมื่อผู้ดูแลระบบเชิญผู้ใช้",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"หัวเรื่องของอีเมล์์์์์์ที่ส่งไปยังผู้ใช้เมื่อผู้ดูแลระบบเชิญผู้ใช้",
|
||||
"admin.config.email.invite-message": "ข้อความการเชิญ",
|
||||
"admin.config.email.invite-message.description": "ข้อความที่ส่งไปยังผู้ใช้เมื่อผู้ดูแลระบบเชิญผู้ใช้ ตัวแปรที่ใช้ได้:\n {url} - URL สำหรับเชิญผู้ใช้\n {password} - รหัสผ่านของผู้ใช้\n ตัวแปรจะถูกแทนที่ด้วยค่าจริง",
|
||||
"admin.config.email.invite-message.description":
|
||||
"ข้อความที่ส่งไปยังผู้ใช้เมื่อผู้ดูแลระบบเชิญผู้ใช้ ตัวแปรที่ใช้ได้:\n {url} - URL สำหรับเชิญผู้ใช้\n {password} - รหัสผ่านของผู้ใช้\n ตัวแปรจะถูกแทนที่ด้วยค่าจริง",
|
||||
"admin.config.share.allow-registration": "อนุญาตให้ลงทะเบียนด้วยตัวเอง",
|
||||
"admin.config.share.allow-registration.description": "อนุญาตให้ผู้ใช้ลงทะเบียนด้วยตัวเองเพื่อสร้างแชร์",
|
||||
"admin.config.share.allow-unauthenticated-shares": "อนุญาตให้แชร์โดยไม่ต้องเข้าสู่ระบบ",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "อนุญาตให้ผู้ใช้ที่ไม่ได้เข้าสู่ระบบสร้างแชร์",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"อนุญาตให้ผู้ใช้ลงทะเบียนด้วยตัวเองเพื่อสร้างแชร์",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"อนุญาตให้แชร์โดยไม่ต้องเข้าสู่ระบบ",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"อนุญาตให้ผู้ใช้ที่ไม่ได้เข้าสู่ระบบสร้างแชร์",
|
||||
"admin.config.share.max-expiration": "Max expiration",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.max-size": "ขนาดสูงสุด",
|
||||
"admin.config.share.max-size.description": "ขนาดสูงสุดของแชร์",
|
||||
"admin.config.share.zip-compression-level": "ระดับการบีบอัดไฟล์ Zip",
|
||||
"admin.config.share.zip-compression-level.description": "ปรับระดับเพื่อปรับความสมดุลระหว่างขนาดไฟล์และความเร็วในการบีบอัด ค่าอยู่ระหว่าง 0-9 โดย 0 คือไม่มีการบีบอัดและ 9 คือการบีบอัดสูงสุด",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"ปรับระดับเพื่อปรับความสมดุลระหว่างขนาดไฟล์และความเร็วในการบีบอัด ค่าอยู่ระหว่าง 0-9 โดย 0 คือไม่มีการบีบอัดและ 9 คือการบีบอัดสูงสุด",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "เปิด",
|
||||
"admin.config.smtp.enabled.description": "เปิดใช้งาน SMTP สำหรับการส่งอีเมล์์์์์์ เปิดได้เท่านั้นต่อเมื่อคุณใส่ข้อมูลโฮสต์ พอร์ต อีเมล์ ผู้ใช้ และรหัสผ่านของเซิร์ฟเวอร์ SMTP ของคุณ",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"เปิดใช้งาน SMTP สำหรับการส่งอีเมล์์์์์์ เปิดได้เท่านั้นต่อเมื่อคุณใส่ข้อมูลโฮสต์ พอร์ต อีเมล์ ผู้ใช้ และรหัสผ่านของเซิร์ฟเวอร์ SMTP ของคุณ",
|
||||
"admin.config.smtp.host": "โฮสต์",
|
||||
"admin.config.smtp.host.description": "โฮสต์ของเซิร์ฟเวอร์ SMTP",
|
||||
"admin.config.smtp.port": "พอร์ต",
|
||||
"admin.config.smtp.port.description": "พอร์ตของเซิร์ฟเวอร์ SMTP",
|
||||
"admin.config.smtp.email": "อีเมล์์์์์์์",
|
||||
"admin.config.smtp.email.description": "อีเมล์์์์์์์ที่ใช้สำหรับการส่งอีเมล์์์์์์์",
|
||||
"admin.config.smtp.email.description":
|
||||
"อีเมล์์์์์์์ที่ใช้สำหรับการส่งอีเมล์์์์์์์",
|
||||
"admin.config.smtp.username": "ชื่อผู้ใช้",
|
||||
"admin.config.smtp.username.description": "ชื่อผู้ใช้ของเซิร์ฟเวอร์ SMTP",
|
||||
"admin.config.smtp.password": "รหัสผ่าน",
|
||||
"admin.config.smtp.password.description": "รหัสผ่านของเซิร์ฟเวอร์ SMTP",
|
||||
"admin.config.smtp.button.test": "ส่งอีเมล์์์์์์ทดสอบ",
|
||||
"admin.config.oauth.allow-registration": "Allow registration",
|
||||
"admin.config.oauth.allow-registration.description": "Allow users to register via social login",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Allow users to register via social login",
|
||||
"admin.config.oauth.ignore-totp": "Ignore TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description": "Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Whether Google login is enabled",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Whether Google login is enabled",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord limited server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limit signing in to users in a specific server. Leave it blank to disable.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Whether OpenID login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID OAuth app",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Whether OpenID Connect login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "ไม่พบหน้าที่คุณกำลังมองหา",
|
||||
"404.button.home": "หน้าแรก",
|
||||
@@ -373,17 +467,27 @@ export default {
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Go back",
|
||||
"error.msg.default": "Something went wrong.",
|
||||
"error.msg.access_denied": "You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token": "The authentication process took too long, please try again.",
|
||||
"error.msg.access_denied":
|
||||
"You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token":
|
||||
"The authentication process took too long, please try again.",
|
||||
"error.msg.invalid_token": "Internal Error",
|
||||
"error.msg.no_user": "User linked to this {0} account doesn't exist.",
|
||||
"error.msg.no_email": "Can't get email address from this {0} account.",
|
||||
"error.msg.already_linked": "This {0} account is already linked to another account.",
|
||||
"error.msg.already_linked":
|
||||
"This {0} account is already linked to another account.",
|
||||
"error.msg.not_linked": "This {0} account haven't linked to any account yet.",
|
||||
"error.msg.unverified_account":
|
||||
"This {0} account is unverified, please try again after verification.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"You are not allowed to sign in.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Can not get your user info from this {0} account.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "บันทึก",
|
||||
"common.button.create": "สร้าง",
|
||||
@@ -396,8 +500,10 @@ export default {
|
||||
"common.button.generate": "สุ่ม",
|
||||
"common.button.done": "เสร็จสิ้น",
|
||||
"common.text.link": "ลิงค์",
|
||||
"common.text.navigate-to-link": "Go to the link",
|
||||
"common.text.or": "หรือ",
|
||||
"common.button.go-back": "ย้อนกลับ",
|
||||
"common.button.go-home": "Go home",
|
||||
"common.notify.copied": "คัดลอกไปยังคลิปบอร์ดแล้ว",
|
||||
"common.success": "สำเร็จ",
|
||||
"common.error": "เกิดข้อผิดพลาด",
|
||||
@@ -407,5 +513,5 @@ export default {
|
||||
"common.error.too-long": "ต้องมีไม่เกิน {length} ตัวอักษร",
|
||||
"common.error.exact-length": "ต้องมีความยาว {length} ตัวอักษร",
|
||||
"common.error.invalid-number": "ต้องเป็นตัวเลข",
|
||||
"common.error.field-required": "ต้องกรอกข้อมูลนี้"
|
||||
};
|
||||
"common.error.field-required": "ต้องกรอกข้อมูลนี้",
|
||||
};
|
||||
|
||||
533
frontend/src/i18n/translations/uk-UA.ts
Normal file
533
frontend/src/i18n/translations/uk-UA.ts
Normal file
@@ -0,0 +1,533 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "Завантажити",
|
||||
"navbar.signin": "Вхід",
|
||||
"navbar.home": "Головна",
|
||||
"navbar.signup": "Зареєструватися",
|
||||
"navbar.links.shares": "Мої завантаження",
|
||||
"navbar.links.reverse": "Зворотні завантаження",
|
||||
"navbar.avatar.account": "Мій аккаунт",
|
||||
"navbar.avatar.admin": "Адміністрування",
|
||||
"navbar.avatar.signout": "Вийти",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "Платформа для обміну файлами із <h>власного хостингу</h>.",
|
||||
"home.description":
|
||||
"Ви дійсно бажаєте надати свої особисті файли У руки третіх осіб, таких як WeTransfer?",
|
||||
"home.bullet.a.name": "На власному сервері",
|
||||
"home.bullet.a.description": "Pingvin Share працює на вашій машині.",
|
||||
"home.bullet.b.name": "Конфіденційність",
|
||||
"home.bullet.b.description":
|
||||
"Ваші файли - це ваші файли і ніколи не повинні потрапляти до рук третіх осіб.",
|
||||
"home.bullet.c.name": "Без дратівливого обмеження розміру файлу",
|
||||
"home.bullet.c.description":
|
||||
"Завантажуйте файли з будь-яким розміром. Тільки ваш жорсткий диск буде межею.",
|
||||
"home.button.start": "Почнемо",
|
||||
"home.button.source": "Вихідний код",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "З поверненням",
|
||||
"signin.description": "У вас ще немає облікового запису?",
|
||||
"signin.button.signup": "Зареєструватися",
|
||||
"signin.input.email-or-username": "Email або логін",
|
||||
"signin.input.email-or-username.placeholder": "Ел. пошта або логін",
|
||||
"signin.input.password": "Пароль",
|
||||
"signin.input.password.placeholder": "Ваш пароль",
|
||||
"signin.button.submit": "Вхід",
|
||||
"signIn.notify.totp-required.title": "Потрібна двофакторна аутентифікація",
|
||||
"signIn.notify.totp-required.description":
|
||||
"Будь ласка, введіть код Вашої 2-х факторної аутентифікації",
|
||||
"signIn.oauth.or": "АБО",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
"signIn.oauth.discord": "Discord",
|
||||
"signIn.oauth.oidc": "OpenID",
|
||||
// END /auth/signin
|
||||
// /auth/signup
|
||||
"signup.title": "Створити акаунт",
|
||||
"signup.description": "Уже є обліковий запис?",
|
||||
"signup.button.signin": "Вхід",
|
||||
"signup.input.username": "Логін",
|
||||
"signup.input.username.placeholder": "Ваш логін (ім'я користувача)",
|
||||
"signup.input.email": "Електронна пошта",
|
||||
"signup.input.email.placeholder": "Адреса ел. пошти",
|
||||
"signup.button.submit": "Давайте почнемо",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "Авторизація TOTP",
|
||||
"totp.button.signIn": "Увійти",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Забули пароль?",
|
||||
"resetPassword.description": "Введіть ваш email для відновлення пароля.",
|
||||
"resetPassword.notify.success":
|
||||
"Відправлено повідомлення з посиланням для скидання пароля, якщо email існує.",
|
||||
"resetPassword.button.back": "Повернутися на сторінку входу",
|
||||
"resetPassword.text.resetPassword": "Скинути пароль",
|
||||
"resetPassword.text.enterNewPassword": "Введіть новий пароль",
|
||||
"resetPassword.input.password": "Новий пароль",
|
||||
"resetPassword.notify.passwordReset": "Ваш пароль було успішно скинуто!",
|
||||
// /account
|
||||
"account.title": "Мій акаунт",
|
||||
"account.card.info.title": "Інформація про акаунт",
|
||||
"account.card.info.username": "Логін",
|
||||
"account.card.info.email": "Електронна пошта",
|
||||
"account.notify.info.success":
|
||||
"Налаштування облікового запису успішно оновлено",
|
||||
"account.card.password.title": "Пароль",
|
||||
"account.card.password.old": "Старий пароль",
|
||||
"account.card.password.new": "Новий пароль",
|
||||
"account.card.password.noPasswordSet":
|
||||
"У вас не встановлено пароль. Якщо ви хочете увійти за допомогою електронної пошти та пароля, вам необхідно встановити пароль.",
|
||||
"account.notify.password.success": "Пароль успішно змінено",
|
||||
"account.card.oauth.title": "Авторизація через соціальні мережі",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "Підключити",
|
||||
"account.card.oauth.unlink": "Відключити",
|
||||
"account.card.oauth.unlinked": "Відключено",
|
||||
"account.modal.unlink.title": "Відключити зв'язок з обліковим записом",
|
||||
"account.modal.unlink.description":
|
||||
"Відключення зв'язку з обліковим записом соціальних акаунтів може призвести до втрати вашого облікового запису, якщо ви не пам'ятаєте своє ім'я користувача і пароль.",
|
||||
"account.notify.oauth.unlinked.success": "Відключення пройшло успішно",
|
||||
"account.card.security.title": "Безпека",
|
||||
"account.card.security.totp.enable.description":
|
||||
"Введіть ваш поточний пароль для початку увімкнення TOTP",
|
||||
"account.card.security.totp.disable.description":
|
||||
"Введіть ваш поточний пароль, щоб відключити TOTP",
|
||||
"account.card.security.totp.button.start": "Почати",
|
||||
"account.modal.totp.title": "Увімкнути TOTP",
|
||||
"account.modal.totp.step1": "Крок 1: Додайте свій аутентифікатор",
|
||||
"account.modal.totp.step2": "Крок 2: Перевірка коду",
|
||||
"account.modal.totp.enterManually": "Ввести вручну",
|
||||
"account.modal.totp.code": "Код",
|
||||
"common.button.clickToCopy": "Натисніть, щоб скопіювати",
|
||||
"account.modal.totp.verify": "Підтвердити",
|
||||
"account.notify.totp.disable": "TOTP успішно відключено",
|
||||
"account.notify.totp.enable": "TOTP успішно увімкнено",
|
||||
"account.card.language.title": "Мова",
|
||||
"account.card.language.description":
|
||||
"Проєкт перекладено спільнотою. Деякі мови можуть бути неповними.",
|
||||
"account.card.color.title": "Колірна схема",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Темна",
|
||||
"account.theme.light": "Світла",
|
||||
"account.theme.system": "Системна",
|
||||
"account.button.delete": "Видалити акаунт",
|
||||
"account.modal.delete.title": "Видалити акаунт",
|
||||
"account.modal.delete.description":
|
||||
"Ви дійсно хочете видалити свій обліковий запис, включно з усіма вашими завантаженнями?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Мої завантаження",
|
||||
"account.shares.title.empty": "Тут порожньо 👀",
|
||||
"account.shares.description.empty": "У вас немає завантажень.",
|
||||
"account.shares.button.create": "Створити одну",
|
||||
"account.shares.info.title": "Відомості",
|
||||
"account.shares.table.id": "ID",
|
||||
"account.shares.table.name": "Назва",
|
||||
"account.shares.table.description": "Опис",
|
||||
"account.shares.table.visitors": "Відвідувачів",
|
||||
"account.shares.table.expiresAt": "Дійсно до",
|
||||
"account.shares.table.createdAt": "Створено",
|
||||
"account.shares.table.size": "Розмір",
|
||||
"account.shares.modal.share-informations": "Відомості",
|
||||
"account.shares.modal.share-link": "Поділитися посиланням",
|
||||
"account.shares.modal.delete.title": "Видалити завантаження {share}",
|
||||
"account.shares.modal.delete.description":
|
||||
"Ви дійсно хочете видалити це завантаження?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Зворотні завантаження",
|
||||
"account.reverseShares.description":
|
||||
"Зворотне завантаження дає змогу генерувати унікальний URL, що дозволяє зовнішнім користувачам завантажувати файли.",
|
||||
"account.reverseShares.title.empty": "Тут порожньо 👀",
|
||||
"account.reverseShares.description.empty":
|
||||
"У вас поки що немає зворотних завантажень.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Створити зворотне посилання на файл",
|
||||
"account.reverseShares.modal.expiration.label": "Закінчується",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "Хвилина",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "Хвилин(и)",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "Година",
|
||||
"account.reverseShares.modal.expiration.hour-plural": "Годин",
|
||||
"account.reverseShares.modal.expiration.day-singular": "День",
|
||||
"account.reverseShares.modal.expiration.day-plural": "Днів",
|
||||
"account.reverseShares.modal.expiration.week-singular": "Тиждень",
|
||||
"account.reverseShares.modal.expiration.week-plural": "Тиждень",
|
||||
"account.reverseShares.modal.expiration.month-singular": "Місяць",
|
||||
"account.reverseShares.modal.expiration.month-plural": "Місяця(-ів)",
|
||||
"account.reverseShares.modal.expiration.year-singular": "Рік",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Роки (роки)",
|
||||
"account.reverseShares.modal.max-size.label": "Макс. розмір завантаження",
|
||||
"account.reverseShares.modal.send-email":
|
||||
"Надіслати повідомлення електронною поштою",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"Надсилати повідомлення електронною поштою, коли завантаження створюється за допомогою цього зворотного посилання.",
|
||||
"account.reverseShares.modal.max-use.label": "Максимум використань",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"Максимальна кількість разів, коли URL може бути використаний для створення завантаження.",
|
||||
"account.reverseShare.never-expires":
|
||||
"Це зворотне завантаження ніколи не застаріє.",
|
||||
"account.reverseShare.expires-on":
|
||||
"Це зворотне завантаження застаріє {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Немає створених завантажень",
|
||||
"account.reverseShares.table.count.singular": "завантаження",
|
||||
"account.reverseShares.table.count.plural": "завантаження",
|
||||
"account.reverseShares.table.shares": "Завантаження",
|
||||
"account.reverseShares.table.remaining": "Залишилося використань",
|
||||
"account.reverseShares.table.max-size": "Макс. розмір завантаження",
|
||||
"account.reverseShares.table.expires": "Дійсно до",
|
||||
"account.reverseShares.modal.reverse-share-link":
|
||||
"Посилання зворотного завантаження",
|
||||
"account.reverseShares.modal.delete.title": "Видалити зворотне завантаження",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"Ви дійсно хочете видалити це зворотне завантаження? Якщо ви це зробите, то всі пов'язані зворотні завантаження будуть також видалені.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Адміністрування",
|
||||
"admin.button.users": "Управління користувачами",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "Конфігурація",
|
||||
"admin.version": "Версія",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "Управління користувачами",
|
||||
"admin.users.table.username": "Логін",
|
||||
"admin.users.table.email": "Електронна пошта",
|
||||
"admin.users.table.admin": "Адміністратор",
|
||||
"admin.users.edit.update.title": "Оновити користувача {username}",
|
||||
"admin.users.edit.update.admin-privileges": "Права адміністратора",
|
||||
"admin.users.edit.update.change-password.title": "Змінити пароль",
|
||||
"admin.users.edit.update.change-password.field": "Новий пароль",
|
||||
"admin.users.edit.update.change-password.button": "Зберегти новий пароль",
|
||||
"admin.users.edit.update.notify.password.success": "Пароль успішно змінено",
|
||||
"admin.users.edit.delete.title": "Видалити користувача {username}",
|
||||
"admin.users.edit.delete.description":
|
||||
"Ви дійсно хочете видалити цього користувача і всі його завантаження?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Створити користувача",
|
||||
"admin.users.modal.create.username": "Логін",
|
||||
"admin.users.modal.create.email": "Електронна пошта",
|
||||
"admin.users.modal.create.password": "Пароль",
|
||||
"admin.users.modal.create.manual-password": "Встановити пароль вручну",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"Якщо прапорець не встановлено, користувач отримає лист із посиланням для встановлення пароля.",
|
||||
"admin.users.modal.create.admin": "Права адміністратора",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"Якщо зазначено, користувач матиме доступ до панелі адміністратора.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Завантажити",
|
||||
"upload.notify.generic-error":
|
||||
"Сталася помилка під час завершення вашого завантаження.",
|
||||
"upload.notify.count-failed":
|
||||
"Не вдалося завантажити файли {count}. Повтор спроби.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Завантажити файли",
|
||||
"upload.dropzone.description":
|
||||
"Перетягніть сюди файли для початку завантаження. Ми можемо приймати тільки файли, які менше {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big":
|
||||
"Ваші файли перевищують максимальний розмір у {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Назва",
|
||||
"upload.filelist.size": "Розмір",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Завантажити",
|
||||
"upload.modal.link.error.invalid":
|
||||
"Ім'я користувача повинно складатися тільки з букв, цифр, підкреслень і дефісів",
|
||||
"upload.modal.link.error.taken": "Це посилання вже використовується",
|
||||
"upload.modal.not-signed-in": "Ви не авторизовані",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"Ви не зможете видалити свої файли вручну і переглянути кількість відвідувачів.",
|
||||
"upload.modal.expires.never": "ніколи",
|
||||
"upload.modal.expires.never-long": "Ніколи не закінчується",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"Термін дії перевищує максимальну дату закінчення терміну дії {max}.",
|
||||
"upload.modal.link.label": "Посилання",
|
||||
"upload.modal.expires.label": "Закінчується",
|
||||
"upload.modal.expires.minute-singular": "Хвилина",
|
||||
"upload.modal.expires.minute-plural": "Хвилин(и)",
|
||||
"upload.modal.expires.hour-singular": "Година",
|
||||
"upload.modal.expires.hour-plural": "Годин",
|
||||
"upload.modal.expires.day-singular": "День",
|
||||
"upload.modal.expires.day-plural": "Днів",
|
||||
"upload.modal.expires.week-singular": "Тиждень",
|
||||
"upload.modal.expires.week-plural": "Тижнів",
|
||||
"upload.modal.expires.month-singular": "Місяць",
|
||||
"upload.modal.expires.month-plural": "Місяця(-ів)",
|
||||
"upload.modal.expires.year-singular": "Рік",
|
||||
"upload.modal.expires.year-plural": "Роки (роки)",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "Одержувачі листа",
|
||||
"upload.modal.accordion.email.placeholder": "Одержувачі e-mail",
|
||||
"upload.modal.accordion.email.invalid-email":
|
||||
"Неприпустима адреса електронної пошти",
|
||||
"upload.modal.accordion.security.title": "Параметри безпеки",
|
||||
"upload.modal.accordion.security.password.label": "Захист паролем",
|
||||
"upload.modal.accordion.security.password.placeholder": "Без пароля",
|
||||
"upload.modal.accordion.security.max-views.label": "Максимум переглядів",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Без обмеження",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Це завантаження ніколи не застаріє.",
|
||||
"upload.modal.completed.expires-on": "Це завантаження застаріє {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Готово",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Завантаження {shareId}",
|
||||
"share.description": "Подивіться, чим я поділився з вами!",
|
||||
"share.error.visitor-limit-exceeded.title": "Перевищено ліміт відвідувачів",
|
||||
"share.error.visitor-limit-exceeded.description":
|
||||
"Перевищено ліміт відвідувачів.",
|
||||
"share.error.removed.title": "Завантаження видалено",
|
||||
"share.error.not-found.title": "Завантаження не знайдено",
|
||||
"share.error.not-found.description": "Сторінка, яку ви шукаєте, не існує.",
|
||||
"share.modal.password.title": "Потрібен пароль",
|
||||
"share.modal.password.description":
|
||||
"Для доступу до цього ресурсу введіть пароль для загального доступу.",
|
||||
"share.modal.password": "Пароль",
|
||||
"share.modal.error.invalid-password": "Невірний пароль",
|
||||
"share.button.download-all": "Завантажити все",
|
||||
"share.notify.download-all-preparing":
|
||||
"Завантаження готується. Повторіть спробу через кілька хвилин.",
|
||||
"share.modal.file-link": "Посилання на файл",
|
||||
"share.table.name": "Назва",
|
||||
"share.table.size": "Розмір",
|
||||
"share.modal.file-preview.error.not-supported.title":
|
||||
"Попередній перегляд не підтримується",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"Попередній перегляд для цього типу файлів не підтримується. Будь ласка, завантажте файл, щоб переглянути його.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Редагувати {shareId}",
|
||||
"share.edit.append-upload": "Додати файл",
|
||||
"share.edit.notify.generic-error":
|
||||
"Сталася помилка під час завершення вашого завантаження.",
|
||||
"share.edit.notify.save-success": "Посилання на ресурс успішно оновлено",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "Конфігурація",
|
||||
"admin.config.category.general": "Загальне",
|
||||
"admin.config.category.share": "Завантаження",
|
||||
"admin.config.category.email": "Електронна пошта",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "Авторизація через соціальні мережі",
|
||||
"admin.config.general.app-name": "Назва програми",
|
||||
"admin.config.general.app-name.description": "Видима назва додатка",
|
||||
"admin.config.general.app-url": "URL-адреса програми",
|
||||
"admin.config.general.app-url.description":
|
||||
"Адреса, на якій доступний Pingvin Share",
|
||||
"admin.config.general.show-home-page": "Показувати домашню сторінку",
|
||||
"admin.config.general.show-home-page.description":
|
||||
"Показувати домашню сторінку чи ні",
|
||||
"admin.config.general.logo": "Логотип",
|
||||
"admin.config.general.logo.description":
|
||||
"Змініть свій логотип, завантаживши нове зображення. Зображення має бути PNG і повинно мати формат 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Виберіть зображення",
|
||||
"admin.config.email.enable-share-email-recipients":
|
||||
"Увімкнути обмін з одержувачами електронної пошти",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"Чи дозволити надсилання листів одержувачам. Увімкніть, тільки якщо ви ввімкнули SMTP.",
|
||||
"admin.config.email.share-recipients-subject":
|
||||
"Заголовок листа (завантаження)",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"Тема листа, який надсилається одержувачам акції.",
|
||||
"admin.config.email.share-recipients-message":
|
||||
"Повідомлення листа завантаження",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"Повідомлення, яке надсилається одержувачам публікації. Доступні змінні:\n {creator} - Ім'я користувача творця завантаження\n {shareUrl} - URL завантаження\n {desc} - Опис завантаження\n {expires} - Дата закінчення завантаження\n Змінні будуть замінені на фактичне значення.",
|
||||
"admin.config.email.reverse-share-subject":
|
||||
"Заголовок листа (зворотне завантаження)",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"Тема листа, який надсилається, коли хтось створив завантаження з вашим зворотним посиланням.",
|
||||
"admin.config.email.reverse-share-message":
|
||||
"Повідомлення листа зворотного завантаження",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"Повідомлення, яке надсилається, коли хтось створив завантаження з вашим зворотним посиланням. {shareUrl} буде замінено ім'ям творця та URL-адресою загального доступу.",
|
||||
"admin.config.email.reset-password-subject": "Тема скидання пароля",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"Тема листа, який надсилається, коли користувач запитує скидання пароля.",
|
||||
"admin.config.email.reset-password-message":
|
||||
"Повідомлення про скидання пароля",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"Повідомлення, яке надсилається при запиті скидання пароля. {url} буде замінено посиланням.",
|
||||
"admin.config.email.invite-subject": "Тема запрошення",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"Тема листа, який надсилається, коли адміністратор запрошує користувача.",
|
||||
"admin.config.email.invite-message": "Повідомлення із запрошенням",
|
||||
"admin.config.email.invite-message.description":
|
||||
"Повідомлення запрошення. {url} буде замінено посиланням запрошення, а {password} паролем.",
|
||||
"admin.config.share.allow-registration": "Дозволити реєстрацію",
|
||||
"admin.config.share.allow-registration.description":
|
||||
"Чи дозволена реєстрація",
|
||||
"admin.config.share.allow-unauthenticated-shares":
|
||||
"Дозволити неавторизовані завантаження",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"Чи можуть неавторизовані користувачі створювати завантаження",
|
||||
"admin.config.share.max-expiration": "Максимальний термін дії",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"Максимальний термін дії загального доступу в годинах. Встановіть значення 0, щоб дозволити необмежений термін дії.",
|
||||
"admin.config.share.max-size": "Максимальний розмір",
|
||||
"admin.config.share.max-size.description":
|
||||
"Максимальний розмір файлу в байтах",
|
||||
"admin.config.share.zip-compression-level": "Рівень стиснення Zip",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"Регулювання рівня балансу між розміром файлу і швидкістю стиснення. Допустимі значення від 0 до 9, з 0 без стиснення, а 9 - максимальне стиснення. ",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "Увімкнено",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"Чи увімкнено SMTP. Встановіть значення true тільки якщо ви ввели хост, порт, email, користувач і пароль вашого SMTP-сервера.",
|
||||
"admin.config.smtp.host": "Хост",
|
||||
"admin.config.smtp.host.description": "Сервер SMTP-сервера",
|
||||
"admin.config.smtp.port": "Порт",
|
||||
"admin.config.smtp.port.description": "Порт SMTP сервера",
|
||||
"admin.config.smtp.email": "Електронна пошта",
|
||||
"admin.config.smtp.email.description":
|
||||
"Адреса електронної пошти, від якої надсилаються листи",
|
||||
"admin.config.smtp.username": "Логін",
|
||||
"admin.config.smtp.username.description": "Ім'я користувача SMTP-сервера",
|
||||
"admin.config.smtp.password": "Пароль",
|
||||
"admin.config.smtp.password.description": "Пароль SMTP-сервера",
|
||||
"admin.config.smtp.button.test": "Відправити тестовий лист",
|
||||
"admin.config.oauth.allow-registration": "Дозволити реєстрацію",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"Дозволити користувачам реєструватися, використовуючи облікові записи соціальних мереж",
|
||||
"admin.config.oauth.ignore-totp": "Ігнорувати TOTP",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"Ігнорувати TOTP при використанні соціальної авторизації",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description":
|
||||
"Чи ввімкнено логін на GitHub",
|
||||
"admin.config.oauth.github-client-id": "ID клієнта GitHub",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"ID клієнта в додатку GitHub OAuth",
|
||||
"admin.config.oauth.github-client-secret": "Секретний ключ клієнта GitHub",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"Секретний ключ клієнта в додатку GitHub OAuth",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description":
|
||||
"Чи увімкнено логін Google на GitHub",
|
||||
"admin.config.oauth.google-client-id": "ID клієнта Google",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"ID клієнта в додатку Google OAuth",
|
||||
"admin.config.oauth.google-client-secret": "Секретний ключ клієнта Google",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Секретний ключ клієнта в додатку Google OAuth",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description":
|
||||
"Чи ввімкнено логін Microsoft",
|
||||
"admin.config.oauth.microsoft-tenant": "Корпоративний акаунт Microsoft",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Ідентифікатор орендаря додатка Microsoft OAuth\ncommon: Користувачі з особистим обліковим записом Microsoft і робочим або навчальним обліковим записом від Microsoft Entra ID можуть увійти в додаток. organizations: Тільки користувачі з робочим або навчальним обліковим записом від Microsoft Entra ID можуть увійти в застосунок.\nconsumers: Тільки користувачі з особистим обліковим записом Microsoft можуть увійти в застосунок.ім'я домену орендаря Microsoft Entra або ідентифікатор орендаря у форматі GUID: Тільки користувачі з певного орендаря Microsoft Entra (учасники каталогу з робочим або навчальним обліковим записом або гості каталогу з особистим обліковим записом Microsoft) можуть увійти в застосунок.",
|
||||
"admin.config.oauth.microsoft-client-id": "Ідентифікатор клієнта Microsoft",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"ID клієнта в додатку Microsoft OAuth",
|
||||
"admin.config.oauth.microsoft-client-secret":
|
||||
"Секретний ключ клієнта Microsoft",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Секретний ключ клієнта в додатку Microsoft OAuth",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description":
|
||||
"Чи увімкнено логін Discord",
|
||||
"admin.config.oauth.discord-limited-guild": "ID обмеженого сервера Discord",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Обмеження входу для користувачів певного сервера. Залиште порожнім, щоб відключити.",
|
||||
"admin.config.oauth.discord-client-id": "ID клієнта Discord",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"ID клієнта в додатку Discord OAuth",
|
||||
"admin.config.oauth.discord-client-secret": "Секретний ключ клієнта Discord",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Секретний ключ клієнта в додатку Discord OAuth",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Чи ввімкнено логін OpenID Connect",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"URI Discovery URI додатка OpenID Connect OAuth",
|
||||
"admin.config.oauth.oidc-username-claim":
|
||||
"Заява на ім'я користувача OpenID Connect",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Заява про ім'я користувача в токені OpenID Connect ID. Залиште порожнім, якщо не знаєте, що це за конфіг.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Клієнтський ідентифікатор додатка OpenID Connect OAuth",
|
||||
"admin.config.oauth.oidc-client-secret": "Секрет клієнта OpenID Connect",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Клієнтський секрет програми OpenID Connect OAuth",
|
||||
// 404
|
||||
"404.description": "Бляха, цієї строрінки не існує.",
|
||||
"404.button.home": "Поверни мене додому",
|
||||
// error
|
||||
"error.title": "Помилка",
|
||||
"error.description": "Щось пішло не так!",
|
||||
"error.button.back": "Назад",
|
||||
"error.msg.default": "Щось пішло не так.",
|
||||
"error.msg.access_denied":
|
||||
"Ви скасували процес аутентифікації, будь ласка, спробуйте ще раз.",
|
||||
"error.msg.expired_token":
|
||||
"Процес аутентифікації зайняв занадто багато часу, будь ласка, спробуйте ще раз.",
|
||||
"error.msg.invalid_token": "Внутрішня помилка",
|
||||
"error.msg.no_user":
|
||||
"Користувач, пов'язаний з обліковим записом {0}, не існує.",
|
||||
"error.msg.no_email":
|
||||
"Не вдається отримати адресу електронної пошти від облікового запису {0}.",
|
||||
"error.msg.already_linked":
|
||||
"Цей обліковий запис {0} уже прив'язано до іншого акаунта.",
|
||||
"error.msg.not_linked":
|
||||
"Цей обліковий запис {0} ще не прив'язаний до жодного акаунту.",
|
||||
"error.msg.unverified_account":
|
||||
"Цей обліковий запис {0} не підтверджено, повторіть спробу після підтвердження.",
|
||||
"error.msg.discord_guild_permission_denied": "У вас немає дозволу на вхід.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Не вдається отримати інфу про користувача з цього {0} облікового запису.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Зберегти",
|
||||
"common.button.create": "Створити",
|
||||
"common.button.submit": "Відправити",
|
||||
"common.button.delete": "Видалити",
|
||||
"common.button.cancel": "Скасувати",
|
||||
"common.button.confirm": "Підтвердити",
|
||||
"common.button.disable": "Відключити",
|
||||
"common.button.share": "Поділитися",
|
||||
"common.button.generate": "Згенерувати",
|
||||
"common.button.done": "Готово",
|
||||
"common.text.link": "Посилання",
|
||||
"common.text.navigate-to-link": "Перейти до посилання",
|
||||
"common.text.or": "або",
|
||||
"common.button.go-back": "Назад",
|
||||
"common.button.go-home": "Перейти додому",
|
||||
"common.notify.copied": "Ваше посилання скопійовано в буфер обміну",
|
||||
"common.success": "Успішно",
|
||||
"common.error": "Помилка",
|
||||
"common.error.unknown": "Сталася невідома помилка",
|
||||
"common.error.invalid-email": "Неприпустима адреса електронної пошти",
|
||||
"common.error.too-short": "Повинно бути не менше {length} символів",
|
||||
"common.error.too-long": "Повинно бути не більше {length} символів",
|
||||
"common.error.exact-length": "Повинно бути рівно {length} символів",
|
||||
"common.error.invalid-number": "Повинно бути числом",
|
||||
"common.error.field-required": "Поле обов'язкове для заповнення",
|
||||
};
|
||||
@@ -18,7 +18,7 @@ export default {
|
||||
"home.bullet.b.name": "完全隐私",
|
||||
"home.bullet.b.description": "你的文件只属于你!不要将它放到第三方文件平台",
|
||||
"home.bullet.c.name": "完全无限",
|
||||
"home.bullet.c.description": "想上传多大都可以,更需要担心的是你的存储卷容量",
|
||||
"home.bullet.c.description": "想上传多大都可以,硬盘容量的大小是唯一的限制",
|
||||
"home.button.start": "开始使用",
|
||||
"home.button.source": "源代码",
|
||||
// END /
|
||||
@@ -33,9 +33,9 @@ export default {
|
||||
"signin.button.submit": "登录",
|
||||
"signIn.notify.totp-required.title": "请继续两步验证",
|
||||
"signIn.notify.totp-required.description": "请输入一次性验证码",
|
||||
"signIn.oauth.or": "OR",
|
||||
"signIn.oauth.or": "或",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.google": "谷歌",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
"signIn.oauth.discord": "Discord",
|
||||
"signIn.oauth.oidc": "OpenID",
|
||||
@@ -51,13 +51,14 @@ export default {
|
||||
"signup.button.submit": "注册",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "TOTP Authentication",
|
||||
"totp.button.signIn": "Sign in",
|
||||
"totp.title": "两步验证",
|
||||
"totp.button.signIn": "登录",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "忘记密码?",
|
||||
"resetPassword.description": "请输入电子邮件接受重置密码邮件",
|
||||
"resetPassword.notify.success": "一封包含密码重置地址的邮件已发送到你的邮箱中",
|
||||
"resetPassword.description": "请输入电子邮箱地址来接收重置密码邮件",
|
||||
"resetPassword.notify.success":
|
||||
"如果该电子邮箱存在,则已发送一条包含重置密码链接的邮件。",
|
||||
"resetPassword.button.back": "返回登录页面",
|
||||
"resetPassword.text.resetPassword": "重置密码",
|
||||
"resetPassword.text.enterNewPassword": "请输入新密码",
|
||||
@@ -72,35 +73,39 @@ export default {
|
||||
"account.card.password.title": "密码",
|
||||
"account.card.password.old": "旧密码",
|
||||
"account.card.password.new": "新密码",
|
||||
"account.card.password.noPasswordSet": "You don't have a password set. If you want to sign in with email and password you need to set a password.",
|
||||
"account.card.password.noPasswordSet":
|
||||
"您还未设置密码。如果您想通过邮箱和密码登录,请先设置密码。",
|
||||
"account.notify.password.success": "密码更改成功!",
|
||||
"account.card.oauth.title": "Social login",
|
||||
"account.card.oauth.title": "社交账号登录",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.google": "谷歌",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "Link",
|
||||
"account.card.oauth.unlink": "Unlink",
|
||||
"account.card.oauth.unlinked": "Unlinked",
|
||||
"account.modal.unlink.title": "Unlink account",
|
||||
"account.modal.unlink.description": "Unlinking your social accounts may cause you to lose your account if you don't remember your username and password.",
|
||||
"account.notify.oauth.unlinked.success": "Unlinked successfully",
|
||||
"account.card.oauth.link": "关联",
|
||||
"account.card.oauth.unlink": "解除关联",
|
||||
"account.card.oauth.unlinked": "已解除关联",
|
||||
"account.modal.unlink.title": "解除关联",
|
||||
"account.modal.unlink.description":
|
||||
"如果您不记得您的用户名和密码,解除和社交账号的关联可能会导致丢失账户。",
|
||||
"account.notify.oauth.unlinked.success": "解除关联成功",
|
||||
"account.card.security.title": "安全",
|
||||
"account.card.security.totp.enable.description": "请输入当前密码开启两步验证",
|
||||
"account.card.security.totp.disable.description": "请输入当前密码关闭两步验证",
|
||||
"account.card.security.totp.disable.description":
|
||||
"请输入当前密码关闭两步验证",
|
||||
"account.card.security.totp.button.start": "开启",
|
||||
"account.modal.totp.title": "开启两步验证",
|
||||
"account.modal.totp.step1": "第一步:添加验证器 Authenticator",
|
||||
"account.modal.totp.step2": "第二步:输入一次性验证码",
|
||||
"account.modal.totp.enterManually": "手动输入",
|
||||
"account.modal.totp.code": "验证码",
|
||||
"account.modal.totp.clickToCopy": "点击复制",
|
||||
"common.button.clickToCopy": "点击复制",
|
||||
"account.modal.totp.verify": "确定",
|
||||
"account.notify.totp.disable": "成功关闭两步验证!",
|
||||
"account.notify.totp.enable": "成功开启两步验证!",
|
||||
"account.card.language.title": "语言",
|
||||
"account.card.language.description": "The project is translated by the community. Some languages might be incomplete.",
|
||||
"account.card.language.description":
|
||||
"本项目由社区成员翻译,部分语言可能暂未提供翻译。",
|
||||
"account.card.color.title": "颜色外观",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "暗黑模式",
|
||||
@@ -108,7 +113,8 @@ export default {
|
||||
"account.theme.system": "跟随系统",
|
||||
"account.button.delete": "删除账户",
|
||||
"account.modal.delete.title": "删除账户",
|
||||
"account.modal.delete.description": "你真的想删除你的账户,并删除所有的共享吗?",
|
||||
"account.modal.delete.description":
|
||||
"你真的想删除你的账户,并删除所有的共享吗?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "我的共享",
|
||||
@@ -130,11 +136,12 @@ export default {
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "预留共享",
|
||||
"account.reverseShares.description": "预留共享允许你创建一个特定共享链接,以便外部用户以此创建共享",
|
||||
"account.reverseShares.description":
|
||||
"预留共享允许你创建一个特定共享链接,以便外部用户以此链接创建共享",
|
||||
"account.reverseShares.title.empty": "这里空空如也 👀",
|
||||
"account.reverseShares.description.empty": "你没有创建任何预留共享",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Create reverse share",
|
||||
"account.reverseShares.modal.title": "创建反向共享",
|
||||
"account.reverseShares.modal.expiration.label": "过期时间",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "1 分钟",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "分钟",
|
||||
@@ -150,9 +157,11 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-plural": "年",
|
||||
"account.reverseShares.modal.max-size.label": "共享文件上限",
|
||||
"account.reverseShares.modal.send-email": "发送邮件提醒",
|
||||
"account.reverseShares.modal.send-email.description": "当这个预留共享链接被用于共享时,发送邮件提醒",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"当这个预留共享链接被用于共享时,发送邮件提醒",
|
||||
"account.reverseShares.modal.max-use.label": "最大使用次数",
|
||||
"account.reverseShares.modal.max-use.description": "这个预留共享链接可被用于创建共享的最大使用次数",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"这个预留共享链接可被用于创建共享的最大使用次数",
|
||||
"account.reverseShare.never-expires": "这个预留共享永不过期",
|
||||
"account.reverseShare.expires-on": "这个预留共享将过期于 {expiration}",
|
||||
"account.reverseShares.table.no-shares": "当前没有创建任何共享",
|
||||
@@ -164,11 +173,13 @@ export default {
|
||||
"account.reverseShares.table.expires": "过期时间",
|
||||
"account.reverseShares.modal.reverse-share-link": "预留共享链接",
|
||||
"account.reverseShares.modal.delete.title": "删除预留共享链接",
|
||||
"account.reverseShares.modal.delete.description": "你真的想删除此预留共享链接吗?链接下所有关联的共享都将被删除",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"你真的想删除此预留共享链接吗?链接下所有关联的共享都将被删除",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "管理",
|
||||
"admin.button.users": "用户管理",
|
||||
"admin.button.shares": "共享管理",
|
||||
"admin.button.config": "配置管理",
|
||||
"admin.version": "版本",
|
||||
// END /admin
|
||||
@@ -184,24 +195,37 @@ export default {
|
||||
"admin.users.edit.update.change-password.button": "保存新密码",
|
||||
"admin.users.edit.update.notify.password.success": "密码更新成功!",
|
||||
"admin.users.edit.delete.title": "删除用户 {username}",
|
||||
"admin.users.edit.delete.description": "你真的想删除这个账户,并删除该用户所有的共享吗?",
|
||||
"admin.users.edit.delete.description":
|
||||
"你真的想删除这个账户,并删除该用户所有的共享吗?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "创建用户",
|
||||
"admin.users.modal.create.username": "用户名",
|
||||
"admin.users.modal.create.email": "电子邮件",
|
||||
"admin.users.modal.create.password": "密码",
|
||||
"admin.users.modal.create.manual-password": "手动设置密码",
|
||||
"admin.users.modal.create.manual-password.description": "如果不勾选,用户将会收到一封电子邮件来设置他们的密码",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"如果不勾选,用户将会收到一封电子邮件来设置他们的密码",
|
||||
"admin.users.modal.create.admin": "管理员",
|
||||
"admin.users.modal.create.admin.description": "如果勾选,用户将能访问管理员面板",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"如果勾选,用户将能访问管理员面板",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "共享管理",
|
||||
"admin.shares.table.id": "共享 ID",
|
||||
"admin.shares.table.username": "创建者",
|
||||
"admin.shares.table.visitors": "访问者",
|
||||
"admin.shares.table.expires": "过期时间",
|
||||
"admin.shares.edit.delete.title": "删除共享 {id}",
|
||||
"admin.shares.edit.delete.description": "你真的要删除这个共享吗?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "上传",
|
||||
"upload.notify.generic-error": "创建共享的过程中发生了错误",
|
||||
"upload.notify.count-failed": "{count} 文件上传失败,请重试",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "上传文件",
|
||||
"upload.dropzone.description": "拖放至此以上传文件,文件大小不能超过上限 {maxSize}",
|
||||
"upload.dropzone.description":
|
||||
"拖放至此以上传文件,文件大小不能超过上限 {maxSize}",
|
||||
"upload.dropzone.notify.file-too-big": "你的文件超过了最大上传限制 {maxSize}",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "文件名",
|
||||
@@ -211,10 +235,12 @@ export default {
|
||||
"upload.modal.link.error.invalid": "只能包括字母,数字,下划线(_),和横线(-)",
|
||||
"upload.modal.link.error.taken": "这个链接已经存在了",
|
||||
"upload.modal.not-signed-in": "当前没有登录",
|
||||
"upload.modal.not-signed-in-description": "你将不能删除你的共享或查看访问次数",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"你将不能删除你的共享或查看访问次数",
|
||||
"upload.modal.expires.never": "永不",
|
||||
"upload.modal.expires.never-long": "永不过期",
|
||||
"upload.modal.expires.error.too-long": "Expiration exceeds maximum expiration date of {max}.",
|
||||
"upload.modal.expires.error.too-long":
|
||||
"您设置的过期时间超出了系统上限 {max}。",
|
||||
"upload.modal.link.label": "共享链接",
|
||||
"upload.modal.expires.label": "过期时间",
|
||||
"upload.modal.expires.minute-singular": "1 分钟",
|
||||
@@ -229,8 +255,10 @@ export default {
|
||||
"upload.modal.expires.month-plural": "月",
|
||||
"upload.modal.expires.year-singular": "1 年",
|
||||
"upload.modal.expires.year-plural": "年",
|
||||
"upload.modal.accordion.description.title": "描述",
|
||||
"upload.modal.accordion.description.placeholder": "共享文件备注信息",
|
||||
"upload.modal.accordion.name-and-description.title": "名称与描述",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "名称",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"写给接收者的备注",
|
||||
"upload.modal.accordion.email.title": "邮件提醒",
|
||||
"upload.modal.accordion.email.placeholder": "收件人电子邮件地址",
|
||||
"upload.modal.accordion.email.invalid-email": "邮件地址不可用",
|
||||
@@ -262,7 +290,8 @@ export default {
|
||||
"share.table.name": "文件名",
|
||||
"share.table.size": "文件大小",
|
||||
"share.modal.file-preview.error.not-supported.title": "该文件类型不支持预览",
|
||||
"share.modal.file-preview.error.not-supported.description": "该文件类型不支持预览,请下载后打开查看",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"不支持此文件类型的预览,请下载文件查看。",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "编辑 {shareId}",
|
||||
@@ -276,46 +305,65 @@ export default {
|
||||
"admin.config.category.share": "共享",
|
||||
"admin.config.category.email": "电子邮件",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "Social Login",
|
||||
"admin.config.category.oauth": "社交账号登录",
|
||||
"admin.config.general.app-name": "App 名称",
|
||||
"admin.config.general.app-name.description": "这个 App 的名称",
|
||||
"admin.config.general.app-name.description": "自定义 App 的名称",
|
||||
"admin.config.general.app-url": "App 的地址",
|
||||
"admin.config.general.app-url.description": "Pingvin Share 的 URL 地址",
|
||||
"admin.config.general.show-home-page": "显示首页",
|
||||
"admin.config.general.show-home-page.description": "是否显示首页",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "上传个性化 Logo,图片必须是长宽比 1:1 的 PNG 格式",
|
||||
"admin.config.general.logo.description":
|
||||
"上传你的个性化 Logo,图片必须是长宽比 1:1 的 PNG 格式",
|
||||
"admin.config.general.logo.placeholder": "选择图片",
|
||||
"admin.config.email.enable-share-email-recipients": "开启共享邮件通知",
|
||||
"admin.config.email.enable-share-email-recipients.description": "是否允许通过邮件通知发送共享信息,只有设置了 SMTP 后该选项才有效",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"是否允许通过邮件通知发送共享信息,只有设置了 SMTP 后该选项才有效",
|
||||
"admin.config.email.share-recipients-subject": "共享邮件通知主题",
|
||||
"admin.config.email.share-recipients-subject.description": "发送共享邮件通知的邮件主题",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"发送共享邮件通知的邮件主题",
|
||||
"admin.config.email.share-recipients-message": "共享邮件通知内容",
|
||||
"admin.config.email.share-recipients-message.description": "发送到接收者的共享邮件通知具体内容。可选的变量有:\n {creator} - 共享创建者\n {shareUrl} - 共享链接\n {desc} - 共享描述\n {expires} - 共享过期时间\n 这些变量会被实际的值所替代",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"发给接收者的共享邮件通知的具体内容。可选的变量有:\n {creator} - 该共享的创建者\n {shareUrl} - 该共享的链接\n {desc} - 该共享的描述\n {expires} - 该共享的过期时间\n 这些变量会被实际的值所替代",
|
||||
"admin.config.email.reverse-share-subject": "预留共享邮件通知主题",
|
||||
"admin.config.email.reverse-share-subject.description": "当有人使用了你的预留共享链接时,发送的预留共享邮件通知主题",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"当有人使用了你的预留共享链接时,发送的预留共享邮件通知主题",
|
||||
"admin.config.email.reverse-share-message": "预留共享邮件通知内容",
|
||||
"admin.config.email.reverse-share-message.description": "当有人使用了你的预留共享链接时,发送的通知内容。{shareUrl} 会被创建者的用户名和共享链接代替",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"当有人使用了你的预留共享链接时,发送的通知内容。{shareUrl} 会被创建者的用户名和共享链接代替",
|
||||
"admin.config.email.reset-password-subject": "重置密码邮件通知主题",
|
||||
"admin.config.email.reset-password-subject.description": "当用户发起重置密码时,发送的重置密码邮件通知主题",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"当用户发起重置密码时,发送的重置密码邮件通知主题",
|
||||
"admin.config.email.reset-password-message": "重置密码邮件通知内容",
|
||||
"admin.config.email.reset-password-message.description": "当用户发起重置密码时,重置密码邮件通知内容。{url} 会被重置密码链接代替",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"当用户发起重置密码时,重置密码邮件通知内容。{url} 会被重置密码链接代替",
|
||||
"admin.config.email.invite-subject": "邀请邮件通知主题",
|
||||
"admin.config.email.invite-subject.description": "当管理员邀请用户时,发送的邀请邮件通知主题",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"当管理员邀请用户时,发送的邀请邮件通知主题",
|
||||
"admin.config.email.invite-message": "邀请邮件通知内容",
|
||||
"admin.config.email.invite-message.description": "当管理员邀请用户时,发送的邀请邮件通知内容。{url} 会被邀请链接代替,{password} 会被密码代替",
|
||||
"admin.config.email.invite-message.description":
|
||||
"当管理员邀请用户时,发送的邀请邮件通知内容。{url} 会被邀请链接代替,{password} 会被密码代替",
|
||||
"admin.config.share.allow-registration": "允许注册",
|
||||
"admin.config.share.allow-registration.description": "是否允许注册",
|
||||
"admin.config.share.allow-unauthenticated-shares": "是否允许未验证的共享",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "是否允许未验证的用户创建共享",
|
||||
"admin.config.share.max-expiration": "Max expiration",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration in hours. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"是否允许未验证的用户创建共享",
|
||||
"admin.config.share.max-expiration": "最长过期时间",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"“最长过期时间”以小时为单位,如果将其设置为“0”则为永不过期。",
|
||||
"admin.config.share.max-size": "最大文件上限",
|
||||
"admin.config.share.max-size.description": "最大文件上限,单位 bytes (1GB=1024MB=1048576KB=1073741824bytes)",
|
||||
"admin.config.share.zip-compression-level": "Zip compression level",
|
||||
"admin.config.share.zip-compression-level.description": "Adjust the level to balance between file size and compression speed. Valid values range from 0 to 9, with 0 being no compression and 9 being maximum compression. ",
|
||||
"admin.config.share.max-size.description":
|
||||
"最大文件上限,单位 bytes (1GB=1024MB=1048576KB=1073741824bytes)",
|
||||
"admin.config.share.zip-compression-level": "Zip 文件压缩质量",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"调整压缩质量来平衡压缩文件的大小和压缩的速度。有效值介于 0 和 9 之间,0 为不压缩,9 为最高质量压缩。 ",
|
||||
"admin.config.share.chunk-size": "块大小",
|
||||
"admin.config.share.chunk-size.description": "根据你的互联网连接情况调整上传文件的块大小(以字节为单位),以平衡效率和可靠性。 较小的块有助于提高不稳定网络环境中的上传成功率,而较大的块则可以加快稳定网络环境中的上传速度。",
|
||||
"admin.config.share.auto-open-share-modal": "自动打开创建共享对话框",
|
||||
"admin.config.share.auto-open-share-modal.description": "每当用户选择完将要被上传的文件后,自动打开创建共享的对话框。",
|
||||
"admin.config.smtp.enabled": "启用",
|
||||
"admin.config.smtp.enabled.description": "是否开启 SMTP,仅当输入主机名、端口、发送邮箱、用户名和密码后开启",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"是否开启 SMTP,仅当输入主机名、端口、发送邮箱、用户名和密码后开启",
|
||||
"admin.config.smtp.host": "主机名",
|
||||
"admin.config.smtp.host.description": "SMTP 主机名",
|
||||
"admin.config.smtp.port": "端口",
|
||||
@@ -327,63 +375,87 @@ export default {
|
||||
"admin.config.smtp.password": "密码",
|
||||
"admin.config.smtp.password.description": "SMTP 主机密码",
|
||||
"admin.config.smtp.button.test": "发送测试邮件",
|
||||
"admin.config.oauth.allow-registration": "Allow registration",
|
||||
"admin.config.oauth.allow-registration.description": "Allow users to register via social login",
|
||||
"admin.config.oauth.ignore-totp": "Ignore TOTP",
|
||||
"admin.config.oauth.ignore-totp.description": "Whether to ignore TOTP when user using social login",
|
||||
"admin.config.oauth.allow-registration": "允许注册",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"允许用户通过登录社交账号来注册",
|
||||
"admin.config.oauth.ignore-totp": "忽略两步验证",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"用户通过社交账号登录时是否忽略两步验证",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Whether GitHub login is enabled",
|
||||
"admin.config.oauth.github-enabled.description": "是否启用 GitHub 账号登录",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "Client ID of the GitHub OAuth app",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description": "Client secret of the GitHub OAuth app",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Whether Google login is enabled",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Client ID of the Google OAuth app",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Client secret of the Google OAuth app",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"GitHub OAuth App 的 Client ID",
|
||||
"admin.config.oauth.github-client-secret": "GitHub 的 Client secret",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"GitHub OAuth App 的 Client secret",
|
||||
"admin.config.oauth.google-enabled": "谷歌",
|
||||
"admin.config.oauth.google-enabled.description": "是否启用谷歌账号登录",
|
||||
"admin.config.oauth.google-client-id": "谷歌 Client ID",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Google OAuth App 的 Client ID",
|
||||
"admin.config.oauth.google-client-secret": "谷歌 Client secret",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Google OAuth App 的 Client secret",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Whether Microsoft login is enabled",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Tenant ID of the Microsoft OAuth app\ncommon: Users with both a personal Microsoft account and a work or school account from Microsoft Entra ID can sign in to the application. organizations: Only users with work or school accounts from Microsoft Entra ID can sign in to the application.\nconsumers: Only users with a personal Microsoft account can sign in to the application.\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: Only users from a specific Microsoft Entra tenant (directory members with a work or school account or directory guests with a personal Microsoft account) can sign in to the application.",
|
||||
"admin.config.oauth.microsoft-enabled.description": "是否启用微软账号登录",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft 租户(Tenant)",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Microsoft OAuth 应用的 租户(Tenant) ID,共有四种类型,参阅https://learn.microsoft.com/zh-cn/security/zero-trust/develop/identity-supported-account-types。\ncommon(常规):个人 Microsoft 账户和 Microsoft Entra ID 工作或学校账户均可登录。\norganizations(组织):只有Microsoft Entra ID 工作或学校账户可以登录。\nconsumers(客户):只有个人 Microsoft 账户可以登录。\nMicrosoft Entra 租户的域名或 GUID 格式的租户 ID:只有来自特定 Microsoft Entra 租户的用户(具有工作或学校账户的目录成员或具有个人 Microsoft 账户的目录来宾)才能登录。",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Client ID of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Client secret of the Microsoft OAuth app",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Microsoft OAuth App 的 Client ID",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft 的 Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Microsoft OAuth App 的 Client secret",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Whether Discord login is enabled",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Client ID of the Discord OAuth app",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Client secret of the Discord OAuth app",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID",
|
||||
"admin.config.oauth.oidc-enabled.description": "Whether OpenID login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "Discovery URI of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "Client ID of the OpenID OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "Client secret of the OpenID OAuth app",
|
||||
"admin.config.oauth.discord-enabled.description": "是否启用 Discord 账号登录",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord 的 limited server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"限制特定服务器中的用户登录。留空来禁用。",
|
||||
"admin.config.oauth.discord-client-id": "Discord 的 Client ID",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Discord OAuth App 的 Client ID",
|
||||
"admin.config.oauth.discord-client-secret": "Discord 的 Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Discord OAuth App 的 Client secret",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description": "是否启用 OpenID Connect 登录",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect 的 Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"OpenID Connect OAuth App 的 Discovery URI",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect 用户名请求",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"OpenID Connect ID token 中的用户名请求。如果您不知道这项配置是什么,请留空。",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect 的 Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"OpenID Connect OAuth App 的 Client ID",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect 的 Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"OpenID Connect OAuth App 的 Client secret",
|
||||
// 404
|
||||
"404.description": "当前的页面走丢啦",
|
||||
"404.button.home": "返回主页",
|
||||
// error
|
||||
"error.title": "Error",
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Go back",
|
||||
"error.msg.default": "Something went wrong.",
|
||||
"error.msg.access_denied": "You canceled the authentication process, please try again.",
|
||||
"error.msg.expired_token": "The authentication process took too long, please try again.",
|
||||
"error.msg.no_user": "User linked to this {0} account doesn't exist.",
|
||||
"error.msg.no_email": "Can't get email address from this {0} account.",
|
||||
"error.msg.already_linked": "This {0} account is already linked to another account.",
|
||||
"error.msg.not_linked": "This {0} account haven't linked to any account yet.",
|
||||
"error.title": "出错了",
|
||||
"error.description": "糟糕!",
|
||||
"error.button.back": "返回上一页",
|
||||
"error.msg.default": "发生未知错误。",
|
||||
"error.msg.access_denied": "您取消了认证过程,请重试。",
|
||||
"error.msg.expired_token": "认证过程耗时异常,请重试。",
|
||||
"error.msg.invalid_token": "内部错误",
|
||||
"error.msg.no_user": "用户关联的这个 {0} 账户不存在。",
|
||||
"error.msg.no_email": "无法从 {0} 这个账户获取邮箱地址。",
|
||||
"error.msg.already_linked": "{0} 这个账户已经关联到另一个账号。",
|
||||
"error.msg.not_linked": "{0} 这个账户尚未关联到任何账号。",
|
||||
"error.msg.unverified_account": "{0} 这个账户尚未验证,请在验证后重试。",
|
||||
"error.msg.discord_guild_permission_denied": "您无权登录。",
|
||||
"error.msg.cannot_get_user_info": "无法从 {0} 这个账户获取您的用户信息。",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_google": "谷歌",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "保存",
|
||||
"common.button.create": "创建",
|
||||
@@ -396,10 +468,12 @@ export default {
|
||||
"common.button.generate": "生成",
|
||||
"common.button.done": "完成",
|
||||
"common.text.link": "链接",
|
||||
"common.text.navigate-to-link": "访问链接",
|
||||
"common.text.or": "或",
|
||||
"common.button.go-back": "返回",
|
||||
"common.button.go-home": "返回主页",
|
||||
"common.notify.copied": "已复制到剪贴板",
|
||||
"common.success": "Success",
|
||||
"common.success": "成功",
|
||||
"common.error": "错误",
|
||||
"common.error.unknown": "发生未知错误",
|
||||
"common.error.invalid-email": "邮件地址不可用",
|
||||
@@ -407,5 +481,5 @@ export default {
|
||||
"common.error.too-long": "必须不超过 {length} 个字符",
|
||||
"common.error.exact-length": "必须为 {length} 个字符",
|
||||
"common.error.invalid-number": "必须为数字",
|
||||
"common.error.field-required": "必填项"
|
||||
};
|
||||
"common.error.field-required": "必填项",
|
||||
};
|
||||
|
||||
489
frontend/src/i18n/translations/zh-TW.ts
Normal file
489
frontend/src/i18n/translations/zh-TW.ts
Normal file
@@ -0,0 +1,489 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "上傳",
|
||||
"navbar.signin": "登入",
|
||||
"navbar.home": "首頁",
|
||||
"navbar.signup": "註冊",
|
||||
"navbar.links.shares": "我的分享",
|
||||
"navbar.links.reverse": "檔案請求",
|
||||
"navbar.avatar.account": "帳號設定",
|
||||
"navbar.avatar.admin": "管理",
|
||||
"navbar.avatar.signout": "登出",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "<h>自建</h> 檔案分享平台!",
|
||||
"home.description": "您真的放心把檔案交到第三方檔案平台手中嗎?",
|
||||
"home.bullet.a.name": "完全自建",
|
||||
"home.bullet.a.description": "輕松使用私有服務器搭建檔案分享平台",
|
||||
"home.bullet.b.name": "完全隱私",
|
||||
"home.bullet.b.description": "您的檔案只屬於您!不需將它放到第三方檔案平台",
|
||||
"home.bullet.c.name": "完全無限",
|
||||
"home.bullet.c.description":
|
||||
"想上傳多大都可以,更需要擔心的是您的存儲空間容量",
|
||||
"home.button.start": "開始使用",
|
||||
"home.button.source": "原始碼",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "歡迎回來",
|
||||
"signin.description": "還沒有帳號嗎?請",
|
||||
"signin.button.signup": "註冊",
|
||||
"signin.input.email-or-username": "電子郵件或使用者名稱",
|
||||
"signin.input.email-or-username.placeholder": "請輸入電子郵件或使用者名稱",
|
||||
"signin.input.password": "密碼",
|
||||
"signin.input.password.placeholder": "請輸入密碼",
|
||||
"signin.button.submit": "登入",
|
||||
"signIn.notify.totp-required.title": "請繼續兩步驗證",
|
||||
"signIn.notify.totp-required.description": "請輸入一次性驗證碼",
|
||||
"signIn.oauth.or": "OR",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
"signIn.oauth.discord": "Discord",
|
||||
"signIn.oauth.oidc": "OpenID",
|
||||
// END /auth/signin
|
||||
// /auth/signup
|
||||
"signup.title": "建立帳號",
|
||||
"signup.description": "已經有帳號了?請",
|
||||
"signup.button.signin": "登入",
|
||||
"signup.input.username": "使用者名稱",
|
||||
"signup.input.username.placeholder": "請輸入使用者名稱",
|
||||
"signup.input.email": "電子郵件",
|
||||
"signup.input.email.placeholder": "請輸入電子郵件",
|
||||
"signup.button.submit": "註冊",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "TOTP Authentication",
|
||||
"totp.button.signIn": "Sign in",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "忘記密碼?",
|
||||
"resetPassword.description": "請輸入Email以讓系統寄送重置密碼郵件",
|
||||
"resetPassword.notify.success":
|
||||
"A message with a link to reset your password has been sent if the email exists.",
|
||||
"resetPassword.button.back": "返回登入頁面",
|
||||
"resetPassword.text.resetPassword": "重置密碼",
|
||||
"resetPassword.text.enterNewPassword": "請輸入新密碼",
|
||||
"resetPassword.input.password": "新密碼",
|
||||
"resetPassword.notify.passwordReset": "密碼更新成功!",
|
||||
// /account
|
||||
"account.title": "我的帳號",
|
||||
"account.card.info.title": "帳號資訊",
|
||||
"account.card.info.username": "使用者名稱",
|
||||
"account.card.info.email": "Email",
|
||||
"account.notify.info.success": "帳號資訊更新成功!",
|
||||
"account.card.password.title": "密碼",
|
||||
"account.card.password.old": "舊密碼",
|
||||
"account.card.password.new": "新密碼",
|
||||
"account.card.password.noPasswordSet":
|
||||
"並未設定密碼,若希望使用E-mail與密碼進行登入則必須要設定密碼。",
|
||||
"account.notify.password.success": "密碼更改成功!",
|
||||
"account.card.oauth.title": "第三方登入",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
"account.card.oauth.google": "Google",
|
||||
"account.card.oauth.microsoft": "Microsoft",
|
||||
"account.card.oauth.discord": "Discord",
|
||||
"account.card.oauth.oidc": "OpenID",
|
||||
"account.card.oauth.link": "聯結",
|
||||
"account.card.oauth.unlink": "取消聯結",
|
||||
"account.card.oauth.unlinked": "已取消聯結",
|
||||
"account.modal.unlink.title": "取消聯結第三方登入",
|
||||
"account.modal.unlink.description":
|
||||
"若不記得使用者名稱與密碼,取消聯結第三方登入可能會使您無法登入。",
|
||||
"account.notify.oauth.unlinked.success": "已完成取消聯結",
|
||||
"account.card.security.title": "安控",
|
||||
"account.card.security.totp.enable.description": "請輸入當前密碼開啟兩步驗證",
|
||||
"account.card.security.totp.disable.description":
|
||||
"請輸入當前密碼關閉兩步驗證",
|
||||
"account.card.security.totp.button.start": "開啟",
|
||||
"account.modal.totp.title": "開啟兩步驗證",
|
||||
"account.modal.totp.step1": "第一步:添加驗證應用程式 Authenticator",
|
||||
"account.modal.totp.step2": "第二步:輸入一次性驗證碼",
|
||||
"account.modal.totp.enterManually": "手動輸入",
|
||||
"account.modal.totp.code": "驗證碼",
|
||||
"common.button.clickToCopy": "複製",
|
||||
"account.modal.totp.verify": "確認",
|
||||
"account.notify.totp.disable": "成功關閉兩步驗證!",
|
||||
"account.notify.totp.enable": "成功開啟兩步驗證!",
|
||||
"account.card.language.title": "語言",
|
||||
"account.card.language.description":
|
||||
"此專案由社群進行翻譯,部分語言可能尚未完成翻譯。",
|
||||
"account.card.color.title": "顏色外觀",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "深色模式",
|
||||
"account.theme.light": "淺色模式",
|
||||
"account.theme.system": "比照系統",
|
||||
"account.button.delete": "刪除帳號",
|
||||
"account.modal.delete.title": "刪除帳號",
|
||||
"account.modal.delete.description":
|
||||
"您真的想刪除您的帳號,並刪除所有的分享嗎?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "我的分享",
|
||||
"account.shares.title.empty": "這裡空空如也 👀",
|
||||
"account.shares.description.empty": "您沒有建立任何分享",
|
||||
"account.shares.button.create": "建立分享",
|
||||
"account.shares.info.title": "分享資訊",
|
||||
"account.shares.table.id": "ID",
|
||||
"account.shares.table.name": "分享代號",
|
||||
"account.shares.table.description": "描述",
|
||||
"account.shares.table.visitors": "造訪次數",
|
||||
"account.shares.table.expiresAt": "過期時間",
|
||||
"account.shares.table.createdAt": "建立時間",
|
||||
"account.shares.table.size": "檔案大小",
|
||||
"account.shares.modal.share-informations": "分享資訊",
|
||||
"account.shares.modal.share-link": "分享聯結",
|
||||
"account.shares.modal.delete.title": "刪除 {share}",
|
||||
"account.shares.modal.delete.description": "您真的想刪除這個分享嗎?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "檔案請求",
|
||||
"account.reverseShares.description":
|
||||
"檔案請求允許您建立一個特定的上船畫面,以便外部使用者與您分享檔案",
|
||||
"account.reverseShares.title.empty": "這里空空如也 👀",
|
||||
"account.reverseShares.description.empty": "您沒有建立任何檔案請求",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "建立檔案請求",
|
||||
"account.reverseShares.modal.expiration.label": "過期時間",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "分鐘",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "分鐘",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "小時",
|
||||
"account.reverseShares.modal.expiration.hour-plural": "小時",
|
||||
"account.reverseShares.modal.expiration.day-singular": "天",
|
||||
"account.reverseShares.modal.expiration.day-plural": "天",
|
||||
"account.reverseShares.modal.expiration.week-singular": "周",
|
||||
"account.reverseShares.modal.expiration.week-plural": "周",
|
||||
"account.reverseShares.modal.expiration.month-singular": "月",
|
||||
"account.reverseShares.modal.expiration.month-plural": "月",
|
||||
"account.reverseShares.modal.expiration.year-singular": "年",
|
||||
"account.reverseShares.modal.expiration.year-plural": "年",
|
||||
"account.reverseShares.modal.max-size.label": "上傳大小上限",
|
||||
"account.reverseShares.modal.send-email": "發送Email提醒",
|
||||
"account.reverseShares.modal.send-email.description":
|
||||
"當這個檔案請求聯結被用於分享時,發送Email提醒",
|
||||
"account.reverseShares.modal.max-use.label": "最大使用次數",
|
||||
"account.reverseShares.modal.max-use.description":
|
||||
"這個檔案請求聯結可被用於建立分享的最大使用次數",
|
||||
"account.reverseShare.never-expires": "這個檔案請求永不過期",
|
||||
"account.reverseShare.expires-on": "這個檔案請求將過期於 {expiration}",
|
||||
"account.reverseShares.table.no-shares": "當前沒有建立任何分享",
|
||||
"account.reverseShares.table.count.singular": "分享",
|
||||
"account.reverseShares.table.count.plural": "分享",
|
||||
"account.reverseShares.table.shares": "分享",
|
||||
"account.reverseShares.table.remaining": "剩餘使用次數",
|
||||
"account.reverseShares.table.max-size": "上傳大小上限",
|
||||
"account.reverseShares.table.expires": "過期時間",
|
||||
"account.reverseShares.modal.reverse-share-link": "檔案請求聯結",
|
||||
"account.reverseShares.modal.delete.title": "刪除檔案請求聯結",
|
||||
"account.reverseShares.modal.delete.description":
|
||||
"您真的想刪除此檔案請求聯結嗎?聯結下所有關聯的檔案都將被刪除",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "管理",
|
||||
"admin.button.users": "使用者管理",
|
||||
"admin.button.shares": "Share management",
|
||||
"admin.button.config": "配置管理",
|
||||
"admin.version": "版本",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "使用者管理",
|
||||
"admin.users.table.username": "使用者名稱",
|
||||
"admin.users.table.email": "Email",
|
||||
"admin.users.table.admin": "管理員",
|
||||
"admin.users.edit.update.title": "更新使用者 {username}",
|
||||
"admin.users.edit.update.admin-privileges": "管理員",
|
||||
"admin.users.edit.update.change-password.title": "更改密碼",
|
||||
"admin.users.edit.update.change-password.field": "新密碼",
|
||||
"admin.users.edit.update.change-password.button": "保存新密碼",
|
||||
"admin.users.edit.update.notify.password.success": "密碼更新成功!",
|
||||
"admin.users.edit.delete.title": "刪除使用者 {username}",
|
||||
"admin.users.edit.delete.description":
|
||||
"您真的想刪除這個帳號,並刪除該使用者所有的分享嗎?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "建立使用者",
|
||||
"admin.users.modal.create.username": "使用者名稱",
|
||||
"admin.users.modal.create.email": "Email",
|
||||
"admin.users.modal.create.password": "密碼",
|
||||
"admin.users.modal.create.manual-password": "手動設置密碼",
|
||||
"admin.users.modal.create.manual-password.description":
|
||||
"如果不勾選,使用者將會收到一封Email來設置他們的密碼",
|
||||
"admin.users.modal.create.admin": "管理員",
|
||||
"admin.users.modal.create.admin.description":
|
||||
"如果勾選,使用者將能查看管理員面板",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Share management",
|
||||
"admin.shares.table.id": "Share ID",
|
||||
"admin.shares.table.username": "Creator",
|
||||
"admin.shares.table.visitors": "Visitors",
|
||||
"admin.shares.table.expires": "Expires At",
|
||||
"admin.shares.edit.delete.title": "Delete share {id}",
|
||||
"admin.shares.edit.delete.description":
|
||||
"Do you really want to delete this share?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "上傳",
|
||||
"upload.notify.generic-error": "建立分享的過程中發生了錯誤",
|
||||
"upload.notify.count-failed": "{count} 檔案上傳失敗,請重試",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "上傳檔案",
|
||||
"upload.dropzone.description":
|
||||
"將檔案拖曳至此以上傳,檔案大小不能超過上限 {maxSize}",
|
||||
"upload.dropzone.notify.file-too-big": "您的檔案超過了最大上傳限制 {maxSize}",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "檔案名稱",
|
||||
"upload.filelist.size": "檔案大小",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "建立分享",
|
||||
"upload.modal.link.error.invalid": "只能包括字母,數字,下劃線(_),和橫線(-)",
|
||||
"upload.modal.link.error.taken": "這個分享代號已經存在了",
|
||||
"upload.modal.not-signed-in": "當前沒有登入",
|
||||
"upload.modal.not-signed-in-description":
|
||||
"您將不能刪除您的分享或查看查看次數",
|
||||
"upload.modal.expires.never": "永不",
|
||||
"upload.modal.expires.never-long": "永不過期",
|
||||
"upload.modal.expires.error.too-long": "過期時間超出了系統上限設定 {max}。",
|
||||
"upload.modal.link.label": "分享聯結",
|
||||
"upload.modal.expires.label": "過期時間",
|
||||
"upload.modal.expires.minute-singular": "分鐘",
|
||||
"upload.modal.expires.minute-plural": "分鐘",
|
||||
"upload.modal.expires.hour-singular": "小時",
|
||||
"upload.modal.expires.hour-plural": "小時",
|
||||
"upload.modal.expires.day-singular": "天",
|
||||
"upload.modal.expires.day-plural": "天",
|
||||
"upload.modal.expires.week-singular": "周",
|
||||
"upload.modal.expires.week-plural": "周",
|
||||
"upload.modal.expires.month-singular": "月",
|
||||
"upload.modal.expires.month-plural": "月",
|
||||
"upload.modal.expires.year-singular": "年",
|
||||
"upload.modal.expires.year-plural": "年",
|
||||
"upload.modal.accordion.name-and-description.title": "Name and description",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Name",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder":
|
||||
"Note for the recipients of this share",
|
||||
"upload.modal.accordion.email.title": "Email提醒",
|
||||
"upload.modal.accordion.email.placeholder": "收件人Email地址",
|
||||
"upload.modal.accordion.email.invalid-email": "Email地址不可用",
|
||||
"upload.modal.accordion.security.title": "安控",
|
||||
"upload.modal.accordion.security.password.label": "密碼保護",
|
||||
"upload.modal.accordion.security.password.placeholder": "無密碼",
|
||||
"upload.modal.accordion.security.max-views.label": "最大查看次數",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "無限",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "這個分享永不過期",
|
||||
"upload.modal.completed.expires-on": "這個分享將過期於 {expiration}。",
|
||||
"upload.modal.completed.share-ready": "分享建立完畢",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "分享 {shareId}",
|
||||
"share.description": "瞧瞧我給您分享了些什麽!",
|
||||
"share.error.visitor-limit-exceeded.title": "查看次數達到上限",
|
||||
"share.error.visitor-limit-exceeded.description": "查看次數達到上限",
|
||||
"share.error.removed.title": "分享已刪除",
|
||||
"share.error.not-found.title": "分享未找到",
|
||||
"share.error.not-found.description": "分享檔案遺失了",
|
||||
"share.modal.password.title": "需要密碼",
|
||||
"share.modal.password.description": "請輸入密碼來查看此分享",
|
||||
"share.modal.password": "密碼",
|
||||
"share.modal.error.invalid-password": "密碼錯誤",
|
||||
"share.button.download-all": "全部下載",
|
||||
"share.notify.download-all-preparing": "正在處理中,請稍等片刻",
|
||||
"share.modal.file-link": "檔案聯結",
|
||||
"share.table.name": "檔案名稱",
|
||||
"share.table.size": "檔案大小",
|
||||
"share.modal.file-preview.error.not-supported.title": "該檔案類型不支持預覽",
|
||||
"share.modal.file-preview.error.not-supported.description":
|
||||
"A preview for this file type is unsupported. Please download the file to view it.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "編輯 {shareId}",
|
||||
"share.edit.append-upload": "追加檔案",
|
||||
"share.edit.notify.generic-error": "保存分享的過程中發生了錯誤",
|
||||
"share.edit.notify.save-success": "分享已更新成功",
|
||||
// END /share/[id]/edit
|
||||
// /admin/config
|
||||
"admin.config.title": "配置管理",
|
||||
"admin.config.category.general": "通用",
|
||||
"admin.config.category.share": "分享",
|
||||
"admin.config.category.email": "Email",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "第三方登入",
|
||||
"admin.config.general.app-name": "App 名稱",
|
||||
"admin.config.general.app-name.description": "這個 App 的名稱",
|
||||
"admin.config.general.app-url": "App URL",
|
||||
"admin.config.general.app-url.description": "Pingvin Share 的 URL",
|
||||
"admin.config.general.show-home-page": "顯示首頁",
|
||||
"admin.config.general.show-home-page.description": "是否顯示首頁",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description":
|
||||
"上傳個性化 Logo,圖片必須是長寬比 1:1 的 PNG 格式",
|
||||
"admin.config.general.logo.placeholder": "選擇圖片",
|
||||
"admin.config.email.enable-share-email-recipients": "開啟分享Email通知",
|
||||
"admin.config.email.enable-share-email-recipients.description":
|
||||
"是否允許通過Email通知發送分享資訊,需進行 SMTP 設定後此選項才有效",
|
||||
"admin.config.email.share-recipients-subject": "分享Email通知主題",
|
||||
"admin.config.email.share-recipients-subject.description":
|
||||
"發送分享Email通知的主題",
|
||||
"admin.config.email.share-recipients-message": "分享Email通知內容",
|
||||
"admin.config.email.share-recipients-message.description":
|
||||
"發送到接收者的分享Email通知具體內容。可使用的參數有:\n {creator} - 分享建立者\n {shareUrl} - 分享聯結\n {desc} - 分享描述\n {expires} - 分享過期時間\n 這些參數會被實際的值所替代",
|
||||
"admin.config.email.reverse-share-subject": "檔案請求Email通知主題",
|
||||
"admin.config.email.reverse-share-subject.description":
|
||||
"當有人使用了您的檔案請求聯結時,發送的檔案請求通知主題",
|
||||
"admin.config.email.reverse-share-message": "檔案請求Email通知內容",
|
||||
"admin.config.email.reverse-share-message.description":
|
||||
"當有人使用了您的檔案請求聯結時,發送的通知內容。{shareUrl} 會被建立者的使用者名稱和分享聯結代替",
|
||||
"admin.config.email.reset-password-subject": "重置密碼Email通知主題",
|
||||
"admin.config.email.reset-password-subject.description":
|
||||
"當使用者發動重置密碼時,發送的重置密碼通知主題",
|
||||
"admin.config.email.reset-password-message": "重置密碼Email通知內容",
|
||||
"admin.config.email.reset-password-message.description":
|
||||
"當使用者發動重置密碼時,重置密碼通知內容。{url} 會被重置密碼聯結代替",
|
||||
"admin.config.email.invite-subject": "邀請Email通知主題",
|
||||
"admin.config.email.invite-subject.description":
|
||||
"當管理員邀請使用者時,發送的邀請通知主題",
|
||||
"admin.config.email.invite-message": "邀請Email通知內容",
|
||||
"admin.config.email.invite-message.description":
|
||||
"當管理員邀請使用者時,發送的邀請通知內容。{url} 會被邀請聯結代替,{password} 會被密碼代替",
|
||||
"admin.config.share.allow-registration": "允許註冊",
|
||||
"admin.config.share.allow-registration.description": "是否允許註冊",
|
||||
"admin.config.share.allow-unauthenticated-shares": "是否允許未登入進行分享",
|
||||
"admin.config.share.allow-unauthenticated-shares.description":
|
||||
"是否允許未登入的使用者建立分享",
|
||||
"admin.config.share.max-expiration": "最大過期時間",
|
||||
"admin.config.share.max-expiration.description":
|
||||
"最大過期時間(小時),若設定為0則為永不過期",
|
||||
"admin.config.share.max-size": "最大檔案上限",
|
||||
"admin.config.share.max-size.description":
|
||||
"最大檔案上限,單位 bytes (1GB=1024MB=1048576KB=1073741824bytes)",
|
||||
"admin.config.share.zip-compression-level": "Zip 壓縮等級",
|
||||
"admin.config.share.zip-compression-level.description":
|
||||
"調整壓縮等級以平衡檔案大小和壓縮速度。 有效值範圍從 0 到 9,其中 0 表示無壓縮,9 表示最大壓縮",
|
||||
"admin.config.share.chunk-size": "Chunk size",
|
||||
"admin.config.share.chunk-size.description":
|
||||
"Adjust the chunk size (in bytes) for your uploads to balance efficiency and reliability according to your internet connection. Smaller chunks can enhance success rates for unstable connections, while larger chunks speed up uploads for stable connections.",
|
||||
"admin.config.smtp.enabled": "啟用",
|
||||
"admin.config.smtp.enabled.description":
|
||||
"是否開啟 SMTP,需輸入Host、Port、發送郵箱、使用者名稱和密碼後才有作用",
|
||||
"admin.config.smtp.host": "Host",
|
||||
"admin.config.smtp.host.description": "SMTP Host",
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "SMTP Port",
|
||||
"admin.config.smtp.email": "發送郵箱",
|
||||
"admin.config.smtp.email.description": "發送郵箱地址",
|
||||
"admin.config.smtp.username": "使用者名稱",
|
||||
"admin.config.smtp.username.description": "SMTP 主機使用者名稱",
|
||||
"admin.config.smtp.password": "密碼",
|
||||
"admin.config.smtp.password.description": "SMTP 主機密碼",
|
||||
"admin.config.smtp.button.test": "發送測試Email",
|
||||
"admin.config.oauth.allow-registration": "允許註冊",
|
||||
"admin.config.oauth.allow-registration.description":
|
||||
"允許使用者以第三方登入註冊",
|
||||
"admin.config.oauth.ignore-totp": "略過 TOTP",
|
||||
"admin.config.oauth.ignore-totp.description":
|
||||
"當使用者使用第三方登入時,略過 TOTP 驗證",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "啟用 Github 登入",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description":
|
||||
"GitHub OAuth 的 Client ID",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client secret",
|
||||
"admin.config.oauth.github-client-secret.description":
|
||||
"GitHub OAuth 的 Client secret",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "啟用 Google 登入",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description":
|
||||
"Google OAuth 的 Client ID",
|
||||
"admin.config.oauth.google-client-secret": "Google Client secret",
|
||||
"admin.config.oauth.google-client-secret.description":
|
||||
"Google OAuth 的 Client secret",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "啟用 Microsoft 登入",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description":
|
||||
"Microsoft OAuth 的 Tenant ID\ncommon: 擁有 Microsoft Entra ID 的個人 Microsoft 帳號和工作或學校帳號的使用者可以登入該應用程式。\norganizations: 擁有 Microsoft Entra ID 的工作或學校帳號的使用者才能登入應用程式。\nconsumers: 只有擁有個人 Microsoft 帳號的使用者才能登入該應用程式。\ndomain name of the Microsoft Entra tenant or the tenant ID in GUID format: 只有來自特定 Microsoft Entra 租戶的使用者(具有工作或學校帳號的目錄成員或具有個人 Microsoft 帳號的目錄成員)才能登入應用程式。",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description":
|
||||
"Microsoft OAuth 的 Client ID",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description":
|
||||
"Microsoft OAuth 的 Client secret",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "啟用 Discord 登入",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord limited server ID",
|
||||
"admin.config.oauth.discord-limited-guild.description":
|
||||
"Limit signing in to users in a specific server. Leave it blank to disable.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description":
|
||||
"Discord OAuth 的 Client ID",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description":
|
||||
"Discord OAuth 的 Client secret",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description":
|
||||
"Whether OpenID Connect login is enabled",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Discovery URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description":
|
||||
"Discovery URI of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect username claim",
|
||||
"admin.config.oauth.oidc-username-claim.description":
|
||||
"Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect Client ID",
|
||||
"admin.config.oauth.oidc-client-id.description":
|
||||
"Client ID of the OpenID Connect OAuth app",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description":
|
||||
"Client secret of the OpenID Connect OAuth app",
|
||||
// 404
|
||||
"404.description": "查無此頁",
|
||||
"404.button.home": "返回主頁",
|
||||
// error
|
||||
"error.title": "Error",
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "返回上一頁",
|
||||
"error.msg.default": "發生預期外的問題。",
|
||||
"error.msg.access_denied": "您取消了身分驗證,請重試。",
|
||||
"error.msg.expired_token": "身分驗證過程逾時,請重試。",
|
||||
"error.msg.invalid_token": "Internal Error",
|
||||
"error.msg.no_user": "與此 {0} 帳號關聯的使用者不存在。",
|
||||
"error.msg.no_email": "無法從此 {0} 帳號取得Email地址。",
|
||||
"error.msg.already_linked": "此 {0} 帳號已與另一個帳號關聯。",
|
||||
"error.msg.not_linked": "此 {0} 帳號尚未關聯到任何帳號。",
|
||||
"error.msg.unverified_account":
|
||||
"This {0} account is unverified, please try again after verification.",
|
||||
"error.msg.discord_guild_permission_denied":
|
||||
"You are not allowed to sign in.",
|
||||
"error.msg.cannot_get_user_info":
|
||||
"Can not get your user info from this {0} account.",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "Google",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
"error.param.provider_discord": "Discord",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "儲存",
|
||||
"common.button.create": "建立",
|
||||
"common.button.submit": "送出",
|
||||
"common.button.delete": "刪除",
|
||||
"common.button.cancel": "取消",
|
||||
"common.button.confirm": "確認",
|
||||
"common.button.disable": "關閉",
|
||||
"common.button.share": "分享",
|
||||
"common.button.generate": "自動產生",
|
||||
"common.button.done": "完成",
|
||||
"common.text.link": "聯結",
|
||||
"common.text.navigate-to-link": "Go to the link",
|
||||
"common.text.or": "或",
|
||||
"common.button.go-back": "返回",
|
||||
"common.button.go-home": "Go home",
|
||||
"common.notify.copied": "已複製到剪貼簿",
|
||||
"common.success": "成功",
|
||||
"common.error": "錯誤",
|
||||
"common.error.unknown": "發生預期外錯誤",
|
||||
"common.error.invalid-email": "Email地址不可用",
|
||||
"common.error.too-short": "必須不少於 {length} 個字元",
|
||||
"common.error.too-long": "必須不超過 {length} 個字元",
|
||||
"common.error.exact-length": "必須為 {length} 個字元",
|
||||
"common.error.invalid-number": "必須為數字",
|
||||
"common.error.field-required": "必填",
|
||||
};
|
||||
@@ -21,9 +21,8 @@ export async function middleware(request: NextRequest) {
|
||||
};
|
||||
|
||||
// Get config from backend
|
||||
const config = await (
|
||||
await fetch(`${request.nextUrl.origin}/api/configs`)
|
||||
).json();
|
||||
const apiUrl = process.env.API_URL || "http://localhost:8080";
|
||||
const config = await (await fetch(`${apiUrl}/api/configs`)).json();
|
||||
|
||||
const getConfig = (key: string) => {
|
||||
return configService.get(key, config);
|
||||
|
||||
@@ -1,14 +1,7 @@
|
||||
import {
|
||||
Button,
|
||||
Container,
|
||||
createStyles,
|
||||
Group,
|
||||
Text,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { Button, Container, createStyles, Group, Title } from "@mantine/core";
|
||||
import Link from "next/link";
|
||||
import Meta from "../components/Meta";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import Meta from "../components/Meta";
|
||||
|
||||
const useStyles = createStyles((theme) => ({
|
||||
root: {
|
||||
@@ -21,19 +14,13 @@ const useStyles = createStyles((theme) => ({
|
||||
fontWeight: 900,
|
||||
fontSize: 220,
|
||||
lineHeight: 1,
|
||||
marginBottom: `calc(${theme.spacing.xl} * 100)`,
|
||||
marginBottom: 20,
|
||||
color: theme.colors.gray[2],
|
||||
|
||||
[theme.fn.smallerThan("sm")]: {
|
||||
fontSize: 120,
|
||||
},
|
||||
},
|
||||
|
||||
description: {
|
||||
maxWidth: 500,
|
||||
margin: "auto",
|
||||
marginBottom: `calc(${theme.spacing.xl} * 100)`,
|
||||
},
|
||||
}));
|
||||
|
||||
const ErrorNotFound = () => {
|
||||
@@ -47,12 +34,7 @@ const ErrorNotFound = () => {
|
||||
<Title align="center" order={3}>
|
||||
<FormattedMessage id="404.description" />
|
||||
</Title>
|
||||
<Text
|
||||
color="dimmed"
|
||||
align="center"
|
||||
className={classes.description}
|
||||
></Text>
|
||||
<Group position="center">
|
||||
<Group position="center" mt={50}>
|
||||
<Button component={Link} href="/" variant="light">
|
||||
<FormattedMessage id="404.button.home" />
|
||||
</Button>
|
||||
|
||||
@@ -12,6 +12,7 @@ import { getCookie, setCookie } from "cookies-next";
|
||||
import { GetServerSidePropsContext } from "next";
|
||||
import type { AppProps } from "next/app";
|
||||
import getConfig from "next/config";
|
||||
import Head from "next/head";
|
||||
import { useRouter } from "next/router";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { IntlProvider } from "react-intl";
|
||||
@@ -28,6 +29,8 @@ import Config from "../types/config.type";
|
||||
import { CurrentUser } from "../types/user.type";
|
||||
import i18nUtil from "../utils/i18n.util";
|
||||
import userPreferences from "../utils/userPreferences.util";
|
||||
import "moment/min/locales";
|
||||
import moment from "moment";
|
||||
|
||||
const excludeDefaultLayoutRoutes = ["/admin/config/[category]"];
|
||||
|
||||
@@ -49,7 +52,12 @@ function App({ Component, pageProps }: AppProps) {
|
||||
}, [router.pathname]);
|
||||
|
||||
useEffect(() => {
|
||||
setInterval(async () => await authService.refreshAccessToken(), 30 * 1000);
|
||||
const interval = setInterval(
|
||||
async () => await authService.refreshAccessToken(),
|
||||
2 * 60 * 1000, // 2 minutes
|
||||
);
|
||||
|
||||
return () => clearInterval(interval);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -78,59 +86,68 @@ function App({ Component, pageProps }: AppProps) {
|
||||
};
|
||||
|
||||
const language = useRef(pageProps.language);
|
||||
moment.locale(language.current);
|
||||
|
||||
return (
|
||||
<IntlProvider
|
||||
messages={i18nUtil.getLocaleByCode(language.current)?.messages}
|
||||
locale={language.current}
|
||||
defaultLocale={LOCALES.ENGLISH.code}
|
||||
>
|
||||
<MantineProvider
|
||||
withGlobalStyles
|
||||
withNormalizeCSS
|
||||
theme={{ colorScheme, ...globalStyle }}
|
||||
<>
|
||||
<Head>
|
||||
<meta
|
||||
name="viewport"
|
||||
content="minimum-scale=1, initial-scale=1, width=device-width, user-scalable=no"
|
||||
/>
|
||||
</Head>
|
||||
<IntlProvider
|
||||
messages={i18nUtil.getLocaleByCode(language.current)?.messages}
|
||||
locale={language.current}
|
||||
defaultLocale={LOCALES.ENGLISH.code}
|
||||
>
|
||||
<ColorSchemeProvider
|
||||
colorScheme={colorScheme}
|
||||
toggleColorScheme={toggleColorScheme}
|
||||
<MantineProvider
|
||||
withGlobalStyles
|
||||
withNormalizeCSS
|
||||
theme={{ colorScheme, ...globalStyle }}
|
||||
>
|
||||
<GlobalStyle />
|
||||
<Notifications />
|
||||
<ModalsProvider>
|
||||
<ConfigContext.Provider
|
||||
value={{
|
||||
configVariables,
|
||||
refresh: async () => {
|
||||
setConfigVariables(await configService.list());
|
||||
},
|
||||
}}
|
||||
>
|
||||
<UserContext.Provider
|
||||
<ColorSchemeProvider
|
||||
colorScheme={colorScheme}
|
||||
toggleColorScheme={toggleColorScheme}
|
||||
>
|
||||
<GlobalStyle />
|
||||
<Notifications />
|
||||
<ModalsProvider>
|
||||
<ConfigContext.Provider
|
||||
value={{
|
||||
user,
|
||||
refreshUser: async () => {
|
||||
const user = await userService.getCurrentUser();
|
||||
setUser(user);
|
||||
return user;
|
||||
configVariables,
|
||||
refresh: async () => {
|
||||
setConfigVariables(await configService.list());
|
||||
},
|
||||
}}
|
||||
>
|
||||
{excludeDefaultLayoutRoutes.includes(route) ? (
|
||||
<Component {...pageProps} />
|
||||
) : (
|
||||
<>
|
||||
<Header />
|
||||
<Container>
|
||||
<Component {...pageProps} />
|
||||
</Container>
|
||||
</>
|
||||
)}
|
||||
</UserContext.Provider>
|
||||
</ConfigContext.Provider>
|
||||
</ModalsProvider>
|
||||
</ColorSchemeProvider>
|
||||
</MantineProvider>
|
||||
</IntlProvider>
|
||||
<UserContext.Provider
|
||||
value={{
|
||||
user,
|
||||
refreshUser: async () => {
|
||||
const user = await userService.getCurrentUser();
|
||||
setUser(user);
|
||||
return user;
|
||||
},
|
||||
}}
|
||||
>
|
||||
{excludeDefaultLayoutRoutes.includes(route) ? (
|
||||
<Component {...pageProps} />
|
||||
) : (
|
||||
<>
|
||||
<Header />
|
||||
<Container>
|
||||
<Component {...pageProps} />
|
||||
</Container>
|
||||
</>
|
||||
)}
|
||||
</UserContext.Provider>
|
||||
</ConfigContext.Provider>
|
||||
</ModalsProvider>
|
||||
</ColorSchemeProvider>
|
||||
</MantineProvider>
|
||||
</IntlProvider>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -68,15 +68,12 @@ const MyShares = () => {
|
||||
<Table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<FormattedMessage id="account.shares.table.id" />
|
||||
</th>
|
||||
<th>
|
||||
<FormattedMessage id="account.shares.table.name" />
|
||||
</th>
|
||||
<MediaQuery smallerThan="md" styles={{ display: "none" }}>
|
||||
<th>
|
||||
<FormattedMessage id="account.shares.table.description" />
|
||||
</th>
|
||||
</MediaQuery>
|
||||
|
||||
<th>
|
||||
<FormattedMessage id="account.shares.table.visitors" />
|
||||
</th>
|
||||
@@ -90,18 +87,7 @@ const MyShares = () => {
|
||||
{shares.map((share) => (
|
||||
<tr key={share.id}>
|
||||
<td>{share.id}</td>
|
||||
<MediaQuery smallerThan="sm" styles={{ display: "none" }}>
|
||||
<td
|
||||
style={{
|
||||
overflow: "hidden",
|
||||
textOverflow: "ellipsis",
|
||||
whiteSpace: "nowrap",
|
||||
maxWidth: "300px",
|
||||
}}
|
||||
>
|
||||
{share.description || ""}
|
||||
</td>
|
||||
</MediaQuery>
|
||||
<td>{share.name}</td>
|
||||
<td>{share.views}</td>
|
||||
<td>
|
||||
{moment(share.expiration).unix() === 0
|
||||
|
||||
@@ -72,6 +72,10 @@ export default function AppShellDemo() {
|
||||
};
|
||||
|
||||
const updateConfigVariable = (configVariable: UpdateConfig) => {
|
||||
if (configVariable.key === "general.appUrl") {
|
||||
configVariable.value = sanitizeUrl(configVariable.value);
|
||||
}
|
||||
|
||||
const index = updatedConfigVariables.findIndex(
|
||||
(item) => item.key === configVariable.key,
|
||||
);
|
||||
@@ -86,6 +90,10 @@ export default function AppShellDemo() {
|
||||
}
|
||||
};
|
||||
|
||||
const sanitizeUrl = (url: string): string => {
|
||||
return url.endsWith("/") ? url.slice(0, -1) : url;
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
configService.getByCategory(categoryId).then((configVariables) => {
|
||||
setConfigVariables(configVariables);
|
||||
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
} from "@mantine/core";
|
||||
import Link from "next/link";
|
||||
import { useEffect, useState } from "react";
|
||||
import { TbRefresh, TbSettings, TbUsers } from "react-icons/tb";
|
||||
import { TbLink, TbRefresh, TbSettings, TbUsers } from "react-icons/tb";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import Meta from "../../components/Meta";
|
||||
import useTranslate from "../../hooks/useTranslate.hook";
|
||||
@@ -41,6 +41,11 @@ const Admin = () => {
|
||||
icon: TbUsers,
|
||||
route: "/admin/users",
|
||||
},
|
||||
{
|
||||
title: t("admin.button.shares"),
|
||||
icon: TbLink,
|
||||
route: "/admin/shares",
|
||||
},
|
||||
{
|
||||
title: t("admin.button.config"),
|
||||
icon: TbSettings,
|
||||
|
||||
74
frontend/src/pages/admin/shares.tsx
Normal file
74
frontend/src/pages/admin/shares.tsx
Normal file
@@ -0,0 +1,74 @@
|
||||
import { Group, Space, Text, Title } from "@mantine/core";
|
||||
import { useModals } from "@mantine/modals";
|
||||
import { useEffect, useState } from "react";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import Meta from "../../components/Meta";
|
||||
import ManageShareTable from "../../components/admin/shares/ManageShareTable";
|
||||
import useTranslate from "../../hooks/useTranslate.hook";
|
||||
import shareService from "../../services/share.service";
|
||||
import { MyShare } from "../../types/share.type";
|
||||
import toast from "../../utils/toast.util";
|
||||
|
||||
const Shares = () => {
|
||||
const [shares, setShares] = useState<MyShare[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
|
||||
const modals = useModals();
|
||||
const t = useTranslate();
|
||||
|
||||
const getShares = () => {
|
||||
setIsLoading(true);
|
||||
shareService.list().then((shares) => {
|
||||
setShares(shares);
|
||||
setIsLoading(false);
|
||||
});
|
||||
};
|
||||
|
||||
const deleteShare = (share: MyShare) => {
|
||||
modals.openConfirmModal({
|
||||
title: t("admin.shares.edit.delete.title", {
|
||||
id: share.id,
|
||||
}),
|
||||
children: (
|
||||
<Text size="sm">
|
||||
<FormattedMessage id="admin.shares.edit.delete.description" />
|
||||
</Text>
|
||||
),
|
||||
labels: {
|
||||
confirm: t("common.button.delete"),
|
||||
cancel: t("common.button.cancel"),
|
||||
},
|
||||
confirmProps: { color: "red" },
|
||||
onConfirm: async () => {
|
||||
shareService
|
||||
.remove(share.id)
|
||||
.then(() => setShares(shares.filter((v) => v.id != share.id)))
|
||||
.catch(toast.axiosError);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
getShares();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Meta title={t("admin.shares.title")} />
|
||||
<Group position="apart" align="baseline" mb={20}>
|
||||
<Title mb={30} order={3}>
|
||||
<FormattedMessage id="admin.shares.title" />
|
||||
</Title>
|
||||
</Group>
|
||||
|
||||
<ManageShareTable
|
||||
shares={shares}
|
||||
deleteShare={deleteShare}
|
||||
isLoading={isLoading}
|
||||
/>
|
||||
<Space h="xl" />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default Shares;
|
||||
@@ -12,7 +12,7 @@ export const config = {
|
||||
const { apiURL } = getConfig().serverRuntimeConfig;
|
||||
|
||||
// A proxy to the API server only used in development.
|
||||
// In production this route gets overridden by nginx.
|
||||
// In production this route gets overridden by Caddy.
|
||||
export default (req: NextApiRequest, res: NextApiResponse) => {
|
||||
httpProxyMiddleware(req, res, {
|
||||
headers: {
|
||||
|
||||
@@ -68,13 +68,13 @@ const ResetPassword = () => {
|
||||
})}
|
||||
>
|
||||
<PasswordInput
|
||||
label={t("resetPassword.text.password")}
|
||||
label={t("resetPassword.input.password")}
|
||||
placeholder="••••••••••"
|
||||
{...form.getInputProps("password")}
|
||||
/>
|
||||
<Group position="right" mt="lg">
|
||||
<Button type="submit" className={classes.control}>
|
||||
<FormattedMessage id="resetPassword.button.resetPassword" />
|
||||
<FormattedMessage id="resetPassword.text.resetPassword" />
|
||||
</Button>
|
||||
</Group>
|
||||
</form>
|
||||
|
||||
@@ -4,6 +4,7 @@ import Meta from "../components/Meta";
|
||||
import useTranslate from "../hooks/useTranslate.hook";
|
||||
import { useRouter } from "next/router";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import { safeRedirectPath } from "../utils/router.util";
|
||||
|
||||
const useStyle = createStyles({
|
||||
title: {
|
||||
@@ -39,7 +40,9 @@ export default function Error() {
|
||||
</Text>
|
||||
<Button
|
||||
mt="xl"
|
||||
onClick={() => router.push((router.query.redirect as string) || "/")}
|
||||
onClick={() =>
|
||||
router.push(safeRedirectPath(router.query.redirect as string))
|
||||
}
|
||||
>
|
||||
{t("error.button.back")}
|
||||
</Button>
|
||||
|
||||
@@ -94,7 +94,7 @@ export default function Home() {
|
||||
id="home.title"
|
||||
values={{
|
||||
h: (chunks) => (
|
||||
<span className={classes.highlight}>{chunks} </span>
|
||||
<span className={classes.highlight}>{chunks}</span>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
|
||||
@@ -37,6 +37,7 @@ const Share = ({ shareId }: { shareId: string }) => {
|
||||
modals,
|
||||
t("share.error.visitor-limit-exceeded.title"),
|
||||
t("share.error.visitor-limit-exceeded.description"),
|
||||
"go-home",
|
||||
);
|
||||
} else {
|
||||
toast.axiosError(e);
|
||||
@@ -58,12 +59,14 @@ const Share = ({ shareId }: { shareId: string }) => {
|
||||
modals,
|
||||
t("share.error.removed.title"),
|
||||
e.response.data.message,
|
||||
"go-home",
|
||||
);
|
||||
} else {
|
||||
showErrorModal(
|
||||
modals,
|
||||
t("share.error.not-found.title"),
|
||||
t("share.error.not-found.description"),
|
||||
"go-home",
|
||||
);
|
||||
}
|
||||
} else if (error == "share_password_required") {
|
||||
@@ -71,7 +74,12 @@ const Share = ({ shareId }: { shareId: string }) => {
|
||||
} else if (error == "share_token_required") {
|
||||
getShareToken();
|
||||
} else {
|
||||
showErrorModal(modals, t("common.error"), t("common.error.unknown"));
|
||||
showErrorModal(
|
||||
modals,
|
||||
t("common.error"),
|
||||
t("common.error.unknown"),
|
||||
"go-home",
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -83,13 +91,13 @@ const Share = ({ shareId }: { shareId: string }) => {
|
||||
return (
|
||||
<>
|
||||
<Meta
|
||||
title={t("share.title", { shareId })}
|
||||
title={t("share.title", { shareId: share?.name || shareId })}
|
||||
description={t("share.description")}
|
||||
/>
|
||||
|
||||
<Group position="apart" mb="lg">
|
||||
<Box style={{ maxWidth: "70%" }}>
|
||||
<Title order={3}>{share?.id}</Title>
|
||||
<Title order={3}>{share?.name || share?.id}</Title>
|
||||
<Text size="sm">{share?.description}</Text>
|
||||
</Box>
|
||||
{share?.files.length > 1 && <DownloadAllButton shareId={shareId} />}
|
||||
|
||||
@@ -30,6 +30,7 @@ const Share = ({ reverseShareToken }: { reverseShareToken: string }) => {
|
||||
modals,
|
||||
"Invalid Link",
|
||||
"This link is invalid. Please check your link.",
|
||||
"go-home",
|
||||
);
|
||||
setIsLoading(false);
|
||||
});
|
||||
|
||||
@@ -3,7 +3,7 @@ import { useModals } from "@mantine/modals";
|
||||
import { cleanNotifications } from "@mantine/notifications";
|
||||
import { AxiosError } from "axios";
|
||||
import pLimit from "p-limit";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import Meta from "../../components/Meta";
|
||||
import Dropzone from "../../components/upload/Dropzone";
|
||||
@@ -19,7 +19,6 @@ import { CreateShare, Share } from "../../types/share.type";
|
||||
import toast from "../../utils/toast.util";
|
||||
|
||||
const promiseLimit = pLimit(3);
|
||||
const chunkSize = 10 * 1024 * 1024; // 10MB
|
||||
let errorToastShown = false;
|
||||
let createdShare: Share;
|
||||
|
||||
@@ -38,7 +37,10 @@ const Upload = ({
|
||||
const [files, setFiles] = useState<FileUpload[]>([]);
|
||||
const [isUploading, setisUploading] = useState(false);
|
||||
|
||||
const chunkSize = useRef(parseInt(config.get("share.chunkSize")));
|
||||
|
||||
maxShareSize ??= parseInt(config.get("share.maxSize"));
|
||||
const autoOpenCreateUploadModal = config.get("share.autoOpenShareModal");
|
||||
|
||||
const uploadFiles = async (share: CreateShare, files: FileUpload[]) => {
|
||||
setisUploading(true);
|
||||
@@ -54,7 +56,7 @@ const Upload = ({
|
||||
const fileUploadPromises = files.map(async (file, fileIndex) =>
|
||||
// Limit the number of concurrent uploads to 3
|
||||
promiseLimit(async () => {
|
||||
let fileId: string;
|
||||
let fileId;
|
||||
|
||||
const setFileProgress = (progress: number) => {
|
||||
setFiles((files) =>
|
||||
@@ -69,38 +71,30 @@ const Upload = ({
|
||||
|
||||
setFileProgress(1);
|
||||
|
||||
let chunks = Math.ceil(file.size / chunkSize);
|
||||
let chunks = Math.ceil(file.size / chunkSize.current);
|
||||
|
||||
// If the file is 0 bytes, we still need to upload 1 chunk
|
||||
if (chunks == 0) chunks++;
|
||||
|
||||
for (let chunkIndex = 0; chunkIndex < chunks; chunkIndex++) {
|
||||
const from = chunkIndex * chunkSize;
|
||||
const to = from + chunkSize;
|
||||
const from = chunkIndex * chunkSize.current;
|
||||
const to = from + chunkSize.current;
|
||||
const blob = file.slice(from, to);
|
||||
try {
|
||||
await new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.onload = async (event) =>
|
||||
await shareService
|
||||
.uploadFile(
|
||||
createdShare.id,
|
||||
event,
|
||||
{
|
||||
id: fileId,
|
||||
name: file.name,
|
||||
},
|
||||
chunkIndex,
|
||||
chunks,
|
||||
)
|
||||
.then((response) => {
|
||||
fileId = response.id;
|
||||
resolve(response);
|
||||
})
|
||||
.catch(reject);
|
||||
|
||||
reader.readAsDataURL(blob);
|
||||
});
|
||||
await shareService
|
||||
.uploadFile(
|
||||
createdShare.id,
|
||||
blob,
|
||||
{
|
||||
id: fileId,
|
||||
name: file.name,
|
||||
},
|
||||
chunkIndex,
|
||||
chunks,
|
||||
)
|
||||
.then((response) => {
|
||||
fileId = response.id;
|
||||
});
|
||||
|
||||
setFileProgress(((chunkIndex + 1) / chunks) * 100);
|
||||
} catch (e) {
|
||||
@@ -128,7 +122,6 @@ const Upload = ({
|
||||
};
|
||||
|
||||
const showCreateUploadModalCallback = (files: FileUpload[]) => {
|
||||
setFiles(files);
|
||||
showCreateUploadModal(
|
||||
modals,
|
||||
{
|
||||
@@ -146,6 +139,15 @@ const Upload = ({
|
||||
);
|
||||
};
|
||||
|
||||
const handleDropzoneFilesChanged = (files: FileUpload[]) => {
|
||||
if (autoOpenCreateUploadModal) {
|
||||
setFiles(files);
|
||||
showCreateUploadModalCallback(files);
|
||||
} else {
|
||||
setFiles((oldArr) => [...oldArr, ...files]);
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
// Check if there are any files that failed to upload
|
||||
const fileErrorCount = files.filter(
|
||||
@@ -198,8 +200,13 @@ const Upload = ({
|
||||
</Button>
|
||||
</Group>
|
||||
<Dropzone
|
||||
title={
|
||||
!autoOpenCreateUploadModal && files.length > 0
|
||||
? t("share.edit.append-upload")
|
||||
: undefined
|
||||
}
|
||||
maxShareSize={maxShareSize}
|
||||
showCreateUploadModalCallback={showCreateUploadModalCallback}
|
||||
onFilesChanged={handleDropzoneFilesChanged}
|
||||
isUploading={isUploading}
|
||||
/>
|
||||
{files.length > 0 && (
|
||||
|
||||
@@ -36,8 +36,10 @@ const signOut = async () => {
|
||||
const refreshAccessToken = async () => {
|
||||
try {
|
||||
const accessToken = getCookie("access_token") as string;
|
||||
|
||||
// If the access token expires in less than 2 minutes refresh it
|
||||
if (
|
||||
!accessToken ||
|
||||
accessToken &&
|
||||
(jose.decodeJwt(accessToken).exp ?? 0) * 1000 < Date.now() + 2 * 60 * 1000
|
||||
) {
|
||||
await api.post("/auth/token");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { setCookie } from "cookies-next";
|
||||
import { deleteCookie, setCookie } from "cookies-next";
|
||||
import mime from "mime-types";
|
||||
import { FileUploadResponse } from "../types/File.type";
|
||||
|
||||
@@ -11,12 +11,18 @@ import {
|
||||
} from "../types/share.type";
|
||||
import api from "./api.service";
|
||||
|
||||
const list = async (): Promise<MyShare[]> => {
|
||||
return (await api.get(`shares/all`)).data;
|
||||
};
|
||||
|
||||
const create = async (share: CreateShare) => {
|
||||
return (await api.post("shares", share)).data;
|
||||
};
|
||||
|
||||
const completeShare = async (id: string) => {
|
||||
return (await api.post(`shares/${id}/complete`)).data;
|
||||
const response = (await api.post(`shares/${id}/complete`)).data;
|
||||
deleteCookie("reverse_share_token");
|
||||
return response;
|
||||
};
|
||||
|
||||
const revertComplete = async (id: string) => {
|
||||
@@ -77,7 +83,7 @@ const removeFile = async (shareId: string, fileId: string) => {
|
||||
|
||||
const uploadFile = async (
|
||||
shareId: string,
|
||||
readerEvent: ProgressEvent<FileReader>,
|
||||
chunk: Blob,
|
||||
file: {
|
||||
id?: string;
|
||||
name: string;
|
||||
@@ -85,10 +91,8 @@ const uploadFile = async (
|
||||
chunkIndex: number,
|
||||
totalChunks: number,
|
||||
): Promise<FileUploadResponse> => {
|
||||
const data = readerEvent.target!.result;
|
||||
|
||||
return (
|
||||
await api.post(`shares/${shareId}/files`, data, {
|
||||
await api.post(`shares/${shareId}/files`, chunk, {
|
||||
headers: { "Content-Type": "application/octet-stream" },
|
||||
params: {
|
||||
id: file.id,
|
||||
@@ -131,6 +135,7 @@ const removeReverseShare = async (id: string) => {
|
||||
};
|
||||
|
||||
export default {
|
||||
list,
|
||||
create,
|
||||
completeShare,
|
||||
revertComplete,
|
||||
|
||||
@@ -3,11 +3,22 @@ import { Global } from "@mantine/core";
|
||||
const GlobalStyle = () => {
|
||||
return (
|
||||
<Global
|
||||
styles={() => ({
|
||||
styles={(theme) => ({
|
||||
a: {
|
||||
color: "inherit",
|
||||
textDecoration: "none",
|
||||
},
|
||||
"table.md, table.md th:nth-of-type(odd), table.md td:nth-of-type(odd)":
|
||||
{
|
||||
background:
|
||||
theme.colorScheme == "dark"
|
||||
? "rgba(50, 50, 50, 0.5)"
|
||||
: "rgba(220, 220, 220, 0.5)",
|
||||
},
|
||||
"table.md td": {
|
||||
paddingLeft: "0.5em",
|
||||
paddingRight: "0.5em",
|
||||
},
|
||||
})}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -2,15 +2,18 @@ import User from "./user.type";
|
||||
|
||||
export type Share = {
|
||||
id: string;
|
||||
name?: string;
|
||||
files: any;
|
||||
creator: User;
|
||||
creator?: User;
|
||||
description?: string;
|
||||
expiration: Date;
|
||||
size: number;
|
||||
hasPassword: boolean;
|
||||
};
|
||||
|
||||
export type CreateShare = {
|
||||
id: string;
|
||||
name?: string;
|
||||
description?: string;
|
||||
recipients: string[];
|
||||
expiration: string;
|
||||
|
||||
7
frontend/src/utils/router.util.ts
Normal file
7
frontend/src/utils/router.util.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export function safeRedirectPath(path: string | undefined) {
|
||||
if (!path) return "/";
|
||||
|
||||
if (!path.startsWith("/")) return `/${path}`;
|
||||
|
||||
return path;
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
events {}
|
||||
|
||||
http {
|
||||
server {
|
||||
listen 3000;
|
||||
client_max_body_size 100M;
|
||||
|
||||
location /api {
|
||||
proxy_pass http://localhost:8080;
|
||||
proxy_set_header X-Forwarded-Host $host:$server_port;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:3333;
|
||||
proxy_set_header X-Forwarded-Host $host:$server_port;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
}
|
||||
1615
package-lock.json
generated
Normal file
1615
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pingvin-share",
|
||||
"version": "0.20.2",
|
||||
"version": "0.25.0",
|
||||
"scripts": {
|
||||
"format": "cd frontend && npm run format && cd ../backend && npm run format",
|
||||
"lint": "cd frontend && npm run lint && cd ../backend && npm run lint",
|
||||
|
||||
Reference in New Issue
Block a user