Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ac81cb9ab7 | ||
|
|
b737cba35e | ||
|
|
1d51973358 | ||
|
|
589127e943 | ||
|
|
6722938ae6 | ||
|
|
9f720388ef | ||
|
|
e7b3c48ff4 | ||
|
|
0dfd4d014d | ||
|
|
ce0dc976a8 | ||
|
|
61418a1d8d | ||
|
|
1159d972a8 | ||
|
|
b6d1720fe6 | ||
|
|
dc30f4f3c9 | ||
|
|
e77edfd5d3 | ||
|
|
e848675d63 | ||
|
|
5e2d44b423 | ||
|
|
9dfb52a145 | ||
|
|
f4291421b5 | ||
|
|
28fdbc2281 | ||
|
|
2f74c87d0b | ||
|
|
dcea5ccd89 | ||
|
|
bfbc87817f | ||
|
|
a2e031326e | ||
|
|
ec92e85c8d | ||
|
|
4b642f419b | ||
|
|
75cd3895d9 | ||
|
|
d3b38b27d1 | ||
|
|
398a5532dc | ||
|
|
70b577f5ac | ||
|
|
0d71146a2c | ||
|
|
a53f0711fb | ||
|
|
8a7db6bf97 | ||
|
|
f78777b284 | ||
|
|
3a534c7512 | ||
|
|
2b7d3c0a8a | ||
|
|
7fea358410 | ||
|
|
f65c1ef7d8 | ||
|
|
9e4496dc03 | ||
|
|
235772a54b | ||
|
|
784e80db5b | ||
|
|
0442ece9ba | ||
|
|
7f9f8b6fe7 | ||
|
|
bf1b2633c8 | ||
|
|
b3ea96c191 | ||
|
|
4a7076a094 | ||
|
|
0c62485833 | ||
|
|
2c555eaf9f | ||
|
|
36afbf91b7 | ||
|
|
df1ffaa2bc | ||
|
|
53c05518df | ||
|
|
b58dcdba0b | ||
|
|
4d3aa398a2 | ||
|
|
a120d44185 | ||
|
|
362e7d4f38 | ||
|
|
f36ba8ac0a | ||
|
|
30caeb5b25 | ||
|
|
bfd4049c15 | ||
|
|
856c54d5d6 | ||
|
|
6a97cc279c | ||
|
|
7e09ae1f98 |
28
.github/workflows/build-docker-image.yml
vendored
28
.github/workflows/build-docker-image.yml
vendored
@@ -11,24 +11,44 @@ jobs:
|
||||
- name: checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: |
|
||||
ghcr.io/${{ github.repository }}
|
||||
${{ github.repository }}
|
||||
tags: |
|
||||
type=semver,pattern={{version}},prefix=v
|
||||
type=semver,pattern={{major}}.{{minor}},prefix=v
|
||||
type=semver,pattern={{major}},prefix=v
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Login to Docker registry
|
||||
uses: docker/login-action@v2
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
tags: stonith404/pingvin-share:latest,stonith404/pingvin-share:${{ github.ref_name }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -44,6 +44,7 @@ yarn-error.log*
|
||||
/docs/build/
|
||||
/docs/.docusaurus
|
||||
/docs/.cache-loader
|
||||
/config.yaml
|
||||
|
||||
# Jetbrains specific (webstorm)
|
||||
.idea/**/**
|
||||
|
||||
90
CHANGELOG.md
90
CHANGELOG.md
@@ -1,3 +1,93 @@
|
||||
## [1.10.3](https://github.com/stonith404/pingvin-share/compare/v1.10.2...v1.10.3) (2025-03-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* error while signing in with OIDC if roles claim is undefined ([b737cba](https://github.com/stonith404/pingvin-share/commit/b737cba35e59255904eccae9e9de1cbd36284fb1))
|
||||
|
||||
## [1.10.2](https://github.com/stonith404/pingvin-share/compare/v1.10.1...v1.10.2) (2025-03-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* don't throw error if group claim is missing ([e7b3c48](https://github.com/stonith404/pingvin-share/commit/e7b3c48ff48bd7cfb206c32ea97862b757057573))
|
||||
|
||||
## [1.10.1](https://github.com/stonith404/pingvin-share/compare/v1.10.0...v1.10.1) (2025-02-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* admin property can't be set if OAuth2 user email doesn't match actual user's email ([1159d97](https://github.com/stonith404/pingvin-share/commit/1159d972a8c32a0d6bf53d161c2fc09e6f8dfb28))
|
||||
* type error when trying to run the seed command ([b6d1720](https://github.com/stonith404/pingvin-share/commit/b6d1720fe637497ad624c6cdc40058b1b0f0c74c))
|
||||
|
||||
## [1.10.0](https://github.com/stonith404/pingvin-share/compare/v1.9.1...v1.10.0) (2025-02-28)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add ability to configure application with a config file ([#740](https://github.com/stonith404/pingvin-share/issues/740)) ([9dfb52a](https://github.com/stonith404/pingvin-share/commit/9dfb52a14587065dacd9fcd2bb2efa1b458880a5))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* confusing config configuration description for session duration ([28fdbc2](https://github.com/stonith404/pingvin-share/commit/28fdbc22814260040c78e27a62d86b84df83751f))
|
||||
* page crash if new release check fails ([e848675](https://github.com/stonith404/pingvin-share/commit/e848675d634a08efe3aac4e02d98136c36b36bfc))
|
||||
* smtp password gets autofilled in Firefox ([f429142](https://github.com/stonith404/pingvin-share/commit/f4291421b5531b0eeae5bcca9139f80c3cd43b4b))
|
||||
|
||||
## [1.9.1](https://github.com/stonith404/pingvin-share/compare/v1.9.0...v1.9.1) (2025-02-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* page doesn't reload on user deletion ([a2e0313](https://github.com/stonith404/pingvin-share/commit/a2e031326e51f7663c2d864dd0d08a65f180318e))
|
||||
* redirection to the OIDC end session endpoint ([ec92e85](https://github.com/stonith404/pingvin-share/commit/ec92e85c8d294b30117ad2599ad03b0bbb04574c))
|
||||
|
||||
## [1.9.0](https://github.com/stonith404/pingvin-share/compare/v1.8.2...v1.9.0) (2025-02-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* ability to add email to recipients list by clicking enter ([#760](https://github.com/stonith404/pingvin-share/issues/760)) ([70b577f](https://github.com/stonith404/pingvin-share/commit/70b577f5ac8385cfc6a22ffee4c7e317e3cc6403))
|
||||
|
||||
## [1.8.2](https://github.com/stonith404/pingvin-share/compare/v1.8.1...v1.8.2) (2025-01-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* normal share gets attached to previously visited reverse share ([3a534c7](https://github.com/stonith404/pingvin-share/commit/3a534c7512ef82f3fa982f80e364f53c957306a0))
|
||||
* wrong TOTP validation for password ([2b7d3c0](https://github.com/stonith404/pingvin-share/commit/2b7d3c0a8a3e527fc1f7f86795731d5ac77eda49))
|
||||
|
||||
## [1.8.1](https://github.com/stonith404/pingvin-share/compare/v1.8.0...v1.8.1) (2025-01-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* wrong validation for expiration in reverse share modal ([b3ea96c](https://github.com/stonith404/pingvin-share/commit/b3ea96c1916980863fc6903c64cd2a7b32d66cfb))
|
||||
|
||||
## [1.8.0](https://github.com/stonith404/pingvin-share/compare/v1.7.2...v1.8.0) (2025-01-02)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add legal page with configuration options ([#724](https://github.com/stonith404/pingvin-share/issues/724)) ([df1ffaa](https://github.com/stonith404/pingvin-share/commit/df1ffaa2bcc047668cdc207cf8f86d821778cf44))
|
||||
* improve UI for timespan inputs on admin page ([#726](https://github.com/stonith404/pingvin-share/issues/726)) ([36afbf9](https://github.com/stonith404/pingvin-share/commit/36afbf91b7ba13e5ce42f2d91ec9898363a560b1))
|
||||
* **MyShares:** show information about own share security options ([#720](https://github.com/stonith404/pingvin-share/issues/720)) ([b58dcdb](https://github.com/stonith404/pingvin-share/commit/b58dcdba0b8688b286be4cc71796e2862553972a))
|
||||
* **UI:** improve filesize input and use it in settings ([#721](https://github.com/stonith404/pingvin-share/issues/721)) ([53c0551](https://github.com/stonith404/pingvin-share/commit/53c05518dfef4f65d76f5a1b301d0c5f8735576a))
|
||||
|
||||
## [1.7.2](https://github.com/stonith404/pingvin-share/compare/v1.7.1...v1.7.2) (2024-12-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* crash on zip download if zip is larger than 4GB ([#709](https://github.com/stonith404/pingvin-share/issues/709)) ([bfd4049](https://github.com/stonith404/pingvin-share/commit/bfd4049c154caae037db0458863e5c8c5d398848))
|
||||
|
||||
## [1.7.1](https://github.com/stonith404/pingvin-share/compare/v1.7.0...v1.7.1) (2024-12-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* incorrect ownership of the public folder ([6a97cc2](https://github.com/stonith404/pingvin-share/commit/6a97cc279c51bf125b9b516d1795f85b208e6ad5))
|
||||
|
||||
## [1.7.0](https://github.com/stonith404/pingvin-share/compare/v1.6.1...v1.7.0) (2024-12-19)
|
||||
|
||||
|
||||
|
||||
@@ -50,11 +50,12 @@ COPY --from=backend-builder /opt/app/node_modules ./node_modules
|
||||
COPY --from=backend-builder /opt/app/dist ./dist
|
||||
COPY --from=backend-builder /opt/app/prisma ./prisma
|
||||
COPY --from=backend-builder /opt/app/package.json ./
|
||||
COPY --from=backend-builder /opt/app/tsconfig.json ./
|
||||
|
||||
WORKDIR /opt/app
|
||||
|
||||
COPY ./reverse-proxy /etc/caddy
|
||||
COPY ./scripts ./scripts
|
||||
COPY ./reverse-proxy /opt/app/reverse-proxy
|
||||
COPY ./scripts/docker ./scripts/docker
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ Pingvin Share is a self-hosted file sharing platform and an alternative for WeTr
|
||||
- Reverse shares
|
||||
- OIDC and LDAP authentication
|
||||
- Integration with ClamAV for security scans
|
||||
- Different file providers: local storage and S3
|
||||
|
||||
## 🐧 Get to know Pingvin Share
|
||||
|
||||
|
||||
4533
backend/package-lock.json
generated
4533
backend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pingvin-share-backend",
|
||||
"version": "1.7.0",
|
||||
"version": "1.10.3",
|
||||
"scripts": {
|
||||
"build": "nest build",
|
||||
"dev": "cross-env NODE_ENV=development nest start --watch",
|
||||
@@ -13,7 +13,7 @@
|
||||
"seed": "ts-node prisma/seed/config.seed.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-s3": "^3.679.0",
|
||||
"@aws-sdk/client-s3": "^3.758.0",
|
||||
"@nestjs/cache-manager": "^2.2.2",
|
||||
"@nestjs/common": "^10.4.3",
|
||||
"@nestjs/config": "^3.2.3",
|
||||
@@ -24,7 +24,7 @@
|
||||
"@nestjs/schedule": "^4.1.1",
|
||||
"@nestjs/swagger": "^7.4.2",
|
||||
"@nestjs/throttler": "^6.2.1",
|
||||
"@prisma/client": "^5.19.1",
|
||||
"@prisma/client": "^6.4.1",
|
||||
"@types/jmespath": "^0.15.2",
|
||||
"archiver": "^7.0.1",
|
||||
"argon2": "^0.41.1",
|
||||
@@ -50,7 +50,8 @@
|
||||
"rimraf": "^6.0.1",
|
||||
"rxjs": "^7.8.1",
|
||||
"sharp": "^0.33.5",
|
||||
"ts-node": "^10.9.2"
|
||||
"ts-node": "^10.9.2",
|
||||
"yaml": "^2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/cli": "^10.4.5",
|
||||
@@ -78,7 +79,7 @@
|
||||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"newman": "^6.2.1",
|
||||
"prettier": "^3.3.3",
|
||||
"prisma": "^5.19.1",
|
||||
"prisma": "^6.4.1",
|
||||
"source-map-support": "^0.5.21",
|
||||
"ts-loader": "^9.5.1",
|
||||
"tsconfig-paths": "4.2.0",
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
UPDATE Config SET `value` = `value` || ' hours' WHERE name = "maxExpiration" OR name = "sessionDuration";
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Prisma, PrismaClient } from "@prisma/client";
|
||||
import * as crypto from "crypto";
|
||||
|
||||
const configVariables: ConfigVariables = {
|
||||
export const configVariables = {
|
||||
internal: {
|
||||
jwtSecret: {
|
||||
type: "string",
|
||||
@@ -30,8 +30,8 @@ const configVariables: ConfigVariables = {
|
||||
secret: false,
|
||||
},
|
||||
sessionDuration: {
|
||||
type: "number",
|
||||
defaultValue: "2160",
|
||||
type: "timespan",
|
||||
defaultValue: "3 months",
|
||||
secret: false,
|
||||
},
|
||||
},
|
||||
@@ -47,8 +47,8 @@ const configVariables: ConfigVariables = {
|
||||
secret: false,
|
||||
},
|
||||
maxExpiration: {
|
||||
type: "number",
|
||||
defaultValue: "0",
|
||||
type: "timespan",
|
||||
defaultValue: "0 days",
|
||||
secret: false,
|
||||
},
|
||||
shareIdLength: {
|
||||
@@ -57,7 +57,7 @@ const configVariables: ConfigVariables = {
|
||||
secret: false,
|
||||
},
|
||||
maxSize: {
|
||||
type: "number",
|
||||
type: "filesize",
|
||||
defaultValue: "1000000000",
|
||||
secret: false,
|
||||
},
|
||||
@@ -66,7 +66,7 @@ const configVariables: ConfigVariables = {
|
||||
defaultValue: "9",
|
||||
},
|
||||
chunkSize: {
|
||||
type: "number",
|
||||
type: "filesize",
|
||||
defaultValue: "10000000",
|
||||
secret: false,
|
||||
},
|
||||
@@ -181,12 +181,12 @@ const configVariables: ConfigVariables = {
|
||||
},
|
||||
searchQuery: {
|
||||
type: "string",
|
||||
defaultValue: ""
|
||||
defaultValue: "",
|
||||
},
|
||||
|
||||
adminGroups: {
|
||||
type: "string",
|
||||
defaultValue: ""
|
||||
defaultValue: "",
|
||||
},
|
||||
|
||||
fieldNameMemberOf: {
|
||||
@@ -196,18 +196,18 @@ const configVariables: ConfigVariables = {
|
||||
fieldNameEmail: {
|
||||
type: "string",
|
||||
defaultValue: "userPrincipalName",
|
||||
}
|
||||
},
|
||||
},
|
||||
oauth: {
|
||||
"allowRegistration": {
|
||||
allowRegistration: {
|
||||
type: "boolean",
|
||||
defaultValue: "true",
|
||||
},
|
||||
"ignoreTotp": {
|
||||
ignoreTotp: {
|
||||
type: "boolean",
|
||||
defaultValue: "true",
|
||||
},
|
||||
"disablePassword": {
|
||||
disablePassword: {
|
||||
type: "boolean",
|
||||
defaultValue: "false",
|
||||
secret: false,
|
||||
@@ -349,7 +349,49 @@ const configVariables: ConfigVariables = {
|
||||
defaultValue: "",
|
||||
obscured: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
legal: {
|
||||
enabled: {
|
||||
type: "boolean",
|
||||
defaultValue: "false",
|
||||
secret: false,
|
||||
},
|
||||
imprintText: {
|
||||
type: "text",
|
||||
defaultValue: "",
|
||||
secret: false,
|
||||
},
|
||||
imprintUrl: {
|
||||
type: "string",
|
||||
defaultValue: "",
|
||||
secret: false,
|
||||
},
|
||||
privacyPolicyText: {
|
||||
type: "text",
|
||||
defaultValue: "",
|
||||
secret: false,
|
||||
},
|
||||
privacyPolicyUrl: {
|
||||
type: "string",
|
||||
defaultValue: "",
|
||||
secret: false,
|
||||
},
|
||||
},
|
||||
} satisfies ConfigVariables;
|
||||
|
||||
export type YamlConfig = {
|
||||
[Category in keyof typeof configVariables]: {
|
||||
[Key in keyof (typeof configVariables)[Category]]: string;
|
||||
};
|
||||
} & {
|
||||
initUser: {
|
||||
enabled: string;
|
||||
username: string;
|
||||
email: string;
|
||||
password: string;
|
||||
isAdmin: boolean;
|
||||
ldapDN: string;
|
||||
};
|
||||
};
|
||||
|
||||
type ConfigVariables = {
|
||||
@@ -406,7 +448,7 @@ async function migrateConfigVariables() {
|
||||
for (const existingConfigVariable of existingConfigVariables) {
|
||||
const configVariable =
|
||||
configVariables[existingConfigVariable.category]?.[
|
||||
existingConfigVariable.name
|
||||
existingConfigVariable.name
|
||||
];
|
||||
|
||||
// Delete the config variable if it doesn't exist in the seed
|
||||
|
||||
@@ -269,10 +269,7 @@ export class AuthService {
|
||||
signOutFromProviderSupportedAndActivated
|
||||
) {
|
||||
const configuration = await provider.getConfiguration();
|
||||
if (
|
||||
configuration.frontchannel_logout_supported &&
|
||||
URL.canParse(configuration.end_session_endpoint)
|
||||
) {
|
||||
if (URL.canParse(configuration.end_session_endpoint)) {
|
||||
const redirectURI = new URL(configuration.end_session_endpoint);
|
||||
redirectURI.searchParams.append(
|
||||
"post_logout_redirect_uri",
|
||||
@@ -306,11 +303,12 @@ export class AuthService {
|
||||
}
|
||||
|
||||
async createRefreshToken(userId: string, idToken?: string) {
|
||||
const sessionDuration = this.config.get("general.sessionDuration");
|
||||
const { id, token } = await this.prisma.refreshToken.create({
|
||||
data: {
|
||||
userId,
|
||||
expiresAt: moment()
|
||||
.add(this.config.get("general.sessionDuration"), "hours")
|
||||
.add(sessionDuration.value, sessionDuration.unit)
|
||||
.toDate(),
|
||||
oauthIDToken: idToken,
|
||||
},
|
||||
@@ -341,14 +339,20 @@ export class AuthService {
|
||||
secure: isSecure,
|
||||
maxAge: 1000 * 60 * 60 * 24 * 30 * 3, // 3 months
|
||||
});
|
||||
if (refreshToken)
|
||||
if (refreshToken) {
|
||||
const now = moment();
|
||||
const sessionDuration = this.config.get("general.sessionDuration");
|
||||
const maxAge = moment(now)
|
||||
.add(sessionDuration.value, sessionDuration.unit)
|
||||
.diff(now);
|
||||
response.cookie("refresh_token", refreshToken, {
|
||||
path: "/api/auth/token",
|
||||
httpOnly: true,
|
||||
sameSite: "strict",
|
||||
secure: isSecure,
|
||||
maxAge: 1000 * 60 * 60 * this.config.get("general.sessionDuration"),
|
||||
maxAge,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import { PickType } from "@nestjs/swagger";
|
||||
import { UserDTO } from "src/user/dto/user.dto";
|
||||
import { IsString } from "class-validator";
|
||||
|
||||
export class EnableTotpDTO extends PickType(UserDTO, ["password"] as const) {}
|
||||
export class EnableTotpDTO {
|
||||
@IsString()
|
||||
password: string;
|
||||
}
|
||||
|
||||
@@ -2,11 +2,17 @@ import {
|
||||
BadRequestException,
|
||||
Inject,
|
||||
Injectable,
|
||||
Logger,
|
||||
NotFoundException,
|
||||
} from "@nestjs/common";
|
||||
import { Config } from "@prisma/client";
|
||||
import * as argon from "argon2";
|
||||
import { EventEmitter } from "events";
|
||||
import * as fs from "fs";
|
||||
import { PrismaService } from "src/prisma/prisma.service";
|
||||
import { stringToTimespan } from "src/utils/date.util";
|
||||
import { parse as yamlParse } from "yaml";
|
||||
import { YamlConfig } from "../../prisma/seed/config.seed";
|
||||
|
||||
/**
|
||||
* ConfigService extends EventEmitter to allow listening for config updates,
|
||||
@@ -14,6 +20,9 @@ import { PrismaService } from "src/prisma/prisma.service";
|
||||
*/
|
||||
@Injectable()
|
||||
export class ConfigService extends EventEmitter {
|
||||
yamlConfig?: YamlConfig;
|
||||
logger = new Logger(ConfigService.name);
|
||||
|
||||
constructor(
|
||||
@Inject("CONFIG_VARIABLES") private configVariables: Config[],
|
||||
private prisma: PrismaService,
|
||||
@@ -21,6 +30,65 @@ export class ConfigService extends EventEmitter {
|
||||
super();
|
||||
}
|
||||
|
||||
async onModuleInit() {
|
||||
await this.loadYamlConfig();
|
||||
|
||||
if (this.yamlConfig) {
|
||||
await this.migrateInitUser();
|
||||
}
|
||||
}
|
||||
|
||||
private async loadYamlConfig() {
|
||||
let configFile: string = "";
|
||||
try {
|
||||
configFile = fs.readFileSync("../config.yaml", "utf8");
|
||||
} catch (e) {
|
||||
this.logger.log(
|
||||
"Config.yaml is not set. Falling back to UI configuration.",
|
||||
);
|
||||
}
|
||||
try {
|
||||
this.yamlConfig = yamlParse(configFile);
|
||||
if (this.yamlConfig) {
|
||||
for (const configVariable of this.configVariables) {
|
||||
const category = this.yamlConfig[configVariable.category];
|
||||
if (!category) continue;
|
||||
|
||||
configVariable.value = category[configVariable.name];
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
this.logger.error(
|
||||
"Failed to parse config.yaml. Falling back to UI configuration: ",
|
||||
e,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private async migrateInitUser(): Promise<void> {
|
||||
if (!this.yamlConfig.initUser.enabled) return;
|
||||
|
||||
const userCount = await this.prisma.user.count({
|
||||
where: { isAdmin: true },
|
||||
});
|
||||
if (userCount === 1) {
|
||||
this.logger.log(
|
||||
"Skip initial user creation. Admin user is already existent.",
|
||||
);
|
||||
return;
|
||||
}
|
||||
await this.prisma.user.create({
|
||||
data: {
|
||||
email: this.yamlConfig.initUser.email,
|
||||
username: this.yamlConfig.initUser.username,
|
||||
password: this.yamlConfig.initUser.password
|
||||
? await argon.hash(this.yamlConfig.initUser.password)
|
||||
: null,
|
||||
isAdmin: this.yamlConfig.initUser.isAdmin,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
get(key: `${string}.${string}`): any {
|
||||
const configVariable = this.configVariables.filter(
|
||||
(variable) => `${variable.category}.${variable.name}` == key,
|
||||
@@ -30,31 +98,31 @@ export class ConfigService extends EventEmitter {
|
||||
|
||||
const value = configVariable.value ?? configVariable.defaultValue;
|
||||
|
||||
if (configVariable.type == "number") return parseInt(value);
|
||||
if (configVariable.type == "number" || configVariable.type == "filesize")
|
||||
return parseInt(value);
|
||||
if (configVariable.type == "boolean") return value == "true";
|
||||
if (configVariable.type == "string" || configVariable.type == "text")
|
||||
return value;
|
||||
if (configVariable.type == "timespan") return stringToTimespan(value);
|
||||
}
|
||||
|
||||
async getByCategory(category: string) {
|
||||
const configVariables = await this.prisma.config.findMany({
|
||||
orderBy: { order: "asc" },
|
||||
where: { category, locked: { equals: false } },
|
||||
});
|
||||
const configVariables = this.configVariables
|
||||
.filter((c) => !c.locked && category == c.category)
|
||||
.sort((c) => c.order);
|
||||
|
||||
return configVariables.map((variable) => {
|
||||
return {
|
||||
...variable,
|
||||
key: `${variable.category}.${variable.name}`,
|
||||
value: variable.value ?? variable.defaultValue,
|
||||
allowEdit: this.isEditAllowed(),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
async list() {
|
||||
const configVariables = await this.prisma.config.findMany({
|
||||
where: { secret: { equals: false } },
|
||||
});
|
||||
const configVariables = this.configVariables.filter((c) => !c.secret);
|
||||
|
||||
return configVariables.map((variable) => {
|
||||
return {
|
||||
@@ -66,6 +134,11 @@ export class ConfigService extends EventEmitter {
|
||||
}
|
||||
|
||||
async updateMany(data: { key: string; value: string | number | boolean }[]) {
|
||||
if (!this.isEditAllowed())
|
||||
throw new BadRequestException(
|
||||
"You are only allowed to update config variables via the config.yaml file",
|
||||
);
|
||||
|
||||
const response: Config[] = [];
|
||||
|
||||
for (const variable of data) {
|
||||
@@ -76,6 +149,11 @@ export class ConfigService extends EventEmitter {
|
||||
}
|
||||
|
||||
async update(key: string, value: string | number | boolean) {
|
||||
if (!this.isEditAllowed())
|
||||
throw new BadRequestException(
|
||||
"You are only allowed to update config variables via the config.yaml file",
|
||||
);
|
||||
|
||||
const configVariable = await this.prisma.config.findUnique({
|
||||
where: {
|
||||
name_category: {
|
||||
@@ -93,7 +171,8 @@ export class ConfigService extends EventEmitter {
|
||||
} else if (
|
||||
typeof value != configVariable.type &&
|
||||
typeof value == "string" &&
|
||||
configVariable.type != "text"
|
||||
configVariable.type != "text" &&
|
||||
configVariable.type != "timespan"
|
||||
) {
|
||||
throw new BadRequestException(
|
||||
`Config variable must be of type ${configVariable.type}`,
|
||||
@@ -131,6 +210,7 @@ export class ConfigService extends EventEmitter {
|
||||
condition: (value: number) => value >= 0 && value <= 9,
|
||||
message: "Zip compression level must be between 0 and 9",
|
||||
},
|
||||
// TODO add validation for timespan type
|
||||
];
|
||||
|
||||
const validation = validations.find((validation) => validation.key == key);
|
||||
@@ -138,4 +218,8 @@ export class ConfigService extends EventEmitter {
|
||||
throw new BadRequestException(validation.message);
|
||||
}
|
||||
}
|
||||
|
||||
isEditAllowed(): boolean {
|
||||
return this.yamlConfig === undefined || this.yamlConfig === null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,9 @@ export class AdminConfigDTO extends ConfigDTO {
|
||||
@Expose()
|
||||
obscured: boolean;
|
||||
|
||||
@Expose()
|
||||
allowEdit: boolean;
|
||||
|
||||
from(partial: Partial<AdminConfigDTO>) {
|
||||
return plainToClass(AdminConfigDTO, partial, {
|
||||
excludeExtraneousValues: true,
|
||||
|
||||
@@ -54,13 +54,14 @@ export class FileController {
|
||||
@Res({ passthrough: true }) res: Response,
|
||||
@Param("shareId") shareId: string,
|
||||
) {
|
||||
const zip = await this.fileService.getZip(shareId);
|
||||
const zipStream = this.fileService.getZip(shareId);
|
||||
|
||||
res.set({
|
||||
"Content-Type": "application/zip",
|
||||
"Content-Disposition": contentDisposition(`${shareId}.zip`),
|
||||
});
|
||||
|
||||
return new StreamableFile(zip);
|
||||
return new StreamableFile(zipStream);
|
||||
}
|
||||
|
||||
@Get(":fileId")
|
||||
|
||||
@@ -61,7 +61,7 @@ export class FileService {
|
||||
|
||||
getZip(shareId: string) {
|
||||
const storageService = this.getStorageService();
|
||||
return this.streamToUint8Array(storageService.getZip(shareId) as Readable);
|
||||
return storageService.getZip(shareId) as Readable;
|
||||
}
|
||||
|
||||
private async streamToUint8Array(stream: Readable): Promise<Uint8Array> {
|
||||
|
||||
@@ -63,7 +63,7 @@ export class OAuthService {
|
||||
},
|
||||
});
|
||||
if (oauthUser) {
|
||||
await this.updateIsAdmin(user);
|
||||
await this.updateIsAdmin(oauthUser.userId, user.isAdmin);
|
||||
const updatedUser = await this.prisma.user.findFirst({
|
||||
where: {
|
||||
id: oauthUser.userId,
|
||||
@@ -170,7 +170,7 @@ export class OAuthService {
|
||||
userId: existingUser.id,
|
||||
},
|
||||
});
|
||||
await this.updateIsAdmin(user);
|
||||
await this.updateIsAdmin(existingUser.id, user.isAdmin);
|
||||
return this.auth.generateToken(existingUser, { idToken: user.idToken });
|
||||
}
|
||||
|
||||
@@ -196,15 +196,14 @@ export class OAuthService {
|
||||
return result;
|
||||
}
|
||||
|
||||
private async updateIsAdmin(user: OAuthSignInDto) {
|
||||
if ("isAdmin" in user)
|
||||
await this.prisma.user.update({
|
||||
where: {
|
||||
email: user.email,
|
||||
},
|
||||
data: {
|
||||
isAdmin: user.isAdmin,
|
||||
},
|
||||
});
|
||||
private async updateIsAdmin(userId: string, isAdmin?: boolean) {
|
||||
await this.prisma.user.update({
|
||||
where: {
|
||||
id: userId,
|
||||
},
|
||||
data: {
|
||||
isAdmin: isAdmin === true,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,38 +147,36 @@ export abstract class GenericOidcProvider implements OAuthProvider<OidcToken> {
|
||||
|
||||
if (roleConfig?.path) {
|
||||
// A path to read roles from the token is configured
|
||||
let roles: string[] | null;
|
||||
let roles: string[] = [];
|
||||
try {
|
||||
roles = jmespath.search(idTokenData, roleConfig.path);
|
||||
const rolesClaim = jmespath.search(idTokenData, roleConfig.path);
|
||||
if (Array.isArray(rolesClaim)) {
|
||||
roles = rolesClaim;
|
||||
}
|
||||
} catch (e) {
|
||||
roles = null;
|
||||
}
|
||||
if (Array.isArray(roles)) {
|
||||
// Roles are found in the token
|
||||
if (
|
||||
roleConfig.generalAccess &&
|
||||
!roles.includes(roleConfig.generalAccess)
|
||||
) {
|
||||
// Role for general access is configured and the user does not have it
|
||||
this.logger.error(
|
||||
`User roles ${roles} do not include ${roleConfig.generalAccess}`,
|
||||
);
|
||||
throw new ErrorPageException("user_not_allowed");
|
||||
}
|
||||
if (roleConfig.adminAccess) {
|
||||
// Role for admin access is configured
|
||||
isAdmin = roles.includes(roleConfig.adminAccess);
|
||||
}
|
||||
} else {
|
||||
this.logger.error(
|
||||
this.logger.warn(
|
||||
`Roles not found at path ${roleConfig.path} in ID Token ${JSON.stringify(
|
||||
idTokenData,
|
||||
undefined,
|
||||
2,
|
||||
)}`,
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
roleConfig.generalAccess &&
|
||||
!roles.includes(roleConfig.generalAccess)
|
||||
) {
|
||||
// Role for general access is configured and the user does not have it
|
||||
this.logger.error(
|
||||
`User roles ${roles} do not include ${roleConfig.generalAccess}`,
|
||||
);
|
||||
throw new ErrorPageException("user_not_allowed");
|
||||
}
|
||||
if (roleConfig.adminAccess) {
|
||||
// Role for admin access is configured
|
||||
isAdmin = roles.includes(roleConfig.adminAccess);
|
||||
}
|
||||
}
|
||||
|
||||
if (!username) {
|
||||
|
||||
@@ -26,10 +26,11 @@ export class ReverseShareService {
|
||||
.toDate();
|
||||
|
||||
const parsedExpiration = parseRelativeDateToAbsolute(data.shareExpiration);
|
||||
const maxExpiration = this.config.get("share.maxExpiration");
|
||||
if (
|
||||
this.config.get("share.maxExpiration") !== 0 &&
|
||||
maxExpiration.value !== 0 &&
|
||||
parsedExpiration >
|
||||
moment().add(this.config.get("share.maxExpiration"), "hours").toDate()
|
||||
moment().add(maxExpiration.value, maxExpiration.unit).toDate()
|
||||
) {
|
||||
throw new BadRequestException(
|
||||
"Expiration date exceeds maximum expiration date",
|
||||
|
||||
@@ -2,6 +2,7 @@ import { Expose, plainToClass, Type } from "class-transformer";
|
||||
import { ShareDTO } from "./share.dto";
|
||||
import { FileDTO } from "../../file/dto/file.dto";
|
||||
import { OmitType } from "@nestjs/swagger";
|
||||
import { MyShareSecurityDTO } from "./myShareSecurity.dto";
|
||||
|
||||
export class MyShareDTO extends OmitType(ShareDTO, [
|
||||
"files",
|
||||
@@ -21,6 +22,9 @@ export class MyShareDTO extends OmitType(ShareDTO, [
|
||||
@Type(() => OmitType(FileDTO, ["share", "from"] as const))
|
||||
files: Omit<FileDTO, "share" | "from">[];
|
||||
|
||||
@Expose()
|
||||
security?: MyShareSecurityDTO;
|
||||
|
||||
from(partial: Partial<MyShareDTO>) {
|
||||
return plainToClass(MyShareDTO, partial, { excludeExtraneousValues: true });
|
||||
}
|
||||
|
||||
9
backend/src/share/dto/myShareSecurity.dto.ts
Normal file
9
backend/src/share/dto/myShareSecurity.dto.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Expose } from "class-transformer";
|
||||
|
||||
export class MyShareSecurityDTO {
|
||||
@Expose()
|
||||
passwordProtected: boolean;
|
||||
|
||||
@Expose()
|
||||
maxViews: number;
|
||||
}
|
||||
@@ -56,13 +56,12 @@ export class ShareService {
|
||||
|
||||
const expiresNever = moment(0).toDate() == parsedExpiration;
|
||||
|
||||
const maxExpiration = this.config.get("share.maxExpiration");
|
||||
if (
|
||||
this.config.get("share.maxExpiration") !== 0 &&
|
||||
maxExpiration.value !== 0 &&
|
||||
(expiresNever ||
|
||||
parsedExpiration >
|
||||
moment()
|
||||
.add(this.config.get("share.maxExpiration"), "hours")
|
||||
.toDate())
|
||||
moment().add(maxExpiration.value, maxExpiration.unit).toDate())
|
||||
) {
|
||||
throw new BadRequestException(
|
||||
"Expiration date exceeds maximum expiration date",
|
||||
@@ -233,7 +232,7 @@ export class ShareService {
|
||||
orderBy: {
|
||||
expiration: "desc",
|
||||
},
|
||||
include: { recipients: true, files: true },
|
||||
include: { recipients: true, files: true, security: true },
|
||||
});
|
||||
|
||||
return shares.map((share) => {
|
||||
@@ -241,6 +240,10 @@ export class ShareService {
|
||||
...share,
|
||||
size: share.files.reduce((acc, file) => acc + parseInt(file.size), 0),
|
||||
recipients: share.recipients.map((recipients) => recipients.email),
|
||||
security: {
|
||||
maxViews: share.security?.maxViews,
|
||||
passwordProtected: !!share.security?.password,
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,3 +10,20 @@ export function parseRelativeDateToAbsolute(relativeDate: string) {
|
||||
)
|
||||
.toDate();
|
||||
}
|
||||
|
||||
type Timespan = {
|
||||
value: number;
|
||||
unit: "minutes" | "hours" | "days" | "weeks" | "months" | "years";
|
||||
};
|
||||
|
||||
export function stringToTimespan(value: string): Timespan {
|
||||
const [time, unit] = value.split(" ");
|
||||
return {
|
||||
value: parseInt(time),
|
||||
unit: unit as Timespan["unit"],
|
||||
};
|
||||
}
|
||||
|
||||
export function timespanToString(timespan: Timespan) {
|
||||
return `${timespan.value} ${timespan.unit}`;
|
||||
}
|
||||
|
||||
226
config.example.yaml
Normal file
226
config.example.yaml
Normal file
@@ -0,0 +1,226 @@
|
||||
#This configuration is pre-filled with the default values.
|
||||
#You can remove keys you don't want to set. If a key is missing, the value set in the UI will be used; if that is also unset, the default value applies.
|
||||
|
||||
general:
|
||||
#Name of the application
|
||||
appName: Pingvin Share
|
||||
#On which URL Pingvin Share is available
|
||||
appUrl: http://localhost:3000
|
||||
#Whether to set the secure flag on cookies. If enabled, the site will not function when accessed over HTTP.
|
||||
secureCookies: "false"
|
||||
#Whether to show the home page
|
||||
showHomePage: "true"
|
||||
#Time in hours after which a user must log in again (default: 3 months).
|
||||
sessionDuration: 3 months
|
||||
share:
|
||||
#Whether registration is allowed
|
||||
allowRegistration: "true"
|
||||
#Whether unauthenticated users can create shares
|
||||
allowUnauthenticatedShares: "false"
|
||||
#Maximum share expiration. Set to 0 to allow unlimited expiration.
|
||||
maxExpiration: 0 days
|
||||
#Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.
|
||||
shareIdLength: "8"
|
||||
#Maximum share size
|
||||
maxSize: "1000000000"
|
||||
#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.
|
||||
zipCompressionLevel: "9"
|
||||
#Adjust the chunk size 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 make uploads faster for stable connections.
|
||||
chunkSize: "10000000"
|
||||
#The share creation modal automatically appears when a user selects files, eliminating the need to manually click the button.
|
||||
autoOpenShareModal: "false"
|
||||
email:
|
||||
#Whether to allow email sharing with recipients. Only enable this if SMTP is activated.
|
||||
enableShareEmailRecipients: "false"
|
||||
#Subject of the email which gets sent to the share recipients.
|
||||
shareRecipientsSubject: Files shared with you
|
||||
#Message which gets sent to the share recipients. Available variables:
|
||||
# {creator} - The username of the creator of the share
|
||||
# {creatorEmail} - The email of the creator of the share
|
||||
# {shareUrl} - The URL of the share
|
||||
# {desc} - The description of the share
|
||||
# {expires} - The expiration date of the share
|
||||
# These variables will be replaced with the actual value.
|
||||
shareRecipientsMessage: >-
|
||||
Hey!
|
||||
|
||||
|
||||
{creator} ({creatorEmail}) shared some files with you, view or download the
|
||||
files with this link: {shareUrl}
|
||||
|
||||
|
||||
The share will expire {expires}.
|
||||
|
||||
|
||||
Note: {desc}
|
||||
|
||||
|
||||
Shared securely with Pingvin Share 🐧
|
||||
#Subject of the sent email when someone created a share with your reverse share link.
|
||||
reverseShareSubject: Reverse share link used
|
||||
#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.
|
||||
reverseShareMessage: |-
|
||||
Hey!
|
||||
|
||||
A share was just created with your reverse share link: {shareUrl}
|
||||
|
||||
Shared securely with Pingvin Share 🐧
|
||||
#Subject of the sent email when a user requests a password reset.
|
||||
resetPasswordSubject: Pingvin Share password reset
|
||||
#Message which gets sent when a user requests a password reset. {url} will be replaced with the reset password URL.
|
||||
resetPasswordMessage: >-
|
||||
Hey!
|
||||
|
||||
|
||||
You requested a password reset. Click this link to reset your password:
|
||||
{url}
|
||||
|
||||
The link expires in a hour.
|
||||
|
||||
|
||||
Pingvin Share 🐧
|
||||
#Subject of the sent email when an admin invites a user.
|
||||
inviteSubject: Pingvin Share invite
|
||||
#Message which gets sent when an admin invites a user. {url} will be replaced with the invite URL, {email} with the email and {password} with the users password.
|
||||
inviteMessage: >-
|
||||
Hey!
|
||||
|
||||
|
||||
You were invited to Pingvin Share. Click this link to accept the invite:
|
||||
{url}
|
||||
|
||||
|
||||
You can use the email "{email}" and the password "{password}" to sign in.
|
||||
|
||||
|
||||
Pingvin Share 🐧
|
||||
smtp:
|
||||
#Whether SMTP is enabled. Only set this to true if you entered the host, port, email, user and password of your SMTP server.
|
||||
enabled: "false"
|
||||
#Only set this to true if you need to trust self signed certificates.
|
||||
allowUnauthorizedCertificates: "false"
|
||||
#Host of the SMTP server
|
||||
host: ""
|
||||
#Port of the SMTP server
|
||||
port: "0"
|
||||
#Email address from wich the emails get sent
|
||||
email: ""
|
||||
#Username of the SMTP server
|
||||
username: ""
|
||||
#Password of the SMTP server
|
||||
password: ""
|
||||
ldap:
|
||||
#Use LDAP authentication for user login
|
||||
enabled: "false"
|
||||
#URL of the LDAP server
|
||||
url: ""
|
||||
#Default user used to perform the user search
|
||||
bindDn: ""
|
||||
#Password used to perform the user search
|
||||
bindPassword: ""
|
||||
#Base location, where the user search will be performed
|
||||
searchBase: ""
|
||||
#The user query will be used to search the 'User base' for the LDAP user. %username% can be used as the placeholder for the user given input.
|
||||
searchQuery: ""
|
||||
#Group required for administrative access.
|
||||
adminGroups: ""
|
||||
#LDAP attribute name for the groups, an user is a member of. This is used when checking for the admin group.
|
||||
fieldNameMemberOf: memberOf
|
||||
#LDAP attribute name for the email of an user.
|
||||
fieldNameEmail: userPrincipalName
|
||||
oauth:
|
||||
#Allow users to register via social login
|
||||
allowRegistration: "true"
|
||||
#Whether to ignore TOTP when user using social login
|
||||
ignoreTotp: "true"
|
||||
#Whether to disable password login
|
||||
#Make sure that an OAuth provider is properly configured before activating this configuration to avoid being locked out.
|
||||
disablePassword: "false"
|
||||
#Whether GitHub login is enabled
|
||||
github-enabled: "false"
|
||||
#Client ID of the GitHub OAuth app
|
||||
github-clientId: ""
|
||||
#Client secret of the GitHub OAuth app
|
||||
github-clientSecret: ""
|
||||
#Whether Google login is enabled
|
||||
google-enabled: "false"
|
||||
#Client ID of the Google OAuth app
|
||||
google-clientId: ""
|
||||
#Client secret of the Google OAuth app
|
||||
google-clientSecret: ""
|
||||
#Whether Microsoft login is enabled
|
||||
microsoft-enabled: "false"
|
||||
#Tenant ID of the Microsoft OAuth app
|
||||
#common: 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.
|
||||
#consumers: Only users with a personal Microsoft account can sign in to the application.
|
||||
#domain 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.
|
||||
microsoft-tenant: common
|
||||
#Client ID of the Microsoft OAuth app
|
||||
microsoft-clientId: ""
|
||||
#Client secret of the Microsoft OAuth app
|
||||
microsoft-clientSecret: ""
|
||||
#Whether Discord login is enabled
|
||||
discord-enabled: "false"
|
||||
#Limit signing in to users in a specific server. Leave it blank to disable.
|
||||
discord-limitedGuild: ""
|
||||
#Limit signing in to specific users by their Discord ID. Leave it blank to disable.
|
||||
discord-limitedUsers: ""
|
||||
#Client ID of the Discord OAuth app
|
||||
discord-clientId: ""
|
||||
#Client secret of the Discord OAuth app
|
||||
discord-clientSecret: ""
|
||||
#Whether OpenID Connect login is enabled
|
||||
oidc-enabled: "false"
|
||||
#Discovery URI of the OpenID Connect OAuth app
|
||||
oidc-discoveryUri: ""
|
||||
#Whether the “Sign out” button will sign out from the OpenID Connect provider
|
||||
oidc-signOut: "false"
|
||||
#Scopes which should be requested from the OpenID Connect provider.
|
||||
oidc-scope: openid email profile
|
||||
#Username claim in OpenID Connect ID token. Leave it blank if you don't know what this config is.
|
||||
oidc-usernameClaim: ""
|
||||
#Must be a valid JMES path referencing an array of roles. Managing access rights using OpenID Connect roles is only recommended if no other identity provider is configured and password login is disabled. Leave it blank if you don't know what this config is.
|
||||
oidc-rolePath: ""
|
||||
#Role required for general access. Must be present in a user’s roles for them to log in. Leave it blank if you don't know what this config is.
|
||||
oidc-roleGeneralAccess: ""
|
||||
#Role required for administrative access. Must be present in a user’s roles for them to access the admin panel. Leave it blank if you don't know what this config is.
|
||||
oidc-roleAdminAccess: ""
|
||||
#Client ID of the OpenID Connect OAuth app
|
||||
oidc-clientId: ""
|
||||
#Client secret of the OpenID Connect OAuth app
|
||||
oidc-clientSecret: ""
|
||||
s3:
|
||||
#Whether S3 should be used to store the shared files instead of the local file system.
|
||||
enabled: "false"
|
||||
#The URL of the S3 bucket.
|
||||
endpoint: ""
|
||||
#The region of the S3 bucket.
|
||||
region: ""
|
||||
#The name of the S3 bucket.
|
||||
bucketName: ""
|
||||
#The default path which should be used to store the files in the S3 bucket.
|
||||
bucketPath: ""
|
||||
#The key which allows you to access the S3 bucket.
|
||||
key: ""
|
||||
#The secret which allows you to access the S3 bucket.
|
||||
secret: ""
|
||||
legal:
|
||||
#Whether to show a link to imprint and privacy policy in the footer.
|
||||
enabled: "false"
|
||||
#The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.
|
||||
imprintText: ""
|
||||
#If you already have an imprint page you can link it here instead of using the text field.
|
||||
imprintUrl: ""
|
||||
#The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.
|
||||
privacyPolicyText: ""
|
||||
#If you already have a privacy policy page you can link it here instead of using the text field.
|
||||
privacyPolicyUrl: ""
|
||||
#This configuration is used to create the initial user when the application is started for the first time.
|
||||
#Make sure to change at least the password as soon as you log in!
|
||||
initUser:
|
||||
enabled: false
|
||||
username: admin
|
||||
email: admin@example.com
|
||||
password: my-secure-password
|
||||
isAdmin: true
|
||||
ldapDN: ""
|
||||
12
docker-compose.local.yml
Normal file
12
docker-compose.local.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
services:
|
||||
pingvin-share:
|
||||
build: .
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3001:3000
|
||||
environment:
|
||||
- TRUST_PROXY=false
|
||||
volumes:
|
||||
- "./data:/opt/app/backend/data"
|
||||
- "./data/images:/opt/app/frontend/public/img"
|
||||
# - "./config.yaml:/opt/app/config.yaml"
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
pingvin-share:
|
||||
image: stonith404/pingvin-share
|
||||
image: stonith404/pingvin-share # or ghcr.io/stonith404/pingvin-share
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3000:3000
|
||||
@@ -9,6 +9,7 @@ services:
|
||||
volumes:
|
||||
- "./data:/opt/app/backend/data"
|
||||
- "./data/images:/opt/app/frontend/public/img"
|
||||
# - "./config.yaml:/opt/app/config.yaml" # Add this line, if you want to configure pingvin-share via config file and not via UI
|
||||
|
||||
# To add ClamAV, to scan your shares for malicious files,
|
||||
# see https://stonith404.github.io/pingvin-share/setup/integrations/#clamav-docker-only
|
||||
|
||||
@@ -23,7 +23,7 @@ Before you submit the pull request for review please ensure that
|
||||
When `TYPE` can be:
|
||||
|
||||
- **feat** - is a new feature
|
||||
- **doc** - documentation only changes
|
||||
- **docs** - documentation only changes
|
||||
- **fix** - a bug fix
|
||||
- **refactor** - code change that neither fixes a bug nor adds a feature
|
||||
|
||||
|
||||
@@ -4,27 +4,21 @@ id: configuration
|
||||
|
||||
# Configuration
|
||||
|
||||
You can customize Pingvin Share by going to the configuration page in your admin dashboard `/admin/config`.
|
||||
## General configuration
|
||||
|
||||
## General
|
||||
There are plenty of settings you can adjust to your needs. Pingvin Share can be configured in two ways:
|
||||
|
||||
The **General** Tab will let you customize your Pingvin Share instance to your liking.
|
||||
### UI
|
||||
|
||||
### App name
|
||||
You can change the settings in the UI (`/admin/config`)
|
||||
|
||||
To change the name of your instance, insert any text into `App name`.
|
||||
### YAML file
|
||||
|
||||
### App URL
|
||||
You can set the configuration via a YAML file. If you choose this way, you won't be able to change the settings in the UI.
|
||||
|
||||
To make your App available trough your own **domain**, insert your specific domain and also subdomain if needed. Add an `https://` if you have an SSL certificate installed. If this is not the case, use `http://`.
|
||||
If you use Docker you can create a `config.yml` file based on the [`config.example.yaml`](https://github.com/stonith404/pingvin-share/blob/main/config.yaml) and mount it to `/opt/app/config.yaml` in the container.
|
||||
|
||||
### Show home page
|
||||
|
||||
If you don't like the **home page** Pingvin Share provides and you just want the upload tab to be the main page, toggle this to `true`.
|
||||
|
||||
### Logo
|
||||
|
||||
Not only you can change your instances name, but also the logo it shows everywhere. To do that, upload an image as `png` with a 1:1 aspect ratio.
|
||||
If you run Pingvin Share without Docker, you can create a `config.yml` file based on the [`config.example.yaml`](https://github.com/stonith404/pingvin-share/blob/main/config.yaml) in the root directory of the project.
|
||||
|
||||
---
|
||||
|
||||
@@ -50,9 +44,10 @@ For installation specific configuration, you can use environment variables. The
|
||||
| `API_URL` | `http://localhost:8080` | The URL of the backend for the frontend. |
|
||||
|
||||
#### Docker specific
|
||||
|
||||
Environment variables that are only available when running Pingvin Share with Docker.
|
||||
|
||||
| Variable | Default Value | Description |
|
||||
| ------------- | ------------- | ----------------------------------------------------------------------------------------------------------- |
|
||||
| `TRUST_PROXY` | `false` | Whether Pingvin Share is behind a reverse proxy. If set to `true`, the `X-Forwarded-For` header is trusted. |
|
||||
| `PUID` and `PGID` | `1000` | The user and group ID of the user who should run Pingvin Share inside the Docker container and owns the files that are mounted with the volume. You can get the `PUID` and `GUID` of your user on your host machine by using the command `id`. For more information see [this article](https://docs.linuxserver.io/general/understanding-puid-and-pgid/#using-the-variables). |
|
||||
| Variable | Default Value | Description |
|
||||
| ----------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `TRUST_PROXY` | `false` | Whether Pingvin Share is behind a reverse proxy. If set to `true`, the `X-Forwarded-For` header is trusted. |
|
||||
| `PUID` and `PGID` | `1000` | The user and group ID of the user who should run Pingvin Share inside the Docker container and owns the files that are mounted with the volume. You can get the `PUID` and `GUID` of your user on your host machine by using the command `id`. For more information see [this article](https://docs.linuxserver.io/general/understanding-puid-and-pgid/#using-the-variables). |
|
||||
|
||||
@@ -8,7 +8,7 @@ id: integrations
|
||||
|
||||
ClamAV is used to scan shares for malicious files and remove them if found.
|
||||
|
||||
Please note that ClamAV needs a lot of [ressources](https://docs.clamav.net/manual/Installing/Docker.html#memory-ram-requirements).
|
||||
Please note that ClamAV needs a lot of [resources](https://docs.clamav.net/manual/Installing/Docker.html#memory-ram-requirements).
|
||||
|
||||
### Docker
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@ You can configure your S3 provider and bucket by going to the configuration page
|
||||
| Key | Description | Value |
|
||||
|:-----------|:-------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------|
|
||||
| enabled | This property enables the storage location on your configured S3 bucket. | `true` |
|
||||
| endpoint | This property is the host from your S3 bucket. | `sos-ch-dk-2` |
|
||||
| region | This property is the region where the bucket is located. | `sos-ch-dk-2.exo.io` |
|
||||
| endpoint | The host for your S3 bucket. Endpoint formats vary by provider and some may include the bucket name in the FQDN. Ensure this is configured correctly, as an incorrect value may break some features. | `sos-ch-dk-2.exo.io` |
|
||||
| region | This property is the region where the bucket is located. | `sos-ch-dk-2` |
|
||||
| bucketName | This property is the name of your S3 bucket. | `my-bucket` |
|
||||
| bucketPath | This property defines the folder where you want to store your files which are uploaded. Hint: Don't put a slash in the start or end. | `my/custom/path` (or leave it empty for root) |
|
||||
| key | This is the access key you need to access to your bucket. | `key-asdf` |
|
||||
@@ -29,4 +29,4 @@ Consider that ClamAV scans are not available at the moment if you store your fil
|
||||
|
||||
## ZIP
|
||||
|
||||
Creating ZIP archives is not currently supported if you store your files in an S3 bucket.
|
||||
Creating ZIP archives is not currently supported if you store your files in an S3 bucket.
|
||||
|
||||
@@ -46,4 +46,4 @@ docker compose up -d
|
||||
npm run build
|
||||
pm2 restart pingvin-share-frontend
|
||||
```
|
||||
Note that environemnt variables are not picked up when using pm2 restart, if you actually want to change configs, you need to run ````pm2 --update-env restart````
|
||||
Note that environment variables are not picked up when using pm2 restart, if you actually want to change configs, you need to run ````pm2 --update-env restart````
|
||||
|
||||
4
frontend/package-lock.json
generated
4
frontend/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "pingvin-share-frontend",
|
||||
"version": "1.7.0",
|
||||
"version": "1.10.3",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "pingvin-share-frontend",
|
||||
"version": "1.7.0",
|
||||
"version": "1.10.3",
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.13.3",
|
||||
"@emotion/server": "^11.11.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pingvin-share-frontend",
|
||||
"version": "1.7.0",
|
||||
"version": "1.10.3",
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
|
||||
@@ -8,6 +8,9 @@ import {
|
||||
} from "@mantine/core";
|
||||
import { useForm } from "@mantine/form";
|
||||
import { AdminConfig, UpdateConfig } from "../../../types/config.type";
|
||||
import { stringToTimespan, timespanToString } from "../../../utils/date.util";
|
||||
import FileSizeInput from "../../core/FileSizeInput";
|
||||
import TimespanInput from "../../core/TimespanInput";
|
||||
|
||||
const AdminConfigInput = ({
|
||||
configVariable,
|
||||
@@ -38,9 +41,11 @@ const AdminConfigInput = ({
|
||||
{configVariable.type == "string" &&
|
||||
(configVariable.obscured ? (
|
||||
<PasswordInput
|
||||
autoComplete="new-password"
|
||||
style={{
|
||||
width: "100%",
|
||||
}}
|
||||
disabled={!configVariable.allowEdit}
|
||||
{...form.getInputProps("stringValue")}
|
||||
onChange={(e) => onValueChange(configVariable, e.target.value)}
|
||||
/>
|
||||
@@ -49,6 +54,7 @@ const AdminConfigInput = ({
|
||||
style={{
|
||||
width: "100%",
|
||||
}}
|
||||
disabled={!configVariable.allowEdit}
|
||||
{...form.getInputProps("stringValue")}
|
||||
placeholder={configVariable.defaultValue}
|
||||
onChange={(e) => onValueChange(configVariable, e.target.value)}
|
||||
@@ -60,6 +66,7 @@ const AdminConfigInput = ({
|
||||
style={{
|
||||
width: "100%",
|
||||
}}
|
||||
disabled={!configVariable.allowEdit}
|
||||
autosize
|
||||
{...form.getInputProps("textValue")}
|
||||
placeholder={configVariable.defaultValue}
|
||||
@@ -69,18 +76,40 @@ const AdminConfigInput = ({
|
||||
{configVariable.type == "number" && (
|
||||
<NumberInput
|
||||
{...form.getInputProps("numberValue")}
|
||||
disabled={!configVariable.allowEdit}
|
||||
placeholder={configVariable.defaultValue}
|
||||
onChange={(number) => onValueChange(configVariable, number)}
|
||||
w={201}
|
||||
/>
|
||||
)}
|
||||
{configVariable.type == "filesize" && (
|
||||
<FileSizeInput
|
||||
{...form.getInputProps("numberValue")}
|
||||
disabled={!configVariable.allowEdit}
|
||||
value={parseInt(configVariable.value ?? configVariable.defaultValue)}
|
||||
onChange={(bytes) => onValueChange(configVariable, bytes)}
|
||||
w={201}
|
||||
/>
|
||||
)}
|
||||
{configVariable.type == "boolean" && (
|
||||
<>
|
||||
<Switch
|
||||
disabled={!configVariable.allowEdit}
|
||||
{...form.getInputProps("booleanValue", { type: "checkbox" })}
|
||||
onChange={(e) => onValueChange(configVariable, e.target.checked)}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
{configVariable.type == "timespan" && (
|
||||
<TimespanInput
|
||||
value={stringToTimespan(configVariable.value)}
|
||||
disabled={!configVariable.allowEdit}
|
||||
onChange={(timespan) =>
|
||||
onValueChange(configVariable, timespanToString(timespan))
|
||||
}
|
||||
w={201}
|
||||
/>
|
||||
)}
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -19,6 +19,7 @@ import {
|
||||
TbBucket,
|
||||
TbBinaryTree,
|
||||
TbSettings,
|
||||
TbScale,
|
||||
} from "react-icons/tb";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
|
||||
@@ -30,6 +31,7 @@ const categories = [
|
||||
{ name: "OAuth", icon: <TbSocial /> },
|
||||
{ name: "LDAP", icon: <TbBinaryTree /> },
|
||||
{ name: "S3", icon: <TbBucket /> },
|
||||
{ name: "Legal", icon: <TbScale /> },
|
||||
];
|
||||
|
||||
const useStyles = createStyles((theme) => ({
|
||||
|
||||
81
frontend/src/components/core/FileSizeInput.tsx
Normal file
81
frontend/src/components/core/FileSizeInput.tsx
Normal file
@@ -0,0 +1,81 @@
|
||||
import { NativeSelect, NumberInput } from "@mantine/core";
|
||||
import { useState } from "react";
|
||||
|
||||
const multipliers = {
|
||||
B: 1,
|
||||
KB: 1000,
|
||||
KiB: 1024,
|
||||
MB: 1000 ** 2,
|
||||
MiB: 1024 ** 2,
|
||||
GB: 1000 ** 3,
|
||||
GiB: 1024 ** 3,
|
||||
TB: 1000 ** 4,
|
||||
TiB: 1024 ** 4,
|
||||
};
|
||||
|
||||
const units = (
|
||||
["B", "KB", "KiB", "MB", "MiB", "GB", "GiB", "TB", "TiB"] as const
|
||||
).map((unit) => ({ label: unit, value: unit }));
|
||||
|
||||
function getLargestApplicableUnit(value: number) {
|
||||
return (
|
||||
units.findLast((unit) => value % multipliers[unit.value] === 0) || units[0]
|
||||
);
|
||||
}
|
||||
|
||||
const FileSizeInput = ({
|
||||
label,
|
||||
value,
|
||||
onChange,
|
||||
...restProps
|
||||
}: {
|
||||
label?: string;
|
||||
value: number;
|
||||
onChange: (number: number) => void;
|
||||
[key: string]: any;
|
||||
}) => {
|
||||
const [unit, setUnit] = useState(getLargestApplicableUnit(value).value);
|
||||
const [inputValue, setInputValue] = useState(value / multipliers[unit]);
|
||||
const unitSelect = (
|
||||
<NativeSelect
|
||||
data={units}
|
||||
value={unit}
|
||||
rightSectionWidth={28}
|
||||
styles={{
|
||||
input: {
|
||||
fontWeight: 500,
|
||||
borderTopLeftRadius: 0,
|
||||
borderBottomLeftRadius: 0,
|
||||
width: 76,
|
||||
marginRight: -2,
|
||||
},
|
||||
}}
|
||||
onChange={(event) => {
|
||||
const unit = event.currentTarget
|
||||
.value as (typeof units)[number]["value"];
|
||||
setUnit(unit);
|
||||
onChange(multipliers[unit] * inputValue);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
return (
|
||||
<NumberInput
|
||||
label={label}
|
||||
value={inputValue}
|
||||
min={1}
|
||||
max={999999}
|
||||
precision={0}
|
||||
rightSection={unitSelect}
|
||||
rightSectionWidth={76}
|
||||
onChange={(value) => {
|
||||
const inputVal = value || 0;
|
||||
setInputValue(inputVal);
|
||||
onChange(multipliers[unit] * inputVal);
|
||||
}}
|
||||
{...restProps}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export default FileSizeInput;
|
||||
88
frontend/src/components/core/TimespanInput.tsx
Normal file
88
frontend/src/components/core/TimespanInput.tsx
Normal file
@@ -0,0 +1,88 @@
|
||||
import { useState } from "react";
|
||||
import { Timespan } from "../../types/timespan.type";
|
||||
import { NativeSelect, NumberInput } from "@mantine/core";
|
||||
import useTranslate from "../../hooks/useTranslate.hook";
|
||||
|
||||
const TimespanInput = ({
|
||||
label,
|
||||
value,
|
||||
onChange,
|
||||
...restProps
|
||||
}: {
|
||||
label?: string;
|
||||
value: Timespan;
|
||||
onChange: (timespan: Timespan) => void;
|
||||
[key: string]: any;
|
||||
}) => {
|
||||
const [unit, setUnit] = useState(value.unit);
|
||||
const [inputValue, setInputValue] = useState(value.value);
|
||||
const t = useTranslate();
|
||||
|
||||
const version = inputValue == 1 ? "singular" : "plural";
|
||||
const unitSelect = (
|
||||
<NativeSelect
|
||||
data={[
|
||||
{
|
||||
value: "minutes",
|
||||
label: t(`upload.modal.expires.minute-${version}`),
|
||||
},
|
||||
{
|
||||
value: "hours",
|
||||
label: t(`upload.modal.expires.hour-${version}`),
|
||||
},
|
||||
{
|
||||
value: "days",
|
||||
label: t(`upload.modal.expires.day-${version}`),
|
||||
},
|
||||
{
|
||||
value: "weeks",
|
||||
label: t(`upload.modal.expires.week-${version}`),
|
||||
},
|
||||
{
|
||||
value: "months",
|
||||
label: t(`upload.modal.expires.month-${version}`),
|
||||
},
|
||||
{
|
||||
value: "years",
|
||||
label: t(`upload.modal.expires.year-${version}`),
|
||||
},
|
||||
]}
|
||||
value={unit}
|
||||
rightSectionWidth={28}
|
||||
styles={{
|
||||
input: {
|
||||
fontWeight: 500,
|
||||
borderTopLeftRadius: 0,
|
||||
borderBottomLeftRadius: 0,
|
||||
width: 120,
|
||||
marginRight: -2,
|
||||
},
|
||||
}}
|
||||
onChange={(event) => {
|
||||
const unit = event.currentTarget.value as Timespan["unit"];
|
||||
setUnit(unit);
|
||||
onChange({ value: inputValue, unit });
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
return (
|
||||
<NumberInput
|
||||
label={label}
|
||||
value={inputValue}
|
||||
min={0}
|
||||
max={999999}
|
||||
precision={0}
|
||||
rightSection={unitSelect}
|
||||
rightSectionWidth={120}
|
||||
onChange={(value) => {
|
||||
const inputVal = value || 0;
|
||||
setInputValue(inputVal);
|
||||
onChange({ value: inputVal, unit });
|
||||
}}
|
||||
{...restProps}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export default TimespanInput;
|
||||
62
frontend/src/components/footer/Footer.tsx
Normal file
62
frontend/src/components/footer/Footer.tsx
Normal file
@@ -0,0 +1,62 @@
|
||||
import { Anchor, Footer as MFooter, SimpleGrid, Text } from "@mantine/core";
|
||||
import { useMediaQuery } from "@mantine/hooks";
|
||||
import useConfig from "../../hooks/config.hook";
|
||||
import useTranslate from "../../hooks/useTranslate.hook";
|
||||
|
||||
const Footer = () => {
|
||||
const t = useTranslate();
|
||||
const config = useConfig();
|
||||
const hasImprint = !!(
|
||||
config.get("legal.imprintUrl") || config.get("legal.imprintText")
|
||||
);
|
||||
const hasPrivacy = !!(
|
||||
config.get("legal.privacyPolicyUrl") ||
|
||||
config.get("legal.privacyPolicyText")
|
||||
);
|
||||
const imprintUrl =
|
||||
(!config.get("legal.imprintText") && config.get("legal.imprintUrl")) ||
|
||||
"/imprint";
|
||||
const privacyUrl =
|
||||
(!config.get("legal.privacyPolicyText") &&
|
||||
config.get("legal.privacyPolicyUrl")) ||
|
||||
"/privacy";
|
||||
|
||||
const isMobile = useMediaQuery("(max-width: 700px)");
|
||||
|
||||
return (
|
||||
<MFooter height="auto" py={6} px="xl" zIndex={100}>
|
||||
<SimpleGrid cols={isMobile ? 2 : 3} m={0}>
|
||||
{!isMobile && <div></div>}
|
||||
<Text size="xs" color="dimmed" align={isMobile ? "left" : "center"}>
|
||||
Powered by{" "}
|
||||
<Anchor
|
||||
size="xs"
|
||||
href="https://github.com/stonith404/pingvin-share"
|
||||
target="_blank"
|
||||
>
|
||||
Pingvin Share
|
||||
</Anchor>
|
||||
</Text>
|
||||
<div>
|
||||
{config.get("legal.enabled") && (
|
||||
<Text size="xs" color="dimmed" align="right">
|
||||
{hasImprint && (
|
||||
<Anchor size="xs" href={imprintUrl}>
|
||||
{t("imprint.title")}
|
||||
</Anchor>
|
||||
)}
|
||||
{hasImprint && hasPrivacy && " • "}
|
||||
{hasPrivacy && (
|
||||
<Anchor size="xs" href={privacyUrl}>
|
||||
{t("privacy.title")}
|
||||
</Anchor>
|
||||
)}
|
||||
</Text>
|
||||
)}
|
||||
</div>
|
||||
</SimpleGrid>
|
||||
</MFooter>
|
||||
);
|
||||
};
|
||||
|
||||
export default Footer;
|
||||
@@ -1,64 +0,0 @@
|
||||
import { Col, Grid, NumberInput, Select } from "@mantine/core";
|
||||
import { useEffect, useState } from "react";
|
||||
import {
|
||||
byteToUnitAndSize,
|
||||
unitAndSizeToByte,
|
||||
} from "../../utils/fileSize.util";
|
||||
|
||||
const FileSizeInput = ({
|
||||
label,
|
||||
value,
|
||||
onChange,
|
||||
}: {
|
||||
label: string;
|
||||
value: number;
|
||||
onChange: (number: number) => void;
|
||||
}) => {
|
||||
const [unit, setUnit] = useState("MB");
|
||||
const [size, setSize] = useState(100);
|
||||
|
||||
useEffect(() => {
|
||||
const { unit, size } = byteToUnitAndSize(value);
|
||||
setUnit(unit);
|
||||
setSize(size);
|
||||
}, [value]);
|
||||
|
||||
return (
|
||||
<Grid align="flex-end">
|
||||
<Col xs={6}>
|
||||
<NumberInput
|
||||
min={1}
|
||||
max={99999}
|
||||
precision={0}
|
||||
variant="filled"
|
||||
label={label}
|
||||
value={size}
|
||||
onChange={(value) => {
|
||||
if (value) {
|
||||
setSize(value);
|
||||
onChange(unitAndSizeToByte(unit, value));
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</Col>
|
||||
<Col xs={6}>
|
||||
<Select
|
||||
data={[
|
||||
{ label: "B", value: "B" },
|
||||
{ label: "KB", value: "KB" },
|
||||
{ label: "MB", value: "MB" },
|
||||
{ label: "GB", value: "GB" },
|
||||
{ label: "TB", value: "TB" },
|
||||
]}
|
||||
value={unit}
|
||||
onChange={(value) => {
|
||||
setUnit(value!);
|
||||
onChange(unitAndSizeToByte(value!, size));
|
||||
}}
|
||||
/>
|
||||
</Col>
|
||||
</Grid>
|
||||
);
|
||||
};
|
||||
|
||||
export default FileSizeInput;
|
||||
@@ -20,15 +20,16 @@ import useTranslate, {
|
||||
translateOutsideContext,
|
||||
} from "../../../hooks/useTranslate.hook";
|
||||
import shareService from "../../../services/share.service";
|
||||
import { Timespan } from "../../../types/timespan.type";
|
||||
import { getExpirationPreview } from "../../../utils/date.util";
|
||||
import toast from "../../../utils/toast.util";
|
||||
import FileSizeInput from "../FileSizeInput";
|
||||
import FileSizeInput from "../../core/FileSizeInput";
|
||||
import showCompletedReverseShareModal from "./showCompletedReverseShareModal";
|
||||
|
||||
const showCreateReverseShareModal = (
|
||||
modals: ModalsContextProps,
|
||||
showSendEmailNotificationOption: boolean,
|
||||
maxExpirationInHours: number,
|
||||
maxExpiration: Timespan,
|
||||
getReverseShares: () => void,
|
||||
) => {
|
||||
const t = translateOutsideContext();
|
||||
@@ -38,7 +39,7 @@ const showCreateReverseShareModal = (
|
||||
<Body
|
||||
showSendEmailNotificationOption={showSendEmailNotificationOption}
|
||||
getReverseShares={getReverseShares}
|
||||
maxExpirationInHours={maxExpirationInHours}
|
||||
maxExpiration={maxExpiration}
|
||||
/>
|
||||
),
|
||||
});
|
||||
@@ -47,11 +48,11 @@ const showCreateReverseShareModal = (
|
||||
const Body = ({
|
||||
getReverseShares,
|
||||
showSendEmailNotificationOption,
|
||||
maxExpirationInHours,
|
||||
maxExpiration,
|
||||
}: {
|
||||
getReverseShares: () => void;
|
||||
showSendEmailNotificationOption: boolean;
|
||||
maxExpirationInHours: number;
|
||||
maxExpiration: Timespan;
|
||||
}) => {
|
||||
const modals = useModals();
|
||||
const t = useTranslate();
|
||||
@@ -91,13 +92,17 @@ const Body = ({
|
||||
) as moment.unitOfTime.DurationConstructor,
|
||||
);
|
||||
if (
|
||||
maxExpirationInHours != 0 &&
|
||||
expirationDate.isAfter(moment().add(maxExpirationInHours, "hours"))
|
||||
maxExpiration.value != 0 &&
|
||||
expirationDate.isAfter(
|
||||
moment().add(maxExpiration.value, maxExpiration.unit),
|
||||
)
|
||||
) {
|
||||
form.setFieldError(
|
||||
"expiration_num",
|
||||
t("upload.modal.expires.error.too-long", {
|
||||
max: moment.duration(maxExpirationInHours, "hours").humanize(),
|
||||
max: moment
|
||||
.duration(maxExpiration.value, maxExpiration.unit)
|
||||
.humanize(),
|
||||
}),
|
||||
);
|
||||
return;
|
||||
|
||||
@@ -31,6 +31,7 @@ import { FileUpload } from "../../../types/File.type";
|
||||
import { CreateShare } from "../../../types/share.type";
|
||||
import { getExpirationPreview } from "../../../utils/date.util";
|
||||
import toast from "../../../utils/toast.util";
|
||||
import { Timespan } from "../../../types/timespan.type";
|
||||
|
||||
const showCreateUploadModal = (
|
||||
modals: ModalsContextProps,
|
||||
@@ -39,7 +40,7 @@ const showCreateUploadModal = (
|
||||
isReverseShare: boolean;
|
||||
allowUnauthenticatedShares: boolean;
|
||||
enableEmailRecepients: boolean;
|
||||
maxExpirationInHours: number;
|
||||
maxExpiration: Timespan;
|
||||
shareIdLength: number;
|
||||
simplified: boolean;
|
||||
},
|
||||
@@ -112,7 +113,7 @@ const CreateUploadModalBody = ({
|
||||
isReverseShare: boolean;
|
||||
allowUnauthenticatedShares: boolean;
|
||||
enableEmailRecepients: boolean;
|
||||
maxExpirationInHours: number;
|
||||
maxExpiration: Timespan;
|
||||
shareIdLength: number;
|
||||
};
|
||||
}) => {
|
||||
@@ -180,17 +181,20 @@ const CreateUploadModalBody = ({
|
||||
);
|
||||
|
||||
if (
|
||||
options.maxExpirationInHours != 0 &&
|
||||
options.maxExpiration.value != 0 &&
|
||||
(form.values.never_expires ||
|
||||
expirationDate.isAfter(
|
||||
moment().add(options.maxExpirationInHours, "hours"),
|
||||
moment().add(
|
||||
options.maxExpiration.value,
|
||||
options.maxExpiration.unit,
|
||||
),
|
||||
))
|
||||
) {
|
||||
form.setFieldError(
|
||||
"expiration_num",
|
||||
t("upload.modal.expires.error.too-long", {
|
||||
max: moment
|
||||
.duration(options.maxExpirationInHours, "hours")
|
||||
.duration(options.maxExpiration.value, options.maxExpiration.unit)
|
||||
.humanize(),
|
||||
}),
|
||||
);
|
||||
@@ -327,7 +331,7 @@ const CreateUploadModalBody = ({
|
||||
/>
|
||||
</Col>
|
||||
</Grid>
|
||||
{options.maxExpirationInHours == 0 && (
|
||||
{options.maxExpiration.value == 0 && (
|
||||
<Checkbox
|
||||
label={t("upload.modal.expires.never-long")}
|
||||
{...form.getInputProps("never_expires")}
|
||||
@@ -406,7 +410,7 @@ const CreateUploadModalBody = ({
|
||||
{...form.getInputProps("recipients")}
|
||||
onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {
|
||||
// Add email on comma or semicolon
|
||||
if (e.key === "," || e.key === ";") {
|
||||
if (e.key === "Enter" || e.key === "," || e.key === ";") {
|
||||
e.preventDefault();
|
||||
const inputValue = (
|
||||
e.target as HTMLInputElement
|
||||
@@ -478,7 +482,7 @@ const SimplifiedCreateUploadModalModal = ({
|
||||
isReverseShare: boolean;
|
||||
allowUnauthenticatedShares: boolean;
|
||||
enableEmailRecepients: boolean;
|
||||
maxExpirationInHours: number;
|
||||
maxExpiration: Timespan;
|
||||
shareIdLength: number;
|
||||
};
|
||||
}) => {
|
||||
|
||||
@@ -5,6 +5,7 @@ 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 estonian from "./translations/et-EE";
|
||||
import finnish from "./translations/fi-FI";
|
||||
import french from "./translations/fr-FR";
|
||||
import croatian from "./translations/hr-HR";
|
||||
@@ -168,4 +169,9 @@ export const LOCALES = {
|
||||
code: "hr-HR",
|
||||
messages: croatian,
|
||||
},
|
||||
ESTONIAN: {
|
||||
name: "Eesti",
|
||||
code: "et-EE",
|
||||
messages: estonian,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "الحجم",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "معلومات المشاركة",
|
||||
"account.shares.modal.share-link": "رابط المشاركة",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Private share",
|
||||
"share.error.access-denied.description": "The current account does not have permission to access this share",
|
||||
"share.modal.password.title": "كلمة السر مطلوبة",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "كلمة السر",
|
||||
"share.modal.error.invalid-password": "كلمة السر غير صحيحة",
|
||||
"share.button.download-all": "تنزيل الكل",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "حدث خطأ أثناء إنهاء مشاركتك.",
|
||||
"share.edit.notify.save-success": "تم تحديث المشاركة بنجاح",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "الإعدادات",
|
||||
"admin.config.category.general": "عام",
|
||||
"admin.config.category.share": "مشاركة",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "إظهار الصفحة الرئيسية",
|
||||
"admin.config.general.show-home-page.description": "تحديد ما إذا كان سيتم عرض الصفحة الرئيسية",
|
||||
"admin.config.general.session-duration": "مدة الجلسة",
|
||||
"admin.config.general.session-duration.description": "الوقت بالساعات الذي يجب على المستخدم بعده إعادة تسجيل الدخول (الافتراضي: 3 أشهر).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "الشعار",
|
||||
"admin.config.general.logo.description": "يمكنك تغيير شعارك عن طريق تحميل صورة جديدة. يجب أن تكون الصورة PNG ويجب أن يكون تنسيقها 1:1.",
|
||||
"admin.config.general.logo.placeholder": "اختر صورة",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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-expiration.description": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "المنفذ",
|
||||
"admin.config.smtp.port.description": "منفذ خادم الـSMTP",
|
||||
"admin.config.smtp.email": "البريد الإلكتروني",
|
||||
"admin.config.smtp.email.description": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "اسم المستخدم",
|
||||
"admin.config.smtp.username.description": "اسم المستخدم لخادم الـSMTP",
|
||||
"admin.config.smtp.password": "كلمة السر",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "هذه الصفحة غير موجودة.",
|
||||
"404.button.home": "أعدني للصفحة الرئيسية",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Velikost",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Share informations",
|
||||
"account.shares.modal.share-link": "Odkaz na sdílení",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Soukromé sdílení",
|
||||
"share.error.access-denied.description": "Aktuální účet nemá oprávnění k přístupu k tomuto sdílení",
|
||||
"share.modal.password.title": "Heslo vyžadováno",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Heslo",
|
||||
"share.modal.error.invalid-password": "Neplatné heslo",
|
||||
"share.button.download-all": "Stáhnout vše",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "Při dokončování vašeho sdílení došlo k chybě.",
|
||||
"share.edit.notify.save-success": "Sdílení úspěšně aktualizováno",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Nastavení",
|
||||
"admin.config.category.general": "Obecné",
|
||||
"admin.config.category.share": "Sdílení",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Zobrazit domovskou stránku",
|
||||
"admin.config.general.show-home-page.description": "Zda zobrazovat domovskou stránku",
|
||||
"admin.config.general.session-duration": "Délka trvání relace",
|
||||
"admin.config.general.session-duration.description": "Čas v hodinách, po kterém se uživatel musí znovu přihlásit (výchozí: 3 měsíce).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Změňte své logo nahráním nového obrázku. Obrázek musí být PNG a měl by mít formát 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Vybrat obrázek",
|
||||
@@ -335,7 +346,7 @@ export default {
|
||||
"admin.config.share.allow-unauthenticated-shares": "Povolit sdílení neověřeným uživatelům",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Zda mohou neověření uživatelé vytvářet sdílení",
|
||||
"admin.config.share.max-expiration": "Max. platnost",
|
||||
"admin.config.share.max-expiration.description": "Maximální platnost sdílení v hodinách. Nastavte na 0 k povolení neomezené platnosti.",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-size": "Max. velikost",
|
||||
@@ -343,7 +354,7 @@ export default {
|
||||
"admin.config.share.zip-compression-level": "Úroveň Zip komprese",
|
||||
"admin.config.share.zip-compression-level.description": "Upravte úroveň pro rovnováhu mezi velikostí souboru a rychlostí komprese. Platné hodnoty se pohybují od 0 do 9, přičemž 0 znamená bez komprese a 9 je maximální komprese. ",
|
||||
"admin.config.share.chunk-size": "Velikost bloku",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster for stable connections.",
|
||||
"admin.config.share.auto-open-share-modal": "Automaticky otevřít menu vytvoření sdílení",
|
||||
"admin.config.share.auto-open-share-modal.description": "Menu vytvoření sdílení se automaticky zobrazí, když uživatel vybere soubory, čímž se eliminuje potřeba ručně kliknout na tlačítko.",
|
||||
"admin.config.smtp.enabled": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "Port SMTP serveru",
|
||||
"admin.config.smtp.email": "E-mail",
|
||||
"admin.config.smtp.email.description": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Uživatelské jméno",
|
||||
"admin.config.smtp.username.description": "Uživatelské jméno SMTP serveru",
|
||||
"admin.config.smtp.password": "Heslo",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Jejda, tato stránka neexistuje.",
|
||||
"404.button.home": "Bring me back home",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Størrelse",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Share informations",
|
||||
"account.shares.modal.share-link": "Del link",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Privat deling",
|
||||
"share.error.access-denied.description": "The current account does not have permission to access this share",
|
||||
"share.modal.password.title": "Adgangskode påkrævet",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Adgangskode",
|
||||
"share.modal.error.invalid-password": "Ugyldig adgangskode",
|
||||
"share.button.download-all": "Download alle",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Deling opdateret",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Konfiguration",
|
||||
"admin.config.category.general": "Generelt",
|
||||
"admin.config.category.share": "Del",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Vis forside",
|
||||
"admin.config.general.show-home-page.description": "Om forsiden skal vises",
|
||||
"admin.config.general.session-duration": "Session Duration",
|
||||
"admin.config.general.session-duration.description": "Time in hours after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"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.placeholder": "Vælg billede",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-size": "Maks. størrelse",
|
||||
"admin.config.share.max-size.description": "Maksimal filstørrelse i bytes",
|
||||
"admin.config.share.max-size.description": "Maksimal filstørrelse",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Brugernavn",
|
||||
"admin.config.smtp.username.description": "Brugernavnet til SMTP serveren",
|
||||
"admin.config.smtp.password": "Adgangskode",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Ups! Denne side findes ikke.",
|
||||
"404.button.home": "Gå tilbage",
|
||||
|
||||
@@ -5,7 +5,7 @@ export default {
|
||||
"navbar.home": "Startseite",
|
||||
"navbar.signup": "Registrieren",
|
||||
"navbar.links.shares": "Meine Freigaben",
|
||||
"navbar.links.reverse": "Externe Freigaben",
|
||||
"navbar.links.reverse": "Datei Anfrage",
|
||||
"navbar.avatar.account": "Mein Konto",
|
||||
"navbar.avatar.admin": "Verwaltung",
|
||||
"navbar.avatar.signout": "Abmelden",
|
||||
@@ -124,16 +124,19 @@ export default {
|
||||
"account.shares.table.expiresAt": "Läuft ab am",
|
||||
"account.shares.table.createdAt": "Angelegt am",
|
||||
"account.shares.table.size": "Größe",
|
||||
"account.shares.table.password-protected": "Passwortgeschützt",
|
||||
"account.shares.table.visitor-count": "{count} von {max}",
|
||||
"account.shares.table.expiry-never": "nie",
|
||||
"account.shares.modal.share-informations": "Teile deine Information",
|
||||
"account.shares.modal.share-link": "Freigabe teilen",
|
||||
"account.shares.modal.delete.title": "Freigabe löschen: {share}",
|
||||
"account.shares.modal.delete.description": "Möchtest du diese Freigabe wirklich 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.title": "Datei Anfragen",
|
||||
"account.reverseShares.description": "Eine Datei Anfrage 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.",
|
||||
"account.reverseShares.description.empty": "Du hast keine Datei Anfrage.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Externe Freigabe erstellen",
|
||||
"account.reverseShares.modal.expiration.label": "Gültig bis",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Impressum",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Datenschutzerklärung",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Konfigurationsdatei aktiv",
|
||||
"admin.config.config-file-warning.description": "Da Pingvin Share mit einer Konfigurationsdatei konfiguriert ist, kann die Konfiguration nicht über die Benutzeroberfläche geändert werden.",
|
||||
"admin.config.title": "Einstellungen",
|
||||
"admin.config.category.general": "Allgemein",
|
||||
"admin.config.category.share": "Freigabe",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-expiration.description": "Maximale Ablaufzeit. Auf 0 setzen, um kein Ablaufdatum zu definieren.",
|
||||
"admin.config.share.share-id-length": "Standardlänge der Freigabe-ID",
|
||||
"admin.config.share.share-id-length.description": "Standardlänge für die generierte ID einer Freigabe. Dieser Wert wird auch verwendet, um Links für umgekehrte Freigaben zu generieren. Ein Wert unter 8 wird als nicht sicher betrachtet.",
|
||||
"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",
|
||||
"admin.config.share.zip-compression-level": "ZIP-Kompressionslevel",
|
||||
"admin.config.share.zip-compression-level.description": "Passe den Wert an, um ein Gleichgewicht zwischen Dateigröße und Kompressionsgeschwindigkeit 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": "Chunk Größe",
|
||||
"admin.config.share.chunk-size.description": "Passe die Chunk-Größe (in Bytes) für deine Uploads an, um Effizienz und Zuverlässigkeit entsprechend deiner Internetverbindung auszubalancieren. Kleinere Chunks können die Erfolgsraten bei instabilen Verbindungen erhöhen, während größere Chunks Uploads bei stabilen Verbindungen beschleunigen.",
|
||||
"admin.config.share.chunk-size.description": "Passe die Chunk-Größe für deine Uploads an, um Effizienz und Zuverlässigkeit entsprechend deiner Internetverbindung auszubalancieren. Kleinere Chunks können die Erfolgsraten bei instabilen Verbindungen erhöhen, während größere Chunks Uploads bei stabilen Verbindungen beschleunigen.",
|
||||
"admin.config.share.auto-open-share-modal": "Freigabe-Fenster automatisch öffnen",
|
||||
"admin.config.share.auto-open-share-modal.description": "Das Freigabe-Fenster erscheint automatisch, sobald ein Benutzer Dateien ausgewählt hat, ohne extra auf den Button klicken zu müssen.",
|
||||
"admin.config.smtp.enabled": "Aktivieren",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Benutzername",
|
||||
"admin.config.smtp.username.description": "Benutzername des SMTP-Servers",
|
||||
"admin.config.smtp.password": "Passwort",
|
||||
@@ -436,6 +447,9 @@ export default {
|
||||
"admin.config.ldap.field-name-member-of.description": "LDAP-Attributname für die Gruppen, in denen ein Benutzer Mitglied ist. Dies wird bei der Überprüfung der Admin-Gruppe verwendet.",
|
||||
"admin.config.ldap.field-name-email": "Attributname für die E-Mail-Adresse des Benutzers",
|
||||
"admin.config.ldap.field-name-email.description": "LDAP-Attributname für die E-Mail-Adresse eines Benutzers.",
|
||||
"admin.config.notify.success": "Konfiguration erfolgreich aktualisiert.",
|
||||
"admin.config.notify.logo-success": "Logo erfolgreich aktualisiert. Es kann einige Minuten dauern, bis es auf der Website aktualisiert wird.",
|
||||
"admin.config.notify.no-changes": "Keine Änderungen zu speichern.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Aktiviert",
|
||||
"admin.config.s3.enabled.description": "Ob S3 verwendet werden soll, um die freigegebenen Dateien anstelle des lokalen Dateisystems zu speichern.",
|
||||
@@ -448,12 +462,20 @@ export default {
|
||||
"admin.config.s3.bucket-path": "Pfad",
|
||||
"admin.config.s3.bucket-path.description": "Der Standardpfad, der zum Speichern der Dateien im S3-Bucket verwendet werden soll.",
|
||||
"admin.config.s3.key": "Schlüssel",
|
||||
"admin.config.s3.secret": "Geheimnis",
|
||||
"admin.config.s3.key.description": "Der Schlüssel, der den Zugriff auf den S3-Bucket ermöglicht.",
|
||||
"admin.config.s3.secret": "Geheimnis",
|
||||
"admin.config.s3.secret.description": "Das Geheimnis, das den Zugriff auf den S3-Bucket ermöglicht.",
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.legal": "Rechtliches",
|
||||
"admin.config.legal.enabled": "Impressum und Datenschutz aktivieren",
|
||||
"admin.config.legal.enabled.description": "Gibt an, ob die Links zum Impressum und zur Datenschutzerklärung im Footer angezeigt werden sollen.",
|
||||
"admin.config.legal.imprint-text": "Impressum-Text",
|
||||
"admin.config.legal.imprint-text.description": "Der Text, der im Impressum angezeigt wird. Unterstützt Markdown. Leer lassen, um auf eine externe Impressumsseite zu verlinken.",
|
||||
"admin.config.legal.imprint-url": "Impressum-URL",
|
||||
"admin.config.legal.imprint-url.description": "Wenn bereits eine Impressumsseite vorhanden ist, kann sie hier verlinkt werden, anstatt den Text einzugeben.",
|
||||
"admin.config.legal.privacy-policy-text": "Datenschutzerklärungstext",
|
||||
"admin.config.legal.privacy-policy-text.description": "Der Text, der in der Datenschutzerklärung angezeigt wird. Unterstützt Markdown. Leer lassen, um auf eine externe Datenschutzerklärungsseite zu verlinken.",
|
||||
"admin.config.legal.privacy-policy-url": "Datenschutzerklärungs-URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "Wenn bereits eine Datenschutzerklärungsseite vorhanden ist, kann sie hier verlinkt werden, anstatt den Text einzugeben.",
|
||||
// 404
|
||||
"404.description": "Ups, diese Seite existiert nicht.",
|
||||
"404.button.home": "Zurück zur Startseite",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Μέγεθος",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Πληροφορίες διαμοιρασμού",
|
||||
"account.shares.modal.share-link": "Κοινοποίηση συνδέσμου",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Ιδιωτική κοινοποίηση",
|
||||
"share.error.access-denied.description": "Ο τρέχων λογαριασμός δεν έχει δικαίωμα πρόσβασης σε αυτήν την κοινοποίηση",
|
||||
"share.modal.password.title": "Απαιτείται κωδικός",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Κωδικός πρόσβασης",
|
||||
"share.modal.error.invalid-password": "Μη έγκυρος κωδικός πρόσβασης",
|
||||
"share.button.download-all": "Λήψη όλων",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "Παρουσιάστηκε σφάλμα κατά την ολοκλήρωση του διαμοιρασμού.",
|
||||
"share.edit.notify.save-success": "Ο διαμοιρασμός ενημερώθηκε επιτυχώς",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Διαμόρφωση",
|
||||
"admin.config.category.general": "Γενικά",
|
||||
"admin.config.category.share": "Διαμοιρασμός",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Εμφάνιση αρχικής σελίδας",
|
||||
"admin.config.general.show-home-page.description": "Εάν θα εμφανίζεται η αρχική σελίδα",
|
||||
"admin.config.general.session-duration": "Διάρκεια συνεδρίας",
|
||||
"admin.config.general.session-duration.description": "Χρόνος σε ώρες μετά την οποία ένας χρήστης πρέπει να συνδεθεί ξανά (προεπιλογή: 3 μήνες).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Λογότυπο",
|
||||
"admin.config.general.logo.description": "Αλλάξτε το λογότυπό σας ανεβάζοντας μια νέα εικόνα. Η εικόνα πρέπει να είναι PNG και αναλογία 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Επιλέξτε εικόνα",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-size": "Μέγιστο μέγεθος",
|
||||
"admin.config.share.max-size.description": "Μέγιστο μέγεθος κοινοποίησης σε bytes",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "Θύρα",
|
||||
"admin.config.smtp.port.description": "SMTP θύρα",
|
||||
"admin.config.smtp.email": "Email",
|
||||
"admin.config.smtp.email.description": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Όνομα χρήστη",
|
||||
"admin.config.smtp.username.description": "Όνομα χρήστη στον SMTP εξυπηρετητή",
|
||||
"admin.config.smtp.password": "Κωδικός πρόσβασης",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Ουπς. Αυτή η σελίδα δεν υπάρχει.",
|
||||
"404.button.home": "Πήγαινέ με πίσω",
|
||||
|
||||
@@ -158,6 +158,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Size",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
|
||||
"account.shares.modal.share-informations": "Share informations",
|
||||
"account.shares.modal.share-link": "Share link",
|
||||
@@ -376,7 +379,7 @@ export default {
|
||||
|
||||
"share.modal.password.title": "Password required",
|
||||
"share.modal.password.description":
|
||||
"Please enter the password to acces this share.",
|
||||
"Please enter the password to access this share.",
|
||||
"share.modal.password": "Password",
|
||||
"share.modal.error.invalid-password": "Invalid password",
|
||||
|
||||
@@ -402,7 +405,18 @@ export default {
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
// END /share/[id]/edit
|
||||
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
|
||||
"admin.config.title": "Configuration",
|
||||
"admin.config.category.general": "General",
|
||||
"admin.config.category.share": "Share",
|
||||
@@ -423,7 +437,7 @@ export default {
|
||||
"Whether to show the home page",
|
||||
"admin.config.general.session-duration": "Session Duration",
|
||||
"admin.config.general.session-duration.description":
|
||||
"Time in hours after which a user must log in again (default: 3 months).",
|
||||
"Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description":
|
||||
"Change your logo by uploading a new image. The image must be a PNG and should have the format 1:1.",
|
||||
@@ -467,18 +481,18 @@ export default {
|
||||
"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.",
|
||||
"Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description":
|
||||
"Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-size": "Max size",
|
||||
"admin.config.share.max-size.description": "Maximum share size in bytes",
|
||||
"admin.config.share.max-size.description": "Maximum share size",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"Adjust the chunk size 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 make uploads faster 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.",
|
||||
@@ -492,7 +506,7 @@ export default {
|
||||
"admin.config.smtp.port.description": "Port of the SMTP server",
|
||||
"admin.config.smtp.email": "Email",
|
||||
"admin.config.smtp.email.description":
|
||||
"Email address from wich the emails get sent",
|
||||
"Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Username",
|
||||
"admin.config.smtp.username.description": "Username of the SMTP server",
|
||||
"admin.config.smtp.password": "Password",
|
||||
@@ -642,6 +656,18 @@ export default {
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
|
||||
// 404
|
||||
"404.description": "Oops this page doesn't exist.",
|
||||
"404.button.home": "Bring me back home",
|
||||
|
||||
@@ -12,7 +12,7 @@ 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": "¿De verdad 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",
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Vence el",
|
||||
"account.shares.table.createdAt": "Creado el",
|
||||
"account.shares.table.size": "Tamaño",
|
||||
"account.shares.table.password-protected": "Protegido por contraseña",
|
||||
"account.shares.table.visitor-count": "{count} de {max}",
|
||||
"account.shares.table.expiry-never": "Nunca",
|
||||
"account.shares.modal.share-informations": "Información del compartido",
|
||||
"account.shares.modal.share-link": "Enlace",
|
||||
"account.shares.modal.delete.title": "Eliminar enlace compartido: {share}",
|
||||
@@ -189,7 +192,7 @@ export default {
|
||||
"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.delete.title": "Eliminar usuario: {username} ?",
|
||||
"admin.users.edit.delete.title": "¿Eliminar usuario: {username} ?",
|
||||
"admin.users.edit.delete.description": "¿Realmente deseas eliminar a este usuario y todos sus enlaces compartidos?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Crear usuario",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Compartición privada",
|
||||
"share.error.access-denied.description": "La cuenta actual no tiene permiso para acceder a este compartido",
|
||||
"share.modal.password.title": "Se requiere contraseña",
|
||||
"share.modal.password.description": "Por favor, ingresa la contraseña para acceder a este enlace compartido.",
|
||||
"share.modal.password.description": "Por favor, ingresa la contraseña para acceder a este recurso compartido.",
|
||||
"share.modal.password": "Contraseña",
|
||||
"share.modal.error.invalid-password": "Contraseña inválida",
|
||||
"share.button.download-all": "Descargar todo",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Aviso legal",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Política de privacidad",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Archivo de configuración presente",
|
||||
"admin.config.config-file-warning.description": "Como tienes configurado Pingvin Share con un archivo de configuración, no puedes cambiar la configuración a través de la interfaz gráfica.",
|
||||
"admin.config.title": "Configuración",
|
||||
"admin.config.category.general": "General",
|
||||
"admin.config.category.share": "Compartido",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"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.session-duration": "Duración de la sesión",
|
||||
"admin.config.general.session-duration.description": "Tiempo en horas después del cual un usuario debe iniciar sesión de nuevo (por defecto: 3 meses).",
|
||||
"admin.config.general.session-duration.description": "Tiempo después del cual un usuario debe volver a iniciar sesión (por defecto: 3 meses).",
|
||||
"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.placeholder": "Elegir imagen",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Expiración máxima para compartir en horas. Establezca en 0 para permitir una expiración ilimitada.",
|
||||
"admin.config.share.max-expiration.description": "Plazo máximo de caducidad. Establecer en 0 para enlaces sin caducidad.",
|
||||
"admin.config.share.share-id-length": "Longitud de ID compartido por defecto",
|
||||
"admin.config.share.share-id-length.description": "Longitud predeterminada para el ID generado de un compartido. Este valor también se usa para generar enlaces compartidos de uso inverso. Un valor inferior a 8 no se considera seguro.",
|
||||
"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",
|
||||
"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.chunk-size": "Tamaño de los fragmentos",
|
||||
"admin.config.share.chunk-size.description": "Ajusta el tamaño del fragmento (en bytes) para tus subidas y equilibra la eficiencia y la fiabilidad según tu conexión a Internet. Fragmentos más pequeños pueden aumentar las tasas de éxito para conexiones inestables, mientras que fragmentos más grandes hacen que las subidas sean más rápidas para conexiones estables.",
|
||||
"admin.config.share.chunk-size.description": "Ajusta el tamaño del fragmento para tus subidas y equilibra la eficiencia y la fiabilidad según tu conexión a Internet. Fragmentos más pequeños pueden aumentar las tasas de éxito para conexiones inestables, mientras que fragmentos más grandes hacen que las subidas sean más rápidas para conexiones estables.",
|
||||
"admin.config.share.auto-open-share-modal": "Auto abrir un modal de creación de compartidos",
|
||||
"admin.config.share.auto-open-share-modal.description": "El modal de creación de compartir aparece automáticamente cuando un usuario selecciona archivos, eliminando la necesidad de hacer clic manualmente en el botón.",
|
||||
"admin.config.smtp.enabled": "Habilitar",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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 desde la cual se envían los correos electrónicos",
|
||||
"admin.config.smtp.email.description": "Dirección de correo electrónico desde la cual se envían los correos electrónicos",
|
||||
"admin.config.smtp.username": "Usuario",
|
||||
"admin.config.smtp.username.description": "Usuario del servidor SMTP",
|
||||
"admin.config.smtp.password": "Contraseña",
|
||||
@@ -422,9 +433,9 @@ export default {
|
||||
"admin.config.ldap.enabled.description": "Usar autenticación LDAP para el inicio de sesión de usuarios",
|
||||
"admin.config.ldap.url": "URL del servidor",
|
||||
"admin.config.ldap.url.description": "URL del servidor LDAP",
|
||||
"admin.config.ldap.bind-dn": "Bind DN",
|
||||
"admin.config.ldap.bind-dn": "Usuario LDAP",
|
||||
"admin.config.ldap.bind-dn.description": "Usuario predeterminado utilizado para realizar la búsqueda de usuarios",
|
||||
"admin.config.ldap.bind-password": "Bind password",
|
||||
"admin.config.ldap.bind-password": "Contraseña LDAP",
|
||||
"admin.config.ldap.bind-password.description": "Contraseña utilizada para realizar la búsqueda de usuarios",
|
||||
"admin.config.ldap.search-base": "Base de usuarios",
|
||||
"admin.config.ldap.search-base.description": "Ubicación base, donde se llevará a cabo la búsqueda de usuarios",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuración actualizada correctamente.",
|
||||
"admin.config.notify.logo-success": "Logo actualizado correctamente. Puede tardar unos minutos en actualizarse en el sitio web.",
|
||||
"admin.config.notify.no-changes": "No hay cambios que guardar.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Habilitado",
|
||||
"admin.config.s3.enabled.description": "Si se debería utilizar S3 en lugar del sistema de archivos local para almacenar los archivos compartidos.",
|
||||
"admin.config.s3.endpoint": "Punto de acceso/endpoint",
|
||||
"admin.config.s3.endpoint.description": "La URL del bucket S3.",
|
||||
"admin.config.s3.region": "Región",
|
||||
"admin.config.s3.region.description": "La región del bucket S3.",
|
||||
"admin.config.s3.bucket-name": "Nombre del bucket",
|
||||
"admin.config.s3.bucket-name.description": "El nombre del bucket S3.",
|
||||
"admin.config.s3.bucket-path": "Ruta",
|
||||
"admin.config.s3.bucket-path.description": "La ruta predeterminada que se debe usar para almacenar los archivos en el bucket S3.",
|
||||
"admin.config.s3.key": "Clave",
|
||||
"admin.config.s3.key.description": "La clave que permite el acceso al bucket S3.",
|
||||
"admin.config.s3.secret": "Secreto",
|
||||
"admin.config.s3.secret.description": "El secreto que permite acceder al bucket S3.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Habilitar avisos legales",
|
||||
"admin.config.legal.enabled.description": "Mostrar un enlace al aviso legal y a la política de privacidad en el pie de página.",
|
||||
"admin.config.legal.imprint-text": "Texto del aviso legal",
|
||||
"admin.config.legal.imprint-text.description": "El texto que debería mostrarse en el aviso legal. Soporta Markdown. Dejar en blanco para enlazar a un enlace externo.",
|
||||
"admin.config.legal.imprint-url": "URL del aviso legal",
|
||||
"admin.config.legal.imprint-url.description": "Si ya tiene una página de aviso legal, puede enlazarlo aquí en lugar de utilizar el campo de texto.",
|
||||
"admin.config.legal.privacy-policy-text": "Texto de la política de privacidad",
|
||||
"admin.config.legal.privacy-policy-text.description": "El texto que debe mostrarse en la política de privacidad. Compatible con Markdown. Dejar en blanco para enlazar a una página de política de privacidad externa.",
|
||||
"admin.config.legal.privacy-policy-url": "URL de la política de privacidad",
|
||||
"admin.config.legal.privacy-policy-url.description": "Si ya tiene una página de política de privacidad puede enlazarla aquí en lugar de usar el campo de texto.",
|
||||
// 404
|
||||
"404.description": "Oops esta página no existe.",
|
||||
"404.button.home": "Regrésame al inicio",
|
||||
|
||||
532
frontend/src/i18n/translations/et-EE.ts
Normal file
532
frontend/src/i18n/translations/et-EE.ts
Normal file
@@ -0,0 +1,532 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "Laadi üles",
|
||||
"navbar.signin": "Logi sisse",
|
||||
"navbar.home": "Avaleht",
|
||||
"navbar.signup": "Registreeru",
|
||||
"navbar.links.shares": "Minu jagamised",
|
||||
"navbar.links.reverse": "Pööratud jagamised",
|
||||
"navbar.avatar.account": "Minu konto",
|
||||
"navbar.avatar.admin": "Administreerimine",
|
||||
"navbar.avatar.signout": "Logi välja",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "<h>Isehostitav</h> failijagamisplatvorm.",
|
||||
"home.description": "Kas tõesti soovid anda oma isiklikud failid kolmandate osapoolte nagu WeTransfer kätte?",
|
||||
"home.bullet.a.name": "Isehostitav",
|
||||
"home.bullet.a.description": "Hosti Pingvin Share oma seadmes.",
|
||||
"home.bullet.b.name": "Privaatsus",
|
||||
"home.bullet.b.description": "Sinu failid on sinu omad ja neile ei pääse ligi kolmandad osapooled.",
|
||||
"home.bullet.c.name": "Ei mingeid tüütuid failisuuruse piiranguid",
|
||||
"home.bullet.c.description": "Laadi üles suuri faile ilma piiranguteta. Ainuke piirang on sinu kõvaketta maht.",
|
||||
"home.button.start": "Alusta",
|
||||
"home.button.source": "Lähtekood",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "Tere tulemast tagasi",
|
||||
"signin.description": "Kas sul pole veel kontot?",
|
||||
"signin.button.signup": "Registreeru",
|
||||
"signin.input.email-or-username": "E-post või kasutajanimi",
|
||||
"signin.input.email-or-username.placeholder": "Sinu e-post või kasutajanimi",
|
||||
"signin.input.password": "Parool",
|
||||
"signin.input.password.placeholder": "Sinu parool",
|
||||
"signin.button.submit": "Logi sisse",
|
||||
"signIn.notify.totp-required.title": "Kahefaktoriline autentimine nõutud",
|
||||
"signIn.notify.totp-required.description": "Palun sisesta oma kahefaktorilise autentimise kood",
|
||||
"signIn.oauth.or": "VÕI",
|
||||
"signIn.oauth.signInWith": "Logi sisse kasutades",
|
||||
"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": "Loo konto",
|
||||
"signup.description": "Kas sul on juba konto?",
|
||||
"signup.button.signin": "Logi sisse",
|
||||
"signup.input.username": "Kasutajanimi",
|
||||
"signup.input.username.placeholder": "Sinu kasutajanimi",
|
||||
"signup.input.email": "E-post",
|
||||
"signup.input.email.placeholder": "Sinu e-post",
|
||||
"signup.button.submit": "Alustame",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "TOTP autentimine",
|
||||
"totp.button.signIn": "Sisene",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Unustasid oma parooli?",
|
||||
"resetPassword.description": "Parooli lähtestamiseks sisesta enda e-posti aadress.",
|
||||
"resetPassword.notify.success": "Kui antud e-post on registreeritud, saadetakse e-mailiga link parooli lähtestamiseks.",
|
||||
"resetPassword.button.back": "Tagasi sisselogimislehele",
|
||||
"resetPassword.text.resetPassword": "Lähtesta parool",
|
||||
"resetPassword.text.enterNewPassword": "Sisesta uus parool",
|
||||
"resetPassword.input.password": "Uus parool",
|
||||
"resetPassword.notify.passwordReset": "Sinu parool on edukalt lähtestatud.",
|
||||
// /account
|
||||
"account.title": "Minu konto",
|
||||
"account.card.info.title": "Konto info",
|
||||
"account.card.info.username": "Kasutajanimi",
|
||||
"account.card.info.email": "E-post",
|
||||
"account.notify.info.success": "Konto edukalt uuendatud",
|
||||
"account.card.password.title": "Parool",
|
||||
"account.card.password.old": "Vana parool",
|
||||
"account.card.password.new": "Uus parool",
|
||||
"account.card.password.noPasswordSet": "Sul pole parooli seatud. E-posti ja parooliga sisselogimiseks pead looma parooli.",
|
||||
"account.notify.password.success": "Parool edukalt muudetud",
|
||||
"account.card.oauth.title": "Sisselogimine sotsiaalmeediatega",
|
||||
"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": "Ühenda",
|
||||
"account.card.oauth.unlink": "Eemalda ühendus",
|
||||
"account.card.oauth.unlinked": "Ühendus eemaldatud",
|
||||
"account.modal.unlink.title": "Eemalda konto seos",
|
||||
"account.modal.unlink.description": "Sotsiaalmeedia kontode lahtiühendamine võib põhjustada konto kaotamist kui sa ei mäleta oma sisselogimisandmeid",
|
||||
"account.notify.oauth.unlinked.success": "Ühendus eemaldatud edukalt",
|
||||
"account.card.security.title": "Turvalisus",
|
||||
"account.card.security.totp.enable.description": "Sisesta oma praegune parool, et alustada TOTP sisselülitamist",
|
||||
"account.card.security.totp.disable.description": "Sisesta oma praegune parool, et välja lülitada TOTP",
|
||||
"account.card.security.totp.button.start": "Alusta",
|
||||
"account.modal.totp.title": "Lülita sisse TOTP",
|
||||
"account.modal.totp.step1": "1. samm: Lisa oma autentikaator",
|
||||
"account.modal.totp.step2": "2. samm: Kinnita oma kood",
|
||||
"account.modal.totp.enterManually": "Sisesta käsitsi",
|
||||
"account.modal.totp.code": "Kood",
|
||||
"common.button.clickToCopy": "Klõpsa, et kopeerida",
|
||||
"account.modal.totp.verify": "Kinnita",
|
||||
"account.notify.totp.disable": "TOTP edukalt välja lülitatud",
|
||||
"account.notify.totp.enable": "TOTP edukalt sisse lülitatud",
|
||||
"account.card.language.title": "Keel",
|
||||
"account.card.language.description": "Projekti tõlkis kogukond. Mõned keeleversioonid võivad olla mittetäielikud.",
|
||||
"account.card.color.title": "Värviskeem",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Tume",
|
||||
"account.theme.light": "Hele",
|
||||
"account.theme.system": "Süsteemi",
|
||||
"account.button.delete": "Kustuta konto",
|
||||
"account.modal.delete.title": "Kustuta konto",
|
||||
"account.modal.delete.description": "Kas tahad tõesti kustutada enda konto koos kõikide jagatud failidega?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Minu jagamised",
|
||||
"account.shares.title.empty": "Siin on tühjus 👀",
|
||||
"account.shares.description.empty": "Sul pole ühtegi jagamist.",
|
||||
"account.shares.button.create": "Loo üks",
|
||||
"account.shares.info.title": "Jagamise andmed",
|
||||
"account.shares.table.id": "ID",
|
||||
"account.shares.table.name": "Nimi",
|
||||
"account.shares.table.description": "Kirjeldus",
|
||||
"account.shares.table.visitors": "Külastajad",
|
||||
"account.shares.table.expiresAt": "Aegub",
|
||||
"account.shares.table.createdAt": "Loodud",
|
||||
"account.shares.table.size": "Suurus",
|
||||
"account.shares.table.password-protected": "Parooliga kaitstud",
|
||||
"account.shares.table.visitor-count": "{count} / {max}",
|
||||
"account.shares.table.expiry-never": "Mitte kunagi",
|
||||
"account.shares.modal.share-informations": "Jagamise andmed",
|
||||
"account.shares.modal.share-link": "Jagamise link",
|
||||
"account.shares.modal.delete.title": "Kustuta jagamine: {share}",
|
||||
"account.shares.modal.delete.description": "Kas soovid tõesti seda jagamist kustutada?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Tagasijagamine",
|
||||
"account.reverseShares.description": "Tagasijagamine võimaldab sul genereerida unikaalse URL-i, mille kaudu väliskasutajad saavad luua jagamise.",
|
||||
"account.reverseShares.title.empty": "Siin on tühjus 👀",
|
||||
"account.reverseShares.description.empty": "Sul pole ühtegi tagasijagamist.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Loo tagasijagamine",
|
||||
"account.reverseShares.modal.expiration.label": "Aegumisaeg",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "Minut",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "Minutit",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "Tund",
|
||||
"account.reverseShares.modal.expiration.hour-plural": "Tundi",
|
||||
"account.reverseShares.modal.expiration.day-singular": "Päev",
|
||||
"account.reverseShares.modal.expiration.day-plural": "Päeva",
|
||||
"account.reverseShares.modal.expiration.week-singular": "Nädal",
|
||||
"account.reverseShares.modal.expiration.week-plural": "Nädalat",
|
||||
"account.reverseShares.modal.expiration.month-singular": "Kuu",
|
||||
"account.reverseShares.modal.expiration.month-plural": "Kuud",
|
||||
"account.reverseShares.modal.expiration.year-singular": "Aasta",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Aastat",
|
||||
"account.reverseShares.modal.max-size.label": "Jagamise maksimaalne suurus",
|
||||
"account.reverseShares.modal.send-email": "Saada e-posti teavitusi",
|
||||
"account.reverseShares.modal.send-email.description": "Sulle saadetakse e-posti teavitus kui selle tagasijagamise lingiga luuakse jagamine.",
|
||||
"account.reverseShares.modal.simplified": "Lihtrežiim",
|
||||
"account.reverseShares.modal.simplified.description": "Muuda faili üleslaadija jaoks lihtsaks faili sinuga jagamine. Nad saavad muuta ainult jagamise nime ja kirjeldust.",
|
||||
"account.reverseShares.modal.public-access": "Avalik juurdepääs",
|
||||
"account.reverseShares.modal.public-access.description": "Tee selle tagasijagamise lingi abil loodud jagamised avalikuks. Kui see on keelatud, saavad neid vaadata ainult sina ja jagamise looja.",
|
||||
"account.reverseShares.modal.max-use.label": "Maksimaalne kasutuskordade arv",
|
||||
"account.reverseShares.modal.max-use.description": "Maksimaalne arv kordi, mil seda URL-i saab kasutada jagamise loomiseks.",
|
||||
"account.reverseShare.never-expires": "See tagasijagamine ei aegu kunagi.",
|
||||
"account.reverseShare.expires-on": "See tagasijagamine aegub {expiration}.",
|
||||
"account.reverseShares.table.no-shares": "Ühtegi jagamist pole veel loodud",
|
||||
"account.reverseShares.table.count.singular": "jagamine",
|
||||
"account.reverseShares.table.count.plural": "jagamised",
|
||||
"account.reverseShares.table.shares": "Jagamised",
|
||||
"account.reverseShares.table.remaining": "Järelejäänud kasutuskorrad",
|
||||
"account.reverseShares.table.max-size": "Jagamise maksimaalne suurus",
|
||||
"account.reverseShares.table.expires": "Aegub",
|
||||
"account.reverseShares.modal.reverse-share-link": "Tagasijagamise link",
|
||||
"account.reverseShares.modal.delete.title": "Kustuta tagasijagamine",
|
||||
"account.reverseShares.modal.delete.description": "Kas soovid tõesti seda tagasijagamist kustutada? Kui jah, siis kustutatakse ka sellega seotud jagamised.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Administreerimine",
|
||||
"admin.button.users": "Kasutajate haldamine",
|
||||
"admin.button.shares": "Jagamiste haldamine",
|
||||
"admin.button.config": "Seaded",
|
||||
"admin.version": "Versioon",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "Kasutajate haldamine",
|
||||
"admin.users.table.username": "Kasutajanimi",
|
||||
"admin.users.table.email": "E-post",
|
||||
"admin.users.table.admin": "Admin",
|
||||
"admin.users.edit.update.title": "Muuda kasutajat: {username}",
|
||||
"admin.users.edit.update.admin-privileges": "Administraatori õigused",
|
||||
"admin.users.edit.update.change-password.title": "Muuda parooli",
|
||||
"admin.users.edit.update.change-password.field": "Uus parool",
|
||||
"admin.users.edit.update.change-password.button": "Salvesta uus parool",
|
||||
"admin.users.edit.update.notify.password.success": "Parool edukalt muudetud",
|
||||
"admin.users.edit.delete.title": "Kustuta kasutaja: {username}?",
|
||||
"admin.users.edit.delete.description": "Kas soovid tõesti kustutada selle kasutaja ja kõik tema jagamised?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Loo kasutaja",
|
||||
"admin.users.modal.create.username": "Kasutajanimi",
|
||||
"admin.users.modal.create.email": "E-post",
|
||||
"admin.users.modal.create.password": "Parool",
|
||||
"admin.users.modal.create.manual-password": "Sea parool käsitsi",
|
||||
"admin.users.modal.create.manual-password.description": "Kui see ei ole märgitud, saab kasutaja e-kirja lingiga mille kaudu oma parooli seada.",
|
||||
"admin.users.modal.create.admin": "Administraatori õigused",
|
||||
"admin.users.modal.create.admin.description": "Kui see on märgitud, saab kasutaja pääseda administraatori paneelile.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Jagamiste haldus",
|
||||
"admin.shares.table.id": "Jagamise ID",
|
||||
"admin.shares.table.username": "Looja",
|
||||
"admin.shares.table.visitors": "Külastajad",
|
||||
"admin.shares.table.expires": "Aegub",
|
||||
"admin.shares.edit.delete.title": "Kustuta jagamine: {id}",
|
||||
"admin.shares.edit.delete.description": "Kas soovid tõesti seda jagamist kustutada?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Laadi üles",
|
||||
"upload.notify.confirm-leave": "Kas oled kindel, et soovid sellelt lehelt lahkuda? Sinu üleslaadimine tühistatakse.",
|
||||
"upload.notify.generic-error": "Jagamise lõpetamisel tekkis viga.",
|
||||
"upload.notify.count-failed": "{count} faili ei õnnestunud üles laadida. Proovime uuesti.",
|
||||
"upload.reverse-share.error.invalid.title": "Vigane tagasijagamise link",
|
||||
"upload.reverse-share.error.invalid.description": "See tagasijagamine on aegunud või vigane.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Laadi üles failid",
|
||||
"upload.dropzone.description": "Lohista ja aseta failid siia, et alustada jagamist. Võtame vastu ainult faile, mille kogusuurus on maksimaalselt {maxSize}.",
|
||||
"upload.dropzone.notify.file-too-big": "Sinu failid ületavad lubatud suuruse {maxSize}.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "Nimi",
|
||||
"upload.filelist.size": "Suurus",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Loo jagamine",
|
||||
"upload.modal.link.error.invalid": "Võib sisaldada ainult tähti, numbreid, alakriipse ja kriipse",
|
||||
"upload.modal.link.error.taken": "See link on juba kasutusel",
|
||||
"upload.modal.not-signed-in": "Sa ei ole sisse logitud",
|
||||
"upload.modal.not-signed-in-description": "Sa ei saa oma jagamist käsitsi kustutada ega külastajate arvu vaadata.",
|
||||
"upload.modal.expires.never": "mitte kunagi",
|
||||
"upload.modal.expires.never-long": "Püsiv jagamine",
|
||||
"upload.modal.expires.error.too-long": "Aegumiskuupäev ületab lubatud maksimaalset {max}.",
|
||||
"upload.modal.link.label": "Link",
|
||||
"upload.modal.expires.label": "Aegumisaeg",
|
||||
"upload.modal.expires.minute-singular": "Minut",
|
||||
"upload.modal.expires.minute-plural": "Minutit",
|
||||
"upload.modal.expires.hour-singular": "Tund",
|
||||
"upload.modal.expires.hour-plural": "Tundi",
|
||||
"upload.modal.expires.day-singular": "Päev",
|
||||
"upload.modal.expires.day-plural": "Päeva",
|
||||
"upload.modal.expires.week-singular": "Nädal",
|
||||
"upload.modal.expires.week-plural": "Nädalat",
|
||||
"upload.modal.expires.month-singular": "Kuu",
|
||||
"upload.modal.expires.month-plural": "Kuud",
|
||||
"upload.modal.expires.year-singular": "Aasta",
|
||||
"upload.modal.expires.year-plural": "Aastat",
|
||||
"upload.modal.accordion.name-and-description.title": "Nimi ja kirjeldus",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Nimi",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder": "Märkus selle jagamise saajatele",
|
||||
"upload.modal.accordion.email.title": "E-kirja saajad",
|
||||
"upload.modal.accordion.email.placeholder": "Sisesta e-posti aadressid",
|
||||
"upload.modal.accordion.email.invalid-email": "Vigane e-posti aadress",
|
||||
"upload.modal.accordion.security.title": "Turvavalikud",
|
||||
"upload.modal.accordion.security.password.label": "Paroolikaitse",
|
||||
"upload.modal.accordion.security.password.placeholder": "Parool puudub",
|
||||
"upload.modal.accordion.security.max-views.label": "Maksimaalne vaatamiste arv",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Piiramatu",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "See jagamine ei aegu mitte kunagi.",
|
||||
"upload.modal.completed.expires-on": "See jagamine aegub {expiration}.",
|
||||
"upload.modal.completed.share-ready": "Jagamine valmis",
|
||||
"upload.modal.completed.notified-reverse-share-creator": "Oleme teavitanud tagasijagamise loojat. Saad samuti seda linki nendega käsitsi teiste vahenditega jagada.",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Jagamine {shareId}",
|
||||
"share.description": "Vaata, mida ma sinuga jagasin!",
|
||||
"share.error.visitor-limit-exceeded.title": "Külastajate limiit ületatud",
|
||||
"share.error.visitor-limit-exceeded.description": "Selle jagamise külastajate limiit on ületatud.",
|
||||
"share.error.removed.title": "Jagamine eemaldatud",
|
||||
"share.error.not-found.title": "Jagamist ei leitud",
|
||||
"share.error.not-found.description": "Otsitavat jagamist ei eksisteeri.",
|
||||
"share.error.access-denied.title": "Privaatne jagamine",
|
||||
"share.error.access-denied.description": "Praegusel kontol puudub luba sellele jagamisele juurde pääseda",
|
||||
"share.modal.password.title": "Parool vajalik",
|
||||
"share.modal.password.description": "Palun sisesta parool, et sellele jagamisele juurde pääseda.",
|
||||
"share.modal.password": "Parool",
|
||||
"share.modal.error.invalid-password": "Vigane parool",
|
||||
"share.button.download-all": "Laadi kõik alla",
|
||||
"share.notify.download-all-preparing": "Jagamist valmistatakse ette. Palun proovi mõne minuti pärast uuesti.",
|
||||
"share.modal.file-link": "Faili link",
|
||||
"share.table.name": "Nimi",
|
||||
"share.table.size": "Suurus",
|
||||
"share.modal.file-preview.error.not-supported.title": "Eelvaadet ei toetata",
|
||||
"share.modal.file-preview.error.not-supported.description": "Selle failitüübi eelvaateid ei toetata. Faili vaatamiseks laadi see alla.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "Muuda jagamist {shareId}",
|
||||
"share.edit.append-upload": "Lisa fail",
|
||||
"share.edit.notify.generic-error": "Jagamise lõpetamisel tekkis viga.",
|
||||
"share.edit.notify.save-success": "Jagamine edukalt uuendatud",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Kontaktandmed",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privaatsuspoliitika",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Konfiguratsioonifail olemas",
|
||||
"admin.config.config-file-warning.description": "Kuna teil on konfigureeritud Pingvin Share konfiguratsioonifailiga, ei saa te muuta konfiguratsiooni kasutajaliidest kasutades.",
|
||||
"admin.config.title": "Seaded",
|
||||
"admin.config.category.general": "Üldine",
|
||||
"admin.config.category.share": "Jagamine",
|
||||
"admin.config.category.email": "E-post",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "Sotsiaalmeediaga sisselogimine",
|
||||
"admin.config.general.app-name": "Rakenduse nimi",
|
||||
"admin.config.general.app-name.description": "Rakenduse nimi",
|
||||
"admin.config.general.app-url": "Rakenduse URL",
|
||||
"admin.config.general.app-url.description": "URL, mille kaudu Pingvin Share on kättesaadav",
|
||||
"admin.config.general.secure-cookies": "Turvalised küpsised",
|
||||
"admin.config.general.secure-cookies.description": "Kas küpsistele seata turvalisuse lipp. Kui see on lubatud, ei tööta teenus HTTP kaudu.",
|
||||
"admin.config.general.show-home-page": "Kuva avaleht",
|
||||
"admin.config.general.show-home-page.description": "Kas kuvada avalehte",
|
||||
"admin.config.general.session-duration": "Seansi kestus",
|
||||
"admin.config.general.session-duration.description": "Aeg, mille pärast kasutaja peab uuesti sisse logima (vaikeväärtus: 3 kuud).",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Muuda oma logo laadides üles uus pilt. Pildi formaat peab olema PNG ja kuju 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Vali pilt",
|
||||
"admin.config.email.enable-share-email-recipients": "Luba e-posti teavitused jagamise saajatele",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Kas lubada e-posti teavitusi jagamise saajatele. Lubage ainult, kui SMTP on aktiveeritud.",
|
||||
"admin.config.email.share-recipients-subject": "Jagamise saajate pealkiri",
|
||||
"admin.config.email.share-recipients-subject.description": "Pealkiri mis saadetakse jagamise saajatele.",
|
||||
"admin.config.email.share-recipients-message": "Jagamise saajate sõnum",
|
||||
"admin.config.email.share-recipients-message.description": "Sõnum, mis saadetakse jagamise saajatele. Kasutatavad muutujad:\n {creator} - jagamise looja kasutajanimi\n {creatorEmail} - jagamise looja e-post\n {shareUrl} - jagamise URL\n {desc} - jagamise kirjeldus\n {expires} - jagamise aegumiskuupäev\n Need muutujad asendatakse vastavate väärtustega.",
|
||||
"admin.config.email.reverse-share-subject": "Tagasijagamise Pealkiri",
|
||||
"admin.config.email.reverse-share-subject.description": "Pealkiri mis saadetakse kui keegi loob jagamise sinu tagasijagamise lingiga.",
|
||||
"admin.config.email.reverse-share-message": "Tagasijagamise sõnum",
|
||||
"admin.config.email.reverse-share-message.description": "Sõnum mis saadetakse kui keegi loob jagamise sinu tagasijagamise lingiga. {shareUrl} asendatakse looja nime ja jagamise URL-iga.",
|
||||
"admin.config.email.reset-password-subject": "Parooli lähtestamise Pealkiri",
|
||||
"admin.config.email.reset-password-subject.description": "Pealkiri mis saadetakse kui kasutaja taotleb parooli lähtestamist.",
|
||||
"admin.config.email.reset-password-message": "Parooli lähtestamise sõnum",
|
||||
"admin.config.email.reset-password-message.description": "Sõnum mis saadetakse kui kasutaja taotleb parooli lähtestamist. {url} asendatakse parooli lähtestamise URL-iga.",
|
||||
"admin.config.email.invite-subject": "Kutse pealkiri",
|
||||
"admin.config.email.invite-subject.description": "Pealkiri mis saadetakse kui administraator kutsub kasutajat.",
|
||||
"admin.config.email.invite-message": "Kutse sõnum",
|
||||
"admin.config.email.invite-message.description": "Sõnum mis saadetakse kui administraator kutsub kasutajat. {url} asendatakse kutse URL-iga, {email} e-posti aadressiga ja {password} kasutaja parooliga.",
|
||||
"admin.config.share.allow-registration": "Luba registreerimine",
|
||||
"admin.config.share.allow-registration.description": "Kas registreerimine on lubatud",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Luba autentimata jagamised",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Kas autentimata kasutajad saavad jagamisi luua",
|
||||
"admin.config.share.max-expiration": "Maksimaalne aegumisaeg",
|
||||
"admin.config.share.max-expiration.description": "Maksimaalne jagamise aegumisaeg. Määra 0, et lubada piiramatu aegumisaeg.",
|
||||
"admin.config.share.share-id-length": "Vaikimisi jagamise ID pikkus",
|
||||
"admin.config.share.share-id-length.description": "Vaikimisi pikkus jagamise genereeritud ID jaoks. Seda väärtust kasutatakse ka tagasijagamise linkide loomiseks. Väärtust alla 8 ei peeta turvaliseks.",
|
||||
"admin.config.share.max-size": "Maksimaalne suurus",
|
||||
"admin.config.share.max-size.description": "Maksimaalne jagamise suurus",
|
||||
"admin.config.share.zip-compression-level": "Zip tihendustase",
|
||||
"admin.config.share.zip-compression-level.description": "Reguleeri tihendustaset, et leida tasakaal faili suuruse ja tihendamise kiiruse vahel. Kehtivad väärtused jäävad vahemikku 0 kuni 9, kus 0 tähendab mitte tihendamist ja 9 maksimaalset tihendamist. ",
|
||||
"admin.config.share.chunk-size": "Andmeploki suurus",
|
||||
"admin.config.share.chunk-size.description": "Reguleeri üleslaadimiseks kasutatavate andmeplokkide suurust, et saavutada efektiivsus ja töökindlus vastavalt sinu internetiühendusele. Väiksemad plokid võivad ebastabiilsete ühenduste korral parandada üleslaadimise edukust, samas kui suuremad plokid muudavad üleslaadimise kiiremaks stabiilsete ühenduste korral.",
|
||||
"admin.config.share.auto-open-share-modal": "Ava jagamise loomise aken automaatselt",
|
||||
"admin.config.share.auto-open-share-modal.description": "Jagamise loomise aken avaneb automaatselt kui kasutaja valib failid nii, et ei pea nuppu käsitsi klõpsama.",
|
||||
"admin.config.smtp.enabled": "Luba",
|
||||
"admin.config.smtp.enabled.description": "Kas SMTP on lubatud. Sea see tõeks ainult siis, kui oled sisestanud oma SMTP serveri hosti, pordi, e-posti, kasutajanime ja parooli.",
|
||||
"admin.config.smtp.host": "Host",
|
||||
"admin.config.smtp.host.description": "SMTP serveri host",
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "SMTP serveri port",
|
||||
"admin.config.smtp.email": "E-post",
|
||||
"admin.config.smtp.email.description": "E-posti aadress, millelt e-kirjad saadetakse",
|
||||
"admin.config.smtp.username": "Kasutajanimi",
|
||||
"admin.config.smtp.username.description": "SMTP serveri kasutajanimi",
|
||||
"admin.config.smtp.password": "Parool",
|
||||
"admin.config.smtp.password.description": "SMTP serveri parool",
|
||||
"admin.config.smtp.button.test": "Saada test e-kiri",
|
||||
"admin.config.smtp.allow-unauthorized-certificates": "Usalda volitamata SMTP serveri sertifikaate",
|
||||
"admin.config.smtp.allow-unauthorized-certificates.description": "Sea see tõeks ainult siis, kui pead usaldama iseallkirjastatud sertifikaate.",
|
||||
"admin.config.oauth.allow-registration": "Luba registreerimine",
|
||||
"admin.config.oauth.allow-registration.description": "Luba kasutajatel registreerida sotsiaalmeedia sisselogimise kaudu",
|
||||
"admin.config.oauth.ignore-totp": "Ignoreeri TOTP-i",
|
||||
"admin.config.oauth.ignore-totp.description": "Kas ignoreerida TOTP-i kui kasutaja kasutab sotsiaalset sisselogimist.",
|
||||
"admin.config.oauth.disable-password": "Keela parooliga sisselogimine",
|
||||
"admin.config.oauth.disable-password.description": "Kas keelata parooliga sisselogimine\nVeendu, et OAuth pakkuja on korralikult seadistatud enne selle aktiveerimist, et vältida juurdepääsu lukustamist.",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "Kas GitHub sisselogimine on lubatud",
|
||||
"admin.config.oauth.github-client-id": "GitHub kliendi ID",
|
||||
"admin.config.oauth.github-client-id.description": "GitHub OAuth rakenduse kliendi ID",
|
||||
"admin.config.oauth.github-client-secret": "GitHub kliendi saladus",
|
||||
"admin.config.oauth.github-client-secret.description": "GitHub OAuth rakenduse kliendi saladus",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Kas Google sisselogimine on lubatud",
|
||||
"admin.config.oauth.google-client-id": "Google kliendi ID",
|
||||
"admin.config.oauth.google-client-id.description": "Google OAuth rakenduse kliendi ID",
|
||||
"admin.config.oauth.google-client-secret": "Google kliendi saladus",
|
||||
"admin.config.oauth.google-client-secret.description": "Google OAuth rakenduse kliendi saladus",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Kas Microsofti sisselogimine on lubatud",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsofti tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Microsoft OAuth rakenduse tenant ID\ncommon: Kasutajad, kellel on nii isiklik Microsofti konto kui ka töö- või koolikonto Microsoft Entra ID-s, saavad rakendusse sisse logida. organizations: Ainult töö- või koolikontoga kasutajad saavad sisse logida.\nconsumers: Ainult isikliku Microsofti kontoga kasutajad saavad sisse logida.\nMicrosoft Entra tenanti domeeninimi või GUID formaadis tenant ID: Ainult teatud tenanti kasutajad saavad sisse logida.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft kliendi ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Microsoft OAuth rakenduse kliendi ID",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft kliendi saladus",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Microsoft OAuth rakenduse kliendi saladus",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Kas Discord sisselogimine on lubatud",
|
||||
"admin.config.oauth.discord-limited-users": "Piiratud Discord kasutajad",
|
||||
"admin.config.oauth.discord-limited-users.description": "Piira sisselogimist ainult teatud kasutajatele nende Discord ID alusel. Jäta tühjaks, et keelata.",
|
||||
"admin.config.oauth.discord-limited-guild": "Piiratud Discord serveri ID",
|
||||
"admin.config.oauth.discord-limited-guild.description": "Piira sisselogimist ainult teatud serveri kasutajatele. Jäta tühjaks, et keelata.",
|
||||
"admin.config.oauth.discord-client-id": "Discord kliendi ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Discord OAuth rakenduse kliendi ID",
|
||||
"admin.config.oauth.discord-client-secret": "Discord kliendi saladus",
|
||||
"admin.config.oauth.discord-client-secret.description": "Discord OAuth rakenduse kliendi saladus",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description": "Kas OpenID Connect sisselogimine on lubatud",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect avastamis-URI",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "OpenID Connect OAuth rakenduse avastamis-URI",
|
||||
"admin.config.oauth.oidc-sign-out": "Logi välja OpenID Connectist",
|
||||
"admin.config.oauth.oidc-sign-out.description": "Kas 'Logi välja' nupp logib välja OpenID Connect pakkujast",
|
||||
"admin.config.oauth.oidc-scope": "OpenID Connect ulatus",
|
||||
"admin.config.oauth.oidc-scope.description": "Ulatus, mida tuleks OpenID Connect pakkujalt küsida.",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect kasutajanime väide",
|
||||
"admin.config.oauth.oidc-username-claim.description": "Kasutajanime väide OpenID Connect ID tokenis. Jäta tühjaks kui sa ei tea mis seade see on.",
|
||||
"admin.config.oauth.oidc-role-path": "Tee rollideni OpenID Connect tokenis",
|
||||
"admin.config.oauth.oidc-role-path.description": "Peab olema kehtiv JMES tee, mis viitab rollide massiivile." + "Juurdepääsuõiguste haldamine OpenID Connecti rollide abil on soovitatav ainult siis, kui ühtegi muud identiteedipakkujat pole konfigureeritud ja parooliga sisselogimine on keelatud." + "Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-role-general-access": "OpenID Connect roll üldiseks juurdepääsuks",
|
||||
"admin.config.oauth.oidc-role-general-access.description": "Üldiseks juurdepääsuks nõutav roll. Kasutajal peab see roll olema, et ta saaks sisse logida." + "Jäta see tühjaks kui sa ei tea mis seade see on.",
|
||||
"admin.config.oauth.oidc-role-admin-access": "OpenID Connect roll admin juurdepääsuks",
|
||||
"admin.config.oauth.oidc-role-admin-access.description": "Üldiseks juurdepääsuks vajalik roll. Kasutaja peab selle rolli omama, et sisse logida. " + "Jäta see tühjaks kui sa ei tea mis seade see on",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect kliendi ID",
|
||||
"admin.config.oauth.oidc-client-id.description": "OpenID Connect OAuth rakenduse kliendi ID",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect kliendi saladus",
|
||||
"admin.config.oauth.oidc-client-secret.description": "OpenID Connect OAuth rakenduse kliendi saladus",
|
||||
"admin.config.category.ldap": "LDAP",
|
||||
"admin.config.ldap.enabled": "Luba LDAP",
|
||||
"admin.config.ldap.enabled.description": "Kasutaja sisselogimiseks kasutada LDAP autentimist",
|
||||
"admin.config.ldap.url": "Serveri URL",
|
||||
"admin.config.ldap.url.description": "LDAP serveri URL",
|
||||
"admin.config.ldap.bind-dn": "Bind DN",
|
||||
"admin.config.ldap.bind-dn.description": "Vaikimisi kasutaja, mida kasutatakse kasutajate otsimiseks",
|
||||
"admin.config.ldap.bind-password": "Bind parool",
|
||||
"admin.config.ldap.bind-password.description": "Parool, mida kasutatakse kasutajate otsimiseks",
|
||||
"admin.config.ldap.search-base": "Kasutajate alus",
|
||||
"admin.config.ldap.search-base.description": "Põhikoht, kus kasutajaid otsitakse",
|
||||
"admin.config.ldap.search-query": "Kasutaja päring",
|
||||
"admin.config.ldap.search-query.description": "Kasutaja päring, mida kasutatakse LDAP kasutaja otsimiseks 'Kasutajate alus' alt. %username% saab kasutada kasutaja sisestuse kohatäitjana.",
|
||||
"admin.config.ldap.admin-groups": "Admin grupp",
|
||||
"admin.config.ldap.admin-groups.description": "Grupp, mis on vajalik admin juurdepääsuks.",
|
||||
"admin.config.ldap.field-name-member-of": "Kasutaja gruppide atribuut",
|
||||
"admin.config.ldap.field-name-member-of.description": "LDAP atribuut, mis näitab, millesse gruppi kasutaja kuulub. Seda kasutatakse admin grupi kontrollimisel.",
|
||||
"admin.config.ldap.field-name-email": "Kasutaja e-posti atribuut",
|
||||
"admin.config.ldap.field-name-email.description": "LDAP atribuut kasutaja e-posti aadressi jaoks.",
|
||||
"admin.config.notify.success": "Seaded edukalt uuendatud.",
|
||||
"admin.config.notify.logo-success": "Logo edukalt uuendatud. Veebilehe värskendamiseks võib kuluda paar minutit.",
|
||||
"admin.config.notify.no-changes": "Pole muudatusi mida salvestada.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Lubatud",
|
||||
"admin.config.s3.enabled.description": "Kas S3-d tuleks kasutada jagatud failide salvestamiseks lokaalse failisüsteemi asemel.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "S3 ämbri URL.",
|
||||
"admin.config.s3.region": "Regioon",
|
||||
"admin.config.s3.region.description": "S3 ämbri regioon.",
|
||||
"admin.config.s3.bucket-name": "Ämbri nimi",
|
||||
"admin.config.s3.bucket-name.description": "S3 ämbri nimi.",
|
||||
"admin.config.s3.bucket-path": "S3 ämbri tee",
|
||||
"admin.config.s3.bucket-path.description": "Vaikimisi tee, mida kasutatakse failide salvestamiseks S3 ämbris.",
|
||||
"admin.config.s3.key": "Võti",
|
||||
"admin.config.s3.key.description": "S3 ämbri võti.",
|
||||
"admin.config.s3.secret": "Saladus",
|
||||
"admin.config.s3.secret.description": "S3 ämbri saladus.",
|
||||
"admin.config.category.legal": "Juriidiline",
|
||||
"admin.config.legal.enabled": "Luba juriidilised teated",
|
||||
"admin.config.legal.enabled.description": "Kas kuvada linki kontaktandmetele ja privaatsuspoliitikale jaluses.",
|
||||
"admin.config.legal.imprint-text": "Kontaktandmete tekst",
|
||||
"admin.config.legal.imprint-text.description": "Tekst, mis kuvatakse kontaktandmetel. Toetab Markdowni. Jäta tühjaks, et lingida välisele kontaktandmete lehele.",
|
||||
"admin.config.legal.imprint-url": "Kontaktandmete URL",
|
||||
"admin.config.legal.imprint-url.description": "Kui sul on juba kontaktandmete leht saad selle siia linkida selle asemel, et kasutada tekstivälja.",
|
||||
"admin.config.legal.privacy-policy-text": "Privaatsuspoliitika tekst",
|
||||
"admin.config.legal.privacy-policy-text.description": "Tekst mis kuvatakse privaatsuspoliitikas. Toetab Markdowni. Jäta tühjaks, et lingida välisele privaatsuspoliitika lehele.",
|
||||
"admin.config.legal.privacy-policy-url": "Privaatsuspoliitika URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "Kui sul on juba privaatsuspoliitika leht saad selle siia linkida selle asemel, et kasutada tekstivälja.",
|
||||
// 404
|
||||
"404.description": "Ups, seda lehte ei eksisteeri.",
|
||||
"404.button.home": "Viia mind tagasi avalehele",
|
||||
// error
|
||||
"error.title": "Viga",
|
||||
"error.description": "Ups!",
|
||||
"error.button.back": "Mine tagasi",
|
||||
"error.msg.default": "Midagi läks valesti.",
|
||||
"error.msg.access_denied": "Sa tühistasid autentimisprotsessi, palun proovi uuesti.",
|
||||
"error.msg.expired_token": "Autentimisprotsess kestis liiga kaua, palun proovi uuesti.",
|
||||
"error.msg.invalid_token": "Sisemine viga",
|
||||
"error.msg.no_user": "Kasutajat, kes on seotud selle {0} kontoga ei eksisteeri.",
|
||||
"error.msg.no_email": "Ei saa sellest {0} kontost e-posti aadressi hankida.",
|
||||
"error.msg.already_linked": "See {0} konto on juba seotud teise kontoga.",
|
||||
"error.msg.not_linked": "See {0} konto pole veel ühegi kontoga seotud.",
|
||||
"error.msg.unverified_account": "See {0} konto on kinnitamata, palun proovi pärast kinnitamist uuesti.",
|
||||
"error.msg.user_not_allowed": "Sul ei ole luba sisse logida.",
|
||||
"error.msg.cannot_get_user_info": "Ei õnnestunud saada sinu kasutaja andmeid sellest {0} kontost.",
|
||||
"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": "Salvesta",
|
||||
"common.button.create": "Loo",
|
||||
"common.button.submit": "Esita",
|
||||
"common.button.delete": "Kustuta",
|
||||
"common.button.cancel": "Tühista",
|
||||
"common.button.confirm": "Kinnita",
|
||||
"common.button.disable": "Lülita välja",
|
||||
"common.button.share": "Jaga",
|
||||
"common.button.generate": "Genereeri",
|
||||
"common.button.done": "Valmis",
|
||||
"common.text.link": "Link",
|
||||
"common.text.navigate-to-link": "Külastage linki",
|
||||
"common.text.or": "või",
|
||||
"common.text.redirecting": "Ümbersuunamine...",
|
||||
"common.button.go-back": "Mine tagasi",
|
||||
"common.button.go-home": "Mine avalehele",
|
||||
"common.notify.copied": "Sinu link kopeeriti lõikelauale",
|
||||
"common.notify.copied-link": "Sinu link kopeeriti lõikelauale",
|
||||
"common.success": "Õnnestus",
|
||||
"common.error": "Viga",
|
||||
"common.error.unknown": "Tundmatu viga",
|
||||
"common.error.invalid-email": "Vigane e-posti aadress",
|
||||
"common.error.too-short": "Peab olema vähemalt {length} tähemärki",
|
||||
"common.error.too-long": "Peab olema maksimaalselt {length} tähemärki",
|
||||
"common.error.number-too-small": "Peab olema vähemalt {min}",
|
||||
"common.error.number-too-large": "Peab olema maksimaalselt {max}",
|
||||
"common.error.exact-length": "Peab olema täpselt {length} tähemärki",
|
||||
"common.error.invalid-number": "Peab olema number",
|
||||
"common.error.field-required": "See väli on kohustuslik"
|
||||
};
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Koko",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Jaetun tiedot",
|
||||
"account.shares.modal.share-link": "Jaa linkki",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Private share",
|
||||
"share.error.access-denied.description": "The current account does not have permission to access this share",
|
||||
"share.modal.password.title": "Salasana vaaditaan",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Salasana",
|
||||
"share.modal.error.invalid-password": "Virheellinen salasana",
|
||||
"share.button.download-all": "Lataa kaikki",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Asetukset",
|
||||
"admin.config.category.general": "Yleiset",
|
||||
"admin.config.category.share": "Jako",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"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.session-duration": "Session Duration",
|
||||
"admin.config.general.session-duration.description": "Time in hours after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"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.placeholder": "Valitse kuva",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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.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. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"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",
|
||||
"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.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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Käyttäjätunnus",
|
||||
"admin.config.smtp.username.description": "SMTP palvelimen käyttäjänimi",
|
||||
"admin.config.smtp.password": "Salasana",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Hups tätä sivua ei ole olemassa.",
|
||||
"404.button.home": "Tuo minut takaisin kotiin",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expire le",
|
||||
"account.shares.table.createdAt": "Créé le",
|
||||
"account.shares.table.size": "Taille",
|
||||
"account.shares.table.password-protected": "Protégé par un mot de passe",
|
||||
"account.shares.table.visitor-count": "{count} sur {max}",
|
||||
"account.shares.table.expiry-never": "Jamais",
|
||||
"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}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Partage privé",
|
||||
"share.error.access-denied.description": "Le compte actuel n'a pas la permission d'accéder à ce partage",
|
||||
"share.modal.password.title": "Mot de passe requis",
|
||||
"share.modal.password.description": "Veuillez entrer le mot de passe d'accès à ce partage.",
|
||||
"share.modal.password.description": "Veuillez entrer le mot de passe pour accéder à ce partage.",
|
||||
"share.modal.password": "Mot de passe",
|
||||
"share.modal.error.invalid-password": "Mot de passe incorrect",
|
||||
"share.button.download-all": "Télécharger tout",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Mentions légales",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Politique de confidentialité",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Fichier de configuration présent",
|
||||
"admin.config.config-file-warning.description": "Puisque vous avez configuré Pingvin Share avec un fichier de configuration, vous ne pouvez pas modifier la configuration via l'interface utilisateur.",
|
||||
"admin.config.title": "Paramètres",
|
||||
"admin.config.category.general": "Général",
|
||||
"admin.config.category.share": "Partage",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"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.session-duration": "Durée de la session",
|
||||
"admin.config.general.session-duration.description": "Nombre d’heures après lesquelles un utilisateur doit se reconnecter (par défaut : 3 mois).",
|
||||
"admin.config.general.session-duration.description": "Temps après lequel un utilisateur doit se reconnecter (par défaut : 3 mois).",
|
||||
"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.placeholder": "Sélectionner une image",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Expiration du partage en heures. Réglez sur 0 pour qu'il n'expire jamais.",
|
||||
"admin.config.share.share-id-length": "Taille de l'identifiant généré",
|
||||
"admin.config.share.share-id-length.description": "Taille par défaut de l'identifiant généré pour un partage. Cette valeur est aussi utilisée pour générer les liens des partages inverses. Une valeur inférieure à 8 n'est pas considérée sûre.",
|
||||
"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",
|
||||
"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.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.share.chunk-size.description": "Ajustez la taille des tronçons 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.share.auto-open-share-modal": "Ouvrir automatiquement la modale de partage",
|
||||
"admin.config.share.auto-open-share-modal.description": "La modale de création de partage apparaît automatiquement lorsqu’un utilisateur sélectionne des fichiers, ce qui élimine le besoin de cliquer manuellement sur le bouton.",
|
||||
"admin.config.smtp.enabled": "Activer",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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 email à 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",
|
||||
@@ -403,8 +414,8 @@ export default {
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "L’URI de découverte de la connexion à l'application OpenID OAuth",
|
||||
"admin.config.oauth.oidc-sign-out": "Déconnexion du fournisseur OpenID Connect",
|
||||
"admin.config.oauth.oidc-sign-out.description": "Si activé, le bouton \"Déconnexion\" vous déconnectera également du fournisseur d'identité OpenID Connect",
|
||||
"admin.config.oauth.oidc-scope": "OpenID Connect scope",
|
||||
"admin.config.oauth.oidc-scope.description": "Scopes which should be requested from the OpenID Connect provider.",
|
||||
"admin.config.oauth.oidc-scope": "Paramètres de connexion OpenID",
|
||||
"admin.config.oauth.oidc-scope.description": "Paramètres fournis par votre fournisseur OpenID.",
|
||||
"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-role-path": "Chemin vers les rôles dans le jeton OpenID Connect",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration mise à jour avec succès.",
|
||||
"admin.config.notify.logo-success": "Logo mis à jour avec succès. La mise à jour sur le site peut prendre quelques minutes.",
|
||||
"admin.config.notify.no-changes": "Aucune modification à enregistrer.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Activé",
|
||||
"admin.config.s3.enabled.description": "Si S3 doit être utilisé pour stocker les fichiers partagés au lieu du système de fichiers local.",
|
||||
"admin.config.s3.endpoint": "Point de terminaison",
|
||||
"admin.config.s3.endpoint.description": "L'URL du bucket S3.",
|
||||
"admin.config.s3.region": "Région",
|
||||
"admin.config.s3.region.description": "La région du bucket S3.",
|
||||
"admin.config.s3.bucket-name": "Nom du bucket",
|
||||
"admin.config.s3.bucket-name.description": "Le nom du bucket S3.",
|
||||
"admin.config.s3.bucket-path": "Chemin",
|
||||
"admin.config.s3.bucket-path.description": "Le chemin par défaut qui doit être utilisé pour stocker les fichiers dans le bucket S3.",
|
||||
"admin.config.s3.key": "Clé",
|
||||
"admin.config.s3.key.description": "La clé qui vous permet d'accéder au bucket S3.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "Le secret qui vous permet d'accéder au bucket S3.",
|
||||
"admin.config.category.legal": "Juridique",
|
||||
"admin.config.legal.enabled": "Activer les mentions légales",
|
||||
"admin.config.legal.enabled.description": "Afficher/Masquer dans le pied de page un lien vers les mentions légales et la politique de confidentialité.",
|
||||
"admin.config.legal.imprint-text": "Texte des mentions légales",
|
||||
"admin.config.legal.imprint-text.description": "Le texte qui doit être affiché dans les mentions légales. Supporte le Markdown. Laissez vide pour mettre un lien vers une page de mentions légales externe.",
|
||||
"admin.config.legal.imprint-url": "URL des mentions légales",
|
||||
"admin.config.legal.imprint-url.description": "Si vous avez déjà une page de mentions légales, vous pouvez indiquer son URL ici au lieu d'utiliser le champ de texte.",
|
||||
"admin.config.legal.privacy-policy-text": "Texte de la politique de confidentialité",
|
||||
"admin.config.legal.privacy-policy-text.description": "Le texte qui doit être affiché dans la politique de confidentialité. Supporte le Markdown. Laissez vide pour mettre un lien vers une page de politique de confidentialité externe.",
|
||||
"admin.config.legal.privacy-policy-url": "URL de la politique de confidentialité",
|
||||
"admin.config.legal.privacy-policy-url.description": "Si vous avez déjà une page de politique de confidentialité, vous pouvez indiquer son URL ici au lieu d'utiliser le champ de texte.",
|
||||
// 404
|
||||
"404.description": "Désolé, mais cette page n’existe pas.",
|
||||
"404.button.home": "Retour à l’accueil",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Istječe",
|
||||
"account.shares.table.createdAt": "Kreirano",
|
||||
"account.shares.table.size": "Veličina",
|
||||
"account.shares.table.password-protected": "Zaštićeno lozinkom",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Nikad",
|
||||
"account.shares.modal.share-informations": "Informacije o dijeljenju",
|
||||
"account.shares.modal.share-link": "Podijelite poveznicu",
|
||||
"account.shares.modal.delete.title": "Izbriši dijeljenje {share}",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "Došlo je do pogreške prilikom dovršavanja vašeg dijeljenja.",
|
||||
"share.edit.notify.save-success": "Dijeljenje je uspješno ažurirano",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Otisak",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Pravilima o zaštiti privatnosti",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "",
|
||||
"admin.config.title": "Konfiguracija",
|
||||
"admin.config.category.general": "Opće",
|
||||
"admin.config.category.share": "Dijeljenje",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Prikaži početnu stranicu",
|
||||
"admin.config.general.show-home-page.description": "Želite li prikazati početnu stranicu",
|
||||
"admin.config.general.session-duration": "Trajanje sesije",
|
||||
"admin.config.general.session-duration.description": "Vrijeme u satima nakon kojeg se korisnik mora ponovno prijaviti (zadano: 3 mjeseca).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Promijenite svoj logotip učitavanjem nove slike. Slika mora biti PNG i imati format 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Odaberite sliku",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"admin.config.share.allow-unauthenticated-shares": "Dozvoli dijeljenje bez autentifikacije",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Mogu li korisnici bez autentifikacije kreirati dijeljenja",
|
||||
"admin.config.share.max-expiration": "Maksimalno trajanje",
|
||||
"admin.config.share.max-expiration.description": "Maksimalno trajanje dijeljenja u satima. Postavite na 0 za neograničeno trajanje.",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Dužina zadano generiranog ID-a za dijeljenje",
|
||||
"admin.config.share.share-id-length.description": "Zadana dužina generiranog ID-a za dijeljenje. Ova vrijednost se također koristi za generiranje poveznica za obrnuto dijeljenje. Vrijednost manja od 8 se ne smatra sigurnom.",
|
||||
"admin.config.share.max-size": "Maksimalna veličina",
|
||||
"admin.config.share.max-size.description": "Maksimalna veličina dijeljenja u bajtovima",
|
||||
"admin.config.share.max-size.description": "Maksimalna veličina dijeljenja",
|
||||
"admin.config.share.zip-compression-level": "Razina Zip kompresije",
|
||||
"admin.config.share.zip-compression-level.description": "Postavite razinu za balansiranje između veličine datoteke i brzine kompresije. Važeće vrijednosti su od 0 do 9, gdje 0 znači bez kompresije, a 9 maksimalnu kompresiju.",
|
||||
"admin.config.share.chunk-size": "Veličina dijela",
|
||||
"admin.config.share.chunk-size.description": "Postavite veličinu dijela (u bajtovima) za učitavanja kako biste uravnotežili učinkovitost i pouzdanost prema vašoj internetskoj vezi. Manji dijelovi mogu poboljšati uspješnost za nestabilne veze, dok veći dijelovi omogućuju brže učitavanje za stabilne veze.",
|
||||
"admin.config.share.chunk-size.description": "Postavite veličinu dijela za učitavanja kako biste uravnotežili učinkovitost i pouzdanost prema vašoj internetskoj vezi. Manji dijelovi mogu poboljšati uspješnost za nestabilne veze, dok veći dijelovi omogućuju brže učitavanje za stabilne veze.",
|
||||
"admin.config.share.auto-open-share-modal": "Automatski otvori modal za kreiranje dijeljenja",
|
||||
"admin.config.share.auto-open-share-modal.description": "Modal za kreiranje dijeljenja automatski se pojavljuje kada korisnik odabere datoteke, eliminirajući potrebu za ručnim klikom na gumb.",
|
||||
"admin.config.smtp.enabled": "Omogući",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "Port domaćina SMTP servera",
|
||||
"admin.config.smtp.email": "Email",
|
||||
"admin.config.smtp.email.description": "Email adresa s koje se poruke šalju",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Korisničko ime",
|
||||
"admin.config.smtp.username.description": "Korisničko ime SMTP servera",
|
||||
"admin.config.smtp.password": "Lozinka",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Konfiguracija je uspješno ažurirana.",
|
||||
"admin.config.notify.logo-success": "Logo je uspješno ažuriran. Može potrajati nekoliko minuta dok se promjena ne prikaže na web stranici.",
|
||||
"admin.config.notify.no-changes": "Nema promjena za spremanje.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Omogućeno",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Putanja",
|
||||
"admin.config.s3.bucket-path.description": "Zadana staza koja bi se trebala koristiti za pohranu datoteka u S3 spremnik.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Ups - Ova stranica ne postoji.",
|
||||
"404.button.home": "Vrati me na početnu stranicu",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Lejár",
|
||||
"account.shares.table.createdAt": "Létrehozva",
|
||||
"account.shares.table.size": "Méret",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Megosztás adatai",
|
||||
"account.shares.modal.share-link": "Hivatkozás",
|
||||
"account.shares.modal.delete.title": "Megosztás törlése: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Privát megosztás",
|
||||
"share.error.access-denied.description": "Ez a fiók nem rendelkezik jogosultsággal a megosztás eléréséhez",
|
||||
"share.modal.password.title": "Jelszó szükséges",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Jelszó",
|
||||
"share.modal.error.invalid-password": "Érvénytelen jelszó",
|
||||
"share.button.download-all": "Mindet letölti",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Konfiguráció",
|
||||
"admin.config.category.general": "Általános",
|
||||
"admin.config.category.share": "Megosztás",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"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.session-duration": "Munkamenet időtartama",
|
||||
"admin.config.general.session-duration.description": "Annak az időtartamnak a megadása, amit követően a felhasználónak ismét be kell jelentkeznie (alapérték: 3 hónap).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"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",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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-expiration.description": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"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.max-size.description": "A megosztások megengedett legnagyobb mérete",
|
||||
"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": "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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster for stable connections.",
|
||||
"admin.config.share.auto-open-share-modal": "Megosztás létrehozása felület automatikus megjelenítése",
|
||||
"admin.config.share.auto-open-share-modal.description": "A mgosztás létrehozása előugró elem automatikusan megjelenik a fájlok kiválasztásakor, ehhez nem szükséges külön kattintani.",
|
||||
"admin.config.smtp.enabled": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"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ó",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Hoppá - ez az oldal nem létezik.",
|
||||
"404.button.home": "Vissza a Kezdőlapra",
|
||||
|
||||
@@ -13,7 +13,7 @@ export default {
|
||||
// /
|
||||
"home.title": "Una piattaforma di condivisione file <h>self-hosted</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.name": "Self-Hosted",
|
||||
"home.bullet.a.description": "Configura Pingvin Share sul tuo server.",
|
||||
"home.bullet.b.name": "Privacy",
|
||||
"home.bullet.b.description": "I tuoi file sono tuoi e non saranno mai accessibili da terze parti.",
|
||||
@@ -29,7 +29,7 @@ export default {
|
||||
"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.input.password.placeholder": "La tua 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",
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Scade il",
|
||||
"account.shares.table.createdAt": "Creato il",
|
||||
"account.shares.table.size": "Dimensione",
|
||||
"account.shares.table.password-protected": "Protetto da password",
|
||||
"account.shares.table.visitor-count": "{count} di {max}",
|
||||
"account.shares.table.expiry-never": "Mai",
|
||||
"account.shares.modal.share-informations": "Condividi le informazioni",
|
||||
"account.shares.modal.share-link": "Condividi link",
|
||||
"account.shares.modal.delete.title": "Elimina condivisione {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Condivisione privata",
|
||||
"share.error.access-denied.description": "L' account non ha il premesso di accedere a questa condivisione",
|
||||
"share.modal.password.title": "Password richiesta",
|
||||
"share.modal.password.description": "Inserisci la password per accedere a questa condivisione.",
|
||||
"share.modal.password.description": "Per favore inserisci la password per accedere a questa condivisione.",
|
||||
"share.modal.password": "Password",
|
||||
"share.modal.error.invalid-password": "Password non valida",
|
||||
"share.button.download-all": "Scarica tutto",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Note legali",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Informativa sulla privacy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "File di configurazione presente",
|
||||
"admin.config.config-file-warning.description": "Poiché hai configurato Pingvin Share tramite un file di configurazione, non ti è possibile modificare la configurazione dall'interfaccia utente.",
|
||||
"admin.config.title": "Configurazione",
|
||||
"admin.config.category.general": "Generale",
|
||||
"admin.config.category.share": "Condivisioni",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"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.session-duration": "Durata della sessione",
|
||||
"admin.config.general.session-duration.description": "Tempo in ore dopo il quale un utente deve accedere nuovamente (default: 3 mesi).",
|
||||
"admin.config.general.session-duration.description": "Tempo dopo il quale un utente deve accedere di nuovo (default: tre mesi).",
|
||||
"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",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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-expiration.description": "Scadenza massima della condivisione. Impostare a 0 per consentire la scadenza illimitata.",
|
||||
"admin.config.share.share-id-length": "Lunghezza ID condivisione predefinita",
|
||||
"admin.config.share.share-id-length.description": "Lunghezza predefinita dell'ID generato per una condivisione. Questo valore viene utilizzato anche per generare collegamenti per condivisioni inverse. Un valore inferiore a 8 non è considerato sicuro.",
|
||||
"admin.config.share.max-size": "Dim. massima",
|
||||
"admin.config.share.max-size.description": "Dimensione massima di condivisione in byte",
|
||||
"admin.config.share.max-size.description": "Dimensione massima della condivisione",
|
||||
"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.share.chunk-size.description": "Regola la dimensione dei chunk per i tuoi upload, 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.share.auto-open-share-modal": "Apertura automatica creazione modalità condivisione",
|
||||
"admin.config.share.auto-open-share-modal.description": "La modalità di creazione della condivisione viene visualizzata automaticamente quando un utente seleziona i file, eliminando la necessità di fare clic manualmente sul pulsante.",
|
||||
"admin.config.smtp.enabled": "Abilita",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configurazione aggiornata correttamente.",
|
||||
"admin.config.notify.logo-success": "Logo aggiornato con successo. Potrebbe volerci qualche minuto per aggiornare sul sito.",
|
||||
"admin.config.notify.no-changes": "Nessuna modifica da salvare.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Abilitato",
|
||||
"admin.config.s3.enabled.description": "Indica se S3 debba essere usato per memorizzare i file condivisi invece che il file system locale.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "L'URL del bucket S3.",
|
||||
"admin.config.s3.region": "Regione",
|
||||
"admin.config.s3.region.description": "La regione del bucket S3.",
|
||||
"admin.config.s3.bucket-name": "Nome del bucket",
|
||||
"admin.config.s3.bucket-name.description": "Il nome del bucket S3.",
|
||||
"admin.config.s3.bucket-path": "Percorso",
|
||||
"admin.config.s3.bucket-path.description": "Il percorso predefinito che dovrebbe essere usato per memorizzare i file nel bucket S3.",
|
||||
"admin.config.s3.key": "Chiave",
|
||||
"admin.config.s3.key.description": "La chiave che consente di accedere al bucket S3.",
|
||||
"admin.config.s3.secret": "Parola chiave",
|
||||
"admin.config.s3.secret.description": "La parola chiave che consente di accedere al bucket S3.",
|
||||
"admin.config.category.legal": "Legale",
|
||||
"admin.config.legal.enabled": "Abilita le notifiche legali",
|
||||
"admin.config.legal.enabled.description": "Indica se mostrare o meno un link alle informative legali e sulla privacy a piè di pagina.",
|
||||
"admin.config.legal.imprint-text": "Testo dell'informativa",
|
||||
"admin.config.legal.imprint-text.description": "Il testo che deve essere mostrato nell'informativa. Supporta il linguaggio Markdown. Lascia vuoto per collegare una pagina informativa esterna.",
|
||||
"admin.config.legal.imprint-url": "URL dell'informativa",
|
||||
"admin.config.legal.imprint-url.description": "Nel caso avessi già una pagina di informativa puoi collegarla qui invece di usare il campo di testo.",
|
||||
"admin.config.legal.privacy-policy-text": "Testo dell'informativa sulla privacy",
|
||||
"admin.config.legal.privacy-policy-text.description": "Il testo che dovrebbe essere mostrato nell'informativa sulla privacy. Supporta il linguaggio Markdown. Lascia vuoto per collegare una pagina esterna inerente la politica sulla privacy.",
|
||||
"admin.config.legal.privacy-policy-url": "URL dell'informativa sulla privacy",
|
||||
"admin.config.legal.privacy-policy-url.description": "Nel caso avessi già una pagina di informativa sulla privacy, puoi collegarla qui invece di usare il campo di testo.",
|
||||
// 404
|
||||
"404.description": "Ops, questa pagina non esiste.",
|
||||
"404.button.home": "Riportami a casa",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "有効期限",
|
||||
"account.shares.table.createdAt": "作成日",
|
||||
"account.shares.table.size": "サイズ",
|
||||
"account.shares.table.password-protected": "パスワードで保護されています",
|
||||
"account.shares.table.visitor-count": "{count} / {max}",
|
||||
"account.shares.table.expiry-never": "なし",
|
||||
"account.shares.modal.share-informations": "共有情報",
|
||||
"account.shares.modal.share-link": "共有リンク",
|
||||
"account.shares.modal.delete.title": "共有を削除: {share}",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "共有の最終処理でエラーが発生しました。",
|
||||
"share.edit.notify.save-success": "共有の更新に成功しました",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "インプリント",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "プライバシーポリシー",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "構成ファイルがあります",
|
||||
"admin.config.config-file-warning.description": "設定ファイル設定で済みのPingvin ShareはUI を使用して設定を変更することはできません。",
|
||||
"admin.config.title": "設定",
|
||||
"admin.config.category.general": "一般",
|
||||
"admin.config.category.share": "共有",
|
||||
@@ -301,14 +312,14 @@ export default {
|
||||
"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": "アプリのURL",
|
||||
"admin.config.general.app-url.description": "Pingvin Shareで利用できるURL",
|
||||
"admin.config.general.secure-cookies": "セキュアクッキー",
|
||||
"admin.config.general.secure-cookies.description": "クッキーにセキュアフラグを設定するか。有効にすると、HTTP 経由でアクセスしたときにサイトが機能しなくなります。",
|
||||
"admin.config.general.show-home-page": "ホームページを表示する",
|
||||
"admin.config.general.show-home-page.description": "ホームページを表示するかどうか選択",
|
||||
"admin.config.general.session-duration": "セッション期間",
|
||||
"admin.config.general.session-duration.description": "ユーザーが再度ログインする必要がある時間(時間単位)(デフォルト: 3 か月)。",
|
||||
"admin.config.general.session-duration.description": "ユーザーが再度ログインするまでの時間(デフォルト: 3 ヶ月)。",
|
||||
"admin.config.general.logo": "ロゴ",
|
||||
"admin.config.general.logo.description": "新しい画像をアップロードしてロゴを変更できます。画像は、PNG形式でアスペクト比が1:1である必要があります。",
|
||||
"admin.config.general.logo.placeholder": "画像を選択",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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.share-id-length": "デフォルトの共有IDの長さ",
|
||||
"admin.config.share.share-id-length.description": "共有の生成されたIDのデフォルトの長さ。この値はファイルリクエストのリンクを生成するためにも使用されます。8未満の値は安全ではないと見なされます。",
|
||||
"admin.config.share.max-size": "最大ファイルサイズ",
|
||||
"admin.config.share.max-size.description": "最大ファイルサイズ(byte単位)",
|
||||
"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.share.chunk-size.description": "インターネット接続に応じて、効率と信頼性のバランスをとるためにアップロードのチャンクサイズ を調整します。チャンクを小さくすると、不安定な接続での成功率が向上し、チャンクを大きくすると、安定した接続でのアップロードが速くなります。",
|
||||
"admin.config.share.auto-open-share-modal": "共有モーダルを自動的に開く",
|
||||
"admin.config.share.auto-open-share-modal.description": "ユーザーがファイルを選択すると、共有作成モーダルが自動的に表示されるため、手動でボタンをクリックする必要がありません。",
|
||||
"admin.config.smtp.enabled": "有効",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "パスワード",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "設定が正常に更新されました。",
|
||||
"admin.config.notify.logo-success": "ロゴが正常に更新されました。Web サイトで更新されるまでに数分かかる場合があります。",
|
||||
"admin.config.notify.no-changes": "保存する変更がありません。",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "有効",
|
||||
"admin.config.s3.enabled.description": "S3を使用して、ローカルファイルシステムの代わりに共有ファイルを保存するかどうか。",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "S3 バケットの URL",
|
||||
"admin.config.s3.region": "地域",
|
||||
"admin.config.s3.region.description": "S3バケットの地域。",
|
||||
"admin.config.s3.bucket-name": "バケット名",
|
||||
"admin.config.s3.bucket-name.description": "S3バケットの名前。",
|
||||
"admin.config.s3.bucket-path": "パス",
|
||||
"admin.config.s3.bucket-path.description": "S3バケットにファイルを格納するために使用されるデフォルトのパス。",
|
||||
"admin.config.s3.key": "キー",
|
||||
"admin.config.s3.key.description": "S3バケットにアクセスするためのキー。",
|
||||
"admin.config.s3.secret": "秘密",
|
||||
"admin.config.s3.secret.description": "S3バケットにアクセスするための秘密。",
|
||||
"admin.config.category.legal": "法的事項",
|
||||
"admin.config.legal.enabled": "法的通知を有効にする",
|
||||
"admin.config.legal.enabled.description": "フッターにインプリントとプライバシーポリシーへのリンクを表示するか。",
|
||||
"admin.config.legal.imprint-text": "インプリントテキスト",
|
||||
"admin.config.legal.imprint-text.description": "インプリントに表示されるテキスト。Markdownをサポートします。外部のインプリント ページにリンクするには空白のままにします。",
|
||||
"admin.config.legal.imprint-url": "インプリントのURL",
|
||||
"admin.config.legal.imprint-url.description": "すでにインプリント ページがある場合は、テキストフィールドを使用する代わりにここにリンクすることができます。",
|
||||
"admin.config.legal.privacy-policy-text": "プライバシーポリシーのテキスト",
|
||||
"admin.config.legal.privacy-policy-text.description": "プライバシーポリシーに表示されるテキスト。Markdownをサポートします。外部のプライバシーポリシーにリンクするには空白のままにします。",
|
||||
"admin.config.legal.privacy-policy-url": "プライバシーポリシーのURL",
|
||||
"admin.config.legal.privacy-policy-url.description": "すでにプライバシーポリシーがある場合は、テキストフィールドを使用する代わりにここにリンクすることができます。",
|
||||
// 404
|
||||
"404.description": "ページが見つかりません。",
|
||||
"404.button.home": "ホームに戻る",
|
||||
@@ -487,8 +524,8 @@ export default {
|
||||
"common.error.invalid-email": "無効なメールアドレス",
|
||||
"common.error.too-short": "最低{length} 文字である必要があります",
|
||||
"common.error.too-long": "最大{length} 文字である必要があります",
|
||||
"common.error.number-too-small": "少なくとも{min}でなければなりません",
|
||||
"common.error.number-too-large": "最大で{max}である必要があります",
|
||||
"common.error.number-too-small": "少なくとも{min} でなければなりません",
|
||||
"common.error.number-too-large": "最大で{max} である必要があります",
|
||||
"common.error.exact-length": "{length} 文字である必要があります",
|
||||
"common.error.invalid-number": "数字でなければなりません",
|
||||
"common.error.field-required": "これは必須項目です"
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "크기",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "공유 정보",
|
||||
"account.shares.modal.share-link": "공유 링크",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Private share",
|
||||
"share.error.access-denied.description": "The current account does not have permission to access this share",
|
||||
"share.modal.password.title": "비밀번호 필요",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "비밀번호",
|
||||
"share.modal.error.invalid-password": "잘못된 비밀번호",
|
||||
"share.button.download-all": "모두 다운로드",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "공유를 완료하는 동안 오류가 발생했습니다.",
|
||||
"share.edit.notify.save-success": "공유가 업데이트 되었습니다.",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "구성",
|
||||
"admin.config.category.general": "일반",
|
||||
"admin.config.category.share": "공유",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "홈 페이지 표시",
|
||||
"admin.config.general.show-home-page.description": "홈 페이지를 표시할지 여부",
|
||||
"admin.config.general.session-duration": "세션 기간",
|
||||
"admin.config.general.session-duration.description": "사용자가 다시 로그인해야 하는 시간 (기본값: 3개월)",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "로고",
|
||||
"admin.config.general.logo.description": "새 이미지를 업로드하여 로고를 변경하십시오. 이미지는 PNG여야 하며 1:1 비율이어야 합니다.",
|
||||
"admin.config.general.logo.placeholder": "이미지 선택",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster for stable connections.",
|
||||
"admin.config.share.auto-open-share-modal": "공유 생성 창 자동 열기",
|
||||
"admin.config.share.auto-open-share-modal.description": "사용자가 파일을 선택하면 공유 생성 창이 자동으로 나타나서 버튼을 수동으로 클릭할 필요가 없습니다.",
|
||||
"admin.config.smtp.enabled": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "포트",
|
||||
"admin.config.smtp.port.description": "SMTP 서버 포트",
|
||||
"admin.config.smtp.email": "이메일",
|
||||
"admin.config.smtp.email.description": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "사용자 이름",
|
||||
"admin.config.smtp.username.description": "SMTP 사용자 이름, 서버 비밀번호",
|
||||
"admin.config.smtp.password": "비밀번호",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "이런, 이 페이지는 존재하지 않습니다.",
|
||||
"404.button.home": "나를 집으로 데려다 줘",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Verloopt op",
|
||||
"account.shares.table.createdAt": "Gemaakt op",
|
||||
"account.shares.table.size": "Grootte",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Gegevens delen",
|
||||
"account.shares.modal.share-link": "Deel link",
|
||||
"account.shares.modal.delete.title": "Share verwijderd: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Private share",
|
||||
"share.error.access-denied.description": "Dit account heeft geen toestemming om toegang te krijgen tot deze share",
|
||||
"share.modal.password.title": "Wachtwoord vereist",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Wachtwoord",
|
||||
"share.modal.error.invalid-password": "Ongeldig wachtwoord",
|
||||
"share.button.download-all": "Alles downloaden",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Configuratie",
|
||||
"admin.config.category.general": "Algemeen",
|
||||
"admin.config.category.share": "Delen",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Toon startpagina",
|
||||
"admin.config.general.show-home-page.description": "Toon of verberg de home pagina",
|
||||
"admin.config.general.session-duration": "Sessieduur",
|
||||
"admin.config.general.session-duration.description": "Tijd in uren waarna een gebruiker zich opnieuw moet aanmelden (standaard: 3 maanden).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"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.placeholder": "Afbeelding kiezen",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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-expiration.description": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-size": "Max. grootte",
|
||||
"admin.config.share.max-size.description": "Maximale share grootte in bytes",
|
||||
"admin.config.share.max-size.description": "Maximale share grootte",
|
||||
"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.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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Gebruikersnaam",
|
||||
"admin.config.smtp.username.description": "Gebruikersnaam van de SMTP-server",
|
||||
"admin.config.smtp.password": "Wachtwoord",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Oeps, deze pagina bestaat niet.",
|
||||
"404.button.home": "Breng me terug naar huis",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Rozmiar",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Informacje udziału",
|
||||
"account.shares.modal.share-link": "Udostępnij link",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Prywatne udostępnienie",
|
||||
"share.error.access-denied.description": "Bieżące konto nie ma uprawnień dostępu do tego udostępnienia",
|
||||
"share.modal.password.title": "Wymagane hasło",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Hasło",
|
||||
"share.modal.error.invalid-password": "Hasło jest nieprawidłowe",
|
||||
"share.button.download-all": "Pobierz wszystko",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Konfiguracja",
|
||||
"admin.config.category.general": "Ogólne",
|
||||
"admin.config.category.share": "Udostępnij",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"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.session-duration": "Czas trwania sesji",
|
||||
"admin.config.general.session-duration.description": "Czas w godzinach, po którym użytkownik musi zalogować się ponownie (domyślnie: 3 miesiące).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"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.placeholder": "Wybierz obraz",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"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",
|
||||
"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.chunk-size": "Rozmiar fragmentu",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Nazwa użytkownika",
|
||||
"admin.config.smtp.username.description": "Nazwa użytkownika serwera SMTP",
|
||||
"admin.config.smtp.password": "Hasło",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Ups! Ta strona nie istnieje.",
|
||||
"404.button.home": "Wróć do strony domowej",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expira em",
|
||||
"account.shares.table.createdAt": "Criada em",
|
||||
"account.shares.table.size": "Tamanho",
|
||||
"account.shares.table.password-protected": "Protegido por senha",
|
||||
"account.shares.table.visitor-count": "{count} de {max}",
|
||||
"account.shares.table.expiry-never": "Nunca",
|
||||
"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}",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Termos Legais",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Política de Privacidade",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Arquivo de configuração presente",
|
||||
"admin.config.config-file-warning.description": "Como você tem um Pingvin Share configurado com um arquivo de configuração, você não pode alterar a configuração através da UI.",
|
||||
"admin.config.title": "Configuração",
|
||||
"admin.config.category.general": "Geral",
|
||||
"admin.config.category.share": "Compartilhamento",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"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.session-duration": "Duração de sessão",
|
||||
"admin.config.general.session-duration.description": "Tempo em horas após o qual um usuário deve iniciar a sessão novamente (padrão: 3 meses).",
|
||||
"admin.config.general.session-duration.description": "Tempo após o qual um usuário deve iniciar a sessão novamente (padrão: 3 meses).",
|
||||
"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.placeholder": "Escolhe uma imagem",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Expiração máxima de compartilhamento. Defina 0 para permitir expiração ilimitada.",
|
||||
"admin.config.share.share-id-length": "Comprimento da ID do compartilhamento padrão",
|
||||
"admin.config.share.share-id-length.description": "Comprimento padrão para a ID gerada de um compartilhamento. Este valor também é usado para gerar links para ações reversas. Um valor abaixo de 8 não é considerado seguro.",
|
||||
"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",
|
||||
"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.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.share.chunk-size.description": "Ajuste o tamanho do pedaço 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.share.auto-open-share-modal": "Abertura automática do modal de criação de compartilhamento",
|
||||
"admin.config.share.auto-open-share-modal.description": "O modal de criação de compartilhamento aparece automaticamente quando um usuário seleciona arquivos, eliminando a necessidade de clicar manualmente no botão.",
|
||||
"admin.config.smtp.enabled": "Habilitar",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "Email address from which the emails get sent",
|
||||
"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",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuração atualizada com sucesso.",
|
||||
"admin.config.notify.logo-success": "Logo atualizado com sucesso. Pode levar alguns minutos para ser atualizado no site.",
|
||||
"admin.config.notify.no-changes": "Nenhuma alteração para salvar.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Habilitado",
|
||||
"admin.config.s3.enabled.description": "Se o S3 deve ser usado para armazenar os arquivos compartilhados em vez do sistema de arquivo local.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "A URL do bucket S3.",
|
||||
"admin.config.s3.region": "Região",
|
||||
"admin.config.s3.region.description": "A região do bucket S3.",
|
||||
"admin.config.s3.bucket-name": "Nome do Bucket",
|
||||
"admin.config.s3.bucket-name.description": "O nome do bucket S3.",
|
||||
"admin.config.s3.bucket-path": "Caminho",
|
||||
"admin.config.s3.bucket-path.description": "O caminho padrão que deve ser usado para armazenar os arquivos no bucket S3.",
|
||||
"admin.config.s3.key": "Chave",
|
||||
"admin.config.s3.key.description": "A chave que permite a você acessar o bucket S3.",
|
||||
"admin.config.s3.secret": "Segredo",
|
||||
"admin.config.s3.secret.description": "O segredo que permite a você acessar o bucket S3.",
|
||||
"admin.config.category.legal": "Aviso legal",
|
||||
"admin.config.legal.enabled": "Habilitar avisos legais",
|
||||
"admin.config.legal.enabled.description": "Exibir um link para imprimir e política de privacidade no rodapé.",
|
||||
"admin.config.legal.imprint-text": "Imprimir texto",
|
||||
"admin.config.legal.imprint-text.description": "O texto que deve ser mostrado na imagem. Suporta Markdown. Deixe em branco para vincular a página de impressão externa.",
|
||||
"admin.config.legal.imprint-url": "Imprimir URL",
|
||||
"admin.config.legal.imprint-url.description": "Se você já tem uma página impressa, você pode vinculá-la aqui ao invés de usar o campo de texto.",
|
||||
"admin.config.legal.privacy-policy-text": "Texto da política de privacidade",
|
||||
"admin.config.legal.privacy-policy-text.description": "O texto que deve ser mostrado na política de privacidade. Suporta Markdown. Deixe em branco para vincular a página de política de privacidade externa.",
|
||||
"admin.config.legal.privacy-policy-url": "URL da política de privacidade",
|
||||
"admin.config.legal.privacy-policy-url.description": "Se você já tem uma página impressa, você pode vinculá-la aqui ao invés de usar o campo de texto.",
|
||||
// 404
|
||||
"404.description": "Ops, esta página não existe.",
|
||||
"404.button.home": "Me traga de volta para casa",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Размер",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Сведения",
|
||||
"account.shares.modal.share-link": "Поделиться ссылкой",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Приватное доступ",
|
||||
"share.error.access-denied.description": "У текущей учетной записи нет разрешения на доступ к этому ресурсу",
|
||||
"share.modal.password.title": "Требуется пароль",
|
||||
"share.modal.password.description": "Пожалуйста, введите пароль, чтобы получить доступ.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Пароль",
|
||||
"share.modal.error.invalid-password": "Неверный пароль",
|
||||
"share.button.download-all": "Скачать все",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "Произошла ошибка при завершении вашей загрузки.",
|
||||
"share.edit.notify.save-success": "Ссылка на ресурс успешна обновлена",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Конфигурация",
|
||||
"admin.config.category.general": "Общее",
|
||||
"admin.config.category.share": "Загрузки",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Показывать домашнюю страницу",
|
||||
"admin.config.general.show-home-page.description": "Показывать ли домашнюю страницу или нет",
|
||||
"admin.config.general.session-duration": "Длительность сессии",
|
||||
"admin.config.general.session-duration.description": "Время в часах, после которого пользователь должен снова войти (по умолчанию: 3 месяца).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Логотип",
|
||||
"admin.config.general.logo.description": "Измените свой логотип, загрузив новое изображение. Изображение должно быть PNG и должно иметь формат 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Выберите изображение",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Длина идентификатора по умолчанию",
|
||||
"admin.config.share.share-id-length.description": "Длина по умолчанию для сгенерированного ID ресурса. Это значение также используется для генерации ссылок для обратных акций. Значение ниже 8 не считается безопасным.",
|
||||
"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": "Отрегулируйте размер чанка (в байтах) для ваших загрузок, чтобы сбалансировать эффективность и надежность в соответствии с вашим интернет-соединением. Меньшие чанки могут повысить успешность нестабильных соединений, а большие чанки ускоряют загрузку для стабильных соединений.",
|
||||
"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": "Включено",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "Порт",
|
||||
"admin.config.smtp.port.description": "Порт SMTP сервера",
|
||||
"admin.config.smtp.email": "Электронная почта",
|
||||
"admin.config.smtp.email.description": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Логин",
|
||||
"admin.config.smtp.username.description": "Имя пользователя SMTP сервера",
|
||||
"admin.config.smtp.password": "Пароль",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Упс, этой страницы не существует.",
|
||||
"404.button.home": "Верните меня домой",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Velikost",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Delite informacije",
|
||||
"account.shares.modal.share-link": "Delite povezavo",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Private share",
|
||||
"share.error.access-denied.description": "The current account does not have permission to access this share",
|
||||
"share.modal.password.title": "Zahtevano geslo",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Geslo",
|
||||
"share.modal.error.invalid-password": "Napačno geslo",
|
||||
"share.button.download-all": "Prenesi vse",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Nastavitve",
|
||||
"admin.config.category.general": "Splošno",
|
||||
"admin.config.category.share": "Delitev",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"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.session-duration": "Session Duration",
|
||||
"admin.config.general.session-duration.description": "Time in hours after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"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",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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-expiration.description": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-size": "Največja velikost",
|
||||
"admin.config.share.max-size.description": "Največja velikost delitve v bytih",
|
||||
"admin.config.share.max-size.description": "Največja velikost delitve",
|
||||
"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": "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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Uporabniško ime",
|
||||
"admin.config.smtp.username.description": "Uporabniško ime SMTP strežnika",
|
||||
"admin.config.smtp.password": "Geslo",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Ups! Ta stran ne obstaja.",
|
||||
"404.button.home": "Pelji me domov",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Ističe",
|
||||
"account.shares.table.createdAt": "Napravljeno",
|
||||
"account.shares.table.size": "Veličina",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Delite informacije",
|
||||
"account.shares.modal.share-link": "Deli vezu",
|
||||
"account.shares.modal.delete.title": "Izbriši deljenje {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Privatno deljenje",
|
||||
"share.error.access-denied.description": "Trenutni nalog nema dozvolu za pristup ovom deljenju",
|
||||
"share.modal.password.title": "Obavezna lozinka",
|
||||
"share.modal.password.description": "Molimo unesite lozinku za pristup ovom deljenju.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Lozinka",
|
||||
"share.modal.error.invalid-password": "Neispravna lozinka",
|
||||
"share.button.download-all": "Preuzmi sve",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "Došlo je do greške prilikom završetka vašeg deljenja.",
|
||||
"share.edit.notify.save-success": "Deljenje je uspešno ažurirano",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Konfiguracija",
|
||||
"admin.config.category.general": "Opšte",
|
||||
"admin.config.category.share": "Deljenje",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Prikaži početnu stranicu",
|
||||
"admin.config.general.show-home-page.description": "Da li da se prikaže početna stranica",
|
||||
"admin.config.general.session-duration": "Trajanje sesije",
|
||||
"admin.config.general.session-duration.description": "Vreme u satima nakon kojeg korisnik mora ponovo da se prijavi (podrazumevano: 3 meseca).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Promenite svoj logotip tako što ćete otpremiti novu sliku. Slika mora da bude PNG i treba da ima format 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Izaberi sliku",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"admin.config.share.allow-unauthenticated-shares": "Dozvoli deljenje bez autentifikacije",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Da li korisnici bez autentifikacije mogu da kreiraju deljenja",
|
||||
"admin.config.share.max-expiration": "Maksimalni rok trajanja",
|
||||
"admin.config.share.max-expiration.description": "Maksimalni rok trajanja deljenja u satima. Postavite na 0 da biste omogućili neograničeno trajanje.",
|
||||
"admin.config.share.max-expiration.description": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Dužina podrazumevanog ID-a za deljenje",
|
||||
"admin.config.share.share-id-length.description": "Podrazumevana dužina generisanog ID-a za deljenje. Ova vrednost se takođe koristi za generisanje linkova za obrnuto deljenje. Vrednost ispod 8 se ne smatra bezbednom.",
|
||||
"admin.config.share.max-size": "Maksimalna veličina",
|
||||
"admin.config.share.max-size.description": "Maksimalna veličina deljenja u bajtovima",
|
||||
"admin.config.share.max-size.description": "Maksimalna veličina deljenja",
|
||||
"admin.config.share.zip-compression-level": "Nivo Zip kompresije",
|
||||
"admin.config.share.zip-compression-level.description": "Podesite nivo da biste balansirali između veličine datoteke i brzine kompresije. Važeće vrednosti se kreću od 0 do 9, pri čemu je 0 bez kompresije, a 9 je maksimalna kompresija. ",
|
||||
"admin.config.share.chunk-size": "Veličina komada",
|
||||
"admin.config.share.chunk-size.description": "Podesite veličinu dela (u bajtovima) za vaša otpremanje kako biste uravnotežili efikasnost i pouzdanost u skladu sa vašom internet vezom. Manji delovi mogu poboljšati stopu uspeha za nestabilne veze, dok veći delovi omogućavaju brže otpremanje za stabilne veze.",
|
||||
"admin.config.share.chunk-size.description": "Podesite veličinu dela za vaša otpremanje kako biste uravnotežili efikasnost i pouzdanost u skladu sa vašom internet vezom. Manji delovi mogu poboljšati stopu uspeha za nestabilne veze, dok veći delovi omogućavaju brže otpremanje za stabilne veze.",
|
||||
"admin.config.share.auto-open-share-modal": "Automatski otvori stvaranje modala deljenja",
|
||||
"admin.config.share.auto-open-share-modal.description": "Modal za kreiranje deljenja automatski se pojavljuje kada korisnik izabere datoteke, eliminišući potrebu za ručnim klikom na dugme.",
|
||||
"admin.config.smtp.enabled": "Omogući",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "Port domaćina SMTP servera",
|
||||
"admin.config.smtp.email": "Imejl",
|
||||
"admin.config.smtp.email.description": "Adresa imejla sa kojeg se poruke šalju",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Korisničko ime",
|
||||
"admin.config.smtp.username.description": "Korisničko ime SMTP servera",
|
||||
"admin.config.smtp.password": "Lozinka",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Konfiguracija je uspešno ažurirana.",
|
||||
"admin.config.notify.logo-success": "Logo je uspešno ažuriran. Može biti potrebno nekoliko minuta da se ažurira na vebsajtu.",
|
||||
"admin.config.notify.no-changes": "Nema promena za čuvanje.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Opa - Ova strana ne postoji.",
|
||||
"404.button.home": "Vrati me na početak",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Истиче",
|
||||
"account.shares.table.createdAt": "Направљено",
|
||||
"account.shares.table.size": "Величина",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Делите информације",
|
||||
"account.shares.modal.share-link": "Дели везу",
|
||||
"account.shares.modal.delete.title": "Избриши дељење {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Приватно дељење",
|
||||
"share.error.access-denied.description": "Тренутни налог нема дозволу за приступ овом дељењу",
|
||||
"share.modal.password.title": "Обавезна лозинка",
|
||||
"share.modal.password.description": "Молимо унесите лозинку за приступ овом дељењу.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Лозинка",
|
||||
"share.modal.error.invalid-password": "Неисправна лозинка",
|
||||
"share.button.download-all": "Преузми све",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "Дошло је до грешке приликом завршетка вашег дељења.",
|
||||
"share.edit.notify.save-success": "Дељење је успешно ажурирано",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Конфигурација",
|
||||
"admin.config.category.general": "Опште",
|
||||
"admin.config.category.share": "Дељење",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Прикажи почетну страницу",
|
||||
"admin.config.general.show-home-page.description": "Да ли да се прикаже почетна страница",
|
||||
"admin.config.general.session-duration": "Трајање сесије",
|
||||
"admin.config.general.session-duration.description": "Време у сатима након којег корисник мора поново да се пријави (подразумевано: 3 месеца).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Лого",
|
||||
"admin.config.general.logo.description": "Промените свој логотип тако што ћете отпремити нову слику. Слика мора да буде PNG и треба да има формат 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Изабери слику",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Дужина подразумеваног ID-а за дељење",
|
||||
"admin.config.share.share-id-length.description": "Подразумевана дужина генерисаног ID-а за дељење. Ова вредност се такође користи за генерисање линкова за обрнуто дељење. Вредност испод 8 се не сматра безбедном.",
|
||||
"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": "Подесите величину дела (у бајтовима) за ваша отпремање како бисте уравнотежили ефикасност и поузданост у складу са вашом интернет везом. Мањи делови могу побољшати стопу успеха за нестабилне везе, док већи делови омогућавају брже отпремање за стабилне везе.",
|
||||
"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": "Омогући",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "Порт",
|
||||
"admin.config.smtp.port.description": "Порт домаћина SMTP сервера",
|
||||
"admin.config.smtp.email": "Имејл",
|
||||
"admin.config.smtp.email.description": "Адреса имејла са којег се поруке шаљу",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Корисничко име",
|
||||
"admin.config.smtp.username.description": "Корисничко име SMTP сервера",
|
||||
"admin.config.smtp.password": "Лозинка",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Конфигурација је успешно ажурирана.",
|
||||
"admin.config.notify.logo-success": "Лого је успешно ажуриран. Може бити потребно неколико минута да се ажурира на вебсајту.",
|
||||
"admin.config.notify.no-changes": "Нема промена за чување.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Опа - Ова страна не постоји.",
|
||||
"404.button.home": "Врати ме на почетак",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Storlek",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Information om delning",
|
||||
"account.shares.modal.share-link": "Delningslänk",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Private share",
|
||||
"share.error.access-denied.description": "The current account does not have permission to access this share",
|
||||
"share.modal.password.title": "Lösenord krävs",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Lösenord",
|
||||
"share.modal.error.invalid-password": "Ogiltigt lösenord",
|
||||
"share.button.download-all": "Ladda ner allt",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"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
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Konfiguration",
|
||||
"admin.config.category.general": "Allmänt",
|
||||
"admin.config.category.share": "Delning",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Visa startsidan",
|
||||
"admin.config.general.show-home-page.description": "Om du vill visa startsidan",
|
||||
"admin.config.general.session-duration": "Session Duration",
|
||||
"admin.config.general.session-duration.description": "Time in hours after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"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.placeholder": "Välj bild",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"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",
|
||||
"admin.config.share.zip-compression-level": "Komprimeringsnivå för zip",
|
||||
"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": "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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"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": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Användarnamn",
|
||||
"admin.config.smtp.username.description": "Användarnamn för SMTP-servern",
|
||||
"admin.config.smtp.password": "Lösenord",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Hoppsan den här sidan finns inte.",
|
||||
"404.button.home": "Ta mig tillbaka hem",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "ขนาด",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "ข้อมูลแชร์",
|
||||
"account.shares.modal.share-link": "แชร์ลิงค์",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Private share",
|
||||
"share.error.access-denied.description": "The current account does not have permission to access this share",
|
||||
"share.modal.password.title": "ต้องการรหัสผ่าน",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "รหัสผ่าน",
|
||||
"share.modal.error.invalid-password": "รหัสผ่านไม่ถูกต้อง",
|
||||
"share.button.download-all": "ดาวน์โหลดทั้งหมด",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "การตั้งค่า",
|
||||
"admin.config.category.general": "ทั่วไป",
|
||||
"admin.config.category.share": "การแชร์",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "แสดงหน้าแรก",
|
||||
"admin.config.general.show-home-page.description": "หากติ๊ก เว็บไซต์จะแสดงหน้าหลักเวลาเข้าถึง URL หลัก",
|
||||
"admin.config.general.session-duration": "Session Duration",
|
||||
"admin.config.general.session-duration.description": "Time in hours after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "โลโก้",
|
||||
"admin.config.general.logo.description": "เปลี่ยนโลโก้โดยอัปโหลดรูปภาพใหม่ รูปภาพต้องเป็น PNG และควรมีขนาดอัตราส่วน 1:1",
|
||||
"admin.config.general.logo.placeholder": "คลิกที่นี่หรือลากไฟล์มา",
|
||||
@@ -335,7 +346,7 @@ export default {
|
||||
"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. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-size": "ขนาดสูงสุด",
|
||||
@@ -343,7 +354,7 @@ export default {
|
||||
"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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "พอร์ต",
|
||||
"admin.config.smtp.port.description": "พอร์ตของเซิร์ฟเวอร์ SMTP",
|
||||
"admin.config.smtp.email": "อีเมล",
|
||||
"admin.config.smtp.email.description": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "ชื่อผู้ใช้",
|
||||
"admin.config.smtp.username.description": "ชื่อผู้ใช้ของเซิร์ฟเวอร์ SMTP",
|
||||
"admin.config.smtp.password": "รหัสผ่าน",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "ไม่พบหน้าที่คุณกำลังมองหา",
|
||||
"404.button.home": "หน้าแรก",
|
||||
|
||||
@@ -1,40 +1,40 @@
|
||||
export default {
|
||||
// Navbar
|
||||
"navbar.upload": "Yükle",
|
||||
"navbar.signin": "Giriş Yap",
|
||||
"navbar.signin": "Giriş yap",
|
||||
"navbar.home": "Ana Sayfa",
|
||||
"navbar.signup": "Sign up",
|
||||
"navbar.signup": "Kaydol",
|
||||
"navbar.links.shares": "Paylaşımlarım",
|
||||
"navbar.links.reverse": "Tersine Paylaşımlar",
|
||||
"navbar.links.reverse": "Ters paylaşımlar",
|
||||
"navbar.avatar.account": "Hesabım",
|
||||
"navbar.avatar.admin": "Yönetim",
|
||||
"navbar.avatar.signout": "Çıkış Yap",
|
||||
"navbar.avatar.signout": "Çıkış yap",
|
||||
// END navbar
|
||||
// /
|
||||
"home.title": "<h>Kişisel barındırılan</h> bir dosya paylaşım platformu.",
|
||||
"home.description": "Kişisel dosyalarınızı WeTransfer gibi üçüncü tarafların eline gerçekten vermek istiyor musunuz?",
|
||||
"home.bullet.a.name": "Kişisel Barındırılan",
|
||||
"home.bullet.a.description": "Pingvin Share'i kendi makinenizde barındırın.",
|
||||
"home.title": "Kendi <h>kendine barındırılan</h> bir dosya paylaşım platformu.",
|
||||
"home.description": "Kişisel dosyalarınızı WeTransfer gibi üçüncü tarafların eline gerçekten vermek ister misiniz?",
|
||||
"home.bullet.a.name": "Kendi Kendine Barındırılan",
|
||||
"home.bullet.a.description": "Pingvin Share'i kendi cihazınızda barındırın.",
|
||||
"home.bullet.b.name": "Gizlilik",
|
||||
"home.bullet.b.description": "Your files are yours and will never be accessed by third parties.",
|
||||
"home.bullet.c.name": "Can sıkıcı dosya boyutu sınırı yok",
|
||||
"home.bullet.c.description": "Upload files as big as you want. Only your hard drive will be your limit.",
|
||||
"home.button.start": "Başlayalım",
|
||||
"home.bullet.b.description": "Dosyalarınız size aittir ve asla üçüncü taraflar tarafından erişilemez.",
|
||||
"home.bullet.c.name": "Can sıkıcı boyut sınırı yok",
|
||||
"home.bullet.c.description": "İstediğiniz kadar büyük dosyaları yükleyin. Sadece sabit diskiniz sınırınız olacak.",
|
||||
"home.button.start": "Başlayın",
|
||||
"home.button.source": "Kaynak kodu",
|
||||
// END /
|
||||
// /auth/signin
|
||||
"signin.title": "Tekrar hoşgeldiniz",
|
||||
"signin.title": "Tekrar hoş geldiniz",
|
||||
"signin.description": "Henüz bir hesabınız yok mu?",
|
||||
"signin.button.signup": "Kaydol",
|
||||
"signin.input.email-or-username": "Eposta veya kullanıcı adı",
|
||||
"signin.input.email-or-username.placeholder": "E-Posta veya kullanıcı adı",
|
||||
"signin.input.email-or-username": "E-posta veya kullanıcı adı",
|
||||
"signin.input.email-or-username.placeholder": "E-posta adresiniz veya kullanıcı adınız",
|
||||
"signin.input.password": "Şifre",
|
||||
"signin.input.password.placeholder": "Şifreniz",
|
||||
"signin.button.submit": "Giriş Yap",
|
||||
"signin.button.submit": "Giriş yap",
|
||||
"signIn.notify.totp-required.title": "İki faktörlü kimlik doğrulama gerekli",
|
||||
"signIn.notify.totp-required.description": "Lütfen iki faktörlü doğrulama kodunuzu girin",
|
||||
"signIn.oauth.or": "YA DA",
|
||||
"signIn.oauth.signInWith": "Sign in with",
|
||||
"signIn.notify.totp-required.description": "Lütfen iki faktörlü kimlik doğrulama kodunuzu girin",
|
||||
"signIn.oauth.or": "VEYA",
|
||||
"signIn.oauth.signInWith": "Şununla giriş yap",
|
||||
"signIn.oauth.github": "GitHub",
|
||||
"signIn.oauth.google": "Google",
|
||||
"signIn.oauth.microsoft": "Microsoft",
|
||||
@@ -42,101 +42,104 @@ export default {
|
||||
"signIn.oauth.oidc": "OpenID",
|
||||
// END /auth/signin
|
||||
// /auth/signup
|
||||
"signup.title": "Bir hesap oluştur",
|
||||
"signup.description": "Zaten bir hesabınız mı var?",
|
||||
"signup.button.signin": "Giriş Yap",
|
||||
"signup.input.username": "Kullanıcı Adı",
|
||||
"signup.title": "Bir hesap oluşturun",
|
||||
"signup.description": "Zaten bir hesabınız var mı?",
|
||||
"signup.button.signin": "Giriş yap",
|
||||
"signup.input.username": "Kullanıcı adı",
|
||||
"signup.input.username.placeholder": "Kullanıcı adınız",
|
||||
"signup.input.email": "E-Posta",
|
||||
"signup.input.email.placeholder": "E-Posta adresiniz",
|
||||
"signup.button.submit": "Haydi Başlayalım",
|
||||
"signup.input.email": "E-posta",
|
||||
"signup.input.email.placeholder": "E-posta adresiniz",
|
||||
"signup.button.submit": "Başlayalım",
|
||||
// END /auth/signup
|
||||
// /auth/totp
|
||||
"totp.title": "İki Faktörlü Doğrulama",
|
||||
"totp.button.signIn": "Giriş Yap",
|
||||
"totp.title": "TOTP Doğrulama",
|
||||
"totp.button.signIn": "Giriş yap",
|
||||
// END /auth/totp
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "Şifrenizi mi unuttunuz?",
|
||||
"resetPassword.description": "Şifrenizi sıfırlamak için E-Postanızı girin.",
|
||||
"resetPassword.notify.success": "A message with a link to reset your password has been sent if the provided email exists.",
|
||||
"resetPassword.description": "Şifrenizi sıfırlamak için e-postanızı girin.",
|
||||
"resetPassword.notify.success": "Sağlanan e-posta adresi mevcutsa, şifrenizi sıfırlamanız için bir bağlantı gönderildi.",
|
||||
"resetPassword.button.back": "Giriş sayfasına geri dön",
|
||||
"resetPassword.text.resetPassword": "Şifreyi sıfırla",
|
||||
"resetPassword.text.enterNewPassword": "Yeni şifrenizi girin",
|
||||
"resetPassword.input.password": "Yeni şifre",
|
||||
"resetPassword.notify.passwordReset": "Your password has been successfully reset.",
|
||||
"resetPassword.notify.passwordReset": "Şifreniz başarıyla sıfırlandı.",
|
||||
// /account
|
||||
"account.title": "Hesabım",
|
||||
"account.card.info.title": "Hesap Bilgisi",
|
||||
"account.card.info.username": "Kullanıcı Adı",
|
||||
"account.card.info.email": "E-Posta",
|
||||
"account.card.info.title": "Hesap bilgileri",
|
||||
"account.card.info.username": "Kullanıcı adı",
|
||||
"account.card.info.email": "E-posta",
|
||||
"account.notify.info.success": "Hesap başarıyla güncellendi",
|
||||
"account.card.password.title": "Şifre",
|
||||
"account.card.password.old": "Eski şifre",
|
||||
"account.card.password.new": "Yeni şifre",
|
||||
"account.card.password.noPasswordSet": "You do not have a password set. To sign in using your email and password, you need to create a password.",
|
||||
"account.card.password.noPasswordSet": "Şifreniz ayarlanmadı. E-posta ve şifre kullanarak giriş yapmak için bir şifre oluşturmanız gerekiyor.",
|
||||
"account.notify.password.success": "Şifre başarıyla değiştirildi",
|
||||
"account.card.oauth.title": "Sosyal Medya girişi",
|
||||
"account.card.oauth.title": "Sosyal giriş",
|
||||
"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": "Bağlantı",
|
||||
"account.card.oauth.unlink": "Bağlantıyı kes",
|
||||
"account.card.oauth.unlinked": "Bağlantısız",
|
||||
"account.card.oauth.link": "Bağla",
|
||||
"account.card.oauth.unlink": "Bağlantıyı kaldır",
|
||||
"account.card.oauth.unlinked": "Bağlantı kaldırıldı",
|
||||
"account.modal.unlink.title": "Hesabın bağlantısını kaldır",
|
||||
"account.modal.unlink.description": "Unlinking your social accounts may cause you to lose your account if you don't remember your login credentials",
|
||||
"account.notify.oauth.unlinked.success": "Bağlantı Başarıyla Kaldırıldı",
|
||||
"account.modal.unlink.description": "Sosyal hesaplarınızın bağlantısını kaldırmanız giriş bilgilerinizi hatırlamıyorsanız hesabınızı kaybetmenize neden olabilir",
|
||||
"account.notify.oauth.unlinked.success": "Başarıyla bağlantı kaldırıldı",
|
||||
"account.card.security.title": "Güvenlik",
|
||||
"account.card.security.totp.enable.description": "İki faktörlü doğrulamayı aktif etmek için şu anki şifrenizi girin",
|
||||
"account.card.security.totp.disable.description": "İki faktörlü doğrulamayı kaldırmak için şu anki şifrenizi girin",
|
||||
"account.card.security.totp.enable.description": "TOTP'yi etkinleştirmek için mevcut şifrenizi girin",
|
||||
"account.card.security.totp.disable.description": "TOTP'yi devre dışı bırakmak için mevcut şifrenizi girin",
|
||||
"account.card.security.totp.button.start": "Başlat",
|
||||
"account.modal.totp.title": "2FA aç",
|
||||
"account.modal.totp.step1": "Adım 1: Kimlik doğrulayıcınızı ekleyin",
|
||||
"account.modal.totp.step2": "Adım 2: Kodunuzu doğrulayın",
|
||||
"account.modal.totp.title": "TOTP'yi Etkinleştir",
|
||||
"account.modal.totp.step1": "1. Adım: Kimlik doğrulayıcınızı ekleyin",
|
||||
"account.modal.totp.step2": "2. Adım: Kodunuzu doğrulayın",
|
||||
"account.modal.totp.enterManually": "Manuel olarak girin",
|
||||
"account.modal.totp.code": "Kod",
|
||||
"common.button.clickToCopy": "Kopyalamak için tıkla",
|
||||
"common.button.clickToCopy": "Kopyalamak için tıklayın",
|
||||
"account.modal.totp.verify": "Doğrula",
|
||||
"account.notify.totp.disable": "2FA başarıyla kaldırıldı",
|
||||
"account.notify.totp.enable": "2FA başarıyla etkinleştirildi",
|
||||
"account.notify.totp.disable": "TOTP başarıyla devre dışı bırakıldı",
|
||||
"account.notify.totp.enable": "TOTP başarıyla etkinleştirildi",
|
||||
"account.card.language.title": "Dil",
|
||||
"account.card.language.description": "Proje topluluk tarafından çevrilmiştir. Bazı diller eksik olabilir.",
|
||||
"account.card.color.title": "Renk Şeması",
|
||||
"account.card.color.title": "Renk şeması",
|
||||
// ThemeSwitcher.tsx
|
||||
"account.theme.dark": "Koyu",
|
||||
"account.theme.light": "Açık",
|
||||
"account.theme.dark": "Karanlık",
|
||||
"account.theme.light": "Aydınlık",
|
||||
"account.theme.system": "Sistem",
|
||||
"account.button.delete": "Hesabı sil",
|
||||
"account.modal.delete.title": "Hesabı sil",
|
||||
"account.button.delete": "Hesabı Sil",
|
||||
"account.modal.delete.title": "Hesabı Sil",
|
||||
"account.modal.delete.description": "Tüm aktif paylaşımlarınız dahil hesabınızı gerçekten silmek istiyor musunuz?",
|
||||
// END /account
|
||||
// /account/shares
|
||||
"account.shares.title": "Paylaşımlarım",
|
||||
"account.shares.title.empty": "Burası bomboş 👀",
|
||||
"account.shares.title.empty": "Burası boş 👀",
|
||||
"account.shares.description.empty": "Hiç paylaşımınız yok.",
|
||||
"account.shares.button.create": "Bir tane oluşturun",
|
||||
"account.shares.info.title": "Bilgiler paylaşın",
|
||||
"account.shares.button.create": "Bir tane oluştur",
|
||||
"account.shares.info.title": "Paylaşım Bilgileri",
|
||||
"account.shares.table.id": "ID",
|
||||
"account.shares.table.name": "İsim",
|
||||
"account.shares.table.name": "Adı",
|
||||
"account.shares.table.description": "Açıklama",
|
||||
"account.shares.table.visitors": "Ziyaretçiler",
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.expiresAt": "Bitiş Tarihi",
|
||||
"account.shares.table.createdAt": "Oluşturulma Tarihi",
|
||||
"account.shares.table.size": "Boyut",
|
||||
"account.shares.modal.share-informations": "Bilgiler paylaşın",
|
||||
"account.shares.modal.share-link": "Bağlantıyı paylaş",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
"account.shares.table.password-protected": "Şifre Koruması",
|
||||
"account.shares.table.visitor-count": "{count} / {max}",
|
||||
"account.shares.table.expiry-never": "Hiçbir Zaman",
|
||||
"account.shares.modal.share-informations": "Paylaşım Bilgileri",
|
||||
"account.shares.modal.share-link": "Paylaşım Bağlantısı",
|
||||
"account.shares.modal.delete.title": "Paylaşımı Sil: {share}",
|
||||
"account.shares.modal.delete.description": "Bu paylaşımı silmek istediğinize emin misiniz?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
"account.reverseShares.title": "Tersine Paylaşımlar",
|
||||
"account.reverseShares.description": "Ters paylaşım, harici kullanıcıların bir paylaşım oluşturmasına olanak tanıyan benzersiz bir URL oluşturmanızı sağlar.",
|
||||
"account.reverseShares.title.empty": "Burası bomboş 👀",
|
||||
"account.reverseShares.description.empty": "Hiç tersine paylaşımınız yok.",
|
||||
"account.reverseShares.title": "Ters Paylaşımlar",
|
||||
"account.reverseShares.description": "Ters paylaşım, harici kullanıcıların paylaşım oluşturmasını sağlayan benzersiz bir URL oluşturmanıza olanak tanır.",
|
||||
"account.reverseShares.title.empty": "Burası boş 👀",
|
||||
"account.reverseShares.description.empty": "Hiç ters paylaşımınız yok.",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "Tersine paylaşım oluşturun",
|
||||
"account.reverseShares.modal.expiration.label": "Sona erme",
|
||||
"account.reverseShares.modal.title": "Ters Paylaşım Oluştur",
|
||||
"account.reverseShares.modal.expiration.label": "Son Kullanım Süresi",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "Dakika",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "Dakika",
|
||||
"account.reverseShares.modal.expiration.hour-singular": "Saat",
|
||||
@@ -149,92 +152,92 @@ export default {
|
||||
"account.reverseShares.modal.expiration.month-plural": "Ay",
|
||||
"account.reverseShares.modal.expiration.year-singular": "Yıl",
|
||||
"account.reverseShares.modal.expiration.year-plural": "Yıl",
|
||||
"account.reverseShares.modal.max-size.label": "Maks paylaşım boyutu",
|
||||
"account.reverseShares.modal.send-email": "Send email notifications",
|
||||
"account.reverseShares.modal.send-email.description": "Sends you an email notification when a share is created with this reverse share link.",
|
||||
"account.reverseShares.modal.simplified": "Simple mode",
|
||||
"account.reverseShares.modal.simplified.description": "Make it easy for the person uploading the file to share it with you. They will only be able to customize the name and description of the share.",
|
||||
"account.reverseShares.modal.public-access": "Public access",
|
||||
"account.reverseShares.modal.public-access.description": "Make the shares created with this reverse share public. If disabled, only you and the share creator will have access to view it.",
|
||||
"account.reverseShares.modal.max-use.label": "Maks Kullanım",
|
||||
"account.reverseShares.modal.max-use.description": "Bu URL'nin bir paylaşım oluşturmak için kullanılabileceği maksimum sayı.",
|
||||
"account.reverseShare.never-expires": "Bu tersine paylaşım asla sona ermeyecek.",
|
||||
"account.reverseShare.expires-on": "Bu tersine paylaşım {expiration} tarihinde sona erecek.",
|
||||
"account.reverseShares.table.no-shares": "Henüz paylaşım oluşturulmadı",
|
||||
"account.reverseShares.modal.max-size.label": "Maksimum Paylaşım Boyutu",
|
||||
"account.reverseShares.modal.send-email": "E-posta Bildirimleri Gönder",
|
||||
"account.reverseShares.modal.send-email.description": "Bu ters paylaşım bağlantısıyla bir paylaşım oluşturulduğunda size e-posta bildirimi gönderir.",
|
||||
"account.reverseShares.modal.simplified": "Basit Mod",
|
||||
"account.reverseShares.modal.simplified.description": "Dosya yükleyen kişinin, paylaşımı sizinle paylaşmasını kolaylaştırır. Yalnızca paylaşımın adını ve açıklamasını özelleştirebilirler.",
|
||||
"account.reverseShares.modal.public-access": "Genel Erişim",
|
||||
"account.reverseShares.modal.public-access.description": "Bu ters paylaşım ile oluşturulan paylaşımları genel yapın. Devre dışı bırakılırsa, yalnızca siz ve paylaşımı oluşturan kişi bunu görüntüleyebilir.",
|
||||
"account.reverseShares.modal.max-use.label": "Maksimum Kullanım",
|
||||
"account.reverseShares.modal.max-use.description": "Bu URL'nin paylaşım oluşturmak için kaç kez kullanılabileceğinin maksimum sayısı.",
|
||||
"account.reverseShare.never-expires": "Bu ters paylaşım asla sona ermeyecek.",
|
||||
"account.reverseShare.expires-on": "Bu ters paylaşım {expiration} tarihinde sona erecek.",
|
||||
"account.reverseShares.table.no-shares": "Henüz bir paylaşım oluşturulmadı",
|
||||
"account.reverseShares.table.count.singular": "paylaşım",
|
||||
"account.reverseShares.table.count.plural": "paylaşım",
|
||||
"account.reverseShares.table.shares": "Paylaşım",
|
||||
"account.reverseShares.table.remaining": "Kalan kullanımların",
|
||||
"account.reverseShares.table.max-size": "Maks paylaşım boyutu",
|
||||
"account.reverseShares.table.expires": "Sona erme tarihi",
|
||||
"account.reverseShares.modal.reverse-share-link": "Tersine paylaşım bağlantısı",
|
||||
"account.reverseShares.modal.delete.title": "Tersine paylaşımı sil",
|
||||
"account.reverseShares.modal.delete.description": "Bu tersine paylaşımı gerçekten silmek istiyor musunuz? Bunu yaparsanız, ilişkili paylaşımlar da silinecektir.",
|
||||
"account.reverseShares.table.count.plural": "paylaşımlar",
|
||||
"account.reverseShares.table.shares": "Paylaşımlar",
|
||||
"account.reverseShares.table.remaining": "Kalan Kullanım",
|
||||
"account.reverseShares.table.max-size": "Maksimum Paylaşım Boyutu",
|
||||
"account.reverseShares.table.expires": "Son Kullanım Tarihi",
|
||||
"account.reverseShares.modal.reverse-share-link": "Ters Paylaşım Bağlantısı",
|
||||
"account.reverseShares.modal.delete.title": "Ters Paylaşımı Sil",
|
||||
"account.reverseShares.modal.delete.description": "Bu ters paylaşımı silmek istediğinize emin misiniz? Eğer silerseniz, ilişkili paylaşımlar da silinecektir.",
|
||||
// END /account/reverseShares
|
||||
// /admin
|
||||
"admin.title": "Yönetim",
|
||||
"admin.button.users": "Kullanıcı yönetimi",
|
||||
"admin.button.shares": "Paylaşım yönetimi",
|
||||
"admin.button.config": "Konfigürasyon",
|
||||
"admin.button.users": "Kullanıcı Yönetimi",
|
||||
"admin.button.shares": "Paylaşım Yönetimi",
|
||||
"admin.button.config": "Yapılandırma",
|
||||
"admin.version": "Sürüm",
|
||||
// END /admin
|
||||
// /admin/users
|
||||
"admin.users.title": "Kullanıcı yönetimi",
|
||||
"admin.users.title": "Kullanıcı Yönetimi",
|
||||
"admin.users.table.username": "Kullanıcı Adı",
|
||||
"admin.users.table.email": "E-Posta",
|
||||
"admin.users.table.email": "E-posta",
|
||||
"admin.users.table.admin": "Yönetici",
|
||||
"admin.users.edit.update.title": "Edit user: {username}",
|
||||
"admin.users.edit.update.admin-privileges": "Yönetici ayrıcalıkları",
|
||||
"admin.users.edit.update.change-password.title": "Şifreyi değiştir",
|
||||
"admin.users.edit.update.change-password.field": "Yeni şifre",
|
||||
"admin.users.edit.update.change-password.button": "Yeni şifreyi kaydet",
|
||||
"admin.users.edit.update.title": "Kullanıcıyı Düzenle: {username}",
|
||||
"admin.users.edit.update.admin-privileges": "Yönetici Yetkileri",
|
||||
"admin.users.edit.update.change-password.title": "Şifreyi Değiştir",
|
||||
"admin.users.edit.update.change-password.field": "Yeni Şifre",
|
||||
"admin.users.edit.update.change-password.button": "Yeni Şifreyi Kaydet",
|
||||
"admin.users.edit.update.notify.password.success": "Şifre başarıyla değiştirildi",
|
||||
"admin.users.edit.delete.title": "Delete user: {username} ?",
|
||||
"admin.users.edit.delete.description": "Do you really want to delete this user and all their shares?",
|
||||
"admin.users.edit.delete.title": "Kullanıcıyı Sil: {username} ?",
|
||||
"admin.users.edit.delete.description": "Bu kullanıcıyı ve tüm paylaşımlarını gerçekten silmek istiyor musunuz?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "Kullanıcı oluştur",
|
||||
"admin.users.modal.create.title": "Kullanıcı Oluştur",
|
||||
"admin.users.modal.create.username": "Kullanıcı Adı",
|
||||
"admin.users.modal.create.email": "E-Posta",
|
||||
"admin.users.modal.create.email": "E-posta",
|
||||
"admin.users.modal.create.password": "Şifre",
|
||||
"admin.users.modal.create.manual-password": "Şifreyi manuel olarak ayarla",
|
||||
"admin.users.modal.create.manual-password.description": "İşaretlenmezse, kullanıcı şifresini ayarlamak için bağlantı içeren bir e-posta alacaktır.",
|
||||
"admin.users.modal.create.admin": "Yönetici ayrıcalıkları",
|
||||
"admin.users.modal.create.admin.description": "İşaretlenirse, kullanıcı yönetici paneline erişebilir.",
|
||||
"admin.users.modal.create.manual-password": "Şifreyi Elle Ayarla",
|
||||
"admin.users.modal.create.manual-password.description": "İşaretlenmezse, kullanıcıya şifresini ayarlayabileceği bir bağlantı içeren e-posta gönderilir.",
|
||||
"admin.users.modal.create.admin": "Yönetici Yetkileri",
|
||||
"admin.users.modal.create.admin.description": "İşaretlenirse, kullanıcı yönetim paneline erişebilir.",
|
||||
// END /admin/users
|
||||
// /admin/shares
|
||||
"admin.shares.title": "Paylaşım yönetimi",
|
||||
"admin.shares.title": "Paylaşım Yönetimi",
|
||||
"admin.shares.table.id": "Paylaşım ID",
|
||||
"admin.shares.table.username": "Yapımcı",
|
||||
"admin.shares.table.visitors": "Ziyaretçi",
|
||||
"admin.shares.table.expires": "Expires on",
|
||||
"admin.shares.edit.delete.title": "Delete share: {id}",
|
||||
"admin.shares.edit.delete.description": "Bu paylaşımı gerçekten silmek istiyor musun?",
|
||||
"admin.shares.table.username": "Oluşturan",
|
||||
"admin.shares.table.visitors": "Ziyaretçiler",
|
||||
"admin.shares.table.expires": "Bitiş Tarihi",
|
||||
"admin.shares.edit.delete.title": "Paylaşımı Sil: {id}",
|
||||
"admin.shares.edit.delete.description": "Bu paylaşımı gerçekten silmek istiyor musunuz?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "Yükle",
|
||||
"upload.notify.confirm-leave": "Are you sure you want to leave this page? Your upload will be canceled.",
|
||||
"upload.notify.generic-error": "Paylaşımını bitirirken bir hata meydana geldi.",
|
||||
"upload.notify.count-failed": "{count} dosya yüklenemedi. Yeniden deneniyor.",
|
||||
"upload.reverse-share.error.invalid.title": "Invalid reverse share link",
|
||||
"upload.reverse-share.error.invalid.description": "This reverse share has expired or is invalid.",
|
||||
"upload.notify.confirm-leave": "Bu sayfadan ayrılmak istediğinize emin misiniz? Yükleme iptal edilecek.",
|
||||
"upload.notify.generic-error": "Paylaşım tamamlanırken bir hata oluştu.",
|
||||
"upload.notify.count-failed": "{count} dosya yüklenemedi. Tekrar deneniyor.",
|
||||
"upload.reverse-share.error.invalid.title": "Geçersiz Ters Paylaşım Bağlantısı",
|
||||
"upload.reverse-share.error.invalid.description": "Bu ters paylaşım süresi dolmuş veya geçersiz.",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "Dosya yükle",
|
||||
"upload.dropzone.description": "Drag'n'drop files here to start your share. We only accept files up to {maxSize} in total.",
|
||||
"upload.dropzone.notify.file-too-big": "Dosyalarınızın boyutu {maxSize} paylaşım sınırını geçti.",
|
||||
"upload.dropzone.title": "Dosyaları Yükle",
|
||||
"upload.dropzone.description": "Paylaşımınızı başlatmak için dosyaları buraya sürükleyip bırakın. Toplamda en fazla {maxSize} boyutunda dosyaları kabul ediyoruz.",
|
||||
"upload.dropzone.notify.file-too-big": "Dosyalarınız maksimum paylaşım boyutunu ({maxSize}) aşıyor.",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "İsim",
|
||||
"upload.filelist.name": "Ad",
|
||||
"upload.filelist.size": "Boyut",
|
||||
// showCreateUploadModal.tsx
|
||||
"upload.modal.title": "Paylaşım Oluştur",
|
||||
"upload.modal.link.error.invalid": "Sadece harf, sayı, alt çizgi ve kısa çizgi içerebilir",
|
||||
"upload.modal.link.error.taken": "Bu bağlantı halen kullanımda",
|
||||
"upload.modal.not-signed-in": "Oturum açmadınız",
|
||||
"upload.modal.not-signed-in-description": "Paylaşımınızı manuel olarak silemeyecek ve ziyaret sayısını göremeyeceksiniz.",
|
||||
"upload.modal.expires.never": "asla",
|
||||
"upload.modal.expires.never-long": "Permanent share",
|
||||
"upload.modal.expires.error.too-long": "Expiration date exceeds the maximum of {max}.",
|
||||
"upload.modal.link.error.invalid": "Sadece harf, rakam, alt çizgi ve kısa çizgi içerebilir.",
|
||||
"upload.modal.link.error.taken": "Bu bağlantı zaten kullanımda.",
|
||||
"upload.modal.not-signed-in": "Giriş yapmadınız.",
|
||||
"upload.modal.not-signed-in-description": "Paylaşımınızı manuel olarak silemez ve ziyaretçi sayısını göremezsiniz.",
|
||||
"upload.modal.expires.never": "Hiçbir zaman",
|
||||
"upload.modal.expires.never-long": "Kalıcı paylaşım",
|
||||
"upload.modal.expires.error.too-long": "Son kullanma tarihi maksimum {max} sınırını aşıyor.",
|
||||
"upload.modal.link.label": "Bağlantı",
|
||||
"upload.modal.expires.label": "Sona erme tarihi",
|
||||
"upload.modal.expires.label": "Bitiş Tarihi",
|
||||
"upload.modal.expires.minute-singular": "Dakika",
|
||||
"upload.modal.expires.minute-plural": "Dakika",
|
||||
"upload.modal.expires.hour-singular": "Saat",
|
||||
@@ -247,221 +250,255 @@ export default {
|
||||
"upload.modal.expires.month-plural": "Ay",
|
||||
"upload.modal.expires.year-singular": "Yıl",
|
||||
"upload.modal.expires.year-plural": "Yıl",
|
||||
"upload.modal.accordion.name-and-description.title": "İsim ve açıklama",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "İsim",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder": "Bu paylaşımın alıcıları için not",
|
||||
"upload.modal.accordion.email.title": "E-Posta alıcıları",
|
||||
"upload.modal.accordion.email.placeholder": "E-Posta alıcılarını yazın",
|
||||
"upload.modal.accordion.email.invalid-email": "Geçersiz E-Posta adresi",
|
||||
"upload.modal.accordion.security.title": "Güvenlik seçenekleri",
|
||||
"upload.modal.accordion.security.password.label": "Şifre koruması",
|
||||
"upload.modal.accordion.security.password.placeholder": "Şifresiz",
|
||||
"upload.modal.accordion.security.max-views.label": "En fazla görüntüleme",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Sınır yok",
|
||||
"upload.modal.accordion.name-and-description.title": "Ad ve Açıklama",
|
||||
"upload.modal.accordion.name-and-description.name.placeholder": "Ad",
|
||||
"upload.modal.accordion.name-and-description.description.placeholder": "Bu paylaşımın alıcıları için bir not",
|
||||
"upload.modal.accordion.email.title": "E-posta Alıcıları",
|
||||
"upload.modal.accordion.email.placeholder": "E-posta alıcılarını girin",
|
||||
"upload.modal.accordion.email.invalid-email": "Geçersiz e-posta adresi",
|
||||
"upload.modal.accordion.security.title": "Güvenlik Seçenekleri",
|
||||
"upload.modal.accordion.security.password.label": "Şifre Koruması",
|
||||
"upload.modal.accordion.security.password.placeholder": "Şifre Yok",
|
||||
"upload.modal.accordion.security.max-views.label": "Maksimum Görüntüleme",
|
||||
"upload.modal.accordion.security.max-views.placeholder": "Sınırsız",
|
||||
// showCompletedUploadModal.tsx
|
||||
"upload.modal.completed.never-expires": "Bu paylaşım asla sona ermeyecek.",
|
||||
"upload.modal.completed.never-expires": "Bu paylaşımın süresi hiçbir zaman dolmayacak.",
|
||||
"upload.modal.completed.expires-on": "Bu paylaşım {expiration} tarihinde sona erecek.",
|
||||
"upload.modal.completed.share-ready": "Paylaşım hazır",
|
||||
"upload.modal.completed.notified-reverse-share-creator": "We have notified the creator of the reverse share. You can also manually share this link with them through other means.",
|
||||
"upload.modal.completed.share-ready": "Paylaşım hazır.",
|
||||
"upload.modal.completed.notified-reverse-share-creator": "Ters paylaşımın yaratıcısını bilgilendirdik. Bu bağlantıyı diğer yollarla manuel olarak da paylaşabilirsiniz.",
|
||||
// END /upload
|
||||
// /share/[id]
|
||||
"share.title": "Paylaş {shareId}",
|
||||
"share.description": "Seninle ne paylaştığıma bak!",
|
||||
"share.error.visitor-limit-exceeded.title": "Ziyaretçi sınırı aşıldı",
|
||||
"share.error.visitor-limit-exceeded.description": "Bu paylaşımdaki ziyaretçi sınırı aşıldı.",
|
||||
"share.title": "{shareId} Paylaşımı",
|
||||
"share.description": "Sizinle paylaştıklarımı bir göz atın!",
|
||||
"share.error.visitor-limit-exceeded.title": "Ziyaretçi limiti aşıldı",
|
||||
"share.error.visitor-limit-exceeded.description": "Bu paylaşımın ziyaretçi limiti aşıldı.",
|
||||
"share.error.removed.title": "Paylaşım kaldırıldı",
|
||||
"share.error.not-found.title": "Paylaşım bulunamadı",
|
||||
"share.error.not-found.description": "Aradığınız paylaşım bulunmuyor.",
|
||||
"share.error.access-denied.title": "Private share",
|
||||
"share.error.access-denied.description": "The current account does not have permission to access this share",
|
||||
"share.error.not-found.description": "Aradığınız paylaşım mevcut değil.",
|
||||
"share.error.access-denied.title": "Özel paylaşım",
|
||||
"share.error.access-denied.description": "Mevcut hesabın bu paylaşıma erişim izni yok.",
|
||||
"share.modal.password.title": "Şifre gerekli",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Bu paylaşıma erişmek için lütfen şifreyi girin.",
|
||||
"share.modal.password": "Şifre",
|
||||
"share.modal.error.invalid-password": "Geçersiz şifre",
|
||||
"share.button.download-all": "Tümünü indir",
|
||||
"share.notify.download-all-preparing": "The share is being prepared. Please try again in a few minutes.",
|
||||
"share.notify.download-all-preparing": "Paylaşım hazırlanıyor. Lütfen birkaç dakika sonra tekrar deneyin.",
|
||||
"share.modal.file-link": "Dosya bağlantısı",
|
||||
"share.table.name": "İsim",
|
||||
"share.table.name": "Ad",
|
||||
"share.table.size": "Boyut",
|
||||
"share.modal.file-preview.error.not-supported.title": "Önizleme desteklenmiyor",
|
||||
"share.modal.file-preview.error.not-supported.description": "Previews are not supported for this type of files. Please download the file to view it.",
|
||||
"share.modal.file-preview.error.not-supported.description": "Bu dosya türü için önizleme desteklenmiyor. Lütfen dosyayı görüntülemek için indirin.",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "{shareId} düzenle",
|
||||
"share.edit.title": "{shareId} Paylaşımını Düzenle",
|
||||
"share.edit.append-upload": "Dosya ekle",
|
||||
"share.edit.notify.generic-error": "Paylaşımını bitirirken bir hata meydana geldi.",
|
||||
"share.edit.notify.generic-error": "Paylaşımınızı tamamlarken bir hata oluştu.",
|
||||
"share.edit.notify.save-success": "Paylaşım başarıyla güncellendi",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Künye",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Gizlilik Politikası",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.title": "Konfigürasyon",
|
||||
"admin.config.config-file-warning.title": "Yapılandırma dosyası mevcut",
|
||||
"admin.config.config-file-warning.description": "Yapılandırma dosyası ile yapılandırılmış bir Pingvin Paylaşımınız olduğundan, yapılandırmayı kullanıcı arayüzü üzerinden değiştiremezsiniz.",
|
||||
"admin.config.title": "Yapılandırma",
|
||||
"admin.config.category.general": "Genel",
|
||||
"admin.config.category.share": "Paylaş",
|
||||
"admin.config.category.email": "E-Posta",
|
||||
"admin.config.category.email": "E-posta",
|
||||
"admin.config.category.smtp": "SMTP",
|
||||
"admin.config.category.oauth": "Sosyal Medya Girişi",
|
||||
"admin.config.category.oauth": "Sosyal Giriş",
|
||||
"admin.config.general.app-name": "Uygulama adı",
|
||||
"admin.config.general.app-name.description": "Uygulamanın adı",
|
||||
"admin.config.general.app-url": "Uygulama URL'si",
|
||||
"admin.config.general.app-url.description": "Pingvin Share'in hangi bağlantıda kullanılacağı",
|
||||
"admin.config.general.secure-cookies": "Secure cookies",
|
||||
"admin.config.general.secure-cookies.description": "Whether to set the secure flag on cookies. If enabled, the site will not function when accessed over HTTP.",
|
||||
"admin.config.general.app-url.description": "Pingvin Share hangi URL üzerinden kullanılabilir",
|
||||
"admin.config.general.secure-cookies": "Güvenli çerezler",
|
||||
"admin.config.general.secure-cookies.description": "Çerezlere güvenli bayrağı koyulup koyulmayacağı. Etkinleştirildiğinde, site HTTP üzerinden erişildiğinde çalışmaz.",
|
||||
"admin.config.general.show-home-page": "Ana sayfayı göster",
|
||||
"admin.config.general.show-home-page.description": "Ana sayfanın görünürlüğü",
|
||||
"admin.config.general.show-home-page.description": "Ana sayfanın gösterilip gösterilmeyeceği",
|
||||
"admin.config.general.session-duration": "Oturum Süresi",
|
||||
"admin.config.general.session-duration.description": "Kullanıcının ne kadar sürede bir tekrar giriş yapacağı (normalde 3 ay).",
|
||||
"admin.config.general.session-duration.description": "Kullanıcının tekrar oturum açması için gereken süre (varsayılan süre: 3 ay).",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Yeni resim yükleyerek logo'nuzu değiştirin. Resim PNG ve 1'e 1 ölçekte olmalı.",
|
||||
"admin.config.general.logo.description": "Yeni bir resim yükleyerek logonuzu değiştirin. Resim PNG formatında olmalı ve 1:1 oranında olmalıdır.",
|
||||
"admin.config.general.logo.placeholder": "Resim seç",
|
||||
"admin.config.email.enable-share-email-recipients": "Enable email recipient sharing",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Whether to allow email sharing with recipients. Only enable this if SMTP is activated.",
|
||||
"admin.config.email.enable-share-email-recipients": "E-posta alıcılarının paylaşımını etkinleştir",
|
||||
"admin.config.email.enable-share-email-recipients.description": "E-postaların alıcılarla paylaşılmasına izin verilip verilmeyeceği. Sadece SMTP etkinleştirildiğinde bunu etkinleştirin.",
|
||||
"admin.config.email.share-recipients-subject": "Paylaşım alıcılarının konusu",
|
||||
"admin.config.email.share-recipients-subject.description": "Paylaşım alıcılarına gönderilecek e-postanın konusu.",
|
||||
"admin.config.email.share-recipients-message": "Paylaşım alıcılarının mesajı",
|
||||
"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 {creatorEmail} - The email 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 These variables will be replaced with the actual value.",
|
||||
"admin.config.email.reverse-share-subject": "Tersine paylaşım konusu",
|
||||
"admin.config.email.reverse-share-subject.description": "Subject of the sent email when someone created a share with your reverse share link.",
|
||||
"admin.config.email.reverse-share-message": "Tersine paylaşım mesajı",
|
||||
"admin.config.email.reverse-share-message.description": "Birisi sizin tersine paylaşım bağlantınızla bir paylaşım oluşturduğunda gönderilen mesaj. {shareUrl}, oluşturucunun adı ve paylaşım URL'si ile değiştirilecektir.",
|
||||
"admin.config.email.share-recipients-subject.description": "Paylaşım alıcılarına gönderilen e-postanın konusu.",
|
||||
"admin.config.email.share-recipients-message": "Paylaşım alıcılarına mesaj",
|
||||
"admin.config.email.share-recipients-message.description": "Paylaşım alıcılarına gönderilen mesaj. Kullanılabilir değişkenler:\n {creator} - Paylaşımı oluşturanın kullanıcı adı\n {creatorEmail} - Paylaşımı oluşturanın e-posta adresi\n {shareUrl} - Paylaşım URL'si\n {desc} - Paylaşım açıklaması\n {expires} - Paylaşımın son kullanma tarihi\n Bu değişkenler gerçek değerlerle değiştirilecektir.",
|
||||
"admin.config.email.reverse-share-subject": "Ters paylaşım konusu",
|
||||
"admin.config.email.reverse-share-subject.description": "Birisi ters paylaşım bağlantınızla bir paylaşım oluşturduğunda gönderilen e-postanın konusu.",
|
||||
"admin.config.email.reverse-share-message": "Ters paylaşım mesajı",
|
||||
"admin.config.email.reverse-share-message.description": "Birisi ters paylaşım bağlantınızla bir paylaşım oluşturduğunda gönderilen mesaj. {shareUrl}, paylaşımı oluşturan kişinin adı ve paylaşım URL'si ile değiştirilecektir.",
|
||||
"admin.config.email.reset-password-subject": "Şifre sıfırlama konusu",
|
||||
"admin.config.email.reset-password-subject.description": "Subject of the sent email when a user requests a password reset.",
|
||||
"admin.config.email.reset-password-subject.description": "Bir kullanıcı şifre sıfırlama talebinde bulunduğunda gönderilen e-postanın konusu.",
|
||||
"admin.config.email.reset-password-message": "Şifre sıfırlama mesajı",
|
||||
"admin.config.email.reset-password-message.description": "Bir kullanıcı şifre sıfırlama talebinde bulunduğunda gönderilecek mesaj. {url} şifre sıfırlama URL'si ile değiştirilecektir.",
|
||||
"admin.config.email.reset-password-message.description": "Bir kullanıcı şifre sıfırlama talebinde bulunduğunda gönderilen mesaj. {url}, şifre sıfırlama URL'si ile değiştirilecektir.",
|
||||
"admin.config.email.invite-subject": "Davet konusu",
|
||||
"admin.config.email.invite-subject.description": "Subject of the sent email when an admin invites a user.",
|
||||
"admin.config.email.invite-subject.description": "Bir yönetici bir kullanıcıyı davet ettiğinde gönderilen e-postanın konusu.",
|
||||
"admin.config.email.invite-message": "Davet mesajı",
|
||||
"admin.config.email.invite-message.description": "Message which gets sent when an admin invites a user. {url} will be replaced with the invite URL, {email} with the email and {password} with the users password.",
|
||||
"admin.config.share.allow-registration": "Kayda izin ver",
|
||||
"admin.config.share.allow-registration.description": "Kaydın izin verilip verilmeyeceği",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Giriş yapmamış kullanıcılara izin ver",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Giriş yapmamış kullanıcıların paylaşım oluşturup oluşturamayacağı",
|
||||
"admin.config.share.max-expiration": "Maks sona erme",
|
||||
"admin.config.share.max-expiration.description": "Saat üzerinden maksimum paylaşım sona ermesi. Sınırsız için 0 yapın.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-size": "Maks boyut",
|
||||
"admin.config.share.max-size.description": "Byte üzerinden maks paylaşım boyutu",
|
||||
"admin.config.share.zip-compression-level": "Zip sıkıştırma seviyesi",
|
||||
"admin.config.share.zip-compression-level.description": "Dosya boyutu ve sıkıştırma hızı arasında denge kurmak için seviyeyi ayarlayın. Geçerli değerler 0 ile 9 arasında değişir; 0 sıkıştırma yok ve 9 maksimum sıkıştırma anlamına gelir. ",
|
||||
"admin.config.share.chunk-size": "Yığın boyutu",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"admin.config.share.auto-open-share-modal": "Paylaşım oluşturma modalini otomatik aç",
|
||||
"admin.config.share.auto-open-share-modal.description": "Bir kullanıcı dosyaları seçtiğinde paylaşım oluşturma modu otomatik olarak görünür ve düğmeye manuel olarak tıklama ihtiyacını ortadan kaldırır.",
|
||||
"admin.config.smtp.enabled": "Enable",
|
||||
"admin.config.smtp.enabled.description": "SMTP'nin etkin olup olmadığı. Bunu yalnızca SMTP sunucunuzun ana bilgisayarını, bağlantı noktasını, e-postasını, kullanıcısını ve şifresini girdiyseniz true olarak ayarlayın.",
|
||||
"admin.config.smtp.host": "Host",
|
||||
"admin.config.smtp.host.description": "SMTP sunucusunun hostu",
|
||||
"admin.config.email.invite-message.description": "Bir yönetici bir kullanıcıyı davet ettiğinde gönderilen mesaj. {url}, davet URL'si ile; {email}, e-posta adresi ile ve {password}, kullanıcının şifresi ile değiştirilecektir.",
|
||||
"admin.config.share.allow-registration": "Kayıta izin ver",
|
||||
"admin.config.share.allow-registration.description": "Kaydın izinli olup olmadığı",
|
||||
"admin.config.share.allow-unauthenticated-shares": "Doğrulanmamış paylaşımlara izin ver",
|
||||
"admin.config.share.allow-unauthenticated-shares.description": "Doğrulanmamış kullanıcıların paylaşım oluşturmasına izin verilip verilmeyeceği",
|
||||
"admin.config.share.max-expiration": "Maksimum son kullanma süresi",
|
||||
"admin.config.share.max-expiration.description": "Maksimum paylaşım süresi. Sınırsız süreye izin vermek için 0 olarak ayarlayın.",
|
||||
"admin.config.share.share-id-length": "Varsayılan paylaşım ID uzunluğu",
|
||||
"admin.config.share.share-id-length.description": "Bir paylaşım için oluşturulan varsayılan ID uzunluğu. Bu değer, ters paylaşımlar için bağlantı oluştururken de kullanılır. 8'in altındaki bir değer güvenli olarak kabul edilmez.",
|
||||
"admin.config.share.max-size": "Maksimum boyut",
|
||||
"admin.config.share.max-size.description": "Maksimum paylaşım boyutu",
|
||||
"admin.config.share.zip-compression-level": "ZIP sıkıştırma seviyesi",
|
||||
"admin.config.share.zip-compression-level.description": "Dosya boyutu ve sıkıştırma hızı arasındaki dengeyi ayarlayın. Geçerli değerler 0 ile 9 arasındadır; 0 sıkıştırma yok, 9 maksimum sıkıştırma anlamına gelir.",
|
||||
"admin.config.share.chunk-size": "Parça boyutu",
|
||||
"admin.config.share.chunk-size.description": "Yüklemeleriniz için verimlilik ve güvenilirliği internet bağlantınıza göre dengelemek için parça boyutunu ayarlayın. Daha küçük parçalar, dengesiz bağlantılar için başarı oranını artırabilirken, daha büyük parçalar sabit bağlantılar için yükleme hızını artırır.",
|
||||
"admin.config.share.auto-open-share-modal": "Paylaşım oluşturma penceresini otomatik aç",
|
||||
"admin.config.share.auto-open-share-modal.description": "Kullanıcı dosya seçtiğinde paylaşım oluşturma penceresi otomatik olarak görünür, manuel olarak düğmeye tıklamaya gerek kalmaz.",
|
||||
"admin.config.smtp.enabled": "Etkinleştir",
|
||||
"admin.config.smtp.enabled.description": "SMTP'nin etkin olup olmadığı. Sadece ana bilgisayar, port, e-posta, kullanıcı ve SMTP sunucunuzun şifresini girdiyseniz bunu true olarak ayarlayın.",
|
||||
"admin.config.smtp.host": "Sunucu",
|
||||
"admin.config.smtp.host.description": "SMTP sunucusunun ana bilgisayarı",
|
||||
"admin.config.smtp.port": "Port",
|
||||
"admin.config.smtp.port.description": "SMTP sunucusunun portu",
|
||||
"admin.config.smtp.email": "E-Posta",
|
||||
"admin.config.smtp.email.description": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.username": "Kullanıcı Adı",
|
||||
"admin.config.smtp.email": "E-posta",
|
||||
"admin.config.smtp.email.description": "E-postaların gönderileceği e-posta adresi",
|
||||
"admin.config.smtp.username": "Kullanıcı adı",
|
||||
"admin.config.smtp.username.description": "SMTP sunucusunun kullanıcı adı",
|
||||
"admin.config.smtp.password": "Şifre",
|
||||
"admin.config.smtp.password.description": "SMTP sunucusunun şifresi",
|
||||
"admin.config.smtp.button.test": "Test e-postası gönder",
|
||||
"admin.config.smtp.allow-unauthorized-certificates": "Trust unauthorized SMTP server certificates",
|
||||
"admin.config.smtp.allow-unauthorized-certificates.description": "Only set this to true if you need to trust self signed certificates.",
|
||||
"admin.config.oauth.allow-registration": "Kayıtlara izin ver",
|
||||
"admin.config.oauth.allow-registration.description": "Sosyal Medya kayıtlarına izin verilip verilmeyeceği",
|
||||
"admin.config.oauth.ignore-totp": "2FA görmezden gel",
|
||||
"admin.config.oauth.ignore-totp.description": "Sosyal Medya ile giriş yapıldıktıktan sonra 2FA görmezden gelinip gelinmeyeceği",
|
||||
"admin.config.oauth.disable-password": "Disable password login",
|
||||
"admin.config.oauth.disable-password.description": "Whether to disable password login\nMake sure that an OAuth provider is properly configured before activating this configuration to avoid being locked out.",
|
||||
"admin.config.smtp.allow-unauthorized-certificates": "Yetkisiz SMTP sunucu sertifikalarına güven",
|
||||
"admin.config.smtp.allow-unauthorized-certificates.description": "Sadece kendi imzaladığınız sertifikalara güvenmeniz gerekiyorsa bunu true olarak ayarlayın.",
|
||||
"admin.config.oauth.allow-registration": "Kayıt olmayı etkinleştir",
|
||||
"admin.config.oauth.allow-registration.description": "Kullanıcıların sosyal giriş yoluyla kayıt olmasına izin ver",
|
||||
"admin.config.oauth.ignore-totp": "TOTP'yi yoksay",
|
||||
"admin.config.oauth.ignore-totp.description": "Kullanıcı sosyal giriş yaparken TOTP'nin yoksayılıp yoksayılmayacağı",
|
||||
"admin.config.oauth.disable-password": "Şifre girişini devre dışı bırak",
|
||||
"admin.config.oauth.disable-password.description": "Şifre girişinin devre dışı bırakılıp bırakılmayacağı\nBu yapılandırmayı etkinleştirmeden önce bir OAuth sağlayıcısının doğru şekilde yapılandırıldığından emin olun, aksi takdirde hesaba erişiminiz engellenebilir.",
|
||||
"admin.config.oauth.github-enabled": "GitHub",
|
||||
"admin.config.oauth.github-enabled.description": "GitHub girişine izin verilip verilmeyeceği",
|
||||
"admin.config.oauth.github-client-id": "GitHub Client ID",
|
||||
"admin.config.oauth.github-client-id.description": "GitHub OAuth uygulamasının Client ID'si",
|
||||
"admin.config.oauth.github-client-secret": "GitHub Client Secret",
|
||||
"admin.config.oauth.github-client-secret.description": "GitHub OAuth uygulamasının Client Secret'i",
|
||||
"admin.config.oauth.github-enabled.description": "GitHub girişinin etkin olup olmadığı",
|
||||
"admin.config.oauth.github-client-id": "GitHub İstemci Kimliği",
|
||||
"admin.config.oauth.github-client-id.description": "GitHub OAuth uygulamasının İstemci Kimliği",
|
||||
"admin.config.oauth.github-client-secret": "GitHub İstemci Gizli Anahtarı",
|
||||
"admin.config.oauth.github-client-secret.description": "GitHub OAuth uygulamasının İstemci Gizli Anahtarı",
|
||||
"admin.config.oauth.google-enabled": "Google",
|
||||
"admin.config.oauth.google-enabled.description": "Google girişi izin verilip verilmeyeceği",
|
||||
"admin.config.oauth.google-client-id": "Google Client ID",
|
||||
"admin.config.oauth.google-client-id.description": "Google OAuth uygulamasının Client ID'si",
|
||||
"admin.config.oauth.google-client-secret": "Google Client Secret",
|
||||
"admin.config.oauth.google-client-secret.description": "Google OAuth uygulamasının Client Secret'i",
|
||||
"admin.config.oauth.google-enabled.description": "Google girişinin etkin olup olmadığı",
|
||||
"admin.config.oauth.google-client-id": "Google İstemci Kimliği",
|
||||
"admin.config.oauth.google-client-id.description": "Google OAuth uygulamasının İstemci Kimliği",
|
||||
"admin.config.oauth.google-client-secret": "Google İstemci Gizli Anahtarı",
|
||||
"admin.config.oauth.google-client-secret.description": "Google OAuth uygulamasının İstemci Gizli Anahtarı",
|
||||
"admin.config.oauth.microsoft-enabled": "Microsoft",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Microsoft girişine izin verilip verilmeyeceği",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Tenant",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Microsoft OAuth uygulamasının Tenant kimliği\nyaygın: Hem kişisel Microsoft hesabına hem de Microsoft Entra ID'den bir iş veya okul hesabına sahip kullanıcılar uygulamada oturum açabilir. kuruluşlar: Yalnızca Microsoft Entra ID'den iş veya okul hesabı olan kullanıcılar uygulamada oturum açabilir.\ntüketiciler: Yalnızca kişisel Microsoft hesabı olan kullanıcılar uygulamada oturum açabilir.\nMicrosoft Entra Tenant etki alanı adı veya GUID biçimindeki Tenant kimliği: Yalnızca belirli bir Microsoft Entra Tenant kullanıcısı (iş veya okul hesabına sahip dizin üyeleri veya kişisel Microsoft hesabına sahip dizin konukları) uygulamada oturum açabilir.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft Client ID",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Microsoft OAuth uygulamasının Client ID'si",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft Client secret",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Microsoft OAuth uygulamasının Client Secret'i",
|
||||
"admin.config.oauth.microsoft-enabled.description": "Microsoft girişinin etkin olup olmadığı",
|
||||
"admin.config.oauth.microsoft-tenant": "Microsoft Kiracı",
|
||||
"admin.config.oauth.microsoft-tenant.description": "Microsoft OAuth uygulamasının Kiracı Kimliği\ncommon: Hem kişisel Microsoft hesaplarına hem de Microsoft Entra ID'den iş veya okul hesaplarına sahip kullanıcılar uygulamaya giriş yapabilir.\norganizations: Sadece Microsoft Entra ID'den iş veya okul hesaplarına sahip kullanıcılar uygulamaya giriş yapabilir.\nconsumers: Sadece kişisel Microsoft hesabı olan kullanıcılar uygulamaya giriş yapabilir.\nMicrosoft Entra kiracısının alan adı veya GUID formatındaki kiracı kimliği: Sadece belirli bir Microsoft Entra kiracısındaki kullanıcılar (iş veya okul hesapları olan dizin üyeleri veya kişisel Microsoft hesabı olan dizin konukları) uygulamaya giriş yapabilir.",
|
||||
"admin.config.oauth.microsoft-client-id": "Microsoft İstemci Kimliği",
|
||||
"admin.config.oauth.microsoft-client-id.description": "Microsoft OAuth uygulamasının İstemci Kimliği",
|
||||
"admin.config.oauth.microsoft-client-secret": "Microsoft İstemci Gizli Anahtarı",
|
||||
"admin.config.oauth.microsoft-client-secret.description": "Microsoft OAuth uygulamasının İstemci Gizli Anahtarı",
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "Discord girişine izin verilip verilmeyeceği",
|
||||
"admin.config.oauth.discord-limited-users": "Discord limited users",
|
||||
"admin.config.oauth.discord-limited-users.description": "Limit signing in to specific users by their Discord ID. Leave it blank to disable.",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord limitli sunucu ID'si",
|
||||
"admin.config.oauth.discord-limited-guild.description": "Oturum açmayı belirli bir sunucudaki kullanıcılarla sınırlayın. Devre dışı bırakmak için boş bırakın.",
|
||||
"admin.config.oauth.discord-client-id": "Discord Client ID",
|
||||
"admin.config.oauth.discord-client-id.description": "Discord OAuth uygulamasının Client ID'si",
|
||||
"admin.config.oauth.discord-client-secret": "Discord Client secret",
|
||||
"admin.config.oauth.discord-client-secret.description": "Discord OAuth uygulamasının Client Secret'i",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Bağlantısı",
|
||||
"admin.config.oauth.oidc-enabled.description": "OpenID girişine izin verilip verilmeyeceği",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Keşfetme URI'si",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "OpenID Connect OAuth uygulamasının Keşfetme URI'si",
|
||||
"admin.config.oauth.oidc-sign-out": "Sign out from OpenID Connect",
|
||||
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
|
||||
"admin.config.oauth.oidc-scope": "OpenID Connect scope",
|
||||
"admin.config.oauth.oidc-scope.description": "Scopes which should be requested from the OpenID Connect provider.",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect kullanıcı adı sahiplenme",
|
||||
"admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID belirtecinde kullanıcı adı sahiplenme. Bu yapılandırmanın ne olduğunu bilmiyorsanız boş bırakın.",
|
||||
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",
|
||||
"admin.config.oauth.oidc-role-path.description": "Must be a valid JMES path referencing an array of roles. " + "Managing access rights using OpenID Connect roles is only recommended if no other identity provider is configured and password login is disabled. " + "Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-role-general-access": "OpenID Connect role for general access",
|
||||
"admin.config.oauth.oidc-role-general-access.description": "Role required for general access. Must be present in a user’s roles for them to log in. " + "Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-role-admin-access": "OpenID Connect role for admin access",
|
||||
"admin.config.oauth.oidc-role-admin-access.description": "Role required for administrative access. Must be present in a user’s roles for them to access the admin panel. " + "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": "OpenID Connect OAuth uygulamasının Client ID'si",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect Client secret",
|
||||
"admin.config.oauth.oidc-client-secret.description": "OpenID Connect OAuth uygulamasının Client Secret'i",
|
||||
"admin.config.oauth.discord-enabled.description": "Discord girişinin etkin olup olmadığı",
|
||||
"admin.config.oauth.discord-limited-users": "Discord ile sınırlı kullanıcılar",
|
||||
"admin.config.oauth.discord-limited-users.description": "Belirli kullanıcıların Discord ID'leri ile giriş yapmasını sınırla. Devre dışı bırakmak için boş bırakın.",
|
||||
"admin.config.oauth.discord-limited-guild": "Discord ile sınırlı sunucu ID'si",
|
||||
"admin.config.oauth.discord-limited-guild.description": "Belirli bir sunucudaki kullanıcıların giriş yapmasını sınırla. Devre dışı bırakmak için boş bırakın.",
|
||||
"admin.config.oauth.discord-client-id": "Discord İstemci Kimliği",
|
||||
"admin.config.oauth.discord-client-id.description": "Discord OAuth uygulamasının İstemci Kimliği",
|
||||
"admin.config.oauth.discord-client-secret": "Discord İstemci Gizli Anahtarı",
|
||||
"admin.config.oauth.discord-client-secret.description": "Discord OAuth uygulamasının İstemci Gizli Anahtarı",
|
||||
"admin.config.oauth.oidc-enabled": "OpenID Connect",
|
||||
"admin.config.oauth.oidc-enabled.description": "OpenID Connect girişinin etkin olup olmadığı",
|
||||
"admin.config.oauth.oidc-discovery-uri": "OpenID Connect Keşif URI'si",
|
||||
"admin.config.oauth.oidc-discovery-uri.description": "OpenID Connect OAuth uygulamasının Keşif URI'si",
|
||||
"admin.config.oauth.oidc-sign-out": "OpenID Connect'ten çıkış yap",
|
||||
"admin.config.oauth.oidc-sign-out.description": "“Çıkış yap” düğmesinin OpenID Connect sağlayıcısından çıkış yapıp yapmayacağı",
|
||||
"admin.config.oauth.oidc-scope": "OpenID Connect kapsamı",
|
||||
"admin.config.oauth.oidc-scope.description": "OpenID Connect sağlayıcısından talep edilmesi gereken kapsamlar.",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect kullanıcı adı alanı",
|
||||
"admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID tokenindeki kullanıcı adı alanı. Bu yapılandırmanın ne olduğunu bilmiyorsanız boş bırakın.",
|
||||
"admin.config.oauth.oidc-role-path": "OpenID Connect tokenindeki rollerin yolu",
|
||||
"admin.config.oauth.oidc-role-path.description": "Bir dizi rolü referans alan geçerli bir JMES yolu olmalıdır. " + "Erişim haklarını OpenID Connect rolleri kullanarak yönetmek, başka bir kimlik sağlayıcı yapılandırılmamışsa ve şifreli giriş devre dışıysa önerilir. " + "Bu yapılandırmanın ne olduğunu bilmiyorsanız boş bırakın.",
|
||||
"admin.config.oauth.oidc-role-general-access": "Genel erişim için OpenID Connect rolü",
|
||||
"admin.config.oauth.oidc-role-general-access.description": "Genel erişim için gerekli rol. Kullanıcıların giriş yapabilmesi için rollerinde bulunması gerekir. " + "Bu yapılandırmanın ne olduğunu bilmiyorsanız boş bırakın.",
|
||||
"admin.config.oauth.oidc-role-admin-access": "Yönetici erişimi için OpenID Connect rolü",
|
||||
"admin.config.oauth.oidc-role-admin-access.description": "Yönetici paneline erişim için gerekli rol. Kullanıcıların yönetici paneline erişebilmesi için rollerinde bulunması gerekir. " + "Bu yapılandırmanın ne olduğunu bilmiyorsanız boş bırakın.",
|
||||
"admin.config.oauth.oidc-client-id": "OpenID Connect İstemci Kimliği",
|
||||
"admin.config.oauth.oidc-client-id.description": "OpenID Connect OAuth uygulamasının İstemci Kimliği",
|
||||
"admin.config.oauth.oidc-client-secret": "OpenID Connect İstemci Gizli Anahtarı",
|
||||
"admin.config.oauth.oidc-client-secret.description": "OpenID Connect OAuth uygulamasının İstemci Gizli Anahtarı",
|
||||
"admin.config.category.ldap": "LDAP",
|
||||
"admin.config.ldap.enabled": "Enable LDAP",
|
||||
"admin.config.ldap.enabled.description": "Use LDAP authentication for user login",
|
||||
"admin.config.ldap.url": "Server URL",
|
||||
"admin.config.ldap.url.description": "URL of the LDAP server",
|
||||
"admin.config.ldap.enabled": "LDAP'ı etkinleştir",
|
||||
"admin.config.ldap.enabled.description": "Kullanıcı girişinde LDAP kimlik doğrulamasını kullan",
|
||||
"admin.config.ldap.url": "Sunucu URL'si",
|
||||
"admin.config.ldap.url.description": "LDAP sunucusunun URL'si",
|
||||
"admin.config.ldap.bind-dn": "Bind DN",
|
||||
"admin.config.ldap.bind-dn.description": "Default user used to perform the user search",
|
||||
"admin.config.ldap.bind-password": "Bind password",
|
||||
"admin.config.ldap.bind-password.description": "Password used to perform the user search",
|
||||
"admin.config.ldap.search-base": "User base",
|
||||
"admin.config.ldap.search-base.description": "Base location, where the user search will be performed",
|
||||
"admin.config.ldap.search-query": "User query",
|
||||
"admin.config.ldap.search-query.description": "The user query will be used to search the 'User base' for the LDAP user. %username% can be used as the placeholder for the user given input.",
|
||||
"admin.config.ldap.admin-groups": "Admin group",
|
||||
"admin.config.ldap.admin-groups.description": "Group required for administrative access.",
|
||||
"admin.config.ldap.field-name-member-of": "User groups attribute name",
|
||||
"admin.config.ldap.field-name-member-of.description": "LDAP attribute name for the groups, an user is a member of. This is used when checking for the admin group.",
|
||||
"admin.config.ldap.field-name-email": "User email attribute name",
|
||||
"admin.config.ldap.field-name-email.description": "LDAP attribute name for the email of an user.",
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.ldap.bind-dn.description": "Kullanıcı aramasını gerçekleştirmek için kullanılan varsayılan kullanıcı",
|
||||
"admin.config.ldap.bind-password": "Bağlantı şifresi",
|
||||
"admin.config.ldap.bind-password.description": "Kullanıcı aramasını gerçekleştirmek için kullanılan şifre",
|
||||
"admin.config.ldap.search-base": "Kullanıcı temeli",
|
||||
"admin.config.ldap.search-base.description": "Kullanıcı aramasının yapılacağı temel konum",
|
||||
"admin.config.ldap.search-query": "Kullanıcı sorgusu",
|
||||
"admin.config.ldap.search-query.description": "Kullanıcı sorgusu, LDAP kullanıcısını aramak için 'Kullanıcı temeli' üzerinde kullanılacaktır. Kullanıcı girişine karşılık gelen %username% yer tutucusu kullanılabilir.",
|
||||
"admin.config.ldap.admin-groups": "Yönetici grubu",
|
||||
"admin.config.ldap.admin-groups.description": "Yönetimsel erişim için gerekli grup.",
|
||||
"admin.config.ldap.field-name-member-of": "Kullanıcı grupları nitelik adı",
|
||||
"admin.config.ldap.field-name-member-of.description": "Kullanıcının üye olduğu gruplar için LDAP nitelik adı. Bu, yönetici grubunu kontrol ederken kullanılır.",
|
||||
"admin.config.ldap.field-name-email": "Kullanıcı e-posta nitelik adı",
|
||||
"admin.config.ldap.field-name-email.description": "Kullanıcının e-posta adresi için LDAP nitelik adı.",
|
||||
"admin.config.notify.success": "Yapılandırma başarıyla güncellendi.",
|
||||
"admin.config.notify.logo-success": "Logo başarıyla güncellendi. Web sitesinde güncellenmesi birkaç dakika sürebilir.",
|
||||
"admin.config.notify.no-changes": "Kaydedilecek bir değişiklik yok.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Etkin",
|
||||
"admin.config.s3.enabled.description": "Paylaşılan dosyaların yerel dosya sistemi yerine S3 üzerinde depolanıp depolanmayacağını belirtir.",
|
||||
"admin.config.s3.endpoint": "Bağlantı Noktası",
|
||||
"admin.config.s3.endpoint.description": "S3 kovasının URL'si.",
|
||||
"admin.config.s3.region": "Bölge",
|
||||
"admin.config.s3.region.description": "S3 kovasının bulunduğu bölge.",
|
||||
"admin.config.s3.bucket-name": "Kova Adı",
|
||||
"admin.config.s3.bucket-name.description": "S3 kovasının adı.",
|
||||
"admin.config.s3.bucket-path": "Yol",
|
||||
"admin.config.s3.bucket-path.description": "Dosyaların S3 kovasında depolanması için varsayılan yol.",
|
||||
"admin.config.s3.key": "Anahtar",
|
||||
"admin.config.s3.key.description": "S3 kovasına erişmenizi sağlayan anahtar.",
|
||||
"admin.config.s3.secret": "Gizli",
|
||||
"admin.config.s3.secret.description": "S3 kovasına erişmenizi sağlayan gizli anahtar.",
|
||||
"admin.config.category.legal": "Yasal",
|
||||
"admin.config.legal.enabled": "Yasal Bildirimleri Etkinleştir",
|
||||
"admin.config.legal.enabled.description": "Alt bilgi kısmında künyeye ve gizlilik politikasına bir bağlantı gösterilip gösterilmeyeceğini belirtir.",
|
||||
"admin.config.legal.imprint-text": "Künye Metni",
|
||||
"admin.config.legal.imprint-text.description": "Künyede gösterilecek metin. Markdown destekler. Dış bir künye sayfasına bağlanmak için boş bırakın.",
|
||||
"admin.config.legal.imprint-url": "Künye URL'si",
|
||||
"admin.config.legal.imprint-url.description": "Halihazırda bir künye sayfanız varsa, buraya bağlantı verebilirsiniz.",
|
||||
"admin.config.legal.privacy-policy-text": "Gizlilik Politikası Metni",
|
||||
"admin.config.legal.privacy-policy-text.description": "Gizlilik politikasında gösterilecek metin. Markdown destekler. Dış bir gizlilik politikası sayfasına bağlanmak için boş bırakın.",
|
||||
"admin.config.legal.privacy-policy-url": "Gizlilik Politikası URL'si",
|
||||
"admin.config.legal.privacy-policy-url.description": "Halihazırda bir gizlilik politikası sayfanız varsa, buraya bağlantı verebilirsiniz.",
|
||||
// 404
|
||||
"404.description": "Haydaa, böyle bir sayfa yok.",
|
||||
"404.button.home": "Beni eve götür",
|
||||
"404.description": "Hata! Bu sayfa mevcut değil.",
|
||||
"404.button.home": "Beni anasayfaya götür",
|
||||
// error
|
||||
"error.title": "Hata",
|
||||
"error.description": "Haydaa!",
|
||||
"error.description": "Oops!",
|
||||
"error.button.back": "Geri dön",
|
||||
"error.msg.default": "Bir şeyler ters gitti.",
|
||||
"error.msg.access_denied": "Doğrulama aşamasını iptal ettin, lütfen yeniden dene.",
|
||||
"error.msg.expired_token": "Doğrulama aşaması çok uzun sürdü, lütfen yeniden dene.",
|
||||
"error.msg.access_denied": "Kimlik doğrulama işlemini iptal ettiniz, lütfen tekrar deneyin.",
|
||||
"error.msg.expired_token": "Kimlik doğrulama işlemi çok uzun sürdü, lütfen tekrar deneyin.",
|
||||
"error.msg.invalid_token": "Dahili Hata",
|
||||
"error.msg.no_user": "Bu {0} hesabına bağlı kullanıcı mevcut değil.",
|
||||
"error.msg.no_email": "Bu {0} hesaptan e-posta adresi alınamıyor.",
|
||||
"error.msg.already_linked": "Bu {0} hesabı zaten başka bir hesaba bağlı.",
|
||||
"error.msg.not_linked": "This {0} account hasn't been linked to any account yet.",
|
||||
"error.msg.unverified_account": "Bu {0} hesabı doğrulanmamış, lütfen doğruladıktan sonra yeniden dene.",
|
||||
"error.msg.user_not_allowed": "Giriş yapmana izin verilmiyor.",
|
||||
"error.msg.cannot_get_user_info": "Cannot get your user info from this {0} account.",
|
||||
"error.msg.no_user": "Bu {0} hesabıyla bağlantılı bir kullanıcı mevcut değil.",
|
||||
"error.msg.no_email": "Bu {0} hesabından e-posta adresi alınamıyor.",
|
||||
"error.msg.already_linked": "Bu {0} hesabı zaten başka bir hesapla bağlantılı.",
|
||||
"error.msg.not_linked": "Bu {0} hesabı henüz hiçbir hesapla bağlantılı değil.",
|
||||
"error.msg.unverified_account": "Bu {0} hesabı doğrulanmamış, lütfen doğrulamadan sonra tekrar deneyin.",
|
||||
"error.msg.user_not_allowed": "Giriş yapma izniniz yok.",
|
||||
"error.msg.cannot_get_user_info": "Bu {0} hesabından kullanıcı bilgilerinize ulaşılamıyor.",
|
||||
"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 Bağlantısı",
|
||||
"error.param.provider_oidc": "OpenID Connect",
|
||||
// Common translations
|
||||
"common.button.save": "Kaydet",
|
||||
"common.button.create": "Oluştur",
|
||||
@@ -469,27 +506,27 @@ export default {
|
||||
"common.button.delete": "Sil",
|
||||
"common.button.cancel": "İptal",
|
||||
"common.button.confirm": "Onayla",
|
||||
"common.button.disable": "Etkisizleştir",
|
||||
"common.button.disable": "Devre Dışı Bırak",
|
||||
"common.button.share": "Paylaş",
|
||||
"common.button.generate": "Oluştur",
|
||||
"common.button.done": "Tamam",
|
||||
"common.button.done": "Tamamlandı",
|
||||
"common.text.link": "Bağlantı",
|
||||
"common.text.navigate-to-link": "Visit link",
|
||||
"common.text.or": "ya da",
|
||||
"common.text.redirecting": "Redirecting...",
|
||||
"common.text.navigate-to-link": "Bağlantıya git",
|
||||
"common.text.or": "veya",
|
||||
"common.text.redirecting": "Yönlendiriliyor...",
|
||||
"common.button.go-back": "Geri dön",
|
||||
"common.button.go-home": "Ana sayfaya dön",
|
||||
"common.notify.copied": "Bağlantınız kopyalandı",
|
||||
"common.notify.copied-link": "Bağlantınız kopyalandı",
|
||||
"common.button.go-home": "Anasayfaya git",
|
||||
"common.notify.copied": "Bağlantınız panoya kopyalandı",
|
||||
"common.notify.copied-link": "Bağlantınız panoya kopyalandı",
|
||||
"common.success": "Başarılı",
|
||||
"common.error": "Hata",
|
||||
"common.error.unknown": "Bilinmeyen hata meydana geldi",
|
||||
"common.error.invalid-email": "Geçersiz E-Posta adresi",
|
||||
"common.error.too-short": "En azından {length} karakter olmalı",
|
||||
"common.error.too-long": "En fazla {length} karakter olmalı",
|
||||
"common.error.number-too-small": "Must be at least {min}",
|
||||
"common.error.number-too-large": "Must be at most {max}",
|
||||
"common.error.exact-length": "Tam tamına {length} karakter olmalı",
|
||||
"common.error.invalid-number": "Bir sayı olmalı",
|
||||
"common.error.field-required": "Bu alan gerekli"
|
||||
"common.error.unknown": "Bilinmeyen bir hata oluştu",
|
||||
"common.error.invalid-email": "Geçersiz e-posta adresi",
|
||||
"common.error.too-short": "En az {length} karakter olmalıdır",
|
||||
"common.error.too-long": "En fazla {length} karakter olmalıdır",
|
||||
"common.error.number-too-small": "En az {min} olmalıdır",
|
||||
"common.error.number-too-large": "En fazla {max} olmalıdır",
|
||||
"common.error.exact-length": "Tam olarak {length} karakter olmalıdır",
|
||||
"common.error.invalid-number": "Bir sayı olmalıdır",
|
||||
"common.error.field-required": "Bu alan gereklidir"
|
||||
};
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Діє до",
|
||||
"account.shares.table.createdAt": "Створено",
|
||||
"account.shares.table.size": "Розмір",
|
||||
"account.shares.table.password-protected": "Захищено паролем",
|
||||
"account.shares.table.visitor-count": "{count} із {max}",
|
||||
"account.shares.table.expiry-never": "Ніколи",
|
||||
"account.shares.modal.share-informations": "Відомості",
|
||||
"account.shares.modal.share-link": "Поділитися посиланням",
|
||||
"account.shares.modal.delete.title": "Видалити завантаження: {share}",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "Сталася помилка під час завершення вашого завантаження.",
|
||||
"share.edit.notify.save-success": "Посилання на ресурс успішно оновлено",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Вихідні дані",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Політика конфіденційності",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Конфігурація",
|
||||
"admin.config.category.general": "Загальне",
|
||||
"admin.config.category.share": "Завантаження",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Показувати домашню сторінку",
|
||||
"admin.config.general.show-home-page.description": "Показувати домашню сторінку чи ні",
|
||||
"admin.config.general.session-duration": "Тривалість сеансу",
|
||||
"admin.config.general.session-duration.description": "Час у годинах, після якого користувач повинен знову увійти в систему (за замовчуванням: 3 місяці).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Логотип",
|
||||
"admin.config.general.logo.description": "Змініть свій логотип, завантаживши нове зображення. Зображення має бути PNG і повинно мати формат 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Виберіть зображення",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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.share-id-length": "Стандартна довжина ID завантаження",
|
||||
"admin.config.share.share-id-length.description": "Стандартна довжина для згенерованого ID завантаження. Це значення також використовується для створення посилань для зворотних завантажень. Значення менше 8 не вважається безпечним.",
|
||||
"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": "Налаштуйте розмір блоку(у байтах) для ваших завантажень, щоб збалансувати ефективність та надійність відповідно до вашого інтернет-з'єднання. Менші частини можуть підвищити ймовірність успішного завантаження для нестабільних з'єднань, тоді як більші частини прискорюють завантаження для стабільних з'єднань.",
|
||||
"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": "Увімкнути",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "Порт",
|
||||
"admin.config.smtp.port.description": "Порт SMTP сервера",
|
||||
"admin.config.smtp.email": "Електронна пошта",
|
||||
"admin.config.smtp.email.description": "Ел. пошта, з якої надсилаються листи",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Логін",
|
||||
"admin.config.smtp.username.description": "Ім'я користувача SMTP-сервера",
|
||||
"admin.config.smtp.password": "Пароль",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Конфігурацію оновлено успішно.",
|
||||
"admin.config.notify.logo-success": "Логотип успішно оновлено. Це може зайняти кілька хвилин, щоб оновлення відобразилось на вебсайті.",
|
||||
"admin.config.notify.no-changes": "Змін не потрібно зберігати.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Увімкнено",
|
||||
"admin.config.s3.enabled.description": "Чи S3 буде використовуватися для зберігання спільних файлів замість локальної файлової системи.",
|
||||
"admin.config.s3.endpoint": "Точка підключення",
|
||||
"admin.config.s3.endpoint.description": "URL сховища S3.",
|
||||
"admin.config.s3.region": "Область",
|
||||
"admin.config.s3.region.description": "Регион облачного хранилища S3.",
|
||||
"admin.config.s3.bucket-name": "Ім'я бакета",
|
||||
"admin.config.s3.bucket-name.description": "Назва S3 бакета.",
|
||||
"admin.config.s3.bucket-path": "Шлях",
|
||||
"admin.config.s3.bucket-path.description": "Шлях за замовчуванням, який має використовуватися для зберігання файлів у S3 бакеті.",
|
||||
"admin.config.s3.key": "Ключ",
|
||||
"admin.config.s3.key.description": "Ключ, який дозволяє отримати доступ до S3 бакету.",
|
||||
"admin.config.s3.secret": "Секрет",
|
||||
"admin.config.s3.secret.description": "Секрет, який дозволяє отримати доступ до S3 бакету.",
|
||||
"admin.config.category.legal": "Юридична інформація",
|
||||
"admin.config.legal.enabled": "Увімкнути правові сповіщення",
|
||||
"admin.config.legal.enabled.description": "Чи відображати посилання на вихідні дані та політику конфіденційності у нижньому колонтитулі.",
|
||||
"admin.config.legal.imprint-text": "Текст вихідних даних",
|
||||
"admin.config.legal.imprint-text.description": "Текст, який має відображатися у вихідних даних. Підтримує Markdown. Залиште порожнім, щоб вставити посилання на зовнішню сторінку з вихідними даними.",
|
||||
"admin.config.legal.imprint-url": "URL вихідних даних",
|
||||
"admin.config.legal.imprint-url.description": "Якщо у вас вже є сторінка з вихідними даними, ви можете вставити посилання на неї тут замість використання текстового поля.",
|
||||
"admin.config.legal.privacy-policy-text": "Текст політики конфіденційності",
|
||||
"admin.config.legal.privacy-policy-text.description": "Текст, що має бути показано в політиці конфіденційності. Підтримує Markdown. Залиште порожнім, щоб надати посилання на сторінку зовнішньої політики конфіденційності.",
|
||||
"admin.config.legal.privacy-policy-url": "Політика конфіденційності URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "Якщо у вас вже є сторінка політики конфіденційності, то ви можете зв'язати її тут замість використання текстового поля.",
|
||||
// 404
|
||||
"404.description": "Бляха, цієї строрінки не існує.",
|
||||
"404.button.home": "Поверни мене додому",
|
||||
|
||||
@@ -3,7 +3,7 @@ export default {
|
||||
"navbar.upload": "Tải lên",
|
||||
"navbar.signin": "Đăng nhập",
|
||||
"navbar.home": "Trang chủ",
|
||||
"navbar.signup": "Sign up",
|
||||
"navbar.signup": "Đăng ký",
|
||||
"navbar.links.shares": "Chia sẻ của tôi",
|
||||
"navbar.links.reverse": "Reverse shares",
|
||||
"navbar.avatar.account": "Tài khoản",
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.size": "Dung lượng",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "Share informations",
|
||||
"account.shares.modal.share-link": "Chia sẻ liên kết",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
@@ -160,7 +163,7 @@ export default {
|
||||
"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.no-shares": "Chưa tạo chia sẻ nào",
|
||||
"account.reverseShares.table.count.singular": "share",
|
||||
"account.reverseShares.table.count.plural": "shares",
|
||||
"account.reverseShares.table.shares": "Shares",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "Private share",
|
||||
"share.error.access-denied.description": "The current account does not have permission to access this share",
|
||||
"share.modal.password.title": "Cần mật khẩu để mở khoá",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "Mật khẩu",
|
||||
"share.modal.error.invalid-password": "Mật khẩu không hợp lệ",
|
||||
"share.button.download-all": "Tải xuống tất cả",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "An error occurred while finishing your share.",
|
||||
"share.edit.notify.save-success": "Share updated successfully",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "Configuration",
|
||||
"admin.config.category.general": "Tổng quan",
|
||||
"admin.config.category.share": "Share",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "Show home page",
|
||||
"admin.config.general.show-home-page.description": "Whether to show the home page",
|
||||
"admin.config.general.session-duration": "Session Duration",
|
||||
"admin.config.general.session-duration.description": "Time in hours after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "Change your logo by uploading a new image. The image must be a PNG and should have the format 1:1.",
|
||||
"admin.config.general.logo.placeholder": "Chọn ảnh",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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-expiration.description": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.max-size": "Kích thước tối đa",
|
||||
"admin.config.share.max-size.description": "Kích thước tối đa (bytes)",
|
||||
"admin.config.share.max-size.description": "Kích thước tối đa",
|
||||
"admin.config.share.zip-compression-level": "Cấp độ nén 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.chunk-size": "Kích cỡ mảnh",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"admin.config.share.chunk-size.description": "Adjust the chunk size 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 make uploads faster 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": "Enable",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "Cổng",
|
||||
"admin.config.smtp.port.description": "Port of the SMTP server",
|
||||
"admin.config.smtp.email": "Email",
|
||||
"admin.config.smtp.email.description": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "Username",
|
||||
"admin.config.smtp.username.description": "Username of the SMTP server",
|
||||
"admin.config.smtp.password": "Mật khẩu",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "Oops this page doesn't exist.",
|
||||
"404.button.home": "Về trang chủ",
|
||||
|
||||
@@ -16,9 +16,9 @@ export default {
|
||||
"home.bullet.a.name": "完全自建",
|
||||
"home.bullet.a.description": "轻松使用私有服务器搭建文件共享平台",
|
||||
"home.bullet.b.name": "完全隐私",
|
||||
"home.bullet.b.description": "Your files are yours and will never be accessed by third parties.",
|
||||
"home.bullet.b.description": "您的文件只属于您,永远无法被第三方访问。",
|
||||
"home.bullet.c.name": "完全无限",
|
||||
"home.bullet.c.description": "Upload files as big as you want. Only your hard drive will be your limit.",
|
||||
"home.bullet.c.description": "您希望上传多大的文件都可以。硬盘容量的大小是您唯一的限制。",
|
||||
"home.button.start": "开始使用",
|
||||
"home.button.source": "源代码",
|
||||
// END /
|
||||
@@ -58,12 +58,12 @@ export default {
|
||||
// /auth/reset-password
|
||||
"resetPassword.title": "忘记密码?",
|
||||
"resetPassword.description": "请输入电子邮箱地址来接收重置密码邮件",
|
||||
"resetPassword.notify.success": "A message with a link to reset your password has been sent if the provided email exists.",
|
||||
"resetPassword.notify.success": "系统已向您的邮箱发送一条包含重置密码链接的邮件。(若该电子邮箱存在)",
|
||||
"resetPassword.button.back": "返回登录页面",
|
||||
"resetPassword.text.resetPassword": "重置密码",
|
||||
"resetPassword.text.enterNewPassword": "请输入新密码",
|
||||
"resetPassword.input.password": "新密码",
|
||||
"resetPassword.notify.passwordReset": "Your password has been successfully reset.",
|
||||
"resetPassword.notify.passwordReset": "您的密码已成功重置。",
|
||||
// /account
|
||||
"account.title": "我的账户",
|
||||
"account.card.info.title": "账户信息",
|
||||
@@ -73,7 +73,7 @@ export default {
|
||||
"account.card.password.title": "密码",
|
||||
"account.card.password.old": "旧密码",
|
||||
"account.card.password.new": "新密码",
|
||||
"account.card.password.noPasswordSet": "You do not have a password set. To sign in using your email and password, you need to create a password.",
|
||||
"account.card.password.noPasswordSet": "您还未设置密码。如果您想通过邮箱和密码登录,请先设置密码。",
|
||||
"account.notify.password.success": "密码更改成功!",
|
||||
"account.card.oauth.title": "社交账号登录",
|
||||
"account.card.oauth.github": "GitHub",
|
||||
@@ -85,7 +85,7 @@ export default {
|
||||
"account.card.oauth.unlink": "解除关联",
|
||||
"account.card.oauth.unlinked": "已解除关联",
|
||||
"account.modal.unlink.title": "解除关联",
|
||||
"account.modal.unlink.description": "Unlinking your social accounts may cause you to lose your account if you don't remember your login credentials",
|
||||
"account.modal.unlink.description": "如果您不记得您的用户名和密码,解除和社交账号的关联可能会导致丢失账户",
|
||||
"account.notify.oauth.unlinked.success": "解除关联成功",
|
||||
"account.card.security.title": "安全",
|
||||
"account.card.security.totp.enable.description": "请输入当前密码开启两步验证",
|
||||
@@ -121,12 +121,15 @@ export default {
|
||||
"account.shares.table.name": "共享后缀",
|
||||
"account.shares.table.description": "描述",
|
||||
"account.shares.table.visitors": "已访问",
|
||||
"account.shares.table.expiresAt": "Expires on",
|
||||
"account.shares.table.createdAt": "Created on",
|
||||
"account.shares.table.expiresAt": "过期于",
|
||||
"account.shares.table.createdAt": "创建于",
|
||||
"account.shares.table.size": "文件大小",
|
||||
"account.shares.table.password-protected": "密码保护",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "永不",
|
||||
"account.shares.modal.share-informations": "共享信息",
|
||||
"account.shares.modal.share-link": "共享链接",
|
||||
"account.shares.modal.delete.title": "Delete share: {share}",
|
||||
"account.shares.modal.delete.title": "删除共享 {share}",
|
||||
"account.shares.modal.delete.description": "你真的想删除这个共享吗?",
|
||||
// END /account/shares
|
||||
// /account/reverseShares
|
||||
@@ -135,7 +138,7 @@ export default {
|
||||
"account.reverseShares.title.empty": "这里空空如也 👀",
|
||||
"account.reverseShares.description.empty": "你没有创建任何预留共享",
|
||||
// showCreateReverseShareModal.tsx
|
||||
"account.reverseShares.modal.title": "创建反向共享",
|
||||
"account.reverseShares.modal.title": "创建预留共享",
|
||||
"account.reverseShares.modal.expiration.label": "过期时间",
|
||||
"account.reverseShares.modal.expiration.minute-singular": "1 分钟",
|
||||
"account.reverseShares.modal.expiration.minute-plural": "分钟",
|
||||
@@ -150,12 +153,12 @@ export default {
|
||||
"account.reverseShares.modal.expiration.year-singular": "1 年",
|
||||
"account.reverseShares.modal.expiration.year-plural": "年",
|
||||
"account.reverseShares.modal.max-size.label": "共享文件上限",
|
||||
"account.reverseShares.modal.send-email": "Send email notifications",
|
||||
"account.reverseShares.modal.send-email.description": "Sends you an email notification when a share is created with this reverse share link.",
|
||||
"account.reverseShares.modal.send-email": "发送电子邮件通知",
|
||||
"account.reverseShares.modal.send-email.description": "当使用此预留共享链接创建共享时,向您发送电子邮件通知。",
|
||||
"account.reverseShares.modal.simplified": "简单模式",
|
||||
"account.reverseShares.modal.simplified.description": "Make it easy for the person uploading the file to share it with you. They will only be able to customize the name and description of the share.",
|
||||
"account.reverseShares.modal.simplified.description": "让上传者更轻松地与你共享文件。他们仅能自定义共享的名称和描述。",
|
||||
"account.reverseShares.modal.public-access": "公开访问",
|
||||
"account.reverseShares.modal.public-access.description": "Make the shares created with this reverse share public. If disabled, only you and the share creator will have access to view it.",
|
||||
"account.reverseShares.modal.public-access.description": "公开使用此预留共享创建的共享。如果禁用,则只有您和共享创建者才能查看。",
|
||||
"account.reverseShares.modal.max-use.label": "最大使用次数",
|
||||
"account.reverseShares.modal.max-use.description": "这个预留共享链接可被用于创建共享的最大使用次数",
|
||||
"account.reverseShare.never-expires": "这个预留共享永不过期",
|
||||
@@ -183,14 +186,14 @@ export default {
|
||||
"admin.users.table.username": "用户名",
|
||||
"admin.users.table.email": "电子邮件",
|
||||
"admin.users.table.admin": "管理员",
|
||||
"admin.users.edit.update.title": "Edit user: {username}",
|
||||
"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": "Delete user: {username} ?",
|
||||
"admin.users.edit.delete.description": "Do you really want to delete this user and all their shares?",
|
||||
"admin.users.edit.delete.title": "删除用户 {username} ?",
|
||||
"admin.users.edit.delete.description": "你真的想删除这个账户,并删除该用户所有的共享吗?",
|
||||
// showCreateUserModal.tsx
|
||||
"admin.users.modal.create.title": "创建用户",
|
||||
"admin.users.modal.create.username": "用户名",
|
||||
@@ -206,20 +209,20 @@ export default {
|
||||
"admin.shares.table.id": "共享 ID",
|
||||
"admin.shares.table.username": "创建者",
|
||||
"admin.shares.table.visitors": "访问者",
|
||||
"admin.shares.table.expires": "Expires on",
|
||||
"admin.shares.edit.delete.title": "Delete share: {id}",
|
||||
"admin.shares.table.expires": "过期于",
|
||||
"admin.shares.edit.delete.title": "删除共享 {id}",
|
||||
"admin.shares.edit.delete.description": "你真的要删除这个共享吗?",
|
||||
// END /admin/shares
|
||||
// /upload
|
||||
"upload.title": "上传",
|
||||
"upload.notify.confirm-leave": "Are you sure you want to leave this page? Your upload will be canceled.",
|
||||
"upload.notify.confirm-leave": "您确定要离开此页面吗?您的上传将被取消。",
|
||||
"upload.notify.generic-error": "创建共享的过程中发生了错误",
|
||||
"upload.notify.count-failed": "{count} 文件上传失败,请重试",
|
||||
"upload.reverse-share.error.invalid.title": "Invalid reverse share link",
|
||||
"upload.reverse-share.error.invalid.description": "This reverse share has expired or is invalid.",
|
||||
"upload.reverse-share.error.invalid.title": "无效的预留共享链接",
|
||||
"upload.reverse-share.error.invalid.description": "这个预留分享已过期或无效。",
|
||||
// Dropzone.tsx
|
||||
"upload.dropzone.title": "上传文件",
|
||||
"upload.dropzone.description": "Drag'n'drop files here to start your share. We only accept files up to {maxSize} in total.",
|
||||
"upload.dropzone.description": "拖放至此以上传文件,文件大小不能超过 {maxSize}。",
|
||||
"upload.dropzone.notify.file-too-big": "你的文件超过了最大上传限制 {maxSize}",
|
||||
// FileList.tsx
|
||||
"upload.filelist.name": "文件名",
|
||||
@@ -231,8 +234,8 @@ export default {
|
||||
"upload.modal.not-signed-in": "当前没有登录",
|
||||
"upload.modal.not-signed-in-description": "你将不能删除你的共享或查看访问次数",
|
||||
"upload.modal.expires.never": "永不",
|
||||
"upload.modal.expires.never-long": "Permanent share",
|
||||
"upload.modal.expires.error.too-long": "Expiration date exceeds the maximum of {max}.",
|
||||
"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": "1 分钟",
|
||||
@@ -275,16 +278,16 @@ export default {
|
||||
"share.error.access-denied.title": "私有共享",
|
||||
"share.error.access-denied.description": "当前账户没有权限访问此共享",
|
||||
"share.modal.password.title": "需要密码",
|
||||
"share.modal.password.description": "Please enter the password to acces this share.",
|
||||
"share.modal.password.description": "请输入密码以访问此共享。",
|
||||
"share.modal.password": "密码",
|
||||
"share.modal.error.invalid-password": "密码错误",
|
||||
"share.button.download-all": "全部下载",
|
||||
"share.notify.download-all-preparing": "The share is being prepared. Please try again in a few minutes.",
|
||||
"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": "Previews are not supported for this type of files. Please download the file to view it.",
|
||||
"share.modal.file-preview.error.not-supported.description": "这种类型的文件不支持预览。请下载文件查看。",
|
||||
// END /share/[id]
|
||||
// /share/[id]/edit
|
||||
"share.edit.title": "编辑 {shareId}",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "保存共享的过程中发生了错误",
|
||||
"share.edit.notify.save-success": "共享已更新成功",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "版权信息",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "隐私政策",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "配置文件已存在",
|
||||
"admin.config.config-file-warning.description": "由于您已配置了Pingvin 共享的配置文件,您无法通过UI更改配置。",
|
||||
"admin.config.title": "配置管理",
|
||||
"admin.config.category.general": "通用",
|
||||
"admin.config.category.share": "共享",
|
||||
@@ -304,56 +315,56 @@ export default {
|
||||
"admin.config.general.app-url": "App 的地址",
|
||||
"admin.config.general.app-url.description": "Pingvin Share 的 URL 地址",
|
||||
"admin.config.general.secure-cookies": "Secure cookies",
|
||||
"admin.config.general.secure-cookies.description": "Whether to set the secure flag on cookies. If enabled, the site will not function when accessed over HTTP.",
|
||||
"admin.config.general.secure-cookies.description": "是否为 cookie 设置安全标志。如果启用,当通过 HTTP 访问时站点将无法运行。",
|
||||
"admin.config.general.show-home-page": "显示首页",
|
||||
"admin.config.general.show-home-page.description": "是否显示首页",
|
||||
"admin.config.general.session-duration": "会话时长",
|
||||
"admin.config.general.session-duration.description": "用户必须重新登录的时间 (默认:3 个月)",
|
||||
"admin.config.general.session-duration.description": "用户必须重新登录的时间 (默认:3 个月)。",
|
||||
"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": "Enable email recipient sharing",
|
||||
"admin.config.email.enable-share-email-recipients.description": "Whether to allow email sharing with recipients. Only enable this if SMTP is activated.",
|
||||
"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": "Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {creatorEmail} - The email 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 These variables will be replaced with the actual value.",
|
||||
"admin.config.email.share-recipients-message.description": "发给接收者的共享邮件通知的具体内容。可选的变量有:\n {creator} - 该共享的创建者\n {creatorEmail} - 共享创建者的电子邮箱\n {shareUrl} - 该共享的链接\n {desc} - 该共享的描述\n {expires} - 该共享的过期时间\n 这些变量会被实际的值所替代。",
|
||||
"admin.config.email.reverse-share-subject": "预留共享邮件通知主题",
|
||||
"admin.config.email.reverse-share-subject.description": "Subject of the sent email when someone created a share with your reverse share link.",
|
||||
"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": "Subject of the sent email when a user requests a password reset.",
|
||||
"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": "Subject of the sent email when an admin invites a user.",
|
||||
"admin.config.email.invite-subject.description": "当管理员邀请用户时,发送的邀请邮件通知主题",
|
||||
"admin.config.email.invite-message": "邀请邮件通知内容",
|
||||
"admin.config.email.invite-message.description": "Message which gets sent when an admin invites a user. {url} will be replaced with the invite URL, {email} with the email and {password} with the users password.",
|
||||
"admin.config.email.invite-message.description": "管理员邀请用户时发送的消息。{url} 将被替换为邀请链接,{email} 将被替换为电子邮件,{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.share-id-length": "Default share ID length",
|
||||
"admin.config.share.share-id-length.description": "Default length for the generated ID of a share. This value is also used to generate links for reverse shares. A value below 8 is not considered secure.",
|
||||
"admin.config.share.share-id-length": "默认共享ID长度",
|
||||
"admin.config.share.share-id-length.description": "生成的共享 ID 的默认长度。该值也用于生成预留共享的链接。低于 8 的值不安全。",
|
||||
"admin.config.share.max-size": "最大文件上限",
|
||||
"admin.config.share.max-size.description": "最大文件上限,单位 bytes (1GB=1024MB=1048576KB=1073741824bytes)",
|
||||
"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 make uploads faster for stable connections.",
|
||||
"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": "Enable",
|
||||
"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": "发送邮箱",
|
||||
"admin.config.smtp.email.description": "Email address from wich the emails get sent",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "用户名",
|
||||
"admin.config.smtp.username.description": "SMTP 主机用户名",
|
||||
"admin.config.smtp.password": "密码",
|
||||
@@ -390,7 +401,7 @@ export default {
|
||||
"admin.config.oauth.discord-enabled": "Discord",
|
||||
"admin.config.oauth.discord-enabled.description": "是否启用 Discord 账号登录",
|
||||
"admin.config.oauth.discord-limited-users": "Discord limited users",
|
||||
"admin.config.oauth.discord-limited-users.description": "Limit signing in to specific users by their Discord ID. Leave it blank to disable.",
|
||||
"admin.config.oauth.discord-limited-users.description": "使用Discord ID限制登录到特定的用户。留空以禁用。",
|
||||
"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",
|
||||
@@ -401,44 +412,70 @@ export default {
|
||||
"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-sign-out": "Sign out from OpenID Connect",
|
||||
"admin.config.oauth.oidc-sign-out.description": "Whether the “Sign out” button will sign out from the OpenID Connect provider",
|
||||
"admin.config.oauth.oidc-sign-out": "从 OpenID Connect 注销",
|
||||
"admin.config.oauth.oidc-sign-out.description": "“注销”按钮是否会退出OpenID连接提供商",
|
||||
"admin.config.oauth.oidc-scope": "OpenID Connect scope",
|
||||
"admin.config.oauth.oidc-scope.description": "Scopes which should be requested from the OpenID Connect provider.",
|
||||
"admin.config.oauth.oidc-scope.description": "从 OpenID Connect 提供商请求的范围。",
|
||||
"admin.config.oauth.oidc-username-claim": "OpenID Connect 用户名请求",
|
||||
"admin.config.oauth.oidc-username-claim.description": "OpenID Connect ID token 中的用户名请求。如果您不知道这项配置是什么,请留空。",
|
||||
"admin.config.oauth.oidc-role-path": "Path to roles in OpenID Connect token",
|
||||
"admin.config.oauth.oidc-role-path.description": "Must be a valid JMES path referencing an array of roles. " + "Managing access rights using OpenID Connect roles is only recommended if no other identity provider is configured and password login is disabled. " + "Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-role-general-access": "OpenID Connect role for general access",
|
||||
"admin.config.oauth.oidc-role-general-access.description": "Role required for general access. Must be present in a user’s roles for them to log in. " + "Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-role-admin-access": "OpenID Connect role for admin access",
|
||||
"admin.config.oauth.oidc-role-admin-access.description": "Role required for administrative access. Must be present in a user’s roles for them to access the admin panel. " + "Leave it blank if you don't know what this config is.",
|
||||
"admin.config.oauth.oidc-role-path": "在 OpenID Connect 令牌中的角色路径",
|
||||
"admin.config.oauth.oidc-role-path.description": "Must be a valid JMES path referencing an array of roles. " + "只有在没有配置其他身份提供商且密码登录被禁用的情况下,才建议使用 OpenID Connect 角色来管理访问权限。 " + "如果您不知道此配置是什么,请留空。",
|
||||
"admin.config.oauth.oidc-role-general-access": "常规访问的 OpenID Connect 角色",
|
||||
"admin.config.oauth.oidc-role-general-access.description": "一般访问所需的角色。必须在用户角色中显示才能登录。 " + "如果您不知道此配置是什么,请留空。",
|
||||
"admin.config.oauth.oidc-role-admin-access": "管理员访问的 OpenID Connect 角色",
|
||||
"admin.config.oauth.oidc-role-admin-access.description": "管理权限所需的角色。必须在用户角色中显示他们才能访问管理面板。 " + "如果您不知道此配置是什么,请留空。",
|
||||
"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",
|
||||
"admin.config.category.ldap": "LDAP",
|
||||
"admin.config.ldap.enabled": "Enable LDAP",
|
||||
"admin.config.ldap.enabled": "启用 LDAP",
|
||||
"admin.config.ldap.enabled.description": "使用 LDAP 身份认证进行用户登录",
|
||||
"admin.config.ldap.url": "Server URL",
|
||||
"admin.config.ldap.url": "服务器 URL",
|
||||
"admin.config.ldap.url.description": "LDAP 服务器的 URL",
|
||||
"admin.config.ldap.bind-dn": "Bind DN",
|
||||
"admin.config.ldap.bind-dn.description": "Default user used to perform the user search",
|
||||
"admin.config.ldap.bind-password": "Bind password",
|
||||
"admin.config.ldap.bind-password.description": "Password used to perform the user search",
|
||||
"admin.config.ldap.bind-dn.description": "用于执行用户搜索的默认用户",
|
||||
"admin.config.ldap.bind-password": "绑定密码",
|
||||
"admin.config.ldap.bind-password.description": "用于执行用户搜索的密码",
|
||||
"admin.config.ldap.search-base": "User base",
|
||||
"admin.config.ldap.search-base.description": "Base location, where the user search will be performed",
|
||||
"admin.config.ldap.search-query": "User query",
|
||||
"admin.config.ldap.search-base.description": "进行用户搜索的基本位置",
|
||||
"admin.config.ldap.search-query": "用户查询",
|
||||
"admin.config.ldap.search-query.description": "将用于在 'User base'中搜索 LDAP 用户。%username% 可以作为用户输入的占位符。",
|
||||
"admin.config.ldap.admin-groups": "Admin group",
|
||||
"admin.config.ldap.admin-groups": "管理员群组",
|
||||
"admin.config.ldap.admin-groups.description": "Group required for administrative access.",
|
||||
"admin.config.ldap.field-name-member-of": "User groups attribute name",
|
||||
"admin.config.ldap.field-name-member-of.description": "LDAP attribute name for the groups, an user is a member of. This is used when checking for the admin group.",
|
||||
"admin.config.ldap.field-name-email": "User email attribute name",
|
||||
"admin.config.ldap.field-name-email.description": "LDAP attribute name for the email of an user.",
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.notify.logo-success": "Logo 更新成功。可能需要几分钟时间才能在网站上更新。",
|
||||
"admin.config.notify.no-changes": "没有要保存的更改。",
|
||||
"admin.config.category.s3": "对象存储",
|
||||
"admin.config.s3.enabled": "启用",
|
||||
"admin.config.s3.enabled.description": "是否使用 S3 来存储共享文件而不是本地文件系统。",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket名称",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "路径",
|
||||
"admin.config.s3.bucket-path.description": "用于在 S3 桶中存储文件的默认路径。",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "允许您访问 S3 桶的密钥。",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "允许您访问 S3 桶的密钥。",
|
||||
"admin.config.category.legal": "合规",
|
||||
"admin.config.legal.enabled": "启用合规提醒",
|
||||
"admin.config.legal.enabled.description": "是否在页脚中显示版权信息和隐私政策。",
|
||||
"admin.config.legal.imprint-text": "版权信息",
|
||||
"admin.config.legal.imprint-text.description": "文本将会显示在版权信息中。支持Markdown。留空以链接到版权信息页面。",
|
||||
"admin.config.legal.imprint-url": "版权信息 URL",
|
||||
"admin.config.legal.imprint-url.description": "如果您已经有一个版权信息页面,您可以在此链接它,而不是使用文本字段。",
|
||||
"admin.config.legal.privacy-policy-text": "隐私政策文本",
|
||||
"admin.config.legal.privacy-policy-text.description": "文本将会显示在隐私政策页面中。支持Markdown。留空以链接到隐私政策页面。",
|
||||
"admin.config.legal.privacy-policy-url": "隐私政策网址",
|
||||
"admin.config.legal.privacy-policy-url.description": "如果您已经有一个隐私政策页面,您可以在此链接它,而不是使用文本字段。",
|
||||
// 404
|
||||
"404.description": "当前的页面走丢啦",
|
||||
"404.button.home": "返回主页",
|
||||
@@ -453,10 +490,10 @@ export default {
|
||||
"error.msg.no_user": "用户关联的这个 {0} 账户不存在。",
|
||||
"error.msg.no_email": "无法从 {0} 这个账户获取邮箱地址。",
|
||||
"error.msg.already_linked": "{0} 这个账户已经关联到另一个账号。",
|
||||
"error.msg.not_linked": "This {0} account hasn't been linked to any account yet.",
|
||||
"error.msg.not_linked": "这个 {0} 账户尚未关联到任何账号。",
|
||||
"error.msg.unverified_account": "{0} 这个账户尚未验证,请在验证后重试。",
|
||||
"error.msg.user_not_allowed": "您无权登录。",
|
||||
"error.msg.cannot_get_user_info": "Cannot get your user info from this {0} account.",
|
||||
"error.msg.cannot_get_user_info": "无法从 {0} 这个账户获取您的用户信息。",
|
||||
"error.param.provider_github": "GitHub",
|
||||
"error.param.provider_google": "谷歌",
|
||||
"error.param.provider_microsoft": "Microsoft",
|
||||
@@ -474,9 +511,9 @@ export default {
|
||||
"common.button.generate": "生成",
|
||||
"common.button.done": "完成",
|
||||
"common.text.link": "链接",
|
||||
"common.text.navigate-to-link": "Visit link",
|
||||
"common.text.navigate-to-link": "访问链接",
|
||||
"common.text.or": "或",
|
||||
"common.text.redirecting": "Redirecting...",
|
||||
"common.text.redirecting": "正在跳转中...",
|
||||
"common.button.go-back": "返回",
|
||||
"common.button.go-home": "返回主页",
|
||||
"common.notify.copied": "已复制到剪贴板",
|
||||
@@ -487,7 +524,7 @@ export default {
|
||||
"common.error.invalid-email": "邮件地址不可用",
|
||||
"common.error.too-short": "必须不少于 {length} 个字符",
|
||||
"common.error.too-long": "必须不超过 {length} 个字符",
|
||||
"common.error.number-too-small": "Must be at least {min}",
|
||||
"common.error.number-too-small": "必须至多为 {min}",
|
||||
"common.error.number-too-large": "必须至多为 {max}",
|
||||
"common.error.exact-length": "必须为 {length} 个字符",
|
||||
"common.error.invalid-number": "必须为数字",
|
||||
|
||||
@@ -124,6 +124,9 @@ export default {
|
||||
"account.shares.table.expiresAt": "失效於",
|
||||
"account.shares.table.createdAt": "創建於",
|
||||
"account.shares.table.size": "檔案大小",
|
||||
"account.shares.table.password-protected": "Password protected",
|
||||
"account.shares.table.visitor-count": "{count} of {max}",
|
||||
"account.shares.table.expiry-never": "Never",
|
||||
"account.shares.modal.share-informations": "分享資訊",
|
||||
"account.shares.modal.share-link": "分享連結",
|
||||
"account.shares.modal.delete.title": "刪除: {share}",
|
||||
@@ -275,7 +278,7 @@ export default {
|
||||
"share.error.access-denied.title": "私人分享",
|
||||
"share.error.access-denied.description": "您沒有權限存取此檔案",
|
||||
"share.modal.password.title": "需要密碼",
|
||||
"share.modal.password.description": "請輸入密碼來存取此檔案",
|
||||
"share.modal.password.description": "Please enter the password to access this share.",
|
||||
"share.modal.password": "密碼",
|
||||
"share.modal.error.invalid-password": "密碼錯誤",
|
||||
"share.button.download-all": "全部下載",
|
||||
@@ -292,7 +295,15 @@ export default {
|
||||
"share.edit.notify.generic-error": "保存分享的過程中發生了錯誤",
|
||||
"share.edit.notify.save-success": "分享已更新成功",
|
||||
// END /share/[id]/edit
|
||||
// /imprint
|
||||
"imprint.title": "Imprint",
|
||||
// END /imprint
|
||||
// /privacy
|
||||
"privacy.title": "Privacy Policy",
|
||||
// END /privacy
|
||||
// /admin/config
|
||||
"admin.config.config-file-warning.title": "Configuration file present",
|
||||
"admin.config.config-file-warning.description": "As you have a configured Pingvin Share with a configuration file, you can't change the configuration through the UI.",
|
||||
"admin.config.title": "配置管理",
|
||||
"admin.config.category.general": "通用",
|
||||
"admin.config.category.share": "分享",
|
||||
@@ -308,7 +319,7 @@ export default {
|
||||
"admin.config.general.show-home-page": "顯示首頁",
|
||||
"admin.config.general.show-home-page.description": "是否顯示首頁",
|
||||
"admin.config.general.session-duration": "工作階段持續時間",
|
||||
"admin.config.general.session-duration.description": "使用者需要必須要重新登入的最長時間 (預設: 3 個月)",
|
||||
"admin.config.general.session-duration.description": "Time after which a user must log in again (default: 3 months).",
|
||||
"admin.config.general.logo": "Logo",
|
||||
"admin.config.general.logo.description": "上傳個性化 Logo,圖片必須是長寬比 1:1 的 PNG 格式",
|
||||
"admin.config.general.logo.placeholder": "選擇圖片",
|
||||
@@ -335,15 +346,15 @@ export default {
|
||||
"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": "Maximum share expiration. Set to 0 to allow unlimited expiration.",
|
||||
"admin.config.share.share-id-length": "預設分享ID長度",
|
||||
"admin.config.share.share-id-length.description": "預設的自動生成分享ID長度。這個設定同時用於生成檔案請求連結。小於 8 被認為是不安全的。",
|
||||
"admin.config.share.max-size": "最大檔案上限",
|
||||
"admin.config.share.max-size.description": "最大檔案上限,單位 bytes (1GB=1024MB=1048576KB=1073741824bytes)",
|
||||
"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": "調整分塊大小 (單位:Byte) 以平衡上傳的效率與可靠度。更小的分塊大小在不穩定的網路環境中可以提升成功率,更大的分塊大小可以在穩定的網路環境中提高上傳速度。",
|
||||
"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": "啟用",
|
||||
@@ -353,7 +364,7 @@ export default {
|
||||
"admin.config.smtp.port": "通訊埠",
|
||||
"admin.config.smtp.port.description": "SMTP 通訊埠",
|
||||
"admin.config.smtp.email": "發送郵箱",
|
||||
"admin.config.smtp.email.description": "發送的郵箱地址",
|
||||
"admin.config.smtp.email.description": "Email address from which the emails get sent",
|
||||
"admin.config.smtp.username": "使用者名稱",
|
||||
"admin.config.smtp.username.description": "SMTP 主機使用者名稱",
|
||||
"admin.config.smtp.password": "密碼",
|
||||
@@ -439,6 +450,32 @@ export default {
|
||||
"admin.config.notify.success": "Configuration updated successfully.",
|
||||
"admin.config.notify.logo-success": "Logo updated successfully. It may take a few minutes to update on the website.",
|
||||
"admin.config.notify.no-changes": "No changes to save.",
|
||||
"admin.config.category.s3": "S3",
|
||||
"admin.config.s3.enabled": "Enabled",
|
||||
"admin.config.s3.enabled.description": "Whether S3 should be used to store the shared files instead of the local file system.",
|
||||
"admin.config.s3.endpoint": "Endpoint",
|
||||
"admin.config.s3.endpoint.description": "The URL of the S3 bucket.",
|
||||
"admin.config.s3.region": "Region",
|
||||
"admin.config.s3.region.description": "The region of the S3 bucket.",
|
||||
"admin.config.s3.bucket-name": "Bucket name",
|
||||
"admin.config.s3.bucket-name.description": "The name of the S3 bucket.",
|
||||
"admin.config.s3.bucket-path": "Path",
|
||||
"admin.config.s3.bucket-path.description": "The default path which should be used to store the files in the S3 bucket.",
|
||||
"admin.config.s3.key": "Key",
|
||||
"admin.config.s3.key.description": "The key which allows you to access the S3 bucket.",
|
||||
"admin.config.s3.secret": "Secret",
|
||||
"admin.config.s3.secret.description": "The secret which allows you to access the S3 bucket.",
|
||||
"admin.config.category.legal": "Legal",
|
||||
"admin.config.legal.enabled": "Enable legal notices",
|
||||
"admin.config.legal.enabled.description": "Whether to show a link to imprint and privacy policy in the footer.",
|
||||
"admin.config.legal.imprint-text": "Imprint text",
|
||||
"admin.config.legal.imprint-text.description": "The text which should be shown in the imprint. Supports Markdown. Leave blank to link to an external imprint page.",
|
||||
"admin.config.legal.imprint-url": "Imprint URL",
|
||||
"admin.config.legal.imprint-url.description": "If you already have an imprint page you can link it here instead of using the text field.",
|
||||
"admin.config.legal.privacy-policy-text": "Privacy policy text",
|
||||
"admin.config.legal.privacy-policy-text.description": "The text which should be shown in the privacy policy. Supports Markdown. Leave blank to link to an external privacy policy page.",
|
||||
"admin.config.legal.privacy-policy-url": "Privacy policy URL",
|
||||
"admin.config.legal.privacy-policy-url.description": "If you already have a privacy policy page you can link it here instead of using the text field.",
|
||||
// 404
|
||||
"404.description": "查無此頁",
|
||||
"404.button.home": "返回主頁",
|
||||
|
||||
@@ -14,7 +14,14 @@ export const config = {
|
||||
export async function middleware(request: NextRequest) {
|
||||
const routes = {
|
||||
unauthenticated: new Routes(["/auth/*", "/"]),
|
||||
public: new Routes(["/share/*", "/s/*", "/upload/*", "/error"]),
|
||||
public: new Routes([
|
||||
"/share/*",
|
||||
"/s/*",
|
||||
"/upload/*",
|
||||
"/error",
|
||||
"/imprint",
|
||||
"/privacy",
|
||||
]),
|
||||
admin: new Routes(["/admin/*"]),
|
||||
account: new Routes(["/account*"]),
|
||||
disabled: new Routes([]),
|
||||
@@ -55,6 +62,20 @@ export async function middleware(request: NextRequest) {
|
||||
routes.disabled.routes.push("/auth/resetPassword*");
|
||||
}
|
||||
|
||||
if (!getConfig("legal.enabled")) {
|
||||
routes.disabled.routes.push("/imprint", "/privacy");
|
||||
} else {
|
||||
if (!getConfig("legal.imprintText") && !getConfig("legal.imprintUrl")) {
|
||||
routes.disabled.routes.push("/imprint");
|
||||
}
|
||||
if (
|
||||
!getConfig("legal.privacyPolicyText") &&
|
||||
!getConfig("legal.privacyPolicyUrl")
|
||||
) {
|
||||
routes.disabled.routes.push("/privacy");
|
||||
}
|
||||
}
|
||||
|
||||
// prettier-ignore
|
||||
const rules = [
|
||||
// Disabled routes
|
||||
@@ -86,6 +107,16 @@ export async function middleware(request: NextRequest) {
|
||||
condition: (!getConfig("general.showHomePage") || user) && route == "/",
|
||||
path: "/upload",
|
||||
},
|
||||
// Imprint redirect
|
||||
{
|
||||
condition: route == "/imprint" && !getConfig("legal.imprintText") && getConfig("legal.imprintUrl"),
|
||||
path: getConfig("legal.imprintUrl"),
|
||||
},
|
||||
// Privacy redirect
|
||||
{
|
||||
condition: route == "/privacy" && !getConfig("legal.privacyPolicyText") && getConfig("legal.privacyPolicyUrl"),
|
||||
path: getConfig("legal.privacyPolicyUrl"),
|
||||
},
|
||||
];
|
||||
for (const rule of rules) {
|
||||
if (rule.condition) {
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
ColorSchemeProvider,
|
||||
Container,
|
||||
MantineProvider,
|
||||
Stack,
|
||||
} from "@mantine/core";
|
||||
import { useColorScheme } from "@mantine/hooks";
|
||||
import { ModalsProvider } from "@mantine/modals";
|
||||
@@ -30,6 +31,7 @@ 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 Footer from "../components/footer/Footer";
|
||||
|
||||
const excludeDefaultLayoutRoutes = ["/admin/config/[category]"];
|
||||
|
||||
@@ -134,10 +136,18 @@ function App({ Component, pageProps }: AppProps) {
|
||||
<Component {...pageProps} />
|
||||
) : (
|
||||
<>
|
||||
<Header />
|
||||
<Container>
|
||||
<Component {...pageProps} />
|
||||
</Container>
|
||||
<Stack
|
||||
justify="space-between"
|
||||
sx={{ minHeight: "100vh" }}
|
||||
>
|
||||
<div>
|
||||
<Header />
|
||||
<Container>
|
||||
<Component {...pageProps} />
|
||||
</Container>
|
||||
</div>
|
||||
<Footer />
|
||||
</Stack>
|
||||
</>
|
||||
)}
|
||||
</UserContext.Provider>
|
||||
|
||||
@@ -413,7 +413,7 @@ const Account = () => {
|
||||
onConfirm: async () => {
|
||||
await userService
|
||||
.removeCurrentUser()
|
||||
.then(window.location.reload)
|
||||
.then(() => window.location.reload())
|
||||
.catch(toast.axiosError);
|
||||
},
|
||||
})
|
||||
|
||||
@@ -15,7 +15,7 @@ import { useModals } from "@mantine/modals";
|
||||
import moment from "moment";
|
||||
import Link from "next/link";
|
||||
import { useEffect, useState } from "react";
|
||||
import { TbEdit, TbInfoCircle, TbLink, TbTrash } from "react-icons/tb";
|
||||
import { TbEdit, TbInfoCircle, TbLink, TbLock, TbTrash } from "react-icons/tb";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import Meta from "../../components/Meta";
|
||||
import showShareInformationsModal from "../../components/account/showShareInformationsModal";
|
||||
@@ -85,13 +85,37 @@ const MyShares = () => {
|
||||
<tbody>
|
||||
{shares.map((share) => (
|
||||
<tr key={share.id}>
|
||||
<td>{share.id}</td>
|
||||
<td>{share.name}</td>
|
||||
<td>{share.views}</td>
|
||||
<td>
|
||||
{moment(share.expiration).unix() === 0
|
||||
? "Never"
|
||||
: moment(share.expiration).format("LLL")}
|
||||
<Group spacing="xs">
|
||||
{share.id}{" "}
|
||||
{share.security.passwordProtected && (
|
||||
<TbLock
|
||||
color="orange"
|
||||
title={t("account.shares.table.password-protected")}
|
||||
/>
|
||||
)}
|
||||
</Group>
|
||||
</td>
|
||||
<td>{share.name}</td>
|
||||
<td>
|
||||
{share.security.maxViews ? (
|
||||
<FormattedMessage
|
||||
id="account.shares.table.visitor-count"
|
||||
values={{
|
||||
count: share.views,
|
||||
max: share.security.maxViews,
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
share.views
|
||||
)}
|
||||
</td>
|
||||
<td>
|
||||
{moment(share.expiration).unix() === 0 ? (
|
||||
<FormattedMessage id="account.shares.table.expiry-never" />
|
||||
) : (
|
||||
moment(share.expiration).format("LLL")
|
||||
)}
|
||||
</td>
|
||||
<td>
|
||||
<Group position="right">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import {
|
||||
Alert,
|
||||
AppShell,
|
||||
Box,
|
||||
Button,
|
||||
@@ -13,6 +14,7 @@ import { useMediaQuery } from "@mantine/hooks";
|
||||
|
||||
import { useRouter } from "next/router";
|
||||
import { useEffect, useState } from "react";
|
||||
import { TbInfoCircle } from "react-icons/tb";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import Meta from "../../../components/Meta";
|
||||
import AdminConfigInput from "../../../components/admin/configuration/AdminConfigInput";
|
||||
@@ -46,6 +48,10 @@ export default function AppShellDemo() {
|
||||
|
||||
const [logo, setLogo] = useState<File | null>(null);
|
||||
|
||||
const isEditingAllowed = (): boolean => {
|
||||
return !configVariables || configVariables[0].allowEdit;
|
||||
};
|
||||
|
||||
const saveConfigVariables = async () => {
|
||||
if (logo) {
|
||||
configService
|
||||
@@ -132,6 +138,17 @@ export default function AppShellDemo() {
|
||||
) : (
|
||||
<>
|
||||
<Stack>
|
||||
{!isEditingAllowed() && (
|
||||
<Alert
|
||||
mb={"lg"}
|
||||
variant="light"
|
||||
color="primary"
|
||||
title={t("admin.config.config-file-warning.title")}
|
||||
icon={<TbInfoCircle />}
|
||||
>
|
||||
<FormattedMessage id="admin.config.config-file-warning.description" />
|
||||
</Alert>
|
||||
)}
|
||||
<Title mb="md" order={3}>
|
||||
{t("admin.config.category." + categoryId)}
|
||||
</Title>
|
||||
|
||||
@@ -54,19 +54,22 @@ const Admin = () => {
|
||||
]);
|
||||
|
||||
useEffect(() => {
|
||||
configService.isNewReleaseAvailable().then((isNewReleaseAvailable) => {
|
||||
if (isNewReleaseAvailable) {
|
||||
setManagementOptions([
|
||||
...managementOptions,
|
||||
{
|
||||
title: "Update",
|
||||
icon: TbRefresh,
|
||||
route:
|
||||
"https://github.com/stonith404/pingvin-share/releases/latest",
|
||||
},
|
||||
]);
|
||||
}
|
||||
});
|
||||
configService
|
||||
.isNewReleaseAvailable()
|
||||
.then((isNewReleaseAvailable) => {
|
||||
if (isNewReleaseAvailable) {
|
||||
setManagementOptions([
|
||||
...managementOptions,
|
||||
{
|
||||
title: "Update",
|
||||
icon: TbRefresh,
|
||||
route:
|
||||
"https://github.com/stonith404/pingvin-share/releases/latest",
|
||||
},
|
||||
]);
|
||||
}
|
||||
})
|
||||
.catch();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
|
||||
55
frontend/src/pages/imprint/index.tsx
Normal file
55
frontend/src/pages/imprint/index.tsx
Normal file
@@ -0,0 +1,55 @@
|
||||
import { Anchor, Title, useMantineTheme } from "@mantine/core";
|
||||
import Meta from "../../components/Meta";
|
||||
import useTranslate from "../../hooks/useTranslate.hook";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import useConfig from "../../hooks/config.hook";
|
||||
import Markdown from "markdown-to-jsx";
|
||||
|
||||
const Imprint = () => {
|
||||
const t = useTranslate();
|
||||
const { colorScheme } = useMantineTheme();
|
||||
const config = useConfig();
|
||||
return (
|
||||
<>
|
||||
<Meta title={t("imprint.title")} />
|
||||
<Title mb={30} order={1}>
|
||||
<FormattedMessage id="imprint.title" />
|
||||
</Title>
|
||||
<Markdown
|
||||
options={{
|
||||
forceBlock: true,
|
||||
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",
|
||||
},
|
||||
},
|
||||
a: {
|
||||
props: {
|
||||
target: "_blank",
|
||||
rel: "noreferrer",
|
||||
},
|
||||
component: Anchor,
|
||||
},
|
||||
},
|
||||
}}
|
||||
>
|
||||
{config.get("legal.imprintText")}
|
||||
</Markdown>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default Imprint;
|
||||
55
frontend/src/pages/privacy/index.tsx
Normal file
55
frontend/src/pages/privacy/index.tsx
Normal file
@@ -0,0 +1,55 @@
|
||||
import { Anchor, Title, useMantineTheme } from "@mantine/core";
|
||||
import Meta from "../../components/Meta";
|
||||
import useTranslate from "../../hooks/useTranslate.hook";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import useConfig from "../../hooks/config.hook";
|
||||
import Markdown from "markdown-to-jsx";
|
||||
|
||||
const PrivacyPolicy = () => {
|
||||
const t = useTranslate();
|
||||
const { colorScheme } = useMantineTheme();
|
||||
const config = useConfig();
|
||||
return (
|
||||
<>
|
||||
<Meta title={t("privacy.title")} />
|
||||
<Title mb={30} order={1}>
|
||||
<FormattedMessage id="privacy.title" />
|
||||
</Title>
|
||||
<Markdown
|
||||
options={{
|
||||
forceBlock: true,
|
||||
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",
|
||||
},
|
||||
},
|
||||
a: {
|
||||
props: {
|
||||
target: "_blank",
|
||||
rel: "noreferrer",
|
||||
},
|
||||
component: Anchor,
|
||||
},
|
||||
},
|
||||
}}
|
||||
>
|
||||
{config.get("legal.privacyPolicyText")}
|
||||
</Markdown>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default PrivacyPolicy;
|
||||
@@ -18,6 +18,7 @@ import shareService from "../../services/share.service";
|
||||
import { FileUpload } from "../../types/File.type";
|
||||
import { CreateShare, Share } from "../../types/share.type";
|
||||
import toast from "../../utils/toast.util";
|
||||
import { useRouter } from "next/router";
|
||||
|
||||
const promiseLimit = pLimit(3);
|
||||
let errorToastShown = false;
|
||||
@@ -33,6 +34,7 @@ const Upload = ({
|
||||
simplified: boolean;
|
||||
}) => {
|
||||
const modals = useModals();
|
||||
const router = useRouter();
|
||||
const t = useTranslate();
|
||||
|
||||
const { user } = useUser();
|
||||
@@ -54,7 +56,8 @@ const Upload = ({
|
||||
setisUploading(true);
|
||||
|
||||
try {
|
||||
createdShare = await shareService.create(share);
|
||||
const isReverseShare = router.pathname != "/upload";
|
||||
createdShare = await shareService.create(share, isReverseShare);
|
||||
} catch (e) {
|
||||
toast.axiosError(e);
|
||||
setisUploading(false);
|
||||
@@ -139,7 +142,7 @@ const Upload = ({
|
||||
"share.allowUnauthenticatedShares",
|
||||
),
|
||||
enableEmailRecepients: config.get("email.enableShareEmailRecipients"),
|
||||
maxExpirationInHours: config.get("share.maxExpiration"),
|
||||
maxExpiration: config.get("share.maxExpiration"),
|
||||
shareIdLength: config.get("share.shareIdLength"),
|
||||
simplified,
|
||||
},
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import axios from "axios";
|
||||
import Config, { AdminConfig, UpdateConfig } from "../types/config.type";
|
||||
import api from "./api.service";
|
||||
import { stringToTimespan } from "../utils/date.util";
|
||||
|
||||
const list = async (): Promise<Config[]> => {
|
||||
return (await api.get("/configs")).data;
|
||||
@@ -25,10 +26,12 @@ const get = (key: string, configVariables: Config[]): any => {
|
||||
|
||||
const value = configVariable.value ?? configVariable.defaultValue;
|
||||
|
||||
if (configVariable.type == "number") return parseInt(value);
|
||||
if (configVariable.type == "number" || configVariable.type == "filesize")
|
||||
return parseInt(value);
|
||||
if (configVariable.type == "boolean") return value == "true";
|
||||
if (configVariable.type == "string" || configVariable.type == "text")
|
||||
return value;
|
||||
if (configVariable.type == "timespan") return stringToTimespan(value);
|
||||
};
|
||||
|
||||
const finishSetup = async (): Promise<AdminConfig[]> => {
|
||||
|
||||
@@ -15,7 +15,10 @@ const list = async (): Promise<MyShare[]> => {
|
||||
return (await api.get(`shares/all`)).data;
|
||||
};
|
||||
|
||||
const create = async (share: CreateShare) => {
|
||||
const create = async (share: CreateShare, isReverseShare = false) => {
|
||||
if (!isReverseShare) {
|
||||
deleteCookie("reverse_share_token");
|
||||
}
|
||||
return (await api.post("shares", share)).data;
|
||||
};
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ export type AdminConfig = Config & {
|
||||
secret: boolean;
|
||||
description: string;
|
||||
obscured: boolean;
|
||||
allowEdit: boolean;
|
||||
};
|
||||
|
||||
export type AdminConfigGroupedByCategory = {
|
||||
|
||||
@@ -34,9 +34,10 @@ export type ShareMetaData = {
|
||||
isZipReady: boolean;
|
||||
};
|
||||
|
||||
export type MyShare = Share & {
|
||||
export type MyShare = Omit<Share, "hasPassword"> & {
|
||||
views: number;
|
||||
createdAt: Date;
|
||||
security: MyShareSecurity;
|
||||
};
|
||||
|
||||
export type MyReverseShare = {
|
||||
@@ -52,3 +53,8 @@ export type ShareSecurity = {
|
||||
maxViews?: number;
|
||||
password?: string;
|
||||
};
|
||||
|
||||
export type MyShareSecurity = {
|
||||
passwordProtected: boolean;
|
||||
maxViews: number;
|
||||
};
|
||||
|
||||
8
frontend/src/types/timespan.type.ts
Normal file
8
frontend/src/types/timespan.type.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
export type TimeUnit =
|
||||
| "minutes"
|
||||
| "hours"
|
||||
| "days"
|
||||
| "weeks"
|
||||
| "months"
|
||||
| "years";
|
||||
export type Timespan = { value: number; unit: TimeUnit };
|
||||
@@ -1,4 +1,5 @@
|
||||
import moment from "moment";
|
||||
import { Timespan } from "../types/timespan.type";
|
||||
|
||||
export const getExpirationPreview = (
|
||||
messages: {
|
||||
@@ -30,3 +31,14 @@ export const getExpirationPreview = (
|
||||
moment(expirationDate).format("LLL"),
|
||||
);
|
||||
};
|
||||
|
||||
export const timespanToString = (timespan: Timespan) => {
|
||||
return `${timespan.value} ${timespan.unit}`;
|
||||
};
|
||||
|
||||
export const stringToTimespan = (value: string): Timespan => {
|
||||
return {
|
||||
value: parseInt(value.split(" ")[0]),
|
||||
unit: value.split(" ")[1],
|
||||
} as Timespan;
|
||||
};
|
||||
|
||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "pingvin-share",
|
||||
"version": "1.7.0",
|
||||
"version": "1.10.3",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "pingvin-share",
|
||||
"version": "1.7.0",
|
||||
"version": "1.10.3",
|
||||
"devDependencies": {
|
||||
"conventional-changelog-cli": "^3.0.0"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pingvin-share",
|
||||
"version": "1.7.0",
|
||||
"version": "1.10.3",
|
||||
"scripts": {
|
||||
"format": "cd frontend && npm run format && cd ../backend && npm run format",
|
||||
"lint": "cd frontend && npm run lint && cd ../backend && npm run lint",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
:3000 {
|
||||
# Reverse proxy for /api
|
||||
reverse_proxy /api/* http://localhost:{$BACKEND_PORT:8080}
|
||||
# Reverse proxy for /api
|
||||
reverse_proxy /api/* http://localhost:{$BACKEND_PORT:8080}
|
||||
|
||||
# Reverse proxy for all other requests
|
||||
reverse_proxy http://localhost:{$PORT:3333}
|
||||
# Reverse proxy for all other requests
|
||||
reverse_proxy http://localhost:{$PORT:3333}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
:3000 {
|
||||
reverse_proxy /* http://localhost:{$PORT:3333} {
|
||||
trusted_proxies 0.0.0.0/0
|
||||
}
|
||||
# Reverse proxy for /api
|
||||
reverse_proxy /api/* http://localhost:{$BACKEND_PORT:8080} {
|
||||
trusted_proxies 0.0.0.0/0
|
||||
}
|
||||
|
||||
reverse_proxy /api/* http://localhost:{$BACKEND_PORT:8080} {
|
||||
trusted_proxies 0.0.0.0/0
|
||||
}
|
||||
|
||||
log {
|
||||
output file /var/log/caddy/access.log
|
||||
level WARN
|
||||
}
|
||||
}
|
||||
# Reverse proxy for all other requests
|
||||
reverse_proxy /* http://localhost:{$PORT:3333} {
|
||||
trusted_proxies 0.0.0.0/0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ fi
|
||||
# Change ownership of the data directory
|
||||
mkdir -p /opt/app/backend/data
|
||||
find /opt/app/backend/data \( ! -group "${PGID}" -o ! -user "${PUID}" \) -exec chown "${PUID}:${PGID}" {} +
|
||||
# Change ownership of the frontend public directory
|
||||
find /opt/app/frontend/public \( ! -group "${PGID}" -o ! -user "${PUID}" \) -exec chown "${PUID}:${PGID}" {} +
|
||||
|
||||
# Switch to the non-root user
|
||||
exec su-exec "$PUID:$PGID" "$@"
|
||||
@@ -5,9 +5,9 @@ cp -rn /tmp/img/* /opt/app/frontend/public/img
|
||||
|
||||
# Start Caddy
|
||||
if [ "$TRUST_PROXY" = "true" ]; then
|
||||
caddy start --adapter caddyfile --config /etc/caddy/Caddyfile.trust-proxy &
|
||||
caddy start --adapter caddyfile --config /opt/app/reverse-proxy/Caddyfile.trust-proxy &
|
||||
else
|
||||
caddy start --adapter caddyfile --config /etc/caddy/Caddyfile &
|
||||
caddy start --adapter caddyfile --config /opt/app/reverse-proxy/Caddyfile &
|
||||
fi
|
||||
|
||||
# Run the frontend server
|
||||
|
||||
66
scripts/generate-example-config.ts
Normal file
66
scripts/generate-example-config.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import * as fs from "fs";
|
||||
import * as yaml from "yaml";
|
||||
import { configVariables } from "../backend/prisma/seed/config.seed";
|
||||
import translations from "../frontend/src/i18n/translations/en-US";
|
||||
|
||||
// Prepare an object that only contains the categories, keys and values
|
||||
const configVariablesWithDefaultValues = {};
|
||||
for (const [category, variables] of Object.entries(configVariables)) {
|
||||
if (category == "internal") continue;
|
||||
for (const [variableName, { defaultValue }] of Object.entries(variables)) {
|
||||
if (!configVariablesWithDefaultValues[category]) {
|
||||
configVariablesWithDefaultValues[category] = {};
|
||||
}
|
||||
configVariablesWithDefaultValues[category][variableName] = defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
// As `initUser` is not part of the `configVariables` object, we add it manually
|
||||
configVariablesWithDefaultValues["initUser"] = {
|
||||
enabled: false,
|
||||
username: "admin",
|
||||
email: "admin@example.com",
|
||||
password: "my-secure-password",
|
||||
isAdmin: true,
|
||||
ldapDN: "",
|
||||
};
|
||||
|
||||
// Create the yaml document
|
||||
const doc: any = new yaml.Document(configVariablesWithDefaultValues);
|
||||
|
||||
// Add the descriptions imported from `en-US.ts` as comments
|
||||
for (const category of doc.contents.items) {
|
||||
// As `initUser` can't be configured from the UI, we have to add the description manually
|
||||
if (category.key.value === "initUser") {
|
||||
category.key.commentBefore =
|
||||
"This configuration is used to create the initial user when the application is started for the first time.\n";
|
||||
category.key.commentBefore +=
|
||||
"Make sure to change at least the password as soon as you log in!";
|
||||
}
|
||||
|
||||
for (const variable of category.value.items) {
|
||||
variable.key.commentBefore = getDescription(
|
||||
category.key.value,
|
||||
variable.key.value
|
||||
);
|
||||
}
|
||||
}
|
||||
doc.commentBefore =
|
||||
"This configuration is pre-filled with the default values.\n";
|
||||
doc.commentBefore +=
|
||||
"You can remove keys you don't want to set. If a key is missing, the value set in the UI will be used; if that is also unset, the default value applies.";
|
||||
|
||||
// Write the YAML content to a file
|
||||
fs.writeFileSync("../config.example.yaml", doc.toString({ indent: 2 }), "utf8");
|
||||
console.log("YAML file generated successfully!");
|
||||
|
||||
// Helper functions
|
||||
function getDescription(category: string, name: string) {
|
||||
return translations[
|
||||
`admin.config.${category}.${camelToKebab(name)}.description`
|
||||
];
|
||||
}
|
||||
|
||||
function camelToKebab(str: string) {
|
||||
return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
|
||||
}
|
||||
229
scripts/package-lock.json
generated
Normal file
229
scripts/package-lock.json
generated
Normal file
@@ -0,0 +1,229 @@
|
||||
{
|
||||
"name": "scripts",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "scripts",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"yaml": "^2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.13.5",
|
||||
"ts-node": "^10.9.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@cspotcode/source-map-support": {
|
||||
"version": "0.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
|
||||
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "0.3.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
|
||||
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
|
||||
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.0.3",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@tsconfig/node10": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
|
||||
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@tsconfig/node12": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
|
||||
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@tsconfig/node14": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
|
||||
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@tsconfig/node16": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
|
||||
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "22.13.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz",
|
||||
"integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~6.20.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.14.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
|
||||
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn-walk": {
|
||||
"version": "8.3.4",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
|
||||
"integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"acorn": "^8.11.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/arg": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
|
||||
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/create-require": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
||||
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/diff": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
|
||||
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/make-error": {
|
||||
"version": "1.3.6",
|
||||
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
|
||||
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/ts-node": {
|
||||
"version": "10.9.2",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
|
||||
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@cspotcode/source-map-support": "^0.8.0",
|
||||
"@tsconfig/node10": "^1.0.7",
|
||||
"@tsconfig/node12": "^1.0.7",
|
||||
"@tsconfig/node14": "^1.0.0",
|
||||
"@tsconfig/node16": "^1.0.2",
|
||||
"acorn": "^8.4.1",
|
||||
"acorn-walk": "^8.1.1",
|
||||
"arg": "^4.1.0",
|
||||
"create-require": "^1.1.0",
|
||||
"diff": "^4.0.1",
|
||||
"make-error": "^1.1.1",
|
||||
"v8-compile-cache-lib": "^3.0.1",
|
||||
"yn": "3.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"ts-node": "dist/bin.js",
|
||||
"ts-node-cwd": "dist/bin-cwd.js",
|
||||
"ts-node-esm": "dist/bin-esm.js",
|
||||
"ts-node-script": "dist/bin-script.js",
|
||||
"ts-node-transpile-only": "dist/bin-transpile.js",
|
||||
"ts-script": "dist/bin-script-deprecated.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@swc/core": ">=1.2.50",
|
||||
"@swc/wasm": ">=1.2.50",
|
||||
"@types/node": "*",
|
||||
"typescript": ">=2.7"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@swc/core": {
|
||||
"optional": true
|
||||
},
|
||||
"@swc/wasm": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.7.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
|
||||
"integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.20.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
|
||||
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/v8-compile-cache-lib": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
||||
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
|
||||
"integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
|
||||
"bin": {
|
||||
"yaml": "bin.mjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/yn": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
15
scripts/package.json
Normal file
15
scripts/package.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "scripts",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"generate-example-config": "ts-node generate-example-config.ts"
|
||||
},
|
||||
"description": "",
|
||||
"dependencies": {
|
||||
"yaml": "^2.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.13.5",
|
||||
"ts-node": "^10.9.2"
|
||||
}
|
||||
}
|
||||
8
scripts/tsconfig.json
Normal file
8
scripts/tsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"esModuleInterop": true,
|
||||
"moduleResolution": "node"
|
||||
},
|
||||
"include": ["/**/*.ts", "generate-example-config.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
Reference in New Issue
Block a user