mirror of
https://github.com/schlagmichdoch/PairDrop.git
synced 2026-04-06 18:03:48 +00:00
Compare commits
61 Commits
v1.10.11
...
sw_digeste
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
50539ed485 | ||
|
|
490bad5734 | ||
|
|
1d5f2e8023 | ||
|
|
b261cb73ba | ||
|
|
db8d5f97ea | ||
|
|
3b31472c52 | ||
|
|
f7ea519106 | ||
|
|
76c47c9623 | ||
|
|
fa86212139 | ||
|
|
51299bcf73 | ||
|
|
5f6d330386 | ||
|
|
f103f37e16 | ||
|
|
4b99ff46da | ||
|
|
be381ea438 | ||
|
|
9b3571feac | ||
|
|
8a56a271bc | ||
|
|
07e46e472e | ||
|
|
3b772d0619 | ||
|
|
d70f9d762e | ||
|
|
8592499d22 | ||
|
|
e29ea44025 | ||
|
|
00f1a20177 | ||
|
|
3c8848d406 | ||
|
|
0d17ada58b | ||
|
|
74bd7dd406 | ||
|
|
f4a947527d | ||
|
|
90f10910aa | ||
|
|
aacf24c31f | ||
|
|
c0e5b66d41 | ||
|
|
42bd71a3dc | ||
|
|
a98499ea5a | ||
|
|
7c471910ef | ||
|
|
da558ddceb | ||
|
|
1df8fe258e | ||
|
|
65936a4d7d | ||
|
|
7c6062e1e0 | ||
|
|
902b5c6b8f | ||
|
|
19d33e11d8 | ||
|
|
d8908e01ea | ||
|
|
2d2cfec5f0 | ||
|
|
40a12b5501 | ||
|
|
5ee8bb871e | ||
|
|
ef3c338dad | ||
|
|
6d95f3f4e2 | ||
|
|
c33d49702e | ||
|
|
1d62a9ff49 | ||
|
|
3dd40e238a | ||
|
|
417d5421a6 | ||
|
|
7af51bbd5f | ||
|
|
88739107e4 | ||
|
|
6de97e7ff1 | ||
|
|
b61de4eb87 | ||
|
|
cfe5b4afda | ||
|
|
91fc2b7bf5 | ||
|
|
c670b39732 | ||
|
|
e5a09b6be1 | ||
|
|
1d81b744ea | ||
|
|
c37412cfd3 | ||
|
|
a5dc8b6da2 | ||
|
|
d81c03a560 | ||
|
|
f22abca783 |
@@ -1,13 +1,5 @@
|
||||
node_modules
|
||||
.github
|
||||
.git*
|
||||
.idea
|
||||
dev
|
||||
docs
|
||||
licenses
|
||||
node_modules
|
||||
pairdrop-cli
|
||||
*.md
|
||||
*.yml
|
||||
Dockerfile
|
||||
rtc_config_example.json
|
||||
turnserver_example.conf
|
||||
|
||||
*.md
|
||||
4
.github/ISSUE_TEMPLATE/bug-report.md
vendored
4
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@@ -36,7 +36,7 @@ If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Bug occurs on official PairDrop instance https://pairdrop.net/**
|
||||
No | Yes
|
||||
Version: v1.10.11
|
||||
Version: v1.10.9
|
||||
|
||||
**Bug occurs on self-hosted PairDrop instance**
|
||||
No | Yes
|
||||
@@ -44,7 +44,7 @@ No | Yes
|
||||
**Self-Hosted Setup**
|
||||
Proxy: Nginx | Apache2
|
||||
Deployment: docker run | docker compose | npm run start:prod
|
||||
Version: v1.10.11
|
||||
Version: v1.10.9
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
FROM alpine:latest
|
||||
FROM node:lts-alpine
|
||||
|
||||
WORKDIR /home/node/app
|
||||
|
||||
COPY package*.json ./
|
||||
|
||||
RUN apk add --no-cache nodejs npm
|
||||
RUN NODE_ENV="production" npm ci --omit=dev
|
||||
RUN npm ci
|
||||
|
||||
# Directories and files excluded via .dockerignore
|
||||
COPY . .
|
||||
|
||||
# environment settings
|
||||
|
||||
11
README.md
11
README.md
@@ -7,18 +7,13 @@
|
||||
|
||||
<p>
|
||||
Local file sharing <a href="https://pairdrop.net"><strong>in your web browser</strong></a>.
|
||||
<br>
|
||||
Inspired by Apple's AirDrop.
|
||||
<br>
|
||||
Fork of Snapdrop.
|
||||
<br>
|
||||
<br>
|
||||
<br />
|
||||
<br />
|
||||
<a href="https://github.com/schlagmichdoch/PairDrop/issues">Report a bug</a>
|
||||
<br />
|
||||
<a href="https://github.com/schlagmichdoch/PairDrop/issues">Request feature</a>
|
||||
</p>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
## Features
|
||||
File sharing on your local network that works on all platforms.
|
||||
@@ -37,7 +32,7 @@ Send a file from your phone to your laptop?
|
||||
<img src="docs/pairdrop_screenshot_mobile.gif" alt="Screenshot GIF showing PairDrop in use" style="width: 300px">
|
||||
|
||||
## Differences to the [Snapdrop](https://github.com/RobinLinus/snapdrop) it is based on
|
||||
<details><summary>View all differences</summary>
|
||||
<details><summary>List view</summary>
|
||||
|
||||
### Paired Devices and Public Rooms — Internet Transfer
|
||||
* Transfer files over the Internet between paired devices or by entering temporary public rooms.
|
||||
|
||||
@@ -19,8 +19,7 @@ server {
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
http2 on;
|
||||
listen 443 ssl http2;
|
||||
ssl_certificate /etc/ssl/certs/pairdrop-dev.crt;
|
||||
ssl_certificate_key /etc/ssl/certs/pairdrop-dev.key;
|
||||
|
||||
@@ -37,6 +36,6 @@ server {
|
||||
alias /etc/ssl/certs/pairdropCA.crt;
|
||||
}
|
||||
# To allow POST on static pages
|
||||
error_page 405 =200 $uri;
|
||||
error_page 405 =200 $uri;
|
||||
}
|
||||
|
||||
|
||||
@@ -188,7 +188,7 @@ to learn more about STUN, TURN and WebRTC.
|
||||
<br>
|
||||
|
||||
Yes. Your files are sent using WebRTC, encrypting them in transit.
|
||||
Still you have to trust the PairDrop server. To ensure the connection is secure and there is no [MITM](https://en.m.wikipedia.org/wiki/Man-in-the-middle_attack) there is a plan to make PairDrop
|
||||
Still you have to trust the PairDrop server. To ensure the connection is secure and there is no [MITM](https://wikiless.org/wiki/Man-in-the-middle_attack) there is a plan to make PairDrop
|
||||
zero trust by encrypting the signaling and implementing a verification process. See [issue #180](https://github.com/schlagmichdoch/PairDrop/issues/180) to keep updated.
|
||||
|
||||
<br>
|
||||
|
||||
@@ -556,6 +556,10 @@ a2enmod proxy
|
||||
a2enmod proxy_http
|
||||
```
|
||||
|
||||
```bash
|
||||
a2enmod proxy_wstunnel
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
Create a new configuration file under `/etc/apache2/sites-available` (on Debian)
|
||||
@@ -566,10 +570,18 @@ Create a new configuration file under `/etc/apache2/sites-available` (on Debian)
|
||||
|
||||
```apacheconf
|
||||
<VirtualHost *:80>
|
||||
ProxyPass / http://127.0.0.1:3000/ upgrade=websocket
|
||||
ProxyPass / http://127.0.0.1:3000/
|
||||
RewriteEngine on
|
||||
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
||||
RewriteCond %{HTTP:Connection} upgrade [NC]
|
||||
RewriteRule ^/?(.*) "ws://127.0.0.1:3000/$1" [P,L]
|
||||
</VirtualHost>
|
||||
<VirtualHost *:443>
|
||||
ProxyPass / https://127.0.0.1:3000/ upgrade=websocket
|
||||
ProxyPass / https://127.0.0.1:3000/
|
||||
RewriteEngine on
|
||||
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
||||
RewriteCond %{HTTP:Connection} upgrade [NC]
|
||||
RewriteRule ^/?(.*) "wws://127.0.0.1:3000/$1" [P,L]
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
@@ -577,10 +589,14 @@ Create a new configuration file under `/etc/apache2/sites-available` (on Debian)
|
||||
|
||||
```apacheconf
|
||||
<VirtualHost *:80>
|
||||
Redirect permanent / https://127.0.0.1:3000/
|
||||
Redirect permanent / https://127.0.0.1:3000/
|
||||
</VirtualHost>
|
||||
<VirtualHost *:443>
|
||||
ProxyPass / http://127.0.0.1:3000/ upgrade=websocket
|
||||
ProxyPass / https://127.0.0.1:3000/
|
||||
RewriteEngine on
|
||||
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
||||
RewriteCond %{HTTP:Connection} upgrade [NC]
|
||||
RewriteRule ^/?(.*) "wws://127.0.0.1:3000/$1" [P,L]
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
|
||||
@@ -45,11 +45,11 @@ This pairdrop-cli version was released alongside v1.10.4
|
||||
#### Linux / Mac
|
||||
1. Download the latest _pairdrop-cli.zip_ from the [releases page](https://github.com/schlagmichdoch/PairDrop/releases)
|
||||
```shell
|
||||
wget "https://github.com/schlagmichdoch/PairDrop/releases/download/v1.10.11/pairdrop-cli.zip"
|
||||
wget "https://github.com/schlagmichdoch/PairDrop/releases/download/v1.10.9/pairdrop-cli.zip"
|
||||
```
|
||||
or
|
||||
```shell
|
||||
curl -LO "https://github.com/schlagmichdoch/PairDrop/releases/download/v1.10.11/pairdrop-cli.zip"
|
||||
curl -LO "https://github.com/schlagmichdoch/PairDrop/releases/download/v1.10.9/pairdrop-cli.zip"
|
||||
```
|
||||
2. Unzip the archive to a folder of your choice e.g. `/usr/share/pairdrop-cli/`
|
||||
```shell
|
||||
|
||||
329
package-lock.json
generated
329
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "pairdrop",
|
||||
"version": "1.10.11",
|
||||
"version": "1.10.9",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "pairdrop",
|
||||
"version": "1.10.11",
|
||||
"version": "1.10.9",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^4.18.2",
|
||||
@@ -37,9 +37,9 @@
|
||||
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
|
||||
},
|
||||
"node_modules/body-parser": {
|
||||
"version": "1.20.3",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
|
||||
"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
|
||||
"version": "1.20.2",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
|
||||
"integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
|
||||
"dependencies": {
|
||||
"bytes": "3.1.2",
|
||||
"content-type": "~1.0.5",
|
||||
@@ -49,7 +49,7 @@
|
||||
"http-errors": "2.0.0",
|
||||
"iconv-lite": "0.4.24",
|
||||
"on-finished": "2.4.1",
|
||||
"qs": "6.13.0",
|
||||
"qs": "6.11.0",
|
||||
"raw-body": "2.5.2",
|
||||
"type-is": "~1.6.18",
|
||||
"unpipe": "1.0.0"
|
||||
@@ -67,25 +67,16 @@
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bind-apply-helpers": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
|
||||
"integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
|
||||
"node_modules/call-bind": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
|
||||
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
|
||||
"dependencies": {
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bound": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
|
||||
"integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.1",
|
||||
"get-intrinsic": "^1.2.6"
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"set-function-length": "^1.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
@@ -114,9 +105,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/cookie": {
|
||||
"version": "0.7.1",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
|
||||
"integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
|
||||
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
@@ -134,6 +125,22 @@
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/define-data-property": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
|
||||
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
|
||||
"dependencies": {
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/depd": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
||||
@@ -151,36 +158,26 @@
|
||||
"npm": "1.2.8000 || >= 1.4.16"
|
||||
}
|
||||
},
|
||||
"node_modules/dunder-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/ee-first": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||
},
|
||||
"node_modules/encodeurl": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
|
||||
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/es-define-property": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
|
||||
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
|
||||
"dependencies": {
|
||||
"get-intrinsic": "^1.2.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
@@ -193,17 +190,6 @@
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-object-atoms": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
||||
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/escape-html": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||
@@ -218,36 +204,36 @@
|
||||
}
|
||||
},
|
||||
"node_modules/express": {
|
||||
"version": "4.21.2",
|
||||
"resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
|
||||
"integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
|
||||
"version": "4.19.2",
|
||||
"resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
|
||||
"integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
|
||||
"dependencies": {
|
||||
"accepts": "~1.3.8",
|
||||
"array-flatten": "1.1.1",
|
||||
"body-parser": "1.20.3",
|
||||
"body-parser": "1.20.2",
|
||||
"content-disposition": "0.5.4",
|
||||
"content-type": "~1.0.4",
|
||||
"cookie": "0.7.1",
|
||||
"cookie": "0.6.0",
|
||||
"cookie-signature": "1.0.6",
|
||||
"debug": "2.6.9",
|
||||
"depd": "2.0.0",
|
||||
"encodeurl": "~2.0.0",
|
||||
"encodeurl": "~1.0.2",
|
||||
"escape-html": "~1.0.3",
|
||||
"etag": "~1.8.1",
|
||||
"finalhandler": "1.3.1",
|
||||
"finalhandler": "1.2.0",
|
||||
"fresh": "0.5.2",
|
||||
"http-errors": "2.0.0",
|
||||
"merge-descriptors": "1.0.3",
|
||||
"merge-descriptors": "1.0.1",
|
||||
"methods": "~1.1.2",
|
||||
"on-finished": "2.4.1",
|
||||
"parseurl": "~1.3.3",
|
||||
"path-to-regexp": "0.1.12",
|
||||
"path-to-regexp": "0.1.7",
|
||||
"proxy-addr": "~2.0.7",
|
||||
"qs": "6.13.0",
|
||||
"qs": "6.11.0",
|
||||
"range-parser": "~1.2.1",
|
||||
"safe-buffer": "5.2.1",
|
||||
"send": "0.19.0",
|
||||
"serve-static": "1.16.2",
|
||||
"send": "0.18.0",
|
||||
"serve-static": "1.15.0",
|
||||
"setprototypeof": "1.2.0",
|
||||
"statuses": "2.0.1",
|
||||
"type-is": "~1.6.18",
|
||||
@@ -256,10 +242,6 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.10.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/express"
|
||||
}
|
||||
},
|
||||
"node_modules/express-rate-limit": {
|
||||
@@ -277,12 +259,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/finalhandler": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
|
||||
"integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
|
||||
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
|
||||
"dependencies": {
|
||||
"debug": "2.6.9",
|
||||
"encodeurl": "~2.0.0",
|
||||
"encodeurl": "~1.0.2",
|
||||
"escape-html": "~1.0.3",
|
||||
"on-finished": "2.4.1",
|
||||
"parseurl": "~1.3.3",
|
||||
@@ -318,20 +300,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
|
||||
"integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
|
||||
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.1",
|
||||
"es-define-property": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"es-object-atoms": "^1.0.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-proto": "^1.0.0",
|
||||
"gopd": "^1.2.0",
|
||||
"has-symbols": "^1.1.0",
|
||||
"hasown": "^2.0.2",
|
||||
"math-intrinsics": "^1.1.0"
|
||||
"has-proto": "^1.0.1",
|
||||
"has-symbols": "^1.0.3",
|
||||
"hasown": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
@@ -340,22 +317,32 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-proto": {
|
||||
"node_modules/gopd": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
||||
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
|
||||
"dependencies": {
|
||||
"dunder-proto": "^1.0.1",
|
||||
"es-object-atoms": "^1.0.0"
|
||||
"get-intrinsic": "^1.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/gopd": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
||||
"node_modules/has-property-descriptors": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
|
||||
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
|
||||
"dependencies": {
|
||||
"es-define-property": "^1.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/has-proto": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
|
||||
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
@@ -364,9 +351,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/has-symbols": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
|
||||
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
@@ -424,14 +411,6 @@
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/math-intrinsics": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/media-typer": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||
@@ -441,12 +420,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/merge-descriptors": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
|
||||
"integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
|
||||
},
|
||||
"node_modules/methods": {
|
||||
"version": "1.1.2",
|
||||
@@ -500,9 +476,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/object-inspect": {
|
||||
"version": "1.13.4",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
|
||||
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
|
||||
"version": "1.13.2",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
|
||||
"integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
@@ -530,9 +506,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/path-to-regexp": {
|
||||
"version": "0.1.12",
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
|
||||
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
||||
},
|
||||
"node_modules/proxy-addr": {
|
||||
"version": "2.0.7",
|
||||
@@ -547,11 +523,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/qs": {
|
||||
"version": "6.13.0",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
|
||||
"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
|
||||
"version": "6.11.0",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
|
||||
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
|
||||
"dependencies": {
|
||||
"side-channel": "^1.0.6"
|
||||
"side-channel": "^1.0.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.6"
|
||||
@@ -607,9 +583,9 @@
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"node_modules/send": {
|
||||
"version": "0.19.0",
|
||||
"resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
|
||||
"integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
|
||||
"version": "0.18.0",
|
||||
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
|
||||
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
|
||||
"dependencies": {
|
||||
"debug": "2.6.9",
|
||||
"depd": "2.0.0",
|
||||
@@ -629,98 +605,55 @@
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/send/node_modules/encodeurl": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/send/node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
},
|
||||
"node_modules/serve-static": {
|
||||
"version": "1.16.2",
|
||||
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
|
||||
"integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
|
||||
"version": "1.15.0",
|
||||
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
|
||||
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
|
||||
"dependencies": {
|
||||
"encodeurl": "~2.0.0",
|
||||
"encodeurl": "~1.0.2",
|
||||
"escape-html": "~1.0.3",
|
||||
"parseurl": "~1.3.3",
|
||||
"send": "0.19.0"
|
||||
"send": "0.18.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/set-function-length": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
|
||||
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
|
||||
"dependencies": {
|
||||
"define-data-property": "^1.1.4",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"gopd": "^1.0.1",
|
||||
"has-property-descriptors": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/setprototypeof": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
||||
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
||||
},
|
||||
"node_modules/side-channel": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
|
||||
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
|
||||
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
|
||||
"dependencies": {
|
||||
"call-bind": "^1.0.7",
|
||||
"es-errors": "^1.3.0",
|
||||
"object-inspect": "^1.13.3",
|
||||
"side-channel-list": "^1.0.0",
|
||||
"side-channel-map": "^1.0.1",
|
||||
"side-channel-weakmap": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/side-channel-list": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
|
||||
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"object-inspect": "^1.13.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/side-channel-map": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
|
||||
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
|
||||
"dependencies": {
|
||||
"call-bound": "^1.0.2",
|
||||
"es-errors": "^1.3.0",
|
||||
"get-intrinsic": "^1.2.5",
|
||||
"object-inspect": "^1.13.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/side-channel-weakmap": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
|
||||
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
|
||||
"dependencies": {
|
||||
"call-bound": "^1.0.2",
|
||||
"es-errors": "^1.3.0",
|
||||
"get-intrinsic": "^1.2.5",
|
||||
"object-inspect": "^1.13.3",
|
||||
"side-channel-map": "^1.0.1"
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"object-inspect": "^1.13.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pairdrop",
|
||||
"version": "1.10.11-",
|
||||
"version": "1.10.9",
|
||||
"type": "module",
|
||||
"description": "",
|
||||
"main": "server/index.js",
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
<div class="column">
|
||||
<div class="known-as-wrapper">
|
||||
<span data-i18n-key="footer.known-as" data-i18n-attrs="text"></span>
|
||||
<div id="display-name" class="badge" data-i18n-key="footer.display-name" data-i18n-attrs="data-placeholder title" autocorrect="off" autocomplete="off" autocapitalize="none" spellcheck="false" contenteditable></div>
|
||||
<div id="display-name" class="badge" data-i18n-key="footer.display-name" data-i18n-attrs="data-placeholder title" placeholder="Loading..." autocorrect="off" autocomplete="off" autocapitalize="none" spellcheck="false" contenteditable></div>
|
||||
<svg class="icon edit-pen">
|
||||
<use xlink:href="#edit-pen-icon"></use>
|
||||
</svg>
|
||||
@@ -188,173 +188,118 @@
|
||||
<span data-i18n-key="dialogs.system-language" data-i18n-attrs="text"></span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="ar">
|
||||
<span lang="ar" dir="rtl">العربية</span>
|
||||
<span>العربية</span>
|
||||
<span> - </span>
|
||||
<span>(Arabic)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="be">
|
||||
<span lang="be">беларуская</span>
|
||||
<span>беларуская</span>
|
||||
<span> - </span>
|
||||
<span>(Belarusian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="nb">
|
||||
<span lang="nb">Bokmål</span>
|
||||
<span> - </span>
|
||||
<span>(Norwegian Bokmål)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="bg">
|
||||
<span lang="bg">български</span>
|
||||
<span> - </span>
|
||||
<span>(Bulgarian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="ca">
|
||||
<span lang="ca">Català</span>
|
||||
<span>Català</span>
|
||||
<span> - </span>
|
||||
<span>(Catalan)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="cs">
|
||||
<span lang="cs">Čeština</span>
|
||||
<span> - </span>
|
||||
<span>(Czech)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="da">
|
||||
<span lang="da">Dansk</span>
|
||||
<span>Dansk</span>
|
||||
<span> - </span>
|
||||
<span>(Danish)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="de">
|
||||
<span lang="de">Deutsch</span>
|
||||
<span>Deutsch</span>
|
||||
<span> - </span>
|
||||
<span>(German)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="en">
|
||||
<span lang="en">English</span>
|
||||
<span>English</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="es">
|
||||
<span lang="es">Español</span>
|
||||
<span>Español</span>
|
||||
<span> - </span>
|
||||
<span>(Spanish)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="et">
|
||||
<span lang="et">Eesti</span>
|
||||
<span> - </span>
|
||||
<span>(Estonian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="eu">
|
||||
<span lang="eu">Euskara</span>
|
||||
<span> - </span>
|
||||
<span>(Basque)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="fa">
|
||||
<span lang="fa" dir="rtl">فارسی</span>
|
||||
<span> - </span>
|
||||
<span>(Persian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="fr">
|
||||
<span lang="fr">Français</span>
|
||||
<span>Français</span>
|
||||
<span> - </span>
|
||||
<span>(French)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="id">
|
||||
<span lang="id">Bahasa Indonesia</span>
|
||||
<span>Bahasa Indonesia</span>
|
||||
<span> - </span>
|
||||
<span>(Indonesian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="it">
|
||||
<span lang="it">Italiano</span>
|
||||
<span>Italiano</span>
|
||||
<span> - </span>
|
||||
<span>(Italian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="he">
|
||||
<span lang="he" dir="rtl">עִבְרִית</span>
|
||||
<span>עִבְרִית</span>
|
||||
<span> - </span>
|
||||
<span>(Hebrew)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="kn">
|
||||
<span lang="kn">ಕನ್ನಡ</span>
|
||||
<span>ಕನ್ನಡ</span>
|
||||
<span> - </span>
|
||||
<span>(Kannada)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="hu">
|
||||
<span lang="hu">Magyar</span>
|
||||
<span>Magyar</span>
|
||||
<span> - </span>
|
||||
<span>(Hungarian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="nl">
|
||||
<span lang="nl">Nederlands</span>
|
||||
<span>Nederlands</span>
|
||||
<span> - </span>
|
||||
<span>(Dutch)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="nn">
|
||||
<span lang="nn">Norsk</span>
|
||||
<button class="btn fw wrap" value="nb">
|
||||
<span>Norsk</span>
|
||||
<span> - </span>
|
||||
<span>(Norwegian Nynorsk)</span>
|
||||
<span>(Norwegian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="pl">
|
||||
<span lang="pl">Polski</span>
|
||||
<span>Polski</span>
|
||||
<span> - </span>
|
||||
<span>(Polish)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="pt-BR">
|
||||
<span lang="pt-BR">Português do Brasil</span>
|
||||
<span>Português do Brasil</span>
|
||||
<span> - </span>
|
||||
<span>(Brazilian Portuguese)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="ro">
|
||||
<span lang="ro">Română</span>
|
||||
<span>Română</span>
|
||||
<span> - </span>
|
||||
<span>(Romanian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="ru">
|
||||
<span lang="ru">Русский язык</span>
|
||||
<span>Русский язык</span>
|
||||
<span> - </span>
|
||||
<span>(Russian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="sk">
|
||||
<span lang="sk">Slovenčina</span>
|
||||
<span> - </span>
|
||||
<span>(Slovak)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="ta">
|
||||
<span lang="ta">தமிழ்</span>
|
||||
<span> - </span>
|
||||
<span>(Tamil)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="tr">
|
||||
<span lang="tr">Türkçe</span>
|
||||
<span>Türkçe</span>
|
||||
<span> - </span>
|
||||
<span>(Turkish)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="uk">
|
||||
<span lang="uk">Українська</span>
|
||||
<span> - </span>
|
||||
<span>(Ukrainian)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="zh-CN">
|
||||
<span lang="zh-CN">汉语</span>
|
||||
<span>中文</span>
|
||||
<span> - </span>
|
||||
<span>(Simplified Chinese)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="zh-HK">
|
||||
<span lang="zh-HK">中文</span>
|
||||
<span> - </span>
|
||||
<span>(Hant Script)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="zh-TW">
|
||||
<span lang="zh-TW">漢語</span>
|
||||
<span>漢語</span>
|
||||
<span> - </span>
|
||||
<span>(Traditional Chinese)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="ja">
|
||||
<span lang="ja">日本語</span>
|
||||
<span>日本語</span>
|
||||
<span> - </span>
|
||||
<span>(Japanese)</span>
|
||||
</button>
|
||||
<button class="btn fw wrap" value="ko">
|
||||
<span lang="ko">한국어</span>
|
||||
<span> - </span>
|
||||
<span>(Korean)</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="center row-reverse btn-row wrap">
|
||||
<button class="btn btn-rounded btn-grey" type="button" data-i18n-key="dialogs.close" data-i18n-attrs="text" close></button>
|
||||
@@ -532,7 +477,7 @@
|
||||
<div class="center file-preview"></div>
|
||||
<div class="row-reverse center btn-row wrap">
|
||||
<button id="share-btn" class="btn btn-rounded btn-grey" data-i18n-key="dialogs.share" data-i18n-attrs="text" hidden></button>
|
||||
<button id="download-btn" class="btn btn-rounded btn-grey" data-i18n-key="dialogs.download" data-i18n-attrs="text" autofocus disabled></button>
|
||||
<button id="download-btn" class="btn btn-rounded btn-grey" data-i18n-key="dialogs.download" data-i18n-attrs="text" autofocus disabled hidden></button>
|
||||
<button class="btn btn-rounded btn-grey" data-i18n-key="dialogs.close" data-i18n-attrs="text" close></button>
|
||||
</div>
|
||||
</x-paper>
|
||||
@@ -667,7 +612,7 @@
|
||||
</svg>
|
||||
<div class="title-wrapper" dir="ltr">
|
||||
<h1>PairDrop</h1>
|
||||
<div class="font-subheading">v1.10.11</div>
|
||||
<div class="font-subheading">v1.10.9</div>
|
||||
</div>
|
||||
<div class="font-subheading" data-i18n-key="about.claim" data-i18n-attrs="text"></div>
|
||||
<div class="row">
|
||||
@@ -829,7 +774,7 @@
|
||||
<script src="scripts/ui-main.js" defer></script>
|
||||
<script src="scripts/main.js" defer></script>
|
||||
<!-- Sounds -->
|
||||
<audio id="blop" autobuffer="true">
|
||||
<audio id="blop" preload="metadata" disableremoteplayback="true" x-webkit-airplay="deny" muted>
|
||||
<source src="sounds/blop.mp3" type="audio/mpeg">
|
||||
<source src="sounds/blop.ogg" type="audio/ogg">
|
||||
</audio>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"notifications": {
|
||||
"request-title": "يرغب {{name}} في نقل {{count}} {{descriptor}}",
|
||||
"unfinished-transfers-warning": "هناك تحويلات غير مكتملة. هل أنت متأكد أنك تريد إغلاق PairDrop؟",
|
||||
"message-received": "تم استلام الرسالة بواسطة {{name}} - انقر للفتح",
|
||||
"message-received": "تم استلام الرابط بواسطة {{name}} - انقر للفتح",
|
||||
"rate-limit-join-key": "تم الوصول إلى الحد الأقصى. انتظر 10 ثوان وحاول مرة أخرى.",
|
||||
"connecting": "يتصل …",
|
||||
"pairing-key-invalidated": "المفتاح {{key}} خاطئ",
|
||||
@@ -48,14 +48,10 @@
|
||||
"pairing-cleared": "جميع الأجهزة غير مقترنة",
|
||||
"notifications-enabled": "تم تمكين الإشعارات",
|
||||
"online-requirement-pairing": "يجب أن تكون متصلاً بالإنترنت لإقران الأجهزة",
|
||||
"ios-memory-limit": "لا يمكن إرسال ملفات إلى iOS إلا بحجم يصل إلى 200 ميجابايت مرة واحدة",
|
||||
"online-requirement-public-room": "يجب أن تكون متصلاً بالإنترنت لإنشاء غرفة عامة",
|
||||
"copied-text-error": "فشلت الكتابة من الحافظة. انسخ يدويًا!",
|
||||
"download-successful": "تم تحميل {{descriptor}}",
|
||||
"click-to-show": "اضغط للعرض",
|
||||
"pair-url-copied-to-clipboard": "تم نسخ رابط اقتران هذا الجهاز إلى الحافظة",
|
||||
"room-url-copied-to-clipboard": "تم نسخ رابط هذه الغرفة العامة إلى الحافظة",
|
||||
"notifications-permissions-error": "لم يتم منح إذن الإشعارات حيث أن المستخدم أغلق نافذة السماح عدة مرات. يمكن إعادة تعيين هذا في معلومات الصفحة التي يمكن فتحها بالضغط على رمز القفل بجانب شريط عنوان صفحة الإنترنت."
|
||||
"click-to-show": "اضغط للعرض"
|
||||
},
|
||||
"header": {
|
||||
"cancel-share-mode": "تمّ",
|
||||
@@ -65,13 +61,12 @@
|
||||
"pair-device_title": "قم بإقران أجهزتك بشكل دائم",
|
||||
"join-public-room_title": "انضم إلى الغرفة العامة مؤقتًا",
|
||||
"notification_title": "تفعيل الإشعارات",
|
||||
"edit-paired-devices_title": "عدل الأجهزة المقترنة",
|
||||
"edit-paired-devices_title": "تعديل الأجهزة المقترنة",
|
||||
"language-selector_title": "إختر اللغة",
|
||||
"about_title": "حول PairDrop",
|
||||
"about_aria-label": "افتح حول PairDrop",
|
||||
"theme-light_title": "إستخدم دائماً المظهر الفاتح",
|
||||
"edit-share-mode": "عدل",
|
||||
"expand_title": "Expand header button row"
|
||||
"edit-share-mode": "ت٧ارف"
|
||||
},
|
||||
"instructions": {
|
||||
"x-instructions_mobile": "انقر لإرسال الملفات أو انقر لفترة طويلة لإرسال رسالة",
|
||||
@@ -85,11 +80,7 @@
|
||||
"no-peers-title": "افتح PairDrop على الأجهزة الأخرى لإرسال الملفات",
|
||||
"x-instructions_data-drop-bg": "حرر لتحديد المستلم",
|
||||
"no-peers_data-drop-bg": "حرر لتحديد المستلم",
|
||||
"x-instructions_data-drop-peer": "قم بالتحرير لإرسالها إلى القرين",
|
||||
"activate-share-mode-and-other-file": "وملف واحد آخر",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} ملفات مشاركة",
|
||||
"activate-share-mode-shared-file": "الملف المُشارك",
|
||||
"webrtc-requirement": "لتستعمل بيردروب هنا، يجب أن يكون WebRTC مفعلًا!"
|
||||
"x-instructions_data-drop-peer": "قم بالتحرير لإرسالها إلى القرين"
|
||||
},
|
||||
"peer-ui": {
|
||||
"processing": "مُعالجة …",
|
||||
@@ -101,7 +92,7 @@
|
||||
"transferring": "جارٍ النقل…"
|
||||
},
|
||||
"dialogs": {
|
||||
"base64-paste-to-send": "الصق هنا للمشاركة {{type}}",
|
||||
"base64-paste-to-send": "الصق هنا لإرسال {{type}}",
|
||||
"auto-accept-instructions-2": "لقبول جميع الملفات المرسلة من هذا الجهاز تلقائيًا.",
|
||||
"receive-text-title": "تلقيت رسالة",
|
||||
"edit-paired-devices-title": "تحرير الأجهزة المقترنة",
|
||||
@@ -112,12 +103,12 @@
|
||||
"title-file": "ملف",
|
||||
"base64-processing": "مُعالجة…",
|
||||
"decline": "رفض",
|
||||
"receive-title": "تم استلام {{descriptor}}",
|
||||
"receive-title": "تم الاستلام {{descriptor}}",
|
||||
"leave": "مُغادرة",
|
||||
"join": "انضمام",
|
||||
"title-image-plural": "صور",
|
||||
"send": "ارسال",
|
||||
"base64-tap-to-paste": "انقر هنا للمشاركة {{type}}",
|
||||
"base64-tap-to-paste": "انقر هنا للصق {{type}}",
|
||||
"base64-text": "نص",
|
||||
"copy": "نسخ",
|
||||
"file-other-description-image": "وصورة واحدة أخرى",
|
||||
@@ -131,7 +122,7 @@
|
||||
"title-image": "صورة",
|
||||
"file-other-description-file-plural": "و{{count}} ملفات أخرى",
|
||||
"would-like-to-share": "ترغب في المشاركة",
|
||||
"send-message-to": "أرسال رسالة إلى:",
|
||||
"send-message-to": "أرسال رسالة إلى",
|
||||
"language-selector-title": "إختر اللُغة",
|
||||
"pair": "إقتران",
|
||||
"hr-or": "او",
|
||||
@@ -147,19 +138,7 @@
|
||||
"send-message-title": "إرسال رسالة",
|
||||
"input-room-id-on-another-device": "أدخل معرف الغرفة هذا على جهاز آخر",
|
||||
"file-other-description-image-plural": "و{{count}} صور أخرى",
|
||||
"enter-room-id-from-another-device": "أدخل معرف الغرفة من جهاز آخر للانضمام إلى الغرفة.",
|
||||
"share-text-title": "شارك رسالة نصية",
|
||||
"paired-device-removed": "تمت إزالة الجهاز المقترن.",
|
||||
"message_title": "أدخل رسالة لإرسالها",
|
||||
"message_placeholder": "النص",
|
||||
"base64-title-files": "شارك ملفات",
|
||||
"base64-title-text": "شارك نصًا",
|
||||
"public-room-qr-code_title": "اضغط لنسخ رابط الغرفة العامة",
|
||||
"approve": "قبول",
|
||||
"share-text-subtitle": "عدل الرسالة قبل الإرسال:",
|
||||
"share-text-checkbox": "أظهر هذه الرسالة دائمًا عند مشاركة النصوص",
|
||||
"close-toast_title": "أغلق الإشعار",
|
||||
"pair-devices-qr-code_title": "اضغط لنسخ رابط اقتران هذا الجهاز"
|
||||
"enter-room-id-from-another-device": "أدخل معرف الغرفة من جهاز آخر للانضمام إلى الغرفة."
|
||||
},
|
||||
"about": {
|
||||
"claim": "أسهل طريقة لنقل الملفات عبر الأجهزة",
|
||||
@@ -167,11 +146,7 @@
|
||||
"close-about_aria-label": "إغلاق حول PairDrop",
|
||||
"buy-me-a-coffee_title": "اشتري لي القهوة!",
|
||||
"github_title": "PairDrop على جيت هاب",
|
||||
"faq_title": "أسئلة متكررة",
|
||||
"mastodon_title": "اكتب عن بيردروب على ماستادون",
|
||||
"bluesky_title": "تابعنا على بلوسكاي",
|
||||
"custom_title": "تابعنا",
|
||||
"privacypolicy_title": "افتح سياسة الخصوصية الخاصة بنا"
|
||||
"faq_title": "أسئلة متكررة"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-transfer-requested": "طلب نقل الملف",
|
||||
|
||||
@@ -1,184 +0,0 @@
|
||||
{
|
||||
"header": {
|
||||
"about_title": "Относно PairDrop",
|
||||
"language-selector_title": "Задай език",
|
||||
"about_aria-label": "Отвори Относно PairDrop",
|
||||
"theme-auto_title": "Адаптирай темата спрямо системните настройки",
|
||||
"theme-light_title": "Винаги използвай светла тема",
|
||||
"notification_title": "Включи известията",
|
||||
"pair-device_title": "Свържи устройствата си перманентно",
|
||||
"join-public-room_title": "Присъедини се към временна публична стая",
|
||||
"cancel-share-mode": "Отказ",
|
||||
"expand_title": "Покажи меню",
|
||||
"theme-dark_title": "Винаги използвай тъмна тема",
|
||||
"install_title": "Инсталирай PairDrop",
|
||||
"edit-paired-devices_title": "Промени свързаните устройства",
|
||||
"edit-share-mode": "Промени"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers_data-drop-bg": "Пусни, за да избереш получател",
|
||||
"no-peers-title": "Отвори PairDrop на друго устройство, за да започнеш споделяне",
|
||||
"no-peers-subtitle": "Свържи устройство или влез в публична стая, за да станеш откриваем за други мрежи",
|
||||
"x-instructions_desktop": "Ляв клик, за да изпратиш файл или десен клик, за да изпратиш съобщение",
|
||||
"x-instructions_data-drop-peer": "Пусни, за да изпратиш",
|
||||
"x-instructions-share-mode_desktop": "Натисни, за да изпратиш {{descriptor}}",
|
||||
"activate-share-mode-base": "Отвори PairDrop на друго устройство, за да изпратиш",
|
||||
"activate-share-mode-and-other-file": "и още 1 файл",
|
||||
"activate-share-mode-and-other-files-plural": "и още {{count}} файла",
|
||||
"activate-share-mode-shared-text": "споделен текст",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} споделени файлове",
|
||||
"x-instructions_data-drop-bg": "Пусни, за да избереш получател",
|
||||
"activate-share-mode-shared-file": "споделен файл",
|
||||
"x-instructions_mobile": "Докосни, за да изпратиш файл или задръж, за да изпратиш съобщение",
|
||||
"x-instructions-share-mode_mobile": "Докосни, за да изпратиш {{descriptor}}",
|
||||
"webrtc-requirement": "За да използвате инстанция на PairDrop, WebRTC трябва да бъде включен!"
|
||||
},
|
||||
"footer": {
|
||||
"known-as": "Известни сте като:",
|
||||
"display-name_data-placeholder": "Зареждане…",
|
||||
"display-name_title": "Редактирайте името на вашето устройство за постоянно",
|
||||
"discovery": "Може да бъдете открити:",
|
||||
"on-this-network": "В тази мрежа",
|
||||
"on-this-network_title": "Може да бъдете открити от всеки в тази мрежа.",
|
||||
"paired-devices": "От свързани устройства",
|
||||
"paired-devices_title": "Може да бъдете открити от свързани устройства по всяко време, независимо от мрежата.",
|
||||
"public-room-devices": "в стая {{roomId}}",
|
||||
"public-room-devices_title": "Може да бъдете открити от устройства в тази публична стая, независимо от мрежата.",
|
||||
"traffic": "Трафикът е",
|
||||
"routed": "пренасочен през сървъра",
|
||||
"webrtc": "ако WebRTC не е наличен."
|
||||
},
|
||||
"dialogs": {
|
||||
"pair-devices-title": "Свържете устройства за постоянно",
|
||||
"input-key-on-this-device": "Въведете този ключ на друго устройство",
|
||||
"scan-qr-code": "или сканирайте QR кода.",
|
||||
"enter-key-from-another-device": "Въведете тук ключ от друго устройство.",
|
||||
"input-room-id-on-another-device": "Въведете този ID за стая на друго устройство",
|
||||
"hr-or": "ИЛИ",
|
||||
"unpair": "Раздели",
|
||||
"paired-device-removed": "Свързаното устройство беше премахнато.",
|
||||
"paired-devices-wrapper_data-empty": "Няма свързани устройства.",
|
||||
"auto-accept-instructions-1": "Активно",
|
||||
"auto-accept": "автоматично приемане",
|
||||
"auto-accept-instructions-2": "за автоматично приемане на всички файлове, изпратени от това устройство.",
|
||||
"close": "Затвори",
|
||||
"join": "Присъедини се",
|
||||
"leave": "Напусни",
|
||||
"would-like-to-share": "иска да сподели",
|
||||
"has-sent": "изпрати:",
|
||||
"share": "Сподели",
|
||||
"download": "Изтегли",
|
||||
"send-message-title": "Изпрати съобщение",
|
||||
"send-message-to": "До:",
|
||||
"message_title": "Въведете съобщението за изпращане",
|
||||
"message_placeholder": "Текст",
|
||||
"send": "Изпрати",
|
||||
"receive-text-title": "Получено съобщение",
|
||||
"copy": "Копиране",
|
||||
"base64-title-files": "Споделяне на файлове",
|
||||
"base64-title-text": "Споделяне на текст",
|
||||
"base64-processing": "Обработва се…",
|
||||
"base64-tap-to-paste": "Натиснете тук за да споделите {{type}}",
|
||||
"base64-paste-to-send": "Поставете своя Клипборд тук за да споделите {{type}}",
|
||||
"file-other-description-image": "и още една снимка",
|
||||
"file-other-description-file": "и още един файл",
|
||||
"file-other-description-image-plural": "и още {{count}} снимки",
|
||||
"file-other-description-file-plural": "и още {{count}} файла",
|
||||
"title-image": "снимка",
|
||||
"title-image-plural": "Снимки",
|
||||
"title-file-plural": "Файлове",
|
||||
"receive-title": "{{descriptor}} Получено",
|
||||
"download-again": "Изтегли отново",
|
||||
"language-selector-title": "Изберете език",
|
||||
"pair-devices-qr-code_title": "Кликнете, за да копирате линка за свързване на това устройство",
|
||||
"approve": "одобри",
|
||||
"share-text-title": "Сподели текстово съобщение",
|
||||
"share-text-subtitle": "Редактирайте съобщението преди изпращане:",
|
||||
"share-text-checkbox": "Винаги показвай този прозорец при споделяне на текст",
|
||||
"accept": "Приеми",
|
||||
"temporary-public-room-title": "Временна публична стая",
|
||||
"enter-room-id-from-another-device": "Въведете ID на стая от друго устройство, за да се присъедините.",
|
||||
"pair": "Свържи",
|
||||
"cancel": "Отказ",
|
||||
"edit-paired-devices-title": "Редактиране на свързани устройства",
|
||||
"close-toast_title": "Затвори известието",
|
||||
"decline": "Откажи",
|
||||
"base64-text": "текст",
|
||||
"base64-files": "файлове",
|
||||
"title-file": "Файл",
|
||||
"system-language": "Език на системата",
|
||||
"public-room-qr-code_title": "Кликнете, за да копирате линка към публичната стая"
|
||||
},
|
||||
"about": {
|
||||
"close-about_aria-label": "Затвори информацията за PairDrop",
|
||||
"tweet_title": "Споделете PairDrop в X (Twitter)",
|
||||
"mastodon_title": "Напишете за PairDrop в Mastodon",
|
||||
"bluesky_title": "Последвайте ни в BlueSky",
|
||||
"custom_title": "Последвайте ни",
|
||||
"faq_title": "Често задавани въпроси",
|
||||
"claim": "Най-лесният начин за прехвърляне на файлове между устройства",
|
||||
"github_title": "PairDrop в GitHub",
|
||||
"buy-me-a-coffee_title": "Купете ми кафе!",
|
||||
"privacypolicy_title": "Отворете нашата политика за поверителност"
|
||||
},
|
||||
"notifications": {
|
||||
"display-name-changed-permanently": "Името се променя постоянно",
|
||||
"display-name-changed-temporarily": "Името се променя само за тази сесия",
|
||||
"display-name-random-again": "Името отново е генерирано на случаен принцип",
|
||||
"pairing-not-persistent": "Свързаните устройства не са постоянни",
|
||||
"public-room-left": "Напуснахте публичната стая {{publicRoomId}}",
|
||||
"copied-to-clipboard": "Копирано в клипборда",
|
||||
"pair-url-copied-to-clipboard": "Линкът за свързване на това устройство е копиран в клипборда",
|
||||
"room-url-copied-to-clipboard": "Линкът към публичната стая е копиран в клипборда",
|
||||
"copied-to-clipboard-error": "Копирането не е възможно. Копирайте ръчно.",
|
||||
"file-content-incorrect": "Съдържанието на файла е неправилно",
|
||||
"clipboard-content-incorrect": "Съдържанието на клипборда е неправилно",
|
||||
"link-received": "Линк, получен от {{name}} - Кликнете, за да отворите",
|
||||
"message-received": "Съобщение, получено от {{name}} - Кликнете, за да копирате",
|
||||
"click-to-download": "Кликнете, за да изтеглите",
|
||||
"request-title": "{{name}} иска да прехвърли {{count}} {{descriptor}}",
|
||||
"click-to-show": "Кликнете, за да покажете",
|
||||
"copied-text": "Текстът е копиран в клипборда",
|
||||
"copied-text-error": "Писането в клипборда не успя. Копирайте ръчно!",
|
||||
"offline": "Вие сте офлайн",
|
||||
"online": "Вие сте отново онлайн",
|
||||
"connected": "Свързан",
|
||||
"online-requirement-public-room": "Трябва да сте онлайн, за да създадете публична стая",
|
||||
"files-incorrect": "Файловете са неправилни",
|
||||
"unfinished-transfers-warning": "Има незавършени прехвърляния. Сигурни ли сте, че искате да затворите PairDrop?",
|
||||
"selected-peer-left": "Избраният партньор напусна",
|
||||
"pairing-tabs-error": "Свързването на два раздела в браузъра е невъзможно",
|
||||
"pairing-success": "Устройства свързани",
|
||||
"download-successful": "{{descriptor}} изтеглено",
|
||||
"public-room-id-invalid": "Невалиден ID на стая",
|
||||
"pairing-key-invalid": "Невалиден ключ",
|
||||
"pairing-cleared": "Всички устройства са разделени",
|
||||
"text-content-incorrect": "Текстовото съдържание е неправилно",
|
||||
"notifications-enabled": "Известията са активирани",
|
||||
"pairing-key-invalidated": "Ключът {{key}} е невалиден",
|
||||
"notifications-permissions-error": "Разрешението за известия е блокирано, тъй като потребителят няколко пъти е отхвърлил подкана за разрешение. Това може да се нулира в информацията за страницата, която се достъпва чрез иконата с катинар до лентата за URL адрес.",
|
||||
"online-requirement-pairing": "Трябва да сте онлайн, за да свържете устройства",
|
||||
"connecting": "Свързване…",
|
||||
"file-transfer-completed": "Прехвърлянето на файлове е завършено",
|
||||
"rate-limit-join-key": "Достигнат е лимитът за заявки. Изчакайте 10 секунди и опитайте отново.",
|
||||
"message-transfer-completed": "Прехвърлянето на съобщението е завършено",
|
||||
"ios-memory-limit": "Изпращането на файлове към iOS е възможно само до 200 MB наведнъж"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "Файлът е получен",
|
||||
"file-received-plural": "{{count}} файла получени",
|
||||
"file-transfer-requested": "Заявката за прехвърляне на файлове е изпратена",
|
||||
"image-transfer-requested": "Заявката за прехвърляне на изображения е изпратена",
|
||||
"message-received-plural": "{{count}} получени съобщения",
|
||||
"message-received": "Получено съобщение"
|
||||
},
|
||||
"peer-ui": {
|
||||
"click-to-send-share-mode": "Натисни, за да изпратиш {{descriptor}}",
|
||||
"preparing": "Подготовка…",
|
||||
"click-to-send": "Кликнете, за да изпратите файлове или кликнете с десен бутон, за да изпратите съобщение",
|
||||
"connection-hash": "За да потвърдите сигурността на криптирането на връзката, сравнете този номер за сигурност с двете устройства",
|
||||
"waiting": "Чакане…",
|
||||
"processing": "Обработка…",
|
||||
"transferring": "Прехвърляне…"
|
||||
}
|
||||
}
|
||||
@@ -145,7 +145,6 @@
|
||||
"pairing-cleared": "Tots els dispositius desvinculats",
|
||||
"notifications-enabled": "Notificacions habilitades",
|
||||
"online-requirement-pairing": "Has d'estar en línia per vincular dispositius",
|
||||
"ios-memory-limit": "Tan sols és possible enviar fitxers de fins a 200 MB a iOS",
|
||||
"online-requirement-public-room": "Cal que estiguis en línia per poder crear una sala pública",
|
||||
"room-url-copied-to-clipboard": "Enllaç a la sala pública copiat al porta-retalls",
|
||||
"copied-text-error": "L'escriptura al porta-retalls ha fallat. Copiar manualment!",
|
||||
|
||||
@@ -4,181 +4,6 @@
|
||||
"about_title": "O službě PairDrop",
|
||||
"language-selector_title": "Nastavit jazyk",
|
||||
"theme-auto_title": "Automatické přizpůsobení tématu systému",
|
||||
"pair-device_title": "Spárovat zařízení permanentně",
|
||||
"theme-light_title": "Vždy používat světlé téma",
|
||||
"theme-dark_title": "Vždy používat tmavé téma",
|
||||
"notification_title": "Povolit upozornění",
|
||||
"install_title": "Nainstalovat PairDrop",
|
||||
"edit-paired-devices_title": "Upravit spárovaná zařízení",
|
||||
"join-public-room_title": "Připojte se dočasně k veřejné místnosti",
|
||||
"cancel-share-mode": "Zrušit",
|
||||
"edit-share-mode": "Upravit",
|
||||
"expand_title": "Rozbalit řádek tlačítka záhlaví"
|
||||
},
|
||||
"about": {
|
||||
"buy-me-a-coffee_title": "Kupte mi kávu!",
|
||||
"close-about_aria-label": "Zavřít O PairDrop",
|
||||
"claim": "Nejjednodušší způsob přenosu souborů mezi zařízeními",
|
||||
"github_title": "PairDrop na GitHubu",
|
||||
"tweet_title": "Tweet o PairDrop",
|
||||
"mastodon_title": "Napište o PairDrop na Mastodon",
|
||||
"custom_title": "Sledujte nás",
|
||||
"privacypolicy_title": "Otevřete naše zásady ochrany osobních údajů",
|
||||
"bluesky_title": "Sledujte nás na BlueSky",
|
||||
"faq_title": "Často kladené otázky"
|
||||
},
|
||||
"footer": {
|
||||
"webrtc": "pokud WebRTC není k dispozici.",
|
||||
"known-as": "Jste známí jako:",
|
||||
"display-name_data-placeholder": "Načítání…",
|
||||
"display-name_title": "Trvale upravit název zařízení",
|
||||
"discovery": "Můžete být objeveni:",
|
||||
"on-this-network": "na této síti",
|
||||
"on-this-network_title": "V této síti vás může objevit každý.",
|
||||
"paired-devices": "pomocí spárovaných zařízení",
|
||||
"paired-devices_title": "Spárovaná zařízení vás mohou kdykoli objevit nezávisle na síti.",
|
||||
"public-room-devices": "v místnosti {{roomId}}",
|
||||
"public-room-devices_title": "Zařízení v této veřejné místnosti vás mohou objevit nezávisle na síti.",
|
||||
"traffic": "Provoz je",
|
||||
"routed": "směrován přes server"
|
||||
},
|
||||
"dialogs": {
|
||||
"auto-accept": "auto-accept",
|
||||
"pair-devices-title": "Spárujte zařízení trvale",
|
||||
"input-key-on-this-device": "Zadejte tento klíč na jiném zařízení",
|
||||
"scan-qr-code": "nebo naskenujte QR kód.",
|
||||
"enter-key-from-another-device": "Zde zadejte klíč z jiného zařízení.",
|
||||
"temporary-public-room-title": "Dočasná veřejná místnost",
|
||||
"input-room-id-on-another-device": "Zadejte toto ID místnosti na jiném zařízení",
|
||||
"enter-room-id-from-another-device": "Chcete-li se připojit k místnosti, zadejte ID místnosti z jiného zařízení.",
|
||||
"hr-or": "NEBO",
|
||||
"pair": "Párovat",
|
||||
"cancel": "Zrušit",
|
||||
"edit-paired-devices-title": "Upravit spárovaná zařízení",
|
||||
"unpair": "Zrušit spárování",
|
||||
"paired-device-removed": "Spárované zařízení bylo odstraněno.",
|
||||
"paired-devices-wrapper_data-empty": "Žádná spárovaná zařízení.",
|
||||
"auto-accept-instructions-1": "Aktivací",
|
||||
"auto-accept-instructions-2": "budete automaticky přijímat všechny soubory odeslané z tohoto zařízení.",
|
||||
"close": "Zavřít",
|
||||
"join": "Připojit",
|
||||
"leave": "Odejít",
|
||||
"accept": "Přijmout",
|
||||
"decline": "Odmítnout",
|
||||
"would-like-to-share": "by se rád podělil",
|
||||
"has-sent": "odeslal:",
|
||||
"share": "Sdílet",
|
||||
"download": "Stáhnout",
|
||||
"send-message-title": "Poslat zprávu",
|
||||
"send-message-to": "Komu:",
|
||||
"message_title": "Vložte zprávu k odeslání",
|
||||
"message_placeholder": "Text",
|
||||
"send": "Odeslat",
|
||||
"receive-text-title": "Zpráva přijata",
|
||||
"copy": "Kopírovat",
|
||||
"base64-title-files": "Sdílet soubory",
|
||||
"base64-title-text": "Sdílet text",
|
||||
"base64-processing": "Zpracovává se…",
|
||||
"base64-tap-to-paste": "Klepnutím sem sdílejte {{type}}",
|
||||
"base64-files": "soubory",
|
||||
"file-other-description-image": "a 1 další obrázek",
|
||||
"base64-paste-to-send": "Sem vložte schránku pro sdílení {{type}}",
|
||||
"base64-text": "text",
|
||||
"file-other-description-file": "a 1 další soubor",
|
||||
"file-other-description-image-plural": "a další obrázky ({{count}})",
|
||||
"file-other-description-file-plural": "a {{count}} dalších souborů",
|
||||
"title-image": "Obrázek",
|
||||
"title-file": "Soubor",
|
||||
"title-image-plural": "Obrázky",
|
||||
"title-file-plural": "Soubory",
|
||||
"receive-title": "{{descriptor}} Přijato",
|
||||
"download-again": "Stáhnout znovu",
|
||||
"language-selector-title": "Nastavit jazyk",
|
||||
"system-language": "Jazyk systému",
|
||||
"public-room-qr-code_title": "Kliknutím zkopírujete odkaz do veřejné místnosti",
|
||||
"pair-devices-qr-code_title": "Kliknutím zkopírujete odkaz pro spárování tohoto zařízení",
|
||||
"approve": "schválit",
|
||||
"share-text-title": "Sdílet textovou zprávu",
|
||||
"share-text-subtitle": "Upravit zprávu před odesláním:",
|
||||
"share-text-checkbox": "Při sdílení textu vždy zobrazit tento dialog",
|
||||
"close-toast_title": "Zavřít oznámení"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers_data-drop-bg": "Uvolněním vyberte příjemce",
|
||||
"no-peers-title": "Otevřete PairDrop na jiných zařízeních a posílejte soubory",
|
||||
"no-peers-subtitle": "Spárujte zařízení nebo vstupte do veřejné místnosti, abyste byli zjistitelní v jiných sítích",
|
||||
"x-instructions_desktop": "Kliknutím odešlete soubory nebo kliknutím pravým tlačítkem odešlete zprávu",
|
||||
"x-instructions_mobile": "Klepnutím odešlete soubory nebo dlouhým klepnutím odešlete zprávu",
|
||||
"x-instructions_data-drop-peer": "Uvolněním odešlete",
|
||||
"x-instructions_data-drop-bg": "Uvolněním vyberte příjemce",
|
||||
"x-instructions-share-mode_desktop": "Kliknutím odešlete {{descriptor}}",
|
||||
"x-instructions-share-mode_mobile": "Klepnutím odešlete {{descriptor}}",
|
||||
"activate-share-mode-base": "Pro odeslání otevřete PairDrop na jiných zařízeních",
|
||||
"activate-share-mode-and-other-file": "a 1 další soubor",
|
||||
"activate-share-mode-and-other-files-plural": "a {{count}} dalších souborů",
|
||||
"activate-share-mode-shared-text": "sdílený text",
|
||||
"activate-share-mode-shared-file": "sdílený soubor",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} sdílených souborů",
|
||||
"webrtc-requirement": "Chcete-li použít PairDrop, musí být povoleno WebRTC!"
|
||||
},
|
||||
"notifications": {
|
||||
"display-name-changed-permanently": "Zobrazované jméno je trvale změněno",
|
||||
"display-name-changed-temporarily": "Zobrazované jméno je změněno pouze pro tuto relaci",
|
||||
"display-name-random-again": "Zobrazované jméno je opět náhodně generováno",
|
||||
"download-successful": "{{descriptor}} staženo",
|
||||
"pairing-tabs-error": "Spárování dvou záložek webového prohlížeče není možné",
|
||||
"pairing-success": "Zařízení spárována",
|
||||
"pairing-not-persistent": "Spárovaná zařízení nejsou trvalá",
|
||||
"pairing-key-invalid": "Neplatný klíč",
|
||||
"pairing-key-invalidated": "Klíč {{key}} byl neplatný",
|
||||
"public-room-id-invalid": "Neplatné ID místnosti",
|
||||
"public-room-left": "Opuštěna veřejná místnost {{publicRoomId}}",
|
||||
"copied-to-clipboard": "Zkopírováno do schránky",
|
||||
"pair-url-copied-to-clipboard": "Odkaz pro spárování tohoto zařízení byl zkopírován do schránky",
|
||||
"room-url-copied-to-clipboard": "Odkaz do veřejné místnosti zkopírován do schránky",
|
||||
"pairing-cleared": "Všechna nespárovaná zařízení",
|
||||
"copied-to-clipboard-error": "Kopírování není možné. Kopírovat ručně.",
|
||||
"text-content-incorrect": "Textový obsah je nesprávný",
|
||||
"file-content-incorrect": "Obsah souboru je nesprávný",
|
||||
"clipboard-content-incorrect": "Obsah schránky je nesprávný",
|
||||
"notifications-enabled": "Oznámení povolena",
|
||||
"notifications-permissions-error": "Oprávnění k oznámení bylo zablokováno, protože uživatel několikrát odmítl výzvu k povolení. Toto lze resetovat v části Informace o stránce, ke které se dostanete kliknutím na ikonu zámku vedle řádku adresy URL.",
|
||||
"link-received": "Odkaz obdržel {{name}} – kliknutím otevřete",
|
||||
"message-received": "Zpráva přijatá uživatelem {{name}} – kliknutím zkopírujte",
|
||||
"click-to-download": "Kliknutím stáhnete",
|
||||
"request-title": "{{name}} chce přenést {{count}} {{descriptor}}",
|
||||
"copied-text": "Text byl zkopírován do schránky",
|
||||
"click-to-show": "Kliknutím zobrazíte",
|
||||
"copied-text-error": "Zápis do schránky se nezdařil. Zkopírujte ručně!",
|
||||
"offline": "Jste offline",
|
||||
"online": "Jste zpět online",
|
||||
"connected": "Připojeno",
|
||||
"online-requirement-public-room": "Chcete-li vytvořit veřejnou místnost, musíte být online",
|
||||
"online-requirement-pairing": "Chcete-li spárovat zařízení, musíte být online",
|
||||
"connecting": "Připojování…",
|
||||
"files-incorrect": "Soubory jsou nesprávné",
|
||||
"file-transfer-completed": "Přenos souborů byl dokončen",
|
||||
"message-transfer-completed": "Přenos zprávy byl dokončen",
|
||||
"ios-memory-limit": "Odesílání souborů do iOS je možné pouze do velikosti 200 MB najednou",
|
||||
"unfinished-transfers-warning": "Existují nedokončené přenosy Opravdu chcete zavřít PairDrop?",
|
||||
"rate-limit-join-key": "Bylo dosaženo limitu. Počkejte 10 sekund a zkuste to znovu.",
|
||||
"selected-peer-left": "Vybraný partner odešel"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "Soubor byl přijat",
|
||||
"file-received-plural": "Počet přijatých souborů: {{count}}",
|
||||
"file-transfer-requested": "Požadován přenos souboru",
|
||||
"message-received": "Zpráva přijata",
|
||||
"image-transfer-requested": "Požadován přenos obrázku",
|
||||
"message-received-plural": "Počet přijatých zpráv: {{count}}"
|
||||
},
|
||||
"peer-ui": {
|
||||
"click-to-send-share-mode": "Kliknutím odešlete {{descriptor}}",
|
||||
"click-to-send": "Kliknutím odešlete soubory nebo kliknutím pravým tlačítkem odešlete zprávu",
|
||||
"transferring": "Přenáší se…",
|
||||
"connection-hash": "Chcete-li ověřit bezpečnost šifrování typu end-to-end, porovnejte toto číslo zabezpečení na obou zařízeních",
|
||||
"preparing": "Připravuje se…",
|
||||
"waiting": "Čekání…",
|
||||
"processing": "Zpracovává se…"
|
||||
"pair-device_title": "Spárovat zařízení permanentně"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,7 +138,6 @@
|
||||
"message-transfer-completed": "Nachricht übertragen",
|
||||
"rate-limit-join-key": "Rate Limit erreicht. Warte 10 Sekunden und versuche es erneut.",
|
||||
"selected-peer-left": "Ausgewählter Peer ist gegangen",
|
||||
"ios-memory-limit": "Für Übertragungen an iOS Geräte beträgt die maximale Dateigröße 200 MB",
|
||||
"public-room-left": "Öffentlichen Raum {{publicRoomId}} verlassen",
|
||||
"copied-to-clipboard-error": "Konnte nicht kopieren. Kopiere manuell.",
|
||||
"public-room-id-invalid": "Ungültige Raum-ID",
|
||||
@@ -153,17 +152,17 @@
|
||||
"no-peers-title": "Öffne PairDrop auf anderen Geräten, um Dateien zu senden",
|
||||
"no-peers_data-drop-bg": "Hier ablegen, um Empfänger auszuwählen",
|
||||
"no-peers-subtitle": "Kopple Geräte oder betritt einen öffentlichen Raum, um in anderen Netzwerken sichtbar zu sein",
|
||||
"x-instructions-share-mode_desktop": "Klicke zum Senden {{descriptor}}",
|
||||
"x-instructions-share-mode_mobile": "Tippe zum Senden {{descriptor}}",
|
||||
"x-instructions-share-mode_desktop": "Klicke zum Senden von {{descriptor}}",
|
||||
"x-instructions-share-mode_mobile": "Tippe zum Senden von {{descriptor}}",
|
||||
"x-instructions_data-drop-peer": "Hier ablegen, um an Peer zu senden",
|
||||
"x-instructions_data-drop-bg": "Loslassen um Empfänger auszuwählen",
|
||||
"x-instructions_mobile": "Tippe, um Dateien zu senden oder tippe lange, um Nachrichten zu senden",
|
||||
"activate-share-mode-base": "Öffne PairDrop auf anderen Geräten zum Senden",
|
||||
"activate-share-mode-base": "Öffne PairDrop auf anderen Geräten zum Senden von",
|
||||
"activate-share-mode-and-other-files-plural": "und {{count}} anderen Dateien",
|
||||
"activate-share-mode-shared-text": "des geteilten Texts",
|
||||
"activate-share-mode-shared-text": "freigegebenem Text",
|
||||
"webrtc-requirement": "Um diese PairDrop Instanz zu verwenden muss WebRTC aktiviert sein!",
|
||||
"activate-share-mode-shared-files-plural": "der {{count}} geteilten Dateien",
|
||||
"activate-share-mode-shared-file": "der geteilten Datei",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} geteilte Dateien",
|
||||
"activate-share-mode-shared-file": "geteilte Datei",
|
||||
"activate-share-mode-and-other-file": "und 1 andere Datei"
|
||||
},
|
||||
"document-titles": {
|
||||
|
||||
@@ -158,11 +158,13 @@
|
||||
"connecting": "Connecting…",
|
||||
"files-incorrect": "Files are incorrect",
|
||||
"file-transfer-completed": "File transfer completed",
|
||||
"ios-memory-limit": "Sending files to iOS is only possible up to 200 MB at once",
|
||||
"message-transfer-completed": "Message transfer completed",
|
||||
"unfinished-transfers-warning": "There are unfinished transfers. Are you sure you want to close PairDrop?",
|
||||
"rate-limit-join-key": "Rate limit reached. Wait 10 seconds and try again.",
|
||||
"selected-peer-left": "Selected peer left"
|
||||
"selected-peer-left": "Selected peer left",
|
||||
"error-sharing-size": "Files too big to be shared. They can be downloaded instead.",
|
||||
"error-sharing-default": "Error while sharing. It can be downloaded instead.",
|
||||
"ram-exceed-ios": "One of the files is bigger than 250 MB and will crash the page on iOS. Use https and do not use private tabs on the iOS device to prevent this."
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "File Received",
|
||||
@@ -176,9 +178,14 @@
|
||||
"click-to-send-share-mode": "Click to send {{descriptor}}",
|
||||
"click-to-send": "Click to send files or right click to send a message",
|
||||
"connection-hash": "To verify the security of the end-to-end encryption, compare this security number on both devices",
|
||||
"connecting": "Connecting…",
|
||||
"preparing": "Preparing…",
|
||||
"waiting": "Waiting…",
|
||||
"processing": "Processing…",
|
||||
"transferring": "Transferring…"
|
||||
"transferring": "Sending…",
|
||||
"receiving": "Receiving…",
|
||||
"transfer-complete": "Sent",
|
||||
"receive-complete": "Received",
|
||||
"error": "Error"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +64,6 @@
|
||||
"pairing-cleared": "Todos los dispositivos han sido desemparejados",
|
||||
"notifications-enabled": "Notificaciones habilitadas",
|
||||
"online-requirement-pairing": "Debes estar en línea para emparejar dispositivos",
|
||||
"ios-memory-limit": "Enviar archivos a iOS sólo admite hasta 200 MB a la vez",
|
||||
"online-requirement-public-room": "Debes estar en línea para crear una sala pública",
|
||||
"copied-text-error": "Error al escribir en el portapapeles. ¡Cópielo manualmente!",
|
||||
"download-successful": "{{descriptor}} descargado",
|
||||
|
||||
@@ -1,184 +0,0 @@
|
||||
{
|
||||
"notifications": {
|
||||
"rate-limit-join-key": "Jõudsid tegevuspiiranguni. Oota 10 sekundit ja proovi uuesti.",
|
||||
"notifications-permissions-error": "Teavituste luba on keelatud, kuna oled mitu korda loataotluse sulgenud. Selle saad lähtestada lehe teabe menüüs, millele pääsed ligi aadressiribal oleva lukuikooni kaudu.",
|
||||
"display-name-changed-permanently": "Kuvatav nimi on püsivalt muudetud",
|
||||
"display-name-changed-temporarily": "Kuvatav nimi on muudetud vaid selle seansi jaoks",
|
||||
"display-name-random-again": "Kuvatav nimi on taas juhuslikult genereeritud",
|
||||
"pairing-not-persistent": "Paaritatud seadmed ei ole püsivad",
|
||||
"public-room-id-invalid": "Sobimatu ruumi-ID",
|
||||
"copied-to-clipboard": "Kopeeritud lõikelauale",
|
||||
"copied-to-clipboard-error": "Kopeerimine pole võimalik. Kopeeri käsitsi.",
|
||||
"room-url-copied-to-clipboard": "Avaliku ruumi link kopeeritud lõikelauale",
|
||||
"clipboard-content-incorrect": "Lõikelaua sisu on sobimatu",
|
||||
"link-received": "Link {{name}} poolt vastu võetud - klõpsa avamiseks",
|
||||
"message-received": "Sõnum {{name}} poolt vastu võetud - klõpsa kopeerimiseks",
|
||||
"connected": "Ühendatud",
|
||||
"copied-text": "Tekst lõikelauale kopeeritud",
|
||||
"copied-text-error": "Lõikelauale kirjutamine ebaõnnestus. Kopeeri käsitsi!",
|
||||
"unfinished-transfers-warning": "Omad lõpetamata ülekandeid. Kas soovid kindlasti PairDropi sulgeda?",
|
||||
"files-incorrect": "Failid on sobimatud",
|
||||
"message-transfer-completed": "Sõnumiedastus lõpetatud",
|
||||
"online-requirement-pairing": "Seadmete paaritamiseks pead võrgus olema",
|
||||
"online-requirement-public-room": "Avaliku ruumi loomiseks pead võrgus olema",
|
||||
"ios-memory-limit": "iOSil saab saata faile ainult 200 MB kaupa",
|
||||
"selected-peer-left": "Valitud seade lahkus",
|
||||
"pairing-cleared": "Kõik seadmepaaritused eemaldatud",
|
||||
"offline": "Sa oled võrgust väljas",
|
||||
"public-room-left": "Lahkusid avalikust ruumist {{publicRoomId}}",
|
||||
"click-to-download": "Klõpsa allalaadimiseks",
|
||||
"pairing-key-invalid": "Sobimatu võti",
|
||||
"notifications-enabled": "Teavitused lubatud",
|
||||
"text-content-incorrect": "Tekstisisu on sobimatu",
|
||||
"file-content-incorrect": "Failisisu on sobimatu",
|
||||
"click-to-show": "Klõpsa kuvamiseks",
|
||||
"file-transfer-completed": "Failiedastus lõpetatud",
|
||||
"request-title": "{{name}} soovib edastada {{count}} {{descriptor}}",
|
||||
"online": "Sa oled tagasi võrgus",
|
||||
"connecting": "Ühendamine…",
|
||||
"download-successful": "{{descriptor}} allalaaditud",
|
||||
"pairing-success": "Seadmed paaritatud",
|
||||
"pairing-tabs-error": "Kahe brauserikaardi paaritamine on võimatu",
|
||||
"pair-url-copied-to-clipboard": "Selle seadme paaritamise link kopeeritud lõikelauale",
|
||||
"pairing-key-invalidated": "Võti {{key}} on muudetud kehtetuks"
|
||||
},
|
||||
"instructions": {
|
||||
"x-instructions-share-mode_mobile": "Koputa, et saata {{descriptor}}",
|
||||
"no-peers_data-drop-bg": "Vabasta saaja valimiseks",
|
||||
"no-peers-title": "Ava failide saatmiseks PairDrop teistes seadmetes",
|
||||
"no-peers-subtitle": "Paarita seadmed või sisesta avalik ruum, et olla teistes võrkudes avastatav",
|
||||
"x-instructions_desktop": "Klõpsa failide saatmiseks või paremklõpsa sõnumi saatmiseks",
|
||||
"x-instructions_mobile": "Koputa failide saatmiseks või hoia all sõnumi saatmiseks",
|
||||
"x-instructions_data-drop-peer": "Vabasta sisu saatmiseks",
|
||||
"activate-share-mode-base": "Saatmiseks ava PairDrop teistes seadmetes",
|
||||
"activate-share-mode-and-other-file": "ja üks teine fail",
|
||||
"activate-share-mode-shared-text": "jagatud tekst",
|
||||
"webrtc-requirement": "Selle PairDrop eksemplari kasutamiseks peab WebRTC olema lubatud!",
|
||||
"activate-share-mode-and-other-files-plural": "ja {{count}} teist faili",
|
||||
"activate-share-mode-shared-file": "jagatud fail",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} jagatud faili",
|
||||
"x-instructions-share-mode_desktop": "Klõpsa, et saata {{descriptor}}",
|
||||
"x-instructions_data-drop-bg": "Vabasta seadme valimiseks"
|
||||
},
|
||||
"header": {
|
||||
"theme-auto_title": "Kasuta automaatselt süsteemiteemat",
|
||||
"theme-light_title": "Kasuta alati heledat teemat",
|
||||
"cancel-share-mode": "Tühista",
|
||||
"edit-share-mode": "Muuda",
|
||||
"edit-paired-devices_title": "Muuda paaritatud seadmeid",
|
||||
"join-public-room_title": "Liitu avaliku ruumiga ajutiselt",
|
||||
"expand_title": "Laienda päise nupurida",
|
||||
"about_title": "PairDropi teave",
|
||||
"notification_title": "Luba teavitused",
|
||||
"install_title": "Paigalda PairDrop",
|
||||
"language-selector_title": "Määra keel",
|
||||
"about_aria-label": "Ava PairDropi teave",
|
||||
"pair-device_title": "Paarita oma seadmed püsivalt",
|
||||
"theme-dark_title": "Kasuta alati tumedat teemat"
|
||||
},
|
||||
"footer": {
|
||||
"known-as": "Sind tuntakse kui:",
|
||||
"discovery": "Sind saab avastada:",
|
||||
"on-this-network": "selles võrgus",
|
||||
"paired-devices_title": "Paaritatud seadmed saavad sinu seadet igal ajal avastada, sõltumata võrgust.",
|
||||
"on-this-network_title": "Igaüks selles võrgus saab sind avastada.",
|
||||
"public-room-devices_title": "Selles avalikus ruumis olevad seadmed saavad sind avastada sõltumata võrgust.",
|
||||
"webrtc": "kui WebRTC pole saadaval.",
|
||||
"display-name_data-placeholder": "Laadimine…",
|
||||
"display-name_title": "Muuda oma seadme nime püsivalt",
|
||||
"paired-devices": "paaritatud seadmetes",
|
||||
"public-room-devices": "ruumis {{roomId}}",
|
||||
"routed": "suunatud läbi serveri",
|
||||
"traffic": "Liiklus on"
|
||||
},
|
||||
"dialogs": {
|
||||
"auto-accept-instructions-1": "Aktiveeri",
|
||||
"pair-devices-title": "Paarita seadmed püsivalt",
|
||||
"scan-qr-code": "või skanni QR-kood.",
|
||||
"temporary-public-room-title": "Ajutine avalik ruum",
|
||||
"input-room-id-on-another-device": "Sisesta see ruumi-ID teise seadmesse",
|
||||
"paired-devices-wrapper_data-empty": "Paaritatud seadmed puuduvad.",
|
||||
"auto-accept": "automaatne vastuvõtt",
|
||||
"input-key-on-this-device": "Impordi see võti teises seadmes",
|
||||
"enter-room-id-from-another-device": "Ruumiga liitumiseks sisesta teises seadmes see ruumi-ID.",
|
||||
"paired-device-removed": "Paaritatud seade on eemaldatud.",
|
||||
"would-like-to-share": "soovib jagada",
|
||||
"accept": "Võta vastu",
|
||||
"download": "Laadi alla",
|
||||
"send-message-title": "Saada sõnum",
|
||||
"send-message-to": "Seadmele:",
|
||||
"auto-accept-instructions-2": "et automaatselt kõik sellest seadmest saadetud failid vastu võtta.",
|
||||
"send": "Saada",
|
||||
"language-selector-title": "Määra keel",
|
||||
"receive-title": "{{descriptor}} vastuvõetud",
|
||||
"approve": "võta vastu",
|
||||
"close-toast_title": "Sulge teavitus",
|
||||
"pair": "Paarita",
|
||||
"close": "Sulge",
|
||||
"hr-or": "VÕI",
|
||||
"cancel": "Tühista",
|
||||
"unpair": "Eemalda paardumine",
|
||||
"join": "Liitu",
|
||||
"leave": "Lahku",
|
||||
"message_placeholder": "Tekst",
|
||||
"base64-files": "failid",
|
||||
"file-other-description-file": "ja üks teine fail",
|
||||
"file-other-description-file-plural": "ja {{count}} teist faili",
|
||||
"title-image": "Pilt",
|
||||
"has-sent": "on saatnud:",
|
||||
"share": "Jaga",
|
||||
"message_title": "Sisesta saadetav sõnum",
|
||||
"receive-text-title": "Sõnum vastuvõetud",
|
||||
"copy": "Kopeeri",
|
||||
"base64-title-text": "Jaga teksti",
|
||||
"base64-title-files": "Jaga faile",
|
||||
"pair-devices-qr-code_title": "Klõpsa, et kopeerida seadme paaritamise link",
|
||||
"base64-tap-to-paste": "Koputa siia {{type}} jagamiseks",
|
||||
"base64-paste-to-send": "Kleebi siia {{type}} jagamiseks",
|
||||
"base64-text": "tekst",
|
||||
"title-file-plural": "Failid",
|
||||
"share-text-title": "Jaga tekstsõnumit",
|
||||
"edit-paired-devices-title": "Muuda paaritatud seadmeid",
|
||||
"enter-key-from-another-device": "Sisesta teise seadme võti siia.",
|
||||
"system-language": "Süsteemikeel",
|
||||
"share-text-subtitle": "Muuda sõnumit enne saatmist:",
|
||||
"title-file": "Fail",
|
||||
"title-image-plural": "Pildid",
|
||||
"file-other-description-image": "ja üks teine pilt",
|
||||
"download-again": "Laadi uuesti alla",
|
||||
"file-other-description-image-plural": "ja {{count}} teist pilti",
|
||||
"public-room-qr-code_title": "Klõpsa, et kopeerida avaliku ruumi link",
|
||||
"share-text-checkbox": "Kuva teksti saatmisel alati see dialoog",
|
||||
"base64-processing": "Töötlemine…",
|
||||
"decline": "Keeldu"
|
||||
},
|
||||
"about": {
|
||||
"claim": "Lihtsaim viis jagada faile üle seadmete",
|
||||
"tweet_title": "Säutsu PairDropist",
|
||||
"bluesky_title": "Jälgi meid BlueSkys",
|
||||
"privacypolicy_title": "Ava meie privaatsuspoliitika",
|
||||
"faq_title": "Korduma kippuvad küsimused",
|
||||
"buy-me-a-coffee_title": "Osta mulle kohvi!",
|
||||
"mastodon_title": "Kirjuta PairDropist Mastodonis",
|
||||
"custom_title": "Jälgi meid",
|
||||
"close-about_aria-label": "Sulge PairDropi teave",
|
||||
"github_title": "PairDrop GitHubis"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-transfer-requested": "Failiedastust on taotletud",
|
||||
"image-transfer-requested": "Pildiedastust on taotletud",
|
||||
"file-received-plural": "{{count}} faili vastuvõetud",
|
||||
"message-received-plural": "{{count}} sõnumit vastuvõetud",
|
||||
"file-received": "Fail vastuvõetud",
|
||||
"message-received": "Sõnum vastuvõetud"
|
||||
},
|
||||
"peer-ui": {
|
||||
"connection-hash": "Otspunktkrüpteeringu turvalisuse kinnitamiseks võrdle seda arvu mõlemas seadmes",
|
||||
"click-to-send": "Klõpsa failide saatmiseks või paremklõpsa sõnumi saatmiseks",
|
||||
"preparing": "Valmistumine…",
|
||||
"click-to-send-share-mode": "Klõpsa {{descriptor}} saatmiseks",
|
||||
"waiting": "Ootamine…",
|
||||
"processing": "Töötlemine…",
|
||||
"transferring": "Edastamine…"
|
||||
}
|
||||
}
|
||||
@@ -1,184 +0,0 @@
|
||||
{
|
||||
"header": {
|
||||
"about_title": "PairDropi buruz",
|
||||
"about_aria-label": "Ireki PairDropi buruz",
|
||||
"cancel-share-mode": "Utzi",
|
||||
"edit-share-mode": "Editatu",
|
||||
"edit-paired-devices_title": "Editatu lotutako gailuak",
|
||||
"theme-light_title": "Erabili beti gai argia",
|
||||
"theme-dark_title": "Erabili beti gai iluna",
|
||||
"notification_title": "Gaitu jakinarazpenak",
|
||||
"install_title": "Instalatu PairDrop",
|
||||
"pair-device_title": "Lotu zure gailuak betiko",
|
||||
"expand_title": "Hedatu goiburuko botoien errenkada",
|
||||
"language-selector_title": "Ezarri hizkuntza",
|
||||
"theme-auto_title": "Aldatu gaia sistemak darabilenera",
|
||||
"join-public-room_title": "Batu gela publikoa behin-behinean"
|
||||
},
|
||||
"instructions": {
|
||||
"activate-share-mode-and-other-files-plural": "eta beste {{count}} fitxategi",
|
||||
"no-peers-subtitle": "Lotu gailuak edo sartu gela publiko batean beste sareetan aurki zaitzaten",
|
||||
"no-peers_data-drop-bg": "Jaregin hartzaileak hautatzeko",
|
||||
"x-instructions_mobile": "Egin tap fitxategiak bidaltzeko edo luze sakatu mezua bidaltzeko",
|
||||
"x-instructions_desktop": "Klikatu fitxategiak bidaltzeko edo klikatu eskumako botoiarekin mezu bat bidaltzeko",
|
||||
"activate-share-mode-base": "Ireki PairDrop beste gailuetan bidaltzeko",
|
||||
"activate-share-mode-shared-text": "partekatutako testua",
|
||||
"x-instructions-share-mode_desktop": "Klikatu {{descriptor}} bidaltzeko",
|
||||
"x-instructions-share-mode_mobile": "Egin tap {{descriptor}} bidaltzeko",
|
||||
"activate-share-mode-shared-file": "partekatutako fitxategia",
|
||||
"activate-share-mode-shared-files-plural": "partekatutako {{count}} fitxategi",
|
||||
"webrtc-requirement": "PairDrop instantzia hau erabiltzeko, WebRTC gaitu behar da!",
|
||||
"no-peers-title": "Ireki PairDrop beste gailuetan fitxategiak bidaltzeko",
|
||||
"activate-share-mode-and-other-file": "eta beste fitxategi 1",
|
||||
"x-instructions_data-drop-peer": "Jaregin kideari bidaltzeko",
|
||||
"x-instructions_data-drop-bg": "Jaregin hartzailea hautatzeko"
|
||||
},
|
||||
"notifications": {
|
||||
"online-requirement-pairing": "Linean egon behar zara gailuak lotzeko",
|
||||
"copied-text-error": "Arbelean idazteak huts egin du. Egizu eskuz!",
|
||||
"connecting": "Konektatzen…",
|
||||
"display-name-changed-temporarily": "Pantaila-izena saio honetarako bakarrik aldatuko da",
|
||||
"display-name-random-again": "Pantaila-izena ausaz sortuko da berriro",
|
||||
"pairing-tabs-error": "Ezin dira nabigatzaileko bi fitxa lotu",
|
||||
"pairing-success": "Gailuak lotu dira",
|
||||
"pairing-not-persistent": "Gailuak ez dira behin-betiko lotu",
|
||||
"pairing-key-invalid": "Gako okerra",
|
||||
"public-room-id-invalid": "Gelaren IDa ez da baliozkoa",
|
||||
"pair-url-copied-to-clipboard": "Gailu hau lotzeko esteka arbelera kopiatu da",
|
||||
"room-url-copied-to-clipboard": "Gela publiko honetara sartzeko esteka arbelera kopiatu da",
|
||||
"copied-to-clipboard-error": "Ezin da kopiatu. Egizu eskuz.",
|
||||
"text-content-incorrect": "Testuaren edukia okerra da",
|
||||
"file-content-incorrect": "Fitxategiaren edukia okerra da",
|
||||
"clipboard-content-incorrect": "Arbeleko edukia okerra da",
|
||||
"link-received": "{{name}}(e)k bidalitako esteka. Klikatu irekitzeko",
|
||||
"notifications-permissions-error": "Jakinarazpenen baimena blokeatu egin da, erabiltzaileak behin baino gehiagotan ukatu baitu baimen-eskaera. Orriaren informazioan berrezar daiteke. Horretarako, URL barraren ondoko zerrapoaren ikonoan klik egin behar da.",
|
||||
"message-received": "{{name}}(e)k bidalitako mezua. Klikatu kopiatzeko",
|
||||
"click-to-download": "Klikatu deskargatzeko",
|
||||
"request-title": "{{name}}(e)k {{count}} {{descriptor}} bidali nahi dizkizu",
|
||||
"click-to-show": "Klikatu erakusteko",
|
||||
"ios-memory-limit": "iOSek ez ditu 200 MB edo gehiagoko fitxategiak onartzen aldi berean",
|
||||
"message-transfer-completed": "Mezuaren trukatzeak amaitu du",
|
||||
"rate-limit-join-key": "Muga gainditu da. Itxaron 10 segundo eta saiatu berriro.",
|
||||
"offline": "Lineaz kanpo zaude",
|
||||
"files-incorrect": "Fitxategiak okerrak dira",
|
||||
"display-name-changed-permanently": "Pantaila-izena betiko aldatuko da",
|
||||
"connected": "Konektatuta",
|
||||
"file-transfer-completed": "Fitxategien trukatzeak amaitu du",
|
||||
"online-requirement-public-room": "Linean egon behar zara gela publiko bat sortzeko",
|
||||
"notifications-enabled": "Jakinarazpenak gaitu dira",
|
||||
"download-successful": "{{descriptor}} deskargatu da",
|
||||
"pairing-cleared": "Gailu guztiak askatu dira",
|
||||
"public-room-left": "{{publicRoomId}} gela publikotik irten zara",
|
||||
"copied-to-clipboard": "Arbelera kopiatuta",
|
||||
"copied-text": "Testua arbelera kopiatu da",
|
||||
"online": "Berriro zaude linean",
|
||||
"unfinished-transfers-warning": "Amaitu gabeko trukatzeak daude. Ziur PairDrop itxi nahi duzula?",
|
||||
"selected-peer-left": "Falta diren hautatutako kideak",
|
||||
"pairing-key-invalidated": "{{key}} gakoa baliogabetu da"
|
||||
},
|
||||
"dialogs": {
|
||||
"send": "Bidali",
|
||||
"title-file": "Fitxategia",
|
||||
"input-key-on-this-device": "Sartu gakoa beste gailu batean",
|
||||
"enter-key-from-another-device": "Sartu beste gailu bateko gakoa hemen.",
|
||||
"temporary-public-room-title": "Behin-behineko gela publikoa",
|
||||
"input-room-id-on-another-device": "Sartu gela honen IDa beste gailu batean",
|
||||
"enter-room-id-from-another-device": "Sartu beste gailu bateko gelaren IDa gelara sartzeko.",
|
||||
"unpair": "Askatu",
|
||||
"paired-device-removed": "Kendu egin da lotutako gailua.",
|
||||
"paired-devices-wrapper_data-empty": "Ez dago lotutako gailurik.",
|
||||
"auto-accept-instructions-1": "Aktibatu",
|
||||
"auto-accept": "onartu automatikoki",
|
||||
"close": "Itxi",
|
||||
"join": "Sartu",
|
||||
"would-like-to-share": "partekatu nahi du",
|
||||
"decline": "Baztertu",
|
||||
"has-sent": "bidali du:",
|
||||
"receive-text-title": "Mezua jaso da",
|
||||
"copy": "Kopiatu",
|
||||
"base64-title-files": "Partekatu fitxategiak",
|
||||
"base64-title-text": "Partekatu testua",
|
||||
"base64-tap-to-paste": "Egin tap hemen {{type}} partekatzeko",
|
||||
"base64-processing": "Prozesatzen…",
|
||||
"base64-paste-to-send": "Itsatsi arbelekoa hemen {{type}} partekatzeko",
|
||||
"base64-text": "testua",
|
||||
"base64-files": "fitxategiak",
|
||||
"file-other-description-image": "eta beste irudi 1",
|
||||
"file-other-description-file": "eta beste fitxategi 1",
|
||||
"file-other-description-image-plural": "eta beste {{count}} irudi",
|
||||
"title-image": "Irudia",
|
||||
"receive-title": "{{descriptor}} jaso da",
|
||||
"download-again": "Deskargatu berriro",
|
||||
"system-language": "Sistemak darabilena",
|
||||
"public-room-qr-code_title": "Klikatu gela publikoaren esteka kopiatzeko",
|
||||
"approve": "onartu",
|
||||
"title-file-plural": "Fitxategiak",
|
||||
"share-text-checkbox": "Erakutsi beti leiho hau testua partekatzerakoan",
|
||||
"pair-devices-title": "Lotu gailuak betiko",
|
||||
"scan-qr-code": "edo eskaneatu QR kodea.",
|
||||
"hr-or": "EDO",
|
||||
"pair": "Lotu",
|
||||
"cancel": "Utzi",
|
||||
"edit-paired-devices-title": "Editatu lotutako gailuak",
|
||||
"accept": "Onartu",
|
||||
"share": "Partekatu",
|
||||
"download": "Deskargatu",
|
||||
"send-message-title": "Bidali mezua",
|
||||
"send-message-to": "Honi:",
|
||||
"message_placeholder": "Testua",
|
||||
"message_title": "Sartu bidaltzeko mezua",
|
||||
"title-image-plural": "Irudiak",
|
||||
"pair-devices-qr-code_title": "Klikatu gailu hau lotzeko esteka kopiatzeko",
|
||||
"leave": "Irten",
|
||||
"share-text-title": "Partekatu testuzko mezua",
|
||||
"auto-accept-instructions-2": "automatikoki onartzeko gailu horretatik bidalitako fitxategi guztiak.",
|
||||
"file-other-description-file-plural": "eta beste {{count}} fitxategi",
|
||||
"language-selector-title": "Ezarri hizkuntza",
|
||||
"share-text-subtitle": "Editatu mezua bidali baino lehen:",
|
||||
"close-toast_title": "Itxi jakinarazpena"
|
||||
},
|
||||
"about": {
|
||||
"custom_title": "Jarraitu iezaguzu",
|
||||
"claim": "Gailuen artean fitxategiak trukatzeko modurik errazena",
|
||||
"github_title": "PairDrop GitHuben",
|
||||
"buy-me-a-coffee_title": "Erosidazu kafe bat!",
|
||||
"privacypolicy_title": "Ireki gure pribatutasun politika",
|
||||
"tweet_title": "Egin txio PairDropi buruz",
|
||||
"faq_title": "Maiz Egindako Galderak",
|
||||
"mastodon_title": "Idatzi Mastodonen PairDropi buruz",
|
||||
"bluesky_title": "Jarrai iezaguzu BlueSkyn",
|
||||
"close-about_aria-label": "Itxi PairDropi buruz"
|
||||
},
|
||||
"footer": {
|
||||
"known-as": "Zure izena honakoa da:",
|
||||
"display-name_data-placeholder": "Kargatzen…",
|
||||
"display-name_title": "Editatu zure gailuaren izena betiko",
|
||||
"on-this-network_title": "Sare honetako edonork aurki zaitzake.",
|
||||
"paired-devices": "lotutako gailuek",
|
||||
"public-room-devices_title": "Gela publiko honetan dauden gailuek aurki zaitzakete, zauden sarean zaudela.",
|
||||
"traffic": "Trafikoa:",
|
||||
"routed": "zerbitzaritik bideratuta",
|
||||
"discovery": "Aurki zaitzakete:",
|
||||
"webrtc": "WebRTC erabilgarri ez badago.",
|
||||
"on-this-network": "sare honetan",
|
||||
"public-room-devices": "{{roomId}} gelan",
|
||||
"paired-devices_title": "Lotutako gailuek uneoro aurki zaitzakete, zauden sarearen zaudela."
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "Fitxategia jaso da",
|
||||
"file-received-plural": "{{count}} fitxategi jaso dira",
|
||||
"image-transfer-requested": "Irudiaren trukaketa eskatu da",
|
||||
"message-received": "Mezua jaso da",
|
||||
"message-received-plural": "{{count}} mezu jaso dira",
|
||||
"file-transfer-requested": "Fitxategiaren trukaketa eskatu da"
|
||||
},
|
||||
"peer-ui": {
|
||||
"click-to-send-share-mode": "Klikatu {{descriptor}} bidaltzeko",
|
||||
"preparing": "Prestatzen…",
|
||||
"waiting": "Zain…",
|
||||
"processing": "Prozesatzen…",
|
||||
"transferring": "Trukatzen…",
|
||||
"connection-hash": "Zifratzearen segurtasuna muturretik muturrera egiaztatzeko, konparatu segurtasun-zenbaki hau bi gailuetan",
|
||||
"click-to-send": "Klikatu fitxategiak bidaltzeko edo klikatu eskumako botoiarekin mezu bat bidaltzeko"
|
||||
}
|
||||
}
|
||||
@@ -1,184 +0,0 @@
|
||||
{
|
||||
"header": {
|
||||
"theme-light_title": "همیشه از پوسته روشن استفاده شود",
|
||||
"theme-dark_title": "همیشه از پوسته تیره استفاده شود",
|
||||
"install_title": "نصب پیردراپ",
|
||||
"cancel-share-mode": "لغو",
|
||||
"edit-share-mode": "ویرایش",
|
||||
"expand_title": "گسترش ردیف دکمه سرایند",
|
||||
"about_title": "درباره پیردراپ",
|
||||
"language-selector_title": "تنظیم زبان",
|
||||
"theme-auto_title": "همسانسازی خودکار پوسته با سامانه",
|
||||
"notification_title": "فعالسازی آگاهیها",
|
||||
"pair-device_title": "جفتکردن دائمی دستگاههایتان",
|
||||
"join-public-room_title": "پیوستن موقتی به اتاق عمومی",
|
||||
"edit-paired-devices_title": "ویرایش دستگاههای جفتشده",
|
||||
"about_aria-label": "باز کردن درباره پیردراپ"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers-title": "برای فرستادن پروندهها، پیردراپ را روی دستگاههای دیگر باز کنید",
|
||||
"no-peers-subtitle": "دستگاهها را جفت کنید و یا با پیوستن به اتاق عمومی، روی دیگر شبکهها قابل شناسایی شوید",
|
||||
"x-instructions_mobile": "برای فرستادن پروندهها کلیک کنید یا با لمس طولانی، پیامی بفرستید",
|
||||
"x-instructions_data-drop-bg": "با رهاکردن، دریافتکننده را انتخاب کنید",
|
||||
"x-instructions-share-mode_desktop": "برای فرستادن {{descriptor}} کلیک کنید",
|
||||
"x-instructions-share-mode_mobile": "برای فرستادن {{descriptor}} ضربه بزنید",
|
||||
"activate-share-mode-base": "برای فرستادن، پیردراپ را روی دستگاههای دیگر باز کنید",
|
||||
"activate-share-mode-and-other-file": "و یک پرونده دیگر",
|
||||
"activate-share-mode-and-other-files-plural": "و {{count}} پرونده دیگر",
|
||||
"activate-share-mode-shared-file": "پرونده همرسانی شده",
|
||||
"activate-share-mode-shared-text": "متن همرسانی شده",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} پرونده همرسانی شده",
|
||||
"webrtc-requirement": "برای استفاده از این نمونه پیردراپ بایستی WebRTC فعال باشد!",
|
||||
"x-instructions_data-drop-peer": "با رهاکردن، پرونده را بفرستید",
|
||||
"x-instructions_desktop": "برای فرستادن پروندهها کلیک کرده و یا با کلیک راست، پیامی بفرستید",
|
||||
"no-peers_data-drop-bg": "با رهاکردن، دریافتکننده را انتخاب کنید"
|
||||
},
|
||||
"footer": {
|
||||
"known-as": "شما به این عنوان شناخته میشوید:",
|
||||
"display-name_data-placeholder": "در حال بار شدن…",
|
||||
"display-name_title": "ویرایش دائمی نام دستگاه شما",
|
||||
"discovery": "قابل شناسایی هستید:",
|
||||
"on-this-network": "روی این شبکه",
|
||||
"paired-devices": "توسط دستگاههای جفتشده",
|
||||
"on-this-network_title": "شما توسط همه افراد این شبکه قابل شناسایی هستید.",
|
||||
"paired-devices_title": "شما در هر زمان فارق از شبکه، توسط دستگاههای جفتشده قابل شناسایی هستید.",
|
||||
"public-room-devices": "در اتاق {{roomId}}",
|
||||
"public-room-devices_title": "شما در این اتاق عمومی فارق از شبکه، توسط دستگاهها قابل شناسایی هستید.",
|
||||
"traffic": "ترافیک",
|
||||
"routed": "از طریق کارساز(سرور) مسیریابی میشود",
|
||||
"webrtc": "اگر WebRTC در دسترس نیست."
|
||||
},
|
||||
"dialogs": {
|
||||
"accept": "پذیرفتن",
|
||||
"message_placeholder": "متن",
|
||||
"send": "ارسال",
|
||||
"base64-files": "پروندهها",
|
||||
"file-other-description-image": "و 1 تصویر دیگر",
|
||||
"language-selector-title": "تنظیم زبان",
|
||||
"system-language": "زبان سیستم",
|
||||
"public-room-qr-code_title": "برای رونوشت پیوند به اتاق عمومی کلیک کنید",
|
||||
"pair-devices-qr-code_title": "برای رونوشت پیوند به جفتکردن این دستگاه کلیک کنید",
|
||||
"approve": "اثبات",
|
||||
"share-text-title": "همرسانی پیام متنی",
|
||||
"share-text-subtitle": "قبل از ارسال پیام را ویرایش کنید:",
|
||||
"share-text-checkbox": "همیشه این پیام را هنگام همرسانی متن نشان دهید",
|
||||
"close-toast_title": "بستن اعلان",
|
||||
"pair-devices-title": "جفتکردن دستگاهها بهطور دائمی",
|
||||
"input-key-on-this-device": "این کلید را روی دستگاه دیگر وارد کنید",
|
||||
"scan-qr-code": "یا رمزینه QR را بررسی کنید.",
|
||||
"enter-key-from-another-device": "کلید را از دستگاه دیگر اینجا وارد کنید.",
|
||||
"temporary-public-room-title": "اتاق عمومی موقتی",
|
||||
"input-room-id-on-another-device": "این شناسه اتاق را روی دستگاه دیگر وارد کنید",
|
||||
"enter-room-id-from-another-device": "شناسه اتاق را از دستگاه دیگر وارد کنید تا به اتاق بپیوندید.",
|
||||
"hr-or": "یا",
|
||||
"pair": "جفتکردن",
|
||||
"cancel": "لغو",
|
||||
"unpair": "جدا کردن",
|
||||
"paired-device-removed": "دستگاه جفتشده حذف شد.",
|
||||
"paired-devices-wrapper_data-empty": "هیچ دستگاه جفتشدهای وجود ندارد.",
|
||||
"auto-accept-instructions-1": "فعالسازی",
|
||||
"auto-accept": "پذیرش خودکار",
|
||||
"auto-accept-instructions-2": "تا بهطور خودکار تمام پروندههای ارسال شده از آن دستگاه را بپذیرید.",
|
||||
"close": "بستن",
|
||||
"join": "پیوستن",
|
||||
"leave": "ترک",
|
||||
"would-like-to-share": "می خواهم به اشتراک بگذارم",
|
||||
"edit-paired-devices-title": "ویرایش دستگاههای جفتشده",
|
||||
"decline": "رد کردن",
|
||||
"has-sent": "ارسال کرده است:",
|
||||
"share": "همرسانی",
|
||||
"download": "دریافت",
|
||||
"send-message-title": "ارسال پیام",
|
||||
"send-message-to": "به:",
|
||||
"message_title": "متن پیام را وارد کنید",
|
||||
"receive-text-title": "پیام دریافت شد",
|
||||
"copy": "رونوشت",
|
||||
"base64-title-files": "همرسانی پروندهها",
|
||||
"base64-title-text": "همرسانی متن",
|
||||
"base64-processing": "در حال پردازش…",
|
||||
"base64-tap-to-paste": "برای همرسانی {{type}} اینجا ضربه بزنید",
|
||||
"base64-paste-to-send": "برای همرسانی {{type}} اینجا کلیک راست کنید",
|
||||
"base64-text": "متن",
|
||||
"file-other-description-file": "و 1 پرونده دیگر",
|
||||
"file-other-description-image-plural": "و {{count}} تصویر دیگر",
|
||||
"file-other-description-file-plural": "و {{count}} پرونده دیگر",
|
||||
"title-image": "تصویر",
|
||||
"title-file": "پرونده",
|
||||
"title-image-plural": "تصاویر",
|
||||
"title-file-plural": "پروندهها",
|
||||
"receive-title": "{{descriptor}} دریافت شد",
|
||||
"download-again": "دوباره دریافت کنید"
|
||||
},
|
||||
"about": {
|
||||
"close-about_aria-label": "بستن درباره پیردراپ",
|
||||
"claim": "سادهترین راه برای انتقال پروندهها بین دستگاهها",
|
||||
"github_title": "پیردراپ در گیتهاب",
|
||||
"buy-me-a-coffee_title": "برای من قهوه بخرید!",
|
||||
"tweet_title": "در مورد پیردراپ توییت کنید",
|
||||
"mastodon_title": "در مورد پیردراپ در ماستودون بنویسید",
|
||||
"bluesky_title": "ما را در BlueSky دنبال کنید",
|
||||
"custom_title": "ما را دنبال کنید",
|
||||
"privacypolicy_title": "سیاست حفظ حریم خصوصی ما را باز کنید",
|
||||
"faq_title": "سوالات متداول"
|
||||
},
|
||||
"notifications": {
|
||||
"display-name-changed-permanently": "نام نمایشی برای همیشه تغییر کرد",
|
||||
"display-name-changed-temporarily": "نام نمایشی فقط برای این نشست تغییر کرد",
|
||||
"display-name-random-again": "نام نمایشی دوباره بهطور تصادفی تولید شد",
|
||||
"download-successful": "{{descriptor}} دریافت شد",
|
||||
"pairing-tabs-error": "جفتکردن دو تب مرورگر وب ممکن نیست",
|
||||
"pairing-success": "دستگاهها جفت شدند",
|
||||
"pairing-not-persistent": "دستگاههای جفتشده پایدار نیستند",
|
||||
"pairing-key-invalid": "کلید نامعتبر است",
|
||||
"pairing-key-invalidated": "کلید {{key}} نامعتبر شد",
|
||||
"pairing-cleared": "تمام دستگاهها جدا شدند",
|
||||
"public-room-id-invalid": "شناسه اتاق نامعتبر است",
|
||||
"public-room-left": "اتاق عمومی {{publicRoomId}} را ترک کردید",
|
||||
"copied-to-clipboard": "به بُریدهدان رونوشت شد",
|
||||
"pair-url-copied-to-clipboard": "پیوند جفتکردن این دستگاه به بُریدهدان رونوشت شد",
|
||||
"room-url-copied-to-clipboard": "پیوند اتاق عمومی به بُریدهدان رونوشت شد",
|
||||
"copied-to-clipboard-error": "رونوشت کردن ممکن نیست. بهصورت دستی رونوشت کنید.",
|
||||
"text-content-incorrect": "محتوای متن نادرست است",
|
||||
"file-content-incorrect": "محتوای پرونده نادرست است",
|
||||
"online": "شما دوباره برخط هستید",
|
||||
"connected": "متصل شد",
|
||||
"online-requirement-pairing": "شما باید برخط باشید تا دستگاهها را جفت کنید",
|
||||
"online-requirement-public-room": "شما باید برخط باشید تا اتاق عمومی ایجاد کنید",
|
||||
"unfinished-transfers-warning": "انتقالهای ناتمام وجود دارد. آیا مطمئن هستید که میخواهید پیردراپ را ببندید؟",
|
||||
"rate-limit-join-key": "محدودیت نرخ رسید. 10 ثانیه صبر کنید و دوباره تلاش کنید.",
|
||||
"selected-peer-left": "همتای انتخاب شده ترک کرد",
|
||||
"notifications-permissions-error": "مجوز آگاهیها به دلیل اینکه کاربر چندین بار پنجره مجوز را رد کرده است، مسدود شده. این میتواند در اطلاعات صفحه که با کلیک بر روی نماد قفل در کنار نوار URL قابل دسترسی است، بازنشانی شود.",
|
||||
"clipboard-content-incorrect": "محتوای بُریدهدان نادرست است",
|
||||
"link-received": "پیوند از {{name}} دریافت شد - برای باز کردن کلیک کنید",
|
||||
"notifications-enabled": "آگاهیها فعال شدند",
|
||||
"click-to-show": "برای نمایش کلیک کنید",
|
||||
"message-received": "پیام از {{name}} دریافت شد - برای رونوشت کردن کلیک کنید",
|
||||
"click-to-download": "برای دریافت کلیک کنید",
|
||||
"request-title": "{{name}} میخواهد {{count}} {{descriptor}} را منتقل کند",
|
||||
"copied-text": "متن به بُریدهدان رونوشت شد",
|
||||
"copied-text-error": "نوشتن به بُریدهدان ناموفق بود. بهصورت دستی رونوشت کنید!",
|
||||
"offline": "شما برونخط هستید",
|
||||
"connecting": "در حال اتصال…",
|
||||
"files-incorrect": "پروندهها نادرست هستند",
|
||||
"file-transfer-completed": "انتقال پرونده کامل شد",
|
||||
"ios-memory-limit": "ارسال پروندهها به iOS فقط تا 200 مگابایت در یک بار ممکن است",
|
||||
"message-transfer-completed": "انتقال پیام کامل شد"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "پرونده دریافت شد",
|
||||
"file-received-plural": "{{count}} پرونده دریافت شد",
|
||||
"file-transfer-requested": "درخواست انتقال پرونده",
|
||||
"image-transfer-requested": "درخواست انتقال تصویر",
|
||||
"message-received": "پیام دریافت شد",
|
||||
"message-received-plural": "{{count}} پیام دریافت شد"
|
||||
},
|
||||
"peer-ui": {
|
||||
"click-to-send-share-mode": "برای ارسال {{descriptor}} کلیک کنید",
|
||||
"click-to-send": "برای ارسال پروندهها کلیک کنید یا با کلیک راست، پیامی بفرستید",
|
||||
"connection-hash": "برای اثبات امنیت رمزگذاری انتها به انتها، این شماره امنیتی را در هر دو دستگاه مقایسه کنید",
|
||||
"preparing": "در حال آمادهسازی…",
|
||||
"waiting": "در حال انتظار…",
|
||||
"processing": "در حال پردازش…",
|
||||
"transferring": "در حال انتقال…"
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1 @@
|
||||
{
|
||||
"header": {
|
||||
"about_title": "Tietoja PairDropista",
|
||||
"language-selector_title": "Valitse kieli",
|
||||
"about_aria-label": "Avaa tietoja PairDropista",
|
||||
"theme-auto_title": "Käytä samaa teemaa kuin järjestelmä",
|
||||
"theme-light_title": "Käytä aina vaaleaa teemaa",
|
||||
"theme-dark_title": "Käytä aina tummaa teemaa",
|
||||
"notification_title": "Laita ilmoitukset päälle",
|
||||
"install_title": "Asenna PairDrop",
|
||||
"pair-device_title": "Yhdistä laitteesi pysyvästi",
|
||||
"edit-paired-devices_title": "Muokkaa yhdistettyjä laitteita",
|
||||
"join-public-room_title": "Liity julkiseen huoneeseen väliaikaisesti",
|
||||
"cancel-share-mode": "Peruuta",
|
||||
"edit-share-mode": "Muokkaa"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers-title": "Avaa PairDrop muilla laitteilla lähettääksesi tiedostoja",
|
||||
"no-peers-subtitle": "Yhdistä laite tai liity julkiseen huoneeseen, jotta olet löydettävissä muissa verkoissa",
|
||||
"x-instructions_desktop": "Paina lähettääksesi tiedoston tai klikkaa oikealla painikkeella lähettääksesi viestin"
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
@@ -156,7 +156,6 @@
|
||||
"connecting": "Connexion…",
|
||||
"files-incorrect": "Les fichiers sont incorrects",
|
||||
"file-transfer-completed": "Transfert de fichier terminé",
|
||||
"ios-memory-limit": "L'envoi de fichiers vers iOS n'est possible que jusqu'à 200 Mo à la fois",
|
||||
"message-transfer-completed": "Transfert de message terminé",
|
||||
"unfinished-transfers-warning": "Il y a des transferts inachevés. Êtes-vous sûr de vouloir fermer PairDrop ?",
|
||||
"rate-limit-join-key": "Limite de débit atteinte. Attendez 10 secondes et réessayez.",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"display-name_title": "Edit nama perangkat Anda scr. permanen",
|
||||
"traffic": "Lalu lintas",
|
||||
"paired-devices_title": "Anda dapat ditemukan oleh perangkat yang dipasangkan setiap saat tergantung pada jaringan.",
|
||||
"public-room-devices": "di dalam ruang {{roomId}}",
|
||||
"public-room-devices": "dalam room {{roomId}}",
|
||||
"paired-devices": "pada prngkt. yg. dipasangkan",
|
||||
"on-this-network": "pada jaringan ini",
|
||||
"routed": "diarahkan melalui server",
|
||||
@@ -20,15 +20,15 @@
|
||||
"message-received": "Pesan diterima dari {{name}} - Klik untuk menyalin",
|
||||
"rate-limit-join-key": "Batasan tercapai. Tunggu 10 detik dan coba lagi.",
|
||||
"connecting": "Menghubungkan…",
|
||||
"pairing-key-invalidated": "Kunci {{key}} takvalid",
|
||||
"pairing-key-invalid": "Kunci takvalid",
|
||||
"pairing-key-invalidated": "Kunci {{key}} tidak valid",
|
||||
"pairing-key-invalid": "Kunci tidak valid",
|
||||
"connected": "Tersambung",
|
||||
"pairing-not-persistent": "Perangkat dipasangkan tidak akan bertahan lama",
|
||||
"text-content-incorrect": "Isi teks keliru",
|
||||
"message-transfer-completed": "Transfer pesan selesai",
|
||||
"file-transfer-completed": "Transfer berkas selesai",
|
||||
"file-content-incorrect": "Isi berkas keliru",
|
||||
"files-incorrect": "Berkas tidak benar",
|
||||
"file-transfer-completed": "Transfer file selesai",
|
||||
"file-content-incorrect": "Isi file keliru",
|
||||
"files-incorrect": "File tidak benar",
|
||||
"selected-peer-left": "Rekan terpilih keluar",
|
||||
"link-received": "Tautan diterima dari {{name}} - Klik untuk membuka",
|
||||
"online": "Anda kembali online",
|
||||
@@ -43,17 +43,16 @@
|
||||
"copied-to-clipboard": "Disalin ke papan klip",
|
||||
"offline": "Anda sedang offline",
|
||||
"pairing-tabs-error": "Memasangkan dua tab browser web tidak mungkin dilakukan",
|
||||
"public-room-id-invalid": "ID Ruang takvalid",
|
||||
"public-room-id-invalid": "Room ID tidak valid",
|
||||
"click-to-download": "Klik untuk mengunduh",
|
||||
"pairing-cleared": "Semua Perangkat dilepaskan",
|
||||
"notifications-enabled": "Notifikasi diaktifkan",
|
||||
"online-requirement-pairing": "Anda harus online untuk memasangkan perangkat",
|
||||
"ios-memory-limit": "Mengirim betkas ke iOS hanya dapat dilakukan hingga 200 MB sekaligus",
|
||||
"online-requirement-public-room": "Anda harus terhubung ke jaringan internet untuk membuat ruang publik",
|
||||
"online-requirement-public-room": "Anda harus online untuk membuat ruang publik",
|
||||
"copied-text-error": "Menyalin ke papan klip gagal. Salinlah secara manual!",
|
||||
"download-successful": "{{descriptor}} diunduh",
|
||||
"click-to-show": "Klik untuk menampilkan",
|
||||
"notifications-permissions-error": "Izin pemberitahuan telah diblokir karena pengguna telah mengabaikan permintaan izin beberapa kali. Hal ini dapat diatur ulang di Info Halaman yang dapat diakses dengan mengeklik ikon kunci di sebelah bilah URL.",
|
||||
"notifications-permissions-error": "Izin pemberitahuan telah diblokir karena pengguna telah mengabaikan permintaan izin beberapa kali. Hal ini dapat diatur ulang di Info Halaman yang dapat diakses dengan mengeklik ikon kunci di sebelah bar URL.",
|
||||
"pair-url-copied-to-clipboard": "Tautan untuk memasangkan perangkat ini disalin ke papan klip",
|
||||
"room-url-copied-to-clipboard": "Tautan ke ruang publik disalin ke papan klip"
|
||||
},
|
||||
@@ -74,42 +73,42 @@
|
||||
"expand_title": "Perluas baris tombol header"
|
||||
},
|
||||
"instructions": {
|
||||
"x-instructions_mobile": "Ketuk untuk mengirim berkas atau ketuk lama untuk mengirim pesan",
|
||||
"x-instructions_mobile": "Ketuk untuk mengirim file atau ketuk lama untuk mengirim pesan",
|
||||
"x-instructions-share-mode_desktop": "Klik untuk mengirim {{descriptor}}",
|
||||
"activate-share-mode-and-other-files-plural": "dan {{count}} berkas lainnya",
|
||||
"activate-share-mode-and-other-files-plural": "dan {{count}} file lainnya",
|
||||
"x-instructions-share-mode_mobile": "Ketuk untuk mengirim {{descriptor}}",
|
||||
"activate-share-mode-base": "Buka PairDrop di perangkat lain untuk berkirim",
|
||||
"no-peers-subtitle": "Pasangkan perangkat atau masuk ke ruang publik agar dapat terdeteksi di jaringan lain",
|
||||
"activate-share-mode-shared-text": "teks bersama",
|
||||
"x-instructions_desktop": "Klik untuk mengirim berkas atau klik kanan untuk mengirim pesan",
|
||||
"no-peers-title": "Buka PairDrop di perangkat lain untuk berkirim berkas",
|
||||
"x-instructions_desktop": "Klik untuk mengirim file atau klik kanan untuk mengirim pesan",
|
||||
"no-peers-title": "Buka PairDrop di perangkat lain untuk berkirim file",
|
||||
"x-instructions_data-drop-peer": "Lepaskan untuk mengirim ke rekan",
|
||||
"x-instructions_data-drop-bg": "Lepaskan untuk memilih penerima",
|
||||
"no-peers_data-drop-bg": "Lepaskan untuk memilih penerima",
|
||||
"activate-share-mode-and-other-file": "dan 1 berkas lainnya",
|
||||
"activate-share-mode-shared-file": "berkas yang dibagikan",
|
||||
"activate-share-mode-shared-files-plural": "sebanyak {{count}} berkas dibagikan",
|
||||
"activate-share-mode-and-other-file": "dan 1 file lainnya",
|
||||
"activate-share-mode-shared-file": "file yang dibagikan",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} file yang dibagikan",
|
||||
"webrtc-requirement": "Untuk menggunakan instance PairDrop ini, WebRTC harus diaktifkan!"
|
||||
},
|
||||
"peer-ui": {
|
||||
"processing": "Memproses…",
|
||||
"click-to-send-share-mode": "Klik untuk mengirim {{descriptor}}",
|
||||
"click-to-send": "Klik untuk mengirim berkas atau klik kanan untuk mengirim pesan",
|
||||
"click-to-send": "Klik untuk mengirim file atau klik kanan untuk mengirim pesan",
|
||||
"waiting": "Menunggu…",
|
||||
"connection-hash": "Untuk memverifikasi keamanan enkripsi end-to-end, bandingkan nomor keamanan ini pada kedua perangkat",
|
||||
"preparing": "Menyiapkan…",
|
||||
"transferring": "Mentransfer…"
|
||||
},
|
||||
"dialogs": {
|
||||
"base64-paste-to-send": "Tempel salinan di sini untuk mengirim {{type}}",
|
||||
"auto-accept-instructions-2": "untuk menerima semua berkas yang dikirim dari perangkat tersebut secara otomatis.",
|
||||
"base64-paste-to-send": "Tempel di sini untuk mengirim {{type}}",
|
||||
"auto-accept-instructions-2": "untuk secara otomatis menerima semua file yang dikirim dari perangkat tersebut.",
|
||||
"receive-text-title": "Pesan Diterima",
|
||||
"edit-paired-devices-title": "Edit Perangkat yg. Dipasangkan",
|
||||
"cancel": "Batal",
|
||||
"auto-accept-instructions-1": "Aktifkan",
|
||||
"pair-devices-title": "Pasangkan Perangkat Scr. Permanen",
|
||||
"download": "Unduh",
|
||||
"title-file": "Berkas",
|
||||
"title-file": "File",
|
||||
"base64-processing": "Memproses…",
|
||||
"decline": "Tolak",
|
||||
"receive-title": "{{descriptor}} Diterima",
|
||||
@@ -122,14 +121,14 @@
|
||||
"copy": "Salin",
|
||||
"file-other-description-image": "dan 1 gambar lainnya",
|
||||
"temporary-public-room-title": "Ruang Publik Sementara",
|
||||
"base64-files": "berkas",
|
||||
"base64-files": "file",
|
||||
"has-sent": "telah mengirim:",
|
||||
"file-other-description-file": "dan 1 berkas lainnya",
|
||||
"file-other-description-file": "dan 1 file lainnya",
|
||||
"close": "Tutup",
|
||||
"system-language": "Bahasa Sistem",
|
||||
"unpair": "Lepas",
|
||||
"title-image": "Gambar",
|
||||
"file-other-description-file-plural": "dan {{count}} berkas lainnya",
|
||||
"file-other-description-file-plural": "dan {{count}} file lainnya",
|
||||
"would-like-to-share": "ingin berbagi",
|
||||
"send-message-to": "Ke:",
|
||||
"language-selector-title": "Pilih Bahasa",
|
||||
@@ -142,43 +141,34 @@
|
||||
"paired-devices-wrapper_data-empty": "Tak ada perangkat yg. dipasangkan.",
|
||||
"enter-key-from-another-device": "Masukkan kunci dari perangkat lain di sini.",
|
||||
"share": "Bagikan",
|
||||
"auto-accept": "terima scr. otomatis",
|
||||
"title-file-plural": "Berkas",
|
||||
"auto-accept": "terima-otomatis",
|
||||
"title-file-plural": "File",
|
||||
"send-message-title": "Kirim Pesan",
|
||||
"input-room-id-on-another-device": "Masukkan ID ruang ini pada perangkat lain",
|
||||
"input-room-id-on-another-device": "Masukkan room ID ini pada perangkat lain",
|
||||
"file-other-description-image-plural": "dan {{count}} gambar lainnya",
|
||||
"enter-room-id-from-another-device": "Masukkan ID ruang dari perangkat lain untuk bergabung.",
|
||||
"enter-room-id-from-another-device": "Masukkan room ID dari perangkat lain untuk bergabung dengan room.",
|
||||
"message_title": "Masukkan pesan untuk dikirim",
|
||||
"pair-devices-qr-code_title": "Klik untuk menyalin tautan untuk memasangkan perangkat ini",
|
||||
"public-room-qr-code_title": "Klik untuk menyalin tautan ke ruang publik",
|
||||
"base64-title-files": "Bagikan Berkas",
|
||||
"base64-title-files": "Bagikan File",
|
||||
"base64-title-text": "Bagikan Teks",
|
||||
"message_placeholder": "Teks",
|
||||
"paired-device-removed": "Perangkat yang dipasangkan telah dihapus.",
|
||||
"approve": "setujui",
|
||||
"share-text-title": "Bagikan Pesan Teks",
|
||||
"share-text-subtitle": "Ubah sebelum pesan dikirimkan:",
|
||||
"share-text-checkbox": "Selalu tampilkan dialog ketika membagikan teks",
|
||||
"close-toast_title": "Tutup notifikasi"
|
||||
"paired-device-removed": "Perangkat yang dipasangkan telah dihapus."
|
||||
},
|
||||
"about": {
|
||||
"claim": "Cara termudah untuk mentransfer berkas lintas perangkat",
|
||||
"claim": "Cara termudah untuk mentransfer file lintas perangkat",
|
||||
"tweet_title": "Tweet tentang PairDrop",
|
||||
"close-about_aria-label": "Tutup Tentang PairDrop",
|
||||
"buy-me-a-coffee_title": "Traktir aku kopi!",
|
||||
"github_title": "PairDrop di GitHub",
|
||||
"faq_title": "Pertanyaan yang sering diajukan",
|
||||
"mastodon_title": "Tulis tentang PairDrop di Mastodon",
|
||||
"bluesky_title": "Ikuti kami di BlueSky",
|
||||
"custom_title": "Ikuti kami",
|
||||
"privacypolicy_title": "Buka kebijakan privasi kami"
|
||||
"faq_title": "Pertanyaan yang sering diajukan"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-transfer-requested": "Permintaan Pentransferan Berkas",
|
||||
"file-transfer-requested": "Permintaan Transfer File",
|
||||
"message-received-plural": "{{count}} Pesan Diterima",
|
||||
"message-received": "Pesan Diterima",
|
||||
"file-received": "Berkas Diterima",
|
||||
"file-received-plural": "Sebanyak {{count}} Berkas Diterima",
|
||||
"file-received": "File Diterima",
|
||||
"file-received-plural": "{{count}} File Diterima",
|
||||
"image-transfer-requested": "Permintaan Transfer Gambar"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"edit-paired-devices_title": "Modifica i dispositivi abbinati",
|
||||
"language-selector_title": "Imposta Lingua",
|
||||
"about_title": "Informazioni su PairDrop",
|
||||
"about_aria-label": "Apri informazioni su PairDrop",
|
||||
"about_aria-label": "Apri Informazioni su PairDrop",
|
||||
"theme-light_title": "Usa sempre il tema chiaro",
|
||||
"edit-share-mode": "Modifica",
|
||||
"expand_title": "Espandi la riga dei pulsanti nell'intestazione"
|
||||
@@ -143,7 +143,6 @@
|
||||
"pairing-cleared": "Tutti i dispositivi sono stati dissociati",
|
||||
"notifications-enabled": "Notifiche attivate",
|
||||
"online-requirement-pairing": "Devi essere online per associare dispositivi",
|
||||
"ios-memory-limit": "L'invio di file a dispositivi iOS è possibile solo 200 MB alla volta",
|
||||
"online-requirement-public-room": "Devi essere online per creare una stanza pubblica",
|
||||
"copied-text-error": "Scrittura negli appunti fallita. Copia manualmente!",
|
||||
"download-successful": "{{descriptor}} scaricato",
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"online": "オンラインに復帰しました",
|
||||
"public-room-left": "公開ルーム{{publicRoomId}}から退出しました",
|
||||
"copied-text": "テキストをクリップボードにコピーしました",
|
||||
"display-name-random-again": "新しいデバイス名に変更されました",
|
||||
"display-name-random-again": "新しいランダムなデバイス名に変更されました",
|
||||
"display-name-changed-permanently": "デバイス名が変更されました",
|
||||
"copied-to-clipboard-error": "コピーできませんでした。手動でコピーしてください。",
|
||||
"pairing-success": "ペアリングしました",
|
||||
@@ -48,7 +48,6 @@
|
||||
"pairing-cleared": "全てのデバイスとのペアリングを解除しました",
|
||||
"notifications-enabled": "通知が有効になりました",
|
||||
"online-requirement-pairing": "ペアリングするにはオンラインである必要があります",
|
||||
"ios-memory-limit": "iOSへのファイル送信は一度に200MBまでしかできません",
|
||||
"online-requirement-public-room": "公開ルームを作成するにはオンラインである必要があります",
|
||||
"copied-text-error": "クリップボードにコピーできませんでした。手動でコピーしてください。",
|
||||
"download-successful": "{{descriptor}}をダウンロードしました",
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"dialogs": {
|
||||
"message_placeholder": "Aḍris",
|
||||
"send-message-title": "Azen izen",
|
||||
"copy": "Nɣel",
|
||||
"title-image-plural": "Tugniwin",
|
||||
"send": "Azen",
|
||||
"title-image": "Tugna",
|
||||
"title-file-plural": "Ifuyla",
|
||||
"base64-text": "aḍris",
|
||||
"auto-accept-instructions-1": "Rmed",
|
||||
"base64-files": "Ifuyla",
|
||||
"hr-or": "NEƔ",
|
||||
"send-message-to": "I:",
|
||||
"title-file": "Afaylu",
|
||||
"close": "Mdel",
|
||||
"accept": "Qbel",
|
||||
"share": "Beṭṭu",
|
||||
"download": "Asider",
|
||||
"language-selector-title": "Sbedd tutlayt",
|
||||
"system-language": "Tutlayt n unagraw",
|
||||
"cancel": "Sefsex"
|
||||
},
|
||||
"about": {
|
||||
"github_title": "PairDrop deg GitHub",
|
||||
"close-about_aria-label": "Mdel Ɣef PairDrop"
|
||||
},
|
||||
"notifications": {
|
||||
"connecting": "Tuqqna…",
|
||||
"connected": "Yeqqen"
|
||||
},
|
||||
"header": {
|
||||
"about_aria-label": "Ldi Ɣef PairDrop",
|
||||
"about_title": "Ɣef PairDrop",
|
||||
"language-selector_title": "Fren tutlayt",
|
||||
"install_title": "Sbedd PairDrop",
|
||||
"edit-share-mode": "Ẓreg"
|
||||
}
|
||||
}
|
||||
@@ -128,7 +128,6 @@
|
||||
"pairing-cleared": "ಎಲ್ಲಾ ಸಾಧನಗಳನ್ನು ಜೋಡಿಯಾಗಿ ತೆಗೆಯಲಾಗಿದೆ",
|
||||
"notifications-enabled": "ಸೂಚನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ",
|
||||
"online-requirement-pairing": "ಸಾಧನಗಳನ್ನು ಜೋಡಿಸಲು ನೀವು ಆನ್ಲೈನ್ ಇರಬೇಕು",
|
||||
"ios-memory-limit": "iOSಗೆ ಫೈಲ್ಗಳನ್ನು ಕಳುಹಿಸುವುದು ಒಂದೇ ಬಾರಿಗೆ 200 MB ವರೆಗೆ ಮಾತ್ರ ಸಾಧ್ಯವಾಗಿದೆ",
|
||||
"online-requirement-public-room": "ಸಾರ್ವಜನಿಕ ಕೊಠಡಿಯನ್ನು ರಚಿಸಲು ನೀವು ಆನ್ಲೈನ್ ಇರಬೇಕು",
|
||||
"room-url-copied-to-clipboard": "ಸಾರ್ವಜನಿಕ ಕೊಠಡಿಯ ಲಿಂಕ್ ಅನ್ನು ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಲಾಗಿದೆ",
|
||||
"copied-text-error": "ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ಬರೆಯುವುದು ವಿಫಲವಾಗಿದೆ. ಕೈಯಾರೆ ನಕಲಿಸಿ!",
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"cancel-share-mode": "취소",
|
||||
"edit-share-mode": "편집",
|
||||
"pair-device_title": "영구적으로 기기 연결하기",
|
||||
"expand_title": "헤더 버튼 펼치기"
|
||||
"expand_title": "머리글 버튼 행 펼치기"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers-subtitle": "장치를 연결하거나 공개 방에 들어가 다른 네트워크에서 검색 가능하게 하세요",
|
||||
@@ -24,161 +24,6 @@
|
||||
"x-instructions_data-drop-bg": "해제하여 수신자 선택하기",
|
||||
"x-instructions-share-mode_desktop": "클릭하여 {{descriptor}} 보내기",
|
||||
"x-instructions-share-mode_mobile": "탭하여 {{descriptor}} 보내기",
|
||||
"activate-share-mode-base": "다른 기기에서 PairDrop을 열어 보내기",
|
||||
"activate-share-mode-and-other-files-plural": "이외 {{count}}개의 다른 파일",
|
||||
"activate-share-mode-and-other-file": "이외 1개의 다른 파일",
|
||||
"x-instructions_data-drop-peer": "놓아서 피어에게 보내기",
|
||||
"activate-share-mode-shared-text": "공유된 텍스트",
|
||||
"activate-share-mode-shared-file": "공유된 파일",
|
||||
"activate-share-mode-shared-files-plural": "공유된 파일 {{count}}개",
|
||||
"webrtc-requirement": "PairDrop 인스턴스를 사용하려면 WebRTC가 활성화되어야 합니다!"
|
||||
},
|
||||
"dialogs": {
|
||||
"base64-processing": "처리 중…",
|
||||
"file-other-description-file": "그리고 파일 1개",
|
||||
"pair-devices-title": "영구적으로 기기 페어링하기",
|
||||
"input-key-on-this-device": "이 키를 다른 장치에서 입력하거나",
|
||||
"scan-qr-code": "QR 코드를 스캔하세요.",
|
||||
"enter-key-from-another-device": "다른 장치의 키를 여기에 입력하세요.",
|
||||
"temporary-public-room-title": "임시 공개 방",
|
||||
"input-room-id-on-another-device": "이 방 ID를 다른 기기에서 입력하세요",
|
||||
"enter-room-id-from-another-device": "방에 참가하려면 다른 장치에 표시된 방 ID를 입력하세요.",
|
||||
"hr-or": "또는",
|
||||
"pair": "페어링",
|
||||
"cancel": "취소",
|
||||
"edit-paired-devices-title": "페어링된 장치 관리",
|
||||
"unpair": "페어링 해제",
|
||||
"paired-device-removed": "페어링된 장치가 제거되었습니다.",
|
||||
"paired-devices-wrapper_data-empty": "페어링된 장치가 없습니다.",
|
||||
"auto-accept": "자동 수신",
|
||||
"auto-accept-instructions-1": "",
|
||||
"auto-accept-instructions-2": "을 활성화하여 이 장치에서 보내는 모든 파일을 자동으로 수신하세요.",
|
||||
"close": "닫기",
|
||||
"join": "참가",
|
||||
"leave": "퇴장",
|
||||
"would-like-to-share": "님이 아래 내용을 공유하고 싶어합니다",
|
||||
"accept": "수락",
|
||||
"decline": "거절",
|
||||
"has-sent": "님이 보냄:",
|
||||
"share": "공유",
|
||||
"download": "다운로드",
|
||||
"send-message-title": "메시지 전송",
|
||||
"send-message-to": "받는 사람:",
|
||||
"message_title": "보낼 메시지를 입력하세요",
|
||||
"message_placeholder": "텍스트",
|
||||
"send": "전송",
|
||||
"receive-text-title": "메시지 받음",
|
||||
"copy": "복사",
|
||||
"base64-title-files": "파일 공유",
|
||||
"base64-title-text": "텍스트 공유",
|
||||
"base64-tap-to-paste": "여기를 눌러 {{type}}을(를) 공유하세요",
|
||||
"base64-paste-to-send": "여기에 클립보드에서 붙여넣어 {{type}}을(를) 공유하세요",
|
||||
"base64-text": "텍스트",
|
||||
"base64-files": "파일",
|
||||
"file-other-description-image": "그리고 이미지 1개",
|
||||
"file-other-description-image-plural": "그리고 이미지 {{count}}개",
|
||||
"file-other-description-file-plural": "그리고 파일 {{count}}개",
|
||||
"title-image": "이미지",
|
||||
"title-file": "파일",
|
||||
"title-image-plural": "이미지",
|
||||
"title-file-plural": "파일",
|
||||
"receive-title": "{{descriptor}} 받음",
|
||||
"download-again": "다시 다운로드",
|
||||
"language-selector-title": "언어 설정",
|
||||
"system-language": "시스템 언어",
|
||||
"public-room-qr-code_title": "클릭하여 공개 방 링크를 복사하세요",
|
||||
"pair-devices-qr-code_title": "클릭하여 이 장치와 페어링할 수 있는 링크를 복사하세요",
|
||||
"share-text-title": "텍스트 메시지 공유",
|
||||
"approve": "확인",
|
||||
"share-text-subtitle": "보내기 전에 메시지 수정:",
|
||||
"share-text-checkbox": "텍스트를 공유하기 전에 항상 이 창 띄우기",
|
||||
"close-toast_title": "알림 닫기"
|
||||
},
|
||||
"notifications": {
|
||||
"pairing-tabs-error": "브라우저 탭 2개를 페어링할 수 없습니다",
|
||||
"display-name-changed-permanently": "표시 이름이 영구적으로 변경되었습니다",
|
||||
"display-name-changed-temporarily": "표시 이름이 이 세션에 대하여 변경되었습니다",
|
||||
"display-name-random-again": "표시 이름이 다시 무작위로 생성됩니다",
|
||||
"download-successful": "{{descriptor}}을(를) 다운로드했습니다",
|
||||
"pairing-success": "장치가 페어링되었습니다",
|
||||
"pairing-not-persistent": "이 장치와의 페어링이 해제될 수 있습니다",
|
||||
"pairing-key-invalid": "유효하지 않은 키입니다",
|
||||
"pairing-key-invalidated": "키 {{key}} 만료됨",
|
||||
"pairing-cleared": "모든 장치와의 페어링을 해제했습니다",
|
||||
"public-room-id-invalid": "유효하지 않은 방 ID입니다",
|
||||
"public-room-left": "공개 방 {{publicRoomId}}에서 퇴장했습니다",
|
||||
"copied-to-clipboard": "클립보드에 복사했습니다",
|
||||
"pair-url-copied-to-clipboard": "이 장치와 페어링할 수 있는 링크를 복사했습니다",
|
||||
"copied-to-clipboard-error": "복사하지 못했습니다. 직접 복사하세요.",
|
||||
"text-content-incorrect": "텍스트가 올바르지 않습니다",
|
||||
"file-content-incorrect": "파일이 올바르지 않습니다",
|
||||
"clipboard-content-incorrect": "클립보드 내용이 올바르지 않습니다",
|
||||
"room-url-copied-to-clipboard": "공개 방 링크를 클립보드에 복사했습니다",
|
||||
"notifications-permissions-error": "권한 요청을 거부하여 알림을 사용할 수 없습니다. 주소 바 옆 자물쇠 아이콘의 페이지 설정에서 초기화할 수 있습니다.",
|
||||
"notifications-enabled": "알림을 켰습니다",
|
||||
"link-received": "{{name}} 님이 보낸 링크 - 클릭하여 열어 보세요",
|
||||
"message-received": "{{name}} 님이 보낸 메시지 - 클릭하여 복사하세요",
|
||||
"click-to-download": "클릭하여 다운로드하세요",
|
||||
"request-title": "{{name}} 님이 {{count}}개의 {{descriptor}}을(를) 보내고 싶어합니다",
|
||||
"click-to-show": "클릭하여 표시하세요",
|
||||
"copied-text": "텍스트를 클립보드에 복사했습니다",
|
||||
"copied-text-error": "클립보드에 복사하지 못했습니다. 직접 복사하세요!",
|
||||
"offline": "오프라인 상태입니다",
|
||||
"online": "온라인이 되었습니다",
|
||||
"connected": "연결되었습니다",
|
||||
"online-requirement-pairing": "장치와 페어링하려면 온라인 상태여야 합니다",
|
||||
"online-requirement-public-room": "공개 방을 만드려면 온라인 상태여야 합니다",
|
||||
"connecting": "연결 중…",
|
||||
"files-incorrect": "파일이 올바르지 않습니다",
|
||||
"file-transfer-completed": "파일 전송 완료",
|
||||
"ios-memory-limit": "iOS로는한 번에 최대 200 MB까지만 전송할 수 있습니다",
|
||||
"message-transfer-completed": "메시지 전송 완료",
|
||||
"unfinished-transfers-warning": "끝나지 않은 전송이 있습니다. 정말로 PairDrop을 닫으시겠습니까?",
|
||||
"rate-limit-join-key": "횟수 제한에 도달했습니다. 10초 후 다시 시도해 주세요.",
|
||||
"selected-peer-left": "선택한 장치가 퇴장하였습니다"
|
||||
},
|
||||
"footer": {
|
||||
"known-as": "당신의 이름:",
|
||||
"display-name_data-placeholder": "불러오는 중…",
|
||||
"display-name_title": "기기 이름 영구적으로 설정하기",
|
||||
"discovery": "아래에서 발견 가능:",
|
||||
"on-this-network": "이 네트워크",
|
||||
"on-this-network_title": "이 네트워크에 있는 모든 사람에게 발견될 수 있습니다.",
|
||||
"paired-devices": "페어링된 기기",
|
||||
"paired-devices_title": "네트워크에 관계 없이 항상 페어링된 기기에서 발견될 수 있습니다.",
|
||||
"public-room-devices": "방 {{roomId}}",
|
||||
"public-room-devices_title": "네트워크에 관계 없이 이 공개 방에 있는 모든 기기에서 발견될 수 있습니다.",
|
||||
"traffic": "WebRTC가 사용 불가능한 경우",
|
||||
"routed": "트래픽이",
|
||||
"webrtc": "서버를 경유합니다."
|
||||
},
|
||||
"about": {
|
||||
"close-about_aria-label": "PairDrop에 대하여 닫기",
|
||||
"claim": "기기 간 파일을 주고받는 가장 쉬운 방법",
|
||||
"github_title": "GitHub의 PairDrop",
|
||||
"buy-me-a-coffee_title": "Buy me a coffee!",
|
||||
"tweet_title": "PairDrop에 대해 트윗하기",
|
||||
"mastodon_title": "PairDrop에 대해 Mastodon에 글 남기기",
|
||||
"bluesky_title": "BlueSky에서 팔로우하기",
|
||||
"custom_title": "팔로우하기",
|
||||
"privacypolicy_title": "개인정보처리방침 열기",
|
||||
"faq_title": "자주 묻는 질문"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "파일 받음",
|
||||
"file-transfer-requested": "파일 전송 요청 받음",
|
||||
"image-transfer-requested": "이미지 전송 요청 받음",
|
||||
"message-received": "메시지 받음",
|
||||
"message-received-plural": "메시지 {{count}}개 받음",
|
||||
"file-received-plural": "파일 {{count}}개 받음"
|
||||
},
|
||||
"peer-ui": {
|
||||
"click-to-send-share-mode": "클릭하여 {{descriptor}} 전송하기",
|
||||
"click-to-send": "클릭하여 파일을 보내거나 오른쪽 클릭하여 메시지 보내기",
|
||||
"waiting": "대기 중…",
|
||||
"processing": "처리 중…",
|
||||
"connection-hash": "종단간 암호화의 보안을 검증하려면 양쪽의 장치에서 이 보안 번호를 비교하세요",
|
||||
"preparing": "준비 중…",
|
||||
"transferring": "전송 중…"
|
||||
"activate-share-mode-base": "다른 기기에서 PairDrop을 열어 보내기"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,7 +116,6 @@
|
||||
"request-title": "{{name}} ønsker å overføre {{count}} {{descriptor}}",
|
||||
"message-received": "Melding mottatt av {{name}} - Klikk for å åpne",
|
||||
"files-incorrect": "Filene er uriktige",
|
||||
"ios-memory-limit": "Forsendelse av filer til iOS er kun mulig opptil 200 MB av gangen",
|
||||
"unfinished-transfers-warning": "Lukk med ufullførte overføringer?",
|
||||
"rate-limit-join-key": "Forsøksgrense overskredet. Vent 10 sek. og prøv igjen."
|
||||
},
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
"pairing-cleared": "Alle apparaten ontkoppeld",
|
||||
"notifications-enabled": "Meldingen geactiveerd",
|
||||
"online-requirement-pairing": "U moet online zijn om apparaten te koppelen",
|
||||
"ios-memory-limit": "Bestandsoverdrachten naar iOS kunnen slechts met 200 MB per keer",
|
||||
"online-requirement-public-room": "U moet online zijn om een openbare kamer te maken",
|
||||
"copied-text-error": "Schrijven naar klembord mislukt. Kopieer handmatig!",
|
||||
"download-successful": "{{descriptor}} downloaden",
|
||||
|
||||
@@ -1,184 +0,0 @@
|
||||
{
|
||||
"header": {
|
||||
"language-selector_title": "Språk",
|
||||
"theme-light_title": "Bruk alltid lyst tema",
|
||||
"join-public-room_title": "Bli med i offentlege rom midlertidig",
|
||||
"cancel-share-mode": "Avbryt",
|
||||
"expand_title": "Utvid hovudknappelinja",
|
||||
"about_aria-label": "Opne Om PairDrop",
|
||||
"about_title": "Om PairDrop",
|
||||
"theme-dark_title": "Bruk alltid mørkt tema",
|
||||
"notification_title": "Slå på varslingar",
|
||||
"install_title": "Installer PairDrop",
|
||||
"pair-device_title": "Par einingane dine permanent",
|
||||
"edit-paired-devices_title": "Rediger para einingar",
|
||||
"edit-share-mode": "Rediger",
|
||||
"theme-auto_title": "Endre tema til systemet automatisk"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers_data-drop-bg": "Slepp for å velje mottakar",
|
||||
"no-peers-title": "Opne PairDrop på andre einingar for å sende filer",
|
||||
"no-peers-subtitle": "Par einingar eller gå inn i eit offentleg rom for å bli søkbar på andre nettverk",
|
||||
"x-instructions-share-mode_desktop": "Klikk for å sende {{descriptor}}",
|
||||
"activate-share-mode-shared-file": "delt fil",
|
||||
"x-instructions_desktop": "Klikk for å sende filer, eller høgreklikk for å sende ei melding",
|
||||
"x-instructions_mobile": "Trykk for å sende filer eller trykk-og-hald for å sende ei melding",
|
||||
"x-instructions_data-drop-peer": "Slepp for å sende til part",
|
||||
"x-instructions_data-drop-bg": "Slepp for å sende til mottakar",
|
||||
"x-instructions-share-mode_mobile": "Trykk for å sende {{descriptor}}",
|
||||
"activate-share-mode-base": "Opne PairDrop på andre einingar for å sende",
|
||||
"activate-share-mode-shared-text": "delt tekst",
|
||||
"activate-share-mode-and-other-file": "og 1 anna fil",
|
||||
"activate-share-mode-and-other-files-plural": "og {{count}} andre filer",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} delte filer",
|
||||
"webrtc-requirement": "For å bruke denne PairDrop-økta, må WebRTC vere aktivt!"
|
||||
},
|
||||
"footer": {
|
||||
"on-this-network": "på dette nettverket",
|
||||
"paired-devices": "med para einingar",
|
||||
"paired-devices_title": "Du kan bli funnen av para einingar til ei kvar tid uavhengig av nettverket.",
|
||||
"known-as": "Du er kjend som:",
|
||||
"display-name_title": "Rediger einingsnamnet ditt permanent",
|
||||
"discovery": "Du kan bli funnen:",
|
||||
"traffic": "Trafikken er",
|
||||
"public-room-devices": "i rom {{roomId}}",
|
||||
"display-name_data-placeholder": "Lastar…",
|
||||
"on-this-network_title": "Du kan bli funnen av alle på dette nettverket.",
|
||||
"webrtc": "Om WebRTC ikkje er tilgjengeleg.",
|
||||
"public-room-devices_title": "Du kan bli funnen av einingar i dette offentlege rommet uavhengig av nettverket.",
|
||||
"routed": "ruta gjennom denne tenaren"
|
||||
},
|
||||
"dialogs": {
|
||||
"pair-devices-title": "Par einingar permanent",
|
||||
"scan-qr-code": "eller skann QR-koden.",
|
||||
"auto-accept-instructions-1": "Aktiver",
|
||||
"auto-accept": "auto-aksepter",
|
||||
"leave": "Forlat",
|
||||
"would-like-to-share": "har lyst til å dele",
|
||||
"accept": "Aksepter",
|
||||
"share": "Del",
|
||||
"message_title": "Legg inn meldinga du vil sende",
|
||||
"message_placeholder": "Tekst",
|
||||
"send": "Send",
|
||||
"base64-title-files": "Dele filer",
|
||||
"base64-text": "tekst",
|
||||
"file-other-description-image": "og 1 anna bilete",
|
||||
"file-other-description-file": "og 1 anna fil",
|
||||
"title-image-plural": "Bilete",
|
||||
"share-text-title": "Del tekstmelding",
|
||||
"share-text-subtitle": "Rediger melding før sending:",
|
||||
"share-text-checkbox": "Alltid vis denne dialogen når du delar tekst",
|
||||
"pair": "Par",
|
||||
"input-key-on-this-device": "Legg inn denne nøkkelen på ei anna eining",
|
||||
"temporary-public-room-title": "Midlertidig offentleg rom",
|
||||
"cancel": "Avbryt",
|
||||
"has-sent": "har sendt:",
|
||||
"enter-key-from-another-device": "Legg inn nøkkel frå anna eining her.",
|
||||
"send-message-title": "Send melding",
|
||||
"input-room-id-on-another-device": "Legg inn denne rom-identen på ei anna eining",
|
||||
"enter-room-id-from-another-device": "Legg inn rom-ident frå anna eining for å bli med inn i rommet.",
|
||||
"close": "Lukk",
|
||||
"join": "Bli med",
|
||||
"base64-title-text": "Dele tekst",
|
||||
"hr-or": "ELLER",
|
||||
"unpair": "Slett paring",
|
||||
"send-message-to": "Til:",
|
||||
"edit-paired-devices-title": "Rediger para einingar",
|
||||
"paired-devices-wrapper_data-empty": "Ingen para einingar.",
|
||||
"auto-accept-instructions-2": "for å automatisk akseptere alle filer som er sendt til denne eininga.",
|
||||
"decline": "Avslå",
|
||||
"download": "Last ned",
|
||||
"receive-text-title": "Melding mottatt",
|
||||
"file-other-description-image-plural": "og {{count}} andre bilete",
|
||||
"copy": "Kopier",
|
||||
"base64-processing": "Handsamar…",
|
||||
"base64-files": "filer",
|
||||
"language-selector-title": "Sett språk",
|
||||
"system-language": "Systemspråk",
|
||||
"base64-tap-to-paste": "Trykk her for å dele {{type}}",
|
||||
"file-other-description-file-plural": "og {{count}} andre filer",
|
||||
"base64-paste-to-send": "Lim inn her for å dele {{type}}",
|
||||
"receive-title": "{{descriptor}} motteke",
|
||||
"pair-devices-qr-code_title": "Klikk for å kopiere lenkje til å pare denne eininga",
|
||||
"title-image": "Bilete",
|
||||
"title-file": "Fil",
|
||||
"title-file-plural": "Filer",
|
||||
"download-again": "Last ned igjen",
|
||||
"public-room-qr-code_title": "Klikk for å kopiere lenkje til offentleg rom",
|
||||
"close-toast_title": "Lukk varslinga",
|
||||
"approve": "godta",
|
||||
"paired-device-removed": "Para eining har blitt fjerna."
|
||||
},
|
||||
"about": {
|
||||
"claim": "Den enklaste måten å sende filer mellom einingar",
|
||||
"privacypolicy_title": "Opne personvernerklæringa vår",
|
||||
"faq_title": "Ofte spurde spørsmål",
|
||||
"close-about_aria-label": "Lukk Om PairDrop",
|
||||
"buy-me-a-coffee_title": "Kjøp meg ein kaffi!",
|
||||
"github_title": "PairDrop på GitHub",
|
||||
"tweet_title": "Tvitre om PairDrop",
|
||||
"mastodon_title": "Skriv om PairDrop på Masrodon",
|
||||
"bluesky_title": "Følg oss på BlueSky",
|
||||
"custom_title": "Følg oss"
|
||||
},
|
||||
"notifications": {
|
||||
"display-name-changed-permanently": "Profilnamnet er endra permanent",
|
||||
"pairing-not-persistent": "Para einingar er ikkje vedvarande",
|
||||
"pairing-success": "Einingane er para",
|
||||
"pairing-key-invalidated": "Nøkkel {{key}} er oppheva",
|
||||
"pairing-cleared": "Alle einingar er upara",
|
||||
"public-room-left": "Forlot offentleg rom {{publicRoomId}}",
|
||||
"pair-url-copied-to-clipboard": "Lenkje for å pare denne eininga er kopiert til utklyppstavla",
|
||||
"room-url-copied-to-clipboard": "Lenkje til offentleg rom er kopiert til utklyppstavla",
|
||||
"clipboard-content-incorrect": "Utklyppstavle-innhald er ikkje rett",
|
||||
"notifications-enabled": "Varslingar skrudd på",
|
||||
"link-received": "Lenkje motteke av {{name}} - Klikk for å opne",
|
||||
"click-to-download": "Klikk for å laste ned",
|
||||
"click-to-show": "Klikk for å vise",
|
||||
"online": "Du er tilkopla igjen",
|
||||
"connected": "Tilkopla",
|
||||
"copied-text": "Kopiert tekst til utklyppstavla",
|
||||
"online-requirement-public-room": "Du må vere tilkopla for å lage eit offentleg rom",
|
||||
"files-incorrect": "Filene er feil",
|
||||
"file-transfer-completed": "Filoverføring er fullført",
|
||||
"ios-memory-limit": "Sending av filer til iOS er berre mogleg opp til 200 MB på ein gong",
|
||||
"rate-limit-join-key": "Grense nådd. Vent 10 sekund og prøv om att.",
|
||||
"selected-peer-left": "Vald brukar har forlatt",
|
||||
"copied-text-error": "Skriving til utklyppsverktøy feila, kopier manuelt!",
|
||||
"connecting": "Koplar til…",
|
||||
"offline": "Du er ikkje tilkopla",
|
||||
"online-requirement-pairing": "Du må vere tilkopla for å pare einingar",
|
||||
"message-transfer-completed": "Meldingsoverføring er ferdig",
|
||||
"unfinished-transfers-warning": "Det er uferdige overføringar. Er du sikker på at du vil late att PairDrop?",
|
||||
"display-name-changed-temporarily": "Profilnamnet er endra for denne sesjonen",
|
||||
"display-name-random-again": "Profilnamnet er tilfeldig generert igjen",
|
||||
"download-successful": "{{descriptor}} lasta ned",
|
||||
"pairing-tabs-error": "Å pare to nettleser-faner er ikkje mogleg",
|
||||
"pairing-key-invalid": "Ugyldig nøkkel",
|
||||
"public-room-id-invalid": "Ugyldig rom-ident",
|
||||
"copied-to-clipboard": "Kopiert til utklyppstavle",
|
||||
"copied-to-clipboard-error": "Kopiering ikkje mogleg. Kopier manuelt.",
|
||||
"text-content-incorrect": "Tekstinnhald er feil",
|
||||
"file-content-incorrect": "Filinnhald er ikkje rett",
|
||||
"notifications-permissions-error": "Varslingstillatelse er blokkert fordi brukaren har avvist tillatelsesførespurnaden fleire gonger. Dette kan stillast tilbake i Sideinformasjon, som kan opnast ved å klikke på låsikonet ved sida av URL-feltet.",
|
||||
"message-received": "Melding motteke av {{name}} - Klikk for å kopiere",
|
||||
"request-title": "{{name}} vil overføre {{count}} {{descriptor}}"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "Fil mottatt",
|
||||
"image-transfer-requested": "Biletoverføring førespurd",
|
||||
"file-received-plural": "{{count}} Filer Mottatt",
|
||||
"message-received-plural": "{{count}} Meldingar motteke",
|
||||
"file-transfer-requested": "Filoverføring førespurd",
|
||||
"message-received": "Melding mottatt"
|
||||
},
|
||||
"peer-ui": {
|
||||
"connection-hash": "For å verifisere sikkerheita til ende-til-ende krypteringa, samanlikn dette sikkerheitsnummeret på begge einingane",
|
||||
"preparing": "Førebur…",
|
||||
"transferring": "Overfører…",
|
||||
"click-to-send-share-mode": "Klikk for å sende {{descriptor}}",
|
||||
"click-to-send": "Klikk for å sende filer eller høgreklikk for å sende ei melding",
|
||||
"processing": "Prosesserar…",
|
||||
"waiting": "Ventar…"
|
||||
}
|
||||
}
|
||||
@@ -12,8 +12,7 @@
|
||||
"edit-paired-devices_title": "Editar dispositivos emparelhados",
|
||||
"join-public-room_title": "Entrar em uma sala pública temporariamente",
|
||||
"cancel-share-mode": "Cancelar",
|
||||
"edit-share-mode": "Editar",
|
||||
"expand_title": "Expandir linha de botões de cabeçalho"
|
||||
"edit-share-mode": "Editar"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers_data-drop-bg": "Solte para selecionar o destinatário",
|
||||
@@ -115,11 +114,7 @@
|
||||
"github_title": "PairDrop no GitHub",
|
||||
"buy-me-a-coffee_title": "Me compre um café!",
|
||||
"tweet_title": "Tweet sobre o PairDrop",
|
||||
"faq_title": "Perguntas frequentes",
|
||||
"mastodon_title": "Escrever sobre PairDrop no Mastodon",
|
||||
"bluesky_title": "Siga-nos no BlueSky",
|
||||
"custom_title": "Siga-nos",
|
||||
"privacypolicy_title": "Abra nossa política de privacidade"
|
||||
"faq_title": "Perguntas frequentes"
|
||||
},
|
||||
"notifications": {
|
||||
"display-name-changed-permanently": "O nome de exibição é alterado permanentemente",
|
||||
@@ -158,7 +153,6 @@
|
||||
"connecting": "Conectando…",
|
||||
"files-incorrect": "Os arquivos estão incorretos",
|
||||
"file-transfer-completed": "Transferência de arquivo concluída",
|
||||
"ios-memory-limit": "Enviar arquivos para iOS só é possível até 200 MB de uma vez",
|
||||
"message-transfer-completed": "Transferência de mensagem concluída",
|
||||
"unfinished-transfers-warning": "Há transferências inacabadas. Tem certeza de que deseja fechar o PairDrop?",
|
||||
"rate-limit-join-key": "Limite de taxa atingido. Aguarde 10 segundos e tente novamente.",
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
"pairing-cleared": "Toate dispozitivele sunt decuplate",
|
||||
"notifications-enabled": "Notificări activate",
|
||||
"online-requirement-pairing": "Trebuie să fiți online pentru a asocia dispozitivele",
|
||||
"ios-memory-limit": "Trimiterea de fișiere pe iOS este posibilă doar până la 200 MB simultan",
|
||||
"online-requirement-public-room": "Trebuie să fiți online pentru a crea o cameră publică",
|
||||
"copied-text-error": "Scrierea în clipboard a eșuat. Copiați manual!",
|
||||
"download-successful": "{{descriptor}} descărcat",
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
{
|
||||
"header": {
|
||||
"about_aria-label": "О PairDrop",
|
||||
"about_aria-label": "Открыть страницу \"О сервисе\"",
|
||||
"pair-device_title": "Связать ваши устройства навсегда",
|
||||
"install_title": "Установить PairDrop",
|
||||
"cancel-share-mode": "Выполнено",
|
||||
"edit-paired-devices_title": "Редактировать связанные устройства",
|
||||
"notification_title": "Включить уведомления",
|
||||
"about_title": "О PairDrop",
|
||||
"about_title": "О сервисе",
|
||||
"theme-auto_title": "Адаптировать тему к системной автоматически",
|
||||
"theme-dark_title": "Всегда использовать темную тему",
|
||||
"theme-light_title": "Всегда использовать светлую тему",
|
||||
"join-public-room_title": "Войти на время в публичную комнату",
|
||||
"language-selector_title": "Установить язык",
|
||||
"edit-share-mode": "Редактировать",
|
||||
"expand_title": "Развернуть ряд кнопок заголовка"
|
||||
"language-selector_title": "Выбрать язык",
|
||||
"edit-share-mode": "Редактировать"
|
||||
},
|
||||
"instructions": {
|
||||
"x-instructions_desktop": "Нажмите, чтобы отправить файлы, или щелкните правой кнопкой мыши, чтобы отправить сообщение",
|
||||
@@ -27,11 +26,7 @@
|
||||
"no-peers-subtitle": "Свяжите устройства или войдите в публичную комнату, чтобы вас могли обнаружить из других сетей",
|
||||
"activate-share-mode-and-other-files-plural": "и {{count}} других файлов",
|
||||
"activate-share-mode-base": "Откройте PairDrop на других устройствах, чтобы отправить",
|
||||
"activate-share-mode-shared-text": "общий текст",
|
||||
"activate-share-mode-and-other-file": "и 1 другой файл",
|
||||
"activate-share-mode-shared-file": "доступный файл",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} доступных файлов",
|
||||
"webrtc-requirement": "Включите WebRTC, чтобы пользоваться этой копией PairDrop!"
|
||||
"activate-share-mode-shared-text": "общий текст"
|
||||
},
|
||||
"footer": {
|
||||
"display-name_data-placeholder": "Загрузка…",
|
||||
@@ -60,13 +55,13 @@
|
||||
"download": "Скачать",
|
||||
"receive-text-title": "Сообщение получено",
|
||||
"send": "Отправить",
|
||||
"send-message-to": "Кому:",
|
||||
"send-message-to": "Отправить сообщение",
|
||||
"send-message-title": "Отправить сообщение",
|
||||
"copy": "Копировать",
|
||||
"base64-files": "файлы",
|
||||
"base64-paste-to-send": "Вставьте, чтобы поделиться {{type}}",
|
||||
"base64-paste-to-send": "Вставьте здесь, чтобы отправить {{type}}",
|
||||
"base64-processing": "Обработка…",
|
||||
"base64-tap-to-paste": "Нажмите, чтобы поделиться {{type}}",
|
||||
"base64-tap-to-paste": "Прикоснитесь здесь, чтобы вставить {{type}}",
|
||||
"base64-text": "текст",
|
||||
"title-file": "Файл",
|
||||
"title-file-plural": "Файлы",
|
||||
@@ -100,14 +95,7 @@
|
||||
"pair-devices-qr-code_title": "Нажмите, чтобы скопировать ссылку для привязки этого устройства",
|
||||
"public-room-qr-code_title": "Нажмите, чтобы скопировать ссылку на публичную комнату",
|
||||
"message_placeholder": "Текст",
|
||||
"paired-device-removed": "Связанное устройство удалено.",
|
||||
"close-toast_title": "Закрыть уведомление",
|
||||
"share-text-checkbox": "Всегда показывать это окно перед отправкой",
|
||||
"base64-title-text": "Поделиться текстом",
|
||||
"base64-title-files": "Поделиться файлами",
|
||||
"share-text-subtitle": "Отредактировать сообщение перед отправкой:",
|
||||
"approve": "одобрить",
|
||||
"share-text-title": "Поделиться сообщением"
|
||||
"paired-device-removed": "Связанное устройство удалено."
|
||||
},
|
||||
"about": {
|
||||
"close-about-aria-label": "Закрыть страницу \"О сервисе\"",
|
||||
@@ -116,11 +104,7 @@
|
||||
"buy-me-a-coffee_title": "Купить мне кофе!",
|
||||
"github_title": "PairDrop на GitHub",
|
||||
"tweet_title": "Твит о PairDrop",
|
||||
"faq_title": "Часто задаваемые вопросы",
|
||||
"mastodon_title": "Расскажите о PairDrop на Mastodon",
|
||||
"custom_title": "Подпишитесь на нас",
|
||||
"bluesky_title": "Подписаться на BlueSky",
|
||||
"privacypolicy_title": "Открыть нашу политику приватности"
|
||||
"faq_title": "Часто задаваемые вопросы"
|
||||
},
|
||||
"notifications": {
|
||||
"display-name-changed-permanently": "Отображаемое имя было изменено навсегда",
|
||||
@@ -140,7 +124,6 @@
|
||||
"online-requirement": "Для сопряжения устройств вам нужно быть в сети.",
|
||||
"files-incorrect": "Файлы неверны",
|
||||
"message-transfer-completed": "Передача сообщения завершена",
|
||||
"ios-memory-limit": "Отправка файлов на iOS устройства возможна только до 200 МБ за один раз",
|
||||
"selected-peer-left": "Выбранный узел вышел",
|
||||
"request-title": "{{name}} хотел бы передать {{count}} {{descriptor}}",
|
||||
"rate-limit-join-key": "Достигнут предел скорости. Подождите 10 секунд и повторите попытку.",
|
||||
|
||||
@@ -1,184 +0,0 @@
|
||||
{
|
||||
"header": {
|
||||
"install_title": "Nainštalovať PairDrop",
|
||||
"about_title": "O službe PairDrop",
|
||||
"language-selector_title": "Nastaviť jazyk",
|
||||
"about_aria-label": "Otvoriť \"O službe PairDrop\"",
|
||||
"theme-auto_title": "Automaticky prispôsobiť tému systému",
|
||||
"edit-share-mode": "Upraviť",
|
||||
"expand_title": "Rozbaliť riadok tlačítka záhlavia",
|
||||
"theme-light_title": "Vždy použiť svetlú tému",
|
||||
"theme-dark_title": "Vždy použiť tmavú tému",
|
||||
"notification_title": "Povoliť upozornenia",
|
||||
"pair-device_title": "Spárovať zariadenia natrvalo",
|
||||
"edit-paired-devices_title": "Upraviť spárované zariadenia",
|
||||
"join-public-room_title": "Dočasne sa pripojiť k verejnej miestnosti",
|
||||
"cancel-share-mode": "Zrušiť"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers_data-drop-bg": "Pustite pre vybratie príjemcu",
|
||||
"no-peers-title": "Otvorte PairDrop na iných zariadeniach pre posielanie súborov",
|
||||
"x-instructions_desktop": "Kliknite pre poslanie súborov alebo kliknite pravým tlačidlom pre poslanie správy",
|
||||
"x-instructions_data-drop-peer": "Pustite pre odoslanie",
|
||||
"x-instructions_data-drop-bg": "Pustením vyberiete príjemcu",
|
||||
"activate-share-mode-and-other-file": "a 1 ďalší súbor",
|
||||
"activate-share-mode-and-other-files-plural": "a {{count}} ďalších súborov",
|
||||
"activate-share-mode-shared-text": "zdieľaný text",
|
||||
"activate-share-mode-shared-file": "zdieľaný súbor",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} zdieľaných súborov",
|
||||
"no-peers-subtitle": "Spárujte zariadenia alebo vstúpte do verejnej miestnosti pre viditeľnosť v iných sieťach",
|
||||
"x-instructions_mobile": "Ťuknite pre poslanie súboru alebo podržte pre poslanie správy",
|
||||
"webrtc-requirement": "Pre použitie PairDrop-u je nevyhnutné povoliť WebRTC!",
|
||||
"x-instructions-share-mode_desktop": "Kliknutím odošlete {{descriptor}}",
|
||||
"x-instructions-share-mode_mobile": "Ťuknutím odošlete {{descriptor}}",
|
||||
"activate-share-mode-base": "Pre odoslanie otvorte PairDrop na iných zariadeniach"
|
||||
},
|
||||
"footer": {
|
||||
"known-as": "Si pomenovaný ako:",
|
||||
"display-name_data-placeholder": "Načítava sa…",
|
||||
"display-name_title": "Trvalo upraviť názov zariadenia",
|
||||
"discovery": "Môžeš byť objevený:",
|
||||
"on-this-network": "v tejto sieti",
|
||||
"on-this-network_title": "Ste viditeľný pre kohokoľvek v tejto sieti.",
|
||||
"paired-devices_title": "Pre spárované zariadenia ste viditeľný vždy, nezávisle od siete.",
|
||||
"public-room-devices": "v miestnosti {{roomId}}",
|
||||
"paired-devices": "pomocou spárovaných zariadení",
|
||||
"public-room-devices_title": "Môžeš byť objavený zariadeniami v tejto verejnej miestnosti. Nezávisle od siete, ku ktorej si pripojený.",
|
||||
"traffic": "Premávka je",
|
||||
"routed": "presmerovaný cez server",
|
||||
"webrtc": "ak WebRTC nie je k dispozícii."
|
||||
},
|
||||
"dialogs": {
|
||||
"base64-title-text": "Zdielať text",
|
||||
"base64-text": "text",
|
||||
"send": "Odoslať",
|
||||
"public-room-qr-code_title": "Kliknutím skopíruješ odkaz do verejnej miestnosti",
|
||||
"pair-devices-title": "Spáruj zariadenia natrvalo",
|
||||
"temporary-public-room-title": "Dočasná verejná miestnosť",
|
||||
"input-key-on-this-device": "Zadaj tento kľúč na druhom zariadení",
|
||||
"input-room-id-on-another-device": "Zadaj toto ID miestnosti na druhom zariadení",
|
||||
"scan-qr-code": "alebo naskenuj QR kód.",
|
||||
"enter-key-from-another-device": "Vlož kľúč z druhého zariadenia.",
|
||||
"enter-room-id-from-another-device": "Na pripojenie k miestnosti, zadaj ID miestnosti druhého zariadenia.",
|
||||
"hr-or": "ALEBO",
|
||||
"pair": "Spárovať",
|
||||
"cancel": "Zrušiť",
|
||||
"edit-paired-devices-title": "Upraviť spárované zariadenia",
|
||||
"unpair": "Zrušiť spárovanie",
|
||||
"paired-device-removed": "Spárované zariadenie bolo odstránené.",
|
||||
"paired-devices-wrapper_data-empty": "Žiadne spárované zariadenie.",
|
||||
"auto-accept-instructions-1": "Aktivovať",
|
||||
"auto-accept": "Automaticky prijať",
|
||||
"auto-accept-instructions-2": "Automaticky príjmeš všetky súbory odoslané z tohto zariadenia.",
|
||||
"close": "Zavrieť",
|
||||
"send-message-title": "Poslať správu",
|
||||
"send-message-to": "Komu:",
|
||||
"join": "Pripojiť",
|
||||
"leave": "Odpojiť",
|
||||
"would-like-to-share": "by rád zdieľal",
|
||||
"accept": "Prijať",
|
||||
"decline": "Odmietnuť",
|
||||
"has-sent": "odoslal:",
|
||||
"share": "Zdielať",
|
||||
"download": "Stiahnuť",
|
||||
"message_placeholder": "Text",
|
||||
"message_title": "Sem vlož správu",
|
||||
"copy": "Kopírovať",
|
||||
"base64-title-files": "Zdielať súbory",
|
||||
"base64-processing": "Pracujem…",
|
||||
"base64-tap-to-paste": "Ťuknutím sem zdieľaj {{type}}",
|
||||
"base64-paste-to-send": "Tu vlož obsah schránky, ak ho chceš zdielať {{type}}",
|
||||
"base64-files": "súbory",
|
||||
"file-other-description-image": "a 1 ďalší obrázok",
|
||||
"file-other-description-file": "a 1 ďalší súbor",
|
||||
"file-other-description-image-plural": "a {{count}} ďalších obrázkov",
|
||||
"file-other-description-file-plural": "a {{count}} ďalších súborov",
|
||||
"title-image": "Obrázok",
|
||||
"title-file": "Súbor",
|
||||
"title-image-plural": "Obrázky",
|
||||
"title-file-plural": "Súbory",
|
||||
"receive-title": "{{descriptor}} Prijaté",
|
||||
"download-again": "Stiahnuť znova",
|
||||
"language-selector-title": "Nastaviť jazyk",
|
||||
"system-language": "Jazyk systému",
|
||||
"pair-devices-qr-code_title": "Kliknutím skopíruješ odkaz pre spárovanie tohto zariadenia",
|
||||
"approve": "schváliť",
|
||||
"share-text-title": "Zdielať textovú správu",
|
||||
"share-text-subtitle": "Upraviť správu pred odoslaním:",
|
||||
"share-text-checkbox": "Pri zdieľaní textu vždy zobraziť tento dialóg",
|
||||
"close-toast_title": "Zavrieť oznámenie",
|
||||
"receive-text-title": "Správa prijatá"
|
||||
},
|
||||
"notifications": {
|
||||
"text-content-incorrect": "Obsah textu je chybný",
|
||||
"clipboard-content-incorrect": "Obsah schránky je chybný",
|
||||
"display-name-random-again": "Zobrazované meno je opäť generované náhodne",
|
||||
"pairing-key-invalid": "Neplatný kľúč",
|
||||
"pair-url-copied-to-clipboard": "Odkaz pre spárovanie tohto zariadenia bol skopírovaný do schránky",
|
||||
"display-name-changed-permanently": "Zobrazované meno je trvalo zmenené",
|
||||
"display-name-changed-temporarily": "Zobrazované meno je zmenené len pre túto reláciu",
|
||||
"download-successful": "{{descriptor}} stiahnuté",
|
||||
"file-content-incorrect": "Obsah súboru je chybný",
|
||||
"pairing-tabs-error": "Spárovanie dvoch kariet web prehliadača nie je možné",
|
||||
"pairing-success": "Zariadenia spárované",
|
||||
"pairing-not-persistent": "Spárované zariadenie nie sú trvalé",
|
||||
"pairing-key-invalidated": "Kľúč {{key}} už je neplatný",
|
||||
"pairing-cleared": "Všetky zariadenia sú nespárované",
|
||||
"public-room-id-invalid": "Chybné ID miestnosti",
|
||||
"public-room-left": "Verejná miestnosť {{publicRoomId}} opustená",
|
||||
"copied-to-clipboard": "Skopírované do schránky",
|
||||
"room-url-copied-to-clipboard": "Odkaz do verejnej miestnosti bol skopírovaný do schránky",
|
||||
"copied-to-clipboard-error": "Kopírovanie nie je možné. Skopíruj ručne.",
|
||||
"notifications-enabled": "Oznámenia zapnuté",
|
||||
"click-to-download": "Kliknutím stiahneš",
|
||||
"request-title": "{{name}} chce poslať {{count}} {{descriptor}}",
|
||||
"click-to-show": "Kliknutím zobrazíš",
|
||||
"copied-text": "Text bol skopírovaný do schránky",
|
||||
"link-received": "Odkaz prijatý od {{name}} – kliknutím otvoríš",
|
||||
"message-received": "Správa prijatá od {{name}} – kliknutím skopíruješ",
|
||||
"copied-text-error": "Kopírovanie do schránky zlyhalo. Skopíruj ručne!",
|
||||
"offline": "Si offline",
|
||||
"online": "Opäť si online",
|
||||
"connected": "Pripojené",
|
||||
"online-requirement-pairing": "Pre párovanie zariadení musíš byť online",
|
||||
"online-requirement-public-room": "Pre vytvorenie miestnosti musíš byť online",
|
||||
"connecting": "Pripájam…",
|
||||
"files-incorrect": "Súbory sú chybné",
|
||||
"file-transfer-completed": "Prenos súboru dokončený",
|
||||
"ios-memory-limit": "Odosielanie súborov do iOS je možné len do veľkosti 200 MB",
|
||||
"message-transfer-completed": "Správa odoslaná",
|
||||
"unfinished-transfers-warning": "Máš nedokončené prenosy. Naozaj chceš zavrieť PairDrop?",
|
||||
"rate-limit-join-key": "Dosiahol si limit. Počkaj 10 sekúnd a skús znovu.",
|
||||
"selected-peer-left": "Vybraný užívateľ sa odpojil",
|
||||
"notifications-permissions-error": "Notifikačné oprávnenie bolo zablokované, keďže užívateľ niekoľkokrát odmietol notifikačnú výzvu. Toto sa dá resetovat v nastavení webu, po kliknutí na ikonu zámku pri URL paneli."
|
||||
},
|
||||
"about": {
|
||||
"github_title": "PairDrop na GitHube",
|
||||
"claim": "Jednoduchý spôsob posielania súborov medzi zariadeniami",
|
||||
"buy-me-a-coffee_title": "Kúp mi kávičku!",
|
||||
"tweet_title": "Tweetuj o PairDrop",
|
||||
"mastodon_title": "Napíš o PairDrop na Mastodon",
|
||||
"bluesky_title": "Sleduj nás na BlueSky",
|
||||
"custom_title": "Sleduj nás",
|
||||
"privacypolicy_title": "Naše zásady o ochrane súkromia",
|
||||
"faq_title": "Často kladené otázky",
|
||||
"close-about_aria-label": "Zatvoriť \"O službe PairDrop\""
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "Súbor prijatý",
|
||||
"file-received-plural": "Počet prijatých súborov: {{count}}",
|
||||
"file-transfer-requested": "Prenos súboru vyžiadaný",
|
||||
"image-transfer-requested": "Prenos obrázku vyžiadaný",
|
||||
"message-received": "Správa prijatá",
|
||||
"message-received-plural": "Počet prijatých správ: {{count}}"
|
||||
},
|
||||
"peer-ui": {
|
||||
"click-to-send-share-mode": "Kliknutím odošleš {{descriptor}}",
|
||||
"click-to-send": "Kliknutím odošleš súbory alebo pravým kliknutím odošleš správu",
|
||||
"connection-hash": "Na overenie bezpečnosti end-to-end šifrovania, porovnaj toto číslo na oboch zariadeniach",
|
||||
"preparing": "Pripravujem…",
|
||||
"waiting": "Čakám…",
|
||||
"processing": "Pracujem…",
|
||||
"transferring": "Prenášam…"
|
||||
}
|
||||
}
|
||||
@@ -1,184 +0,0 @@
|
||||
{
|
||||
"header": {
|
||||
"language-selector_title": "மொழியை அமைக்கவும்",
|
||||
"about_aria-label": "இணை ட்ராப் பற்றி திறந்திருக்கும்",
|
||||
"theme-auto_title": "தானாகவே கருப்பொருள் கணினிக்கு மாற்றியமைக்கவும்",
|
||||
"theme-light_title": "எப்போதும் ஒளி கருப்பொருளைப் பயன்படுத்துங்கள்",
|
||||
"theme-dark_title": "எப்போதும் இருண்ட கருப்பொருளைப் பயன்படுத்துங்கள்",
|
||||
"notification_title": "அறிவிப்புகளை இயக்கவும்",
|
||||
"install_title": "இணை டிராப்பை நிறுவவும்",
|
||||
"pair-device_title": "உங்கள் சாதனங்களை நிரந்தரமாக இணைக்கவும்",
|
||||
"edit-paired-devices_title": "இணை சாதனங்களைத் திருத்தவும்",
|
||||
"join-public-room_title": "தற்காலிகமாக பொது அறையில் சேரவும்",
|
||||
"cancel-share-mode": "ரத்துசெய்",
|
||||
"about_title": "இணை டிராப் பற்றி",
|
||||
"edit-share-mode": "தொகு",
|
||||
"expand_title": "தலைப்பு பொத்தான் வரிசையை விரிவாக்குங்கள்"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers_data-drop-bg": "பெறுநரைத் தேர்ந்தெடுக்க வெளியீடு",
|
||||
"no-peers-title": "கோப்புகளை அனுப்ப பிற சாதனங்களில் இணை டிராப்பைத் திறக்கவும்",
|
||||
"no-peers-subtitle": "சாதனங்களை இணை செய்யுங்கள் அல்லது பிற நெட்வொர்க்குகளில் கண்டறிய ஒரு பொது அறையை உள்ளிடவும்",
|
||||
"x-instructions_desktop": "கோப்புகளை அனுப்ப சொடுக்கு செய்யவும் அல்லது செய்தியை அனுப்ப வலது சொடுக்கு செய்யவும்",
|
||||
"x-instructions_mobile": "கோப்புகளை அனுப்ப தட்டவும் அல்லது செய்தியை அனுப்ப நீண்ட தட்டவும்",
|
||||
"x-instructions_data-drop-peer": "பியருக்கு அனுப்ப வெளியீடு",
|
||||
"x-instructions_data-drop-bg": "பெறுநரைத் தேர்ந்தெடுக்க வெளியீடு",
|
||||
"x-instructions-share-mode_desktop": "{{descriptor}} ஐ அனுப்ப சொடுக்கு செய்க",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} பகிரப்பட்ட கோப்புகள்",
|
||||
"x-instructions-share-mode_mobile": "{{descriptor}} அனுப்ப தட்டவும்",
|
||||
"activate-share-mode-shared-file": "பகிரப்பட்ட கோப்பு",
|
||||
"activate-share-mode-base": "அனுப்ப மற்ற சாதனங்களில் இணைக்கவும்",
|
||||
"activate-share-mode-and-other-file": "மற்றும் 1 பிற கோப்பு",
|
||||
"activate-share-mode-and-other-files-plural": "மற்றும் {{count}} பிற கோப்புகள்",
|
||||
"activate-share-mode-shared-text": "பகிரப்பட்ட உரை",
|
||||
"webrtc-requirement": "இந்த இணை டிராப் நிகழ்வைப் பயன்படுத்த, WEBRTC இயக்கப்பட்டிருக்க வேண்டும்!"
|
||||
},
|
||||
"footer": {
|
||||
"display-name_data-placeholder": "ஏற்றுகிறது…",
|
||||
"display-name_title": "உங்கள் சாதனத்தின் பெயரை நிரந்தரமாக திருத்தவும்",
|
||||
"discovery": "நீங்கள் கண்டுபிடிக்கலாம்:",
|
||||
"on-this-network": "இந்த நெட்வொர்க்கில்",
|
||||
"on-this-network_title": "இந்த நெட்வொர்க்கில் உள்ள அனைவராலும் நீங்கள் கண்டுபிடிக்க முடியும்.",
|
||||
"paired-devices": "இணை சாதனங்கள் மூலம்",
|
||||
"paired-devices_title": "நெட்வொர்க்கிலிருந்து சுயாதீனமாக எல்லா நேரங்களிலும் இணை சாதனங்களால் நீங்கள் கண்டுபிடிக்கலாம்.",
|
||||
"public-room-devices": "அறையில் {{roomId}}",
|
||||
"public-room-devices_title": "நெட்வொர்க்கிலிருந்து சுயாதீனமான இந்த பொது அறையில் உள்ள சாதனங்களால் நீங்கள் கண்டுபிடிக்கலாம்.",
|
||||
"traffic": "போக்குவரத்து",
|
||||
"routed": "சேவையகம் வழியாக திசைதிருப்பப்பட்டது",
|
||||
"webrtc": "WEBRTC கிடைக்கவில்லை என்றால்.",
|
||||
"known-as": "நீங்கள் அறியப்படுகிறீர்கள்:"
|
||||
},
|
||||
"dialogs": {
|
||||
"pair-devices-title": "இணை சாதனங்கள் நிரந்தரமாக",
|
||||
"input-key-on-this-device": "இந்த விசையை மற்றொரு சாதனத்தில் உள்ளிடவும்",
|
||||
"scan-qr-code": "அல்லது QR-குறியீட்டை ச்கேன் செய்யுங்கள்.",
|
||||
"enter-key-from-another-device": "மற்றொரு சாதனத்திலிருந்து விசையை இங்கே உள்ளிடவும்.",
|
||||
"temporary-public-room-title": "தற்காலிக பொது அறை",
|
||||
"input-room-id-on-another-device": "இந்த அறை ஐடியை மற்றொரு சாதனத்தில் உள்ளிடவும்",
|
||||
"enter-room-id-from-another-device": "அறையில் சேர மற்றொரு சாதனத்திலிருந்து அறை ஐடியை உள்ளிடவும்.",
|
||||
"hr-or": "அல்லது",
|
||||
"pair": "பேரிக்காய்",
|
||||
"cancel": "ரத்துசெய்",
|
||||
"edit-paired-devices-title": "இணை சாதனங்களைத் திருத்தவும்",
|
||||
"unpair": "அவிழ்த்து விடுங்கள்",
|
||||
"paired-device-removed": "இணை சாதனம் அகற்றப்பட்டது.",
|
||||
"paired-devices-wrapper_data-empty": "இணை சாதனங்கள் இல்லை.",
|
||||
"auto-accept-instructions-1": "செயல்படுத்து",
|
||||
"auto-accept": "தானாக ஏற்றுக்கொள்ளுங்கள்",
|
||||
"auto-accept-instructions-2": "அந்த சாதனத்திலிருந்து அனுப்பப்பட்ட அனைத்து கோப்புகளையும் தானாக ஏற்றுக்கொள்ள.",
|
||||
"close": "மூடு",
|
||||
"join": "சேர",
|
||||
"leave": "விடுப்பு",
|
||||
"would-like-to-share": "பகிர்ந்து கொள்ள விரும்புகிறேன்",
|
||||
"accept": "ஏற்றுக்கொள்",
|
||||
"decline": "வீழ்ச்சி",
|
||||
"has-sent": "அனுப்பியுள்ளது:",
|
||||
"share": "பங்கு",
|
||||
"download": "பதிவிறக்கம்",
|
||||
"send-message-title": "செய்தி அனுப்பவும்",
|
||||
"send-message-to": "இதற்கு:",
|
||||
"message_title": "அனுப்ப செய்தியைச் செருகவும்",
|
||||
"message_placeholder": "உரை",
|
||||
"send": "அனுப்பு",
|
||||
"receive-text-title": "செய்தி பெறப்பட்டது",
|
||||
"copy": "நகலெடு",
|
||||
"base64-title-files": "கோப்புகளைப் பகிரவும்",
|
||||
"base64-title-text": "உரையைப் பகிரவும்",
|
||||
"base64-processing": "செயலாக்கம்…",
|
||||
"base64-tap-to-paste": "{{type}} பகிர இங்கே தட்டவும்",
|
||||
"base64-paste-to-send": "{{type}} ஐப் பகிர இங்கே கிளிப்போர்டை ஒட்டவும்",
|
||||
"base64-text": "உரை",
|
||||
"base64-files": "கோப்புகள்",
|
||||
"file-other-description-image": "மற்றும் 1 பிற படம்",
|
||||
"file-other-description-file": "மற்றும் 1 பிற கோப்பு",
|
||||
"file-other-description-image-plural": "மற்றும் {{count}} பிற படங்கள்",
|
||||
"file-other-description-file-plural": "மற்றும் {{count}} பிற கோப்புகள்",
|
||||
"title-image": "படம்",
|
||||
"title-file": "கோப்பு",
|
||||
"title-image-plural": "படங்கள்",
|
||||
"title-file-plural": "கோப்புகள்",
|
||||
"receive-title": "{{descriptor}} பெறப்பட்டது",
|
||||
"download-again": "மீண்டும் பதிவிறக்கவும்",
|
||||
"language-selector-title": "மொழியை அமைக்கவும்",
|
||||
"system-language": "கணினி மொழி",
|
||||
"public-room-qr-code_title": "பொது அறைக்கு இணைப்பை நகலெடுக்க சொடுக்கு செய்க",
|
||||
"pair-devices-qr-code_title": "இந்த சாதனத்தை இணைக்க இணைப்பை நகலெடுக்க சொடுக்கு செய்க",
|
||||
"approve": "ஒப்புதல்",
|
||||
"share-text-title": "உரை செய்தியைப் பகிரவும்",
|
||||
"share-text-subtitle": "அனுப்புவதற்கு முன் செய்தியைத் திருத்தவும்:",
|
||||
"share-text-checkbox": "உரையைப் பகிரும்போது எப்போதும் இந்த உரையாடலைக் காட்டுங்கள்",
|
||||
"close-toast_title": "அறிவிப்பை மூடு"
|
||||
},
|
||||
"about": {
|
||||
"close-about_aria-label": "இணை ட்ராப் பற்றி மூடு",
|
||||
"claim": "சாதனங்களில் கோப்புகளை மாற்ற எளிதான வழி",
|
||||
"github_title": "கிட்அப்பில் இணை டிராப்",
|
||||
"buy-me-a-coffee_title": "எனக்கு ஒரு காபி வாங்க!",
|
||||
"tweet_title": "இணை ட்ராப் பற்றி ட்வீட் செய்யுங்கள்",
|
||||
"mastodon_title": "மாச்டோடனில் இணை ட்ராப் பற்றி எழுதுங்கள்",
|
||||
"bluesky_title": "ப்ளூச்கியில் எங்களைப் பின்தொடரவும்",
|
||||
"custom_title": "எங்களைப் பின்தொடரவும்",
|
||||
"privacypolicy_title": "எங்கள் தனியுரிமைக் கொள்கையைத் திறக்கவும்",
|
||||
"faq_title": "அடிக்கடி கேட்கப்படும் கேள்விகள்"
|
||||
},
|
||||
"notifications": {
|
||||
"display-name-changed-permanently": "காட்சி பெயர் நிரந்தரமாக மாற்றப்பட்டுள்ளது",
|
||||
"display-name-changed-temporarily": "இந்த அமர்வுக்கு மட்டுமே காட்சி பெயர் மாற்றப்பட்டுள்ளது",
|
||||
"display-name-random-again": "காட்சி பெயர் தோராயமாக மீண்டும் உருவாக்கப்படுகிறது",
|
||||
"download-successful": "{{descriptor}} பதிவிறக்கம் செய்யப்பட்டது",
|
||||
"pairing-tabs-error": "இரண்டு வலை உலாவி தாவல்களை இணைப்பது சாத்தியமற்றது",
|
||||
"pairing-success": "சாதனங்கள் இணை",
|
||||
"pairing-cleared": "அனைத்து சாதனங்களும் இணைக்கப்படவில்லை",
|
||||
"public-room-id-invalid": "தவறான அறை ஐடி",
|
||||
"public-room-left": "இடது பொது அறை {{publicRoomId}}}",
|
||||
"text-content-incorrect": "உரை உள்ளடக்கம் தவறானது",
|
||||
"file-content-incorrect": "கோப்பு உள்ளடக்கம் தவறானது",
|
||||
"clipboard-content-incorrect": "இடைநிலைப்பலகை உள்ளடக்கம் தவறானது",
|
||||
"notifications-enabled": "அறிவிப்புகள் இயக்கப்பட்டன",
|
||||
"notifications-permissions-error": "பயனர் இசைவு வரியை பல முறை நிராகரித்ததால் அறிவிப்புகள் இசைவு தடுக்கப்பட்டுள்ளது. முகவரி பட்டியின் அடுத்த பூட்டு ஐகானைக் சொடுக்கு செய்வதன் மூலம் அணுகக்கூடிய பக்கத் தகவலில் இதை மீட்டமைக்க முடியும்.",
|
||||
"link-received": "இணைப்பு {{name}} - திறக்க சொடுக்கு செய்க",
|
||||
"message-received": "{{name} by ஆல் பெறப்பட்ட செய்தி - நகலெடுக்க சொடுக்கு செய்க",
|
||||
"request-title": "{{name}} {{count}} {{descriptor}} ஐ மாற்ற விரும்புகிறது",
|
||||
"click-to-show": "காண்பிக்க சொடுக்கு செய்க",
|
||||
"copied-text": "இடைநிலைப்பலகைக்கு உரையை நகலெடுத்தது",
|
||||
"copied-text-error": "இடைநிலைப்பலகைக்கு எழுதுவது தோல்வியடைந்தது. கைமுறையாக நகலெடுக்கவும்!",
|
||||
"offline": "நீங்கள் ஆஃப்லைனில் இருக்கிறீர்கள்",
|
||||
"online": "நீங்கள் ஆன்லைனில் திரும்பி வந்துள்ளீர்கள்",
|
||||
"connected": "இணைக்கப்பட்டுள்ளது",
|
||||
"online-requirement-pairing": "இணை சாதனங்களுக்கு நீங்கள் ஆன்லைனில் இருக்க வேண்டும்",
|
||||
"online-requirement-public-room": "ஒரு பொது அறையை உருவாக்க நீங்கள் ஆன்லைனில் இருக்க வேண்டும்",
|
||||
"connecting": "இணைத்தல்…",
|
||||
"files-incorrect": "கோப்புகள் தவறானவை",
|
||||
"file-transfer-completed": "கோப்பு பரிமாற்றம் முடிந்தது",
|
||||
"ios-memory-limit": "ஐஇமு க்கு கோப்புகளை அனுப்புவது ஒரே நேரத்தில் 200 எம்பி வரை மட்டுமே சாத்தியமாகும்",
|
||||
"unfinished-transfers-warning": "முடிக்கப்படாத இடமாற்றங்கள் உள்ளன. நீங்கள் நிச்சயமாக இணை டிராப்பை மூட விரும்புகிறீர்களா?",
|
||||
"selected-peer-left": "தேர்ந்தெடுக்கப்பட்ட பியர் இடது",
|
||||
"pairing-not-persistent": "இணை சாதனங்கள் தொடர்ந்து இல்லை",
|
||||
"pairing-key-invalid": "தவறான விசை",
|
||||
"pairing-key-invalidated": "விசை {{key}} செல்லாதது",
|
||||
"copied-to-clipboard": "இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது",
|
||||
"pair-url-copied-to-clipboard": "இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்ட இந்த சாதனத்தை இணைக்க இணைப்பு",
|
||||
"room-url-copied-to-clipboard": "இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்ட பொது அறைக்கான இணைப்பு",
|
||||
"copied-to-clipboard-error": "நகலெடுப்பது சாத்தியமில்லை. கைமுறையாக நகலெடுக்கவும்.",
|
||||
"click-to-download": "பதிவிறக்க சொடுக்கு செய்க",
|
||||
"message-transfer-completed": "செய்தி பரிமாற்றம் முடிந்தது",
|
||||
"rate-limit-join-key": "வீத வரம்பு எட்டப்பட்டது. 10 வினாடிகள் காத்திருந்து மீண்டும் முயற்சிக்கவும்."
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "கோப்பு பெறப்பட்டது",
|
||||
"file-received-plural": "{{count}} கோப்புகள் பெறப்பட்டன",
|
||||
"image-transfer-requested": "பட பரிமாற்றம் கோரப்பட்டது",
|
||||
"file-transfer-requested": "கோப்பு பரிமாற்றம் கோரப்பட்டது",
|
||||
"message-received": "செய்தி பெறப்பட்டது",
|
||||
"message-received-plural": "{{count}} செய்திகள் பெறப்பட்டன"
|
||||
},
|
||||
"peer-ui": {
|
||||
"click-to-send-share-mode": "{{descriptor}} ஐ அனுப்ப சொடுக்கு செய்க",
|
||||
"click-to-send": "கோப்புகளை அனுப்ப சொடுக்கு செய்யவும் அல்லது செய்தியை அனுப்ப வலது சொடுக்கு செய்யவும்",
|
||||
"connection-hash": "இறுதி முதல் இறுதி குறியாக்கத்தின் பாதுகாப்பை சரிபார்க்க, இந்த பாதுகாப்பு எண்ணை இரு சாதனங்களிலும் ஒப்பிடுக",
|
||||
"waiting": "காத்திருக்கிறது…",
|
||||
"processing": "செயலாக்கம்…",
|
||||
"transferring": "இடமாற்றம்…",
|
||||
"preparing": "தயாரித்தல்…"
|
||||
}
|
||||
}
|
||||
@@ -1,95 +0,0 @@
|
||||
{
|
||||
"footer": {
|
||||
"display-name_title": "แก้ไขชื่ออุปกรณ์ของคุณอย่างถาวร",
|
||||
"on-this-network_title": "ทุกคนในเครือข่ายนี้สามารถค้นพบคุณได้",
|
||||
"paired-devices_title": "คุณสามารถค้นพบอุปกรณ์ที่จับคู่ได้ตลอดเวลาโดยไม่ขึ้นอยู่กับเครือข่าย",
|
||||
"known-as": "ชื่ออุปกรณ์ของคุณ :",
|
||||
"discovery": "คุณสามารถถูกค้นพบได้:",
|
||||
"public-room-devices": "Room ID: {{roomId}}",
|
||||
"public-room-devices_title": "คุณสามารถค้นพบอุปกรณ์ในห้องสาธารณะแห่งนี้ได้โดยไม่ขึ้นอยู่กับเครือข่าย",
|
||||
"paired-devices": "โดยอุปกรณ์ที่จับคู่แล้ว",
|
||||
"on-this-network": "บน Network เดียวกัน",
|
||||
"display-name_data-placeholder": "โปรดรอสักครู่…"
|
||||
},
|
||||
"dialogs": {
|
||||
"auto-accept-instructions-1": "เปิดใช้งาน",
|
||||
"system-language": "ภาษาของระบบ",
|
||||
"auto-accept-instructions-2": "เพื่อยอมรับไฟล์ทั้งหมดที่ส่งจากอุปกรณ์นั้นโดยอัตโนมัติ",
|
||||
"copy": "คัดลอก",
|
||||
"paired-device-removed": "อุปกรณ์ที่เคยจับคู่ถูกลบออกไปแล้ว",
|
||||
"scan-qr-code": "หรือสแกน QR-code",
|
||||
"cancel": "ยกเลิก",
|
||||
"enter-room-id-from-another-device": "ป้อน Room ID เพื่อเข้าร่วม",
|
||||
"pair": "จับคู่",
|
||||
"hr-or": "หรือ",
|
||||
"unpair": "ยกเลิกการจับคู่",
|
||||
"auto-accept": "การยอมรับอัตโนมัติ",
|
||||
"would-like-to-share": "อยากจะแบ่งปัน",
|
||||
"accept": "ยอมรับ",
|
||||
"decline": "ปฏิเสธ",
|
||||
"message_placeholder": "ข้อความ",
|
||||
"send-message-title": "ส่งข้อความ",
|
||||
"send": "ส่ง",
|
||||
"public-room-qr-code_title": "คลิกเพื่อคัดลอกลิงก์ไปยังห้องสาธารณะ",
|
||||
"pair-devices-qr-code_title": "คลิกเพื่อคัดลอกลิงก์เพื่อจับคู่อุปกรณ์นี้",
|
||||
"approve": "อนุมัติ",
|
||||
"input-room-id-on-another-device": "ระบุ Room ID นี้บนอุปกรณ์อื่น",
|
||||
"pair-devices-title": "การจับคู่อุปกรณ์",
|
||||
"join": "เข้าร่วม",
|
||||
"send-message-to": "ผู้รับ:",
|
||||
"language-selector-title": "เลือกภาษา",
|
||||
"close": "ปิด",
|
||||
"leave": "ออกจากห้อง",
|
||||
"temporary-public-room-title": "ห้องสาธารณะชั่วคราว",
|
||||
"edit-paired-devices-title": "แก้ไขอุปกรณ์ที่จับคู่แล้ว",
|
||||
"input-key-on-this-device": "ระบุ Key นี้บนอุปกรณ์อื่น",
|
||||
"enter-key-from-another-device": "ระบุ Key ของอุปกรณ์อื่นที่นี่"
|
||||
},
|
||||
"header": {
|
||||
"theme-auto_title": "ปรับธีมให้เข้ากับระบบโดยอัตโนมัติ",
|
||||
"about_title": "เกี่ยวกับ PairDrop",
|
||||
"theme-light_title": "ใช้ธีมสว่างเสมอ",
|
||||
"theme-dark_title": "ใช้ธีมมืดเสมอ",
|
||||
"notification_title": "เปิดใช้งานการแจ้งเตือน",
|
||||
"install_title": "ติดตั้ง PairDrop",
|
||||
"edit-paired-devices_title": "แก้ไขอุปกรณ์ที่จับคู่",
|
||||
"cancel-share-mode": "ยกเลิก",
|
||||
"join-public-room_title": "เข้าร่วมห้องสาธารณะชั่วคราว",
|
||||
"edit-share-mode": "แก้ไข",
|
||||
"pair-device_title": "การจับคู่อุปกรณ์",
|
||||
"language-selector_title": "เลือกภาษา"
|
||||
},
|
||||
"notifications": {
|
||||
"notifications-enabled": "เปิดใช้งานการแจ้งเตือนแล้ว",
|
||||
"pairing-key-invalid": "Key ไม่ถูกต้อง",
|
||||
"online": "คุณกลับมาออนไลน์แล้ว",
|
||||
"display-name-changed-permanently": "ชื่อที่แสดงจะเปลี่ยนแปลงถาวร",
|
||||
"display-name-changed-temporarily": "ชื่อที่แสดงมีการเปลี่ยนแปลงสำหรับเซสชันนี้เท่านั้น",
|
||||
"display-name-random-again": "ชื่อที่แสดงจะถูกสร้างขึ้นแบบสุ่มอีกครั้ง",
|
||||
"pairing-success": "จับคู่อุปกรณ์เรียบร้อยแล้ว",
|
||||
"offline": "คุณออฟไลน์อยู่"
|
||||
},
|
||||
"about": {
|
||||
"bluesky_title": "ติดตามเราได้ที่ BlueSky",
|
||||
"claim": "วิธีที่ง่ายที่สุดในการถ่ายโอนไฟล์ระหว่างอุปกรณ์",
|
||||
"github_title": "PairDrop บน GitHub",
|
||||
"buy-me-a-coffee_title": "ซื้อกาแฟให้ฉันหน่อย! (บริจาค)",
|
||||
"tweet_title": "ทวีตเกี่ยวกับ PairDrop",
|
||||
"mastodon_title": "เขียนเกี่ยวกับ PairDrop บน Mastodon",
|
||||
"custom_title": "ติดตามเรา",
|
||||
"privacypolicy_title": "เปิดนโยบายความเป็นส่วนตัวของเรา",
|
||||
"faq_title": "คำถามที่พบบ่อย (FAQ)"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers-subtitle": "จับคู่อุปกรณ์ หรือ เข้าห้องสาธารณะ เพื่อ ค้นหาอุปกรณ์ ภายนอก เครือข่าย",
|
||||
"x-instructions_mobile": "แตะเพื่อส่งข้อความ หรือ กดค้างไว้เพื่อส่งข้อความ",
|
||||
"x-instructions_data-drop-peer": "ปล่อยเพื่อส่งให้อุปกรณ์",
|
||||
"x-instructions-share-mode_desktop": "กดเพื่อส่ง{{descriptor}}",
|
||||
"x-instructions-share-mode_mobile": "แตะเพื่อส่ง{{descriptor}}",
|
||||
"activate-share-mode-and-other-file": "และอีก 1 ไฟล์",
|
||||
"activate-share-mode-shared-files-plural": "{{count}}ไฟล์ที่แชร์",
|
||||
"activate-share-mode-and-other-files-plural": "และ{{count}}ไฟล์ อื่นๆ",
|
||||
"no-peers-title": "เปิด PairDrop บนอุปกรณ์อื่นเพื่อส่งไฟล์",
|
||||
"x-instructions_desktop": "กดเพื่อส่งไฟล์ หรือ คลิ้กขวาเพื่อส่งไฟล์"
|
||||
}
|
||||
}
|
||||
@@ -1,184 +0,0 @@
|
||||
{
|
||||
"header": {
|
||||
"about_aria-label": "Відкрити \"Про PairDrop\"",
|
||||
"theme-auto_title": "Автоматично адаптувати тему до системної",
|
||||
"theme-light_title": "Завжди використовувати світлу тему",
|
||||
"install_title": "Встановити PairDrop",
|
||||
"join-public-room_title": "Приєднатися до публічної кімнати тимчасово",
|
||||
"cancel-share-mode": "Скасувати",
|
||||
"edit-share-mode": "Редагувати",
|
||||
"about_title": "Про PairDrop",
|
||||
"language-selector_title": "Встановити мову",
|
||||
"theme-dark_title": "Завжди використовувати темну тему",
|
||||
"pair-device_title": "Зв'язати ваші пристрої назавжди",
|
||||
"notification_title": "Увімкнути сповіщення",
|
||||
"edit-paired-devices_title": "Редагувати зв'язані пристрої",
|
||||
"expand_title": "Розгорнути рядок кнопок заголовка"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers_data-drop-bg": "Відпустіть, щоб вибрати одержувача",
|
||||
"x-instructions_desktop": "Натисніть, щоб надіслати файли, або клацніть правою кнопкою миші, щоб надіслати повідомлення",
|
||||
"x-instructions_data-drop-peer": "Відпустіть, щоб надіслати партнеру",
|
||||
"x-instructions-share-mode_desktop": "Натисніть, щоб надіслати {{descriptor}}",
|
||||
"x-instructions-share-mode_mobile": "Торкніться, щоб надіслати {{descriptor}}",
|
||||
"activate-share-mode-and-other-file": "та 1 інший файл",
|
||||
"activate-share-mode-shared-file": "спільний файл",
|
||||
"webrtc-requirement": "Щоб використовувати цей екземпляр PairDrop, WebRTC має бути увімкнено!",
|
||||
"no-peers-title": "Відкрийте PairDrop на інших пристроях, щоб надіслати файли",
|
||||
"no-peers-subtitle": "Зв’яжіть пристрої або введіть публічну кімнату, щоб бути помітним в інших мережах",
|
||||
"x-instructions_mobile": "Торкніться, щоб надіслати файли, або довго натисніть, щоб надіслати повідомлення",
|
||||
"x-instructions_data-drop-bg": "Відпустіть, щоб вибрати одержувача",
|
||||
"activate-share-mode-base": "Відкрийте PairDrop на інших пристроях, щоб надіслати",
|
||||
"activate-share-mode-and-other-files-plural": "та {{count}} інших файлів",
|
||||
"activate-share-mode-shared-text": "спільний текст",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} спільних файлів"
|
||||
},
|
||||
"footer": {
|
||||
"known-as": "Ви відомі як:",
|
||||
"discovery": "Вас можна знайти:",
|
||||
"public-room-devices": "у кімнаті {{roomId}}",
|
||||
"public-room-devices_title": "Вас можуть знайти пристрої в цій публічній кімнаті, незалежно від мережі.",
|
||||
"traffic": "Трафік",
|
||||
"webrtc": "якщо WebRTC недоступний.",
|
||||
"display-name_data-placeholder": "Завантаження…",
|
||||
"display-name_title": "Редагувати назву вашого пристрою назавжди",
|
||||
"on-this-network_title": "Вас можуть знайти всі на цій мережі.",
|
||||
"routed": "маршрутизований через сервер",
|
||||
"on-this-network": "в цій мережі",
|
||||
"paired-devices": "через зв'язані пристрої",
|
||||
"paired-devices_title": "Вас можуть знайти зв'язані пристрої в будь-який час, незалежно від мережі."
|
||||
},
|
||||
"dialogs": {
|
||||
"input-key-on-this-device": "Введіть цей ключ на іншому пристрої",
|
||||
"scan-qr-code": "або відскануйте QR-код.",
|
||||
"enter-key-from-another-device": "Введіть ключ з іншого пристрою тут.",
|
||||
"temporary-public-room-title": "Тимчасова публічна кімната",
|
||||
"input-room-id-on-another-device": "Введіть цей ID кімнати на іншому пристрої",
|
||||
"enter-room-id-from-another-device": "Введіть ID кімнати з іншого пристрою, щоб приєднатися до кімнати.",
|
||||
"hr-or": "АБО",
|
||||
"cancel": "Скасувати",
|
||||
"edit-paired-devices-title": "Редагувати Зв'язані пристрої",
|
||||
"unpair": "Від'єднати",
|
||||
"paired-device-removed": "Зв'язаний пристрій був видалений.",
|
||||
"paired-devices-wrapper_data-empty": "Немає зв'язаних пристроїв.",
|
||||
"auto-accept-instructions-1": "Активувати",
|
||||
"auto-accept": "автоматичне прийняття",
|
||||
"auto-accept-instructions-2": "щоб автоматично приймати всі файли, надіслані з цього пристрою.",
|
||||
"join": "Приєднатися",
|
||||
"leave": "Покинути",
|
||||
"accept": "Прийняти",
|
||||
"decline": "Відхилити",
|
||||
"has-sent": "відправив:",
|
||||
"share": "Поділитися",
|
||||
"download": "Завантажити",
|
||||
"send-message-title": "Надіслати повідомлення",
|
||||
"send-message-to": "Кому:",
|
||||
"message_title": "Введіть повідомлення для надсилання",
|
||||
"base64-title-text": "Поділитися текстом",
|
||||
"base64-processing": "Обробка…",
|
||||
"base64-text": "текст",
|
||||
"file-other-description-image": "та ще 1 зображення",
|
||||
"file-other-description-file": "та ще 1 файл",
|
||||
"file-other-description-image-plural": "та ще {{count}} зображень",
|
||||
"title-file": "Файл",
|
||||
"title-image-plural": "Зображення",
|
||||
"title-file-plural": "Файли",
|
||||
"receive-title": "{{descriptor}} отримано",
|
||||
"system-language": "Системна мова",
|
||||
"public-room-qr-code_title": "Натисніть, щоб скопіювати посилання на публічну кімнату",
|
||||
"share-text-title": "Поділитися текстовим повідомленням",
|
||||
"share-text-subtitle": "Редагувати повідомлення перед відправкою:",
|
||||
"share-text-checkbox": "Завжди показувати цей діалог при поділі тексту",
|
||||
"close-toast_title": "Закрити сповіщення",
|
||||
"pair-devices-title": "Зв’язати пристрої назавжди",
|
||||
"pair": "Приєднати",
|
||||
"close": "Закрити",
|
||||
"would-like-to-share": "хоче поділитися",
|
||||
"copy": "Копіювати",
|
||||
"message_placeholder": "Текст",
|
||||
"send": "Надіслати",
|
||||
"base64-title-files": "Поділитися файлами",
|
||||
"receive-text-title": "Повідомлення отримано",
|
||||
"base64-tap-to-paste": "Натисніть тут, щоб поділитися {{type}}",
|
||||
"base64-paste-to-send": "Вставте буфер обміну тут, щоб поділитися {{type}}",
|
||||
"file-other-description-file-plural": "та ще {{count}} файлів",
|
||||
"base64-files": "файли",
|
||||
"title-image": "Зображення",
|
||||
"language-selector-title": "Встановити мову",
|
||||
"approve": "схвалити",
|
||||
"download-again": "Завантажити знову",
|
||||
"pair-devices-qr-code_title": "Натисніть, щоб скопіювати посилання для зв'язування цього пристрою"
|
||||
},
|
||||
"about": {
|
||||
"close-about_aria-label": "Закрити \"Про PairDrop\"",
|
||||
"github_title": "PairDrop на GitHub",
|
||||
"buy-me-a-coffee_title": "Купи мені каву!",
|
||||
"tweet_title": "Твіт про PairDrop",
|
||||
"bluesky_title": "Підписуйтесь на нас у BlueSky",
|
||||
"privacypolicy_title": "Відкрити нашу політику конфіденційності",
|
||||
"faq_title": "Часто задавані питання",
|
||||
"mastodon_title": "Напишіть про PairDrop на Mastodon",
|
||||
"custom_title": "Підписуйтесь на нас",
|
||||
"claim": "Найпростіший спосіб передачі файлів між пристроями"
|
||||
},
|
||||
"notifications": {
|
||||
"display-name-changed-temporarily": "Відображуване ім'я було змінено тільки для цієї сесії",
|
||||
"display-name-random-again": "Відображуване ім'я згенерувалося випадковим чином знову",
|
||||
"download-successful": "{{descriptor}} завантажено",
|
||||
"pairing-tabs-error": "Зв'язування двох вкладок браузера неможливе",
|
||||
"pairing-success": "Пристрої зв'язані",
|
||||
"pairing-not-persistent": "Зв'язані пристрої не є постійними",
|
||||
"pairing-key-invalid": "Недійсний ключ",
|
||||
"pairing-key-invalidated": "Ключ {{key}} недійсний",
|
||||
"pairing-cleared": "Всі пристрої роз'єднані",
|
||||
"public-room-id-invalid": "Недійсний ID кімнати",
|
||||
"public-room-left": "Покинув публічну кімнату {{publicRoomId}}",
|
||||
"copied-to-clipboard-error": "Копіювання неможливе. Скопіюйте вручну.",
|
||||
"clipboard-content-incorrect": "Вміст буфера обміну неправильний",
|
||||
"link-received": "Посилання отримано від {{name}} - Натисніть, щоб відкрити",
|
||||
"message-received": "Повідомлення отримано від {{name}} - Натисніть, щоб скопіювати",
|
||||
"click-to-download": "Натисніть, щоб завантажити",
|
||||
"request-title": "{{name}} хоче передати {{count}} {{descriptor}}",
|
||||
"click-to-show": "Натисніть, щоб показати",
|
||||
"copied-text": "Текст скопійовано в буфер обміну",
|
||||
"copied-text-error": "Запис у буфер обміну не вдався. Скопіюйте вручну!",
|
||||
"offline": "Ви офлайн",
|
||||
"online-requirement-pairing": "Вам потрібно бути онлайн, щоб зв'язати пристрої",
|
||||
"online-requirement-public-room": "Вам потрібно бути онлайн, щоб створити публічну кімнату",
|
||||
"connecting": "Підключення…",
|
||||
"ios-memory-limit": "Відправка файлів на iOS можлива лише до 200 МБ за один раз",
|
||||
"message-transfer-completed": "Передача повідомлення завершена",
|
||||
"rate-limit-join-key": "Досягнуто ліміт швидкості. Зачекайте 10 секунд і спробуйте знову.",
|
||||
"selected-peer-left": "Обраний пір залишив",
|
||||
"files-incorrect": "Файли неправильні",
|
||||
"display-name-changed-permanently": "Відображуване ім'я було змінено назавжди",
|
||||
"notifications-permissions-error": "Дозвіл на сповіщення було заблоковано, оскільки користувач кілька разів відхилив запит на дозвіл. Це можна скинути в інформації про сторінку, до якої можна отримати доступ, натиснувши значок замка поруч з рядком URL.",
|
||||
"copied-to-clipboard": "Скопійовано в буфер обміну",
|
||||
"pair-url-copied-to-clipboard": "Посилання для зв'язування цього пристрою скопійовано в буфер обміну",
|
||||
"room-url-copied-to-clipboard": "Посилання на публічну кімнату скопійовано в буфер обміну",
|
||||
"text-content-incorrect": "Текстовий вміст неправильний",
|
||||
"file-content-incorrect": "Вміст файлу неправильний",
|
||||
"notifications-enabled": "Сповіщення увімкнені",
|
||||
"connected": "Підключено",
|
||||
"online": "Ви знову онлайн",
|
||||
"file-transfer-completed": "Передача файлу завершена",
|
||||
"unfinished-transfers-warning": "Є незавершені передачі. Ви впевнені, що хочете закрити PairDrop?"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "Файл отримано",
|
||||
"file-received-plural": "Отримано {{count}} файлів",
|
||||
"image-transfer-requested": "Запит на передачу зображення",
|
||||
"message-received": "Повідомлення отримано",
|
||||
"message-received-plural": "Отримано {{count}} повідомлень",
|
||||
"file-transfer-requested": "Запит на передачу файлу"
|
||||
},
|
||||
"peer-ui": {
|
||||
"click-to-send-share-mode": "Натисніть, щоб відправити {{descriptor}}",
|
||||
"connection-hash": "Щоб перевірити безпеку кінцевого шифрування, порівняйте цей номер безпеки на обох пристроях",
|
||||
"processing": "Обробка…",
|
||||
"click-to-send": "Натисніть, щоб відправити файли, або клацніть правою кнопкою миші, щоб відправити повідомлення",
|
||||
"preparing": "Підготовка…",
|
||||
"waiting": "Чекаю…",
|
||||
"transferring": "Переводимо…"
|
||||
}
|
||||
}
|
||||
@@ -154,7 +154,6 @@
|
||||
"files-incorrect": "文件不正确",
|
||||
"file-transfer-completed": "文件传输已完成",
|
||||
"connecting": "连接中…",
|
||||
"ios-memory-limit": "向 iOS 发送文件 一次最多只能发送 200 MB",
|
||||
"rate-limit-join-key": "已达连接限制。请等待 10秒 后再试。",
|
||||
"public-room-left": "已退出公共房间 {{publicRoomId}}",
|
||||
"copied-to-clipboard-error": "无法复制。请手动复制。",
|
||||
|
||||
@@ -1,184 +1 @@
|
||||
{
|
||||
"header": {
|
||||
"expand_title": "展開標題按鈕列",
|
||||
"about_title": "關於 PairDrop",
|
||||
"language-selector_title": "設定語言",
|
||||
"about_aria-label": "開啟 關於 PairDrop",
|
||||
"theme-auto_title": "主題跟隨系統設定",
|
||||
"theme-light_title": "固定使用明亮主題",
|
||||
"theme-dark_title": "固定使用深色主題",
|
||||
"notification_title": "啟用通知",
|
||||
"install_title": "安裝 PairDrop",
|
||||
"pair-device_title": "永久配對您的裝置",
|
||||
"edit-paired-devices_title": "管理已配對裝置",
|
||||
"join-public-room_title": "暫時加入公共房間",
|
||||
"cancel-share-mode": "完成",
|
||||
"edit-share-mode": "編輯"
|
||||
},
|
||||
"instructions": {
|
||||
"no-peers_data-drop-bg": "放開以選擇接收者",
|
||||
"no-peers-title": "喺其他裝置開啟 PairDrop 嚟傳送檔案",
|
||||
"no-peers-subtitle": "配對新裝置 或 加入公共房間 以便喺其他網絡顯示",
|
||||
"x-instructions_desktop": "按一下傳送檔案 或 右鍵傳送訊息",
|
||||
"x-instructions_mobile": "點擊傳送檔案 或 長按傳送訊息",
|
||||
"activate-share-mode-shared-file": "已分享檔案",
|
||||
"activate-share-mode-shared-files-plural": "{{count}} 個已分享檔案",
|
||||
"x-instructions_data-drop-peer": "放開即可傳送至呢部裝置",
|
||||
"x-instructions_data-drop-bg": "放開以選擇接收者",
|
||||
"x-instructions-share-mode_desktop": "單擊傳送 {{descriptor}}",
|
||||
"x-instructions-share-mode_mobile": "點擊傳送 {{descriptor}}",
|
||||
"activate-share-mode-base": "喺其他裝置開啟 PairDrop 嚟傳送",
|
||||
"activate-share-mode-and-other-file": "及另外 1 個檔案",
|
||||
"activate-share-mode-and-other-files-plural": "及另外 {{count}} 個檔案",
|
||||
"activate-share-mode-shared-text": "分享文字",
|
||||
"webrtc-requirement": "使用此 PairDrop 實例需要啟用 WebRTC!"
|
||||
},
|
||||
"footer": {
|
||||
"display-name_title": "修改預設裝置名稱",
|
||||
"discovery": "你可被發現於:",
|
||||
"on-this-network": "喺呢個網絡",
|
||||
"on-this-network_title": "你可以被同一個網絡嘅所有人發現。",
|
||||
"paired-devices": "已配對裝置",
|
||||
"paired-devices_title": "你隨時可以被已配對嘅裝置發現,無需依賴網絡。",
|
||||
"public-room-devices": "喺房間 {{roomId}} 內",
|
||||
"public-room-devices_title": "你可以被呢個跨網絡公共房間內嘅裝置發現。",
|
||||
"traffic": "流量將會",
|
||||
"routed": "經伺服器中轉",
|
||||
"webrtc": "若 WebRTC 無法使用。",
|
||||
"known-as": "你嘅名稱係:",
|
||||
"display-name_data-placeholder": "載入中…"
|
||||
},
|
||||
"dialogs": {
|
||||
"pair-devices-title": "配對新裝置(常駐)",
|
||||
"input-key-on-this-device": "喺另一部裝置輸入呢組數字",
|
||||
"scan-qr-code": "或者 掃描二維碼。",
|
||||
"temporary-public-room-title": "臨時公共房間",
|
||||
"input-room-id-on-another-device": "喺另一部裝置輸入呢個房間號碼",
|
||||
"enter-room-id-from-another-device": "喺另一部裝置輸入房間號碼加入。",
|
||||
"hr-or": "或",
|
||||
"pair": "配對",
|
||||
"cancel": "取消",
|
||||
"edit-paired-devices-title": "管理已配對裝置",
|
||||
"unpair": "解除配對",
|
||||
"paired-device-removed": "已移除配對裝置。",
|
||||
"paired-devices-wrapper_data-empty": "未有已配對裝置。",
|
||||
"auto-accept-instructions-1": "啟用",
|
||||
"auto-accept": "自動接收",
|
||||
"auto-accept-instructions-2": "即可自動接收該裝置傳送嘅所有檔案,無需確認。",
|
||||
"decline": "拒絕",
|
||||
"receive-text-title": "收到訊息",
|
||||
"base64-title-files": "分享檔案",
|
||||
"base64-title-text": "分享文字",
|
||||
"base64-processing": "處理中…",
|
||||
"base64-tap-to-paste": "點擊此處分享 {{type}}",
|
||||
"base64-paste-to-send": "將剪貼簿內容貼上嚟分享 {{type}}",
|
||||
"base64-text": "訊息",
|
||||
"base64-files": "檔案",
|
||||
"file-other-description-image": "及另外 1 張圖片",
|
||||
"file-other-description-file": "及另外 1 個檔案",
|
||||
"file-other-description-image-plural": "及另外 {{count}} 張圖片",
|
||||
"file-other-description-file-plural": "及另外 {{count}} 個檔案",
|
||||
"title-image": "圖片",
|
||||
"title-file": "檔案",
|
||||
"title-image-plural": "圖片",
|
||||
"title-file-plural": "檔案",
|
||||
"receive-title": "收到 {{descriptor}}",
|
||||
"download-again": "再次儲存",
|
||||
"language-selector-title": "設定語言",
|
||||
"pair-devices-qr-code_title": "按一下複製裝置配對連結",
|
||||
"approve": "批准",
|
||||
"share-text-title": "分享文字訊息",
|
||||
"share-text-subtitle": "傳送前編輯訊息:",
|
||||
"share-text-checkbox": "分享文字時永遠顯示此視窗",
|
||||
"system-language": "跟隨系統語言",
|
||||
"public-room-qr-code_title": "按一下複製公共房間連結",
|
||||
"close-toast_title": "關閉通知",
|
||||
"enter-key-from-another-device": "喺度輸入另一部裝置嘅配對碼。",
|
||||
"close": "關閉",
|
||||
"join": "加入",
|
||||
"leave": "離開",
|
||||
"would-like-to-share": "想分享",
|
||||
"accept": "接收",
|
||||
"has-sent": "傳送咗:",
|
||||
"share": "分享",
|
||||
"download": "儲存",
|
||||
"send-message-title": "傳送訊息",
|
||||
"send-message-to": "傳送至:",
|
||||
"message_title": "輸入要傳送嘅訊息",
|
||||
"message_placeholder": "文字",
|
||||
"send": "傳送",
|
||||
"copy": "複製"
|
||||
},
|
||||
"about": {
|
||||
"close-about_aria-label": "關閉 關於 PairDrop",
|
||||
"claim": "最簡單嘅跨裝置傳輸方案",
|
||||
"github_title": "PairDrop 開源於 GitHub",
|
||||
"buy-me-a-coffee_title": "請我飲杯咖啡!",
|
||||
"tweet_title": "關於 PairDrop 嘅推文",
|
||||
"mastodon_title": "喺 Mastodon 推廣 PairDrop",
|
||||
"bluesky_title": "喺 BlueSky 關注",
|
||||
"custom_title": "關注我哋",
|
||||
"privacypolicy_title": "開啟私隱政策",
|
||||
"faq_title": "常見問題"
|
||||
},
|
||||
"notifications": {
|
||||
"display-name-changed-permanently": "顯示名稱已永久變更",
|
||||
"display-name-changed-temporarily": "顯示名稱僅於今次連線有效",
|
||||
"display-name-random-again": "顯示名稱已重新隨機生成",
|
||||
"download-successful": "{{descriptor}} 已儲存",
|
||||
"pairing-tabs-error": "無法配對兩個瀏覽器分頁",
|
||||
"pairing-success": "裝置已成功配對",
|
||||
"pairing-not-persistent": "配對裝置未持久保存",
|
||||
"pairing-key-invalid": "無效配對碼",
|
||||
"pairing-key-invalidated": "配對碼 {{key}} 已失效",
|
||||
"pairing-cleared": "所有裝置配對已解除",
|
||||
"public-room-id-invalid": "無效房間號碼",
|
||||
"public-room-left": "已離開公共房間 {{publicRoomId}}",
|
||||
"copied-to-clipboard": "已複製到剪貼簿",
|
||||
"pair-url-copied-to-clipboard": "裝置配對連結已複製到剪貼簿",
|
||||
"room-url-copied-to-clipboard": "公共房間連結已複製到剪貼簿",
|
||||
"copied-to-clipboard-error": "無法複製,請手動操作。",
|
||||
"text-content-incorrect": "文字內容不正確",
|
||||
"file-content-incorrect": "檔案內容不正確",
|
||||
"clipboard-content-incorrect": "剪貼簿內容不正確",
|
||||
"notifications-enabled": "通知已啟用",
|
||||
"notifications-permissions-error": "因多次拒絕權限,通知功能已被封鎖。可點擊網址列嘅鎖頭圖示重置權限。",
|
||||
"link-received": "收到來自 {{name}} 嘅連結 - 點擊開啟",
|
||||
"click-to-download": "點擊儲存",
|
||||
"message-received": "收到來自 {{name}} 嘅訊息 - 點擊複製",
|
||||
"request-title": "{{name}} 想傳送 {{count}} 個 {{descriptor}}",
|
||||
"click-to-show": "點擊顯示",
|
||||
"copied-text": "已複製到剪貼簿",
|
||||
"copied-text-error": "寫入剪貼簿失敗,請手動複製!",
|
||||
"selected-peer-left": "已選擇嘅接收者離開",
|
||||
"unfinished-transfers-warning": "仍有未完成傳輸,確定要關閉 PairDrop?",
|
||||
"offline": "你未連接到網絡",
|
||||
"online": "已重新連線到網絡",
|
||||
"connected": "已連線",
|
||||
"online-requirement-pairing": "需要網絡連線嚟配對裝置",
|
||||
"online-requirement-public-room": "需要網絡連線嚟建立公共房間",
|
||||
"connecting": "連線中…",
|
||||
"files-incorrect": "檔案不正確",
|
||||
"file-transfer-completed": "檔案傳輸已完成",
|
||||
"ios-memory-limit": "傳送至 iOS 嘅檔案單次上限為 200 MB",
|
||||
"message-transfer-completed": "訊息傳輸已完成",
|
||||
"rate-limit-join-key": "已達連線上限,請 10 秒後再試。"
|
||||
},
|
||||
"document-titles": {
|
||||
"file-received": "收到檔案",
|
||||
"file-received-plural": "收到 {{count}} 個檔案",
|
||||
"file-transfer-requested": "檔案傳輸請求",
|
||||
"image-transfer-requested": "圖片傳輸請求",
|
||||
"message-received": "收到訊息",
|
||||
"message-received-plural": "收到 {{count}} 則訊息"
|
||||
},
|
||||
"peer-ui": {
|
||||
"click-to-send-share-mode": "點擊傳送 {{descriptor}}",
|
||||
"click-to-send": "點擊傳送檔案 或 右鍵傳送訊息",
|
||||
"connection-hash": "要驗證端到端加密安全性,請比較兩部裝置嘅安全編號",
|
||||
"preparing": "準備中…",
|
||||
"waiting": "請稍候…",
|
||||
"processing": "處理中…",
|
||||
"transferring": "傳輸中…"
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
@@ -26,7 +26,9 @@
|
||||
}
|
||||
],
|
||||
"background_color": "#efefef",
|
||||
"display": "minimal-ui",
|
||||
"start_url": "/",
|
||||
"scope": "/",
|
||||
"display": "standalone",
|
||||
"theme_color": "#3367d6",
|
||||
"screenshots" : [
|
||||
{
|
||||
|
||||
@@ -2,18 +2,27 @@ class BrowserTabsConnector {
|
||||
constructor() {
|
||||
this.bc = new BroadcastChannel('pairdrop');
|
||||
this.bc.addEventListener('message', e => this._onMessage(e));
|
||||
Events.on('broadcast-send', e => this._broadcastSend(e.detail));
|
||||
Events.on('broadcast-send', e => this._broadcastSend(e.detail.type, e.detail.data));
|
||||
Events.on('broadcast-self-display-name-changed', e => this._onBroadcastSelfDisplayNameChanged(e.detail.displayName));
|
||||
}
|
||||
|
||||
_broadcastSend(message) {
|
||||
this.bc.postMessage(message);
|
||||
_broadcastSend(type, data) {
|
||||
this.bc.postMessage({ type, data });
|
||||
}
|
||||
|
||||
_onBroadcastSelfDisplayNameChanged(displayName) {
|
||||
this._broadcastSend('self-display-name-changed', { displayName: displayName });
|
||||
}
|
||||
|
||||
_onMessage(e) {
|
||||
console.log('Broadcast:', e.data)
|
||||
switch (e.data.type) {
|
||||
const type = e.data.type;
|
||||
const data = e.data.data;
|
||||
|
||||
Logger.debug('Broadcast:', type, data);
|
||||
|
||||
switch (type) {
|
||||
case 'self-display-name-changed':
|
||||
Events.fire('self-display-name-changed', e.data.detail);
|
||||
Events.fire('self-display-name-changed', data.displayName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -25,6 +34,11 @@ class BrowserTabsConnector {
|
||||
: false;
|
||||
}
|
||||
|
||||
static isOnlyTab() {
|
||||
let peerIdsBrowser = JSON.parse(localStorage.getItem('peer_ids_browser'));
|
||||
return peerIdsBrowser.length <= 1;
|
||||
}
|
||||
|
||||
static async addPeerIdToLocalStorage() {
|
||||
const peerId = sessionStorage.getItem('peer_id');
|
||||
if (!peerId) return false;
|
||||
|
||||
@@ -2,31 +2,28 @@ class Localization {
|
||||
constructor() {
|
||||
Localization.$htmlRoot = document.querySelector('html');
|
||||
|
||||
Localization.defaultLocale = "en";
|
||||
Localization.supportedLocales = [
|
||||
"ar", "be", "bg", "ca", "cs", "da", "de", "en", "es", "et", "eu", "fa", "fr", "he", "hu", "id", "it", "ja",
|
||||
"kn", "ko", "nb", "nn", "nl", "pl", "pt-BR", "ro", "ru", "sk", "ta", "tr", "uk", "zh-CN", "zh-HK", "zh-TW"
|
||||
];
|
||||
Localization.supportedLocalesRtl = ["ar", "he"];
|
||||
Localization.localeDefault = "en";
|
||||
Localization.localesSupported = ["ar", "be", "ca", "da", "de", "en", "es", "fr", "he", "hu", "id", "it", "ja", "kn", "nb", "nl", "pl", "pt-BR", "ro", "ru", "tr", "zh-CN", "zh-TW"];
|
||||
Localization.localesRtl = ["ar", "he"];
|
||||
|
||||
Localization.translations = {};
|
||||
Localization.translationsDefaultLocale = {};
|
||||
|
||||
Localization.systemLocale = Localization.getSupportedOrDefaultLocales(navigator.languages);
|
||||
Localization.localeSystem = Localization.getSupportedOrDefaultLocales(navigator.languages);
|
||||
|
||||
let storedLanguageCode = localStorage.getItem('language_code');
|
||||
|
||||
Localization.initialLocale = storedLanguageCode && Localization.localeIsSupported(storedLanguageCode)
|
||||
Localization.localeInitial = storedLanguageCode && Localization.localeIsSupported(storedLanguageCode)
|
||||
? storedLanguageCode
|
||||
: Localization.systemLocale;
|
||||
: Localization.localeSystem;
|
||||
}
|
||||
|
||||
static localeIsSupported(locale) {
|
||||
return Localization.supportedLocales.indexOf(locale) > -1;
|
||||
return Localization.localesSupported.indexOf(locale) > -1;
|
||||
}
|
||||
|
||||
static localeIsRtl(locale) {
|
||||
return Localization.supportedLocalesRtl.indexOf(locale) > -1;
|
||||
return Localization.localesRtl.indexOf(locale) > -1;
|
||||
}
|
||||
|
||||
static currentLocaleIsRtl() {
|
||||
@@ -34,7 +31,7 @@ class Localization {
|
||||
}
|
||||
|
||||
static currentLocaleIsDefault() {
|
||||
return Localization.locale === Localization.defaultLocale
|
||||
return Localization.locale === Localization.localeDefault
|
||||
}
|
||||
|
||||
static getSupportedOrDefaultLocales(locales) {
|
||||
@@ -47,18 +44,17 @@ class Localization {
|
||||
// If there is no perfect match for browser locales, try generic locales first before resorting to the default locale
|
||||
return locales.find(Localization.localeIsSupported)
|
||||
|| localesGeneric.find(Localization.localeIsSupported)
|
||||
|| Localization.defaultLocale;
|
||||
|| Localization.localeDefault;
|
||||
}
|
||||
|
||||
async setInitialTranslation() {
|
||||
await Localization.fetchDefaultTranslations();
|
||||
await Localization.setTranslation(Localization.initialLocale)
|
||||
await Localization.setTranslation(Localization.localeInitial)
|
||||
}
|
||||
|
||||
static async setTranslation(locale) {
|
||||
if (!locale) locale = Localization.systemLocale;
|
||||
if (!locale) locale = Localization.localeSystem;
|
||||
|
||||
await Localization.fetchTranslations(locale)
|
||||
await Localization.setLocale(locale)
|
||||
await Localization.translatePage();
|
||||
|
||||
if (Localization.localeIsRtl(locale)) {
|
||||
@@ -71,21 +67,19 @@ class Localization {
|
||||
Localization.$htmlRoot.setAttribute('lang', locale);
|
||||
|
||||
|
||||
console.log("Page successfully translated",
|
||||
`System language: ${Localization.systemLocale}`,
|
||||
Logger.debug("Page successfully translated",
|
||||
`System language: ${Localization.localeSystem}`,
|
||||
`Selected language: ${locale}`
|
||||
);
|
||||
|
||||
Events.fire("translation-loaded");
|
||||
}
|
||||
|
||||
static async fetchDefaultTranslations() {
|
||||
Localization.translationsDefaultLocale = await Localization.fetchTranslationsFor(Localization.defaultLocale);
|
||||
}
|
||||
|
||||
static async fetchTranslations(newLocale) {
|
||||
static async setLocale(newLocale) {
|
||||
if (newLocale === Localization.locale) return false;
|
||||
|
||||
Localization.translationsDefaultLocale = await Localization.fetchTranslationsFor(Localization.localeDefault);
|
||||
|
||||
const newTranslations = await Localization.fetchTranslationsFor(newLocale);
|
||||
|
||||
if(!newTranslations) return false;
|
||||
@@ -151,7 +145,7 @@ class Localization {
|
||||
translation = translationObj[lastKey];
|
||||
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
Logger.error(e);
|
||||
}
|
||||
|
||||
if (!translation) {
|
||||
@@ -185,7 +179,7 @@ class Localization {
|
||||
}
|
||||
catch (e) {
|
||||
// Log warnings and help calls
|
||||
console.warn(e);
|
||||
Logger.warn(e);
|
||||
Localization.logTranslationMissingOrBroken(key, attr, data, useDefault);
|
||||
Localization.logHelpCallKey(key, attr);
|
||||
Localization.logHelpCall();
|
||||
@@ -198,7 +192,7 @@ class Localization {
|
||||
else {
|
||||
// Is not default locale yet
|
||||
// Get translation for default language with same arguments
|
||||
console.log(`Using default language ${Localization.defaultLocale.toUpperCase()} instead.`);
|
||||
Logger.debug(`Using default language ${Localization.localeDefault.toUpperCase()} instead.`);
|
||||
translation = this.getTranslation(key, attr, data, true);
|
||||
}
|
||||
}
|
||||
@@ -208,14 +202,14 @@ class Localization {
|
||||
|
||||
static logTranslationMissingOrBroken(key, attr, data, useDefault) {
|
||||
let usedLocale = useDefault
|
||||
? Localization.defaultLocale.toUpperCase()
|
||||
? Localization.localeDefault.toUpperCase()
|
||||
: Localization.locale.toUpperCase();
|
||||
|
||||
console.warn(`Missing or broken translation for language ${usedLocale}.\n`, 'key:', key, 'attr:', attr, 'data:', data);
|
||||
Logger.warn(`Missing or broken translation for language ${usedLocale}.\n`, 'key:', key, 'attr:', attr, 'data:', data);
|
||||
}
|
||||
|
||||
static logHelpCall() {
|
||||
console.log("Help translating PairDrop: https://hosted.weblate.org/engage/pairdrop/");
|
||||
Logger.warn("Help translating PairDrop: https://hosted.weblate.org/engage/pairdrop/");
|
||||
}
|
||||
|
||||
static logHelpCallKey(key, attr) {
|
||||
@@ -225,7 +219,7 @@ class Localization {
|
||||
? key
|
||||
: `${key}_${attr}`;
|
||||
|
||||
console.warn(`Translate this string here: https://hosted.weblate.org/browse/pairdrop/pairdrop-spa/${locale}/?q=${keyComplete}`);
|
||||
Logger.warn(`Translate this string here: https://hosted.weblate.org/browse/pairdrop/pairdrop-spa/${locale}/?q=${keyComplete}`);
|
||||
}
|
||||
|
||||
static escapeHTML(unsafeText) {
|
||||
|
||||
@@ -1,3 +1,23 @@
|
||||
class Logger {
|
||||
|
||||
static debug(message, ...optionalParams) {
|
||||
if (window.debugMode) {
|
||||
console.debug("DEBUG:", message, ...optionalParams);
|
||||
}
|
||||
}
|
||||
static log(message, ...optionalParams) {
|
||||
console.log("LOG:", message, ...optionalParams);
|
||||
}
|
||||
|
||||
static warn(message, ...optionalParams) {
|
||||
console.warn("WARN:", message, ...optionalParams);
|
||||
}
|
||||
|
||||
static error(message, ...optionalParams) {
|
||||
console.error("ERROR:", message, ...optionalParams);
|
||||
}
|
||||
}
|
||||
|
||||
class PairDrop {
|
||||
|
||||
constructor() {
|
||||
@@ -34,14 +54,14 @@ class PairDrop {
|
||||
|
||||
this.initialize()
|
||||
.then(_ => {
|
||||
console.log("Initialization completed.");
|
||||
Logger.log("Initialization completed.");
|
||||
});
|
||||
}
|
||||
|
||||
async initialize() {
|
||||
// Translate page before fading in
|
||||
await this.localization.setInitialTranslation()
|
||||
console.log("Initial translation successful.");
|
||||
Logger.log("Initial translation successful.");
|
||||
|
||||
// Show "Loading..." until connected to WsServer
|
||||
await this.footerUI.showLoading();
|
||||
@@ -56,16 +76,16 @@ class PairDrop {
|
||||
await this.backgroundCanvas.fadeIn();
|
||||
|
||||
// Load deferred assets
|
||||
console.log("Load deferred assets...");
|
||||
Logger.log("Load deferred assets...");
|
||||
await this.loadDeferredAssets();
|
||||
console.log("Loading of deferred assets completed.");
|
||||
Logger.log("Loading of deferred assets completed.");
|
||||
|
||||
console.log("Hydrate UI...");
|
||||
Logger.log("Hydrate UI...");
|
||||
await this.hydrate();
|
||||
console.log("UI hydrated.");
|
||||
Logger.log("UI hydrated.");
|
||||
|
||||
// Evaluate url params as soon as ws is connected
|
||||
console.log("Evaluate URL params as soon as websocket connection is established.");
|
||||
Logger.log("Evaluate URL params as soon as websocket connection is established.");
|
||||
Events.on('ws-connected', _ => this.evaluateUrlParams(), {once: true});
|
||||
}
|
||||
|
||||
@@ -74,14 +94,14 @@ class PairDrop {
|
||||
navigator.serviceWorker
|
||||
.register('service-worker.js')
|
||||
.then(serviceWorker => {
|
||||
console.log('Service Worker registered');
|
||||
Logger.log('Service Worker registered');
|
||||
window.serviceWorker = serviceWorker
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
onPwaInstallable(e) {
|
||||
if (!window.matchMedia('(display-mode: minimal-ui)').matches) {
|
||||
if (!window.matchMedia('(display-mode: standalone)').matches) {
|
||||
// only display install btn when not installed
|
||||
this.$headerInstallBtn.removeAttribute('hidden');
|
||||
this.$headerInstallBtn.addEventListener('click', () => {
|
||||
@@ -117,6 +137,7 @@ class PairDrop {
|
||||
let stylesheet = document.createElement('link');
|
||||
stylesheet.rel = 'preload';
|
||||
stylesheet.as = 'style';
|
||||
stylesheet.defer = true;
|
||||
stylesheet.href = url;
|
||||
stylesheet.onload = _ => {
|
||||
stylesheet.onload = null;
|
||||
@@ -133,10 +154,10 @@ class PairDrop {
|
||||
return new Promise( async (resolve) => {
|
||||
try {
|
||||
await this.loadStyleSheet(url);
|
||||
console.log(`Stylesheet loaded successfully: ${url}`);
|
||||
Logger.log(`Stylesheet loaded successfully: ${url}`);
|
||||
resolve();
|
||||
} catch (error) {
|
||||
console.error('Error loading stylesheet:', error);
|
||||
Logger.error('Error loading stylesheet:', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -156,10 +177,10 @@ class PairDrop {
|
||||
return new Promise( async (resolve) => {
|
||||
try {
|
||||
await this.loadScript(url);
|
||||
console.log(`Script loaded successfully: ${url}`);
|
||||
Logger.log(`Script loaded successfully: ${url}`);
|
||||
resolve();
|
||||
} catch (error) {
|
||||
console.error('Error loading script:', error);
|
||||
Logger.error('Error loading script:', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -229,12 +250,17 @@ class PairDrop {
|
||||
this.publicRoomDialog._createPublicRoom();
|
||||
}
|
||||
}
|
||||
else if (urlParams.has("debug") && urlParams.get("debug") === "true") {
|
||||
window.debugMode = true;
|
||||
}
|
||||
|
||||
// remove url params from url
|
||||
const urlWithoutParams = getUrlWithoutArguments();
|
||||
window.history.replaceState({}, "Rewrite URL", urlWithoutParams);
|
||||
if (!window.debugMode) {
|
||||
// remove url params from url
|
||||
const urlWithoutParams = getUrlWithoutArguments();
|
||||
window.history.replaceState({}, "Rewrite URL", urlWithoutParams);
|
||||
}
|
||||
|
||||
console.log("URL params evaluated.");
|
||||
Logger.log("URL params evaluated.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,19 +7,18 @@ class PersistentStorage {
|
||||
const DBOpenRequest = window.indexedDB.open('pairdrop_store', 5);
|
||||
DBOpenRequest.onerror = e => {
|
||||
PersistentStorage.logBrowserNotCapable();
|
||||
console.log('Error initializing database: ');
|
||||
console.log(e)
|
||||
Logger.error('Error initializing database:', e);
|
||||
};
|
||||
DBOpenRequest.onsuccess = _ => {
|
||||
console.log('Database initialised.');
|
||||
Logger.debug('Database initialised.');
|
||||
};
|
||||
DBOpenRequest.onupgradeneeded = async e => {
|
||||
const db = e.target.result;
|
||||
const txn = e.target.transaction;
|
||||
|
||||
db.onerror = e => console.log('Error loading database: ' + e);
|
||||
db.onerror = e => Logger.error('Error loading database:', e);
|
||||
|
||||
console.log(`Upgrading IndexedDB database from version ${e.oldVersion} to version ${e.newVersion}`);
|
||||
Logger.debug(`Upgrading IndexedDB database from version ${e.oldVersion} to version ${e.newVersion}`);
|
||||
|
||||
if (e.oldVersion === 0) {
|
||||
// initiate v1
|
||||
@@ -54,7 +53,7 @@ class PersistentStorage {
|
||||
}
|
||||
|
||||
static logBrowserNotCapable() {
|
||||
console.log("This browser does not support IndexedDB. Paired devices will be gone after the browser is closed.");
|
||||
Logger.log("This browser does not support IndexedDB. Paired devices will be gone after the browser is closed.");
|
||||
}
|
||||
|
||||
static set(key, value) {
|
||||
@@ -66,7 +65,7 @@ class PersistentStorage {
|
||||
const objectStore = transaction.objectStore('keyval');
|
||||
const objectStoreRequest = objectStore.put(value, key);
|
||||
objectStoreRequest.onsuccess = _ => {
|
||||
console.log(`Request successful. Added key-pair: ${key} - ${value}`);
|
||||
Logger.debug(`Request successful. Added key-pair: ${key} - ${value}`);
|
||||
resolve(value);
|
||||
};
|
||||
}
|
||||
@@ -85,7 +84,7 @@ class PersistentStorage {
|
||||
const objectStore = transaction.objectStore('keyval');
|
||||
const objectStoreRequest = objectStore.get(key);
|
||||
objectStoreRequest.onsuccess = _ => {
|
||||
console.log(`Request successful. Retrieved key-pair: ${key} - ${objectStoreRequest.result}`);
|
||||
Logger.debug(`Request successful. Retrieved key-pair: ${key} - ${objectStoreRequest.result}`);
|
||||
resolve(objectStoreRequest.result);
|
||||
}
|
||||
}
|
||||
@@ -104,7 +103,7 @@ class PersistentStorage {
|
||||
const objectStore = transaction.objectStore('keyval');
|
||||
const objectStoreRequest = objectStore.delete(key);
|
||||
objectStoreRequest.onsuccess = _ => {
|
||||
console.log(`Request successful. Deleted key: ${key}`);
|
||||
Logger.debug(`Request successful. Deleted key: ${key}`);
|
||||
resolve();
|
||||
};
|
||||
}
|
||||
@@ -128,7 +127,7 @@ class PersistentStorage {
|
||||
'auto_accept': false
|
||||
});
|
||||
objectStoreRequest.onsuccess = e => {
|
||||
console.log(`Request successful. RoomSecret added: ${e.target.result}`);
|
||||
Logger.debug(`Request successful. RoomSecret added: ${e.target.result}`);
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
@@ -145,7 +144,7 @@ class PersistentStorage {
|
||||
for (let i = 0; i < roomSecrets.length; i++) {
|
||||
secrets.push(roomSecrets[i].secret);
|
||||
}
|
||||
console.log(`Request successful. Retrieved ${secrets.length} room_secrets`);
|
||||
Logger.debug(`Request successful. Retrieved ${secrets.length} room_secrets`);
|
||||
return(secrets);
|
||||
} catch (e) {
|
||||
this.logBrowserNotCapable();
|
||||
@@ -182,13 +181,13 @@ class PersistentStorage {
|
||||
objectStoreRequestKey.onsuccess = e => {
|
||||
const key = e.target.result;
|
||||
if (!key) {
|
||||
console.log(`Nothing to retrieve. Entry for room_secret not existing: ${roomSecret}`);
|
||||
Logger.debug(`Nothing to retrieve. Entry for room_secret not existing: ${roomSecret}`);
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
const objectStoreRequestRetrieval = objectStore.get(key);
|
||||
objectStoreRequestRetrieval.onsuccess = e => {
|
||||
console.log(`Request successful. Retrieved entry for room_secret: ${key}`);
|
||||
Logger.debug(`Request successful. Retrieved entry for room_secret: ${key}`);
|
||||
resolve({
|
||||
"entry": e.target.result,
|
||||
"key": key
|
||||
@@ -215,14 +214,14 @@ class PersistentStorage {
|
||||
const objectStoreRequestKey = objectStore.index("secret").getKey(roomSecret);
|
||||
objectStoreRequestKey.onsuccess = e => {
|
||||
if (!e.target.result) {
|
||||
console.log(`Nothing to delete. room_secret not existing: ${roomSecret}`);
|
||||
Logger.debug(`Nothing to delete. room_secret not existing: ${roomSecret}`);
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
const key = e.target.result;
|
||||
const objectStoreRequestDeletion = objectStore.delete(key);
|
||||
objectStoreRequestDeletion.onsuccess = _ => {
|
||||
console.log(`Request successful. Deleted room_secret: ${key}`);
|
||||
Logger.debug(`Request successful. Deleted room_secret: ${key}`);
|
||||
resolve(roomSecret);
|
||||
}
|
||||
objectStoreRequestDeletion.onerror = e => {
|
||||
@@ -245,7 +244,7 @@ class PersistentStorage {
|
||||
const objectStore = transaction.objectStore('room_secrets');
|
||||
const objectStoreRequest = objectStore.clear();
|
||||
objectStoreRequest.onsuccess = _ => {
|
||||
console.log('Request successful. All room_secrets cleared');
|
||||
Logger.debug('Request successful. All room_secrets cleared');
|
||||
resolve();
|
||||
};
|
||||
}
|
||||
@@ -255,15 +254,15 @@ class PersistentStorage {
|
||||
})
|
||||
}
|
||||
|
||||
static updateRoomSecretNames(roomSecret, displayName, deviceName) {
|
||||
return this.updateRoomSecret(roomSecret, undefined, displayName, deviceName);
|
||||
static updateRoomSecretDisplayName(roomSecret, displayName) {
|
||||
return this.updateRoomSecret(roomSecret, null, displayName, null);
|
||||
}
|
||||
|
||||
static updateRoomSecretAutoAccept(roomSecret, autoAccept) {
|
||||
return this.updateRoomSecret(roomSecret, undefined, undefined, undefined, autoAccept);
|
||||
return this.updateRoomSecret(roomSecret, null, null, null, autoAccept);
|
||||
}
|
||||
|
||||
static updateRoomSecret(roomSecret, updatedRoomSecret = undefined, updatedDisplayName = undefined, updatedDeviceName = undefined, updatedAutoAccept = undefined) {
|
||||
static updateRoomSecret(roomSecret, updatedRoomSecret = null, updatedDisplayName = null, updatedDeviceName = null, updatedAutoAccept = null) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const DBOpenRequest = window.indexedDB.open('pairdrop_store');
|
||||
DBOpenRequest.onsuccess = e => {
|
||||
@@ -278,16 +277,16 @@ class PersistentStorage {
|
||||
const objectStore = transaction.objectStore('room_secrets');
|
||||
// Do not use `updatedRoomSecret ?? roomSecretEntry.entry.secret` to ensure compatibility with older browsers
|
||||
const updatedRoomSecretEntry = {
|
||||
'secret': updatedRoomSecret !== undefined ? updatedRoomSecret : roomSecretEntry.entry.secret,
|
||||
'display_name': updatedDisplayName !== undefined ? updatedDisplayName : roomSecretEntry.entry.display_name,
|
||||
'device_name': updatedDeviceName !== undefined ? updatedDeviceName : roomSecretEntry.entry.device_name,
|
||||
'auto_accept': updatedAutoAccept !== undefined ? updatedAutoAccept : roomSecretEntry.entry.auto_accept
|
||||
'secret': updatedRoomSecret !== null ? updatedRoomSecret : roomSecretEntry.entry.secret,
|
||||
'display_name': updatedDisplayName !== null ? updatedDisplayName : roomSecretEntry.entry.display_name,
|
||||
'device_name': updatedDeviceName !== null ? updatedDeviceName : roomSecretEntry.entry.device_name,
|
||||
'auto_accept': updatedAutoAccept !== null ? updatedAutoAccept : roomSecretEntry.entry.auto_accept
|
||||
};
|
||||
|
||||
const objectStoreRequestUpdate = objectStore.put(updatedRoomSecretEntry, roomSecretEntry.key);
|
||||
|
||||
objectStoreRequestUpdate.onsuccess = e => {
|
||||
console.log(`Request successful. Updated room_secret: ${roomSecretEntry.key}`);
|
||||
Logger.debug(`Request successful. Updated room_secret: ${roomSecretEntry.key}`);
|
||||
resolve({
|
||||
"entry": updatedRoomSecretEntry,
|
||||
"key": roomSecretEntry.key
|
||||
|
||||
131
public/scripts/sw-file-digester.js
Normal file
131
public/scripts/sw-file-digester.js
Normal file
@@ -0,0 +1,131 @@
|
||||
self.accessHandle = undefined;
|
||||
self.messageQueue = [];
|
||||
self.busy = false;
|
||||
|
||||
|
||||
self.addEventListener('message', async e => {
|
||||
// Put message into queue if busy
|
||||
if (self.busy) {
|
||||
self.messageQueue.push(e.data);
|
||||
return;
|
||||
}
|
||||
|
||||
await digestMessage(e.data);
|
||||
});
|
||||
|
||||
async function digestMessage(message) {
|
||||
self.busy = true;
|
||||
try {
|
||||
switch (message.type) {
|
||||
case "check-support":
|
||||
await checkSupport();
|
||||
break;
|
||||
case "chunk":
|
||||
await onChunk(message.id, message.chunk, message.offset);
|
||||
break;
|
||||
case "get-file":
|
||||
await onGetFile(message.id);
|
||||
break;
|
||||
case "delete-file":
|
||||
await onDeleteFile(message.id);
|
||||
break;
|
||||
case "clear-directory":
|
||||
await onClearDirectory();
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
self.postMessage({type: "error", error: e});
|
||||
}
|
||||
|
||||
// message is digested. Digest next message.
|
||||
await messageDigested();
|
||||
}
|
||||
|
||||
async function messageDigested() {
|
||||
if (!self.messageQueue.length) {
|
||||
// no chunk in queue -> set flag to false and stop
|
||||
this.busy = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Digest next message in queue
|
||||
await this.digestMessage(self.messageQueue.pop());
|
||||
}
|
||||
|
||||
async function checkSupport() {
|
||||
try {
|
||||
const accessHandle = await getAccessHandle("test");
|
||||
self.postMessage({type: "support", supported: true});
|
||||
accessHandle.close();
|
||||
}
|
||||
catch (e) {
|
||||
self.postMessage({type: "support", supported: false});
|
||||
}
|
||||
}
|
||||
|
||||
async function getFileHandle(id) {
|
||||
const dirHandle = await navigator.storage.getDirectory();
|
||||
return await dirHandle.getFileHandle(id, {create: true});
|
||||
}
|
||||
|
||||
async function getAccessHandle(id) {
|
||||
const fileHandle = await getFileHandle(id);
|
||||
|
||||
if (!self.accessHandle) {
|
||||
// Create FileSystemSyncAccessHandle on the file.
|
||||
self.accessHandle = await fileHandle.createSyncAccessHandle();
|
||||
}
|
||||
|
||||
return self.accessHandle;
|
||||
}
|
||||
|
||||
async function onChunk(id, chunk, offset) {
|
||||
const accessHandle = await getAccessHandle(id);
|
||||
|
||||
// Write the message to the end of the file.
|
||||
let encodedMessage = new DataView(chunk);
|
||||
accessHandle.write(encodedMessage, { at: offset });
|
||||
|
||||
self.postMessage({type: "chunk-written", offset: offset});
|
||||
}
|
||||
|
||||
async function onGetFile(id) {
|
||||
const fileHandle = await getFileHandle(id);
|
||||
let file = await fileHandle.getFile();
|
||||
|
||||
self.postMessage({type: "file", file: file});
|
||||
}
|
||||
|
||||
async function onDeleteFile(id) {
|
||||
const accessHandle = await getAccessHandle(id);
|
||||
|
||||
// Truncate the file to 0 bytes
|
||||
accessHandle.truncate(0);
|
||||
|
||||
// Persist changes to disk.
|
||||
accessHandle.flush();
|
||||
|
||||
// Always close FileSystemSyncAccessHandle if done.
|
||||
accessHandle.close();
|
||||
|
||||
self.postMessage({type: "file-deleted", id: id});
|
||||
}
|
||||
|
||||
async function onClearDirectory() {
|
||||
const dirHandle = await navigator.storage.getDirectory();
|
||||
|
||||
// Iterate through directory entries and truncate all entries to 0
|
||||
for await (const [id, fileHandle] of dirHandle.entries()) {
|
||||
const accessHandle = await fileHandle.createSyncAccessHandle();
|
||||
|
||||
// Truncate the file to 0 bytes
|
||||
accessHandle.truncate(0);
|
||||
|
||||
// Persist changes to disk.
|
||||
accessHandle.flush();
|
||||
|
||||
// Always close FileSystemSyncAccessHandle if done.
|
||||
accessHandle.close();
|
||||
}
|
||||
}
|
||||
@@ -201,11 +201,15 @@ class FooterUI {
|
||||
this.$discoveryWrapper = $$('footer .discovery-wrapper');
|
||||
|
||||
this.$displayName.addEventListener('keydown', e => this._onKeyDownDisplayName(e));
|
||||
this.$displayName.addEventListener('focus', e => this._onFocusDisplayName(e));
|
||||
this.$displayName.addEventListener('blur', e => this._onBlurDisplayName(e));
|
||||
this.$displayName.addEventListener('keyup', e => this._onKeyUpDisplayName(e));
|
||||
this.$displayName.addEventListener('blur', e => this._saveDisplayName(e.target.innerText));
|
||||
|
||||
Events.on('display-name', e => this._onDisplayName(e.detail.displayName));
|
||||
Events.on('self-display-name-changed', e => this._insertDisplayName(e.detail));
|
||||
Events.on('self-display-name-changed', e => this._insertDisplayName(e.detail.displayName));
|
||||
|
||||
// Load saved display name on page load
|
||||
Events.on('ws-connected', _ => this._loadSavedDisplayName());
|
||||
|
||||
Events.on('evaluate-footer-badges', _ => this._evaluateFooterBadges());
|
||||
}
|
||||
|
||||
@@ -230,20 +234,17 @@ class FooterUI {
|
||||
}
|
||||
|
||||
async _loadSavedDisplayName() {
|
||||
const displayNameSaved = await this._getSavedDisplayName()
|
||||
const displayName = await this._getSavedDisplayName()
|
||||
|
||||
if (!displayNameSaved) return;
|
||||
if (!displayName) return;
|
||||
|
||||
console.log("Retrieved edited display name:", displayNameSaved)
|
||||
Events.fire('self-display-name-changed', displayNameSaved);
|
||||
Logger.debug("Retrieved edited display name:", displayName)
|
||||
Events.fire('self-display-name-changed', { displayName: displayName });
|
||||
}
|
||||
|
||||
async _onDisplayName(displayNameServer){
|
||||
// load saved displayname first to prevent flickering
|
||||
await this._loadSavedDisplayName();
|
||||
|
||||
// set original display name as placeholder
|
||||
this.$displayName.setAttribute('placeholder', displayNameServer);
|
||||
_onDisplayName(displayName){
|
||||
// set display name
|
||||
this.$displayName.setAttribute('placeholder', displayName);
|
||||
}
|
||||
|
||||
|
||||
@@ -258,27 +259,9 @@ class FooterUI {
|
||||
}
|
||||
}
|
||||
|
||||
_onFocusDisplayName(e) {
|
||||
if (!e.target.innerText) {
|
||||
// Fix z-position of cursor when div is completely empty (Firefox only)
|
||||
e.target.innerText = "\n";
|
||||
|
||||
// On Chromium based browsers the cursor position is lost when adding sth. to the focused node. This adds it back.
|
||||
let sel = window.getSelection();
|
||||
sel.collapse(e.target.lastChild);
|
||||
}
|
||||
}
|
||||
|
||||
async _onBlurDisplayName(e) {
|
||||
_onKeyUpDisplayName(e) {
|
||||
// fix for Firefox inserting a linebreak into div on edit which prevents the placeholder from showing automatically when it is empty
|
||||
if (/^(\n|\r|\r\n)$/.test(e.target.innerText)) {
|
||||
e.target.innerText = '';
|
||||
}
|
||||
|
||||
// Remove selection from text
|
||||
window.getSelection().removeAllRanges();
|
||||
|
||||
await this._saveDisplayName(e.target.innerText)
|
||||
if (/^(\n|\r|\r\n)$/.test(e.target.innerText)) e.target.innerText = '';
|
||||
}
|
||||
|
||||
async _saveDisplayName(newDisplayName) {
|
||||
@@ -292,25 +275,25 @@ class FooterUI {
|
||||
Events.fire('notify-user', Localization.getTranslation("notifications.display-name-changed-permanently"));
|
||||
})
|
||||
.catch(_ => {
|
||||
console.log("This browser does not support IndexedDB. Use localStorage instead.");
|
||||
Logger.debug("This browser does not support IndexedDB. Use localStorage instead.");
|
||||
localStorage.setItem('edited_display_name', newDisplayName);
|
||||
Events.fire('notify-user', Localization.getTranslation("notifications.display-name-changed-temporarily"));
|
||||
})
|
||||
.finally(() => {
|
||||
Events.fire('self-display-name-changed', newDisplayName);
|
||||
Events.fire('broadcast-send', {type: 'self-display-name-changed', detail: newDisplayName});
|
||||
Events.fire('self-display-name-changed', { displayName: newDisplayName });
|
||||
Events.fire('broadcast-self-display-name-changed', { displayName: newDisplayName });
|
||||
});
|
||||
}
|
||||
else {
|
||||
PersistentStorage.delete('edited_display_name')
|
||||
.catch(_ => {
|
||||
console.log("This browser does not support IndexedDB. Use localStorage instead.")
|
||||
Logger.debug("This browser does not support IndexedDB. Use localStorage instead.")
|
||||
localStorage.removeItem('edited_display_name');
|
||||
})
|
||||
.finally(() => {
|
||||
Events.fire('notify-user', Localization.getTranslation("notifications.display-name-random-again"));
|
||||
Events.fire('self-display-name-changed', '');
|
||||
Events.fire('broadcast-send', {type: 'self-display-name-changed', detail: ''});
|
||||
Events.fire('self-display-name-changed', { displayName: '' });
|
||||
Events.fire('broadcast-self-display-name-changed', { displayName: '' });
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
1233
public/scripts/ui.js
1233
public/scripts/ui.js
File diff suppressed because it is too large
Load Diff
@@ -62,41 +62,67 @@ window.isMobile = window.iOS || window.android;
|
||||
|
||||
|
||||
// Helper functions
|
||||
|
||||
const audioPlayer = (() => {
|
||||
const blop = document.getElementById('blop');
|
||||
blop.addEventListener('ended', _ => {
|
||||
blop.muted = true
|
||||
});
|
||||
|
||||
|
||||
return {
|
||||
playBlop() {
|
||||
if (window.isMobile) return;
|
||||
|
||||
blop.muted = false;
|
||||
blop.play();
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
const zipper = (() => {
|
||||
|
||||
let zipWriter;
|
||||
return {
|
||||
createNewZipWriter() {
|
||||
zipWriter = new zip.ZipWriter(new zip.BlobWriter("application/zip"), { bufferedWrite: true, level: 0 });
|
||||
},
|
||||
addFile(file, options) {
|
||||
return zipWriter.add(file.name, new zip.BlobReader(file), options);
|
||||
},
|
||||
async getBlobURL() {
|
||||
if (zipWriter) {
|
||||
const blobURL = URL.createObjectURL(await zipWriter.close());
|
||||
zipWriter = null;
|
||||
return blobURL;
|
||||
async getObjectUrlOfZipFile(files, onZipProgressCallback){
|
||||
try {
|
||||
const zipWriter = new zip.ZipWriter(new zip.BlobWriter("application/zip"));
|
||||
|
||||
let bytesProcessed = 0;
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
await zipWriter.add(
|
||||
files[i].name,
|
||||
new zip.BlobReader(files[i]),
|
||||
{
|
||||
onprogress: (progress) => onZipProgressCallback(bytesProcessed + progress)
|
||||
}
|
||||
);
|
||||
bytesProcessed += files[i].size;
|
||||
}
|
||||
|
||||
return URL.createObjectURL(await zipWriter.close());
|
||||
}
|
||||
else {
|
||||
throw new Error("Zip file closed");
|
||||
}
|
||||
},
|
||||
async getZipFile(filename = "archive.zip") {
|
||||
if (zipWriter) {
|
||||
const file = new File([await zipWriter.close()], filename, {type: "application/zip"});
|
||||
zipWriter = null;
|
||||
return file;
|
||||
}
|
||||
else {
|
||||
throw new Error("Zip file closed");
|
||||
catch (e) {
|
||||
Logger.error(e);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
async getEntries(file, options) {
|
||||
return await (new zip.ZipReader(new zip.BlobReader(file))).getEntries(options);
|
||||
try {
|
||||
return await (new zip.ZipReader(new zip.BlobReader(file))).getEntries(options);
|
||||
}
|
||||
catch (e) {
|
||||
Logger.error(e);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
async getData(entry, options) {
|
||||
return await entry.getData(new zip.BlobWriter(), options);
|
||||
try {
|
||||
return await entry.getData(new zip.BlobWriter(), options);
|
||||
}
|
||||
catch (e) {
|
||||
Logger.error(e);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
@@ -477,16 +503,13 @@ function getThumbnailAsDataUrl(file, width = undefined, height = undefined, qual
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
if (file.type === "image/heif" || file.type === "image/heic") {
|
||||
// hotfix: Converting heic images taken on iOS 18 crashes page. Waiting for PR #350
|
||||
reject(new Error(`Hotfix: Converting of HEIC/HEIF images currently disabled.`));
|
||||
return;
|
||||
// // browsers can't show heic files --> convert to jpeg before creating thumbnail
|
||||
// let blob = await fileToBlob(file);
|
||||
// file = await heic2any({
|
||||
// blob,
|
||||
// toType: "image/jpeg",
|
||||
// quality: quality
|
||||
// });
|
||||
// browsers can't show heic files --> convert to jpeg before creating thumbnail
|
||||
let blob = await fileToBlob(file);
|
||||
file = await heic2any({
|
||||
blob,
|
||||
toType: "image/jpeg",
|
||||
quality: quality
|
||||
});
|
||||
}
|
||||
|
||||
let imageUrl = URL.createObjectURL(file);
|
||||
@@ -524,7 +547,7 @@ function getThumbnailAsDataUrl(file, width = undefined, height = undefined, qual
|
||||
let dataUrl = canvas.toDataURL("image/jpeg", quality);
|
||||
resolve(dataUrl);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
Logger.error(e);
|
||||
reject(new Error(`Could not create an image thumbnail from type ${file.type}`));
|
||||
}
|
||||
})
|
||||
@@ -596,4 +619,27 @@ function isUrlValid(url) {
|
||||
catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// polyfill for crypto.randomUUID()
|
||||
// Credits: @Briguy37 - https://stackoverflow.com/a/8809472/14678591
|
||||
function generateUUID() {
|
||||
return crypto && crypto.randomUUID()
|
||||
? crypto.randomUUID()
|
||||
: () => {
|
||||
let
|
||||
d = new Date().getTime(),
|
||||
d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now() * 1000)) || 0;
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
|
||||
let r = Math.random() * 16;
|
||||
if (d > 0) {
|
||||
r = (d + r) % 16 | 0;
|
||||
d = Math.floor(d / 16);
|
||||
} else {
|
||||
r = (d2 + r) % 16 | 0;
|
||||
d2 = Math.floor(d2 / 16);
|
||||
}
|
||||
return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16);
|
||||
});
|
||||
};
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
const cacheVersion = 'v1.10.11';
|
||||
const cacheVersion = 'v1.10.9';
|
||||
const cacheTitle = `pairdrop-cache-${cacheVersion}`;
|
||||
const forceFetch = false; // FOR DEVELOPMENT: Set to true to always update assets instead of using cached versions
|
||||
const relativePathsToCache = [
|
||||
@@ -29,7 +29,6 @@ const relativePathsToCache = [
|
||||
'lang/ar.json',
|
||||
'lang/be.json',
|
||||
'lang/ca.json',
|
||||
'lang/cs.json',
|
||||
'lang/da.json',
|
||||
'lang/de.json',
|
||||
'lang/en.json',
|
||||
@@ -48,7 +47,6 @@ const relativePathsToCache = [
|
||||
'lang/ro.json',
|
||||
'lang/ru.json',
|
||||
'lang/tr.json',
|
||||
'lang/uk.json',
|
||||
'lang/zh-CN.json',
|
||||
'lang/zh-TW.json'
|
||||
];
|
||||
|
||||
@@ -104,6 +104,8 @@ x-peer {
|
||||
padding: 8px;
|
||||
align-content: start;
|
||||
flex-wrap: wrap;
|
||||
transition: transform 150ms;
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
x-peer input[type="file"] {
|
||||
@@ -121,8 +123,6 @@ x-peer label {
|
||||
x-peer x-icon {
|
||||
--icon-size: 40px;
|
||||
margin-bottom: 4px;
|
||||
transition: transform 150ms;
|
||||
will-change: transform;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
@@ -148,7 +148,7 @@ x-peer:not(.type-ip):not(.type-secret).type-public-id .icon-wrapper {
|
||||
.highlight-wrapper {
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
margin: 7px auto 0;
|
||||
margin: 10px auto 0;
|
||||
height: 6px;
|
||||
}
|
||||
|
||||
@@ -187,14 +187,16 @@ x-peer:not(.type-public-id) .highlight-room-public-id {
|
||||
display: none;
|
||||
}
|
||||
|
||||
x-peer:not([status]):hover x-icon,
|
||||
x-peer:not([status]):focus x-icon {
|
||||
x-peer:is(:not([status]), [status$=-complete], [status=error]):hover,
|
||||
x-peer:is(:not([status]), [status$=-complete], [status=error]):focus {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
x-peer[status] x-icon {
|
||||
x-peer[status]:not([status$=-complete]) x-icon {
|
||||
box-shadow: none;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
x-peer[status] {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
@@ -237,7 +239,7 @@ x-peer.ws-peer .highlight-wrapper {
|
||||
|
||||
.status,
|
||||
.device-name {
|
||||
opacity: 0.7;
|
||||
color: color-mix(in srgb, rgb(var(--text-color)) 30%, grey);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@@ -246,14 +248,22 @@ x-peer[status] .device-name {
|
||||
display: none;
|
||||
}
|
||||
|
||||
x-peer[status] {
|
||||
x-peer[status]:not([status$=-complete]):not([status=error]) {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
x-peer x-icon {
|
||||
x-peer {
|
||||
animation: pop 600ms ease-out 1;
|
||||
}
|
||||
|
||||
x-peer[status$=-complete] .status {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
|
||||
x-peer[status=error] .status {
|
||||
color: var(--error-color);
|
||||
}
|
||||
|
||||
@keyframes pop {
|
||||
0% {
|
||||
transform: scale(0.7);
|
||||
@@ -744,7 +754,6 @@ x-dialog .dialog-subheader {
|
||||
top: -8px;
|
||||
clip: rect(0px, 80px, 80px, 40px);
|
||||
--progress: rotate(0deg);
|
||||
transition: transform 200ms;
|
||||
}
|
||||
|
||||
.circle {
|
||||
@@ -758,6 +767,10 @@ x-dialog .dialog-subheader {
|
||||
transform: var(--progress);
|
||||
}
|
||||
|
||||
.animate .circle {
|
||||
transition: transform 200ms linear;
|
||||
}
|
||||
|
||||
.over50 {
|
||||
clip: rect(auto, auto, auto, auto);
|
||||
}
|
||||
|
||||
@@ -557,10 +557,6 @@ footer .logo {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#display-name:focus::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html:not([dir="rtl"]) #display-name,
|
||||
html:not([dir="rtl"]) .edit-pen {
|
||||
margin-left: -1rem;
|
||||
@@ -928,6 +924,7 @@ x-peers:empty~x-instructions {
|
||||
body {
|
||||
/* Constant colors */
|
||||
--primary-color: #4285f4;
|
||||
--error-color: #ff6b6b;
|
||||
--paired-device-color: #00a69c;
|
||||
--public-room-color: #ed9d01;
|
||||
--accent-color: var(--primary-color);
|
||||
@@ -943,8 +940,8 @@ body {
|
||||
--lt-dialog-bg-color: #fff;
|
||||
--lt-bg-color: 255,255,255;
|
||||
--lt-bg-color-secondary: #f2f2f2;
|
||||
--lt-border-color: #757575;
|
||||
--lt-badge-color: #757575;
|
||||
--lt-border-color: #a9a9a9;
|
||||
--lt-badge-color: #a5a5a5;
|
||||
--lt-lang-hr-color: #DDD;
|
||||
|
||||
--lt-shadow-color-secondary-rgb: 0,0,0;
|
||||
@@ -957,8 +954,8 @@ body {
|
||||
--dt-dialog-bg-color: #141414;
|
||||
--dt-bg-color: 0,0,0;
|
||||
--dt-bg-color-secondary: #262628;
|
||||
--dt-border-color: #757575;
|
||||
--dt-badge-color: #757575;
|
||||
--dt-border-color: #919191;
|
||||
--dt-badge-color: #717171;
|
||||
--dt-lang-hr-color: #404040;
|
||||
|
||||
--dt-shadow-color-secondary-rgb: 255,255,255;
|
||||
|
||||
@@ -89,22 +89,12 @@ export default class PairDropWsServer {
|
||||
this._onLeavePublicRoom(sender);
|
||||
break;
|
||||
case 'signal':
|
||||
this._signalAndRelay(sender, message);
|
||||
this._signalAndWsRelay(sender, message);
|
||||
break;
|
||||
case 'request':
|
||||
case 'header':
|
||||
case 'partition':
|
||||
case 'partition-received':
|
||||
case 'progress':
|
||||
case 'files-transfer-response':
|
||||
case 'file-transfer-complete':
|
||||
case 'message-transfer-complete':
|
||||
case 'text':
|
||||
case 'display-name-changed':
|
||||
case 'ws-chunk':
|
||||
case 'ws-relay':
|
||||
// relay ws-fallback
|
||||
if (this._conf.wsFallback) {
|
||||
this._signalAndRelay(sender, message);
|
||||
this._signalAndWsRelay(sender, message);
|
||||
}
|
||||
else {
|
||||
console.log("Websocket fallback is not activated on this instance.")
|
||||
@@ -112,7 +102,7 @@ export default class PairDropWsServer {
|
||||
}
|
||||
}
|
||||
|
||||
_signalAndRelay(sender, message) {
|
||||
_signalAndWsRelay(sender, message) {
|
||||
const room = message.roomType === 'ip'
|
||||
? sender.ip
|
||||
: message.roomId;
|
||||
@@ -261,7 +251,6 @@ export default class PairDropWsServer {
|
||||
return;
|
||||
}
|
||||
|
||||
this._leavePublicRoom(sender);
|
||||
this._joinPublicRoom(sender, message.publicRoomId);
|
||||
}
|
||||
|
||||
@@ -322,7 +311,7 @@ export default class PairDropWsServer {
|
||||
|
||||
_joinPublicRoom(peer, publicRoomId) {
|
||||
// prevent joining of 2 public rooms simultaneously
|
||||
this._leavePublicRoom(peer);
|
||||
this._leavePublicRoom(peer, true);
|
||||
|
||||
this._joinRoom(peer, 'public-id', publicRoomId);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user