Compare commits
173 Commits
Author | SHA1 | Date |
---|---|---|
![]() |
31ec776fb3 | |
![]() |
4862ba3067 | |
![]() |
7639aca84c | |
![]() |
8b8e5b7433 | |
![]() |
f6f3db2df9 | |
![]() |
abd3a0c47c | |
![]() |
89734e6954 | |
![]() |
59bd9265bc | |
![]() |
dbd6321fec | |
![]() |
d18e290ad4 | |
![]() |
d7b68e214e | |
![]() |
148eb79ef0 | |
![]() |
80615c533c | |
![]() |
b0b091c4f7 | |
![]() |
c7b7badb3d | |
![]() |
13e75f525d | |
![]() |
b7c1893ac0 | |
![]() |
341fa7fdf0 | |
![]() |
aa09da3076 | |
![]() |
547038c9bc | |
![]() |
a39d8cdc84 | |
![]() |
b3c61f4baf | |
![]() |
ef61cc4dfe | |
![]() |
fa992498fb | |
![]() |
800d492da5 | |
![]() |
b8a973f037 | |
![]() |
83549261f6 | |
![]() |
9f4309c866 | |
![]() |
43ce64d68a | |
![]() |
61caa43ce9 | |
![]() |
0e574ae7fc | |
![]() |
3240921207 | |
![]() |
3c7042da6d | |
![]() |
09e4e5d289 | |
![]() |
ec0012ecd1 | |
![]() |
8eea54f8dd | |
![]() |
ae68ede3f3 | |
![]() |
16523843bd | |
![]() |
829d63deda | |
![]() |
f0e7250617 | |
![]() |
eca41f36c7 | |
![]() |
1d0d3d0896 | |
![]() |
8a3c60d3a6 | |
![]() |
e2f0ca6e45 | |
![]() |
27a61d589b | |
![]() |
02c95dde9d | |
![]() |
dabfe58124 | |
![]() |
82b329fea8 | |
![]() |
8a833cd69d | |
![]() |
629328c2f6 | |
![]() |
8826893a42 | |
![]() |
efc360e106 | |
![]() |
351e7d42c9 | |
![]() |
ec520248b8 | |
![]() |
94096aa13c | |
![]() |
f7fe303fa7 | |
![]() |
940da7948c | |
![]() |
c52eeda3ff | |
![]() |
44c0f3dbaa | |
![]() |
659b53b5fa | |
![]() |
14bfc1948a | |
![]() |
8f8708c5fb | |
![]() |
43c071b37f | |
![]() |
bd9c7a4554 | |
![]() |
25f2bc2285 | |
![]() |
c4be62d2ec | |
![]() |
a0f88ed492 | |
![]() |
5f4b77bb8f | |
![]() |
e3e37a6b77 | |
![]() |
7067aceafe | |
![]() |
84b3c7d68b | |
![]() |
25da925064 | |
![]() |
74dd692826 | |
![]() |
bf8b248a05 | |
![]() |
12180c4343 | |
![]() |
eecdee7381 | |
![]() |
dab259ca2b | |
![]() |
182d72fade | |
![]() |
58585f7006 | |
![]() |
b97cd116a9 | |
![]() |
81b240bfc8 | |
![]() |
1b967e40d2 | |
![]() |
f9a9287893 | |
![]() |
7931f64148 | |
![]() |
4a83ad57dd | |
![]() |
b73d7637a1 | |
![]() |
b9f436b940 | |
![]() |
5cb15642c4 | |
![]() |
957ca39f90 | |
![]() |
ce3d569880 | |
![]() |
40379acc6c | |
![]() |
ab67c5858d | |
![]() |
b34b3f7b39 | |
![]() |
3e502a76d0 | |
![]() |
08af4670ee | |
![]() |
a458c00213 | |
![]() |
2e088b8434 | |
![]() |
31e3b4304c | |
![]() |
d73e5666b9 | |
![]() |
96a055b7d0 | |
![]() |
703894e309 | |
![]() |
13f7d36da0 | |
![]() |
1549ff48c9 | |
![]() |
9f4d99c8db | |
![]() |
563c8dd8a8 | |
![]() |
43c346894d | |
![]() |
a68cd75b71 | |
![]() |
e85a2e6293 | |
![]() |
794e6304fe | |
![]() |
f9b8b0fadf | |
![]() |
10f648b7cd | |
![]() |
331c61fec8 | |
![]() |
fa24e77d3b | |
![]() |
6ca039910a | |
![]() |
9f02f7b3ca | |
![]() |
04d65da779 | |
![]() |
e6f2c776dc | |
![]() |
b0711de5b9 | |
![]() |
d9a6ed4a47 | |
![]() |
5dd36da962 | |
![]() |
8bc65ed622 | |
![]() |
5625cb0ca6 | |
![]() |
74e5e2286f | |
![]() |
1a254765fe | |
![]() |
27a698c762 | |
![]() |
971917bc77 | |
![]() |
1eefd4720f | |
![]() |
ff92e606ff | |
![]() |
e53e4adcdf | |
![]() |
fda19dc819 | |
![]() |
78d9ba45d3 | |
![]() |
488762bbce | |
![]() |
80a5c0efdb | |
![]() |
a9d1273b3c | |
![]() |
c8484ab104 | |
![]() |
05827b12ca | |
![]() |
1256dcdcbd | |
![]() |
5e79ef0d9f | |
![]() |
add361c284 | |
![]() |
fd0c32faad | |
![]() |
f0cfb4833d | |
![]() |
46b6b38ad5 | |
![]() |
3cc2ab99b5 | |
![]() |
61861df99e | |
![]() |
6330f09486 | |
![]() |
e07255398f | |
![]() |
cce97a6496 | |
![]() |
9c98bc3e9b | |
![]() |
63717aae82 | |
![]() |
08aa1e62a4 | |
![]() |
828caa4226 | |
![]() |
35f47d9063 | |
![]() |
6ca37bd390 | |
![]() |
be46e7d4af | |
![]() |
3c1bc9f82f | |
![]() |
892e84c834 | |
![]() |
d6287c4cf0 | |
![]() |
c83e55b448 | |
![]() |
49160f9b02 | |
![]() |
7be2830a08 | |
![]() |
1f3dd080a0 | |
![]() |
5d709966af | |
![]() |
99b0c6ff01 | |
![]() |
76e08927de | |
![]() |
9118b0ae06 | |
![]() |
b36105b1cf | |
![]() |
ad4f727d19 | |
![]() |
f048c4f1bd | |
![]() |
6c1672ba25 | |
![]() |
caf19bdb45 | |
![]() |
5dcda58ce5 | |
![]() |
4a5a2ceb67 | |
![]() |
214d557feb |
|
@ -1,5 +1,13 @@
|
||||||
node_modules
|
|
||||||
.github
|
.github
|
||||||
.git*
|
.git*
|
||||||
|
.idea
|
||||||
*.md
|
dev
|
||||||
|
docs
|
||||||
|
licenses
|
||||||
|
node_modules
|
||||||
|
pairdrop-cli
|
||||||
|
*.md
|
||||||
|
*.yml
|
||||||
|
Dockerfile
|
||||||
|
rtc_config_example.json
|
||||||
|
turnserver_example.conf
|
|
@ -36,7 +36,7 @@ If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
**Bug occurs on official PairDrop instance https://pairdrop.net/**
|
**Bug occurs on official PairDrop instance https://pairdrop.net/**
|
||||||
No | Yes
|
No | Yes
|
||||||
Version: v1.10.6
|
Version: v1.11.2
|
||||||
|
|
||||||
**Bug occurs on self-hosted PairDrop instance**
|
**Bug occurs on self-hosted PairDrop instance**
|
||||||
No | Yes
|
No | Yes
|
||||||
|
@ -44,7 +44,7 @@ No | Yes
|
||||||
**Self-Hosted Setup**
|
**Self-Hosted Setup**
|
||||||
Proxy: Nginx | Apache2
|
Proxy: Nginx | Apache2
|
||||||
Deployment: docker run | docker compose | npm run start:prod
|
Deployment: docker run | docker compose | npm run start:prod
|
||||||
Version: v1.10.6
|
Version: v1.11.2
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the problem here.
|
Add any other context about the problem here.
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
node_modules
|
node_modules
|
||||||
.DS_Store
|
.DS_Store
|
||||||
fqdn.env
|
/dev/certs
|
||||||
/docker/certs
|
|
||||||
qrcode-svg/
|
qrcode-svg/
|
||||||
turnserver.conf
|
turnserver.conf
|
||||||
rtc_config.json
|
rtc_config.json
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
FROM node:lts-alpine
|
FROM alpine:latest
|
||||||
|
|
||||||
WORKDIR /home/node/app
|
WORKDIR /home/node/app
|
||||||
|
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
|
|
||||||
RUN npm ci
|
RUN apk add --no-cache nodejs npm
|
||||||
|
RUN NODE_ENV="production" npm ci --omit=dev
|
||||||
|
|
||||||
|
# Directories and files excluded via .dockerignore
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# environment settings
|
# environment settings
|
||||||
|
|
187
README.md
187
README.md
|
@ -3,133 +3,132 @@
|
||||||
<img src="public/images/android-chrome-512x512.png" alt="Logo" width="150" height="150">
|
<img src="public/images/android-chrome-512x512.png" alt="Logo" width="150" height="150">
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<h1>PairDrop</h1>
|
# _Send it_, with [PairDrop](https://pairdrop.net)
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Local file sharing in your browser. Inspired by Apple's AirDrop.
|
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>
|
||||||
|
<a href="https://github.com/schlagmichdoch/PairDrop/issues">Report a bug</a>
|
||||||
<br />
|
<br />
|
||||||
<a href="https://pairdrop.net"><strong>Explore »</strong></a>
|
<a href="https://github.com/schlagmichdoch/PairDrop/issues">Request feature</a>
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<a href="https://github.com/schlagmichdoch/PairDrop/issues">Report Bug</a>
|
|
||||||
·
|
|
||||||
<a href="https://github.com/schlagmichdoch/PairDrop/issues">Request Feature</a>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
[PairDrop](https://pairdrop.net) is a sublime alternative to AirDrop that works on all platforms.
|
File sharing on your local network that works on all platforms.
|
||||||
|
|
||||||
- File Sharing on your local network
|
- A multi-platform AirDrop-like solution that works.
|
||||||
- Send images, documents or text via peer to peer connection to devices on the same local network.
|
- Send images, documents or text via peer-to-peer connection to devices on the same local network.
|
||||||
- Internet Transfers
|
- Internet transfers
|
||||||
- Join temporary public rooms to transfer files easily over the internet!
|
- Join temporary public rooms to transfer files easily over the Internet.
|
||||||
- Web-Application
|
- Web-app
|
||||||
- As it is web based, it runs on all devices.
|
- Works on all devices with a modern web-browser.
|
||||||
|
|
||||||
|
Send a file from your phone to your laptop?
|
||||||
|
<br>Share photos in original quality with friends using Android and iOS?
|
||||||
|
<br>Share private files peer-to-peer between Linux systems?
|
||||||
|
|
||||||
You want to quickly 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">
|
||||||
<br>You want to share photos in original quality with friends that use a mixture of Android and iOS?
|
|
||||||
<br>You want to share private files peer to peer between Linux systems?
|
|
||||||
<br>AirDrop is unreliable again?
|
|
||||||
<br>_Send it with PairDrop!_
|
|
||||||
|
|
||||||
Developed based on [Snapdrop](https://github.com/RobinLinus/snapdrop)
|
## Differences to the [Snapdrop](https://github.com/RobinLinus/snapdrop) it is based on
|
||||||
|
<details><summary>View all differences</summary>
|
||||||
|
|
||||||
## Differences to Snapdrop
|
### Paired Devices and Public Rooms — Internet Transfer
|
||||||
<details><summary>Click to expand</summary>
|
* Transfer files over the Internet between paired devices or by entering temporary public rooms.
|
||||||
|
* Connect to devices in complex network environments (public Wi-Fi, company network, iCloud Private Relay, VPN, etc.).
|
||||||
### Paired Devices and Public Rooms - Internet Transfer
|
|
||||||
* Transfer files over the internet between paired devices or by entering temporary public rooms.
|
|
||||||
* Connect to devices in complex network environments (public Wi-Fi, company network, Apple Private Relay, VPN etc.).
|
|
||||||
* Connect to devices on your mobile hotspot.
|
* Connect to devices on your mobile hotspot.
|
||||||
* Devices outside your local network that are behind a NAT are connected automatically via the PairDrop TURN server.
|
* Devices outside of your local network that are behind a NAT are auto-connected via the PairDrop TURN server.
|
||||||
* Connect to devices on your mobile hotspot.
|
* Devices from the local network, in the same public room, or previously paired are shown.
|
||||||
* You will always discover devices on your local network. Paired devices and devices in the same public room are shown additionally.
|
|
||||||
|
|
||||||
#### Persistent Device Pairing
|
#### Persistent Device Pairing
|
||||||
* Pair your devices via a 6-digit code or a QR-Code.
|
|
||||||
* Paired devices will always find each other via shared secrets independently of their local network.
|
Always connect to known devices
|
||||||
* Paired devices are persistent. You find your devices even after reopening PairDrop.
|
|
||||||
* You can edit and unpair devices easily
|
* Pair devices via a 6-digit code or a QR-Code.
|
||||||
* Ideal to always connect easily to your own devices
|
* Paired devices always find each other via shared secrets independently of their local network.
|
||||||
|
* Pairing is persistent. You find your devices even after reopening PairDrop.
|
||||||
|
* You can edit and unpair devices easily.
|
||||||
|
|
||||||
#### Temporary Public Rooms
|
#### Temporary Public Rooms
|
||||||
* Enter a public room via a 5-letter code or a QR-Code.
|
|
||||||
* Enter a public room to temporarily connect to devices outside your local network.
|
|
||||||
* All devices in the same public room see each other mutually.
|
|
||||||
* Public rooms are temporary. Public rooms are left as soon as PairDrop is closed.
|
|
||||||
* Ideal to connect easily to others in complex network situations or over the internet.
|
|
||||||
|
|
||||||
### [Improved UI for sending/receiving files](https://github.com/RobinLinus/snapdrop/issues/560)
|
Connect to others in complex network situations, or over the Internet.
|
||||||
* Files are transferred only after a request is accepted first. On transfer completion files are downloaded automatically if possible.
|
|
||||||
|
* Enter a public room via a 5-letter code or a QR-code.
|
||||||
|
* Enter a public room to temporarily connect to devices outside your local network.
|
||||||
|
* All devices in the same public room see each other.
|
||||||
|
* Public rooms are temporary. Closing PairDrop leaves all rooms.
|
||||||
|
|
||||||
|
### [Improved UI for Sending/Receiving Files](https://github.com/RobinLinus/snapdrop/issues/560)
|
||||||
|
* Files are transferred after a request is accepted. Files are auto-downloaded upon completing a transfer, if possible.
|
||||||
* Multiple files are downloaded as a ZIP file
|
* Multiple files are downloaded as a ZIP file
|
||||||
* On iOS and Android, in addition to downloading, files can be shared or saved to the gallery via the Share menu.
|
* Download, share or save to gallery via the "Share" menu on Android and iOS.
|
||||||
* Multiple files are transferred at once with an overall progress indicator
|
* Multiple files are transferred at once with an overall progress indicator.
|
||||||
|
|
||||||
### Send Files or Text Directly From Share Menu, Context Menu or CLI
|
### Send Files or Text Directly From Share Menu, Context Menu or CLI
|
||||||
* [Send files directly from context menu on Windows](docs/how-to.md#send-multiple-files-and-directories-directly-from-context-menu-on-windows)
|
* [Send files directly from context menu on Ubuntu (using Nautilus)](docs/how-to.md#send-multiple-files-and-directories-directly-from-context-menu-on-ubuntu-using-nautilus)
|
||||||
* [Send files directly from context menu on Ubuntu (using Nautilus)](/docs/how-to.md#send-multiple-files-and-directories-directly-from-context-menu-on-ubuntu-using-nautilus)
|
* [Send files directly from the context menu on Windows](docs/how-to.md#send-files-directly-from-context-menu-on-windows)
|
||||||
* [Send files directly from share menu on iOS](docs/how-to.md#send-directly-from-share-menu-on-ios)
|
* [Send directly from the "Share" menu on iOS](docs/how-to.md#send-directly-from-share-menu-on-ios)
|
||||||
* [Send files directly from share menu on Android](docs/how-to.md#send-directly-from-share-menu-on-android)
|
* [Send directly from the "Share" menu on Android](docs/how-to.md#send-directly-from-share-menu-on-android)
|
||||||
* [Send files directly via command-line interface](docs/how-to.md#send-directly-via-command-line-interface)
|
* [Send directly via the command-line interface](docs/how-to.md#send-directly-via-command-line-interface)
|
||||||
|
|
||||||
### Other changes
|
### Other Changes
|
||||||
* Change your display name permanently to easily differentiate your devices
|
* Change your display name to easily differentiate your devices.
|
||||||
* [Paste files/text and choose the recipient afterwords ](https://github.com/RobinLinus/snapdrop/pull/534)
|
* [Paste files/text and choose the recipient afterwards ](https://github.com/RobinLinus/snapdrop/pull/534)
|
||||||
* [Prevent devices from sleeping on file transfer](https://github.com/RobinLinus/snapdrop/pull/413)
|
* [Prevent devices from sleeping on file transfer](https://github.com/RobinLinus/snapdrop/pull/413)
|
||||||
* Warn user before PairDrop is closed on file transfer
|
* Warn user before PairDrop is closed on file transfer
|
||||||
* Open PairDrop on multiple tabs simultaneously (Thanks [@willstott101](https://github.com/willstott101))
|
* Open PairDrop on multiple tabs simultaneously (Thanks [@willstott101](https://github.com/willstott101))
|
||||||
* [Video and Audio preview](https://github.com/RobinLinus/snapdrop/pull/455) (Thanks [@victorwads](https://github.com/victorwads))
|
* [Video and audio preview](https://github.com/RobinLinus/snapdrop/pull/455) (Thanks [@victorwads](https://github.com/victorwads))
|
||||||
* Switch theme back to auto/system after darkmode or lightmode is enabled
|
* Switch theme back to auto/system after dark or light mode is on
|
||||||
* Node-only implementation (Thanks [@Bellisario](https://github.com/Bellisario))
|
* Node-only implementation (Thanks [@Bellisario](https://github.com/Bellisario))
|
||||||
* Automatic restart on error (Thanks [@KaKi87](https://github.com/KaKi87))
|
* Auto-restart on error (Thanks [@KaKi87](https://github.com/KaKi87))
|
||||||
* Lots of stability fixes (Thanks [@MWY001](https://github.com/MWY001) [@skiby7](https://github.com/skiby7) and [@willstott101](https://github.com/willstott101))
|
* Lots of stability fixes (Thanks [@MWY001](https://github.com/MWY001) [@skiby7](https://github.com/skiby7) and [@willstott101](https://github.com/willstott101))
|
||||||
* To host PairDrop on your local network (e.g. on Raspberry Pi): [All peers connected with private IPs are discoverable by each other](https://github.com/RobinLinus/snapdrop/pull/558)
|
* To host PairDrop on your local network (e.g. on Raspberry Pi): [All peers connected with private IPs are discoverable by each other](https://github.com/RobinLinus/snapdrop/pull/558)
|
||||||
* When hosting PairDrop yourself you can [set your own STUN/TURN servers](docs/host-your-own.md#specify-stunturn-servers)
|
* When hosting PairDrop yourself, you can [set your own STUN/TURN servers](docs/host-your-own.md#specify-stunturn-servers)
|
||||||
* Built-in translations via [Weblate](https://hosted.weblate.org/engage/pairdrop/)
|
* Translations.
|
||||||
* Airy design (Thanks [@Avieshek](https://linktr.ee/avieshek/))
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Screenshots
|
## Translate PairDrop on [Hosted Weblate](https://hosted.weblate.org/engage/pairdrop/)
|
||||||
<img src="docs/pairdrop_screenshot_mobile.gif" alt="Gif of Screenshots that show PairDrop in use" style="width: 300px">
|
|
||||||
|
|
||||||
## PairDrop is built with the following awesome technologies:
|
|
||||||
* Vanilla HTML5 / ES6 / CSS3 frontend
|
|
||||||
* [WebRTC](http://webrtc.org/) / [WebSockets](http://www.websocket.org/)
|
|
||||||
* [NodeJS](https://nodejs.org/en/) backend
|
|
||||||
* [Progressive Web App](https://wikipedia.org/wiki/Progressive_Web_App)
|
|
||||||
* [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API)
|
|
||||||
* [Weblate](https://weblate.org/) Web based localization tool
|
|
||||||
* [zip.js](https://github.com/gildas-lormeau/zip.js) JavaScript library to zip and unzip files ([BSD 3-Clause License](licenses/BSD_3-Clause-zip-js))
|
|
||||||
* [NoSleep](https://github.com/richtr/NoSleep.js) JavaScript library to prevent display sleep and enable wake lock in any Android or iOS web browser ([MIT License](licenses/MIT-NoSleep))
|
|
||||||
* [heic2any](https://github.com/alexcorvi/heic2any) JavaScript library to convert HEIC/HEIF images to PNG/GIF/JPEG ([MIT License](licenses/MIT-heic2any))
|
|
||||||
* [cyrb53](https://github.com/bryc) Super fast hash function
|
|
||||||
|
|
||||||
Have any questions? Read our [FAQ](docs/faq.md).
|
|
||||||
|
|
||||||
You can [host your own instance with Docker](docs/host-your-own.md).
|
|
||||||
|
|
||||||
|
|
||||||
## Support PairDrop
|
|
||||||
<a href="https://www.buymeacoffee.com/pairdrop" target="_blank">
|
|
||||||
<img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" >
|
|
||||||
</a>
|
|
||||||
|
|
||||||
PairDrop is free and always will be.
|
|
||||||
Still, we have to pay for the domain and the server.
|
|
||||||
|
|
||||||
To contribute and support, please use BuyMeACoffee via the button above.
|
|
||||||
|
|
||||||
Thanks a lot for supporting free and open software!
|
|
||||||
|
|
||||||
## Translate PairDrop
|
|
||||||
<a href="https://hosted.weblate.org/engage/pairdrop/">
|
<a href="https://hosted.weblate.org/engage/pairdrop/">
|
||||||
<img src="https://hosted.weblate.org/widget/pairdrop/pairdrop-spa/open-graph.png" alt="Translation status" style="width: 300px" />
|
<img src="https://hosted.weblate.org/widget/pairdrop/horizontal-blue.svg" alt="Translation status" style="width: 300px" />
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
## How to contribute
|
## Built with the following awesome technologies:
|
||||||
|
* Vanilla HTML5 / JS ES6 / CSS 3 frontend
|
||||||
|
* [WebRTC](http://webrtc.org/) / WebSockets
|
||||||
|
* [Node.js](https://nodejs.org/en/) backend
|
||||||
|
* [Progressive web app (PWA)](https://en.wikipedia.org/wiki/Progressive_web_app) unified functionality
|
||||||
|
* [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) storage handling
|
||||||
|
* [zip.js](https://gildas-lormeau.github.io/zip.js/) library
|
||||||
|
* [cyrb53](https://github.com/bryc/code/blob/master/jshash/experimental/cyrb53.js) super-fast hash function
|
||||||
|
* [NoSleep](https://github.com/richtr/NoSleep.js) display sleep, add wake lock ([MIT](licenses/MIT-NoSleep))
|
||||||
|
* [heic2any](https://github.com/alexcorvi/heic2any) HEIC/HEIF to PNG/GIF/JPEG ([MIT](licenses/MIT-heic2any))
|
||||||
|
* [Weblate](https://weblate.org/) web-based localization tool
|
||||||
|
* [BrowserStack](https://www.browserstack.com/) This project is tested with BrowserStack
|
||||||
|
|
||||||
|
[FAQ](docs/faq.md)
|
||||||
|
|
||||||
|
[Host your own instance with Docker or Node.js](docs/host-your-own.md).
|
||||||
|
|
||||||
|
## Support
|
||||||
|
<a href="https://www.buymeacoffee.com/pairdrop" target="_blank">
|
||||||
|
<img src="https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy me a coffee" style="height: 60px !important;width: 217px !important;" >
|
||||||
|
</a>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
PairDrop is libre, and always will be. \
|
||||||
|
If you find it useful and want to support free and open-source software, please consider donating using the button above. \
|
||||||
|
I footed the bill for the domain and the server, and you can help create and maintain great software by supporting me. \
|
||||||
|
Thank you very much for your contribution!
|
||||||
|
|
||||||
|
## Contributing
|
||||||
Feel free to [open an issue](https://github.com/schlagmichdoch/pairdrop/issues/new/choose) or a
|
Feel free to [open an issue](https://github.com/schlagmichdoch/pairdrop/issues/new/choose) or a
|
||||||
[pull request](https://github.com/schlagmichdoch/pairdrop/pulls) but follow
|
[pull request](https://github.com/schlagmichdoch/pairdrop/pulls), following the
|
||||||
[Contributing Guidelines](CONTRIBUTING.md).
|
[Contributing Guidelines](CONTRIBUTING.md).
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
FROM nginx:alpine
|
||||||
|
|
||||||
|
RUN apk add --no-cache openssl
|
|
@ -0,0 +1,42 @@
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
expires epoch;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_connect_timeout 300;
|
||||||
|
proxy_pass http://pairdrop:3000;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /ca.crt {
|
||||||
|
alias /etc/ssl/certs/pairdropCA.crt;
|
||||||
|
}
|
||||||
|
|
||||||
|
# To allow POST on static pages
|
||||||
|
error_page 405 =200 $uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
http2 on;
|
||||||
|
ssl_certificate /etc/ssl/certs/pairdrop-dev.crt;
|
||||||
|
ssl_certificate_key /etc/ssl/certs/pairdrop-dev.key;
|
||||||
|
|
||||||
|
expires epoch;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_connect_timeout 300;
|
||||||
|
proxy_pass http://pairdrop:3000;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /ca.crt {
|
||||||
|
alias /etc/ssl/certs/pairdropCA.crt;
|
||||||
|
}
|
||||||
|
# To allow POST on static pages
|
||||||
|
error_page 405 =200 $uri;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cnf_dir='/mnt/openssl/'
|
||||||
|
certs_dir='/etc/ssl/certs/'
|
||||||
|
openssl req -config ${cnf_dir}pairdropCA.cnf -new -x509 -days 1 -keyout ${certs_dir}pairdropCA.key -out ${certs_dir}pairdropCA.crt
|
||||||
|
openssl req -config ${cnf_dir}pairdropCert.cnf -new -out /tmp/pairdrop-dev.csr -keyout ${certs_dir}pairdrop-dev.key
|
||||||
|
openssl x509 -req -in /tmp/pairdrop-dev.csr -CA ${certs_dir}pairdropCA.crt -CAkey ${certs_dir}pairdropCA.key -CAcreateserial -extensions req_ext -extfile ${cnf_dir}pairdropCert.cnf -sha512 -days 1 -out ${certs_dir}pairdrop-dev.crt
|
||||||
|
|
||||||
|
exec "$@"
|
|
@ -0,0 +1,26 @@
|
||||||
|
[ req ]
|
||||||
|
default_bits = 2048
|
||||||
|
default_md = sha256
|
||||||
|
default_days = 1
|
||||||
|
encrypt_key = no
|
||||||
|
distinguished_name = subject
|
||||||
|
x509_extensions = x509_ext
|
||||||
|
string_mask = utf8only
|
||||||
|
prompt = no
|
||||||
|
|
||||||
|
[ subject ]
|
||||||
|
organizationName = PairDrop
|
||||||
|
OU = CA
|
||||||
|
commonName = pairdrop-CA
|
||||||
|
|
||||||
|
[ x509_ext ]
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid:always,issuer
|
||||||
|
|
||||||
|
# You only need digitalSignature below. *If* you don't allow
|
||||||
|
# RSA Key transport (i.e., you use ephemeral cipher suites), then
|
||||||
|
# omit keyEncipherment because that's key transport.
|
||||||
|
|
||||||
|
basicConstraints = critical, CA:TRUE, pathlen:0
|
||||||
|
keyUsage = critical, digitalSignature, keyEncipherment, cRLSign, keyCertSign
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
[ req ]
|
||||||
|
default_bits = 2048
|
||||||
|
default_md = sha256
|
||||||
|
default_days = 1
|
||||||
|
encrypt_key = no
|
||||||
|
distinguished_name = subject
|
||||||
|
req_extensions = req_ext
|
||||||
|
string_mask = utf8only
|
||||||
|
prompt = no
|
||||||
|
|
||||||
|
[ subject ]
|
||||||
|
organizationName = PairDrop
|
||||||
|
OU = Development
|
||||||
|
|
||||||
|
# Use a friendly name here because it's presented to the user. The server's DNS
|
||||||
|
# names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
|
||||||
|
# by both IETF and CA/Browser Forums. If you place a DNS name here, then you
|
||||||
|
# must include the DNS name in the SAN too (otherwise, Chrome and others that
|
||||||
|
# strictly follow the CA/Browser Baseline Requirements will fail).
|
||||||
|
|
||||||
|
commonName = ${ENV::FQDN}
|
||||||
|
|
||||||
|
[ req_ext ]
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
basicConstraints = CA:FALSE
|
||||||
|
keyUsage = digitalSignature, keyEncipherment
|
||||||
|
subjectAltName = DNS:${ENV::FQDN}
|
||||||
|
nsComment = "OpenSSL Generated Certificate"
|
||||||
|
extendedKeyUsage = serverAuth
|
|
@ -0,0 +1,34 @@
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
pairdrop:
|
||||||
|
build: .
|
||||||
|
container_name: pairdrop
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- PUID=1000 # UID to run the application as
|
||||||
|
- PGID=1000 # GID to run the application as
|
||||||
|
- WS_FALLBACK=false # Set to true to enable websocket fallback if the peer to peer WebRTC connection is not available to the client.
|
||||||
|
- RATE_LIMIT=false # Set to true to limit clients to 1000 requests per 5 min.
|
||||||
|
- RTC_CONFIG=false # Set to the path of a file that specifies the STUN/TURN servers.
|
||||||
|
- DEBUG_MODE=false # Set to true to debug container and peer connections.
|
||||||
|
- TZ=Etc/UTC # Time Zone
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:3000:3000" # Web UI. Change the port number before the last colon e.g. `127.0.0.1:9000:3000`
|
||||||
|
nginx:
|
||||||
|
build:
|
||||||
|
context: dev/
|
||||||
|
dockerfile: nginx-with-openssl.Dockerfile
|
||||||
|
image: "nginx-with-openssl"
|
||||||
|
volumes:
|
||||||
|
- ./public:/usr/share/nginx/html
|
||||||
|
- ./dev/certs:/etc/ssl/certs
|
||||||
|
- ./dev/openssl:/mnt/openssl
|
||||||
|
- ./dev/nginx/default.conf:/etc/nginx/conf.d/default.conf
|
||||||
|
ports:
|
||||||
|
- "8080:80"
|
||||||
|
- "8443:443"
|
||||||
|
environment:
|
||||||
|
- FQDN=localhost
|
||||||
|
entrypoint: /mnt/openssl/create.sh
|
||||||
|
command: ["nginx", "-g", "daemon off;"]
|
||||||
|
restart: unless-stopped
|
90
docs/faq.md
90
docs/faq.md
|
@ -5,18 +5,39 @@
|
||||||
Help! I can't install the PWA!
|
Help! I can't install the PWA!
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
if you are using a Chromium-based browser (Chrome, Edge, Vivaldi, Brave, etc.), you can easily install PairDrop PWA on your desktop
|
<br>
|
||||||
by clicking the install-button in the top-right corner while on [pairdrop.net](https://pairdrop.net).
|
|
||||||
|
Here is a good guide on how to install PWAs on different platforms: \
|
||||||
|
https://www.cdc.gov/niosh/mining/content/hearingloss/installPWA.html
|
||||||
|
|
||||||
|
|
||||||
|
**Chromium-based browser on Desktop (Chrome, Edge, Vivaldi, Brave, etc.)** \
|
||||||
|
Easily install PairDrop PWA on your desktop by clicking the install-button in the top-right corner while on [pairdrop.net](https://pairdrop.net).
|
||||||
|
|
||||||
<img width="400" src="pwa-install.png" alt="Example on how to install a pwa with Edge">
|
<img width="400" src="pwa-install.png" alt="Example on how to install a pwa with Edge">
|
||||||
|
|
||||||
|
**Desktop Firefox** \
|
||||||
On Firefox, PWAs are installable via [this browser extensions](https://addons.mozilla.org/de/firefox/addon/pwas-for-firefox/)
|
On Firefox, PWAs are installable via [this browser extensions](https://addons.mozilla.org/de/firefox/addon/pwas-for-firefox/)
|
||||||
|
|
||||||
|
**Android** \
|
||||||
|
PWAs are installable only by using Google Chrome or Samsung Browser:
|
||||||
|
1. Visit [pairdrop.net](https://pairdrop.net)
|
||||||
|
2. Click _Install_ on the installation pop-up or use the three-dot-menu and click on _Add to Home screen_
|
||||||
|
3. Click _Add_ on the pop-up
|
||||||
|
|
||||||
|
**iOS** \
|
||||||
|
PWAs are installable only by using Safari:
|
||||||
|
1. Visit [pairdrop.net](https://pairdrop.net)
|
||||||
|
2. Click on the share icon
|
||||||
|
3. Click _Add to Home Screen_
|
||||||
|
4. Click _Add_ in the top right corner
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<b>Self-Hosted Instance?</b>
|
**Self-Hosted Instance?** \
|
||||||
|
|
||||||
To be able to install the PWA from a self-hosted instance, the connection needs to be [established through HTTPS](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Installable_PWAs).
|
To be able to install the PWA from a self-hosted instance, the connection needs to be [established through HTTPS](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Installable_PWAs).
|
||||||
See [this host your own section](https://github.com/schlagmichdoch/PairDrop/blob/master/docs/host-your-own.md#testing-pwa-related-features) for more info.
|
See [this host your own section](https://github.com/schlagmichdoch/PairDrop/blob/master/docs/host-your-own.md#testing-pwa-related-features) for more info.
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -26,7 +47,9 @@ See [this host your own section](https://github.com/schlagmichdoch/PairDrop/blob
|
||||||
Shortcuts?
|
Shortcuts?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
Shortcuts
|
<br>
|
||||||
|
|
||||||
|
Available shortcuts:
|
||||||
- Send a message with `CTRL + ENTER`
|
- Send a message with `CTRL + ENTER`
|
||||||
- Close all "Send" and "Pair" dialogs by pressing `Esc`.
|
- Close all "Send" and "Pair" dialogs by pressing `Esc`.
|
||||||
- Copy a received message to the clipboard with `CTRL/⌘ + C`.
|
- Copy a received message to the clipboard with `CTRL/⌘ + C`.
|
||||||
|
@ -40,12 +63,20 @@ Shortcuts
|
||||||
How to save images directly to the gallery on iOS?
|
How to save images directly to the gallery on iOS?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
Apparently, iOS does not allow images shared from a website to be saved to the gallery directly.
|
<br>
|
||||||
It simply does not offer that option for images shared from a website.
|
|
||||||
|
|
||||||
iOS Shortcuts saves the day:
|
~~Apparently, iOS does not allow images shared from a website to be saved to the gallery directly.~~
|
||||||
|
~~It simply does not offer that option for images shared from a website.~~
|
||||||
|
|
||||||
|
~~iOS Shortcuts saves the day:~~ \
|
||||||
I created a simple iOS shortcut that takes your photos and saves them to your gallery:
|
I created a simple iOS shortcut that takes your photos and saves them to your gallery:
|
||||||
https://routinehub.co/shortcut/13988/
|
https://routinehub.co/shortcut/13988/
|
||||||
|
|
||||||
|
Update: \
|
||||||
|
Apparently, this was only a bug that is fixed in recent iOS version (https://github.com/WebKit/WebKit/pull/13111). \
|
||||||
|
If you use an older affected iOS version this might still be of use. \
|
||||||
|
Luckily, you can now simply use `Save Image`/`Save X Images` 🎉
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -55,10 +86,13 @@ https://routinehub.co/shortcut/13988/
|
||||||
Is it possible to send files or text directly from the "Context" or "Share" menu?
|
Is it possible to send files or text directly from the "Context" or "Share" menu?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
Yes, it finally is.
|
Yes, it finally is.
|
||||||
* [Send files directly from the "Context" menu on Windows](/docs/how-to.md#send-files-directly-from-context-menu-on-windows)
|
* [Send files directly from the "Context" menu on Windows](/docs/how-to.md#send-files-directly-from-context-menu-on-windows)
|
||||||
* [Send directly from the "Share" menu on iOS](/docs/how-to.md#send-directly-from-share-menu-on-ios)
|
* [Send directly from the "Share" menu on iOS](/docs/how-to.md#send-directly-from-share-menu-on-ios)
|
||||||
* [Send directly from the "Share" menu on Android](/docs/how-to.md#send-directly-from-share-menu-on-android)
|
* [Send directly from the "Share" menu on Android](/docs/how-to.md#send-directly-from-share-menu-on-android)
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -68,9 +102,12 @@ Yes, it finally is.
|
||||||
Is it possible to send files or text directly via CLI?
|
Is it possible to send files or text directly via CLI?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
Yes.
|
Yes.
|
||||||
|
|
||||||
* [Send directly from a command-line interface](/docs/how-to.md#send-directly-via-command-line-interface)
|
* [Send directly from a command-line interface](/docs/how-to.md#send-directly-via-command-line-interface)
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -80,11 +117,14 @@ Yes.
|
||||||
Are there any third-party Apps?
|
Are there any third-party Apps?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
These third-party apps are compatible with PairDrop:
|
These third-party apps are compatible with PairDrop:
|
||||||
|
|
||||||
1. [Snapdrop Android App](https://github.com/fm-sys/snapdrop-android)
|
1. [Snapdrop Android App](https://github.com/fm-sys/snapdrop-android)
|
||||||
2. [Snapdrop for Firefox (Addon)](https://github.com/ueen/SnapdropFirefoxAddon)
|
2. [Snapdrop for Firefox (Addon)](https://github.com/ueen/SnapdropFirefoxAddon)
|
||||||
3. Feel free to make one :)
|
3. Feel free to make one :)
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -94,6 +134,8 @@ These third-party apps are compatible with PairDrop:
|
||||||
What about the connection? Is it a P2P connection directly from device to device or is there any third-party-server?
|
What about the connection? Is it a P2P connection directly from device to device or is there any third-party-server?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
It uses a WebRTC peer-to-peer connection.
|
It uses a WebRTC peer-to-peer connection.
|
||||||
WebRTC needs a signaling server that is only used to establish a connection.
|
WebRTC needs a signaling server that is only used to establish a connection.
|
||||||
The server is not involved in the file transfer.
|
The server is not involved in the file transfer.
|
||||||
|
@ -109,6 +151,7 @@ to learn more about STUN, TURN and WebRTC.
|
||||||
If you host your own instance
|
If you host your own instance
|
||||||
and want to support devices that do not support WebRTC,
|
and want to support devices that do not support WebRTC,
|
||||||
you can [start the PairDrop instance with an activated WebSocket fallback](https://github.com/schlagmichdoch/PairDrop/blob/master/docs/host-your-own.md#websocket-fallback-for-vpn).
|
you can [start the PairDrop instance with an activated WebSocket fallback](https://github.com/schlagmichdoch/PairDrop/blob/master/docs/host-your-own.md#websocket-fallback-for-vpn).
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -118,9 +161,11 @@ you can [start the PairDrop instance with an activated WebSocket fallback](https
|
||||||
What about privacy? Will files be saved on third-party servers?
|
What about privacy? Will files be saved on third-party servers?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
Files are sent directly between peers.
|
Files are sent directly between peers.
|
||||||
PairDrop doesn't even use a database.
|
PairDrop doesn't even use a database.
|
||||||
If curious, study [the server](https://github.com/schlagmichdoch/pairdrop/blob/master/index.js).
|
If curious, study [the signaling server](https://github.com/schlagmichdoch/PairDrop/blob/master/server/ws-server.js).
|
||||||
WebRTC encrypts the files in transit.
|
WebRTC encrypts the files in transit.
|
||||||
|
|
||||||
If the devices are on the same network,
|
If the devices are on the same network,
|
||||||
|
@ -130,6 +175,7 @@ If your devices are paired and behind a NAT,
|
||||||
the PairDrop TURN Server is used to route your files and messages.
|
the PairDrop TURN Server is used to route your files and messages.
|
||||||
See the [Technical Documentation](technical-documentation.md#encryption-webrtc-stun-and-turn)
|
See the [Technical Documentation](technical-documentation.md#encryption-webrtc-stun-and-turn)
|
||||||
to learn more about STUN, TURN and WebRTC.
|
to learn more about STUN, TURN and WebRTC.
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -139,10 +185,12 @@ to learn more about STUN, TURN and WebRTC.
|
||||||
What about security? Are my files encrypted while sent between the computers?
|
What about security? Are my files encrypted while sent between the computers?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
Yes. Your files are sent using WebRTC, encrypting them in transit.
|
Yes. Your files are sent using WebRTC, encrypting them in transit.
|
||||||
To ensure the connection is secure and there is no [MITM](https://wikiless.org/wiki/Man-in-the-middle_attack),
|
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
|
||||||
compare the security number shown under the device name on both devices.
|
zero trust by encrypting the signaling and implementing a verification process. See [issue #180](https://github.com/schlagmichdoch/PairDrop/issues/180) to keep updated.
|
||||||
The security number is different for every connection.
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -152,6 +200,8 @@ The security number is different for every connection.
|
||||||
Transferring many files with paired devices takes too long
|
Transferring many files with paired devices takes too long
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
Naturally, if traffic needs to be routed through the TURN server
|
Naturally, if traffic needs to be routed through the TURN server
|
||||||
because your devices are behind different NATs, transfer speed decreases.
|
because your devices are behind different NATs, transfer speed decreases.
|
||||||
|
|
||||||
|
@ -164,6 +214,7 @@ which omits the need of the TURN server.
|
||||||
|
|
||||||
You can also use mobile hotspots on phones to do that.
|
You can also use mobile hotspots on phones to do that.
|
||||||
Then, all data should be sent directly between devices and not use your data plan.
|
Then, all data should be sent directly between devices and not use your data plan.
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -173,6 +224,8 @@ Then, all data should be sent directly between devices and not use your data pla
|
||||||
Why don't you implement feature xyz?
|
Why don't you implement feature xyz?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
Snapdrop and PairDrop are a study in radical simplicity.
|
Snapdrop and PairDrop are a study in radical simplicity.
|
||||||
The user interface is insanely simple.
|
The user interface is insanely simple.
|
||||||
Features are chosen very carefully because complexity grows quadratically
|
Features are chosen very carefully because complexity grows quadratically
|
||||||
|
@ -184,22 +237,24 @@ Don't be sad. We may decline your feature request for the sake of simplicity.
|
||||||
Read *Insanely Simple: The Obsession that Drives Apple's Success*,
|
Read *Insanely Simple: The Obsession that Drives Apple's Success*,
|
||||||
and/or *Thinking, Fast and Slow* to learn more.
|
and/or *Thinking, Fast and Slow* to learn more.
|
||||||
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary style="font-size:1.25em;margin-top: 24px; margin-bottom: 16px; font-weight: var(--base-text-weight-semibold, 600); line-height: 1.25;">
|
<summary style="font-size:1.25em;margin-top: 24px; margin-bottom: 16px; font-weight: var(--base-text-weight-semibold, 600); line-height: 1.25;">
|
||||||
Snapdrop and PairDrop are awesome. How can I support them?
|
PairDrop is awesome. How can I support it?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
* [Buy me a coffee](https://www.buymeacoffee.com/pairdrop) to pay for the domain and the server, and support libre software.
|
* [Buy me a coffee](https://www.buymeacoffee.com/pairdrop) to pay for the domain and the server, and support libre software.
|
||||||
* [File bugs, give feedback, submit suggestions](https://github.com/schlagmichdoch/pairdrop/issues)
|
* [File bugs, give feedback, submit suggestions](https://github.com/schlagmichdoch/pairdrop/issues)
|
||||||
* Share PairDrop on social media.
|
* Share PairDrop on social media.
|
||||||
* Fix bugs and make a pull request.
|
* Fix bugs and create a pull request.
|
||||||
* Do some security analysis and make suggestions.
|
* Do some security analysis and make suggestions.
|
||||||
* To support the original Snapdrop and its creator go to [his GitHub page](https://github.com/RobinLinus/snapdrop)
|
* Participate in [active discussions](https://github.com/schlagmichdoch/PairDrop/discussions)
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -209,7 +264,10 @@ and/or *Thinking, Fast and Slow* to learn more.
|
||||||
How does it work?
|
How does it work?
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
[See here for info about the technical implementation](/docs/technical-documentation.md)
|
[See here for info about the technical implementation](/docs/technical-documentation.md)
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -556,10 +556,6 @@ a2enmod proxy
|
||||||
a2enmod proxy_http
|
a2enmod proxy_http
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
|
||||||
a2enmod proxy_wstunnel
|
|
||||||
```
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
Create a new configuration file under `/etc/apache2/sites-available` (on Debian)
|
Create a new configuration file under `/etc/apache2/sites-available` (on Debian)
|
||||||
|
@ -570,18 +566,10 @@ Create a new configuration file under `/etc/apache2/sites-available` (on Debian)
|
||||||
|
|
||||||
```apacheconf
|
```apacheconf
|
||||||
<VirtualHost *:80>
|
<VirtualHost *:80>
|
||||||
ProxyPass / http://127.0.0.1:3000/
|
ProxyPass / http://127.0.0.1:3000/ upgrade=websocket
|
||||||
RewriteEngine on
|
|
||||||
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
|
||||||
RewriteCond %{HTTP:Connection} upgrade [NC]
|
|
||||||
RewriteRule ^/?(.*) "ws://127.0.0.1:3000/$1" [P,L]
|
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
<VirtualHost *:443>
|
<VirtualHost *:443>
|
||||||
ProxyPass / https://127.0.0.1:3000/
|
ProxyPass / https://127.0.0.1:3000/ upgrade=websocket
|
||||||
RewriteEngine on
|
|
||||||
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
|
||||||
RewriteCond %{HTTP:Connection} upgrade [NC]
|
|
||||||
RewriteRule ^/?(.*) "wws://127.0.0.1:3000/$1" [P,L]
|
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -589,14 +577,10 @@ Create a new configuration file under `/etc/apache2/sites-available` (on Debian)
|
||||||
|
|
||||||
```apacheconf
|
```apacheconf
|
||||||
<VirtualHost *:80>
|
<VirtualHost *:80>
|
||||||
Redirect permanent / https://127.0.0.1:3000/
|
Redirect permanent / https://127.0.0.1:3000/
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
<VirtualHost *:443>
|
<VirtualHost *:443>
|
||||||
ProxyPass / https://127.0.0.1:3000/
|
ProxyPass / http://127.0.0.1:3000/ upgrade=websocket
|
||||||
RewriteEngine on
|
|
||||||
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
|
||||||
RewriteCond %{HTTP:Connection} upgrade [NC]
|
|
||||||
RewriteRule ^/?(.*) "wws://127.0.0.1:3000/$1" [P,L]
|
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -652,68 +636,74 @@ To run PairDrop including its own coturn-server you need to punch holes in the f
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
### Firewall
|
|
||||||
To run PairDrop including its own coturn-server you need to punch holes in the firewall. These ports must be opened additionally:
|
|
||||||
- 3478 tcp/udp
|
|
||||||
- 5349 tcp/udp
|
|
||||||
- 10000:20000 tcp/udp
|
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
## Local Development
|
## Local Development
|
||||||
|
|
||||||
### Install
|
### Install
|
||||||
|
|
||||||
All files needed for developing are available on the branch `dev`.
|
All files needed for developing are available in the folder `./dev`.
|
||||||
|
|
||||||
First, [Install docker with docker-compose.](https://docs.docker.com/compose/install/)
|
For convenience, there is also a docker compose file for developing:
|
||||||
|
|
||||||
Then, clone the repository and run docker-compose:
|
#### Developing with docker compose
|
||||||
|
First, [Install docker with docker compose.](https://docs.docker.com/compose/install/)
|
||||||
|
|
||||||
|
Then, clone the repository and run docker compose:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/schlagmichdoch/PairDrop.git && cd PairDrop
|
git clone https://github.com/schlagmichdoch/PairDrop.git && cd PairDrop
|
||||||
```
|
```
|
||||||
```bash
|
```bash
|
||||||
git checkout dev
|
docker compose -f docker-compose-dev.yml up --no-deps --build
|
||||||
```
|
|
||||||
```bash
|
|
||||||
docker compose -f docker-compose-dev.yml up -d
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Now point your web browser to `http://localhost:8080`.
|
Now point your web browser to `http://localhost:8080`.
|
||||||
|
|
||||||
- To restart the containers, run `docker compose restart`.
|
|
||||||
- To stop the containers, run `docker compose stop`.
|
|
||||||
- To debug the Node.js server, run `docker logs pairdrop`.
|
- To debug the Node.js server, run `docker logs pairdrop`.
|
||||||
|
- After changes to the code you have to rerun the `docker compose` command
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
### Testing PWA related features
|
#### Testing PWA related features
|
||||||
|
|
||||||
PWAs requires the app to be served under a correctly set up and trusted TLS endpoint.
|
PWAs requires the app to be served under a correctly set up and trusted TLS endpoint.
|
||||||
|
|
||||||
The NGINX container creates a CA certificate and a website certificate for you.
|
The NGINX container creates a CA certificate and a website certificate for you.
|
||||||
To correctly set the common name of the certificate,
|
To correctly set the common name of the certificate,
|
||||||
you need to change the FQDN environment variable in `docker/fqdn.env`
|
you need to change the FQDN environment variable in `docker-compose-dev.yml`
|
||||||
to the fully qualified domain name of your workstation.
|
to the fully qualified domain name of your workstation. (Default: localhost)
|
||||||
|
|
||||||
If you want to test PWA features, you need to trust the CA of the certificate for your local deployment. \
|
If you want to test PWA features, you need to trust the CA of the certificate for your local deployment. \
|
||||||
For your convenience, you can download the crt file from `http://<Your FQDN>:8080/ca.crt`. \
|
For your convenience, you can download the crt file from `http://<Your FQDN>:8080/ca.crt`. \
|
||||||
Install that certificate to the trust store of your operating system. \
|
Install that certificate to the trust store of your operating system. \
|
||||||
|
|
||||||
- On Windows, make sure to install it to the `Trusted Root Certification Authorities` store.
|
##### Windows
|
||||||
- On macOS, double-click the installed CA certificate in `Keychain Access`,
|
- Make sure to install it to the `Trusted Root Certification Authorities` store.
|
||||||
|
|
||||||
|
##### macOS
|
||||||
|
- Double-click the installed CA certificate in `Keychain Access`,
|
||||||
- expand `Trust`, and select `Always Trust` for SSL.
|
- expand `Trust`, and select `Always Trust` for SSL.
|
||||||
- Firefox uses its own trust store. To install the CA,
|
|
||||||
- point Firefox at `http://<Your FQDN>:8080/ca.crt`.
|
##### Firefox
|
||||||
|
Firefox uses its own trust store. To install the CA:
|
||||||
|
- point Firefox at `http://<Your FQDN>:8080/ca.crt` (Default: `http://localhost:8080/ca.crt`)
|
||||||
- When prompted, select `Trust this CA to identify websites` and click _OK_.
|
- When prompted, select `Trust this CA to identify websites` and click _OK_.
|
||||||
|
|
||||||
|
Alternatively:
|
||||||
|
1. Download `ca.crt` from `http://<Your FQDN>:8080/ca.crt` (Default: `http://localhost:8080/ca.crt`)
|
||||||
|
2. Go to `about:preferences#privacy` scroll down to `Security` and `Certificates` and click `View Certificates`
|
||||||
|
3. Import the downloaded certificate file (step 1)
|
||||||
|
|
||||||
|
##### Chrome
|
||||||
- When using Chrome, you need to restart Chrome so it reloads the trust store (`chrome://restart`).
|
- When using Chrome, you need to restart Chrome so it reloads the trust store (`chrome://restart`).
|
||||||
- Additionally, after installing a new cert, you need to clear the Storage (DevTools → Application → Clear storage → Clear site data).
|
- Additionally, after installing a new cert, you need to clear the Storage (DevTools → Application → Clear storage → Clear site data).
|
||||||
|
|
||||||
|
##### Google Chrome
|
||||||
|
- To skip the installation of the certificate, you can also open `chrome://flags/#unsafely-treat-insecure-origin-as-secure`
|
||||||
|
- The feature `Insecure origins treated as secure` must be enabled and the list must include your PairDrop test instance. E.g.: `http://127.0.0.1:3000,https://127.0.0.1:8443`
|
||||||
|
|
||||||
Please note that the certificates (CA and webserver cert) expire after a day.
|
Please note that the certificates (CA and webserver cert) expire after a day.
|
||||||
Also, whenever you restart the NGINX Docker container new certificates are created.
|
Also, whenever you restart the NGINX Docker container new certificates are created.
|
||||||
|
|
||||||
The site is served on `https://<Your FQDN>:8443`.
|
The site is served on `https://<Your FQDN>:8443` (Default: `https://localhost:8443`).
|
||||||
|
|
||||||
[< Back](/README.md)
|
[< Back](/README.md)
|
||||||
|
|
|
@ -45,11 +45,11 @@ This pairdrop-cli version was released alongside v1.10.4
|
||||||
#### Linux / Mac
|
#### Linux / Mac
|
||||||
1. Download the latest _pairdrop-cli.zip_ from the [releases page](https://github.com/schlagmichdoch/PairDrop/releases)
|
1. Download the latest _pairdrop-cli.zip_ from the [releases page](https://github.com/schlagmichdoch/PairDrop/releases)
|
||||||
```shell
|
```shell
|
||||||
wget "https://github.com/schlagmichdoch/PairDrop/releases/download/v1.10.6/pairdrop-cli.zip"
|
wget "https://github.com/schlagmichdoch/PairDrop/releases/download/v1.11.2/pairdrop-cli.zip"
|
||||||
```
|
```
|
||||||
or
|
or
|
||||||
```shell
|
```shell
|
||||||
curl -LO "https://github.com/schlagmichdoch/PairDrop/releases/download/v1.10.6/pairdrop-cli.zip"
|
curl -LO "https://github.com/schlagmichdoch/PairDrop/releases/download/v1.11.2/pairdrop-cli.zip"
|
||||||
```
|
```
|
||||||
2. Unzip the archive to a folder of your choice e.g. `/usr/share/pairdrop-cli/`
|
2. Unzip the archive to a folder of your choice e.g. `/usr/share/pairdrop-cli/`
|
||||||
```shell
|
```shell
|
||||||
|
@ -125,7 +125,7 @@ It is possible to send multiple files with PairDrop via the context menu by addi
|
||||||
```
|
```
|
||||||
3. Make the shell file _send-with-pairdrop_ executable
|
3. Make the shell file _send-with-pairdrop_ executable
|
||||||
```shell
|
```shell
|
||||||
chmod +x ~/.local/share/nautilus/scripts/send-with-pairdrop`
|
chmod +x ~/.local/share/nautilus/scripts/send-with-pairdrop
|
||||||
```
|
```
|
||||||
4. You are done! You can now send multiple files and directories directly via PairDrop:
|
4. You are done! You can now send multiple files and directories directly via PairDrop:
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "pairdrop",
|
"name": "pairdrop",
|
||||||
"version": "1.10.6",
|
"version": "1.11.2",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "server/index.js",
|
"main": "server/index.js",
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
<meta name="theme-color" content="#3367d6">
|
<meta name="theme-color" content="#3367d6">
|
||||||
<meta name="color-scheme" content="dark light">
|
<meta name="color-scheme" content="dark light">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||||
<meta name="apple-mobile-web-app-title" content="PairDrop">
|
<meta name="apple-mobile-web-app-title" content="PairDrop">
|
||||||
<meta name="application-name" content="PairDrop">
|
<meta name="application-name" content="PairDrop">
|
||||||
<!-- Descriptions -->
|
<!-- Descriptions -->
|
||||||
|
@ -159,7 +160,7 @@
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="known-as-wrapper">
|
<div class="known-as-wrapper">
|
||||||
<span data-i18n-key="footer.known-as" data-i18n-attrs="text"></span>
|
<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" placeholder="Loading..." 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" autocorrect="off" autocomplete="off" autocapitalize="none" spellcheck="false" contenteditable></div>
|
||||||
<svg class="icon edit-pen">
|
<svg class="icon edit-pen">
|
||||||
<use xlink:href="#edit-pen-icon"></use>
|
<use xlink:href="#edit-pen-icon"></use>
|
||||||
</svg>
|
</svg>
|
||||||
|
@ -188,88 +189,173 @@
|
||||||
<span data-i18n-key="dialogs.system-language" data-i18n-attrs="text"></span>
|
<span data-i18n-key="dialogs.system-language" data-i18n-attrs="text"></span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="ar">
|
<button class="btn fw wrap" value="ar">
|
||||||
<span>العربية</span>
|
<span lang="ar" dir="rtl">العربية</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Arabic)</span>
|
<span>(Arabic)</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button class="btn fw wrap" value="be">
|
||||||
|
<span lang="be">беларуская</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">
|
<button class="btn fw wrap" value="ca">
|
||||||
<span>Català</span>
|
<span lang="ca">Català</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Catalan)</span>
|
<span>(Catalan)</span>
|
||||||
</button>
|
</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> - </span>
|
||||||
|
<span>(Danish)</span>
|
||||||
|
</button>
|
||||||
<button class="btn fw wrap" value="de">
|
<button class="btn fw wrap" value="de">
|
||||||
<span>Deutsch</span>
|
<span lang="de">Deutsch</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(German)</span>
|
<span>(German)</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="en">
|
<button class="btn fw wrap" value="en">
|
||||||
<span>English</span>
|
<span lang="en">English</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="es">
|
<button class="btn fw wrap" value="es">
|
||||||
<span>Español</span>
|
<span lang="es">Español</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Spanish)</span>
|
<span>(Spanish)</span>
|
||||||
</button>
|
</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">
|
<button class="btn fw wrap" value="fr">
|
||||||
<span>Français</span>
|
<span lang="fr">Français</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(French)</span>
|
<span>(French)</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="id">
|
<button class="btn fw wrap" value="id">
|
||||||
<span>Bahasa Indonesia</span>
|
<span lang="id">Bahasa Indonesia</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Indonesian)</span>
|
<span>(Indonesian)</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="it">
|
<button class="btn fw wrap" value="it">
|
||||||
<span>Italiano</span>
|
<span lang="it">Italiano</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Italian)</span>
|
<span>(Italian)</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button class="btn fw wrap" value="he">
|
||||||
|
<span lang="he" dir="rtl">עִבְרִית</span>
|
||||||
|
<span> - </span>
|
||||||
|
<span>(Hebrew)</span>
|
||||||
|
</button>
|
||||||
<button class="btn fw wrap" value="kn">
|
<button class="btn fw wrap" value="kn">
|
||||||
<span>ಕನ್ನಡ</span>
|
<span lang="kn">ಕನ್ನಡ</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Kannada)</span>
|
<span>(Kannada)</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button class="btn fw wrap" value="hu">
|
||||||
|
<span lang="hu">Magyar</span>
|
||||||
|
<span> - </span>
|
||||||
|
<span>(Hungarian)</span>
|
||||||
|
</button>
|
||||||
<button class="btn fw wrap" value="nl">
|
<button class="btn fw wrap" value="nl">
|
||||||
<span>Nederlands</span>
|
<span lang="nl">Nederlands</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Dutch)</span>
|
<span>(Dutch)</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="nb">
|
<button class="btn fw wrap" value="nn">
|
||||||
<span>Norsk</span>
|
<span lang="nn">Norsk</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Norwegian)</span>
|
<span>(Norwegian Nynorsk)</span>
|
||||||
|
</button>
|
||||||
|
<button class="btn fw wrap" value="pl">
|
||||||
|
<span lang="pl">Polski</span>
|
||||||
|
<span> - </span>
|
||||||
|
<span>(Polish)</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="pt-BR">
|
<button class="btn fw wrap" value="pt-BR">
|
||||||
<span>Português do Brasil</span>
|
<span lang="pt-BR">Português do Brasil</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Brazilian Portuguese)</span>
|
<span>(Brazilian Portuguese)</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="ro">
|
<button class="btn fw wrap" value="ro">
|
||||||
<span>Română</span>
|
<span lang="ro">Română</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Romanian)</span>
|
<span>(Romanian)</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="ru">
|
<button class="btn fw wrap" value="ru">
|
||||||
<span>Русский язык</span>
|
<span lang="ru">Русский язык</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Russian)</span>
|
<span>(Russian)</span>
|
||||||
</button>
|
</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">
|
<button class="btn fw wrap" value="tr">
|
||||||
<span>Türkçe</span>
|
<span lang="tr">Türkçe</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Turkish)</span>
|
<span>(Turkish)</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="zh-CN">
|
<button class="btn fw wrap" value="uk">
|
||||||
<span>中文</span>
|
<span lang="uk">Українська</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Chinese)</span>
|
<span>(Ukrainian)</span>
|
||||||
|
</button>
|
||||||
|
<button class="btn fw wrap" value="zh-CN">
|
||||||
|
<span lang="zh-CN">汉语</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>(Traditional Chinese)</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn fw wrap" value="ja">
|
<button class="btn fw wrap" value="ja">
|
||||||
<span>日本語</span>
|
<span lang="ja">日本語</span>
|
||||||
<span> - </span>
|
<span> - </span>
|
||||||
<span>(Japanese)</span>
|
<span>(Japanese)</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button class="btn fw wrap" value="ko">
|
||||||
|
<span lang="ko">한국어</span>
|
||||||
|
<span> - </span>
|
||||||
|
<span>(Korean)</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="center row-reverse btn-row wrap">
|
<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>
|
<button class="btn btn-rounded btn-grey" type="button" data-i18n-key="dialogs.close" data-i18n-attrs="text" close></button>
|
||||||
|
@ -331,12 +417,12 @@
|
||||||
<h2 class="dialog-title" data-i18n-key="dialogs.edit-paired-devices-title" data-i18n-attrs="text"></h2>
|
<h2 class="dialog-title" data-i18n-key="dialogs.edit-paired-devices-title" data-i18n-attrs="text"></h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="paired-devices-wrapper" data-i18n-key="dialogs.paired-devices-wrapper" data-i18n-attrs="data-empty"></div>
|
<div class="paired-devices-wrapper" data-i18n-key="dialogs.paired-devices-wrapper" data-i18n-attrs="data-empty"></div>
|
||||||
<div class="font-subheading center">
|
<div class="row center p-2">
|
||||||
<p>
|
<div class="font-subheading">
|
||||||
<span data-i18n-key="dialogs.auto-accept-instructions-1" data-i18n-attrs="text"></span>
|
<span data-i18n-key="dialogs.auto-accept-instructions-1" data-i18n-attrs="text"></span>
|
||||||
<u data-i18n-key="dialogs.auto-accept" data-i18n-attrs="text"></u>
|
<u data-i18n-key="dialogs.auto-accept" data-i18n-attrs="text"></u>
|
||||||
<span data-i18n-key="dialogs.auto-accept-instructions-2" data-i18n-attrs="text"></span>
|
<span data-i18n-key="dialogs.auto-accept-instructions-2" data-i18n-attrs="text"></span>
|
||||||
</p>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="center row-reverse btn-row wrap">
|
<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>
|
<button class="btn btn-rounded btn-grey" type="button" data-i18n-key="dialogs.close" data-i18n-attrs="text" close></button>
|
||||||
|
@ -582,7 +668,7 @@
|
||||||
</svg>
|
</svg>
|
||||||
<div class="title-wrapper" dir="ltr">
|
<div class="title-wrapper" dir="ltr">
|
||||||
<h1>PairDrop</h1>
|
<h1>PairDrop</h1>
|
||||||
<div class="font-subheading">v1.10.6</div>
|
<div class="font-subheading">v1.11.2</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="font-subheading" data-i18n-key="about.claim" data-i18n-attrs="text"></div>
|
<div class="font-subheading" data-i18n-key="about.claim" data-i18n-attrs="text"></div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -596,9 +682,9 @@
|
||||||
<use xlink:href="#donation"></use>
|
<use xlink:href="#donation"></use>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
<a class="icon-button" id="twitter-btn" target="_blank" href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fpairdrop.net%20by%20https%3A%2F%2Fgithub.com%2Fschlagmichdoch%2F&" rel="noreferrer" data-i18n-key="about.tweet" data-i18n-attrs="title">
|
<a class="icon-button" id="x-twitter-btn" target="_blank" href="https://x.com/intent/tweet?text=https%3A%2F%2Fpairdrop.net%20by%20https%3A%2F%2Fgithub.com%2Fschlagmichdoch%2F&" rel="noreferrer" data-i18n-key="about.tweet" data-i18n-attrs="title">
|
||||||
<svg class="icon">
|
<svg class="icon">
|
||||||
<use xlink:href="#twitter"></use>
|
<use xlink:href="#x-twitter"></use>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
<a class="icon-button" id="mastodon-btn" target="_blank" rel="noreferrer" data-i18n-key="about.mastodon" data-i18n-attrs="title" hidden>
|
<a class="icon-button" id="mastodon-btn" target="_blank" rel="noreferrer" data-i18n-key="about.mastodon" data-i18n-attrs="title" hidden>
|
||||||
|
@ -654,8 +740,8 @@
|
||||||
<symbol id="help-outline" viewBox="0 0 24 24">
|
<symbol id="help-outline" viewBox="0 0 24 24">
|
||||||
<path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path>
|
<path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="twitter">
|
<symbol id="x-twitter">
|
||||||
<path d="M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z"></path>
|
<path d="M17.996,2.219l3.265,0l-7.13,8.148l8.388,11.088l-6.566,0l-5.147,-6.723l-5.882,6.723l-3.269,0l7.625,-8.716l-8.041,-10.52l6.733,0l4.647,6.146l5.377,-6.146Zm-1.146,17.285l1.808,-0l-11.671,-15.435l-1.942,0l11.805,15.435Z"></path>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="github">
|
<symbol id="github">
|
||||||
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path>
|
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path>
|
||||||
|
@ -725,9 +811,9 @@
|
||||||
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.-->
|
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.-->
|
||||||
<path d="M433 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.6-28.4-290.5 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54a102.5 102.5 0 0 1 -.9-13.9c85.6 20.9 158.7 9.1 178.8 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.3V197c0-58.5-64-56.6-64-6.9v114.2H90.2c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z"></path>
|
<path d="M433 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.6-28.4-290.5 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54a102.5 102.5 0 0 1 -.9-13.9c85.6 20.9 158.7 9.1 178.8 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.3V197c0-58.5-64-56.6-64-6.9v114.2H90.2c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z"></path>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="bluesky" viewBox="0 0 448 512">
|
<symbol id="bluesky" viewBox="0 0 512 512">
|
||||||
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.-->
|
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
|
||||||
<path d="M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96z"></path>
|
<path d="M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="custom" viewBox="0 0 512 512">
|
<symbol id="custom" viewBox="0 0 512 512">
|
||||||
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.-->
|
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.-->
|
||||||
|
@ -756,4 +842,4 @@
|
||||||
</x-noscript>
|
</x-noscript>
|
||||||
</noscript>
|
</noscript>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"request-title": "يرغب {{name}} في نقل {{count}} {{descriptor}}",
|
"request-title": "يرغب {{name}} في نقل {{count}} {{descriptor}}",
|
||||||
"unfinished-transfers-warning": "هناك تحويلات غير مكتملة. هل أنت متأكد أنك تريد إغلاق PairDrop؟",
|
"unfinished-transfers-warning": "هناك تحويلات غير مكتملة. هل أنت متأكد أنك تريد إغلاق PairDrop؟",
|
||||||
"message-received": "تم استلام الرابط بواسطة {{name}} - انقر للفتح",
|
"message-received": "تم استلام الرسالة بواسطة {{name}} - انقر للفتح",
|
||||||
"rate-limit-join-key": "تم الوصول إلى الحد الأقصى. انتظر 10 ثوان وحاول مرة أخرى.",
|
"rate-limit-join-key": "تم الوصول إلى الحد الأقصى. انتظر 10 ثوان وحاول مرة أخرى.",
|
||||||
"connecting": "يتصل …",
|
"connecting": "يتصل …",
|
||||||
"pairing-key-invalidated": "المفتاح {{key}} خاطئ",
|
"pairing-key-invalidated": "المفتاح {{key}} خاطئ",
|
||||||
|
@ -52,7 +52,10 @@
|
||||||
"online-requirement-public-room": "يجب أن تكون متصلاً بالإنترنت لإنشاء غرفة عامة",
|
"online-requirement-public-room": "يجب أن تكون متصلاً بالإنترنت لإنشاء غرفة عامة",
|
||||||
"copied-text-error": "فشلت الكتابة من الحافظة. انسخ يدويًا!",
|
"copied-text-error": "فشلت الكتابة من الحافظة. انسخ يدويًا!",
|
||||||
"download-successful": "تم تحميل {{descriptor}}",
|
"download-successful": "تم تحميل {{descriptor}}",
|
||||||
"click-to-show": "اضغط للعرض"
|
"click-to-show": "اضغط للعرض",
|
||||||
|
"pair-url-copied-to-clipboard": "تم نسخ رابط اقتران هذا الجهاز إلى الحافظة",
|
||||||
|
"room-url-copied-to-clipboard": "تم نسخ رابط هذه الغرفة العامة إلى الحافظة",
|
||||||
|
"notifications-permissions-error": "لم يتم منح إذن الإشعارات حيث أن المستخدم أغلق نافذة السماح عدة مرات. يمكن إعادة تعيين هذا في معلومات الصفحة التي يمكن فتحها بالضغط على رمز القفل بجانب شريط عنوان صفحة الإنترنت."
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
"cancel-share-mode": "تمّ",
|
"cancel-share-mode": "تمّ",
|
||||||
|
@ -62,18 +65,19 @@
|
||||||
"pair-device_title": "قم بإقران أجهزتك بشكل دائم",
|
"pair-device_title": "قم بإقران أجهزتك بشكل دائم",
|
||||||
"join-public-room_title": "انضم إلى الغرفة العامة مؤقتًا",
|
"join-public-room_title": "انضم إلى الغرفة العامة مؤقتًا",
|
||||||
"notification_title": "تفعيل الإشعارات",
|
"notification_title": "تفعيل الإشعارات",
|
||||||
"edit-paired-devices_title": "تعديل الأجهزة المقترنة",
|
"edit-paired-devices_title": "عدل الأجهزة المقترنة",
|
||||||
"language-selector_title": "إختر اللغة",
|
"language-selector_title": "إختر اللغة",
|
||||||
"about_title": "حول PairDrop",
|
"about_title": "حول PairDrop",
|
||||||
"about_aria-label": "افتح حول PairDrop",
|
"about_aria-label": "افتح حول PairDrop",
|
||||||
"theme-light_title": "إستخدم دائماً المظهر الفاتح",
|
"theme-light_title": "إستخدم دائماً المظهر الفاتح",
|
||||||
"edit-share-mode": "ت٧ارف"
|
"edit-share-mode": "عدل",
|
||||||
|
"expand_title": "Expand header button row"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"x-instructions_mobile": "انقر لإرسال الملفات أو انقر لفترة طويلة لإرسال رسالة",
|
"x-instructions_mobile": "انقر لإرسال الملفات أو انقر لفترة طويلة لإرسال رسالة",
|
||||||
"x-instructions-share-mode_desktop": "انقر للإرسال",
|
"x-instructions-share-mode_desktop": "انقر للإرسال {{descriptor}}",
|
||||||
"activate-share-mode-and-other-files-plural": "و{{count}} ملفات أخرى",
|
"activate-share-mode-and-other-files-plural": "و{{count}} ملفات أخرى",
|
||||||
"x-instructions-share-mode_mobile": "انقر للإرسال",
|
"x-instructions-share-mode_mobile": "انقر للإرسال {{descriptor}}",
|
||||||
"activate-share-mode-base": "افتح PairDrop على الأجهزة الأخرى للإرسال",
|
"activate-share-mode-base": "افتح PairDrop على الأجهزة الأخرى للإرسال",
|
||||||
"no-peers-subtitle": "قم بإقران الأجهزة أو ادخل إلى غرفة عامة لتتمكن من أن تكتشف على الشبكات الأخرى",
|
"no-peers-subtitle": "قم بإقران الأجهزة أو ادخل إلى غرفة عامة لتتمكن من أن تكتشف على الشبكات الأخرى",
|
||||||
"activate-share-mode-shared-text": "النص المشترك",
|
"activate-share-mode-shared-text": "النص المشترك",
|
||||||
|
@ -81,7 +85,11 @@
|
||||||
"no-peers-title": "افتح PairDrop على الأجهزة الأخرى لإرسال الملفات",
|
"no-peers-title": "افتح PairDrop على الأجهزة الأخرى لإرسال الملفات",
|
||||||
"x-instructions_data-drop-bg": "حرر لتحديد المستلم",
|
"x-instructions_data-drop-bg": "حرر لتحديد المستلم",
|
||||||
"no-peers_data-drop-bg": "حرر لتحديد المستلم",
|
"no-peers_data-drop-bg": "حرر لتحديد المستلم",
|
||||||
"x-instructions_data-drop-peer": "قم بالتحرير لإرسالها إلى القرين"
|
"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 مفعلًا!"
|
||||||
},
|
},
|
||||||
"peer-ui": {
|
"peer-ui": {
|
||||||
"processing": "مُعالجة …",
|
"processing": "مُعالجة …",
|
||||||
|
@ -93,7 +101,7 @@
|
||||||
"transferring": "جارٍ النقل…"
|
"transferring": "جارٍ النقل…"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"base64-paste-to-send": "الصق هنا لإرسال {{type}}",
|
"base64-paste-to-send": "الصق هنا للمشاركة {{type}}",
|
||||||
"auto-accept-instructions-2": "لقبول جميع الملفات المرسلة من هذا الجهاز تلقائيًا.",
|
"auto-accept-instructions-2": "لقبول جميع الملفات المرسلة من هذا الجهاز تلقائيًا.",
|
||||||
"receive-text-title": "تلقيت رسالة",
|
"receive-text-title": "تلقيت رسالة",
|
||||||
"edit-paired-devices-title": "تحرير الأجهزة المقترنة",
|
"edit-paired-devices-title": "تحرير الأجهزة المقترنة",
|
||||||
|
@ -104,12 +112,12 @@
|
||||||
"title-file": "ملف",
|
"title-file": "ملف",
|
||||||
"base64-processing": "مُعالجة…",
|
"base64-processing": "مُعالجة…",
|
||||||
"decline": "رفض",
|
"decline": "رفض",
|
||||||
"receive-title": "تم الاستلام {{descriptor}}",
|
"receive-title": "تم استلام {{descriptor}}",
|
||||||
"leave": "مُغادرة",
|
"leave": "مُغادرة",
|
||||||
"join": "انضمام",
|
"join": "انضمام",
|
||||||
"title-image-plural": "صور",
|
"title-image-plural": "صور",
|
||||||
"send": "ارسال",
|
"send": "ارسال",
|
||||||
"base64-tap-to-paste": "انقر هنا للصق {{type}}",
|
"base64-tap-to-paste": "انقر هنا للمشاركة {{type}}",
|
||||||
"base64-text": "نص",
|
"base64-text": "نص",
|
||||||
"copy": "نسخ",
|
"copy": "نسخ",
|
||||||
"file-other-description-image": "وصورة واحدة أخرى",
|
"file-other-description-image": "وصورة واحدة أخرى",
|
||||||
|
@ -123,7 +131,7 @@
|
||||||
"title-image": "صورة",
|
"title-image": "صورة",
|
||||||
"file-other-description-file-plural": "و{{count}} ملفات أخرى",
|
"file-other-description-file-plural": "و{{count}} ملفات أخرى",
|
||||||
"would-like-to-share": "ترغب في المشاركة",
|
"would-like-to-share": "ترغب في المشاركة",
|
||||||
"send-message-to": "أرسال رسالة إلى",
|
"send-message-to": "أرسال رسالة إلى:",
|
||||||
"language-selector-title": "إختر اللُغة",
|
"language-selector-title": "إختر اللُغة",
|
||||||
"pair": "إقتران",
|
"pair": "إقتران",
|
||||||
"hr-or": "او",
|
"hr-or": "او",
|
||||||
|
@ -139,7 +147,19 @@
|
||||||
"send-message-title": "إرسال رسالة",
|
"send-message-title": "إرسال رسالة",
|
||||||
"input-room-id-on-another-device": "أدخل معرف الغرفة هذا على جهاز آخر",
|
"input-room-id-on-another-device": "أدخل معرف الغرفة هذا على جهاز آخر",
|
||||||
"file-other-description-image-plural": "و{{count}} صور أخرى",
|
"file-other-description-image-plural": "و{{count}} صور أخرى",
|
||||||
"enter-room-id-from-another-device": "أدخل معرف الغرفة من جهاز آخر للانضمام إلى الغرفة."
|
"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": "اضغط لنسخ رابط اقتران هذا الجهاز"
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"claim": "أسهل طريقة لنقل الملفات عبر الأجهزة",
|
"claim": "أسهل طريقة لنقل الملفات عبر الأجهزة",
|
||||||
|
@ -147,7 +167,11 @@
|
||||||
"close-about_aria-label": "إغلاق حول PairDrop",
|
"close-about_aria-label": "إغلاق حول PairDrop",
|
||||||
"buy-me-a-coffee_title": "اشتري لي القهوة!",
|
"buy-me-a-coffee_title": "اشتري لي القهوة!",
|
||||||
"github_title": "PairDrop على جيت هاب",
|
"github_title": "PairDrop على جيت هاب",
|
||||||
"faq_title": "أسئلة متكررة"
|
"faq_title": "أسئلة متكررة",
|
||||||
|
"mastodon_title": "اكتب عن بيردروب على ماستادون",
|
||||||
|
"bluesky_title": "تابعنا على بلوسكاي",
|
||||||
|
"custom_title": "تابعنا",
|
||||||
|
"privacypolicy_title": "افتح سياسة الخصوصية الخاصة بنا"
|
||||||
},
|
},
|
||||||
"document-titles": {
|
"document-titles": {
|
||||||
"file-transfer-requested": "طلب نقل الملف",
|
"file-transfer-requested": "طلب نقل الملف",
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"about_aria-label": "Адкрыйце Аб PairDrop",
|
||||||
|
"about_title": "Аб PairDrop",
|
||||||
|
"theme-auto_title": "Аўтаматычная адаптацыя тэмы да сістэмы",
|
||||||
|
"theme-light_title": "Заўсёды выкарыстоўваць светлую тэму",
|
||||||
|
"theme-dark_title": "Заўсёды выкарыстоўваць цёмную тэму",
|
||||||
|
"notification_title": "Уключыць апавяшчэнні",
|
||||||
|
"edit-paired-devices_title": "Рэдагаваць злучаныя прылады",
|
||||||
|
"join-public-room_title": "Часова далучыцца да публічнага пакоя",
|
||||||
|
"cancel-share-mode": "Адмяніць",
|
||||||
|
"language-selector_title": "Задаць мову",
|
||||||
|
"install_title": "Усталяваць PairDrop",
|
||||||
|
"pair-device_title": "Злучыце свае прылады назаўжды",
|
||||||
|
"edit-share-mode": "Рэдагаваць",
|
||||||
|
"expand_title": "Разгарнуць радок кнопак"
|
||||||
|
},
|
||||||
|
"instructions": {
|
||||||
|
"no-peers_data-drop-bg": "Адпусціце, каб выбраць атрымальніка",
|
||||||
|
"no-peers-title": "Адкрыйце PairDrop на іншых прыладах, каб адправіць файлы",
|
||||||
|
"x-instructions_data-drop-peer": "Адпусціце, каб адправіць вузлу",
|
||||||
|
"x-instructions_data-drop-bg": "Адпусціце, каб выбраць атрымальніка",
|
||||||
|
"x-instructions-share-mode_mobile": "Дакраніцеся, каб адправіць {{descriptor}}",
|
||||||
|
"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}} агульных файлаў",
|
||||||
|
"webrtc-requirement": "Каб выкарыстоўваць гэты асобнік Pair Drop, WebRTC павінен быць уключаны!",
|
||||||
|
"no-peers-subtitle": "Злучыце прылады або ўвайдзіце ў публічны пакой, каб вас маглі выявіць з іншых сетак",
|
||||||
|
"x-instructions_mobile": "Дакраніцеся, каб адправіць файлы, або доўга трымайце, каб адправіць паведамленне",
|
||||||
|
"x-instructions-share-mode_desktop": "Націсніце, каб адправіць {{descriptor}}",
|
||||||
|
"x-instructions_desktop": "Націсніце, каб адправіць файлы, або націсніце правай кнопкай мышы, каб адправіць паведамленне",
|
||||||
|
"activate-share-mode-base": "Адкрыйце PairDrop на іншых прыладах, каб адправіць",
|
||||||
|
"activate-share-mode-shared-file": "агульны файл"
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"known-as": "Вы вядомыя як:",
|
||||||
|
"display-name_data-placeholder": "Загрузка…",
|
||||||
|
"discovery": "Вас могуць выявіць:",
|
||||||
|
"on-this-network_title": "Вас можа знайсці кожны ў гэтай сетцы.",
|
||||||
|
"paired-devices": "з дапамогай злучаных прылад",
|
||||||
|
"public-room-devices_title": "Вас могуць выявіць прылады ў гэтай публічнай пакоі незалежна ад сеткі.",
|
||||||
|
"traffic": "Рух",
|
||||||
|
"display-name_title": "Зменіце назву сваёй прылады назаўжды",
|
||||||
|
"on-this-network": "у гэтай сетцы",
|
||||||
|
"paired-devices_title": "Злучаныя прылады заўсёды могуць вас выявіць незалежна ад сеткі.",
|
||||||
|
"public-room-devices": "у пакоі {{roomId}}",
|
||||||
|
"webrtc": ", калі WebRTC недаступны.",
|
||||||
|
"routed": "накіроўваецца праз сервер"
|
||||||
|
},
|
||||||
|
"dialogs": {
|
||||||
|
"hr-or": "АБО",
|
||||||
|
"cancel": "Адмяніць",
|
||||||
|
"pair": "Злучыць",
|
||||||
|
"unpair": "Разлучыць",
|
||||||
|
"paired-devices-wrapper_data-empty": "Няма злучаных прылад.",
|
||||||
|
"auto-accept": "аўтаматычнае прыняцце",
|
||||||
|
"close": "Закрыць",
|
||||||
|
"join": "Далучыцца",
|
||||||
|
"leave": "Пакінуць",
|
||||||
|
"decline": "Адмовіць",
|
||||||
|
"share": "Падзяліцца",
|
||||||
|
"copy": "Капіяваць",
|
||||||
|
"title-image": "Малюнак",
|
||||||
|
"system-language": "Мова сістэмы",
|
||||||
|
"public-room-qr-code_title": "Націсніце, каб скапіяваць спасылку на публічны пакой",
|
||||||
|
"title-file": "Файл",
|
||||||
|
"title-file-plural": "Файлы",
|
||||||
|
"message_placeholder": "Тэкст",
|
||||||
|
"language-selector-title": "Задаць мову",
|
||||||
|
"send-message-title": "Адправіць паведамленне",
|
||||||
|
"scan-qr-code": "або сканаваць QR-код.",
|
||||||
|
"enter-room-id-from-another-device": "Увядзіце ID пакоя з іншай прылады, каб далучыцца да пакоя.",
|
||||||
|
"edit-paired-devices-title": "Рэдагаваць злучаныя прылады",
|
||||||
|
"auto-accept-instructions-1": "Актываваць",
|
||||||
|
"auto-accept-instructions-2": ", каб аўтаматычна прымаць усе файлы, адпраўленыя з гэтай прылады.",
|
||||||
|
"accept": "Прыняць",
|
||||||
|
"download": "Спампаваць",
|
||||||
|
"download-again": "Спампаваць яшчэ раз",
|
||||||
|
"pair-devices-qr-code_title": "Націсніце, каб скапіраваць спасылку для спалучэння гэтай прылады",
|
||||||
|
"approve": "сцвердзіць",
|
||||||
|
"pair-devices-title": "Пастаяннае злучэнне прылад",
|
||||||
|
"enter-key-from-another-device": "Увядзіце тут ключ з іншай прылады.",
|
||||||
|
"temporary-public-room-title": "Часовы публічны пакой",
|
||||||
|
"input-room-id-on-another-device": "Увядзіце гэты ID пакоя на іншай прыладзе",
|
||||||
|
"paired-device-removed": "Злучаная прылада была выдалена.",
|
||||||
|
"would-like-to-share": "хацеў бы падзяліцца",
|
||||||
|
"send-message-to": "Каму:",
|
||||||
|
"message_title": "Устаўце паведамленне для адпраўкі",
|
||||||
|
"has-sent": "адправіў:",
|
||||||
|
"base64-processing": "Апрацоўка…",
|
||||||
|
"send": "Адправіць",
|
||||||
|
"base64-title-text": "Падзяліцца тэкстам",
|
||||||
|
"base64-title-files": "Падзяліцца файламі",
|
||||||
|
"base64-tap-to-paste": "Дакраніцеся тут, каб падзяліцца {{type}}",
|
||||||
|
"file-other-description-image": "і 1 іньшы малюнак",
|
||||||
|
"file-other-description-image-plural": "і {{count}} іншых малюнкаў",
|
||||||
|
"file-other-description-file-plural": "і {{count}} іншых файлаў",
|
||||||
|
"title-image-plural": "Малюнкі",
|
||||||
|
"share-text-subtitle": "Рэдагаваць паведамленне перад адпраўкай:",
|
||||||
|
"share-text-title": "Падзяліцца тэкставым паведамленнем",
|
||||||
|
"close-toast_title": "Закрыць апавяшчэнне",
|
||||||
|
"receive-text-title": "Паведамленне атрымана",
|
||||||
|
"input-key-on-this-device": "Увядзіце гэты ключ на іншай прыладзе",
|
||||||
|
"base64-files": "файлы",
|
||||||
|
"base64-text": "тэкст",
|
||||||
|
"base64-paste-to-send": "Устаўце сюды буфер абмену, каб падзяліцца {{type}}",
|
||||||
|
"file-other-description-file": "і 1 іньшы файл",
|
||||||
|
"receive-title": "{{descriptor}} атрымана",
|
||||||
|
"share-text-checkbox": "Заўсёды паказваць гэта дыялогавае акно пры абагульванні тэксту"
|
||||||
|
},
|
||||||
|
"about": {
|
||||||
|
"buy-me-a-coffee_title": "Купіць мне кавы!",
|
||||||
|
"mastodon_title": "Напішыце пра PairDrop на Mastodon",
|
||||||
|
"tweet_title": "Твіт пра PairDrop",
|
||||||
|
"github_title": "PairDrop на GitHub",
|
||||||
|
"custom_title": "Сачыце за намі",
|
||||||
|
"bluesky_title": "Сачыце за намі на BlueSky",
|
||||||
|
"faq_title": "Часта задаюць пытанні",
|
||||||
|
"close-about_aria-label": "Закрыць Аб PairDrop",
|
||||||
|
"claim": "Самы просты спосаб перадачы файлаў паміж прыладамі",
|
||||||
|
"privacypolicy_title": "Адкрыйце нашу палітыку прыватнасці"
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"link-received": "Спасылка атрымана {{name}} - Націсніце, каб адкрыць",
|
||||||
|
"message-received": "Паведамленне атрымана {{name}} - Націсніце, каб скапіяваць",
|
||||||
|
"click-to-download": "Націсніце, каб спампаваць",
|
||||||
|
"click-to-show": "Націсніце, каб паказаць",
|
||||||
|
"copied-text-error": "Памылка запісу ў буфер абмену. Скапіруйце ўручную!",
|
||||||
|
"online": "Вы зноў у сетцы",
|
||||||
|
"online-requirement-public-room": "Вы павінны быць падлучаныя да сеткі, каб стварыць агульны пакой",
|
||||||
|
"connecting": "Падключэнне…",
|
||||||
|
"public-room-id-invalid": "Несапраўдны ID пакоя",
|
||||||
|
"notifications-permissions-error": "Дазвол на апавяшчэнні быў заблакіраваны, бо карыстальнік некалькі разоў адхіляў запыт на дазвол. Гэта можна скінуць у меню \"Аб старонцы\", доступ да якой можна атрымаць, націснуўшы на значок замка побач з радком URL.",
|
||||||
|
"request-title": "{{name}} хоча перадаць {{count}} {{descriptor}}",
|
||||||
|
"copied-text": "Тэкст скапіраваны ў буфер абмену",
|
||||||
|
"offline": "Вы па-за сеткай",
|
||||||
|
"connected": "Падключана",
|
||||||
|
"online-requirement-pairing": "Вы павінны быць падлучаныя да сеткі для спалучэння прылад",
|
||||||
|
"pairing-key-invalidated": "Ключ {{key}} несапраўдны",
|
||||||
|
"display-name-random-again": "Адлюстраванае імя зноў згенеравалася выпадковым чынам",
|
||||||
|
"download-successful": "{{descriptor}} спампавана",
|
||||||
|
"pairing-tabs-error": "Злучэнне дзвюх укладак вэб-браўзера немагчыма",
|
||||||
|
"display-name-changed-permanently": "Адлюстроўванае імя было зменена назаўжды",
|
||||||
|
"pairing-cleared": "Усе прылады раз'яднаны",
|
||||||
|
"room-url-copied-to-clipboard": "Спасылка на публічны пакой скапіравана ў буфер абмену",
|
||||||
|
"public-room-left": "Пакінуць публічны пакой {{publicRoomId}}",
|
||||||
|
"text-content-incorrect": "Змест тэксту няправільны",
|
||||||
|
"clipboard-content-incorrect": "Змест буфера абмену няправільны",
|
||||||
|
"notifications-enabled": "Апавяшчэнні ўключаны",
|
||||||
|
"files-incorrect": "Няправільныя файлы",
|
||||||
|
"file-transfer-completed": "Перадача файла завершана",
|
||||||
|
"selected-peer-left": "Выбраны вузел выйшаў",
|
||||||
|
"copied-to-clipboard": "Скапіравана ў буфер абмену",
|
||||||
|
"pair-url-copied-to-clipboard": "Спасылка для злучэння гэтай прылады скапіравана ў буфер абмену",
|
||||||
|
"pairing-success": "Злучаныя прылады",
|
||||||
|
"copied-to-clipboard-error": "Капіраванне немагчымае. Скапіруйце ўручную.",
|
||||||
|
"file-content-incorrect": "Змест файла няправільны",
|
||||||
|
"pairing-not-persistent": "Злучаныя прылады не з'яўляюцца пастаяннымі",
|
||||||
|
"pairing-key-invalid": "Несапраўдны ключ",
|
||||||
|
"display-name-changed-temporarily": "Адлюстраванае імя зменена толькі для гэтага сеансу",
|
||||||
|
"ios-memory-limit": "Адначасовая адпраўка файлаў на iOS магчымая толькі да 200 МБ",
|
||||||
|
"message-transfer-completed": "Перадача паведамлення завершана",
|
||||||
|
"unfinished-transfers-warning": "Ёсць незавершаныя перадачы. Вы ўпэўнены, што хочаце закрыць PairDrop?",
|
||||||
|
"rate-limit-join-key": "Ліміт хуткасці дасягнуты. Пачакайце 10 секунд і паўтарыце спробу."
|
||||||
|
},
|
||||||
|
"peer-ui": {
|
||||||
|
"preparing": "Падрыхтоўка…",
|
||||||
|
"waiting": "Чаканне…",
|
||||||
|
"transferring": "Перадача…",
|
||||||
|
"processing": "Апрацоўка…",
|
||||||
|
"click-to-send-share-mode": "Націсніце, каб адправіць {{descriptor}}",
|
||||||
|
"connection-hash": "Каб праверыць бяспеку скразнога шыфравання, параўнайце гэты нумар бяспекі на абедзвюх прыладах",
|
||||||
|
"click-to-send": "Націсніце, каб адправіць файлы, або націсніце правай кнопкай мышы, каб адправіць паведамленне"
|
||||||
|
},
|
||||||
|
"document-titles": {
|
||||||
|
"file-received": "Файл атрыманы",
|
||||||
|
"image-transfer-requested": "Запытана перадача малюнкаў",
|
||||||
|
"message-received": "Паведамленне атрымана",
|
||||||
|
"message-received-plural": "Атрымана {{count}} паведамленняў",
|
||||||
|
"file-received-plural": "Атрымана {{count}} файлаў",
|
||||||
|
"file-transfer-requested": "Запытана перадача файла"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"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": "Прехвърляне…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"about_title": "পেয়ার ড্রপ সম্পর্কে",
|
||||||
|
"install_title": "পেয়ার ড্রপ ইন্সটল করুন",
|
||||||
|
"pair-device_title": "ডিভাইস স্থায়ী ভাবে যুক্ত করুন",
|
||||||
|
"cancel-share-mode": "বাতিল",
|
||||||
|
"theme-light_title": "সবসময় সাদা থিম ব্যাবহার",
|
||||||
|
"language-selector_title": "ভাষা সেট করুন",
|
||||||
|
"about_aria-label": "পেয়ারড্রপ সম্পর্কে",
|
||||||
|
"theme-auto_title": "থিমের ধরন ডিভাইস অনুযায়ী",
|
||||||
|
"theme-dark_title": "সবসময় কালো থিব ব্যাবহার",
|
||||||
|
"notification_title": "নোটিফিকেশন চালু করুন",
|
||||||
|
"edit-paired-devices_title": "যুক্ত ডিভাইস সম্পাদনা করুন",
|
||||||
|
"join-public-room_title": "সাময়িক ভাবে পাবলিক রুমে জয়েন করুন",
|
||||||
|
"edit-share-mode": "সম্পাদনা",
|
||||||
|
"expand_title": "হেডার বোতামের সারিটি বড় করুন"
|
||||||
|
},
|
||||||
|
"instructions": {
|
||||||
|
"activate-share-mode-and-other-file": "আর একটি ফাইল যোগ করুন",
|
||||||
|
"activate-share-mode-shared-file": "পাঠানো ফাইল",
|
||||||
|
"no-peers-subtitle": "ডিভাইস প্রদর্শিত হতে নতুন ডিভাইস যুক্ত করুন অথবা পাবলিক রুমে জয়েন দিন",
|
||||||
|
"no-peers-title": "ফাইল পাঠানোর জন্য অন্যান্য ডিভাইসে পেয়ারড্রপ খুলুন",
|
||||||
|
"x-instructions_data-drop-bg": "প্রাপক নির্বাচন করতে ছেড়ে দিন",
|
||||||
|
"no-peers_data-drop-bg": "প্রাপক নির্বাচন ছেড়ে দিন",
|
||||||
|
"x-instructions_desktop": "ফাইল পাঠাতে ক্লিক করুন অথবা মেসেজ পাঠাতে ডানে চাপুন",
|
||||||
|
"x-instructions_mobile": "ফাইল পাঠাতে ক্লিক করুন অথবা বেশি চেপে মেসেজ পাঠান",
|
||||||
|
"x-instructions_data-drop-peer": "পিয়ারকে পাঠানোর জন্য রিলিজ করুন",
|
||||||
|
"x-instructions-share-mode_desktop": "পাঠাতে ক্লিক করুন",
|
||||||
|
"x-instructions-share-mode_mobile": "পাঠাতে ক্লিক করুন",
|
||||||
|
"activate-share-mode-base": "অন্য ডিভাইসে পাঠাতে পেয়ারড্রপ খুলুন",
|
||||||
|
"activate-share-mode-and-other-files-plural": "অন্য ফাইল যোগ করুন",
|
||||||
|
"activate-share-mode-shared-text": "পাঠানো টেক্সট",
|
||||||
|
"activate-share-mode-shared-files-plural": "পাঠানো ফাইল গুলো"
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,7 +30,8 @@
|
||||||
"cancel-share-mode": "Cancel·lar",
|
"cancel-share-mode": "Cancel·lar",
|
||||||
"about_title": "Sobre PairDrop",
|
"about_title": "Sobre PairDrop",
|
||||||
"about_aria-label": "Obre Sobre PairDrop",
|
"about_aria-label": "Obre Sobre PairDrop",
|
||||||
"theme-light_title": "Utilitza sempre el mode clar"
|
"theme-light_title": "Utilitza sempre el mode clar",
|
||||||
|
"expand_title": "Expandeix la fila de botons de la capçalera"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"message_placeholder": "Text",
|
"message_placeholder": "Text",
|
||||||
|
@ -166,7 +167,11 @@
|
||||||
"close-about_aria-label": "Tanca Sobre PairDrop",
|
"close-about_aria-label": "Tanca Sobre PairDrop",
|
||||||
"buy-me-a-coffee_title": "Convida'm a un cafè!",
|
"buy-me-a-coffee_title": "Convida'm a un cafè!",
|
||||||
"github_title": "PairDrop a GitHub",
|
"github_title": "PairDrop a GitHub",
|
||||||
"faq_title": "Preguntes freqüents"
|
"faq_title": "Preguntes freqüents",
|
||||||
|
"mastodon_title": "Escriu sobre PairDrop a Mastodon",
|
||||||
|
"bluesky_title": "Segueix-nos a BlueSky",
|
||||||
|
"custom_title": "Segueix-nos",
|
||||||
|
"privacypolicy_title": "Obre la nostra política de privacitat"
|
||||||
},
|
},
|
||||||
"document-titles": {
|
"document-titles": {
|
||||||
"file-transfer-requested": "Transferència de Fitxers Sol·licitada",
|
"file-transfer-requested": "Transferència de Fitxers Sol·licitada",
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"about_aria-label": "Otevřít o PairDrop",
|
||||||
|
"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…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"notifications": {
|
||||||
|
"public-room-left": "Forlod det offentlige rum {{publicRoomId}}",
|
||||||
|
"room-url-copied-to-clipboard": "Link til offentligt rum kopieret til udklipsholder",
|
||||||
|
"notifications-enabled": "Notifikationer aktiveret",
|
||||||
|
"notifications-permissions-error": "Notifikationstilladelsen er blevet blokeret, da brugeren har afvist tilladelsesprompten flere gange. Dette kan nulstilles i sideoplysninger, som du kan få adgang til ved at klikke på låseikonet ved siden af URL-linjen.",
|
||||||
|
"copied-text-error": "Skrivning til udklipsholder mislykkedes. Kopier manuelt!",
|
||||||
|
"ios-memory-limit": "Det er kun muligt at sende filer til iOS op til 200 MB på én gang",
|
||||||
|
"display-name-random-again": "Vist navn genereres tilfældigt igen",
|
||||||
|
"display-name-changed-permanently": "Det viste navn blec ændret permanent",
|
||||||
|
"display-name-changed-temporarily": "Vist navn blev kun ændret for denne session",
|
||||||
|
"download-successful": "{{descriptor}} hentet",
|
||||||
|
"pairing-tabs-error": "Det er umuligt at parre to webbrowserfaner",
|
||||||
|
"pairing-success": "Enheder parret",
|
||||||
|
"pairing-not-persistent": "Parrede enheder er ikke vedvarende",
|
||||||
|
"pairing-key-invalid": "Ugyldig nøgle",
|
||||||
|
"pairing-key-invalidated": "Nøglen {{key}} er ugyldig",
|
||||||
|
"pairing-cleared": "Alle enheder er frakoblet",
|
||||||
|
"public-room-id-invalid": "Ugyldigt rum-id",
|
||||||
|
"copied-to-clipboard": "Kopieret til udklipsholder",
|
||||||
|
"pair-url-copied-to-clipboard": "Link til at parre denne enhed kopieret til udklipsholder",
|
||||||
|
"copied-to-clipboard-error": "Kopiering ikke mulig. Kopier manuelt.",
|
||||||
|
"text-content-incorrect": "Tekstindholdet er forkert",
|
||||||
|
"file-content-incorrect": "Filens indhold er forkert",
|
||||||
|
"clipboard-content-incorrect": "Udklipsholderens indhold er forkert",
|
||||||
|
"link-received": "Link modtaget af {{name}} - Klik for at åbne",
|
||||||
|
"message-received": "Besked modtaget af {{name}} - Klik for at kopiere",
|
||||||
|
"click-to-download": "Klik for at hente",
|
||||||
|
"request-title": "{{name}} vil gerne overføre {{count}} {{descriptor}}",
|
||||||
|
"click-to-show": "Klik for at vise",
|
||||||
|
"copied-text": "Kopieret tekst til udklipsholder",
|
||||||
|
"offline": "Du er offline",
|
||||||
|
"online": "Du er online igen",
|
||||||
|
"connected": "Forbundet",
|
||||||
|
"online-requirement-pairing": "Du skal være online for at parre enheder",
|
||||||
|
"online-requirement-public-room": "Du skal være online for at oprette et offentligt rum",
|
||||||
|
"connecting": "Forbinder…",
|
||||||
|
"files-incorrect": "Filerne er forkerte",
|
||||||
|
"file-transfer-completed": "Filoverførsel gennemført",
|
||||||
|
"message-transfer-completed": "Beskedoverførsel gennemført",
|
||||||
|
"unfinished-transfers-warning": "Der er uafsluttede overførsler. Er du sikker på, at du vil lukke PairDrop?",
|
||||||
|
"rate-limit-join-key": "Satsgrænsen er nået. Vent 10 sekunder, og prøv igen.",
|
||||||
|
"selected-peer-left": "Valgt peer forlod"
|
||||||
|
},
|
||||||
|
"dialogs": {
|
||||||
|
"message_placeholder": "Tekst",
|
||||||
|
"base64-files": "filer",
|
||||||
|
"file-other-description-image": "og 1 andet billede",
|
||||||
|
"file-other-description-file": "og 1 anden fil",
|
||||||
|
"download-again": "Hent igen",
|
||||||
|
"system-language": "Systemsprog",
|
||||||
|
"pair-devices-qr-code_title": "Klik for at kopiere linket for at parre denne enhed",
|
||||||
|
"enter-key-from-another-device": "Indtast nøgle fra en anden enhed her.",
|
||||||
|
"temporary-public-room-title": "Midlertidigt offentligt rum",
|
||||||
|
"edit-paired-devices-title": "Rediger parrede enheder",
|
||||||
|
"auto-accept-instructions-2": "for automatisk at acceptere alle filer sendt fra den pågældende enhed.",
|
||||||
|
"pair-devices-title": "Par enheder permanent",
|
||||||
|
"input-key-on-this-device": "Indtast denne nøgle på en anden enhed",
|
||||||
|
"scan-qr-code": "eller scan QR-koden.",
|
||||||
|
"input-room-id-on-another-device": "Indtast dette rum-id på en anden enhed",
|
||||||
|
"enter-room-id-from-another-device": "Indtast rum-id fra en anden enhed for at deltage i rummet.",
|
||||||
|
"hr-or": "ELLER",
|
||||||
|
"pair": "Par",
|
||||||
|
"cancel": "Annuller",
|
||||||
|
"unpair": "Fjern parring",
|
||||||
|
"paired-device-removed": "Parret enhed er blevet fjernet.",
|
||||||
|
"paired-devices-wrapper_data-empty": "Ingen parrede enheder.",
|
||||||
|
"auto-accept-instructions-1": "Aktiver",
|
||||||
|
"auto-accept": "auto-accepter",
|
||||||
|
"close": "Luk",
|
||||||
|
"join": "Forbinde",
|
||||||
|
"leave": "Forlad",
|
||||||
|
"would-like-to-share": "gerne vil dele",
|
||||||
|
"accept": "Accepter",
|
||||||
|
"decline": "Nægt",
|
||||||
|
"has-sent": "har sendt:",
|
||||||
|
"share": "Del",
|
||||||
|
"download": "Hent",
|
||||||
|
"send-message-title": "Send besked",
|
||||||
|
"send-message-to": "Til:",
|
||||||
|
"message_title": "Indsæt besked for at sende",
|
||||||
|
"send": "Send",
|
||||||
|
"receive-text-title": "Besked modtaget",
|
||||||
|
"copy": "Kopier",
|
||||||
|
"base64-title-files": "Del filer",
|
||||||
|
"base64-title-text": "Del tekst",
|
||||||
|
"base64-processing": "Behandler…",
|
||||||
|
"base64-tap-to-paste": "Tryk her for at dele {{type}}",
|
||||||
|
"base64-paste-to-send": "Indsæt udklipsholder her for at dele {{type}}",
|
||||||
|
"base64-text": "tekst",
|
||||||
|
"file-other-description-image-plural": "og {{count}} andre billeder",
|
||||||
|
"file-other-description-file-plural": "og {{count}} andre filer",
|
||||||
|
"title-image": "Billede",
|
||||||
|
"title-file": "Fil",
|
||||||
|
"title-image-plural": "Billeder",
|
||||||
|
"title-file-plural": "Filer",
|
||||||
|
"receive-title": "{{descriptor}} Modtaget",
|
||||||
|
"language-selector-title": "Indstil sprog",
|
||||||
|
"public-room-qr-code_title": "Klik for at kopiere linket til det offentlige rum",
|
||||||
|
"approve": "godkend",
|
||||||
|
"share-text-title": "Del tekstbesked",
|
||||||
|
"share-text-subtitle": "Rediger besked, før du sender:",
|
||||||
|
"share-text-checkbox": "Vis altid denne dialogboks, når du deler tekst",
|
||||||
|
"close-toast_title": "Luk besked"
|
||||||
|
},
|
||||||
|
"about": {
|
||||||
|
"claim": "Den nemmeste måde at overføre filer på tværs af enheder",
|
||||||
|
"faq_title": "Ofte stillede spørgsmål",
|
||||||
|
"close-about_aria-label": "Luk Om PairDrop",
|
||||||
|
"github_title": "PairDrop på GitHub",
|
||||||
|
"buy-me-a-coffee_title": "Køb mig en kop kaffe!",
|
||||||
|
"tweet_title": "Tweet om PairDrop",
|
||||||
|
"mastodon_title": "Skriv om PairDrop på Mastodon",
|
||||||
|
"bluesky_title": "Følg os på BlueSky",
|
||||||
|
"custom_title": "Følg os",
|
||||||
|
"privacypolicy_title": "Åbn vores privatlivspolitik"
|
||||||
|
},
|
||||||
|
"header": {
|
||||||
|
"language-selector_title": "Indstil sprog",
|
||||||
|
"about_aria-label": "Åbn Om PairDrop",
|
||||||
|
"theme-auto_title": "Tilpas temaet til systemet automatisk",
|
||||||
|
"theme-light_title": "Brug altid lyst tema",
|
||||||
|
"theme-dark_title": "Brug altid mørkt tema",
|
||||||
|
"notification_title": "Aktiver notifikationer",
|
||||||
|
"install_title": "Installer PairDrop",
|
||||||
|
"pair-device_title": "Par dine enheder permanent",
|
||||||
|
"edit-paired-devices_title": "Rediger parrede enheder",
|
||||||
|
"join-public-room_title": "Deltag midlertidigt i det offentlige rum",
|
||||||
|
"cancel-share-mode": "Annuller",
|
||||||
|
"edit-share-mode": "Redigere",
|
||||||
|
"expand_title": "Udvid overskriftsknaprækken",
|
||||||
|
"about_title": "Om PairDrop"
|
||||||
|
},
|
||||||
|
"instructions": {
|
||||||
|
"no-peers-subtitle": "Par enheder, eller gå ind i et offentligt rum for at være synlig på andre netværk",
|
||||||
|
"x-instructions_desktop": "Klik for at sende filer eller højreklik for at sende en besked",
|
||||||
|
"activate-share-mode-base": "Åbn PairDrop på andre enheder for at sende",
|
||||||
|
"no-peers_data-drop-bg": "Slip for at vælge modtager",
|
||||||
|
"no-peers-title": "Åbn PairDrop på andre enheder for at sende filer",
|
||||||
|
"x-instructions_mobile": "Tryk for at sende filer, eller tryk længe for at sende en besked",
|
||||||
|
"x-instructions_data-drop-peer": "Slip for at sende til peer",
|
||||||
|
"x-instructions_data-drop-bg": "Slip for at vælge modtager",
|
||||||
|
"x-instructions-share-mode_desktop": "Klik for at sende {{descriptor}}",
|
||||||
|
"x-instructions-share-mode_mobile": "Tryk for at sende {{descriptor}}",
|
||||||
|
"activate-share-mode-and-other-file": "og 1 anden fil",
|
||||||
|
"activate-share-mode-and-other-files-plural": "og {{count}} andre filer",
|
||||||
|
"activate-share-mode-shared-text": "delt tekst",
|
||||||
|
"activate-share-mode-shared-file": "delt fil",
|
||||||
|
"activate-share-mode-shared-files-plural": "{{count}} delte filer",
|
||||||
|
"webrtc-requirement": "For at bruge denne PairDrop-instans skal WebRTC være aktiveret!"
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"on-this-network_title": "Du kan blive opdaget af alle på dette netværk.",
|
||||||
|
"public-room-devices_title": "Du kan blive opdaget af enheder i dette offentlige rum uafhængigt af netværket.",
|
||||||
|
"known-as": "Du er kendt som:",
|
||||||
|
"display-name_data-placeholder": "Indlæser…",
|
||||||
|
"display-name_title": "Rediger dit enhedsnavn permanent",
|
||||||
|
"discovery": "Du kan blive opdaget:",
|
||||||
|
"on-this-network": "på dette netværk",
|
||||||
|
"paired-devices": "af parrede enheder",
|
||||||
|
"paired-devices_title": "Du kan til enhver tid blive opdaget af parrede enheder uafhængigt af netværket.",
|
||||||
|
"public-room-devices": "i rum {{roomId}}",
|
||||||
|
"traffic": "Trafikken er",
|
||||||
|
"routed": "dirigeret gennem serveren",
|
||||||
|
"webrtc": "hvis WebRTC ikke er tilgængelig."
|
||||||
|
},
|
||||||
|
"document-titles": {
|
||||||
|
"file-received": "Fil modtaget",
|
||||||
|
"file-received-plural": "{{count}} Filer modtaget",
|
||||||
|
"file-transfer-requested": "Filoverførsel anmodet",
|
||||||
|
"image-transfer-requested": "Billedoverførsel anmodet",
|
||||||
|
"message-received": "Besked modtaget",
|
||||||
|
"message-received-plural": "{{count}} meddelelser modtaget"
|
||||||
|
},
|
||||||
|
"peer-ui": {
|
||||||
|
"click-to-send-share-mode": "Klik for at sende {{descriptor}}",
|
||||||
|
"click-to-send": "Klik for at sende filer eller højreklik for at sende en besked",
|
||||||
|
"connection-hash": "For at kontrollere sikkerheden for end-to-end-kryptering skal du sammenligne dette sikkerhedsnummer på begge enheder",
|
||||||
|
"preparing": "Forbereder…",
|
||||||
|
"waiting": "Venter…",
|
||||||
|
"processing": "Behandler…",
|
||||||
|
"transferring": "Overfører…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -153,17 +153,17 @@
|
||||||
"no-peers-title": "Öffne PairDrop auf anderen Geräten, um Dateien zu senden",
|
"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_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",
|
"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 von {{descriptor}}",
|
"x-instructions-share-mode_desktop": "Klicke zum Senden {{descriptor}}",
|
||||||
"x-instructions-share-mode_mobile": "Tippe zum Senden von {{descriptor}}",
|
"x-instructions-share-mode_mobile": "Tippe zum Senden {{descriptor}}",
|
||||||
"x-instructions_data-drop-peer": "Hier ablegen, um an Peer zu senden",
|
"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_data-drop-bg": "Loslassen um Empfänger auszuwählen",
|
||||||
"x-instructions_mobile": "Tippe, um Dateien zu senden oder tippe lange, um Nachrichten zu senden",
|
"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 von",
|
"activate-share-mode-base": "Öffne PairDrop auf anderen Geräten zum Senden",
|
||||||
"activate-share-mode-and-other-files-plural": "und {{count}} anderen Dateien",
|
"activate-share-mode-and-other-files-plural": "und {{count}} anderen Dateien",
|
||||||
"activate-share-mode-shared-text": "freigegebenem Text",
|
"activate-share-mode-shared-text": "des geteilten Texts",
|
||||||
"webrtc-requirement": "Um diese PairDrop Instanz zu verwenden muss WebRTC aktiviert sein!",
|
"webrtc-requirement": "Um diese PairDrop Instanz zu verwenden muss WebRTC aktiviert sein!",
|
||||||
"activate-share-mode-shared-files-plural": "{{count}} geteilte Dateien",
|
"activate-share-mode-shared-files-plural": "der {{count}} geteilten Dateien",
|
||||||
"activate-share-mode-shared-file": "geteilte Datei",
|
"activate-share-mode-shared-file": "der geteilten Datei",
|
||||||
"activate-share-mode-and-other-file": "und 1 andere Datei"
|
"activate-share-mode-and-other-file": "und 1 andere Datei"
|
||||||
},
|
},
|
||||||
"document-titles": {
|
"document-titles": {
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"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…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"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": "Hautatutako kideak alde egin du",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"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": "در حال انتقال…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,9 @@
|
||||||
"pair-device_title": "Associez vos appareils de manière permanente",
|
"pair-device_title": "Associez vos appareils de manière permanente",
|
||||||
"edit-paired-devices_title": "Gérer les appareils couplés",
|
"edit-paired-devices_title": "Gérer les appareils couplés",
|
||||||
"join-public-room_title": "Rejoindre temporairement la salle publique",
|
"join-public-room_title": "Rejoindre temporairement la salle publique",
|
||||||
"cancel-share-mode": "Terminé"
|
"cancel-share-mode": "Terminé",
|
||||||
|
"edit-share-mode": "Modifier",
|
||||||
|
"expand_title": "Agrandir entête bouton ligne"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"no-peers_data-drop-bg": "Déposer pour choisir le destinataire",
|
"no-peers_data-drop-bg": "Déposer pour choisir le destinataire",
|
||||||
|
@ -21,11 +23,15 @@
|
||||||
"x-instructions_mobile": "Appuyez pour envoyer des fichiers ou appuyez longuement pour envoyer un message",
|
"x-instructions_mobile": "Appuyez pour envoyer des fichiers ou appuyez longuement pour envoyer un message",
|
||||||
"x-instructions_data-drop-peer": "Déposer pour envoyer au destinataire",
|
"x-instructions_data-drop-peer": "Déposer pour envoyer au destinataire",
|
||||||
"x-instructions_data-drop-bg": "Lâcher pour choisir le destinataire",
|
"x-instructions_data-drop-bg": "Lâcher pour choisir le destinataire",
|
||||||
"x-instructions-share-mode_desktop": "Cliquez pour envoyer",
|
"x-instructions-share-mode_desktop": "Cliquez pour envoyer {{descriptor}}",
|
||||||
"x-instructions-share-mode_mobile": "Appuyez pour envoyer",
|
"x-instructions-share-mode_mobile": "Appuyez pour envoyer {{descriptor}}",
|
||||||
"activate-share-mode-base": "Ouvrez PairDrop sur d'autres appareils pour envoyer",
|
"activate-share-mode-base": "Ouvrez PairDrop sur d'autres appareils pour envoyer",
|
||||||
"activate-share-mode-and-other-files-plural": "et {{count}} autres fichiers",
|
"activate-share-mode-and-other-files-plural": "et {{count}} autres fichiers",
|
||||||
"activate-share-mode-shared-text": "texte partagé"
|
"activate-share-mode-shared-text": "texte partagé",
|
||||||
|
"activate-share-mode-shared-file": "fichier partagé",
|
||||||
|
"webrtc-requirement": "Pour utiliser cette instance de PairDrop, WebRTC doit être activé !",
|
||||||
|
"activate-share-mode-shared-files-plural": "{{count}} fichiers partagés",
|
||||||
|
"activate-share-mode-and-other-file": "et un autre fichier"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"known-as": "Vous êtes connu comme :",
|
"known-as": "Vous êtes connu comme :",
|
||||||
|
@ -70,13 +76,13 @@
|
||||||
"share": "Partage",
|
"share": "Partage",
|
||||||
"download": "Télécharger",
|
"download": "Télécharger",
|
||||||
"send-message-title": "Envoyer un message",
|
"send-message-title": "Envoyer un message",
|
||||||
"send-message-to": "Envoyer un message à",
|
"send-message-to": "À :",
|
||||||
"send": "Envoyer",
|
"send": "Envoyer",
|
||||||
"receive-text-title": "Message reçu",
|
"receive-text-title": "Message reçu",
|
||||||
"copy": "Copier",
|
"copy": "Copier",
|
||||||
"base64-processing": "Traitement…",
|
"base64-processing": "Traitement…",
|
||||||
"base64-tap-to-paste": "Appuyez ici pour coller {{type}}",
|
"base64-tap-to-paste": "Appuyez ici pour partager {{type}}",
|
||||||
"base64-paste-to-send": "Coller ici pour envoyer {{type}}",
|
"base64-paste-to-send": "Coller le presse-papiers ici pour partager {{type}}",
|
||||||
"base64-text": "texte",
|
"base64-text": "texte",
|
||||||
"base64-files": "fichiers",
|
"base64-files": "fichiers",
|
||||||
"file-other-description-image": "et 1 autre image",
|
"file-other-description-image": "et 1 autre image",
|
||||||
|
@ -93,7 +99,16 @@
|
||||||
"system-language": "Langue du système",
|
"system-language": "Langue du système",
|
||||||
"message_title": "Insérer un message à envoyer",
|
"message_title": "Insérer un message à envoyer",
|
||||||
"pair-devices-qr-code_title": "Cliquer pour copier pour appairer l'appareil",
|
"pair-devices-qr-code_title": "Cliquer pour copier pour appairer l'appareil",
|
||||||
"public-room-qr-code_title": "Cliquez pour copier le lien vers le salon public"
|
"public-room-qr-code_title": "Cliquez pour copier le lien vers le salon public",
|
||||||
|
"base64-title-text": "Texte partagé",
|
||||||
|
"paired-device-removed": "L'appareil connecté a été enlevé.",
|
||||||
|
"message_placeholder": "Texte",
|
||||||
|
"base64-title-files": "Fichiers partagés",
|
||||||
|
"approve": "approuve",
|
||||||
|
"share-text-title": "Partage le message",
|
||||||
|
"share-text-subtitle": "Modifier le message avant l'envoi :",
|
||||||
|
"share-text-checkbox": "Toujours montrer ce dialogue quand du texte est partagé",
|
||||||
|
"close-toast_title": "Fermer la notification"
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"close-about_aria-label": "Fermer à propos de PairDrop",
|
"close-about_aria-label": "Fermer à propos de PairDrop",
|
||||||
|
@ -101,7 +116,11 @@
|
||||||
"github_title": "PairDrop sur GitHub",
|
"github_title": "PairDrop sur GitHub",
|
||||||
"buy-me-a-coffee_title": "Achetez-moi un café !",
|
"buy-me-a-coffee_title": "Achetez-moi un café !",
|
||||||
"tweet_title": "Tweet à propos de PairDrop",
|
"tweet_title": "Tweet à propos de PairDrop",
|
||||||
"faq_title": "Questions fréquemment posées"
|
"faq_title": "Questions fréquemment posées",
|
||||||
|
"bluesky_title": "Suis-nous sur BlueSky",
|
||||||
|
"custom_title": "Suis-nous",
|
||||||
|
"privacypolicy_title": "Ouvert sur notre politique de confidentialité",
|
||||||
|
"mastodon_title": "Écrire à propos de PairDrop sur Mastodon"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"display-name-changed-permanently": "Le nom d'affichage est modifié de manière permanente",
|
"display-name-changed-permanently": "Le nom d'affichage est modifié de manière permanente",
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"about_title": "אודות PairDrop",
|
||||||
|
"theme-light_title": "השתמש תמיד במצב בהיר",
|
||||||
|
"install_title": "התקן את PairDrop",
|
||||||
|
"edit-share-mode": "עריכה",
|
||||||
|
"expand_title": "הרחב את שורת כפתור הכותרת",
|
||||||
|
"language-selector_title": "שינוי השפה",
|
||||||
|
"about_aria-label": "פתח אודות PairDrop",
|
||||||
|
"theme-auto_title": "התאם את הרקע למערכת באופן אוטומטי",
|
||||||
|
"theme-dark_title": "השתמש תמיד במצב כהה",
|
||||||
|
"notification_title": "הפעל התראות",
|
||||||
|
"pair-device_title": "התאם את המכשירים שלך לתמיד",
|
||||||
|
"edit-paired-devices_title": "עריכת מכשירים מתואמים",
|
||||||
|
"join-public-room_title": "הצטרף לחדר ציבורי באופן זמני",
|
||||||
|
"cancel-share-mode": "ביטול"
|
||||||
|
},
|
||||||
|
"instructions": {
|
||||||
|
"no-peers-subtitle": "תאם מכשירים או היכנס לחדר ציבורי כדי להיות ניתן לגילוי ברשתות אחרות",
|
||||||
|
"x-instructions_data-drop-bg": "שחרר כדי לבחור נמען",
|
||||||
|
"activate-share-mode-and-other-file": "וקובץ 1 אחר",
|
||||||
|
"activate-share-mode-base": "פתח את PairDrop על מכשירים אחרים כדי לשלוח",
|
||||||
|
"activate-share-mode-shared-file": "קובץ משותף",
|
||||||
|
"activate-share-mode-shared-files-plural": "{{count}} קבצים משותפים",
|
||||||
|
"webrtc-requirement": "כדי להשתמש בPairdrop, WebRTC מוכרח להיות מופעל!",
|
||||||
|
"no-peers_data-drop-bg": "שחרר כדי לבחור את הנמען",
|
||||||
|
"no-peers-title": "פתח את PairDrop במכשירים אחרים כדי לשלוח קבצים",
|
||||||
|
"x-instructions_desktop": "לחץ כדי לשלוח קבצים או בצע לחיצה ימנית כדי לשלוח הודעה",
|
||||||
|
"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-files-plural": "ו{{count}} קבצים אחרים",
|
||||||
|
"activate-share-mode-shared-text": "טקסט משותף"
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"paired-devices_title": "הנך ניתן לגילוי על ידי מכשירים מתואמים בכל עת ללא תלות ברשת.",
|
||||||
|
"on-this-network": "ברשת הזו",
|
||||||
|
"on-this-network_title": "אתה ניתן לגילוי על ידי כולם ברשת הזו.",
|
||||||
|
"display-name_data-placeholder": "טוען…",
|
||||||
|
"display-name_title": "שנה את שם המכשיר שלך לתמיד",
|
||||||
|
"known-as": "הנך ידוע כ:",
|
||||||
|
"discovery": "הנך ניתן לגילוי:",
|
||||||
|
"paired-devices": "על ידי מכשירים מתואמים",
|
||||||
|
"public-room-devices": "בחדר {{roomId}}",
|
||||||
|
"public-room-devices_title": "הנך ניתן לגילוי על ידי מכשירים בחדר הציבורי הזה ללא תלות ברשת.",
|
||||||
|
"traffic": "הנתונים",
|
||||||
|
"routed": "מנותבים דרך השרת",
|
||||||
|
"webrtc": "אם WebRTC אינו זמין."
|
||||||
|
},
|
||||||
|
"dialogs": {
|
||||||
|
"input-room-id-on-another-device": "הזן את מזהה החדר הזה במכשיר אחר",
|
||||||
|
"edit-paired-devices-title": "ערוך מכשירים מתואמים",
|
||||||
|
"paired-device-removed": "המכשיר המתואם הוסר.",
|
||||||
|
"download-again": "הורד שוב",
|
||||||
|
"public-room-qr-code_title": "לחץ כדי להעתיק את הקישור לחדר הציבורי",
|
||||||
|
"auto-accept-instructions-2": "כדי לקבל באופן אוטומטי את כל הקבצים שנשלחים ממכשיר זה.",
|
||||||
|
"title-file-plural": "קבצים",
|
||||||
|
"receive-title": "{{descriptor}} התקבל",
|
||||||
|
"download": "הורד",
|
||||||
|
"send-message-title": "שלח הודעה",
|
||||||
|
"message_placeholder": "טקסט",
|
||||||
|
"receive-text-title": "ההודעה התקבלה",
|
||||||
|
"base64-text": "טקסט",
|
||||||
|
"share-text-checkbox": "תמיד הצג את חלונית זו כאשר טקסט משותף",
|
||||||
|
"system-language": "שפת המערכת",
|
||||||
|
"title-file": "קובץ",
|
||||||
|
"pair-devices-title": "תאם מכשירים לתמיד",
|
||||||
|
"input-key-on-this-device": "הזן את הקוד הזה במכשיר אחר",
|
||||||
|
"scan-qr-code": "או סרוק את הברקוד.",
|
||||||
|
"enter-key-from-another-device": "הזן את הקוד ממכשיר אחר כאן.",
|
||||||
|
"temporary-public-room-title": "חדר ציבורי זמני",
|
||||||
|
"enter-room-id-from-another-device": "הזן מזהה חדר ממכשיר אחר כדי להצטרף לחדר.",
|
||||||
|
"hr-or": "או",
|
||||||
|
"pair": "תאם",
|
||||||
|
"cancel": "ביטול",
|
||||||
|
"unpair": "בטל התאמה",
|
||||||
|
"paired-devices-wrapper_data-empty": "אין מכשירים מתואמים.",
|
||||||
|
"auto-accept-instructions-1": "הפעל",
|
||||||
|
"auto-accept": "קבלה אוטומטית",
|
||||||
|
"close": "סגירה",
|
||||||
|
"join": "הצטרף",
|
||||||
|
"leave": "עזוב",
|
||||||
|
"would-like-to-share": "רוצה לשתף",
|
||||||
|
"accept": "קבל",
|
||||||
|
"decline": "סרב",
|
||||||
|
"has-sent": "שלח:",
|
||||||
|
"share": "שתף",
|
||||||
|
"send-message-to": "אל:",
|
||||||
|
"message_title": "הזן את ההודעה לשליחה",
|
||||||
|
"send": "שלח",
|
||||||
|
"copy": "העתק",
|
||||||
|
"base64-title-files": "שתף קבצים",
|
||||||
|
"base64-title-text": "שתף טקסט",
|
||||||
|
"base64-processing": "מעבד…",
|
||||||
|
"base64-tap-to-paste": "גע כאן כדי לשתף {{type}}",
|
||||||
|
"base64-paste-to-send": "הדבק כאן כדי לשתף {{type}}",
|
||||||
|
"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-image-plural": "תמונות",
|
||||||
|
"language-selector-title": "הגדר שפה",
|
||||||
|
"pair-devices-qr-code_title": "לחץ כדי להעתיק את הקישור כדי לבצע תיאום עם מכשיר זה",
|
||||||
|
"approve": "אשר",
|
||||||
|
"share-text-title": "שתף הודעת טקסט",
|
||||||
|
"share-text-subtitle": "ערוך את ההודעה לפני השליחה:",
|
||||||
|
"close-toast_title": "סגירת ההתראה"
|
||||||
|
},
|
||||||
|
"about": {
|
||||||
|
"mastodon_title": "כתוב על PairDrop בMastodon",
|
||||||
|
"buy-me-a-coffee_title": "קנה לי קפה!",
|
||||||
|
"claim": "הדרך הקלה ביותר להעברת קבצים בין מכשירים",
|
||||||
|
"github_title": "PairDrop בGitHub",
|
||||||
|
"tweet_title": "צייץ על PairDrop",
|
||||||
|
"custom_title": "עקוב אחרינו",
|
||||||
|
"bluesky_title": "עקוב אחרינו בBlueSky",
|
||||||
|
"privacypolicy_title": "פתח את מדיניות הפרטיות שלנו",
|
||||||
|
"faq_title": "שאלות נפוצות",
|
||||||
|
"close-about_aria-label": "סגירת אודות PairDrop"
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"display-name-changed-permanently": "שם התצוגה משתנה לתמיד",
|
||||||
|
"download-successful": "{{descriptor}} הורד",
|
||||||
|
"notifications-permissions-error": "ההרשאה להתראות נחסמה עקב סגירת חלונית בקשת ההרשאה מספר פעמים. אתה יכול לאפס זאת במידע על דף זה שניתן לגישה באמצעות לחיצה על אייקון המנעול ליד שורת הכתובת.",
|
||||||
|
"click-to-show": "לחץ כדי להציג",
|
||||||
|
"connecting": "מתחבר…",
|
||||||
|
"online": "הנך מחובר שוב לאינטרנט",
|
||||||
|
"pairing-cleared": "כל ההתאמות למכשירים הוסרו",
|
||||||
|
"pair-url-copied-to-clipboard": "הקישור להתאמת המכשיר הזה הועתק",
|
||||||
|
"connected": "מחובר",
|
||||||
|
"online-requirement-pairing": "אתה צריך להיות מחובר לאינטרנט כדי לתאם מכשירים",
|
||||||
|
"online-requirement-public-room": "אתה צריך להיות מחובר כדי ליצור חדר ציבורי",
|
||||||
|
"files-incorrect": "הקבצים שגויים",
|
||||||
|
"unfinished-transfers-warning": "יש עוד העברות שלא הסתיימו. אתה בטוח שאתה רוצה לסגור את PairDrop?",
|
||||||
|
"rate-limit-join-key": "הגעת למגבלה. חכה 10 שניות ונסה שנית.",
|
||||||
|
"selected-peer-left": "המכשיר הנבחר עזב",
|
||||||
|
"display-name-changed-temporarily": "שם התצוגה משתנה להפעלה זו בלבד",
|
||||||
|
"display-name-random-again": "שם התצוגה נוצר שוב באופן אקראי",
|
||||||
|
"pairing-tabs-error": "תיאום בין שני כרטיסיות בדפדפן אינו אפשרי",
|
||||||
|
"pairing-success": "המכשירים תואמו",
|
||||||
|
"pairing-not-persistent": "המכשירים המתואמים אינם קבועים",
|
||||||
|
"pairing-key-invalid": "קוד שגוי",
|
||||||
|
"pairing-key-invalidated": "הקוד {{key}} לא תקף עוד",
|
||||||
|
"public-room-id-invalid": "מזהה חדר שגוי",
|
||||||
|
"public-room-left": "עזבת את החדר הציבורי {{publicRoomId}}",
|
||||||
|
"copied-to-clipboard": "הועתק",
|
||||||
|
"room-url-copied-to-clipboard": "הקישור לחדר הציבורי הועתק",
|
||||||
|
"copied-to-clipboard-error": "העתקה אינה אפשרית. העתק ידנית.",
|
||||||
|
"text-content-incorrect": "תוכן הטקסט שגוי",
|
||||||
|
"file-content-incorrect": "תוכן הקובץ שגוי",
|
||||||
|
"clipboard-content-incorrect": "התוכן שהודבק שגוי",
|
||||||
|
"notifications-enabled": "ההתראות אופשרו",
|
||||||
|
"link-received": "קישור התקבל מ{{name}} - לחץ כדי לפתוח",
|
||||||
|
"message-received": "הודעה התקבלה מ{{name}} - לחץ כדי להעתיק",
|
||||||
|
"click-to-download": "לחץ כדי להוריד",
|
||||||
|
"request-title": "{{name}} רוצה לשלוח {{count}} {{descriptor}}",
|
||||||
|
"copied-text": "הטקסט הועתק",
|
||||||
|
"copied-text-error": "ההעתקה נכשלה. העתק ידנית!",
|
||||||
|
"offline": "הנך לא מחובר לאינטרנט",
|
||||||
|
"file-transfer-completed": "העברת הקובץ הושלמה בהצלחה",
|
||||||
|
"ios-memory-limit": "שליחת קבצים למכשירי iOS אפשרית רק עד 200 MB בבת אחת",
|
||||||
|
"message-transfer-completed": "העברת ההודעה הושלמה בהצלחה"
|
||||||
|
},
|
||||||
|
"peer-ui": {
|
||||||
|
"click-to-send": "לחץ כדי לשלוח קבצים או בצע לחיצה ימנית כדי לשלוח הודעה",
|
||||||
|
"click-to-send-share-mode": "לחץ כדי לשלוח {{descriptor}}",
|
||||||
|
"connection-hash": "כדי לאמת את האבטחה של ההצפנה מצד לצד, השווה את מספר אבטחה זה בין שני המכשירים",
|
||||||
|
"preparing": "מתכונן…",
|
||||||
|
"waiting": "מחכה…",
|
||||||
|
"processing": "מעבד…",
|
||||||
|
"transferring": "מעביר…"
|
||||||
|
},
|
||||||
|
"document-titles": {
|
||||||
|
"file-received": "הקובץ התקבל",
|
||||||
|
"file-received-plural": "{{count}} קבצים התקבלו",
|
||||||
|
"file-transfer-requested": "העברת קבצים מתבקשת",
|
||||||
|
"image-transfer-requested": "העברת תמונות מתבקשת",
|
||||||
|
"message-received": "התקבלה הודעה",
|
||||||
|
"message-received-plural": "{{count}} הודעות התקבלו"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"language-selector_title": "Nyelv beállítása",
|
||||||
|
"theme-auto_title": "Téma automatikusan rendszerhez igazítása",
|
||||||
|
"about_aria-label": "\"A PairDrop-ról\" megnyitása",
|
||||||
|
"theme-light_title": "Mindig világos téma használata",
|
||||||
|
"theme-dark_title": "Mindig sötét téma használata",
|
||||||
|
"notification_title": "Értesítések engedélyezése",
|
||||||
|
"install_title": "PairDrop telepítése",
|
||||||
|
"edit-paired-devices_title": "Párosított eszközök szerkeztése",
|
||||||
|
"cancel-share-mode": "Mégse",
|
||||||
|
"edit-share-mode": "Szerkesztés",
|
||||||
|
"expand_title": "Fejléc gombsorának kibővítése",
|
||||||
|
"about_title": "A PairDrop-ról",
|
||||||
|
"pair-device_title": "Eszközei végleges párosítása",
|
||||||
|
"join-public-room_title": "Ideiglenes csatlakozás a nyilvános szobához"
|
||||||
|
},
|
||||||
|
"instructions": {
|
||||||
|
"no-peers-title": "Nyissa meg a PairDrop-ot más eszközökön a fájlok küldéséhez",
|
||||||
|
"no-peers_data-drop-bg": "Engedje el a címzett kiválasztásához",
|
||||||
|
"x-instructions_desktop": "Kattintson a fájlküldéshez, vagy kattintson jobb gombbal üzenet küldéséhez",
|
||||||
|
"x-instructions_data-drop-peer": "Engedje el a partnernek való küldéshez",
|
||||||
|
"x-instructions_data-drop-bg": "Engedje el a címzett kiválasztásához",
|
||||||
|
"activate-share-mode-base": "Nyissa meg a PairDrop-ot más eszközökön a küldéséhez",
|
||||||
|
"activate-share-mode-and-other-file": "és egy másik fájl",
|
||||||
|
"activate-share-mode-and-other-files-plural": "és {{count}} másik fájl",
|
||||||
|
"activate-share-mode-shared-file": "megosztott fájl",
|
||||||
|
"activate-share-mode-shared-files-plural": "{{count}} megosztott fájl",
|
||||||
|
"x-instructions_mobile": "Koppintson a fájlküldéshez, vagy nyomja hosszan üzenet küldéséhez",
|
||||||
|
"x-instructions-share-mode_desktop": "Kattintson a {{descriptor}} küldéséhez",
|
||||||
|
"x-instructions-share-mode_mobile": "Koppintson a {{descriptor}} küldéséhez",
|
||||||
|
"activate-share-mode-shared-text": "megosztott szöveg",
|
||||||
|
"webrtc-requirement": "Ezen PairDrop példány használatához engedélyezni kell a WebRTC-t!",
|
||||||
|
"no-peers-subtitle": "Párosítsa eszközeit vagy lépjen be egy nyilvános szobába, hogy más hálózatokon is felfedezhető legyen"
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"known-as": "Ön így látható:",
|
||||||
|
"display-name_data-placeholder": "Betöltés…",
|
||||||
|
"display-name_title": "Az eszköze nevének végleges megváltoztatása",
|
||||||
|
"discovery": "Ön felfedezhető:",
|
||||||
|
"on-this-network_title": "Mindenki által felfedezhető a hálózaton.",
|
||||||
|
"paired-devices": "a csatlakoztatott eszközök által",
|
||||||
|
"public-room-devices": "a {{roomId}} szobában",
|
||||||
|
"traffic": "A forgalom",
|
||||||
|
"routed": "a szerveren van átirányítva",
|
||||||
|
"webrtc": "ha nem elérhető a WebRTC.",
|
||||||
|
"on-this-network": "ezen a hálózaton",
|
||||||
|
"paired-devices_title": "A párosított eszközeid által minden esetben felfedezhető a hálózaton, a hálózattól függetlenül.",
|
||||||
|
"public-room-devices_title": "Mindenki által felfedezhető ebben a nyilvános szobában, a hálózattól függetlenül."
|
||||||
|
},
|
||||||
|
"dialogs": {
|
||||||
|
"input-key-on-this-device": "Írja be ezt a kódot egy másik eszközön",
|
||||||
|
"pair-devices-title": "Eszközök végleges párosítása",
|
||||||
|
"temporary-public-room-title": "Ideiglenes nyilvános szoba",
|
||||||
|
"input-room-id-on-another-device": "Írja be ezt a szobakódot egy másik eszközön",
|
||||||
|
"enter-room-id-from-another-device": "Írja be a szobakódot egy másik eszközről a szobához való csatlakozáshoz.",
|
||||||
|
"cancel": "Mégse",
|
||||||
|
"pair": "Párosítás",
|
||||||
|
"edit-paired-devices-title": "Párosított eszközök szerkesztése",
|
||||||
|
"unpair": "Párosítás megszüntetése",
|
||||||
|
"paired-device-removed": "Párosított eszköz eltávolítva.",
|
||||||
|
"paired-devices-wrapper_data-empty": "Nincs párosított eszköz.",
|
||||||
|
"auto-accept": "automatikus elfogadás",
|
||||||
|
"close": "Bezárás",
|
||||||
|
"join": "Csatlakozás",
|
||||||
|
"would-like-to-share": "szeretne megosztani",
|
||||||
|
"accept": "Elfogadás",
|
||||||
|
"has-sent": "küldött:",
|
||||||
|
"share": "Megosztás",
|
||||||
|
"send-message-title": "Üzenet küldése",
|
||||||
|
"send-message-to": "Neki:",
|
||||||
|
"receive-text-title": "Üzenet érkezett",
|
||||||
|
"base64-processing": "Feldolgozás…",
|
||||||
|
"scan-qr-code": "vagy olvassa be a QR-kódot.",
|
||||||
|
"auto-accept-instructions-1": "Aktiválás",
|
||||||
|
"auto-accept-instructions-2": "hogy automatikusan elfogadja az adott eszközről küldött összes fájlt.",
|
||||||
|
"leave": "Kilépés",
|
||||||
|
"decline": "Elutasítás",
|
||||||
|
"download": "Letöltés",
|
||||||
|
"send": "Küldés",
|
||||||
|
"message_title": "Írja be a küldeni kívánt üzenetet",
|
||||||
|
"message_placeholder": "Szöveg",
|
||||||
|
"copy": "Másolás",
|
||||||
|
"base64-title-files": "Fájlok megosztása",
|
||||||
|
"base64-title-text": "Szöveg megosztása",
|
||||||
|
"enter-key-from-another-device": "Ide írja be a kódot egy másik eszközről.",
|
||||||
|
"hr-or": "VAGY",
|
||||||
|
"base64-text": "szöveg",
|
||||||
|
"base64-tap-to-paste": "Koppintson ide a {{type}} megosztásához",
|
||||||
|
"base64-paste-to-send": "Illessze be a ide a vágólapja tartalmát a {{type}} megosztásához",
|
||||||
|
"base64-files": "fájlok",
|
||||||
|
"file-other-description-image": "és egy másik kép",
|
||||||
|
"file-other-description-file": "és egy másik fájl",
|
||||||
|
"file-other-description-image-plural": "és {{count}} másik kép",
|
||||||
|
"file-other-description-file-plural": "és {{count}} másik fájl",
|
||||||
|
"title-image": "Kép",
|
||||||
|
"title-file": "Fájl",
|
||||||
|
"title-image-plural": "Képek",
|
||||||
|
"title-file-plural": "Fájlok",
|
||||||
|
"receive-title": "{{descriptor}} érkezett",
|
||||||
|
"download-again": "Letöltés újra",
|
||||||
|
"language-selector-title": "Nyelv beállítása",
|
||||||
|
"system-language": "Rendszer nyelve",
|
||||||
|
"approve": "jóváhagyás",
|
||||||
|
"share-text-title": "Szöveges üzenet megosztása",
|
||||||
|
"share-text-subtitle": "Üzenet szerkesztése küldés előtt:",
|
||||||
|
"share-text-checkbox": "Mindig mutassa ezt a párbeszédablakot üzenet megosztásakor",
|
||||||
|
"close-toast_title": "Értesítés bezárása",
|
||||||
|
"public-room-qr-code_title": "Kattintson a szoba linkjének másolásához",
|
||||||
|
"pair-devices-qr-code_title": "Kattintson az eszköz párosításához való link másolásához"
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"online-requirement-pairing": "Online kell lennie készülékek párosításához",
|
||||||
|
"link-received": "Link érkezett tőle: {{name}} - Kattintson a megnyitáshoz",
|
||||||
|
"selected-peer-left": "A kiválasztott partner kilépett",
|
||||||
|
"display-name-changed-permanently": "A megjelenített neved véglegesen meg lett változtatva",
|
||||||
|
"download-successful": "{{descriptor}} letöltve",
|
||||||
|
"pairing-tabs-error": "Két böngészőlap párosítása lehetetlen",
|
||||||
|
"display-name-random-again": "A megjelenített neved véletlenszerűen újra lett generálva",
|
||||||
|
"pairing-key-invalid": "Érvénytelen kulcs",
|
||||||
|
"pairing-cleared": "Minden eszköz párosítása megszüntetve",
|
||||||
|
"public-room-id-invalid": "Érvénytelen szobakód",
|
||||||
|
"copied-to-clipboard": "Vágólapra másolva",
|
||||||
|
"copied-to-clipboard-error": "Másolás nem lehetséges. Manuális másolás szükséges.",
|
||||||
|
"text-content-incorrect": "A szöveg tartalma helytelen",
|
||||||
|
"file-content-incorrect": "A fájl tartalma helytelen",
|
||||||
|
"pair-url-copied-to-clipboard": "Az eszköz párosítására való link másolva a vágólapra",
|
||||||
|
"notifications-enabled": "Értesítések engedélyezve",
|
||||||
|
"request-title": "{{name}} szeretne küldeni: {{count}} {{descriptor}}",
|
||||||
|
"copied-text-error": "A vágólapra való írás nem sikerült. Manuális másolás szükséges.",
|
||||||
|
"click-to-download": "Kattintson a letöltéshez",
|
||||||
|
"click-to-show": "Kattintson a megjelenítéshez",
|
||||||
|
"connected": "Csatlakoztatva",
|
||||||
|
"online": "Újra online lett",
|
||||||
|
"connecting": "Csatlakozás…",
|
||||||
|
"files-incorrect": "A fájlok helytelenek",
|
||||||
|
"file-transfer-completed": "A fájlok küldése sikeres",
|
||||||
|
"message-transfer-completed": "Üzenet küldése sikeres",
|
||||||
|
"unfinished-transfers-warning": "Befejezetlen átvitelek folyamatban. Biztosan be akarja zárni a PairDrop-ot?",
|
||||||
|
"pairing-success": "Eszközök párosítva",
|
||||||
|
"pairing-not-persistent": "A párosított eszközök nem maradandóak",
|
||||||
|
"pairing-key-invalidated": "{{key}} kulcs érvénytelenítve",
|
||||||
|
"public-room-left": "{{publicRoomId}} szoba elhagyva",
|
||||||
|
"online-requirement-public-room": "Online kell lennie szoba készítéséhez",
|
||||||
|
"ios-memory-limit": "Egyszerre csak 200 MB-os fájlátvitel lehetséges iOS-re való küldéskor",
|
||||||
|
"room-url-copied-to-clipboard": "A nyilvános szoba linkje másolva a vágólapra",
|
||||||
|
"clipboard-content-incorrect": "A vágólap tartalma helytelen",
|
||||||
|
"copied-text": "Szöveg másolva a vágólapra",
|
||||||
|
"message-received": "Üzenet érkezett tőle: {{name}} - Kattintson a másoláshoz",
|
||||||
|
"notifications-permissions-error": "Az értesítések engedélye letiltásra került, mivel a felhasználó többször is elutasította az engedélykérést. Ez visszaállítható az oldalinformációkban, amely az URL-sáv melletti lakat ikonra kattintva érhet el.",
|
||||||
|
"offline": "Ön offline",
|
||||||
|
"rate-limit-join-key": "Az átviteli sebességhatár elérte a határt. Várjon 10 másodpercet, és próbálja meg újra.",
|
||||||
|
"display-name-changed-temporarily": "A megjelenített neved meg lett változtatva csak erre a munkamenetre"
|
||||||
|
},
|
||||||
|
"about": {
|
||||||
|
"close-about_aria-label": "A PairDrop-ról bezárása",
|
||||||
|
"github_title": "PairDrop a GitHub-on",
|
||||||
|
"buy-me-a-coffee_title": "Vegyél nekem egy kávét!",
|
||||||
|
"mastodon_title": "Írj a PairDrop-ról Mastodon-on",
|
||||||
|
"bluesky_title": "Kövess minket a BlueSky-on",
|
||||||
|
"faq_title": "Gyakran ismételt kérdések",
|
||||||
|
"claim": "Az eszközök közötti fájlátvitel legegyszerűbb módja",
|
||||||
|
"tweet_title": "Tweetelj a PairDrop-ról",
|
||||||
|
"custom_title": "Kövess minket",
|
||||||
|
"privacypolicy_title": "Nyisd meg az adatvédelmi szabályzatunkat"
|
||||||
|
},
|
||||||
|
"document-titles": {
|
||||||
|
"file-received": "Fájl érkezett",
|
||||||
|
"file-received-plural": "{{count}} fájl érkezett",
|
||||||
|
"image-transfer-requested": "Képátvitel kérelmezve",
|
||||||
|
"message-received": "Üzenet érkezett",
|
||||||
|
"message-received-plural": "{{count}} üzenet érkezett",
|
||||||
|
"file-transfer-requested": "Fájlátvitel kérelmezve"
|
||||||
|
},
|
||||||
|
"peer-ui": {
|
||||||
|
"preparing": "Előkészítés…",
|
||||||
|
"click-to-send-share-mode": "Kattintson a {{descriptor}} küldéséhez",
|
||||||
|
"waiting": "Várakozás…",
|
||||||
|
"processing": "Feldolgozás…",
|
||||||
|
"transferring": "Átvitel…",
|
||||||
|
"click-to-send": "Kattintson fájlok küldéséhez vagy kattintson jobb gombbal üzenet küldéséhez",
|
||||||
|
"connection-hash": "A végpontok közötti titkosítás biztonságának ellenőrzéséhez hasonlítsa össze ezt a biztonsági számot mindkét eszközön"
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
"display-name_title": "Edit nama perangkat Anda scr. permanen",
|
"display-name_title": "Edit nama perangkat Anda scr. permanen",
|
||||||
"traffic": "Lalu lintas",
|
"traffic": "Lalu lintas",
|
||||||
"paired-devices_title": "Anda dapat ditemukan oleh perangkat yang dipasangkan setiap saat tergantung pada jaringan.",
|
"paired-devices_title": "Anda dapat ditemukan oleh perangkat yang dipasangkan setiap saat tergantung pada jaringan.",
|
||||||
"public-room-devices": "dalam room {{roomId}}",
|
"public-room-devices": "di dalam ruang {{roomId}}",
|
||||||
"paired-devices": "pada prngkt. yg. dipasangkan",
|
"paired-devices": "pada prngkt. yg. dipasangkan",
|
||||||
"on-this-network": "pada jaringan ini",
|
"on-this-network": "pada jaringan ini",
|
||||||
"routed": "diarahkan melalui server",
|
"routed": "diarahkan melalui server",
|
||||||
|
@ -20,15 +20,15 @@
|
||||||
"message-received": "Pesan diterima dari {{name}} - Klik untuk menyalin",
|
"message-received": "Pesan diterima dari {{name}} - Klik untuk menyalin",
|
||||||
"rate-limit-join-key": "Batasan tercapai. Tunggu 10 detik dan coba lagi.",
|
"rate-limit-join-key": "Batasan tercapai. Tunggu 10 detik dan coba lagi.",
|
||||||
"connecting": "Menghubungkan…",
|
"connecting": "Menghubungkan…",
|
||||||
"pairing-key-invalidated": "Kunci {{key}} tidak valid",
|
"pairing-key-invalidated": "Kunci {{key}} takvalid",
|
||||||
"pairing-key-invalid": "Kunci tidak valid",
|
"pairing-key-invalid": "Kunci takvalid",
|
||||||
"connected": "Tersambung",
|
"connected": "Tersambung",
|
||||||
"pairing-not-persistent": "Perangkat dipasangkan tidak akan bertahan lama",
|
"pairing-not-persistent": "Perangkat dipasangkan tidak akan bertahan lama",
|
||||||
"text-content-incorrect": "Isi teks keliru",
|
"text-content-incorrect": "Isi teks keliru",
|
||||||
"message-transfer-completed": "Transfer pesan selesai",
|
"message-transfer-completed": "Transfer pesan selesai",
|
||||||
"file-transfer-completed": "Transfer file selesai",
|
"file-transfer-completed": "Transfer berkas selesai",
|
||||||
"file-content-incorrect": "Isi file keliru",
|
"file-content-incorrect": "Isi berkas keliru",
|
||||||
"files-incorrect": "File tidak benar",
|
"files-incorrect": "Berkas tidak benar",
|
||||||
"selected-peer-left": "Rekan terpilih keluar",
|
"selected-peer-left": "Rekan terpilih keluar",
|
||||||
"link-received": "Tautan diterima dari {{name}} - Klik untuk membuka",
|
"link-received": "Tautan diterima dari {{name}} - Klik untuk membuka",
|
||||||
"online": "Anda kembali online",
|
"online": "Anda kembali online",
|
||||||
|
@ -43,17 +43,17 @@
|
||||||
"copied-to-clipboard": "Disalin ke papan klip",
|
"copied-to-clipboard": "Disalin ke papan klip",
|
||||||
"offline": "Anda sedang offline",
|
"offline": "Anda sedang offline",
|
||||||
"pairing-tabs-error": "Memasangkan dua tab browser web tidak mungkin dilakukan",
|
"pairing-tabs-error": "Memasangkan dua tab browser web tidak mungkin dilakukan",
|
||||||
"public-room-id-invalid": "Room ID tidak valid",
|
"public-room-id-invalid": "ID Ruang takvalid",
|
||||||
"click-to-download": "Klik untuk mengunduh",
|
"click-to-download": "Klik untuk mengunduh",
|
||||||
"pairing-cleared": "Semua Perangkat dilepaskan",
|
"pairing-cleared": "Semua Perangkat dilepaskan",
|
||||||
"notifications-enabled": "Notifikasi diaktifkan",
|
"notifications-enabled": "Notifikasi diaktifkan",
|
||||||
"online-requirement-pairing": "Anda harus online untuk memasangkan perangkat",
|
"online-requirement-pairing": "Anda harus online untuk memasangkan perangkat",
|
||||||
"ios-memory-limit": "Mengirim file ke iOS hanya dapat dilakukan hingga 200 MB sekaligus",
|
"ios-memory-limit": "Mengirim betkas ke iOS hanya dapat dilakukan hingga 200 MB sekaligus",
|
||||||
"online-requirement-public-room": "Anda harus online untuk membuat ruang publik",
|
"online-requirement-public-room": "Anda harus terhubung ke jaringan internet untuk membuat ruang publik",
|
||||||
"copied-text-error": "Menyalin ke papan klip gagal. Salinlah secara manual!",
|
"copied-text-error": "Menyalin ke papan klip gagal. Salinlah secara manual!",
|
||||||
"download-successful": "{{descriptor}} diunduh",
|
"download-successful": "{{descriptor}} diunduh",
|
||||||
"click-to-show": "Klik untuk menampilkan",
|
"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 bar 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 bilah URL.",
|
||||||
"pair-url-copied-to-clipboard": "Tautan untuk memasangkan perangkat ini disalin ke papan klip",
|
"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"
|
"room-url-copied-to-clipboard": "Tautan ke ruang publik disalin ke papan klip"
|
||||||
},
|
},
|
||||||
|
@ -74,42 +74,42 @@
|
||||||
"expand_title": "Perluas baris tombol header"
|
"expand_title": "Perluas baris tombol header"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"x-instructions_mobile": "Ketuk untuk mengirim file atau ketuk lama untuk mengirim pesan",
|
"x-instructions_mobile": "Ketuk untuk mengirim berkas atau ketuk lama untuk mengirim pesan",
|
||||||
"x-instructions-share-mode_desktop": "Klik untuk mengirim",
|
"x-instructions-share-mode_desktop": "Klik untuk mengirim {{descriptor}}",
|
||||||
"activate-share-mode-and-other-files-plural": "dan {{count}} file lainnya",
|
"activate-share-mode-and-other-files-plural": "dan {{count}} berkas lainnya",
|
||||||
"x-instructions-share-mode_mobile": "Ketuk untuk mengirim",
|
"x-instructions-share-mode_mobile": "Ketuk untuk mengirim {{descriptor}}",
|
||||||
"activate-share-mode-base": "Buka PairDrop di perangkat lain untuk berkirim",
|
"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",
|
"no-peers-subtitle": "Pasangkan perangkat atau masuk ke ruang publik agar dapat terdeteksi di jaringan lain",
|
||||||
"activate-share-mode-shared-text": "teks bersama",
|
"activate-share-mode-shared-text": "teks bersama",
|
||||||
"x-instructions_desktop": "Klik untuk mengirim file atau klik kanan untuk mengirim pesan",
|
"x-instructions_desktop": "Klik untuk mengirim berkas atau klik kanan untuk mengirim pesan",
|
||||||
"no-peers-title": "Buka PairDrop di perangkat lain untuk berkirim file",
|
"no-peers-title": "Buka PairDrop di perangkat lain untuk berkirim berkas",
|
||||||
"x-instructions_data-drop-peer": "Lepaskan untuk mengirim ke rekan",
|
"x-instructions_data-drop-peer": "Lepaskan untuk mengirim ke rekan",
|
||||||
"x-instructions_data-drop-bg": "Lepaskan untuk memilih penerima",
|
"x-instructions_data-drop-bg": "Lepaskan untuk memilih penerima",
|
||||||
"no-peers_data-drop-bg": "Lepaskan untuk memilih penerima",
|
"no-peers_data-drop-bg": "Lepaskan untuk memilih penerima",
|
||||||
"activate-share-mode-and-other-file": "dan 1 file lainnya",
|
"activate-share-mode-and-other-file": "dan 1 berkas lainnya",
|
||||||
"activate-share-mode-shared-file": "file yang dibagikan",
|
"activate-share-mode-shared-file": "berkas yang dibagikan",
|
||||||
"activate-share-mode-shared-files-plural": "{{count}} file yang dibagikan",
|
"activate-share-mode-shared-files-plural": "sebanyak {{count}} berkas dibagikan",
|
||||||
"webrtc-requirement": "Untuk menggunakan instance PairDrop ini, WebRTC harus diaktifkan!"
|
"webrtc-requirement": "Untuk menggunakan instance PairDrop ini, WebRTC harus diaktifkan!"
|
||||||
},
|
},
|
||||||
"peer-ui": {
|
"peer-ui": {
|
||||||
"processing": "Memproses…",
|
"processing": "Memproses…",
|
||||||
"click-to-send-share-mode": "Klik untuk mengirim {{descriptor}}",
|
"click-to-send-share-mode": "Klik untuk mengirim {{descriptor}}",
|
||||||
"click-to-send": "Klik untuk mengirim file atau klik kanan untuk mengirim pesan",
|
"click-to-send": "Klik untuk mengirim berkas atau klik kanan untuk mengirim pesan",
|
||||||
"waiting": "Menunggu…",
|
"waiting": "Menunggu…",
|
||||||
"connection-hash": "Untuk memverifikasi keamanan enkripsi end-to-end, bandingkan nomor keamanan ini pada kedua perangkat",
|
"connection-hash": "Untuk memverifikasi keamanan enkripsi end-to-end, bandingkan nomor keamanan ini pada kedua perangkat",
|
||||||
"preparing": "Menyiapkan…",
|
"preparing": "Menyiapkan…",
|
||||||
"transferring": "Mentransfer…"
|
"transferring": "Mentransfer…"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"base64-paste-to-send": "Tempel di sini untuk mengirim {{type}}",
|
"base64-paste-to-send": "Tempel salinan di sini untuk mengirim {{type}}",
|
||||||
"auto-accept-instructions-2": "untuk secara otomatis menerima semua file yang dikirim dari perangkat tersebut.",
|
"auto-accept-instructions-2": "untuk menerima semua berkas yang dikirim dari perangkat tersebut secara otomatis.",
|
||||||
"receive-text-title": "Pesan Diterima",
|
"receive-text-title": "Pesan Diterima",
|
||||||
"edit-paired-devices-title": "Edit Perangkat yg. Dipasangkan",
|
"edit-paired-devices-title": "Edit Perangkat yg. Dipasangkan",
|
||||||
"cancel": "Batal",
|
"cancel": "Batal",
|
||||||
"auto-accept-instructions-1": "Aktifkan",
|
"auto-accept-instructions-1": "Aktifkan",
|
||||||
"pair-devices-title": "Pasangkan Perangkat Scr. Permanen",
|
"pair-devices-title": "Pasangkan Perangkat Scr. Permanen",
|
||||||
"download": "Unduh",
|
"download": "Unduh",
|
||||||
"title-file": "File",
|
"title-file": "Berkas",
|
||||||
"base64-processing": "Memproses…",
|
"base64-processing": "Memproses…",
|
||||||
"decline": "Tolak",
|
"decline": "Tolak",
|
||||||
"receive-title": "{{descriptor}} Diterima",
|
"receive-title": "{{descriptor}} Diterima",
|
||||||
|
@ -122,14 +122,14 @@
|
||||||
"copy": "Salin",
|
"copy": "Salin",
|
||||||
"file-other-description-image": "dan 1 gambar lainnya",
|
"file-other-description-image": "dan 1 gambar lainnya",
|
||||||
"temporary-public-room-title": "Ruang Publik Sementara",
|
"temporary-public-room-title": "Ruang Publik Sementara",
|
||||||
"base64-files": "file",
|
"base64-files": "berkas",
|
||||||
"has-sent": "telah mengirim:",
|
"has-sent": "telah mengirim:",
|
||||||
"file-other-description-file": "dan 1 file lainnya",
|
"file-other-description-file": "dan 1 berkas lainnya",
|
||||||
"close": "Tutup",
|
"close": "Tutup",
|
||||||
"system-language": "Bahasa Sistem",
|
"system-language": "Bahasa Sistem",
|
||||||
"unpair": "Lepas",
|
"unpair": "Lepas",
|
||||||
"title-image": "Gambar",
|
"title-image": "Gambar",
|
||||||
"file-other-description-file-plural": "dan {{count}} file lainnya",
|
"file-other-description-file-plural": "dan {{count}} berkas lainnya",
|
||||||
"would-like-to-share": "ingin berbagi",
|
"would-like-to-share": "ingin berbagi",
|
||||||
"send-message-to": "Ke:",
|
"send-message-to": "Ke:",
|
||||||
"language-selector-title": "Pilih Bahasa",
|
"language-selector-title": "Pilih Bahasa",
|
||||||
|
@ -142,34 +142,43 @@
|
||||||
"paired-devices-wrapper_data-empty": "Tak ada perangkat yg. dipasangkan.",
|
"paired-devices-wrapper_data-empty": "Tak ada perangkat yg. dipasangkan.",
|
||||||
"enter-key-from-another-device": "Masukkan kunci dari perangkat lain di sini.",
|
"enter-key-from-another-device": "Masukkan kunci dari perangkat lain di sini.",
|
||||||
"share": "Bagikan",
|
"share": "Bagikan",
|
||||||
"auto-accept": "terima-otomatis",
|
"auto-accept": "terima scr. otomatis",
|
||||||
"title-file-plural": "File",
|
"title-file-plural": "Berkas",
|
||||||
"send-message-title": "Kirim Pesan",
|
"send-message-title": "Kirim Pesan",
|
||||||
"input-room-id-on-another-device": "Masukkan room ID ini pada perangkat lain",
|
"input-room-id-on-another-device": "Masukkan ID ruang ini pada perangkat lain",
|
||||||
"file-other-description-image-plural": "dan {{count}} gambar lainnya",
|
"file-other-description-image-plural": "dan {{count}} gambar lainnya",
|
||||||
"enter-room-id-from-another-device": "Masukkan room ID dari perangkat lain untuk bergabung dengan room.",
|
"enter-room-id-from-another-device": "Masukkan ID ruang dari perangkat lain untuk bergabung.",
|
||||||
"message_title": "Masukkan pesan untuk dikirim",
|
"message_title": "Masukkan pesan untuk dikirim",
|
||||||
"pair-devices-qr-code_title": "Klik untuk menyalin tautan untuk memasangkan perangkat ini",
|
"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",
|
"public-room-qr-code_title": "Klik untuk menyalin tautan ke ruang publik",
|
||||||
"base64-title-files": "Bagikan File",
|
"base64-title-files": "Bagikan Berkas",
|
||||||
"base64-title-text": "Bagikan Teks",
|
"base64-title-text": "Bagikan Teks",
|
||||||
"message_placeholder": "Teks",
|
"message_placeholder": "Teks",
|
||||||
"paired-device-removed": "Perangkat yang dipasangkan telah dihapus."
|
"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"
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"claim": "Cara termudah untuk mentransfer file lintas perangkat",
|
"claim": "Cara termudah untuk mentransfer berkas lintas perangkat",
|
||||||
"tweet_title": "Tweet tentang PairDrop",
|
"tweet_title": "Tweet tentang PairDrop",
|
||||||
"close-about_aria-label": "Tutup Tentang PairDrop",
|
"close-about_aria-label": "Tutup Tentang PairDrop",
|
||||||
"buy-me-a-coffee_title": "Traktir aku kopi!",
|
"buy-me-a-coffee_title": "Traktir aku kopi!",
|
||||||
"github_title": "PairDrop di GitHub",
|
"github_title": "PairDrop di GitHub",
|
||||||
"faq_title": "Pertanyaan yang sering diajukan"
|
"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"
|
||||||
},
|
},
|
||||||
"document-titles": {
|
"document-titles": {
|
||||||
"file-transfer-requested": "Permintaan Transfer File",
|
"file-transfer-requested": "Permintaan Pentransferan Berkas",
|
||||||
"message-received-plural": "{{count}} Pesan Diterima",
|
"message-received-plural": "{{count}} Pesan Diterima",
|
||||||
"message-received": "Pesan Diterima",
|
"message-received": "Pesan Diterima",
|
||||||
"file-received": "File Diterima",
|
"file-received": "Berkas Diterima",
|
||||||
"file-received-plural": "{{count}} File Diterima",
|
"file-received-plural": "Sebanyak {{count}} Berkas Diterima",
|
||||||
"image-transfer-requested": "Permintaan Transfer Gambar"
|
"image-transfer-requested": "Permintaan Transfer Gambar"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
"display-name_data-placeholder": "Caricamento…",
|
"display-name_data-placeholder": "Caricamento…",
|
||||||
"display-name_title": "Modifica il nome del tuo dispositivo permanentemente",
|
"display-name_title": "Modifica il nome del tuo dispositivo permanentemente",
|
||||||
"traffic": "Il traffico è",
|
"traffic": "Il traffico è",
|
||||||
"paired-devices_title": "Puoi essere rilevato dai dispositivi abbinati in ogni momento, indipendentemente dalla rete.",
|
"paired-devices_title": "Puoi essere rilevato dai dispositivi associati in ogni momento, indipendentemente dalla rete.",
|
||||||
"public-room-devices": "nella stanza {{roomId}}",
|
"public-room-devices": "nella stanza {{roomId}}",
|
||||||
"paired-devices": "da dispositivi abbinati",
|
"paired-devices": "da dispositivi associati",
|
||||||
"on-this-network": "su questa rete",
|
"on-this-network": "su questa rete",
|
||||||
"routed": "instradato attraverso il server",
|
"routed": "instradato attraverso il server",
|
||||||
"discovery": "Puoi essere rilevato:",
|
"discovery": "Puoi essere rilevato:",
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
"known-as": "Sei visibile come:"
|
"known-as": "Sei visibile come:"
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
"cancel-share-mode": "Fatto",
|
"cancel-share-mode": "Annulla",
|
||||||
"theme-auto_title": "Adatta il tema al sistema automaticamente",
|
"theme-auto_title": "Adatta il tema al sistema automaticamente",
|
||||||
"install_title": "Installa PairDrop",
|
"install_title": "Installa PairDrop",
|
||||||
"theme-dark_title": "Usa sempre il tema scuro",
|
"theme-dark_title": "Usa sempre il tema scuro",
|
||||||
|
@ -25,14 +25,16 @@
|
||||||
"edit-paired-devices_title": "Modifica i dispositivi abbinati",
|
"edit-paired-devices_title": "Modifica i dispositivi abbinati",
|
||||||
"language-selector_title": "Imposta Lingua",
|
"language-selector_title": "Imposta Lingua",
|
||||||
"about_title": "Informazioni su PairDrop",
|
"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"
|
"theme-light_title": "Usa sempre il tema chiaro",
|
||||||
|
"edit-share-mode": "Modifica",
|
||||||
|
"expand_title": "Espandi la riga dei pulsanti nell'intestazione"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"x-instructions_mobile": "Tocca per inviare file o tocco prolungato per inviare un messaggio",
|
"x-instructions_mobile": "Tocca per inviare file o tocco prolungato per inviare un messaggio",
|
||||||
"x-instructions-share-mode_desktop": "Clicca per inviare",
|
"x-instructions-share-mode_desktop": "Clicca per inviare {{descriptor}}",
|
||||||
"activate-share-mode-and-other-files-plural": "e altri {{count}} files",
|
"activate-share-mode-and-other-files-plural": "e altri {{count}} files",
|
||||||
"x-instructions-share-mode_mobile": "Tocca per inviare",
|
"x-instructions-share-mode_mobile": "Tocca per inviare {{descriptor}}",
|
||||||
"activate-share-mode-base": "Apri PairDrop su altri dispositivi per inviare",
|
"activate-share-mode-base": "Apri PairDrop su altri dispositivi per inviare",
|
||||||
"no-peers-subtitle": "Abbina dispositivi o entra in una stanza pubblica per essere rilevabile su altre reti",
|
"no-peers-subtitle": "Abbina dispositivi o entra in una stanza pubblica per essere rilevabile su altre reti",
|
||||||
"activate-share-mode-shared-text": "testo condiviso",
|
"activate-share-mode-shared-text": "testo condiviso",
|
||||||
|
@ -41,23 +43,26 @@
|
||||||
"x-instructions_data-drop-peer": "Rilascia per inviare al peer",
|
"x-instructions_data-drop-peer": "Rilascia per inviare al peer",
|
||||||
"x-instructions_data-drop-bg": "Rilascia per selezionare il destinatario",
|
"x-instructions_data-drop-bg": "Rilascia per selezionare il destinatario",
|
||||||
"no-peers_data-drop-bg": "Rilascia per selezionare il destinatario",
|
"no-peers_data-drop-bg": "Rilascia per selezionare il destinatario",
|
||||||
"webrtc-requirement": "Per usare questa istanza di PairDrop, devi attivare WebRTC!"
|
"webrtc-requirement": "Per usare questa istanza di PairDrop, devi attivare WebRTC!",
|
||||||
|
"activate-share-mode-shared-file": "file condiviso",
|
||||||
|
"activate-share-mode-shared-files-plural": "{{count}} files condivisi",
|
||||||
|
"activate-share-mode-and-other-file": "ed 1 altro file"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"auto-accept-instructions-2": "per accettare automaticamente tutti i files inviati da quel dispositivo.",
|
"auto-accept-instructions-2": "per accettare automaticamente tutti i files inviati da quel dispositivo.",
|
||||||
"edit-paired-devices-title": "Modifica Dispositivi Abbinati",
|
"edit-paired-devices-title": "Modifica Dispositivi Associati",
|
||||||
"cancel": "Annulla",
|
"cancel": "Annulla",
|
||||||
"auto-accept-instructions-1": "Attiva",
|
"auto-accept-instructions-1": "Attiva",
|
||||||
"pair-devices-title": "Abbina Dispositivi Permanentemente",
|
"pair-devices-title": "Associa Dispositivi Permanentemente",
|
||||||
"temporary-public-room-title": "Stanza Pubblica Temporanea",
|
"temporary-public-room-title": "Stanza Pubblica Temporanea",
|
||||||
"close": "Chiudi",
|
"close": "Chiudi",
|
||||||
"unpair": "Dissocia",
|
"unpair": "Dissocia",
|
||||||
"pair": "Abbina",
|
"pair": "Associa",
|
||||||
"scan-qr-code": "o scannerizza il codice QR.",
|
"scan-qr-code": "o scannerizza il codice QR.",
|
||||||
"input-key-on-this-device": "Inserisci questo codice su un altro dispositivo",
|
"input-key-on-this-device": "Inserisci questo codice su un altro dispositivo",
|
||||||
"paired-devices-wrapper_data-empty": "Nessun dispositivo abbinato.",
|
"paired-devices-wrapper_data-empty": "Nessun dispositivo associato.",
|
||||||
"enter-key-from-another-device": "Inserisci il codice dell'altro dispositivo qui.",
|
"enter-key-from-another-device": "Inserisci il codice dell'altro dispositivo qui.",
|
||||||
"auto-accept": "accetta-automaticamente",
|
"auto-accept": "accetta automaticamente",
|
||||||
"input-room-id-on-another-device": "Inserisci l'ID di questa stanza su un altro dispositivo",
|
"input-room-id-on-another-device": "Inserisci l'ID di questa stanza su un altro dispositivo",
|
||||||
"enter-room-id-from-another-device": "Inserisci l'ID stanza da un altro dispositivo per accedere alla stanza.",
|
"enter-room-id-from-another-device": "Inserisci l'ID stanza da un altro dispositivo per accedere alla stanza.",
|
||||||
"base64-paste-to-send": "Incolla qui per inviare {{type}}",
|
"base64-paste-to-send": "Incolla qui per inviare {{type}}",
|
||||||
|
@ -71,7 +76,7 @@
|
||||||
"join": "Unisciti",
|
"join": "Unisciti",
|
||||||
"title-image-plural": "Immagini",
|
"title-image-plural": "Immagini",
|
||||||
"send": "Invia",
|
"send": "Invia",
|
||||||
"base64-tap-to-paste": "Tocca qui per incollare {{type}}",
|
"base64-tap-to-paste": "Tocca qui per condividere {{type}}",
|
||||||
"base64-text": "testo",
|
"base64-text": "testo",
|
||||||
"copy": "Copia",
|
"copy": "Copia",
|
||||||
"file-other-description-image": "e 1 altra immagine",
|
"file-other-description-image": "e 1 altra immagine",
|
||||||
|
@ -82,7 +87,7 @@
|
||||||
"title-image": "Immagine",
|
"title-image": "Immagine",
|
||||||
"file-other-description-file-plural": "e altri {{count}} files",
|
"file-other-description-file-plural": "e altri {{count}} files",
|
||||||
"would-like-to-share": "vorrebbe condividere",
|
"would-like-to-share": "vorrebbe condividere",
|
||||||
"send-message-to": "Invia un messaggio a",
|
"send-message-to": "A:",
|
||||||
"language-selector-title": "Imposta Lingua",
|
"language-selector-title": "Imposta Lingua",
|
||||||
"hr-or": "OPPURE",
|
"hr-or": "OPPURE",
|
||||||
"download-again": "Scarica ancora",
|
"download-again": "Scarica ancora",
|
||||||
|
@ -92,11 +97,20 @@
|
||||||
"send-message-title": "Invia Messaggio",
|
"send-message-title": "Invia Messaggio",
|
||||||
"file-other-description-image-plural": "e {{count}} altre immagini",
|
"file-other-description-image-plural": "e {{count}} altre immagini",
|
||||||
"message_title": "Inserire messaggio da inviare",
|
"message_title": "Inserire messaggio da inviare",
|
||||||
"pair-devices-qr-code_title": "Clicca per copiare il link di abbinamento di questo dispositivo",
|
"pair-devices-qr-code_title": "Clicca per copiare il link di associazione a questo dispositivo",
|
||||||
"public-room-qr-code_title": "Clicca per copirare il link della stanza pubblica"
|
"public-room-qr-code_title": "Clicca per copirare il link della stanza pubblica",
|
||||||
|
"message_placeholder": "Testo",
|
||||||
|
"paired-device-removed": "Il dispositivo associato è stato rimosso.",
|
||||||
|
"base64-title-files": "Condividi Files",
|
||||||
|
"base64-title-text": "Condividi Testo",
|
||||||
|
"share-text-subtitle": "Modifica messaggio prima dell'invio:",
|
||||||
|
"share-text-checkbox": "Mostra sempre questa casella di dialogo quando si condivide del testo",
|
||||||
|
"approve": "accetta",
|
||||||
|
"share-text-title": "Condividi Messaggio di Testo",
|
||||||
|
"close-toast_title": "Chiudi notifica"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"request-title": "{{name}} vorrebbe trasferire {{count}} {{descriptor}}",
|
"request-title": "{{name}} vorrebbe inviare {{count}} {{descriptor}}",
|
||||||
"unfinished-transfers-warning": "Ci sono dei trasferimenti in corso. Sei sicuro di voler chiudere PairDrop?",
|
"unfinished-transfers-warning": "Ci sono dei trasferimenti in corso. Sei sicuro di voler chiudere PairDrop?",
|
||||||
"message-received": "Messaggio ricevuto da {{name}} - Clicca per copiare",
|
"message-received": "Messaggio ricevuto da {{name}} - Clicca per copiare",
|
||||||
"rate-limit-join-key": "Limite raggiunto. Aspetta 10 secondi e riprova.",
|
"rate-limit-join-key": "Limite raggiunto. Aspetta 10 secondi e riprova.",
|
||||||
|
@ -104,22 +118,22 @@
|
||||||
"pairing-key-invalidated": "Il codice {{key}} è stato invalidato",
|
"pairing-key-invalidated": "Il codice {{key}} è stato invalidato",
|
||||||
"pairing-key-invalid": "Codice non valido",
|
"pairing-key-invalid": "Codice non valido",
|
||||||
"connected": "Connesso",
|
"connected": "Connesso",
|
||||||
"pairing-not-persistent": "I dispositivi abbinati non sono persistenti",
|
"pairing-not-persistent": "I dispositivi associati non sono permanenti",
|
||||||
"text-content-incorrect": "Il contenuto testuale non è corretto",
|
"text-content-incorrect": "Il contenuto di testo è errato",
|
||||||
"message-transfer-completed": "Trasferimento del messaggio completato",
|
"message-transfer-completed": "Trasferimento del messaggio completato",
|
||||||
"file-transfer-completed": "Trasferimento file completato",
|
"file-transfer-completed": "Trasferimento file completato",
|
||||||
"file-content-incorrect": "Il contenuto del file non è corretto",
|
"file-content-incorrect": "Il contenuto del file è errato",
|
||||||
"files-incorrect": "I file non sono corretti",
|
"files-incorrect": "I file sono errati",
|
||||||
"selected-peer-left": "Peer selezionato ha abbandonato",
|
"selected-peer-left": "Il peer selezionato ha abbandonato",
|
||||||
"link-received": "Link ricevuto da {{name}} - Clicca per aprire",
|
"link-received": "Link ricevuto da {{name}} - Clicca per aprire",
|
||||||
"online": "Sei di nuovo online",
|
"online": "Sei di nuovo online",
|
||||||
"public-room-left": "Ha lasciato la stanza pubblica {{publicRoomId}}",
|
"public-room-left": "Hai abbandonato la stanza pubblica {{publicRoomId}}",
|
||||||
"copied-text": "Testo copiato negli appunti",
|
"copied-text": "Testo copiato negli appunti",
|
||||||
"display-name-random-again": "Il nome visualizzato è generato casualmente un'altra volta",
|
"display-name-random-again": "Il nome visualizzato viene di nuovo generato casualmente",
|
||||||
"display-name-changed-permanently": "Il nome visualizzato è cambiato permanentemente",
|
"display-name-changed-permanently": "Il nome visualizzato è cambiato definitivamente",
|
||||||
"copied-to-clipboard-error": "La copia non è possibile. Copia manualmente.",
|
"copied-to-clipboard-error": "La funzione di copia non è possibile. Copia manualmente.",
|
||||||
"pairing-success": "Dispositivi abbinati",
|
"pairing-success": "Dispositivi associati",
|
||||||
"clipboard-content-incorrect": "Il contenuto copiato non è corretto",
|
"clipboard-content-incorrect": "Il contenuto copiato è errato",
|
||||||
"display-name-changed-temporarily": "Il nome visualizzato è cambiato solo per questa sessione",
|
"display-name-changed-temporarily": "Il nome visualizzato è cambiato solo per questa sessione",
|
||||||
"copied-to-clipboard": "Copiato negli appunti",
|
"copied-to-clipboard": "Copiato negli appunti",
|
||||||
"offline": "Sei offline",
|
"offline": "Sei offline",
|
||||||
|
@ -128,14 +142,14 @@
|
||||||
"click-to-download": "Clicca per scaricare",
|
"click-to-download": "Clicca per scaricare",
|
||||||
"pairing-cleared": "Tutti i dispositivi sono stati dissociati",
|
"pairing-cleared": "Tutti i dispositivi sono stati dissociati",
|
||||||
"notifications-enabled": "Notifiche attivate",
|
"notifications-enabled": "Notifiche attivate",
|
||||||
"online-requirement-pairing": "Devi essere online per abbinare dispositivi",
|
"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",
|
"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",
|
"online-requirement-public-room": "Devi essere online per creare una stanza pubblica",
|
||||||
"copied-text-error": "Scrittura negli appunti fallita. Copia manualmente!",
|
"copied-text-error": "Scrittura negli appunti fallita. Copia manualmente!",
|
||||||
"download-successful": "{{descriptor}} scaricato",
|
"download-successful": "{{descriptor}} scaricato",
|
||||||
"click-to-show": "Clicca per mostrare",
|
"click-to-show": "Clicca per mostrare",
|
||||||
"notifications-permissions-error": "Il permesso all'invio delle notifiche è stato negato poiché l'utente ha ignorato varie volte le richieste di permesso. Ciò può essere ripristinato nelle \"informazioni sito\" cliccando sull'icona a forma di lucchetto vicino alla barra degli indirizzi.",
|
"notifications-permissions-error": "Il permesso all'invio delle notifiche è stato negato poiché l'utente ha ignorato varie volte le richieste di permesso. Ciò può essere ripristinato nelle \"informazioni sito\" cliccando sull'icona a forma di lucchetto vicino alla barra degli indirizzi.",
|
||||||
"pair-url-copied-to-clipboard": "Link di abbinamento copiato negli appunti",
|
"pair-url-copied-to-clipboard": "Link di associazione copiato negli appunti",
|
||||||
"room-url-copied-to-clipboard": "Link della stanza copiato negli appunti"
|
"room-url-copied-to-clipboard": "Link della stanza copiato negli appunti"
|
||||||
},
|
},
|
||||||
"peer-ui": {
|
"peer-ui": {
|
||||||
|
@ -151,14 +165,18 @@
|
||||||
"claim": "Il modo più semplice per trasferire files tra dispositivi",
|
"claim": "Il modo più semplice per trasferire files tra dispositivi",
|
||||||
"tweet_title": "Twitta riguardo PairDrop",
|
"tweet_title": "Twitta riguardo PairDrop",
|
||||||
"close-about_aria-label": "Chiudi Informazioni su PairDrop",
|
"close-about_aria-label": "Chiudi Informazioni su PairDrop",
|
||||||
"buy-me-a-coffee_title": "Comprami un caffè!",
|
"buy-me-a-coffee_title": "Offrimi un caffè!",
|
||||||
"github_title": "PairDrop su GitHub",
|
"github_title": "PairDrop su GitHub",
|
||||||
"faq_title": "Domande Frequenti"
|
"faq_title": "Domande Frequenti",
|
||||||
|
"mastodon_title": "Scrivi su Mastodon di PairDrop",
|
||||||
|
"bluesky_title": "Seguici su BlueSky",
|
||||||
|
"custom_title": "Seguici",
|
||||||
|
"privacypolicy_title": "Apri la nostra policy sulla privacy"
|
||||||
},
|
},
|
||||||
"document-titles": {
|
"document-titles": {
|
||||||
"file-transfer-requested": "Trasferimento File Richiesto",
|
"file-transfer-requested": "Trasferimento File Richiesto",
|
||||||
"image-transfer-requested": "Trasferimento Immagine Richiesto",
|
"image-transfer-requested": "Trasferimento Immagine Richiesto",
|
||||||
"message-received-plural": "{{count}} Messaggi ricevuti",
|
"message-received-plural": "{{count}} Messaggi Ricevuti",
|
||||||
"message-received": "Messaggio ricevuto",
|
"message-received": "Messaggio ricevuto",
|
||||||
"file-received": "File Ricevuto",
|
"file-received": "File Ricevuto",
|
||||||
"file-received-plural": "{{count}} Files Ricevuti"
|
"file-received-plural": "{{count}} Files Ricevuti"
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
{
|
{
|
||||||
"footer": {
|
"footer": {
|
||||||
"webrtc": "WebRTCが利用できない場合。",
|
"webrtc": "(WebRTCが無効なため)",
|
||||||
"public-room-devices_title": "このデバイスはネットワークと関係なく、このパブリックルームのデバイスにより発見される可能性があります。",
|
"public-room-devices_title": "公開ルーム内のデバイスは、別のネットワークからもアクセスできます。",
|
||||||
"display-name_data-placeholder": "読み込み中…",
|
"display-name_data-placeholder": "読み込み中…",
|
||||||
"display-name_title": "永続的なデバイス名を編集する",
|
"display-name_title": "デバイス名を変更する",
|
||||||
"traffic": "トラフィックは",
|
"traffic": "この通信は",
|
||||||
"paired-devices_title": "このデバイスはネットワークと関係なく、常にペア設定したデバイスにより発見される可能性があります。",
|
"paired-devices_title": "ペアリング済みデバイスは、別のネットワークからもアクセスできます。",
|
||||||
"public-room-devices": "ルーム{{roomId}}上",
|
"public-room-devices": "ルーム{{roomId}}",
|
||||||
"paired-devices": "ペア設定したデバイス",
|
"paired-devices": "ペアリング済みデバイス",
|
||||||
"on-this-network": "このネットワーク上",
|
"on-this-network": "このネットワーク内",
|
||||||
"routed": "サーバーを経由します",
|
"routed": "サーバーを経由します",
|
||||||
"discovery": "このデバイスは以下で発見される可能性があります:",
|
"discovery": "このデバイスを検出可能なネットワーク:",
|
||||||
"on-this-network_title": "このデバイスはこのネットワーク上の誰にでも発見される可能性があります。",
|
"on-this-network_title": "このネットワーク内のすべてのデバイスからアクセスできます。",
|
||||||
"known-as": "他のデバイスに表示される名前:"
|
"known-as": "このデバイスの名前:"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"request-title": "{{name}}は{{count}}個の{{descriptor}}を共有しようとしています",
|
"request-title": "{{name}}は{{count}}個の{{descriptor}}を共有しようとしています",
|
||||||
|
@ -20,53 +20,53 @@
|
||||||
"message-received": "{{name}}から受信したメッセージ(クリックしてコピー)",
|
"message-received": "{{name}}から受信したメッセージ(クリックしてコピー)",
|
||||||
"rate-limit-join-key": "レート制限に到達しました。10秒待ってから再度お試しください。",
|
"rate-limit-join-key": "レート制限に到達しました。10秒待ってから再度お試しください。",
|
||||||
"connecting": "接続中…",
|
"connecting": "接続中…",
|
||||||
"pairing-key-invalidated": "コード{{key}}が失効しました",
|
"pairing-key-invalidated": "コード{{key}}は無効になりました",
|
||||||
"pairing-key-invalid": "無効なコード",
|
"pairing-key-invalid": "無効なコード",
|
||||||
"connected": "接続しました",
|
"connected": "接続済み",
|
||||||
"pairing-not-persistent": "ペア設定されたデバイスは永続化されていません",
|
"pairing-not-persistent": "このデバイスとのペアリングは解除される可能性があります",
|
||||||
"text-content-incorrect": "テキストの内容が不正です",
|
"text-content-incorrect": "無効なテキスト内容です",
|
||||||
"message-transfer-completed": "メッセージの送信が完了しました",
|
"message-transfer-completed": "メッセージを送信しました",
|
||||||
"file-transfer-completed": "ファイルの転送が完了しました",
|
"file-transfer-completed": "ファイル転送が完了しました",
|
||||||
"file-content-incorrect": "ファイルの内容が不正です",
|
"file-content-incorrect": "無効なファイル内容です",
|
||||||
"files-incorrect": "ファイルが間違っています",
|
"files-incorrect": "ファイルが間違っています",
|
||||||
"selected-peer-left": "選択した相手が退出しました",
|
"selected-peer-left": "選択したデバイスが退出しました",
|
||||||
"link-received": "{{name}}から受信したリンク(クリックして開く)",
|
"link-received": "{{name}}から受信したリンク(クリックして開く)",
|
||||||
"online": "オンラインに復帰しました",
|
"online": "オンラインに復帰しました",
|
||||||
"public-room-left": "パブリックルーム{{publicRoomId}}から退出しました",
|
"public-room-left": "公開ルーム{{publicRoomId}}から退出しました",
|
||||||
"copied-text": "テキストをクリップボードにコピーしました",
|
"copied-text": "テキストをクリップボードにコピーしました",
|
||||||
"display-name-random-again": "表示名がもう一度ランダムに生成されました",
|
"display-name-random-again": "新しいデバイス名に変更されました",
|
||||||
"display-name-changed-permanently": "永続的な表示名が変更されました",
|
"display-name-changed-permanently": "デバイス名が変更されました",
|
||||||
"copied-to-clipboard-error": "コピーできませんでした。手動でコピーしてください。",
|
"copied-to-clipboard-error": "コピーできませんでした。手動でコピーしてください。",
|
||||||
"pairing-success": "デバイスがペア設定されました",
|
"pairing-success": "ペアリングしました",
|
||||||
"clipboard-content-incorrect": "クリップボードの内容が不正です",
|
"clipboard-content-incorrect": "無効なクリップボード内容です",
|
||||||
"display-name-changed-temporarily": "このセッションでの表示名が変更されました",
|
"display-name-changed-temporarily": "この接続でのみデバイス名が変更されました",
|
||||||
"copied-to-clipboard": "クリップボードにコピーしました",
|
"copied-to-clipboard": "クリップボードにコピーしました",
|
||||||
"offline": "オフラインです",
|
"offline": "オフラインです",
|
||||||
"pairing-tabs-error": "同じWebブラウザーの2つのタブをペア設定することはできません",
|
"pairing-tabs-error": "同じWebブラウザーで開いたタブ同士でペアリングすることはできません",
|
||||||
"public-room-id-invalid": "無効なルームID",
|
"public-room-id-invalid": "無効なルームID",
|
||||||
"click-to-download": "クリックしてダウンロード",
|
"click-to-download": "クリックしてダウンロード",
|
||||||
"pairing-cleared": "全てのデバイスのペア設定を解除しました",
|
"pairing-cleared": "全てのデバイスとのペアリングを解除しました",
|
||||||
"notifications-enabled": "通知が有効です",
|
"notifications-enabled": "通知が有効になりました",
|
||||||
"online-requirement-pairing": "デバイスをペア設定するにはオンラインである必要があります",
|
"online-requirement-pairing": "ペアリングするにはオンラインである必要があります",
|
||||||
"ios-memory-limit": "iOSへのファイル送信は一度に200MBまでしかできません",
|
"ios-memory-limit": "iOSへのファイル送信は一度に200MBまでしかできません",
|
||||||
"online-requirement-public-room": "パブリックルームを作成するにはオンラインである必要があります",
|
"online-requirement-public-room": "公開ルームを作成するにはオンラインである必要があります",
|
||||||
"copied-text-error": "クリップボードにコピーできませんでした。手動でコピーしてください。",
|
"copied-text-error": "クリップボードにコピーできませんでした。手動でコピーしてください。",
|
||||||
"download-successful": "{{descriptor}}をダウンロードしました",
|
"download-successful": "{{descriptor}}をダウンロードしました",
|
||||||
"click-to-show": "クリックして表示",
|
"click-to-show": "クリックして表示",
|
||||||
"notifications-permissions-error": "ユーザーが権限のプロンプトを何度か閉じたため、通知の権限がブロックされました。これは、URL バーの横にある鍵アイコンをクリックしてアクセスできるページ情報からリセットできます。",
|
"notifications-permissions-error": "通知がブロックされました。これはユーザーが通知許可を何度も拒否したためです。これをリセットするには、URLバーの隣にある鍵アイコンをクリックして、ページ情報にアクセスしてください。",
|
||||||
"pair-url-copied-to-clipboard": "このデバイスをペア設定するリンクをクリップボードにコピーしました",
|
"pair-url-copied-to-clipboard": "このデバイスとペアリングするリンクをクリップボードにコピーしました",
|
||||||
"room-url-copied-to-clipboard": "パブリックルームへのリンクをクリップボードにコピーしました"
|
"room-url-copied-to-clipboard": "公開ルームへのリンクをクリップボードにコピーしました"
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
"cancel-share-mode": "完了",
|
"cancel-share-mode": "キャンセル",
|
||||||
"theme-auto_title": "テーマをシステムの設定に自動的に合わせる",
|
"theme-auto_title": "システムのテーマに合わせる",
|
||||||
"install_title": "PairDropをインストール",
|
"install_title": "PairDropをインストール",
|
||||||
"theme-dark_title": "常にダークテーマを使用する",
|
"theme-dark_title": "常にダークテーマを使用する",
|
||||||
"pair-device_title": "あなたのデバイスを永続的にペア設定する",
|
"pair-device_title": "他のデバイスとペアリングする",
|
||||||
"join-public-room_title": "パブリックルームに一時的に参加する",
|
"join-public-room_title": "公開ルームに参加する",
|
||||||
"notification_title": "通知を有効にする",
|
"notification_title": "通知を有効にする",
|
||||||
"edit-paired-devices_title": "ペア設定したデバイスを編集する",
|
"edit-paired-devices_title": "ペアリング設定",
|
||||||
"language-selector_title": "言語を設定",
|
"language-selector_title": "言語設定",
|
||||||
"about_title": "PairDropについて",
|
"about_title": "PairDropについて",
|
||||||
"about_aria-label": "PairDropについてを開く",
|
"about_aria-label": "PairDropについてを開く",
|
||||||
"theme-light_title": "常にライトテーマを使用する",
|
"theme-light_title": "常にライトテーマを使用する",
|
||||||
|
@ -74,19 +74,19 @@
|
||||||
"expand_title": "ヘッダーボタン列を拡大する"
|
"expand_title": "ヘッダーボタン列を拡大する"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"x-instructions_mobile": "タップしてファイルを送信または長押ししてメッセージを送信します",
|
"x-instructions_mobile": "タップでファイル送信、長押しでメッセージ送信",
|
||||||
"x-instructions-share-mode_desktop": "クリックして送信",
|
"x-instructions-share-mode_desktop": "クリックして{{descriptor}}を送信",
|
||||||
"activate-share-mode-and-other-files-plural": "とその他{{count}}個のファイル",
|
"activate-share-mode-and-other-files-plural": "とその他{{count}}個のファイル",
|
||||||
"x-instructions-share-mode_mobile": "タップして送信",
|
"x-instructions-share-mode_mobile": "タップして{{descriptor}}を送信",
|
||||||
"activate-share-mode-base": "他のデバイスでPairDropを開いて送信します",
|
"activate-share-mode-base": "他のデバイスでPairDropを開いて送信します",
|
||||||
"no-peers-subtitle": "デバイスをペア設定するかパブリックルームに参加すると、他のネットワーク上からも見つけられるようになります",
|
"no-peers-subtitle": "ペアリングや公開ルームを使うと、別のネットワークにあるデバイスと共有できます",
|
||||||
"activate-share-mode-shared-text": "共有されたテキスト",
|
"activate-share-mode-shared-text": "共有されたテキスト",
|
||||||
"x-instructions_desktop": "左クリックしてファイルを送信または右クリックしてメッセージを送信します",
|
"x-instructions_desktop": "左クリックでファイル送信、右クリックでメッセージ送信",
|
||||||
"no-peers-title": "他のデバイスでPairDropを開いてファイルを送信します",
|
"no-peers-title": "ファイル共有するには他のデバイスでPairDropを開きます",
|
||||||
"x-instructions_data-drop-peer": "離すとこの相手に送信します",
|
"x-instructions_data-drop-peer": "ドロップするとこのデバイスに送信します",
|
||||||
"x-instructions_data-drop-bg": "送信したい相手の上で離してください",
|
"x-instructions_data-drop-bg": "送信したいデバイスの上でドロップしてください",
|
||||||
"no-peers_data-drop-bg": "送信したい相手の上で離してください",
|
"no-peers_data-drop-bg": "送信したいデバイスの上でドロップしてください",
|
||||||
"activate-share-mode-and-other-file": "もう1つの別のファイル",
|
"activate-share-mode-and-other-file": "とその他1個のファイル",
|
||||||
"activate-share-mode-shared-file": "共有されたファイル",
|
"activate-share-mode-shared-file": "共有されたファイル",
|
||||||
"activate-share-mode-shared-files-plural": "{{count}}個の共有されたファイル",
|
"activate-share-mode-shared-files-plural": "{{count}}個の共有されたファイル",
|
||||||
"webrtc-requirement": "このPairDropインスタンスを使用するには、WebRTCを有効にする必要があります!"
|
"webrtc-requirement": "このPairDropインスタンスを使用するには、WebRTCを有効にする必要があります!"
|
||||||
|
@ -94,20 +94,20 @@
|
||||||
"peer-ui": {
|
"peer-ui": {
|
||||||
"processing": "処理中…",
|
"processing": "処理中…",
|
||||||
"click-to-send-share-mode": "クリックして{{descriptor}}を送信",
|
"click-to-send-share-mode": "クリックして{{descriptor}}を送信",
|
||||||
"click-to-send": "クリックしてファイルを送信または右クリックしてメッセージを送信します",
|
"click-to-send": "左クリックでファイル送信、右クリックでメッセージ送信",
|
||||||
"waiting": "待機中…",
|
"waiting": "待機中…",
|
||||||
"connection-hash": "エンドツーエンド暗号化のセキュリティを確認するには、両方のデバイスのセキュリティナンバーを確認します",
|
"connection-hash": "エンドツーエンド暗号化のセキュリティを確認するには、両方のデバイスのセキュリティナンバーを確認してください",
|
||||||
"preparing": "準備中…",
|
"preparing": "準備中…",
|
||||||
"transferring": "転送中…"
|
"transferring": "転送中…"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"base64-paste-to-send": "ここをタップして{{type}}を送信",
|
"base64-paste-to-send": "ここをタップして{{type}}を送信",
|
||||||
"auto-accept-instructions-2": "そのデバイスから送信される全てのファイルを自動的に承諾します。",
|
"auto-accept-instructions-2": "」が有効なら、そのデバイスが送信したすべてのファイルを自動で受け入れます。",
|
||||||
"receive-text-title": "メッセージを受信しました",
|
"receive-text-title": "メッセージを受信",
|
||||||
"edit-paired-devices-title": "ペア設定したデバイスを編集",
|
"edit-paired-devices-title": "ペアリング設定",
|
||||||
"cancel": "キャンセル",
|
"cancel": "キャンセル",
|
||||||
"auto-accept-instructions-1": "有効化",
|
"auto-accept-instructions-1": "「",
|
||||||
"pair-devices-title": "デバイスを永続的にペア設定",
|
"pair-devices-title": "新規ペアリング",
|
||||||
"download": "ダウンロード",
|
"download": "ダウンロード",
|
||||||
"title-file": "ファイル",
|
"title-file": "ファイル",
|
||||||
"base64-processing": "処理中…",
|
"base64-processing": "処理中…",
|
||||||
|
@ -117,65 +117,65 @@
|
||||||
"join": "参加",
|
"join": "参加",
|
||||||
"title-image-plural": "複数の画像",
|
"title-image-plural": "複数の画像",
|
||||||
"send": "送信",
|
"send": "送信",
|
||||||
"base64-tap-to-paste": "ここをタップして{{type}}を貼り付け",
|
"base64-tap-to-paste": "ここをタップして{{type}}を共有",
|
||||||
"base64-text": "テキスト",
|
"base64-text": "テキスト",
|
||||||
"copy": "コピー",
|
"copy": "コピー",
|
||||||
"file-other-description-image": "と1個の他の画像",
|
"file-other-description-image": "とその他1個の画像",
|
||||||
"temporary-public-room-title": "一時的なパブリックルーム",
|
"temporary-public-room-title": "公開ルーム",
|
||||||
"base64-files": "ファイル",
|
"base64-files": "ファイル",
|
||||||
"has-sent": "が送信しました:",
|
"has-sent": "が送信:",
|
||||||
"file-other-description-file": "と1個の他のファイル",
|
"file-other-description-file": "とその他1個のファイル",
|
||||||
"close": "閉じる",
|
"close": "閉じる",
|
||||||
"system-language": "システムの言語",
|
"system-language": "システムの言語",
|
||||||
"unpair": "ペア解除",
|
"unpair": "ペアリング解除",
|
||||||
"title-image": "画像",
|
"title-image": "画像",
|
||||||
"file-other-description-file-plural": "と{{count}}個の他のファイル",
|
"file-other-description-file-plural": "とその他{{count}}個のファイル",
|
||||||
"would-like-to-share": "が以下のファイルを共有しようとしています",
|
"would-like-to-share": "がこれを共有しています",
|
||||||
"send-message-to": "このデバイスにメッセージを送信:",
|
"send-message-to": "このデバイスにメッセージを送信:",
|
||||||
"language-selector-title": "言語を設定",
|
"language-selector-title": "言語設定",
|
||||||
"pair": "ペア設定",
|
"pair": "ペアリング",
|
||||||
"hr-or": "または",
|
"hr-or": "または",
|
||||||
"scan-qr-code": "もしくはQRコードをスキャンします。",
|
"scan-qr-code": "QRコードをスキャンしてください。",
|
||||||
"input-key-on-this-device": "このキーを他のデバイスに入力する",
|
"input-key-on-this-device": "このコードを他のデバイスに入力するか",
|
||||||
"download-again": "もう一度ダウンロードする",
|
"download-again": "もう一度ダウンロードする",
|
||||||
"accept": "承諾",
|
"accept": "承諾",
|
||||||
"paired-devices-wrapper_data-empty": "ペア設定したデバイスはありません。",
|
"paired-devices-wrapper_data-empty": "ペアリングしたデバイスはありません。",
|
||||||
"enter-key-from-another-device": "他のデバイスに表示されたキーをここに入力します。",
|
"enter-key-from-another-device": "他のデバイスに表示されたコードを入力してください。",
|
||||||
"share": "共有",
|
"share": "共有",
|
||||||
"auto-accept": "自動承諾",
|
"auto-accept": "自動承諾",
|
||||||
"title-file-plural": "複数のファイル",
|
"title-file-plural": "複数のファイル",
|
||||||
"send-message-title": "メッセージを送信",
|
"send-message-title": "メッセージを送信",
|
||||||
"input-room-id-on-another-device": "このルームIDを他のデバイスに入力",
|
"input-room-id-on-another-device": "このルームIDを他のデバイスに入力するか",
|
||||||
"file-other-description-image-plural": "と{{count}}個の他の画像",
|
"file-other-description-image-plural": "とその他{{count}}個の画像",
|
||||||
"enter-room-id-from-another-device": "他のデバイスに表示された参加したいルームのIDを入力します。",
|
"enter-room-id-from-another-device": "他のデバイスに表示されたルームIDを入力してください。",
|
||||||
"message_title": "送信するメッセージを挿入",
|
"message_title": "送信するメッセージを挿入",
|
||||||
"pair-devices-qr-code_title": "クリックしてこのデバイスをペア設定するリンクをコピー",
|
"pair-devices-qr-code_title": "クリックしてこのデバイスとペアリングするリンクをコピー",
|
||||||
"public-room-qr-code_title": "クリックしてパブリックルームへのリンクをコピー",
|
"public-room-qr-code_title": "クリックして公開ルームへのリンクをコピー",
|
||||||
"paired-device-removed": "ペア設定されたデバイスが削除されました。",
|
"paired-device-removed": "ペアリングを解除しました。",
|
||||||
"message_placeholder": "テキスト",
|
"message_placeholder": "テキスト",
|
||||||
"base64-title-files": "共有されたファイル",
|
"base64-title-files": "共有されたファイル",
|
||||||
"base64-title-text": "テキストを共有",
|
"base64-title-text": "テキストを共有",
|
||||||
"approve": "承諾",
|
"approve": "OK",
|
||||||
"share-text-subtitle": "送信する前にメッセージを編集する:",
|
"share-text-subtitle": "送信する前にメッセージを編集する:",
|
||||||
"share-text-checkbox": "テキストを共有するときに常にこのダイアログを表示する",
|
"share-text-checkbox": "テキスト共有する際、毎回この画面を表示する",
|
||||||
"close-toast_title": "通知を閉じる",
|
"close-toast_title": "通知を閉じる",
|
||||||
"share-text-title": "テキストメッセージを共有します"
|
"share-text-title": "テキストメッセージを共有します"
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"claim": "デバイス間でファイルを転送する最も簡単な方法",
|
"claim": "デバイス間でかんたんファイル共有",
|
||||||
"tweet_title": "PairDropについてツイートする",
|
"tweet_title": "PairDropについてポスト",
|
||||||
"close-about_aria-label": "PairDropについてを閉じる",
|
"close-about_aria-label": "PairDropについてを閉じる",
|
||||||
"buy-me-a-coffee_title": "コーヒーをおごってください!",
|
"buy-me-a-coffee_title": "コーヒーを一杯おごってください!",
|
||||||
"github_title": "GitHubでPairDropを見る",
|
"github_title": "GitHub上のPairDropプロジェクト",
|
||||||
"faq_title": "FAQ",
|
"faq_title": "FAQ",
|
||||||
"mastodon_title": "MastodonにPairDropについて書く",
|
"mastodon_title": "MastodonでPairDropについてトゥート",
|
||||||
"bluesky_title": "BlueSkyでフォロー",
|
"bluesky_title": "BlueSkyでフォロー",
|
||||||
"custom_title": "フォロー",
|
"custom_title": "フォロー",
|
||||||
"privacypolicy_title": "プライバシーポリシーを開く"
|
"privacypolicy_title": "プライバシーポリシーを開く"
|
||||||
},
|
},
|
||||||
"document-titles": {
|
"document-titles": {
|
||||||
"file-transfer-requested": "ファイルの転送がリクエストされました",
|
"file-transfer-requested": "ファイル転送の要求があります",
|
||||||
"image-transfer-requested": "画像の転送がリクエストされました",
|
"image-transfer-requested": "画像の転送の要求があります",
|
||||||
"message-received-plural": "{{count}}個のメッセージを受信しました",
|
"message-received-plural": "{{count}}個のメッセージを受信しました",
|
||||||
"message-received": "メッセージを受信しました",
|
"message-received": "メッセージを受信しました",
|
||||||
"file-received": "ファイルを受信しました",
|
"file-received": "ファイルを受信しました",
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"notification_title": "알림 켜기",
|
||||||
|
"edit-paired-devices_title": "연결된 기기 편집하기",
|
||||||
|
"install_title": "PairDrop 설치",
|
||||||
|
"theme-dark_title": "항상 다크 테마 사용",
|
||||||
|
"about_title": "PairDrop에 대하여",
|
||||||
|
"language-selector_title": "언어 설정",
|
||||||
|
"about_aria-label": "PairDrop에 대하여 보기",
|
||||||
|
"theme-light_title": "항상 라이트 테마 사용",
|
||||||
|
"theme-auto_title": "시스템에 맞춰 테마 자동 적용",
|
||||||
|
"join-public-room_title": "일시적으로 공개 방에 참여하기",
|
||||||
|
"cancel-share-mode": "취소",
|
||||||
|
"edit-share-mode": "편집",
|
||||||
|
"pair-device_title": "영구적으로 기기 연결하기",
|
||||||
|
"expand_title": "헤더 버튼 펼치기"
|
||||||
|
},
|
||||||
|
"instructions": {
|
||||||
|
"no-peers-subtitle": "장치를 연결하거나 공개 방에 들어가 다른 네트워크에서 검색 가능하게 하세요",
|
||||||
|
"no-peers_data-drop-bg": "해제하여 수신자 선택하기",
|
||||||
|
"x-instructions_mobile": "탭하여 파일을 보내거나 길게 탭하여 메시지를 보내세요",
|
||||||
|
"x-instructions_desktop": "클릭해 파일을 보내거나 오른쪽 클릭으로 메시지를 보내세요",
|
||||||
|
"no-peers-title": "다른 장치에서 PairDrop을 열어 파일 보내기",
|
||||||
|
"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": "전송 중…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,50 +3,62 @@
|
||||||
"edit-paired-devices_title": "Rediger sammenkoblede enheter",
|
"edit-paired-devices_title": "Rediger sammenkoblede enheter",
|
||||||
"about_title": "Om PairDrop",
|
"about_title": "Om PairDrop",
|
||||||
"about_aria-label": "Åpne «Om PairDrop»",
|
"about_aria-label": "Åpne «Om PairDrop»",
|
||||||
"theme-auto_title": "Juster drakt til system",
|
"theme-auto_title": "Juster drakt til system automatisk",
|
||||||
"theme-light_title": "Alltid bruk lys drakt",
|
"theme-light_title": "Alltid bruk lys drakt",
|
||||||
"theme-dark_title": "Alltid bruk mørk drakt",
|
"theme-dark_title": "Alltid bruk mørk drakt",
|
||||||
"notification_title": "Skru på varslinger",
|
"notification_title": "Skru på varslinger",
|
||||||
"cancel-share-mode": "Ferdig",
|
"cancel-share-mode": "Ferdig",
|
||||||
"install_title": "Installer PairDrop",
|
"install_title": "Installer PairDrop",
|
||||||
"pair-device_title": "Sammenkoble enhet",
|
"pair-device_title": "Sammenkoble dine enheter permanent",
|
||||||
"language-selector_title": "Velg språk"
|
"language-selector_title": "Velg språk",
|
||||||
|
"edit-share-mode": "Rediger",
|
||||||
|
"expand_title": "Utvid overskriftknapprad",
|
||||||
|
"join-public-room_title": "Bli med i et offentlig rom midlertidig"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"webrtc": "hvis WebRTC ikke er tilgjengelig.",
|
"webrtc": "hvis WebRTC ikke er tilgjengelig.",
|
||||||
"display-name_data-placeholder": "Laster inn…",
|
"display-name_data-placeholder": "Laster inn…",
|
||||||
"display-name_title": "Rediger det vedvarende enhetsnavnet ditt",
|
"display-name_title": "Rediger ditt enhetsnavn permanent",
|
||||||
"traffic": "Trafikken",
|
"traffic": "Trafikken",
|
||||||
"on-this-network": "på dette nettverket",
|
"on-this-network": "på dette nettverket",
|
||||||
"known-as": "Du er kjent som:",
|
"known-as": "Du er kjent som:",
|
||||||
"paired-devices": "sammenkoblede enheter",
|
"paired-devices": "av sammenkoblede enheter",
|
||||||
"routed": "Sendes gjennom tjeneren"
|
"routed": "Sendes gjennom tjeneren",
|
||||||
|
"discovery": "Du kan bli oppdaget:",
|
||||||
|
"on-this-network_title": "Du kan bli oppdaget av alle på dette nettverket.",
|
||||||
|
"paired-devices_title": "Du kan alltid bli oppdaget av sammenkoblede enheter uavhengig av nettverk.",
|
||||||
|
"public-room-devices_title": "Du kan bli oppdaget av enheter i dette offentlige rommet uavhengig av nettverk.",
|
||||||
|
"public-room-devices": "i rom {{roomId}}"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"x-instructions_desktop": "Klikk for å sende filer, eller høyreklikk for å sende en melding",
|
"x-instructions_desktop": "Klikk for å sende filer, eller høyreklikk for å sende en melding",
|
||||||
"x-instructions_mobile": "Trykk for å sende filer, eller lang-trykk for å sende en melding",
|
"x-instructions_mobile": "Trykk for å sende filer, eller lang-trykk for å sende en melding",
|
||||||
"x-instructions_data-drop-bg": "Slipp for å velge mottager",
|
"x-instructions_data-drop-bg": "Slipp for å velge mottager",
|
||||||
"x-instructions-share-mode_desktop": "Klikk for å sende",
|
"x-instructions-share-mode_desktop": "Klikk for å sende {{descriptor}}",
|
||||||
"no-peers_data-drop-bg": "Slipp for å velge mottager",
|
"no-peers_data-drop-bg": "Slipp for å velge mottager",
|
||||||
"no-peers-title": "Åpne PairDrop på andre enheter for å sende filer",
|
"no-peers-title": "Åpne PairDrop på andre enheter for å sende filer",
|
||||||
"no-peers-subtitle": "Sammenkoble enheter for å kunne oppdages på andre nettverk",
|
"no-peers-subtitle": "Sammenkoble enheter eller bli med i et offentlig rom for å kunne oppdages på andre nettverk",
|
||||||
"x-instructions_data-drop-peer": "Slipp for å sende til likemann",
|
"x-instructions_data-drop-peer": "Slipp for å sende til likemann",
|
||||||
"x-instructions-share-mode_mobile": "Trykk for å sende",
|
"x-instructions-share-mode_mobile": "Trykk for å sende {{descriptor}}",
|
||||||
"activate-share-mode-base": "Åpne PairDrop på andre enheter for å sende",
|
"activate-share-mode-base": "Åpne PairDrop på andre enheter for å sende",
|
||||||
"activate-share-mode-and-other-files-plural": "og {{count}} andre filer",
|
"activate-share-mode-and-other-files-plural": "og {{count}} andre filer",
|
||||||
"activate-share-mode-shared-text": "delt tekst"
|
"activate-share-mode-shared-text": "delt tekst",
|
||||||
|
"activate-share-mode-and-other-file": "og 1 annen fil",
|
||||||
|
"activate-share-mode-shared-file": "delt fil",
|
||||||
|
"activate-share-mode-shared-files-plural": "{{count}} delte filer",
|
||||||
|
"webrtc-requirement": "For å bruke denne PairDrop-økten, må WebRTC være aktivert!"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"input-key-on-this-device": "Skriv inn denne nøkkelen på en annen enhet",
|
"input-key-on-this-device": "Skriv inn denne nøkkelen på en annen enhet",
|
||||||
"pair-devices-title": "Sammenkoble enheter",
|
"pair-devices-title": "Sammenkoble Enheter Permanent",
|
||||||
"would-like-to-share": "ønsker å dele",
|
"would-like-to-share": "ønsker å dele",
|
||||||
"auto-accept-instructions-2": "for å godkjenne alle filer sendt fra den enheten automatisk.",
|
"auto-accept-instructions-2": "for å godkjenne alle filer sendt fra den enheten automatisk.",
|
||||||
"paired-devices-wrapper_data-empty": "Ingen sammenkoblede enheter.",
|
"paired-devices-wrapper_data-empty": "Ingen sammenkoblede enheter.",
|
||||||
"enter-key-from-another-device": "Skriv inn nøkkel fra en annen enhet for å fortsette.",
|
"enter-key-from-another-device": "Skriv inn nøkkel fra en annen enhet her.",
|
||||||
"edit-paired-devices-title": "Rediger sammenkoblede enheter",
|
"edit-paired-devices-title": "Rediger Sammenkoblede Enheter",
|
||||||
"accept": "Godta",
|
"accept": "Godta",
|
||||||
"has-sent": "har sendt:",
|
"has-sent": "har sendt:",
|
||||||
"base64-paste-to-send": "Trykk her for å sende {{type}}",
|
"base64-paste-to-send": "Lim inn her for å dele {{type}}",
|
||||||
"base64-text": "tekst",
|
"base64-text": "tekst",
|
||||||
"base64-files": "filer",
|
"base64-files": "filer",
|
||||||
"file-other-description-image-plural": "og {{count}} andre bilder",
|
"file-other-description-image-plural": "og {{count}} andre bilder",
|
||||||
|
@ -64,9 +76,9 @@
|
||||||
"receive-text-title": "Melding mottatt",
|
"receive-text-title": "Melding mottatt",
|
||||||
"auto-accept": "auto-godkjenn",
|
"auto-accept": "auto-godkjenn",
|
||||||
"share": "Del",
|
"share": "Del",
|
||||||
"send-message-to": "Send en melding til",
|
"send-message-to": "Til:",
|
||||||
"send": "Send",
|
"send": "Send",
|
||||||
"base64-tap-to-paste": "Trykk her for å lime inn {{type}}",
|
"base64-tap-to-paste": "Trykk her for å dele {{type}}",
|
||||||
"file-other-description-image": "og ett annet bilde",
|
"file-other-description-image": "og ett annet bilde",
|
||||||
"file-other-description-file-plural": "og {{count}} andre filer",
|
"file-other-description-file-plural": "og {{count}} andre filer",
|
||||||
"title-file-plural": "Filer",
|
"title-file-plural": "Filer",
|
||||||
|
@ -74,7 +86,28 @@
|
||||||
"file-other-description-file": "og én annen fil",
|
"file-other-description-file": "og én annen fil",
|
||||||
"title-image": "Bilde",
|
"title-image": "Bilde",
|
||||||
"title-file": "Fil",
|
"title-file": "Fil",
|
||||||
"title-image-plural": "Bilder"
|
"title-image-plural": "Bilder",
|
||||||
|
"join": "Bli med",
|
||||||
|
"share-text-checkbox": "Alltid vis denne dialogen ved deling av tekst",
|
||||||
|
"language-selector-title": "Velg Språk",
|
||||||
|
"unpair": "Fjern sammenkobling",
|
||||||
|
"temporary-public-room-title": "Midlertidig Offentlig Rom",
|
||||||
|
"input-room-id-on-another-device": "Legg inn denne rom-IDen på en annen enhet",
|
||||||
|
"hr-or": "ELLER",
|
||||||
|
"leave": "Forlat",
|
||||||
|
"paired-device-removed": "Sammenkoblet enhet har blitt fjernet.",
|
||||||
|
"message_title": "Sett inn meldingen du vil sende",
|
||||||
|
"message_placeholder": "Tekst",
|
||||||
|
"base64-title-files": "Delte filer",
|
||||||
|
"system-language": "Systemspråk",
|
||||||
|
"public-room-qr-code_title": "Trykk for å kopiere lenke til offentlig rom",
|
||||||
|
"pair-devices-qr-code_title": "Trykk for å kopiere lenken til å sammenkoble denne enheten",
|
||||||
|
"approve": "godkjenn",
|
||||||
|
"share-text-title": "Del Tekstmelding",
|
||||||
|
"share-text-subtitle": "Rediger melding før sending:",
|
||||||
|
"close-toast_title": "Lukk varsel",
|
||||||
|
"enter-room-id-from-another-device": "Legg inn rom-ID fra en annen enhet for å bli med i rommet.",
|
||||||
|
"base64-title-text": "Delt Tekst"
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"close-about_aria-label": "Lukk «Om PairDrop»",
|
"close-about_aria-label": "Lukk «Om PairDrop»",
|
||||||
|
@ -82,7 +115,11 @@
|
||||||
"claim": "Den enkleste måten å overføre filer mellom enheter",
|
"claim": "Den enkleste måten å overføre filer mellom enheter",
|
||||||
"buy-me-a-coffee_title": "Spander drikke!",
|
"buy-me-a-coffee_title": "Spander drikke!",
|
||||||
"tweet_title": "Tvitre om PairDrop",
|
"tweet_title": "Tvitre om PairDrop",
|
||||||
"github_title": "PairDrop på GitHub"
|
"github_title": "PairDrop på GitHub",
|
||||||
|
"mastodon_title": "Skriv om PairDrop på Mastadon",
|
||||||
|
"bluesky_title": "Følg oss på BlueSky",
|
||||||
|
"custom_title": "Følg oss",
|
||||||
|
"privacypolicy_title": "Åpne vår personvernerklæring"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"copied-to-clipboard": "Kopiert til utklippstavlen",
|
"copied-to-clipboard": "Kopiert til utklippstavlen",
|
||||||
|
@ -95,7 +132,7 @@
|
||||||
"file-transfer-completed": "Filoverføring utført",
|
"file-transfer-completed": "Filoverføring utført",
|
||||||
"selected-peer-left": "Valgt likemann dro",
|
"selected-peer-left": "Valgt likemann dro",
|
||||||
"pairing-key-invalid": "Ugyldig nøkkel",
|
"pairing-key-invalid": "Ugyldig nøkkel",
|
||||||
"connecting": "Kobler til …",
|
"connecting": "Kobler til…",
|
||||||
"pairing-not-persistent": "Sammenkoblede enheter er ikke vedvarende",
|
"pairing-not-persistent": "Sammenkoblede enheter er ikke vedvarende",
|
||||||
"offline": "Du er frakoblet",
|
"offline": "Du er frakoblet",
|
||||||
"online-requirement": "Du må være på nett for å koble sammen enheter.",
|
"online-requirement": "Du må være på nett for å koble sammen enheter.",
|
||||||
|
@ -110,28 +147,37 @@
|
||||||
"pairing-success": "Enheter sammenkoblet",
|
"pairing-success": "Enheter sammenkoblet",
|
||||||
"pairing-cleared": "Sammenkobling av alle enheter opphevet",
|
"pairing-cleared": "Sammenkobling av alle enheter opphevet",
|
||||||
"pairing-key-invalidated": "Nøkkel {{key}} ugyldiggjort",
|
"pairing-key-invalidated": "Nøkkel {{key}} ugyldiggjort",
|
||||||
"copied-text-error": "Kunne ikke legge innhold i utklkippstavlen. Kopier manuelt!",
|
"copied-text-error": "Kunne ikke legge innhold i utklippstavlen. Kopier manuelt!",
|
||||||
"clipboard-content-incorrect": "Utklippstavleinnholdet er uriktig",
|
"clipboard-content-incorrect": "Utklippstavleinnholdet er uriktig",
|
||||||
"link-received": "Lenke mottatt av {{name}} - Klikk for å åpne",
|
"link-received": "Lenke mottatt av {{name}} - Klikk for å åpne",
|
||||||
"request-title": "{{name}} ønsker å overføre {{count}} {{descriptor}}",
|
"request-title": "{{name}} ønsker å overføre {{count}} {{descriptor}}",
|
||||||
"message-received": "Melding mottatt av {{name}} - Klikk for å åpne",
|
"message-received": "Melding mottatt av {{name}} - Klikk for å åpne",
|
||||||
"files-incorrect": "Filene er uriktige",
|
"files-incorrect": "Filene er uriktige",
|
||||||
"ios-memory-limit": "Forsendelse av filer til iOS er kun mulig opptil 200 MB av gangen",
|
"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?",
|
"unfinished-transfers-warning": "Det er ufullførte overføringer. Er du sikker på at du vil lukke PairDrop?",
|
||||||
"rate-limit-join-key": "Forsøksgrense overskredet. Vent 10 sek. og prøv igjen."
|
"rate-limit-join-key": "Grense nådd. Vent 10 sekunder og prøv igjen.",
|
||||||
|
"copied-to-clipboard-error": "Kopiering ikke mulig, Kopier manuelt.",
|
||||||
|
"public-room-id-invalid": "Ugyldig rom-ID",
|
||||||
|
"public-room-left": "Forlot offentlig rom {{publicRoomId}}",
|
||||||
|
"room-url-copied-to-clipboard": "Lenke for offentlig rom kopiert til utklippstavle",
|
||||||
|
"online-requirement-pairing": "Du må være på nett for å sammenkoble enheter",
|
||||||
|
"online-requirement-public-room": "Du må være på nett for å opprette et offentlig rom",
|
||||||
|
"pair-url-copied-to-clipboard": "Lenke for sammenkobling til denne enheten kopiert til utklipstavle",
|
||||||
|
"notifications-permissions-error": "Varlseltillatelse har blitt blokkert fordi brukeren har avvist forespørselen flere ganger. Dette kan tilbakestilles i Sideinnformasjon som kan bli funnet ved å trykke på låseikonet ved siden av URL-feltet."
|
||||||
},
|
},
|
||||||
"document-titles": {
|
"document-titles": {
|
||||||
"file-received": "Fil mottatt",
|
"file-received": "Fil mottatt",
|
||||||
"file-received-plural": "{{count}} filer mottatt",
|
"file-received-plural": "{{count}} filer mottatt",
|
||||||
"message-received": "Melding mottatt",
|
"message-received": "Melding mottatt",
|
||||||
"file-transfer-requested": "Filoverføring forespurt",
|
"file-transfer-requested": "Filoverføring forespurt",
|
||||||
"message-received-plural": "{{count}} meldinger mottatt"
|
"message-received-plural": "{{count}} meldinger mottatt",
|
||||||
|
"image-transfer-requested": "Blideoverføring forespurt"
|
||||||
},
|
},
|
||||||
"peer-ui": {
|
"peer-ui": {
|
||||||
"preparing": "Forbereder …",
|
"preparing": "Forbereder…",
|
||||||
"waiting": "Venter…",
|
"waiting": "Venter…",
|
||||||
"processing": "Behandler …",
|
"processing": "Behandler…",
|
||||||
"transferring": "Overfører …",
|
"transferring": "Overfører…",
|
||||||
"click-to-send": "Klikk for å sende filer, eller høyreklikk for å sende en melding",
|
"click-to-send": "Klikk for å sende filer, eller høyreklikk for å sende en melding",
|
||||||
"click-to-send-share-mode": "Klikk for å sende {{descriptor}}",
|
"click-to-send-share-mode": "Klikk for å sende {{descriptor}}",
|
||||||
"connection-hash": "Sammenlign dette sikkerhetsnummeret på begge enhetene for å bekrefte ende-til-ende -krypteringen"
|
"connection-hash": "Sammenlign dette sikkerhetsnummeret på begge enhetene for å bekrefte ende-til-ende -krypteringen"
|
||||||
|
|
|
@ -52,7 +52,10 @@
|
||||||
"online-requirement-public-room": "U moet online zijn om een openbare kamer te maken",
|
"online-requirement-public-room": "U moet online zijn om een openbare kamer te maken",
|
||||||
"copied-text-error": "Schrijven naar klembord mislukt. Kopieer handmatig!",
|
"copied-text-error": "Schrijven naar klembord mislukt. Kopieer handmatig!",
|
||||||
"download-successful": "{{descriptor}} downloaden",
|
"download-successful": "{{descriptor}} downloaden",
|
||||||
"click-to-show": "Klik om te tonen"
|
"click-to-show": "Klik om te tonen",
|
||||||
|
"pair-url-copied-to-clipboard": "Koppeling om dit apparaat te koppelen is gekopieerd naar het klembord",
|
||||||
|
"room-url-copied-to-clipboard": "Koppeling naar openbare kamer gekopieerd naar klembord",
|
||||||
|
"notifications-permissions-error": "Meldingsmachtiging is geblokkeerd, omdat de gebruiker het machtigingsverzoek meerdere keren heeft afgewezen. Dit kan worden gereset in instellingen van de website, welke toegangelijk is door te klikken op het sloticoon naast de URL-balk."
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
"cancel-share-mode": "Klaar",
|
"cancel-share-mode": "Klaar",
|
||||||
|
@ -66,13 +69,15 @@
|
||||||
"language-selector_title": "Taal Selecteren",
|
"language-selector_title": "Taal Selecteren",
|
||||||
"about_title": "Over PairDrop",
|
"about_title": "Over PairDrop",
|
||||||
"about_aria-label": "Open Over PairDrop",
|
"about_aria-label": "Open Over PairDrop",
|
||||||
"theme-light_title": "Altijd lichte modus gebruiken"
|
"theme-light_title": "Altijd lichte modus gebruiken",
|
||||||
|
"expand_title": "Knoppenrij uitvouwen",
|
||||||
|
"edit-share-mode": "Bewerken"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"x-instructions_mobile": "Tik om bestanden te versturen of houdt vast om een bericht te sturen",
|
"x-instructions_mobile": "Tik om bestanden te versturen of houdt vast om een bericht te sturen",
|
||||||
"x-instructions-share-mode_desktop": "Klik om te verzenden",
|
"x-instructions-share-mode_desktop": "Klik om te verzenden {{descriptor}}",
|
||||||
"activate-share-mode-and-other-files-plural": "en {{count}} andere bestanden",
|
"activate-share-mode-and-other-files-plural": "en {{count}} andere bestanden",
|
||||||
"x-instructions-share-mode_mobile": "Tik om te verzenden",
|
"x-instructions-share-mode_mobile": "Tik om te verzenden {{descriptor}}",
|
||||||
"activate-share-mode-base": "Open PairDrop op andere apparaten om te verzenden",
|
"activate-share-mode-base": "Open PairDrop op andere apparaten om te verzenden",
|
||||||
"no-peers-subtitle": "Koppel apparaten of betreed een openbare ruimte om op andere netwerken zichtbaar te worden",
|
"no-peers-subtitle": "Koppel apparaten of betreed een openbare ruimte om op andere netwerken zichtbaar te worden",
|
||||||
"activate-share-mode-shared-text": "gedeelde tekst",
|
"activate-share-mode-shared-text": "gedeelde tekst",
|
||||||
|
@ -80,7 +85,11 @@
|
||||||
"no-peers-title": "Open PairDrop op andere apparaten om bestanden te versturen",
|
"no-peers-title": "Open PairDrop op andere apparaten om bestanden te versturen",
|
||||||
"x-instructions_data-drop-peer": "Laat los om naar peer te versturen",
|
"x-instructions_data-drop-peer": "Laat los om naar peer te versturen",
|
||||||
"x-instructions_data-drop-bg": "Loslaten om ontvanger te selecteren",
|
"x-instructions_data-drop-bg": "Loslaten om ontvanger te selecteren",
|
||||||
"no-peers_data-drop-bg": "Loslaten om ontvanger te kiezen"
|
"no-peers_data-drop-bg": "Loslaten om ontvanger te kiezen",
|
||||||
|
"activate-share-mode-and-other-file": "en 1 ander bestand",
|
||||||
|
"activate-share-mode-shared-file": "gedeeld bestand",
|
||||||
|
"activate-share-mode-shared-files-plural": "{{count}} gedeelde bestanden",
|
||||||
|
"webrtc-requirement": "Om deze PairDrop instantie te kunnen gebruiken, moet WebRTC geactiveerd zijn!"
|
||||||
},
|
},
|
||||||
"peer-ui": {
|
"peer-ui": {
|
||||||
"processing": "Verwerken…",
|
"processing": "Verwerken…",
|
||||||
|
@ -92,7 +101,7 @@
|
||||||
"transferring": "Overdragen…"
|
"transferring": "Overdragen…"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"base64-paste-to-send": "Plak hier om {{type}} te versturen",
|
"base64-paste-to-send": "Plak klembord hier om {{type}} te versturen",
|
||||||
"auto-accept-instructions-2": "om automatisch alle bestanden van dat apparaat te accepteren.",
|
"auto-accept-instructions-2": "om automatisch alle bestanden van dat apparaat te accepteren.",
|
||||||
"receive-text-title": "Bericht Ontvangen",
|
"receive-text-title": "Bericht Ontvangen",
|
||||||
"edit-paired-devices-title": "Gekoppelde Apparaten Bewerken",
|
"edit-paired-devices-title": "Gekoppelde Apparaten Bewerken",
|
||||||
|
@ -108,7 +117,7 @@
|
||||||
"join": "Betreden",
|
"join": "Betreden",
|
||||||
"title-image-plural": "Afbeeldingen",
|
"title-image-plural": "Afbeeldingen",
|
||||||
"send": "Verzenden",
|
"send": "Verzenden",
|
||||||
"base64-tap-to-paste": "Hier tikken om {{type}} te plakken",
|
"base64-tap-to-paste": "Hier tikken om {{type}} te delen",
|
||||||
"base64-text": "tekst",
|
"base64-text": "tekst",
|
||||||
"copy": "Kopiëren",
|
"copy": "Kopiëren",
|
||||||
"file-other-description-image": "en één andere afbeelding",
|
"file-other-description-image": "en één andere afbeelding",
|
||||||
|
@ -122,7 +131,7 @@
|
||||||
"title-image": "Afbeelding",
|
"title-image": "Afbeelding",
|
||||||
"file-other-description-file-plural": "en {{count}} andere bestanden",
|
"file-other-description-file-plural": "en {{count}} andere bestanden",
|
||||||
"would-like-to-share": "zou graag het volgende willen delen",
|
"would-like-to-share": "zou graag het volgende willen delen",
|
||||||
"send-message-to": "Verstuur een bericht naar",
|
"send-message-to": "Aan:",
|
||||||
"language-selector-title": "Taal Instellen",
|
"language-selector-title": "Taal Instellen",
|
||||||
"pair": "Koppel",
|
"pair": "Koppel",
|
||||||
"hr-or": "OF",
|
"hr-or": "OF",
|
||||||
|
@ -138,7 +147,19 @@
|
||||||
"send-message-title": "Bericht Sturen",
|
"send-message-title": "Bericht Sturen",
|
||||||
"input-room-id-on-another-device": "Voer de kamer ID in op een ander apparaat",
|
"input-room-id-on-another-device": "Voer de kamer ID in op een ander apparaat",
|
||||||
"file-other-description-image-plural": "en {{count}} andere afbeeldingen",
|
"file-other-description-image-plural": "en {{count}} andere afbeeldingen",
|
||||||
"enter-room-id-from-another-device": "Voer de kamer ID van een ander apparaat hier in."
|
"enter-room-id-from-another-device": "Voer de kamer ID van een ander apparaat hier in.",
|
||||||
|
"paired-device-removed": "Gekoppelde apparaten zijn verwijderd.",
|
||||||
|
"message_title": "Voer bericht in om te versturen",
|
||||||
|
"message_placeholder": "Tekst",
|
||||||
|
"base64-title-files": "Deel Bestanden",
|
||||||
|
"base64-title-text": "Deel Tekst",
|
||||||
|
"public-room-qr-code_title": "Klik, om de link naar deze openbare ruimte te kopiëren",
|
||||||
|
"approve": "goedkeuren",
|
||||||
|
"share-text-title": "Gedeeld Tekst Bericht",
|
||||||
|
"share-text-checkbox": "Deze dialoog altijd tonen bij het delen van tekst",
|
||||||
|
"close-toast_title": "Bericht sluiten",
|
||||||
|
"pair-devices-qr-code_title": "Klik om de koppeling te kopiëren om dit apparaat te koppelen",
|
||||||
|
"share-text-subtitle": "Bewerk bericht voor verzending:"
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"claim": "De makkelijkste manier om bestanden tussen apparaten te versturen",
|
"claim": "De makkelijkste manier om bestanden tussen apparaten te versturen",
|
||||||
|
@ -146,7 +167,11 @@
|
||||||
"close-about_aria-label": "Sluit Over PairDrop",
|
"close-about_aria-label": "Sluit Over PairDrop",
|
||||||
"buy-me-a-coffee_title": "Koop een kopje koffie voor mij!",
|
"buy-me-a-coffee_title": "Koop een kopje koffie voor mij!",
|
||||||
"github_title": "PairDrop op GitHub",
|
"github_title": "PairDrop op GitHub",
|
||||||
"faq_title": "Veel gestelde vragen"
|
"faq_title": "Veel gestelde vragen",
|
||||||
|
"mastodon_title": "Schrijf over PairDrop op Mastodon",
|
||||||
|
"bluesky_title": "Volg ons op BlueSky",
|
||||||
|
"custom_title": "Volg ons",
|
||||||
|
"privacypolicy_title": "Open ons privacybeleid"
|
||||||
},
|
},
|
||||||
"document-titles": {
|
"document-titles": {
|
||||||
"file-transfer-requested": "Bestandsoverdracht verzocht",
|
"file-transfer-requested": "Bestandsoverdracht verzocht",
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"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…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"language-selector_title": "Ustaw język",
|
||||||
|
"about_aria-label": "Otwórz \"O PairDrop\"",
|
||||||
|
"theme-light_title": "Zawsze używaj jasnego motywu",
|
||||||
|
"theme-dark_title": "Zawsze używaj ciemnego motywu",
|
||||||
|
"pair-device_title": "Sparuj swoje urządzenia na stałe",
|
||||||
|
"edit-paired-devices_title": "Edytuj sparowane urządzenia",
|
||||||
|
"join-public-room_title": "Dołącz tymczasowo do pokoju publicznego",
|
||||||
|
"cancel-share-mode": "Anuluj",
|
||||||
|
"edit-share-mode": "Edytuj",
|
||||||
|
"expand_title": "Rozwiń rząd przycisków",
|
||||||
|
"about_title": "O PairDrop",
|
||||||
|
"theme-auto_title": "Dostosuj motyw do motywu systemowego",
|
||||||
|
"notification_title": "Włącz powiadomienia",
|
||||||
|
"install_title": "Zainstaluj PairDrop"
|
||||||
|
},
|
||||||
|
"instructions": {
|
||||||
|
"no-peers_data-drop-bg": "Zwolnij, aby wybrać odbiorcę",
|
||||||
|
"no-peers-title": "Otwórz PairDrop na innych urządzeniach, aby wysłać pliki",
|
||||||
|
"x-instructions_desktop": "Kliknij, aby wysłać pliki lub kliknij prawym przyciskiem myszy, aby wysłać wiadomość",
|
||||||
|
"x-instructions_mobile": "Naciśnij, aby wysłać pliki lub naciśnij i przytrzymaj, aby wysłać wiadomość",
|
||||||
|
"x-instructions_data-drop-bg": "Zwolnij, aby wybrać odbiorcę",
|
||||||
|
"x-instructions-share-mode_desktop": "Kliknij, aby wysłać {{descriptor}}",
|
||||||
|
"x-instructions-share-mode_mobile": "Naciśnij, aby wysłać {{descriptor}}",
|
||||||
|
"activate-share-mode-base": "Otwórz PairDrop na innych urządzeniach, aby wysłać",
|
||||||
|
"activate-share-mode-and-other-file": "i 1 inny plik",
|
||||||
|
"activate-share-mode-shared-text": "udostępniony tekst",
|
||||||
|
"activate-share-mode-shared-file": "udostępniony plik",
|
||||||
|
"no-peers-subtitle": "Sparuj urządzenia lub wejdź do pokoju publicznego, aby być widocznym w innych sieciach",
|
||||||
|
"x-instructions_data-drop-peer": "Zwolnij, aby wysłać do odbiorcy",
|
||||||
|
"activate-share-mode-and-other-files-plural": "i {{count}} innych plików",
|
||||||
|
"activate-share-mode-shared-files-plural": "{{count}} udostępnionych plików",
|
||||||
|
"webrtc-requirement": "Aby móc korzystać z tej instancji PairDrop, należy włączyć WebRTC!"
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"known-as": "Jesteś widoczny jako:",
|
||||||
|
"display-name_data-placeholder": "Ładowanie…",
|
||||||
|
"display-name_title": "Edytuj nazwę swojego urządzenia na stałe",
|
||||||
|
"on-this-network": "w tej sieci",
|
||||||
|
"on-this-network_title": "Możesz być znaleziony przez każdego w tej sieci.",
|
||||||
|
"paired-devices": "przez sparowane urządzenia",
|
||||||
|
"discovery": "Możesz być wykryty:",
|
||||||
|
"paired-devices_title": "Możesz zostać wykryty przez sparowane urządzenia przez cały czas, niezależnie od sieci.",
|
||||||
|
"public-room-devices": "w pokoju {{roomId}}",
|
||||||
|
"public-room-devices_title": "Możesz zostać wykryty przez urządzenia w tym pokoju publicznym, niezależnie od sieci.",
|
||||||
|
"routed": "przesyłane przez serwer",
|
||||||
|
"webrtc": "jeśli WebRTC jest niedostępny.",
|
||||||
|
"traffic": "Transmisja jest"
|
||||||
|
},
|
||||||
|
"dialogs": {
|
||||||
|
"pair-devices-title": "Sparuj Urządzenia Na Stałe",
|
||||||
|
"enter-key-from-another-device": "Wpisz tu klucz z innego urządzenia.",
|
||||||
|
"temporary-public-room-title": "Tymczasowy Pokój Publiczny",
|
||||||
|
"enter-room-id-from-another-device": "Wprowadź ID pokoju z innego urządzenia, aby wejść do pokoju.",
|
||||||
|
"hr-or": "LUB",
|
||||||
|
"pair": "Sparuj",
|
||||||
|
"cancel": "Anuluj",
|
||||||
|
"edit-paired-devices-title": "Edycja Sparowanych Urządzeń",
|
||||||
|
"unpair": "Rozłącz sparowanie",
|
||||||
|
"paired-devices-wrapper_data-empty": "Brak sparowanych urządzeń.",
|
||||||
|
"auto-accept-instructions-1": "Aktywuj",
|
||||||
|
"auto-accept-instructions-2": ", aby automatycznie przyjąć wszystkie pliki wysłane z tego urządzenia.",
|
||||||
|
"auto-accept": "samoczynne potwierdzanie",
|
||||||
|
"close": "Zamknij",
|
||||||
|
"join": "Dołącz",
|
||||||
|
"leave": "Opuść",
|
||||||
|
"accept": "Akceptuj",
|
||||||
|
"decline": "Odrzuć",
|
||||||
|
"has-sent": "wysłał:",
|
||||||
|
"share": "Udostępnij",
|
||||||
|
"send-message-title": "Wyślij Wiadomość",
|
||||||
|
"send-message-to": "Do:",
|
||||||
|
"message_title": "Wprowadź wiadomość do wysłania",
|
||||||
|
"message_placeholder": "Tekst",
|
||||||
|
"receive-text-title": "Wiadomość Odebrana",
|
||||||
|
"copy": "Kopiuj",
|
||||||
|
"base64-title-files": "Udostępnij Pliki",
|
||||||
|
"base64-title-text": "Udostępnij Tekst",
|
||||||
|
"base64-processing": "Przetwarzanie…",
|
||||||
|
"base64-tap-to-paste": "Naciśnij tutaj, aby udostępnić {{type}}",
|
||||||
|
"base64-text": "tekst",
|
||||||
|
"base64-files": "pliki",
|
||||||
|
"file-other-description-image": "i 1 inny obraz",
|
||||||
|
"file-other-description-image-plural": "i {{count}} innych obrazów",
|
||||||
|
"file-other-description-file-plural": "i {{count}} innych plików",
|
||||||
|
"title-image": "Obraz",
|
||||||
|
"title-image-plural": "Obrazy",
|
||||||
|
"title-file-plural": "Pliki",
|
||||||
|
"receive-title": "{{descriptor}} Otrzymano",
|
||||||
|
"download-again": "Pobierz ponownie",
|
||||||
|
"download": "Pobierz",
|
||||||
|
"language-selector-title": "Ustaw Język",
|
||||||
|
"system-language": "Język Systemu",
|
||||||
|
"file-other-description-file": "i 1 inny plik",
|
||||||
|
"pair-devices-qr-code_title": "Kliknij, aby skopiować odnośnik do sparowania urządzenia",
|
||||||
|
"approve": "zatwierdź",
|
||||||
|
"share-text-subtitle": "Edytuj wiadomość przed wysłaniem:",
|
||||||
|
"share-text-checkbox": "Zawsze pokazuj to okno, gdy udostępniasz tekst",
|
||||||
|
"paired-device-removed": "Sparowane urządzenie zostało usunięte.",
|
||||||
|
"would-like-to-share": "chciałby udostępnić",
|
||||||
|
"input-key-on-this-device": "Wprowadź ten klucz na innym urządzeniu",
|
||||||
|
"send": "Wyślij",
|
||||||
|
"scan-qr-code": "lub zeskanuj kod QR.",
|
||||||
|
"base64-paste-to-send": "Wklej tutaj, aby udostępnić {{type}}",
|
||||||
|
"title-file": "Plik",
|
||||||
|
"input-room-id-on-another-device": "Wprowadź ID tego pokoju na innym urządzeniu",
|
||||||
|
"public-room-qr-code_title": "Kliknij, aby skopiować odnośnik do pokoju publicznego",
|
||||||
|
"share-text-title": "Udostępnij Wiadomość Tekstową",
|
||||||
|
"close-toast_title": "Zamknij powiadomienie"
|
||||||
|
},
|
||||||
|
"about": {
|
||||||
|
"close-about_aria-label": "Zamknij \"O PairDrop\"",
|
||||||
|
"claim": "Najłatwiejszy sposób na przesyłanie plików między urządzeniami",
|
||||||
|
"buy-me-a-coffee_title": "Kup me kawę!",
|
||||||
|
"mastodon_title": "Napisz o PairDrop na Mastodonie",
|
||||||
|
"bluesky_title": "Śledź nas na BlueSky",
|
||||||
|
"custom_title": "Śledź nas",
|
||||||
|
"privacypolicy_title": "Otwórz naszą Politykę Prywatności",
|
||||||
|
"faq_title": "Często zadawane pytania (FAQ)",
|
||||||
|
"github_title": "PairDrop na GitHub",
|
||||||
|
"tweet_title": "Tweetnij o PairDrop"
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"display-name-changed-permanently": "Wyświetlana nazwa została zmieniona na stałe",
|
||||||
|
"display-name-random-again": "Wyświetlana nazwa została ponownie wygenerowana",
|
||||||
|
"download-successful": "{{descriptor}} pobrano",
|
||||||
|
"pairing-tabs-error": "Sparowanie dwóch kart w przeglądarce jest niemożliwe",
|
||||||
|
"pairing-success": "Sparowane urządzenia",
|
||||||
|
"pairing-key-invalid": "Nieprawidłowy klucz",
|
||||||
|
"pairing-key-invalidated": "Klucz {{key}} unieważniony",
|
||||||
|
"public-room-id-invalid": "Nieprawidłowe ID pokoju",
|
||||||
|
"pairing-cleared": "Wszystkie urządzenia rozłączone",
|
||||||
|
"public-room-left": "Opuściłeś pokój publiczny {{publicRoomId}}",
|
||||||
|
"copied-to-clipboard-error": "Kopiowanie niemożliwe. Skopiuj ręcznie.",
|
||||||
|
"text-content-incorrect": "Treść tekstu jest nieprawidłowa",
|
||||||
|
"file-content-incorrect": "Zawartość pliku jest nieprawidłowa",
|
||||||
|
"clipboard-content-incorrect": "Zawartość schowka jest nieprawidłowa",
|
||||||
|
"pair-url-copied-to-clipboard": "Link do sparowania tego urządzenia skopiowano do schowka",
|
||||||
|
"link-received": "Otrzymano link od {{name}} - Kliknij, aby otworzyć",
|
||||||
|
"message-received": "Otrzymano wiadomość od {{name}} - Kliknij, aby skopiować",
|
||||||
|
"click-to-download": "Kliknij, aby pobrać",
|
||||||
|
"request-title": "{{name}} chciałby przesłać {{count}} {{descriptor}}",
|
||||||
|
"click-to-show": "Kliknij, żeby pokazać",
|
||||||
|
"copied-text": "Tekst skopiowany do schowka",
|
||||||
|
"copied-text-error": "Zapis do schowka nie powiódł się. Skopiuj ręcznie!",
|
||||||
|
"offline": "Jesteś offline",
|
||||||
|
"online": "Jesteś znów online",
|
||||||
|
"connected": "Połączony",
|
||||||
|
"online-requirement-pairing": "Aby sparować urządzenia, musisz być online",
|
||||||
|
"online-requirement-public-room": "Aby utworzyć pokój publiczny, musisz być online",
|
||||||
|
"connecting": "Łączenie…",
|
||||||
|
"files-incorrect": "Pliki są nieprawidłowe",
|
||||||
|
"file-transfer-completed": "Przesyłanie plików zakończone",
|
||||||
|
"ios-memory-limit": "Jednorazowe przesyłanie plików do iOS jest możliwe tylko do 200 MB",
|
||||||
|
"message-transfer-completed": "Przesyłanie wiadomości zakończone",
|
||||||
|
"unfinished-transfers-warning": "Istnieją niedokończone transfery. Czy na pewno chcesz zamknąć PairDrop?",
|
||||||
|
"rate-limit-join-key": "Osiągnięto limit. Poczekaj 10 sekund i spróbuj ponownie.",
|
||||||
|
"selected-peer-left": "Wybrany uczestnik opuścił",
|
||||||
|
"display-name-changed-temporarily": "Wyświetlana nazwa została zmieniona na czas tej sesji",
|
||||||
|
"pairing-not-persistent": "Połączenie sparowanych urządzeń nie jest trwałe",
|
||||||
|
"copied-to-clipboard": "Skopiowano do schowka",
|
||||||
|
"room-url-copied-to-clipboard": "Link do publicznego pokoju skopiowano do schowka",
|
||||||
|
"notifications-enabled": "Powiadomienia włączone",
|
||||||
|
"notifications-permissions-error": "Uprawnienia do powiadomień zostały zablokowane, ponieważ użytkownik kilkakrotnie odrzucił monit o pozwolenie na nie. Można je zresetować w \"Informacjach o [stronie]\", do których można uzyskać dostęp, klikając ikonę kłódki obok paska adresu URL."
|
||||||
|
},
|
||||||
|
"document-titles": {
|
||||||
|
"file-received": "Plik Odebrany",
|
||||||
|
"file-received-plural": "{{count}} Plików Odebranych",
|
||||||
|
"file-transfer-requested": "Zażądano Przesłania Pliku",
|
||||||
|
"image-transfer-requested": "Zażądano Przesłania Obrazu",
|
||||||
|
"message-received": "Otrzymano Wiadomość",
|
||||||
|
"message-received-plural": "{{count}} Wiadomości Odebranych"
|
||||||
|
},
|
||||||
|
"peer-ui": {
|
||||||
|
"click-to-send-share-mode": "Kliknij, aby wysłać {{descriptor}}",
|
||||||
|
"click-to-send": "Kliknij, aby wysłać pliki lub kliknij prawym przyciskiem myszy, aby wysłać wiadomość",
|
||||||
|
"connection-hash": "Aby sprawdzić bezpieczeństwo szyfrowania end-to-end, porównaj ten numer bezpieczeństwa na obu urządzeniach",
|
||||||
|
"preparing": "Przygotowanie…",
|
||||||
|
"waiting": "Oczekiwanie…",
|
||||||
|
"processing": "Przetwarzanie…",
|
||||||
|
"transferring": "Przesyłanie…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,8 +11,9 @@
|
||||||
"pair-device_title": "Emparelhar seus dispositivos permanentemente",
|
"pair-device_title": "Emparelhar seus dispositivos permanentemente",
|
||||||
"edit-paired-devices_title": "Editar dispositivos emparelhados",
|
"edit-paired-devices_title": "Editar dispositivos emparelhados",
|
||||||
"join-public-room_title": "Entrar em uma sala pública temporariamente",
|
"join-public-room_title": "Entrar em uma sala pública temporariamente",
|
||||||
"cancel-share-mode": "Concluído",
|
"cancel-share-mode": "Cancelar",
|
||||||
"edit-share-mode": "Editar"
|
"edit-share-mode": "Editar",
|
||||||
|
"expand_title": "Expandir linha de botões de cabeçalho"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"no-peers_data-drop-bg": "Solte para selecionar o destinatário",
|
"no-peers_data-drop-bg": "Solte para selecionar o destinatário",
|
||||||
|
@ -22,8 +23,8 @@
|
||||||
"x-instructions_mobile": "Toque para enviar arquivos ou toque e segure para enviar uma mensagem",
|
"x-instructions_mobile": "Toque para enviar arquivos ou toque e segure para enviar uma mensagem",
|
||||||
"x-instructions_data-drop-peer": "Solte para enviar para o par",
|
"x-instructions_data-drop-peer": "Solte para enviar para o par",
|
||||||
"x-instructions_data-drop-bg": "Solte para selecionar o destinatário",
|
"x-instructions_data-drop-bg": "Solte para selecionar o destinatário",
|
||||||
"x-instructions-share-mode_desktop": "Clique para enviar",
|
"x-instructions-share-mode_desktop": "Clique para enviar {{descriptor}}",
|
||||||
"x-instructions-share-mode_mobile": "Toque para enviar",
|
"x-instructions-share-mode_mobile": "Toque para enviar {{descriptor}}",
|
||||||
"activate-share-mode-base": "Abra o PairDrop em outros dispositivos para enviar",
|
"activate-share-mode-base": "Abra o PairDrop em outros dispositivos para enviar",
|
||||||
"activate-share-mode-and-other-files-plural": "e {{count}} outros arquivos",
|
"activate-share-mode-and-other-files-plural": "e {{count}} outros arquivos",
|
||||||
"activate-share-mode-shared-text": "texto compartilhado",
|
"activate-share-mode-shared-text": "texto compartilhado",
|
||||||
|
@ -114,7 +115,11 @@
|
||||||
"github_title": "PairDrop no GitHub",
|
"github_title": "PairDrop no GitHub",
|
||||||
"buy-me-a-coffee_title": "Me compre um café!",
|
"buy-me-a-coffee_title": "Me compre um café!",
|
||||||
"tweet_title": "Tweet sobre o PairDrop",
|
"tweet_title": "Tweet sobre o PairDrop",
|
||||||
"faq_title": "Perguntas frequentes"
|
"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"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"display-name-changed-permanently": "O nome de exibição é alterado permanentemente",
|
"display-name-changed-permanently": "O nome de exibição é alterado permanentemente",
|
||||||
|
|
|
@ -1,31 +1,37 @@
|
||||||
{
|
{
|
||||||
"header": {
|
"header": {
|
||||||
"about_aria-label": "Открыть страницу \"О сервисе\"",
|
"about_aria-label": "О PairDrop",
|
||||||
"pair-device_title": "Связать ваши устройства навсегда",
|
"pair-device_title": "Связать ваши устройства навсегда",
|
||||||
"install_title": "Установить PairDrop",
|
"install_title": "Установить PairDrop",
|
||||||
"cancel-share-mode": "Выполнено",
|
"cancel-share-mode": "Выполнено",
|
||||||
"edit-paired-devices_title": "Редактировать связанные устройства",
|
"edit-paired-devices_title": "Редактировать связанные устройства",
|
||||||
"notification_title": "Включить уведомления",
|
"notification_title": "Включить уведомления",
|
||||||
"about_title": "О сервисе",
|
"about_title": "О PairDrop",
|
||||||
"theme-auto_title": "Адаптировать тему к системной автоматически",
|
"theme-auto_title": "Адаптировать тему к системной автоматически",
|
||||||
"theme-dark_title": "Всегда использовать темную тему",
|
"theme-dark_title": "Всегда использовать темную тему",
|
||||||
"theme-light_title": "Всегда использовать светлую тему",
|
"theme-light_title": "Всегда использовать светлую тему",
|
||||||
"join-public-room_title": "Войти на время в публичную комнату",
|
"join-public-room_title": "Войти на время в публичную комнату",
|
||||||
"language-selector_title": "Выбрать язык"
|
"language-selector_title": "Установить язык",
|
||||||
|
"edit-share-mode": "Редактировать",
|
||||||
|
"expand_title": "Развернуть ряд кнопок заголовка"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"x-instructions_desktop": "Нажмите, чтобы отправить файлы, или щелкните правой кнопкой мыши, чтобы отправить сообщение",
|
"x-instructions_desktop": "Нажмите, чтобы отправить файлы, или щелкните правой кнопкой мыши, чтобы отправить сообщение",
|
||||||
"no-peers_data-drop-bg": "Отпустите, чтобы выбрать получателя",
|
"no-peers_data-drop-bg": "Отпустите, чтобы выбрать получателя",
|
||||||
"x-instructions-share-mode_desktop": "Нажмите, чтобы отправить",
|
"x-instructions-share-mode_desktop": "Нажмите, чтобы отправить {{descriptor}}",
|
||||||
"x-instructions_data-drop-bg": "Отпустите, чтобы выбрать получателя",
|
"x-instructions_data-drop-bg": "Отпустите, чтобы выбрать получателя",
|
||||||
"x-instructions-share-mode_mobile": "Прикоснитесь, чтобы отправить",
|
"x-instructions-share-mode_mobile": "Прикоснитесь, чтобы отправить {{descriptor}}",
|
||||||
"x-instructions_data-drop-peer": "Отпустите, чтобы послать узлу",
|
"x-instructions_data-drop-peer": "Отпустите, чтобы послать узлу",
|
||||||
"x-instructions_mobile": "Прикоснитесь коротко, чтобы отправить файлы, или долго, чтобы отправить сообщение",
|
"x-instructions_mobile": "Прикоснитесь коротко, чтобы отправить файлы, или долго, чтобы отправить сообщение",
|
||||||
"no-peers-title": "Откройте PairDrop на других устройствах, чтобы отправить файлы",
|
"no-peers-title": "Откройте PairDrop на других устройствах, чтобы отправить файлы",
|
||||||
"no-peers-subtitle": "Свяжите устройства или войдите в публичную комнату, чтобы вас могли обнаружить из других сетей",
|
"no-peers-subtitle": "Свяжите устройства или войдите в публичную комнату, чтобы вас могли обнаружить из других сетей",
|
||||||
"activate-share-mode-and-other-files-plural": "и {{count}} других файлов",
|
"activate-share-mode-and-other-files-plural": "и {{count}} других файлов",
|
||||||
"activate-share-mode-base": "Откройте PairDrop на других устройствах, чтобы отправить",
|
"activate-share-mode-base": "Откройте PairDrop на других устройствах, чтобы отправить",
|
||||||
"activate-share-mode-shared-text": "общий текст"
|
"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!"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"display-name_data-placeholder": "Загрузка…",
|
"display-name_data-placeholder": "Загрузка…",
|
||||||
|
@ -54,13 +60,13 @@
|
||||||
"download": "Скачать",
|
"download": "Скачать",
|
||||||
"receive-text-title": "Сообщение получено",
|
"receive-text-title": "Сообщение получено",
|
||||||
"send": "Отправить",
|
"send": "Отправить",
|
||||||
"send-message-to": "Отправить сообщение",
|
"send-message-to": "Кому:",
|
||||||
"send-message-title": "Отправить сообщение",
|
"send-message-title": "Отправить сообщение",
|
||||||
"copy": "Копировать",
|
"copy": "Копировать",
|
||||||
"base64-files": "файлы",
|
"base64-files": "файлы",
|
||||||
"base64-paste-to-send": "Вставьте здесь, чтобы отправить {{type}}",
|
"base64-paste-to-send": "Вставьте, чтобы поделиться {{type}}",
|
||||||
"base64-processing": "Обработка…",
|
"base64-processing": "Обработка…",
|
||||||
"base64-tap-to-paste": "Прикоснитесь здесь, чтобы вставить {{type}}",
|
"base64-tap-to-paste": "Нажмите, чтобы поделиться {{type}}",
|
||||||
"base64-text": "текст",
|
"base64-text": "текст",
|
||||||
"title-file": "Файл",
|
"title-file": "Файл",
|
||||||
"title-file-plural": "Файлы",
|
"title-file-plural": "Файлы",
|
||||||
|
@ -92,7 +98,16 @@
|
||||||
"temporary-public-room-title": "Временная публичная комната",
|
"temporary-public-room-title": "Временная публичная комната",
|
||||||
"message_title": "Вставьте сообщение для отправки",
|
"message_title": "Вставьте сообщение для отправки",
|
||||||
"pair-devices-qr-code_title": "Нажмите, чтобы скопировать ссылку для привязки этого устройства",
|
"pair-devices-qr-code_title": "Нажмите, чтобы скопировать ссылку для привязки этого устройства",
|
||||||
"public-room-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": "Поделиться сообщением"
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"close-about-aria-label": "Закрыть страницу \"О сервисе\"",
|
"close-about-aria-label": "Закрыть страницу \"О сервисе\"",
|
||||||
|
@ -101,7 +116,11 @@
|
||||||
"buy-me-a-coffee_title": "Купить мне кофе!",
|
"buy-me-a-coffee_title": "Купить мне кофе!",
|
||||||
"github_title": "PairDrop на GitHub",
|
"github_title": "PairDrop на GitHub",
|
||||||
"tweet_title": "Твит о PairDrop",
|
"tweet_title": "Твит о PairDrop",
|
||||||
"faq_title": "Часто задаваемые вопросы"
|
"faq_title": "Часто задаваемые вопросы",
|
||||||
|
"mastodon_title": "Расскажите о PairDrop на Mastodon",
|
||||||
|
"custom_title": "Подпишитесь на нас",
|
||||||
|
"bluesky_title": "Подписаться на BlueSky",
|
||||||
|
"privacypolicy_title": "Открыть нашу политику приватности"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"display-name-changed-permanently": "Отображаемое имя было изменено навсегда",
|
"display-name-changed-permanently": "Отображаемое имя было изменено навсегда",
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"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…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"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": "தயாரித்தல்…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,95 @@
|
||||||
|
{
|
||||||
|
"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,163 +1,163 @@
|
||||||
{
|
{
|
||||||
"header": {
|
"header": {
|
||||||
"about_title": "PairDrop Hakkında",
|
"about_title": "PairDrop Hakkında",
|
||||||
"about_aria-label": "PairDrop Hakkındayı Aç",
|
"about_aria-label": "PairDrop Hakkında'yı Aç",
|
||||||
"theme-auto_title": "Temayı sisteme uyarla",
|
"theme-auto_title": "Temayı sisteme otomatik olarak adapte et",
|
||||||
"theme-light_title": "Daima açık tema kullan",
|
"theme-light_title": "Her zaman açık temayı kullan",
|
||||||
"theme-dark_title": "Daima koyu tema kullan",
|
"theme-dark_title": "Her zaman koyu temayı kullan",
|
||||||
"notification_title": "Bildirimleri etkinleştir",
|
"notification_title": "Bildirimleri etkinleştir",
|
||||||
"install_title": "PairDrop'u Yükle",
|
"install_title": "PairDrop'u Yükle",
|
||||||
"pair-device_title": "Cihazı kalıcı olarak eşle",
|
"pair-device_title": "Cihazlarınızı kalıcı olarak eşleştirin",
|
||||||
"edit-paired-devices_title": "Eşleştirilmiş cihazları düzenle",
|
"edit-paired-devices_title": "Eşleşmiş cihazları düzenle",
|
||||||
"cancel-share-mode": "Bitti",
|
"cancel-share-mode": "İptal Et",
|
||||||
"join-public-room_title": "Geçici olarak genel odaya katılın",
|
"join-public-room_title": "Geçici olarak ortak odaya katıl",
|
||||||
"language-selector_title": "Dili Seç",
|
"language-selector_title": "Dili Ayarla",
|
||||||
"edit-share-mode": "Düzenle",
|
"edit-share-mode": "Düzenle",
|
||||||
"expand_title": "Başlık düğmesi satırını genişlet"
|
"expand_title": "Başlık buton satırını genişlet"
|
||||||
},
|
},
|
||||||
"instructions": {
|
"instructions": {
|
||||||
"no-peers_data-drop-bg": "Alıcıyı seçmek için bırakın",
|
"no-peers_data-drop-bg": "Alıcıyı seçmek için bırakın",
|
||||||
"x-instructions_mobile": "Dosya göndermek için dokun veya mesaj göndermek için uzun dokun",
|
"x-instructions_mobile": "Dosya göndermek için dokunun veya mesaj göndermek için uzun dokunun",
|
||||||
"x-instructions-share-mode_desktop": "{{descriptor}} kişisine göndermek için tıkla",
|
"x-instructions-share-mode_desktop": "{{descriptor}} göndermek için tıklayın",
|
||||||
"activate-share-mode-and-other-files-plural": "ve {{count}} diğer dosya",
|
"activate-share-mode-and-other-files-plural": "ve {{count}} diğer dosya",
|
||||||
"x-instructions-share-mode_mobile": "{{descriptor}} kişisine göndermek için dokun",
|
"x-instructions-share-mode_mobile": "{{descriptor}} göndermek için dokunun",
|
||||||
"activate-share-mode-base": "Göndermek için diğer cihazlarda PairDrop'u açın",
|
"activate-share-mode-base": "Göndermek için diğer cihazlarda PairDrop'u açın",
|
||||||
"no-peers-subtitle": "Diğer ağlarda keşfedilebilir olmak için cihazları eşleştirin veya ortak bir odaya girin",
|
"no-peers-subtitle": "Cihazları eşleştirin veya keşfedilebilir olmak için ortak bir odaya girin",
|
||||||
"activate-share-mode-shared-text": "paylaşılan metin",
|
"activate-share-mode-shared-text": "paylaşılan metin",
|
||||||
"x-instructions_desktop": "Dosya göndermek için tıkla veya mesaj göndermek için sağ tıkla",
|
"x-instructions_desktop": "Dosya göndermek için tıklayın veya mesaj göndermek için sağ tıklayın",
|
||||||
"no-peers-title": "Dosya göndermek için diğer cihazlarda PairDrop'u açın",
|
"no-peers-title": "Dosya göndermek için diğer cihazlarda PairDrop'u açın",
|
||||||
"x-instructions_data-drop-peer": "Göndermek için serbest bırak",
|
"x-instructions_data-drop-peer": "Eşleştiriciye göndermek için bırakın",
|
||||||
"x-instructions_data-drop-bg": "Alıcıyı seçmek için bırakın",
|
"x-instructions_data-drop-bg": "Alıcıyı seçmek için bırakın",
|
||||||
"webrtc-requirement": "Bu PairDrop örneğini kullanmak için WebRTC etkinleştirilmelidir!",
|
"webrtc-requirement": "Bu PairDrop örneğini kullanmak için WebRTC etkin olmalı!",
|
||||||
"activate-share-mode-shared-files-plural": "{{count}} adet paylaşılan dosya",
|
"activate-share-mode-shared-files-plural": "{{count}} paylaşılan dosya",
|
||||||
"activate-share-mode-shared-file": "paylaşılan dosya",
|
"activate-share-mode-shared-file": "paylaşılan dosya",
|
||||||
"activate-share-mode-and-other-file": "ve 1 dosya"
|
"activate-share-mode-and-other-file": "ve 1 diğer dosya"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"display-name_data-placeholder": "Yükleniyor…",
|
"display-name_data-placeholder": "Yükleniyor…",
|
||||||
"display-name_title": "Cihazının adını kalıcı olarak düzenle",
|
"display-name_title": "Cihaz adınızı kalıcı olarak düzenleyin",
|
||||||
"webrtc": "WebRTC mevcut değilse.",
|
"webrtc": "WebRTC mevcut değilse.",
|
||||||
"public-room-devices_title": "Genel odada ağdan bağımsız olarak cihazlar tarafından keşfedilebilirsiniz.",
|
"public-room-devices_title": "Ağdan bağımsız olarak bu ortak odadaki cihazlar tarafından keşfedilebilir olabilirsiniz.",
|
||||||
"traffic": "Trafik",
|
"traffic": "Trafik",
|
||||||
"paired-devices_title": "Eşleştirilmiş cihazlarda ağdan bağımsız olarak her zaman keşfedilebilirsiniz.",
|
"paired-devices_title": "Ağdan bağımsız olarak her zaman eşleştirilmiş cihazlar tarafından keşfedilebilir olabilirsiniz.",
|
||||||
"public-room-devices": "{{roomId}} odası",
|
"public-room-devices": "{{roomId}} odasında",
|
||||||
"paired-devices": "eşleştirilmiş cihazlar tarafından",
|
"paired-devices": "eşleştirilmiş cihazlar tarafından",
|
||||||
"on-this-network": "bu ağ üzerinde",
|
"on-this-network": "bu ağda",
|
||||||
"routed": "sunucu üzerinden yönlendirilir",
|
"routed": "sunucu üzerinden yönlendirilmiş",
|
||||||
"discovery": "Keşfedilebilirsin:",
|
"discovery": "Keşfedilebilir durumdasınız:",
|
||||||
"on-this-network_title": "Bu ağdaki herkes tarafından keşfedilebilirsiniz.",
|
"on-this-network_title": "Bu ağdaki herkes tarafından keşfedilebilir olabilirsiniz.",
|
||||||
"known-as": "Bilinen adın:"
|
"known-as": "Şu adla biliniyorsunuz:"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"cancel": "İptal",
|
"cancel": "İptal",
|
||||||
"edit-paired-devices-title": "Eşleştirilmiş Cihazları Düzenle",
|
"edit-paired-devices-title": "Eşleşmiş Cihazları Düzenle",
|
||||||
"base64-paste-to-send": "{{type}} paylaşmak için buraya yapıştır",
|
"base64-paste-to-send": "{{type}} paylaşmak için buraya yapıştırın",
|
||||||
"auto-accept-instructions-2": "böylelikle cihazdan gönderilen tüm dosyaları otomatik olarak kabul eder.",
|
"auto-accept-instructions-2": "bu cihazdan gönderilen tüm dosyaları otomatik olarak kabul etmek için.",
|
||||||
"receive-text-title": "Mesaj Alındı",
|
"receive-text-title": "Mesaj Alındı",
|
||||||
"auto-accept-instructions-1": "Etkinleştir",
|
"auto-accept-instructions-1": "Aktive et",
|
||||||
"pair-devices-title": "Cihazları Kalıcı Eşleştir",
|
"pair-devices-title": "Cihazları Kalıcı Olarak Eşleştir",
|
||||||
"download": "İndir",
|
"download": "İndir",
|
||||||
"title-file": "Dosya",
|
"title-file": "Dosya",
|
||||||
"base64-processing": "İşleniyor…",
|
"base64-processing": "İşleniyor…",
|
||||||
"decline": "Reddet",
|
"decline": "Reddet",
|
||||||
"receive-title": "{{descriptor}} Alındı",
|
"receive-title": "{{descriptor}} Alındı",
|
||||||
"leave": "Ayrıl",
|
"leave": "Ayrıl",
|
||||||
"message_title": "Göndermek için mesaj girin",
|
"message_title": "Göndermek için mesaj ekle",
|
||||||
"join": "Katıl",
|
"join": "Katıl",
|
||||||
"title-image-plural": "Resimler",
|
"title-image-plural": "Resimler",
|
||||||
"send": "Gönder",
|
"send": "Gönder",
|
||||||
"base64-tap-to-paste": "{{type}} paylaşmak için buraya dokun",
|
"base64-tap-to-paste": "{{type}} paylaşmak için buraya dokunun",
|
||||||
"base64-text": "metin",
|
"base64-text": "metin",
|
||||||
"copy": "Kopyala",
|
"copy": "Kopyala",
|
||||||
"file-other-description-image": "ve 1 diğer resim",
|
"file-other-description-image": "ve 1 diğer resim",
|
||||||
"pair-devices-qr-code_title": "Bu cihazı eşleştirmek üzere bağlantıyı kopyalamak için tıklayın",
|
"pair-devices-qr-code_title": "Bu cihazı eşleştirmek için bağlantıyı kopyalamak için tıklayın",
|
||||||
"temporary-public-room-title": "Geçici Genel Oda",
|
"temporary-public-room-title": "Geçici Ortak Oda",
|
||||||
"base64-files": "dosyalar",
|
"base64-files": "dosyalar",
|
||||||
"has-sent": "gönderdi:",
|
"has-sent": "gönderdi:",
|
||||||
"file-other-description-file": "ve 1 diğer dosya",
|
"file-other-description-file": "ve 1 diğer dosya",
|
||||||
"public-room-qr-code_title": "Genel odanın bağlantı linkini kopyalamak için tıkla",
|
"public-room-qr-code_title": "Ortak oda bağlantısını kopyalamak için tıklayın",
|
||||||
"close": "Kapat",
|
"close": "Kapat",
|
||||||
"system-language": "Sistem Dili",
|
"system-language": "Sistem Dili",
|
||||||
"unpair": "Eşlemeyi Kaldır",
|
"unpair": "Eşleşmeyi Kaldır",
|
||||||
"title-image": "Resim",
|
"title-image": "Resim",
|
||||||
"file-other-description-file-plural": "ve {{count}} diğer dosya",
|
"file-other-description-file-plural": "ve {{count}} diğer dosya",
|
||||||
"would-like-to-share": "paylaşmak istiyor",
|
"would-like-to-share": "paylaşmak istiyor",
|
||||||
"send-message-to": "Kime:",
|
"send-message-to": "Alıcı:",
|
||||||
"language-selector-title": "Dili Seç",
|
"language-selector-title": "Dili Ayarla",
|
||||||
"pair": "Eşle",
|
"pair": "Eşleştir",
|
||||||
"hr-or": "VEYA",
|
"hr-or": "VEYA",
|
||||||
"scan-qr-code": "veya QR kodunu tarayın.",
|
"scan-qr-code": "veya QR kodunu tarayın.",
|
||||||
"input-key-on-this-device": "Bu anahtarı başka bir cihazda girin",
|
"input-key-on-this-device": "Bu anahtarı başka bir cihaza girin",
|
||||||
"download-again": "Tekrar indir",
|
"download-again": "Tekrar indir",
|
||||||
"accept": "Kabul Et",
|
"accept": "Kabul Et",
|
||||||
"paired-devices-wrapper_data-empty": "Eşlenmiş cihaz yok.",
|
"paired-devices-wrapper_data-empty": "Eşleşmiş cihaz yok.",
|
||||||
"enter-key-from-another-device": "Buraya başka bir cihazdan anahtar girin.",
|
"enter-key-from-another-device": "Başka bir cihazdan alınan anahtarı buraya girin.",
|
||||||
"share": "Paylaş",
|
"share": "Paylaş",
|
||||||
"auto-accept": "otomatik-kabul",
|
"auto-accept": "otomatik kabul",
|
||||||
"title-file-plural": "Dosyalar",
|
"title-file-plural": "Dosyalar",
|
||||||
"send-message-title": "Mesaj Gönder",
|
"send-message-title": "Mesaj Gönder",
|
||||||
"input-room-id-on-another-device": "Bu ID'yi diğer cihaza girin",
|
"input-room-id-on-another-device": "Bu oda kimliğini başka bir cihaza girin",
|
||||||
"file-other-description-image-plural": "ve {{count}} diğer resim",
|
"file-other-description-image-plural": "ve {{count}} diğer resim",
|
||||||
"enter-room-id-from-another-device": "Odaya katılmak için diğer cihazın ID'sini girin.",
|
"enter-room-id-from-another-device": "Odaya katılmak için başka bir cihazdan oda kimliğini girin.",
|
||||||
"message_placeholder": "Metin",
|
"message_placeholder": "Metin",
|
||||||
"close-toast_title": "Bildirimleri kapat",
|
"close-toast_title": "Bildirim kapat",
|
||||||
"share-text-checkbox": "Metin paylaşırken her zaman bu pencereyi göster",
|
"share-text-checkbox": "Metin paylaşırken her zaman bu iletişim kutusunu göster",
|
||||||
"base64-title-files": "Dosyaları Paylaş",
|
"base64-title-files": "Dosyaları Paylaş",
|
||||||
"approve": "onayla",
|
"approve": "onayla",
|
||||||
"paired-device-removed": "Eşleştirilmiş cihaz kaldırıldı.",
|
"paired-device-removed": "Eşleşmiş cihaz kaldırıldı.",
|
||||||
"share-text-title": "Kısa Mesaj Paylaş",
|
"share-text-title": "Metin Mesajı Paylaş",
|
||||||
"share-text-subtitle": "Göndermeden önce mesajı düzenle:",
|
"share-text-subtitle": "Göndermeden önce mesajı düzenleyin:",
|
||||||
"base64-title-text": "Metin Paylaş"
|
"base64-title-text": "Metni Paylaş"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"request-title": "{{name}} {{count}} {{descriptor}} transfer etmek istiyor",
|
"request-title": "{{name}} {{count}} {{descriptor}} transfer etmek istiyor",
|
||||||
"unfinished-transfers-warning": "Bitmemiş transferler var. PairDrop'u kapatmak istediğinize emin misiniz?",
|
"unfinished-transfers-warning": "Tamamlanmamış transferler var. PairDrop'u kapatmak istediğinizden emin misiniz?",
|
||||||
"message-received": "Mesaj {{name}} tarafından alındı - Kopyalamak için tıkla",
|
"message-received": "{{name}} tarafından mesaj alındı - Kopyalamak için tıklayın",
|
||||||
"notifications-permissions-error": "Kullanıcı izin isteğini birkaç kez reddettiği için bildirimler engellenmiştir. URL çubuğunun yanındaki kilit simgesine tıklayarak sıfırlanabilir.",
|
"notifications-permissions-error": "Bildirim izinleri birkaç kez reddedildiği için engellendi. Bu, URL çubuğunun yanındaki kilit simgesine tıklayarak erişilebilen Sayfa Bilgilerinde sıfırlanabilir.",
|
||||||
"rate-limit-join-key": "İstek sınırına ulaşıldı. 10 saniye bekleyin ve tekrar deneyin.",
|
"rate-limit-join-key": "Hız sınırına ulaşıldı. 10 saniye bekleyin ve tekrar deneyin.",
|
||||||
"pair-url-copied-to-clipboard": "Bu cihazı eşleştirmek için bağlantı linki panoya kopyalandı",
|
"pair-url-copied-to-clipboard": "Bu cihazı eşleştirmek için bağlantı panoya kopyalandı",
|
||||||
"connecting": "Bağlanılıyor…",
|
"connecting": "Bağlanıyor…",
|
||||||
"pairing-key-invalidated": "{{key}} anahtarı geçersiz",
|
"pairing-key-invalidated": "Anahtar {{key}} geçersiz kılındı",
|
||||||
"pairing-key-invalid": "Geçersiz anahtar",
|
"pairing-key-invalid": "Geçersiz anahtar",
|
||||||
"connected": "Bağlandı",
|
"connected": "Bağlı",
|
||||||
"pairing-not-persistent": "Eşleştirilmiş cihazlar kalıcı değildir",
|
"pairing-not-persistent": "Eşleşmiş cihazlar kalıcı değil",
|
||||||
"text-content-incorrect": "Metin içeriği yanlış",
|
"text-content-incorrect": "Metin içeriği hatalı",
|
||||||
"message-transfer-completed": "Mesaj transferi tamamlandı",
|
"message-transfer-completed": "Mesaj transferi tamamlandı",
|
||||||
"file-transfer-completed": "Dosya transferi bitti",
|
"file-transfer-completed": "Dosya transferi tamamlandı",
|
||||||
"file-content-incorrect": "Dosya içeriği yanlış",
|
"file-content-incorrect": "Dosya içeriği hatalı",
|
||||||
"files-incorrect": "Dosyalar yanlış",
|
"files-incorrect": "Dosyalar hatalı",
|
||||||
"selected-peer-left": "Seçili aygıt ayrıldı",
|
"selected-peer-left": "Seçilen eş ayrıldı",
|
||||||
"link-received": "Link {{name}} tarafından alındı - Açmak için tıkla",
|
"link-received": "{{name}} tarafından bağlantı alındı - Açmak için tıklayın",
|
||||||
"online": "Tekrar çevrimiçisin",
|
"online": "Tekrar çevrimiçisiniz",
|
||||||
"public-room-left": "{{publicRoomId}} genel odasından ayrıldın",
|
"public-room-left": "Ortak odadan ayrıldı {{publicRoomId}}",
|
||||||
"copied-text": "Metin panoya kopyalandı",
|
"copied-text": "Metin panoya kopyalandı",
|
||||||
"display-name-random-again": "Mevcut adın tekrardan rastgele oluşturuldu",
|
"display-name-random-again": "Görünen ad tekrar rastgele oluşturuldu",
|
||||||
"display-name-changed-permanently": "Mevcut adın kalıcı olarak değiştirildi",
|
"display-name-changed-permanently": "Görünen ad kalıcı olarak değiştirildi",
|
||||||
"copied-to-clipboard-error": "Kopyalama mümkün değil. Manuel olarak kopyalayın.",
|
"copied-to-clipboard-error": "Kopyalama mümkün değil. Elle kopyalayın.",
|
||||||
"pairing-success": "Cihazlar eşleştirildi",
|
"pairing-success": "Cihazlar eşleştirildi",
|
||||||
"clipboard-content-incorrect": "Pano içeriği yanlış",
|
"clipboard-content-incorrect": "Panodaki içerik hatalı",
|
||||||
"display-name-changed-temporarily": "Mevcut adın yalnızca bu oturum için değiştirildi",
|
"display-name-changed-temporarily": "Görünen ad sadece bu oturum için değiştirildi",
|
||||||
"copied-to-clipboard": "Panoya kopyalandı",
|
"copied-to-clipboard": "Panoya kopyalandı",
|
||||||
"offline": "Çevrimdışısın",
|
"offline": "Çevrimdışısınız",
|
||||||
"pairing-tabs-error": "İki web tarayıcı sekmesini eşleştirmek mümkün değildir",
|
"pairing-tabs-error": "İki web tarayıcı sekmesini eşleştirmek imkansız",
|
||||||
"public-room-id-invalid": "Geçersiz oda ID'si",
|
"public-room-id-invalid": "Geçersiz oda kimliği",
|
||||||
"click-to-download": "İndirmek için tıkla",
|
"click-to-download": "İndirmek için tıklayın",
|
||||||
"pairing-cleared": "Tüm cihazlar eşleştirmeden çıkarıldı",
|
"pairing-cleared": "Tüm cihazların eşleşmesi kaldırıldı",
|
||||||
"notifications-enabled": "Bildirimler etkinleştirildi",
|
"notifications-enabled": "Bildirimler etkinleştirildi",
|
||||||
"online-requirement-pairing": "Cihazları eşleştirmek için çevrimiçi olmanız lazım",
|
"online-requirement-pairing": "Cihazları eşleştirmek için çevrimiçi olmalısınız",
|
||||||
"ios-memory-limit": "iOS'a tek seferde sadece 200MB'a kadar dosya gönderebilirsin",
|
"ios-memory-limit": "iOS'a dosya göndermek sadece bir seferde 200 MB'a kadar mümkündür",
|
||||||
"online-requirement-public-room": "Genel oda oluşturmak için çevrimiçi olmanız lazım",
|
"online-requirement-public-room": "Ortak oda oluşturmak için çevrimiçi olmalısınız",
|
||||||
"room-url-copied-to-clipboard": "Genel oda bağlantı linki panoya kopyalandı",
|
"room-url-copied-to-clipboard": "Ortak oda bağlantısı panoya kopyalandı",
|
||||||
"copied-text-error": "Panoya kopyalanamadı. Lütfen manuel olarak kopyalayın!",
|
"copied-text-error": "Panoya yazma başarısız oldu. Elle kopyalayın!",
|
||||||
"download-successful": "{{descriptor}} indirildi",
|
"download-successful": "{{descriptor}} indirildi",
|
||||||
"click-to-show": "Görmek için tıkla"
|
"click-to-show": "Göstermek için tıklayın"
|
||||||
},
|
},
|
||||||
"peer-ui": {
|
"peer-ui": {
|
||||||
"processing": "İşleniyor…",
|
"processing": "İşleniyor…",
|
||||||
"click-to-send-share-mode": "{{descriptor}} göndermek için tıkla",
|
"click-to-send-share-mode": "{{descriptor}} göndermek için tıklayın",
|
||||||
"click-to-send": "Dosya göndermek için tıkla veya mesaj göndermek için sağ tıkla",
|
"click-to-send": "Dosya göndermek için tıklayın veya mesaj göndermek için sağ tıklayın",
|
||||||
"waiting": "Bekleniyor…",
|
"waiting": "Bekleniyor…",
|
||||||
"connection-hash": "Uçtan uca şifrelemenin güvenliğini doğrulamak için her iki cihazda da bu güvenlik numarasını karşılaştırın",
|
"connection-hash": "Uçtan uca şifrelemenin güvenliğini doğrulamak için, bu güvenlik numarasını her iki cihazda da karşılaştırın",
|
||||||
"preparing": "Hazırlanıyor…",
|
"preparing": "Hazırlanıyor…",
|
||||||
"transferring": "Transfer ediliyor…"
|
"transferring": "Transfer ediliyor…"
|
||||||
},
|
},
|
||||||
|
@ -165,17 +165,17 @@
|
||||||
"claim": "Cihazlar arasında dosya aktarmanın en kolay yolu",
|
"claim": "Cihazlar arasında dosya aktarmanın en kolay yolu",
|
||||||
"tweet_title": "PairDrop hakkında tweet at",
|
"tweet_title": "PairDrop hakkında tweet at",
|
||||||
"close-about_aria-label": "PairDrop Hakkında'yı Kapat",
|
"close-about_aria-label": "PairDrop Hakkında'yı Kapat",
|
||||||
"buy-me-a-coffee_title": "Bana bir kahve al!",
|
"buy-me-a-coffee_title": "Bana bir kahve ısmarla!",
|
||||||
"github_title": "GitHub'da PairDrop",
|
"github_title": "GitHub'da PairDrop",
|
||||||
"faq_title": "Sıkça sorulan sorular",
|
"faq_title": "Sıkça sorulan sorular",
|
||||||
"custom_title": "Bizi takip edin",
|
"custom_title": "Bizi takip edin",
|
||||||
"privacypolicy_title": "Gizlilik politikamızı açın",
|
"privacypolicy_title": "Gizlilik politikamızı aç",
|
||||||
"mastodon_title": "Mastodon'da PairDrop hakkında yazın",
|
"mastodon_title": "Mastodon'da PairDrop hakkında yaz",
|
||||||
"bluesky_title": "Bizi BlueSky'da takip edin"
|
"bluesky_title": "BlueSky'da bizi takip edin"
|
||||||
},
|
},
|
||||||
"document-titles": {
|
"document-titles": {
|
||||||
"file-transfer-requested": "Dosya Transferi Talep Edildi",
|
"file-transfer-requested": "Dosya Transferi Talep Edildi",
|
||||||
"image-transfer-requested": "Görüntü Aktarımı Talep Edildi",
|
"image-transfer-requested": "Görüntü Transferi Talep Edildi",
|
||||||
"message-received-plural": "{{count}} Mesaj Alındı",
|
"message-received-plural": "{{count}} Mesaj Alındı",
|
||||||
"message-received": "Mesaj Alındı",
|
"message-received": "Mesaj Alındı",
|
||||||
"file-received": "Dosya Alındı",
|
"file-received": "Dosya Alındı",
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"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": "Переводимо…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"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": "傳輸中…"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"language-selector_title": "設定語言",
|
||||||
|
"theme-auto_title": "自動使用系統主題",
|
||||||
|
"cancel-share-mode": "取消",
|
||||||
|
"edit-share-mode": "編輯",
|
||||||
|
"expand_title": "展開標題按鈕列",
|
||||||
|
"about_title": "關於 PairDrop",
|
||||||
|
"about_aria-label": "開啟關於 PairDrop",
|
||||||
|
"theme-dark_title": "總是使用深色主題",
|
||||||
|
"notification_title": "啟用通知",
|
||||||
|
"install_title": "安裝 PairDrop",
|
||||||
|
"pair-device_title": "永久配對你的裝置",
|
||||||
|
"edit-paired-devices_title": "編輯已配對的裝置",
|
||||||
|
"join-public-room_title": "暫時加入公共房間",
|
||||||
|
"theme-light_title": "總是使用淺色主題"
|
||||||
|
},
|
||||||
|
"instructions": {
|
||||||
|
"no-peers_data-drop-bg": "釋放以選擇接收者",
|
||||||
|
"no-peers-subtitle": "配對裝置或加入一個公共房間以便在其他網路上可見",
|
||||||
|
"x-instructions_mobile": "輕觸以發送檔案或輕觸並按住以發送一則訊息",
|
||||||
|
"x-instructions_data-drop-bg": "釋放以選擇接收者",
|
||||||
|
"x-instructions-share-mode_desktop": "點擊以發送 {{descriptor}}",
|
||||||
|
"activate-share-mode-and-other-file": "和另外 1 個檔案",
|
||||||
|
"activate-share-mode-and-other-files-plural": "和另外 {{count}} 個檔案",
|
||||||
|
"activate-share-mode-shared-text": "已分享的文字",
|
||||||
|
"activate-share-mode-shared-file": "已分享的檔案",
|
||||||
|
"webrtc-requirement": "要使用此 PairDrop 實例,必須啟用 WebRTC!",
|
||||||
|
"no-peers-title": "在其他裝置上開啟 PairDrop 以傳送檔案",
|
||||||
|
"x-instructions_desktop": "點擊以發送檔案或右鍵點擊以發送一則訊息",
|
||||||
|
"x-instructions_data-drop-peer": "釋放以發送到此裝置",
|
||||||
|
"x-instructions-share-mode_mobile": "輕觸以發送 {{descriptor}}",
|
||||||
|
"activate-share-mode-base": "在其他裝置上開啟 PairDrop 以傳送",
|
||||||
|
"activate-share-mode-shared-files-plural": "{{count}} 個已分享的檔案"
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"display-name_data-placeholder": "正在載入中…",
|
||||||
|
"known-as": "此裝置名稱為:",
|
||||||
|
"display-name_title": "編輯此裝置名稱並儲存",
|
||||||
|
"discovery": "可見於:",
|
||||||
|
"on-this-network": "在這個網路上",
|
||||||
|
"paired-devices_title": "無論在任何網路,已配對的裝置都是隨時可見。",
|
||||||
|
"public-room-devices": "在房間 {{roomId}} 中",
|
||||||
|
"traffic": "流量將會",
|
||||||
|
"on-this-network_title": "在這個網路上的每個人都可以見到你。",
|
||||||
|
"paired-devices": "已配對的裝置",
|
||||||
|
"public-room-devices_title": "無論在任何網路,此公共房間中的裝置都是隨時可見。",
|
||||||
|
"routed": "途經伺服器",
|
||||||
|
"webrtc": "如果無法使用 WebRTC。"
|
||||||
|
},
|
||||||
|
"dialogs": {
|
||||||
|
"pair-devices-title": "永久配對裝置",
|
||||||
|
"scan-qr-code": "或掃描 QR 圖碼。",
|
||||||
|
"input-key-on-this-device": "在另一台裝置上輸入此密鑰",
|
||||||
|
"temporary-public-room-title": "臨時公共房間",
|
||||||
|
"input-room-id-on-another-device": "在另一台裝置上輸入此房間編號",
|
||||||
|
"enter-room-id-from-another-device": "在此輸入房間編號以加入房間。",
|
||||||
|
"hr-or": "或者",
|
||||||
|
"pair": "配對",
|
||||||
|
"cancel": "取消",
|
||||||
|
"paired-devices-wrapper_data-empty": "沒有已配對的裝置。",
|
||||||
|
"auto-accept-instructions-1": "啟用",
|
||||||
|
"auto-accept": "自動接收",
|
||||||
|
"auto-accept-instructions-2": "以自動接受從該裝置發送的所有檔案。",
|
||||||
|
"close": "關閉",
|
||||||
|
"join": "加入",
|
||||||
|
"send": "發送",
|
||||||
|
"receive-text-title": "收到訊息",
|
||||||
|
"base64-tap-to-paste": "輕觸此處以分享 {{type}}",
|
||||||
|
"base64-text": "文字",
|
||||||
|
"base64-files": "檔案",
|
||||||
|
"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": "分享文字時總是顯示此對話框",
|
||||||
|
"enter-key-from-another-device": "在此輸入另一台裝置的密鑰。",
|
||||||
|
"edit-paired-devices-title": "編輯已配對的裝置",
|
||||||
|
"unpair": "取消配對",
|
||||||
|
"paired-device-removed": "已刪除已配對的裝置。",
|
||||||
|
"leave": "離開",
|
||||||
|
"accept": "接受",
|
||||||
|
"would-like-to-share": "想要分享",
|
||||||
|
"decline": "拒絕",
|
||||||
|
"has-sent": "已發送:",
|
||||||
|
"share": "分享",
|
||||||
|
"message_title": "輸入要傳送的訊息",
|
||||||
|
"download": "下載",
|
||||||
|
"send-message-to": "發送至:",
|
||||||
|
"message_placeholder": "文字",
|
||||||
|
"copy": "複製",
|
||||||
|
"send-message-title": "發送訊息",
|
||||||
|
"base64-title-files": "分享檔案",
|
||||||
|
"base64-title-text": "分享文字",
|
||||||
|
"base64-processing": "正在處理中…",
|
||||||
|
"base64-paste-to-send": "將剪貼簿貼到此處以分享 {{type}}",
|
||||||
|
"file-other-description-image": "和另外 1 張圖片",
|
||||||
|
"close-toast_title": "關閉通知"
|
||||||
|
},
|
||||||
|
"about": {
|
||||||
|
"claim": "跨裝置傳輸檔案的最簡單方法",
|
||||||
|
"github_title": "GitHub 上的 PairDrop",
|
||||||
|
"tweet_title": "發佈關於 PairDrop 的推文",
|
||||||
|
"mastodon_title": "在 Mastodon 上撰寫有關 PairDrop 的文章",
|
||||||
|
"close-about_aria-label": "關閉關於 PairDrop",
|
||||||
|
"buy-me-a-coffee_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-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": "檔案內容不正確",
|
||||||
|
"notifications-enabled": "已啟用通知",
|
||||||
|
"notifications-permissions-error": "由於使用者多次取消權限請求提示,通知權限已被封鎖。這可以在頁面資訊中重置,點擊網址欄旁邊的鎖定圖示以存取頁面資訊。",
|
||||||
|
"link-received": "收到 {{name}} 的連結—點擊以開啟",
|
||||||
|
"message-received": "收到 {{name}} 的訊息—點擊以複製",
|
||||||
|
"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": "選定的對象已離開",
|
||||||
|
"pairing-tabs-error": "將兩個網頁瀏覽器分頁進行配對是不可能的",
|
||||||
|
"clipboard-content-incorrect": "剪貼簿內容不正確",
|
||||||
|
"click-to-download": "點擊以下載",
|
||||||
|
"request-title": "{{name}} 想要發送 {{count}} 個 {{descriptor}}"
|
||||||
|
},
|
||||||
|
"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": "點擊以發送檔案或右鍵點擊以發送一則訊息",
|
||||||
|
"preparing": "正在準備中…",
|
||||||
|
"waiting": "正在等待中…",
|
||||||
|
"processing": "正在處理中…",
|
||||||
|
"transferring": "正在傳輸中…",
|
||||||
|
"connection-hash": "若要驗證端對端加密的安全性,請在兩台裝置上比較此安全編號"
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,9 +26,8 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"background_color": "#efefef",
|
"background_color": "#efefef",
|
||||||
"start_url": "/",
|
"start_url": "./",
|
||||||
"scope": "/",
|
"display": "standalone",
|
||||||
"display": "minimal-ui",
|
|
||||||
"theme_color": "#3367d6",
|
"theme_color": "#3367d6",
|
||||||
"screenshots" : [
|
"screenshots" : [
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
class BrowserTabsConnector {
|
class BrowserTabsConnector {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
if (!('BroadcastChannel' in window)) return;
|
||||||
|
|
||||||
this.bc = new BroadcastChannel('pairdrop');
|
this.bc = new BroadcastChannel('pairdrop');
|
||||||
this.bc.addEventListener('message', e => this._onMessage(e));
|
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));
|
||||||
|
|
|
@ -3,8 +3,11 @@ class Localization {
|
||||||
Localization.$htmlRoot = document.querySelector('html');
|
Localization.$htmlRoot = document.querySelector('html');
|
||||||
|
|
||||||
Localization.defaultLocale = "en";
|
Localization.defaultLocale = "en";
|
||||||
Localization.supportedLocales = ["ar", "ca", "de", "en", "es", "fr", "id", "it", "ja", "kn", "nb", "nl", "pt-BR", "ro", "ru", "tr", "zh-CN"];
|
Localization.supportedLocales = [
|
||||||
Localization.supportedLocalesRtl = ["ar"];
|
"ar", "be", "bg", "ca", "cs", "da", "de", "en", "es", "et", "eu", "fa", "fr", "he", "hu", "id", "it", "ja",
|
||||||
|
"kn", "ko", "nb", "nl", "nn", "pl", "pt-BR", "ro", "ru", "sk", "ta", "tr", "uk", "zh-CN", "zh-HK", "zh-TW"
|
||||||
|
];
|
||||||
|
Localization.supportedLocalesRtl = ["ar", "he"];
|
||||||
|
|
||||||
Localization.translations = {};
|
Localization.translations = {};
|
||||||
Localization.translationsDefaultLocale = {};
|
Localization.translationsDefaultLocale = {};
|
||||||
|
@ -48,13 +51,14 @@ class Localization {
|
||||||
}
|
}
|
||||||
|
|
||||||
async setInitialTranslation() {
|
async setInitialTranslation() {
|
||||||
|
await Localization.fetchDefaultTranslations();
|
||||||
await Localization.setTranslation(Localization.initialLocale)
|
await Localization.setTranslation(Localization.initialLocale)
|
||||||
}
|
}
|
||||||
|
|
||||||
static async setTranslation(locale) {
|
static async setTranslation(locale) {
|
||||||
if (!locale) locale = Localization.systemLocale;
|
if (!locale) locale = Localization.systemLocale;
|
||||||
|
|
||||||
await Localization.setLocale(locale)
|
await Localization.fetchTranslations(locale)
|
||||||
await Localization.translatePage();
|
await Localization.translatePage();
|
||||||
|
|
||||||
if (Localization.localeIsRtl(locale)) {
|
if (Localization.localeIsRtl(locale)) {
|
||||||
|
@ -75,10 +79,12 @@ class Localization {
|
||||||
Events.fire("translation-loaded");
|
Events.fire("translation-loaded");
|
||||||
}
|
}
|
||||||
|
|
||||||
static async setLocale(newLocale) {
|
static async fetchDefaultTranslations() {
|
||||||
if (newLocale === Localization.locale) return false;
|
Localization.translationsDefaultLocale = await Localization.fetchTranslationsFor(Localization.defaultLocale);
|
||||||
|
}
|
||||||
|
|
||||||
Localization.defaultTranslations = await Localization.fetchTranslationsFor(Localization.defaultLocale);
|
static async fetchTranslations(newLocale) {
|
||||||
|
if (newLocale === Localization.locale) return false;
|
||||||
|
|
||||||
const newTranslations = await Localization.fetchTranslationsFor(newLocale);
|
const newTranslations = await Localization.fetchTranslationsFor(newLocale);
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,10 @@ class PairDrop {
|
||||||
"scripts/util.js",
|
"scripts/util.js",
|
||||||
"scripts/network.js",
|
"scripts/network.js",
|
||||||
"scripts/ui.js",
|
"scripts/ui.js",
|
||||||
"scripts/qr-code.min.js",
|
"scripts/libs/heic2any.min.js",
|
||||||
"scripts/zip.min.js",
|
"scripts/libs/no-sleep.min.js",
|
||||||
"scripts/no-sleep.min.js",
|
"scripts/libs/qr-code.min.js",
|
||||||
"scripts/heic2any.min.js"
|
"scripts/libs/zip.min.js"
|
||||||
];
|
];
|
||||||
|
|
||||||
this.registerServiceWorker();
|
this.registerServiceWorker();
|
||||||
|
@ -81,7 +81,7 @@ class PairDrop {
|
||||||
}
|
}
|
||||||
|
|
||||||
onPwaInstallable(e) {
|
onPwaInstallable(e) {
|
||||||
if (!window.matchMedia('(display-mode: minimal-ui)').matches) {
|
if (!window.matchMedia('(display-mode: standalone)').matches) {
|
||||||
// only display install btn when not installed
|
// only display install btn when not installed
|
||||||
this.$headerInstallBtn.removeAttribute('hidden');
|
this.$headerInstallBtn.removeAttribute('hidden');
|
||||||
this.$headerInstallBtn.addEventListener('click', () => {
|
this.$headerInstallBtn.addEventListener('click', () => {
|
||||||
|
|
|
@ -1082,7 +1082,7 @@ class PeersManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
async _onFilesSelected(message) {
|
async _onFilesSelected(message) {
|
||||||
let files = await mime.addMissingMimeTypesToFiles(message.files);
|
let files = mime.addMissingMimeTypesToFiles([...message.files]);
|
||||||
await this.peers[message.to].requestFileTransfer(files);
|
await this.peers[message.to].requestFileTransfer(files);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1306,9 +1306,8 @@ class FileDigester {
|
||||||
const blob = new Blob(this._buffer)
|
const blob = new Blob(this._buffer)
|
||||||
this._buffer = null;
|
this._buffer = null;
|
||||||
this._callback(new File([blob], this._name, {
|
this._callback(new File([blob], this._name, {
|
||||||
type: this._mime,
|
type: this._mime || "application/octet-stream",
|
||||||
lastModified: new Date().getTime()
|
lastModified: new Date().getTime()
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,15 +201,11 @@ class FooterUI {
|
||||||
this.$discoveryWrapper = $$('footer .discovery-wrapper');
|
this.$discoveryWrapper = $$('footer .discovery-wrapper');
|
||||||
|
|
||||||
this.$displayName.addEventListener('keydown', e => this._onKeyDownDisplayName(e));
|
this.$displayName.addEventListener('keydown', e => this._onKeyDownDisplayName(e));
|
||||||
this.$displayName.addEventListener('keyup', e => this._onKeyUpDisplayName(e));
|
this.$displayName.addEventListener('focus', e => this._onFocusDisplayName(e));
|
||||||
this.$displayName.addEventListener('blur', e => this._saveDisplayName(e.target.innerText));
|
this.$displayName.addEventListener('blur', e => this._onBlurDisplayName(e));
|
||||||
|
|
||||||
Events.on('display-name', e => this._onDisplayName(e.detail.displayName));
|
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));
|
||||||
|
|
||||||
// Load saved display name on page load
|
|
||||||
Events.on('ws-connected', _ => this._loadSavedDisplayName());
|
|
||||||
|
|
||||||
Events.on('evaluate-footer-badges', _ => this._evaluateFooterBadges());
|
Events.on('evaluate-footer-badges', _ => this._evaluateFooterBadges());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,17 +230,20 @@ class FooterUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
async _loadSavedDisplayName() {
|
async _loadSavedDisplayName() {
|
||||||
const displayName = await this._getSavedDisplayName()
|
const displayNameSaved = await this._getSavedDisplayName()
|
||||||
|
|
||||||
if (!displayName) return;
|
if (!displayNameSaved) return;
|
||||||
|
|
||||||
console.log("Retrieved edited display name:", displayName)
|
console.log("Retrieved edited display name:", displayNameSaved)
|
||||||
Events.fire('self-display-name-changed', displayName);
|
Events.fire('self-display-name-changed', displayNameSaved);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDisplayName(displayName){
|
async _onDisplayName(displayNameServer){
|
||||||
// set display name
|
// load saved displayname first to prevent flickering
|
||||||
this.$displayName.setAttribute('placeholder', displayName);
|
await this._loadSavedDisplayName();
|
||||||
|
|
||||||
|
// set original display name as placeholder
|
||||||
|
this.$displayName.setAttribute('placeholder', displayNameServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -259,9 +258,27 @@ class FooterUI {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onKeyUpDisplayName(e) {
|
_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) {
|
||||||
// fix for Firefox inserting a linebreak into div on edit which prevents the placeholder from showing automatically when it is empty
|
// 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 = '';
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
async _saveDisplayName(newDisplayName) {
|
async _saveDisplayName(newDisplayName) {
|
||||||
|
@ -316,65 +333,234 @@ class FooterUI {
|
||||||
|
|
||||||
class BackgroundCanvas {
|
class BackgroundCanvas {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.c = $$('canvas');
|
this.$canvas = $$('canvas');
|
||||||
this.cCtx = this.c.getContext('2d');
|
|
||||||
this.$footer = $$('footer');
|
this.$footer = $$('footer');
|
||||||
|
|
||||||
// redraw canvas
|
this.initAnimation();
|
||||||
Events.on('resize', _ => this.init());
|
|
||||||
Events.on('redraw-canvas', _ => this.init());
|
|
||||||
Events.on('translation-loaded', _ => this.init());
|
|
||||||
|
|
||||||
// ShareMode
|
|
||||||
Events.on('share-mode-changed', e => this.onShareModeChanged(e.detail.active));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fadeIn() {
|
async fadeIn() {
|
||||||
this.c.classList.remove('opacity-0');
|
this.$canvas.classList.remove('opacity-0');
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
initAnimation() {
|
||||||
let oldW = this.w;
|
this.baseColorNormal = '168 168 168';
|
||||||
let oldH = this.h;
|
this.baseColorShareMode = '168 168 255';
|
||||||
let oldOffset = this.offset
|
this.baseOpacityNormal = 0.3;
|
||||||
this.w = document.documentElement.clientWidth;
|
this.baseOpacityShareMode = 0.8;
|
||||||
this.h = document.documentElement.clientHeight;
|
this.speed = 0.5;
|
||||||
this.offset = this.$footer.offsetHeight - 27;
|
this.fps = 60;
|
||||||
if (this.h >= 800) this.offset += 10;
|
|
||||||
|
|
||||||
if (oldW === this.w && oldH === this.h && oldOffset === this.offset) return; // nothing has changed
|
// if browser supports OffscreenCanvas
|
||||||
|
// -> put canvas drawing into serviceworker to unblock main thread
|
||||||
|
// otherwise
|
||||||
|
// -> use main thread
|
||||||
|
let {init, startAnimation, switchAnimation, onShareModeChange} =
|
||||||
|
this.$canvas.transferControlToOffscreen
|
||||||
|
? this.initAnimationOffscreen()
|
||||||
|
: this.initAnimationOnscreen();
|
||||||
|
|
||||||
this.c.width = this.w;
|
init();
|
||||||
this.c.height = this.h;
|
startAnimation();
|
||||||
this.x0 = this.w / 2;
|
|
||||||
this.y0 = this.h - this.offset;
|
|
||||||
this.dw = Math.round(Math.max(this.w, this.h, 1000) / 13);
|
|
||||||
this.baseColor = '165, 165, 165';
|
|
||||||
this.baseOpacity = 0.3;
|
|
||||||
|
|
||||||
this.drawCircles(this.cCtx);
|
// redraw canvas
|
||||||
|
Events.on('resize', _ => init());
|
||||||
|
Events.on('redraw-canvas', _ => init());
|
||||||
|
Events.on('translation-loaded', _ => init());
|
||||||
|
|
||||||
|
// ShareMode
|
||||||
|
Events.on('share-mode-changed', e => onShareModeChange(e.detail.active));
|
||||||
|
|
||||||
|
// Start and stop animation
|
||||||
|
Events.on('background-animation', e => switchAnimation(e.detail.animate))
|
||||||
|
Events.on('offline', _ => switchAnimation(false));
|
||||||
|
Events.on('online', _ => switchAnimation(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
onShareModeChanged(active) {
|
initAnimationOnscreen() {
|
||||||
this.baseColor = active ? '165, 165, 255' : '165, 165, 165';
|
let $canvas = this.$canvas;
|
||||||
this.baseOpacity = active ? 0.5 : 0.3;
|
let $footer = this.$footer;
|
||||||
this.drawCircles(this.cCtx);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
let baseColorNormal = this.baseColorNormal;
|
||||||
|
let baseColorShareMode = this.baseColorShareMode;
|
||||||
|
let baseOpacityNormal = this.baseOpacityNormal;
|
||||||
|
let baseOpacityShareMode = this.baseOpacityShareMode;
|
||||||
|
let speed = this.speed;
|
||||||
|
let fps = this.fps;
|
||||||
|
|
||||||
drawCircle(ctx, radius) {
|
let c;
|
||||||
ctx.beginPath();
|
let cCtx;
|
||||||
ctx.lineWidth = 2;
|
|
||||||
let opacity = Math.max(0, this.baseOpacity * (1 - 1.2 * radius / Math.max(this.w, this.h)));
|
|
||||||
ctx.strokeStyle = `rgba(${this.baseColor}, ${opacity})`;
|
|
||||||
ctx.arc(this.x0, this.y0, radius, 0, 2 * Math.PI);
|
|
||||||
ctx.stroke();
|
|
||||||
}
|
|
||||||
|
|
||||||
drawCircles(ctx) {
|
let x0, y0, w, h, dw, offset;
|
||||||
ctx.clearRect(0, 0, this.w, this.h);
|
|
||||||
for (let i = 0; i < 13; i++) {
|
let startTime;
|
||||||
this.drawCircle(ctx, this.dw * i + 33 + 66);
|
let animate = true;
|
||||||
|
let currentFrame = 0;
|
||||||
|
let lastFrame;
|
||||||
|
let baseColor;
|
||||||
|
let baseOpacity;
|
||||||
|
|
||||||
|
function createCanvas() {
|
||||||
|
c = $canvas;
|
||||||
|
cCtx = c.getContext('2d');
|
||||||
|
|
||||||
|
lastFrame = fps / speed - 1;
|
||||||
|
baseColor = baseColorNormal;
|
||||||
|
baseOpacity = baseOpacityNormal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
initCanvas($footer.offsetHeight, document.documentElement.clientWidth, document.documentElement.clientHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
function initCanvas(footerOffsetHeight, clientWidth, clientHeight) {
|
||||||
|
let oldW = w;
|
||||||
|
let oldH = h;
|
||||||
|
let oldOffset = offset;
|
||||||
|
w = clientWidth;
|
||||||
|
h = clientHeight;
|
||||||
|
offset = footerOffsetHeight - 28;
|
||||||
|
|
||||||
|
if (oldW === w && oldH === h && oldOffset === offset) return; // nothing has changed
|
||||||
|
|
||||||
|
c.width = w;
|
||||||
|
c.height = h;
|
||||||
|
x0 = w / 2;
|
||||||
|
y0 = h - offset;
|
||||||
|
dw = Math.round(Math.min(Math.max(0.6 * w, h)) / 10);
|
||||||
|
|
||||||
|
drawFrame(currentFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
function startAnimation() {
|
||||||
|
startTime = Date.now();
|
||||||
|
animateBg();
|
||||||
|
}
|
||||||
|
|
||||||
|
function switchAnimation(state) {
|
||||||
|
if (!animate && state) {
|
||||||
|
// animation starts again. Set startTime to specific value to prevent frame jump
|
||||||
|
startTime = Date.now() - 1000 * currentFrame / fps;
|
||||||
|
}
|
||||||
|
animate = state;
|
||||||
|
requestAnimationFrame(animateBg);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onShareModeChange(active) {
|
||||||
|
baseColor = active ? baseColorShareMode : baseColorNormal;
|
||||||
|
baseOpacity = active ? baseOpacityShareMode : baseOpacityNormal;
|
||||||
|
drawFrame(currentFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawCircle(ctx, radius) {
|
||||||
|
ctx.lineWidth = 2;
|
||||||
|
|
||||||
|
let opacity = Math.max(0, baseOpacity * (1 - 1.2 * radius / Math.max(w, h)));
|
||||||
|
if (radius > dw * 7) {
|
||||||
|
opacity *= (8 * dw - radius) / dw
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx.setStrokeColor) {
|
||||||
|
// older blink/webkit browsers do not understand opacity in strokeStyle. Use deprecated setStrokeColor
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/strokeStyle#webkitblink-specific_note
|
||||||
|
ctx.setStrokeColor("grey", opacity);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ctx.strokeStyle = `rgb(${baseColor} / ${opacity})`;
|
||||||
|
}
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(x0, y0, radius, 0, 2 * Math.PI);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawCircles(ctx, frame) {
|
||||||
|
ctx.clearRect(0, 0, w, h);
|
||||||
|
for (let i = 7; i >= 0; i--) {
|
||||||
|
drawCircle(ctx, dw * i + speed * dw * frame / fps + 33);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawFrame(frame) {
|
||||||
|
cCtx.clearRect(0, 0, w, h);
|
||||||
|
drawCircles(cCtx, frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
function animateBg() {
|
||||||
|
let now = Date.now();
|
||||||
|
|
||||||
|
if (!animate && currentFrame === lastFrame) {
|
||||||
|
// Animation stopped and cycle finished -> stop drawing frames
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let timeSinceLastFullCycle = (now - startTime) % (1000 / speed);
|
||||||
|
let nextFrame = Math.trunc(fps * timeSinceLastFullCycle / 1000);
|
||||||
|
|
||||||
|
// Only draw frame if it differs from current frame
|
||||||
|
if (nextFrame !== currentFrame) {
|
||||||
|
drawFrame(nextFrame);
|
||||||
|
currentFrame = nextFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
requestAnimationFrame(animateBg);
|
||||||
|
}
|
||||||
|
|
||||||
|
createCanvas();
|
||||||
|
|
||||||
|
return {init, startAnimation, switchAnimation, onShareModeChange};
|
||||||
|
}
|
||||||
|
|
||||||
|
initAnimationOffscreen() {
|
||||||
|
console.log("Use OffscreenCanvas to draw background animation.")
|
||||||
|
|
||||||
|
let baseColorNormal = this.baseColorNormal;
|
||||||
|
let baseColorShareMode = this.baseColorShareMode;
|
||||||
|
let baseOpacityNormal = this.baseOpacityNormal;
|
||||||
|
let baseOpacityShareMode = this.baseOpacityShareMode;
|
||||||
|
let speed = this.speed;
|
||||||
|
let fps = this.fps;
|
||||||
|
let $canvas = this.$canvas;
|
||||||
|
let $footer = this.$footer;
|
||||||
|
|
||||||
|
const offscreen = $canvas.transferControlToOffscreen();
|
||||||
|
const worker = new Worker("scripts/worker/canvas-worker.js");
|
||||||
|
|
||||||
|
function createCanvas() {
|
||||||
|
worker.postMessage({
|
||||||
|
type: "createCanvas",
|
||||||
|
canvas: offscreen,
|
||||||
|
baseColorNormal: baseColorNormal,
|
||||||
|
baseColorShareMode: baseColorShareMode,
|
||||||
|
baseOpacityNormal: baseOpacityNormal,
|
||||||
|
baseOpacityShareMode: baseOpacityShareMode,
|
||||||
|
speed: speed,
|
||||||
|
fps: fps
|
||||||
|
}, [offscreen]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
worker.postMessage({
|
||||||
|
type: "initCanvas",
|
||||||
|
footerOffsetHeight: $footer.offsetHeight,
|
||||||
|
clientWidth: document.documentElement.clientWidth,
|
||||||
|
clientHeight: document.documentElement.clientHeight
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function startAnimation() {
|
||||||
|
worker.postMessage({ type: "startAnimation" });
|
||||||
|
}
|
||||||
|
|
||||||
|
function onShareModeChange(active) {
|
||||||
|
worker.postMessage({ type: "onShareModeChange", active: active });
|
||||||
|
}
|
||||||
|
|
||||||
|
function switchAnimation(animate) {
|
||||||
|
worker.postMessage({ type: "switchAnimation", animate: animate });
|
||||||
|
}
|
||||||
|
|
||||||
|
createCanvas();
|
||||||
|
|
||||||
|
return {init, startAnimation, switchAnimation, onShareModeChange};
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -18,11 +18,12 @@ class PeersUI {
|
||||||
|
|
||||||
this.peers = {};
|
this.peers = {};
|
||||||
|
|
||||||
this.shareMode = {};
|
this.shareMode = {
|
||||||
this.shareMode.active = false;
|
active: false,
|
||||||
this.shareMode.descriptor = "";
|
descriptor: "",
|
||||||
this.shareMode.files = [];
|
files: [],
|
||||||
this.shareMode.text = "";
|
text: ""
|
||||||
|
}
|
||||||
|
|
||||||
Events.on('peer-joined', e => this._onPeerJoined(e.detail));
|
Events.on('peer-joined', e => this._onPeerJoined(e.detail));
|
||||||
Events.on('peer-added', _ => this._evaluateOverflowingPeers());
|
Events.on('peer-added', _ => this._evaluateOverflowingPeers());
|
||||||
|
@ -149,10 +150,17 @@ class PeersUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
_onPeerDisconnected(peerId) {
|
_onPeerDisconnected(peerId) {
|
||||||
|
// Remove peer from UI
|
||||||
const $peer = $(peerId);
|
const $peer = $(peerId);
|
||||||
if (!$peer) return;
|
if (!$peer) return;
|
||||||
$peer.remove();
|
$peer.remove();
|
||||||
this._evaluateOverflowingPeers();
|
this._evaluateOverflowingPeers();
|
||||||
|
|
||||||
|
// If no peer is shown -> start background animation again
|
||||||
|
if ($$('x-peers:empty')) {
|
||||||
|
Events.fire('background-animation', {animate: true});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_onRoomTypeRemoved(peerId, roomType) {
|
_onRoomTypeRemoved(peerId, roomType) {
|
||||||
|
@ -172,31 +180,37 @@ class PeersUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDrop(e) {
|
_onDrop(e) {
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
if (this.shareMode.active || Dialog.anyDialogShown()) return;
|
if (this.shareMode.active || Dialog.anyDialogShown()) return;
|
||||||
|
|
||||||
if (!$$('x-peer') || !$$('x-peer').contains(e.target)) {
|
e.preventDefault();
|
||||||
if (e.dataTransfer.files.length > 0) {
|
|
||||||
Events.fire('activate-share-mode', {files: e.dataTransfer.files});
|
|
||||||
} else {
|
|
||||||
for (let i=0; i<e.dataTransfer.items.length; i++) {
|
|
||||||
if (e.dataTransfer.items[i].type === "text/plain") {
|
|
||||||
e.dataTransfer.items[i].getAsString(text => {
|
|
||||||
Events.fire('activate-share-mode', {text: text});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._onDragEnd();
|
this._onDragEnd();
|
||||||
|
|
||||||
|
if ($$('x-peer') && $$('x-peer').contains(e.target)) return; // dropped on peer
|
||||||
|
|
||||||
|
let files = e.dataTransfer.files;
|
||||||
|
let text = e.dataTransfer.getData("text");
|
||||||
|
|
||||||
|
// convert FileList to Array
|
||||||
|
files = [...files];
|
||||||
|
|
||||||
|
if (files.length > 0) {
|
||||||
|
Events.fire('activate-share-mode', {
|
||||||
|
files: files
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if(text.length > 0) {
|
||||||
|
Events.fire('activate-share-mode', {
|
||||||
|
text: text
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDragOver(e) {
|
_onDragOver(e) {
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
if (this.shareMode.active || Dialog.anyDialogShown()) return;
|
if (this.shareMode.active || Dialog.anyDialogShown()) return;
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
this.$xInstructions.setAttribute('drop-bg', true);
|
this.$xInstructions.setAttribute('drop-bg', true);
|
||||||
this.$xNoPeers.setAttribute('drop-bg', true);
|
this.$xNoPeers.setAttribute('drop-bg', true);
|
||||||
}
|
}
|
||||||
|
@ -211,8 +225,11 @@ class PeersUI {
|
||||||
if (this.shareMode.active || Dialog.anyDialogShown()) return;
|
if (this.shareMode.active || Dialog.anyDialogShown()) return;
|
||||||
|
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
const files = e.clipboardData.files;
|
let files = e.clipboardData.files;
|
||||||
const text = e.clipboardData.getData("Text");
|
let text = e.clipboardData.getData("Text");
|
||||||
|
|
||||||
|
// convert FileList to Array
|
||||||
|
files = [...files];
|
||||||
|
|
||||||
if (files.length > 0) {
|
if (files.length > 0) {
|
||||||
Events.fire('activate-share-mode', {files: files});
|
Events.fire('activate-share-mode', {files: files});
|
||||||
|
@ -274,8 +291,6 @@ class PeersUI {
|
||||||
descriptorInstructions = Localization.getTranslation("instructions.activate-share-mode-shared-file");
|
descriptorInstructions = Localization.getTranslation("instructions.activate-share-mode-shared-file");
|
||||||
}
|
}
|
||||||
|
|
||||||
files = await mime.addMissingMimeTypesToFiles(files);
|
|
||||||
|
|
||||||
if (files[0].type.split('/')[0] === 'image') {
|
if (files[0].type.split('/')[0] === 'image') {
|
||||||
try {
|
try {
|
||||||
let imageUrl = await getThumbnailAsDataUrl(files[0], 80, null, 0.9);
|
let imageUrl = await getThumbnailAsDataUrl(files[0], 80, null, 0.9);
|
||||||
|
@ -391,12 +406,6 @@ class PeersUI {
|
||||||
|
|
||||||
class PeerUI {
|
class PeerUI {
|
||||||
|
|
||||||
static _badgeClassNames = ["badge-room-ip", "badge-room-secret", "badge-room-public-id"];
|
|
||||||
static _shareMode = {
|
|
||||||
active: false,
|
|
||||||
descriptor: ""
|
|
||||||
};
|
|
||||||
|
|
||||||
constructor(peer, connectionHash, shareMode) {
|
constructor(peer, connectionHash, shareMode) {
|
||||||
this.$xInstructions = $$('x-instructions');
|
this.$xInstructions = $$('x-instructions');
|
||||||
this.$xPeers = $$('x-peers');
|
this.$xPeers = $$('x-peers');
|
||||||
|
@ -406,7 +415,7 @@ class PeerUI {
|
||||||
`${connectionHash.substring(0, 4)} ${connectionHash.substring(4, 8)} ${connectionHash.substring(8, 12)} ${connectionHash.substring(12, 16)}`;
|
`${connectionHash.substring(0, 4)} ${connectionHash.substring(4, 8)} ${connectionHash.substring(8, 12)} ${connectionHash.substring(12, 16)}`;
|
||||||
|
|
||||||
// This is needed if the ShareMode is started BEFORE the PeerUI is drawn.
|
// This is needed if the ShareMode is started BEFORE the PeerUI is drawn.
|
||||||
PeerUI._shareMode = shareMode;
|
this._shareMode = shareMode;
|
||||||
|
|
||||||
this._initDom();
|
this._initDom();
|
||||||
|
|
||||||
|
@ -415,11 +424,14 @@ class PeerUI {
|
||||||
|
|
||||||
// ShareMode
|
// ShareMode
|
||||||
Events.on('share-mode-changed', e => this._onShareModeChanged(e.detail.active, e.detail.descriptor));
|
Events.on('share-mode-changed', e => this._onShareModeChanged(e.detail.active, e.detail.descriptor));
|
||||||
|
|
||||||
|
// Stop background animation
|
||||||
|
Events.fire('background-animation', {animate: false});
|
||||||
}
|
}
|
||||||
|
|
||||||
html() {
|
html() {
|
||||||
let title= PeerUI._shareMode.active
|
let title= this._shareMode.active
|
||||||
? Localization.getTranslation("peer-ui.click-to-send-share-mode", null, {descriptor: PeerUI._shareMode.descriptor})
|
? Localization.getTranslation("peer-ui.click-to-send-share-mode", null, {descriptor: this._shareMode.descriptor})
|
||||||
: Localization.getTranslation("peer-ui.click-to-send");
|
: Localization.getTranslation("peer-ui.click-to-send");
|
||||||
|
|
||||||
this.$el.innerHTML = `
|
this.$el.innerHTML = `
|
||||||
|
@ -482,8 +494,8 @@ class PeerUI {
|
||||||
|
|
||||||
_onShareModeChanged(active = false, descriptor = "") {
|
_onShareModeChanged(active = false, descriptor = "") {
|
||||||
// This is needed if the ShareMode is started AFTER the PeerUI is drawn.
|
// This is needed if the ShareMode is started AFTER the PeerUI is drawn.
|
||||||
PeerUI._shareMode.active = active;
|
this._shareMode.active = active;
|
||||||
PeerUI._shareMode.descriptor = descriptor;
|
this._shareMode.descriptor = descriptor;
|
||||||
|
|
||||||
this._evaluateShareMode();
|
this._evaluateShareMode();
|
||||||
this._bindListeners();
|
this._bindListeners();
|
||||||
|
@ -491,12 +503,12 @@ class PeerUI {
|
||||||
|
|
||||||
_evaluateShareMode() {
|
_evaluateShareMode() {
|
||||||
let title;
|
let title;
|
||||||
if (!PeerUI._shareMode.active) {
|
if (!this._shareMode.active) {
|
||||||
title = Localization.getTranslation("peer-ui.click-to-send");
|
title = Localization.getTranslation("peer-ui.click-to-send");
|
||||||
this.$input.removeAttribute('disabled');
|
this.$input.removeAttribute('disabled');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
title = Localization.getTranslation("peer-ui.click-to-send-share-mode", null, {descriptor: PeerUI._shareMode.descriptor});
|
title = Localization.getTranslation("peer-ui.click-to-send-share-mode", null, {descriptor: this._shareMode.descriptor});
|
||||||
this.$input.setAttribute('disabled', true);
|
this.$input.setAttribute('disabled', true);
|
||||||
}
|
}
|
||||||
this.$label.setAttribute('title', title);
|
this.$label.setAttribute('title', title);
|
||||||
|
@ -517,7 +529,7 @@ class PeerUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
_bindListeners() {
|
_bindListeners() {
|
||||||
if(!PeerUI._shareMode.active) {
|
if(!this._shareMode.active) {
|
||||||
// Remove Events Share mode
|
// Remove Events Share mode
|
||||||
this.$el.removeEventListener('pointerdown', this._callbackPointerDown);
|
this.$el.removeEventListener('pointerdown', this._callbackPointerDown);
|
||||||
|
|
||||||
|
@ -590,6 +602,9 @@ class PeerUI {
|
||||||
_onFilesSelected(e) {
|
_onFilesSelected(e) {
|
||||||
const $input = e.target;
|
const $input = e.target;
|
||||||
const files = $input.files;
|
const files = $input.files;
|
||||||
|
|
||||||
|
if (files.length === 0) return;
|
||||||
|
|
||||||
Events.fire('files-selected', {
|
Events.fire('files-selected', {
|
||||||
files: files,
|
files: files,
|
||||||
to: this._peer.id
|
to: this._peer.id
|
||||||
|
@ -630,29 +645,28 @@ class PeerUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDrop(e) {
|
_onDrop(e) {
|
||||||
|
if (this._shareMode.active || Dialog.anyDialogShown()) return;
|
||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
if (PeerUI._shareMode.active || Dialog.anyDialogShown()) return;
|
|
||||||
|
|
||||||
if (e.dataTransfer.files.length > 0) {
|
|
||||||
Events.fire('files-selected', {
|
|
||||||
files: e.dataTransfer.files,
|
|
||||||
to: this._peer.id
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
for (let i=0; i<e.dataTransfer.items.length; i++) {
|
|
||||||
if (e.dataTransfer.items[i].type === "text/plain") {
|
|
||||||
e.dataTransfer.items[i].getAsString(text => {
|
|
||||||
Events.fire('send-text', {
|
|
||||||
text: text,
|
|
||||||
to: this._peer.id
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this._onDragEnd();
|
this._onDragEnd();
|
||||||
|
|
||||||
|
const peerId = this._peer.id;
|
||||||
|
const files = e.dataTransfer.files;
|
||||||
|
const text = e.dataTransfer.getData("text");
|
||||||
|
|
||||||
|
if (files.length > 0) {
|
||||||
|
Events.fire('files-selected', {
|
||||||
|
files: files,
|
||||||
|
to: peerId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (text.length > 0) {
|
||||||
|
Events.fire('send-text', {
|
||||||
|
text: text,
|
||||||
|
to: peerId
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDragOver() {
|
_onDragOver() {
|
||||||
|
@ -859,7 +873,9 @@ class ReceiveDialog extends Dialog {
|
||||||
|
|
||||||
const fileName = files[0].name;
|
const fileName = files[0].name;
|
||||||
const fileNameSplit = fileName.split('.');
|
const fileNameSplit = fileName.split('.');
|
||||||
const fileExtension = '.' + fileNameSplit[fileNameSplit.length - 1];
|
const fileExtension = fileNameSplit.length > 1
|
||||||
|
? '.' + fileNameSplit[fileNameSplit.length - 1]
|
||||||
|
: '';
|
||||||
this.$fileStem.innerText = fileName.substring(0, fileName.length - fileExtension.length);
|
this.$fileStem.innerText = fileName.substring(0, fileName.length - fileExtension.length);
|
||||||
this.$fileExtension.innerText = fileExtension;
|
this.$fileExtension.innerText = fileExtension;
|
||||||
this.$fileSize.innerText = this._formatFileSize(totalSize);
|
this.$fileSize.innerText = this._formatFileSize(totalSize);
|
||||||
|
@ -1896,6 +1912,8 @@ class SendTextDialog extends Dialog {
|
||||||
this.$submit = this.$el.querySelector('button[type="submit"]');
|
this.$submit = this.$el.querySelector('button[type="submit"]');
|
||||||
this.$form.addEventListener('submit', e => this._onSubmit(e));
|
this.$form.addEventListener('submit', e => this._onSubmit(e));
|
||||||
this.$text.addEventListener('input', _ => this._onInput());
|
this.$text.addEventListener('input', _ => this._onInput());
|
||||||
|
this.$text.addEventListener('paste', e => this._onPaste(e));
|
||||||
|
this.$text.addEventListener('drop', e => this._onDrop(e));
|
||||||
|
|
||||||
Events.on('text-recipient', e => this._onRecipient(e.detail.peerId, e.detail.deviceName));
|
Events.on('text-recipient', e => this._onRecipient(e.detail.peerId, e.detail.deviceName));
|
||||||
Events.on('keydown', e => this._onKeyDown(e));
|
Events.on('keydown', e => this._onKeyDown(e));
|
||||||
|
@ -1914,6 +1932,40 @@ class SendTextDialog extends Dialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _onDrop(e) {
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
const text = e.dataTransfer.getData("text");
|
||||||
|
const selection = window.getSelection();
|
||||||
|
|
||||||
|
if (selection.rangeCount) {
|
||||||
|
selection.deleteFromDocument();
|
||||||
|
selection.getRangeAt(0).insertNode(document.createTextNode(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
this._onInput();
|
||||||
|
}
|
||||||
|
|
||||||
|
async _onPaste(e) {
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
const text = (e.clipboardData || window.clipboardData).getData('text');
|
||||||
|
const selection = window.getSelection();
|
||||||
|
|
||||||
|
if (selection.rangeCount) {
|
||||||
|
selection.deleteFromDocument();
|
||||||
|
const textNode = document.createTextNode(text);
|
||||||
|
const range = document.createRange();
|
||||||
|
range.setStart(textNode, textNode.length);
|
||||||
|
range.collapse(true);
|
||||||
|
selection.getRangeAt(0).insertNode(textNode);
|
||||||
|
selection.removeAllRanges();
|
||||||
|
selection.addRange(range);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._onInput();
|
||||||
|
}
|
||||||
|
|
||||||
_textEmpty() {
|
_textEmpty() {
|
||||||
return !this.$text.innerText || this.$text.innerText === "\n";
|
return !this.$text.innerText || this.$text.innerText === "\n";
|
||||||
}
|
}
|
||||||
|
@ -1933,7 +1985,7 @@ class SendTextDialog extends Dialog {
|
||||||
_onRecipient(peerId, deviceName) {
|
_onRecipient(peerId, deviceName) {
|
||||||
this.correspondingPeerId = peerId;
|
this.correspondingPeerId = peerId;
|
||||||
this.$peerDisplayName.innerText = deviceName;
|
this.$peerDisplayName.innerText = deviceName;
|
||||||
this.$peerDisplayName.classList.remove(...PeerUI._badgeClassNames);
|
this.$peerDisplayName.classList.remove("badge-room-ip", "badge-room-secret", "badge-room-public-id");
|
||||||
this.$peerDisplayName.classList.add($(peerId).ui._badgeClassName());
|
this.$peerDisplayName.classList.add($(peerId).ui._badgeClassName());
|
||||||
|
|
||||||
this.show();
|
this.show();
|
||||||
|
@ -1976,6 +2028,7 @@ class ReceiveTextDialog extends Dialog {
|
||||||
|
|
||||||
this.$displayName = this.$el.querySelector('.display-name');
|
this.$displayName = this.$el.querySelector('.display-name');
|
||||||
this._receiveTextQueue = [];
|
this._receiveTextQueue = [];
|
||||||
|
this._hideTimeout = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
selectionEmpty() {
|
selectionEmpty() {
|
||||||
|
@ -1997,57 +2050,102 @@ class ReceiveTextDialog extends Dialog {
|
||||||
window.blop.play();
|
window.blop.play();
|
||||||
this._receiveTextQueue.push({text: text, peerId: peerId});
|
this._receiveTextQueue.push({text: text, peerId: peerId});
|
||||||
this._setDocumentTitleMessages();
|
this._setDocumentTitleMessages();
|
||||||
if (this.isShown()) return;
|
changeFavicon("images/favicon-96x96-notification.png");
|
||||||
|
|
||||||
|
if (this.isShown() || this._hideTimeout) return;
|
||||||
|
|
||||||
this._dequeueRequests();
|
this._dequeueRequests();
|
||||||
}
|
}
|
||||||
|
|
||||||
_dequeueRequests() {
|
_dequeueRequests() {
|
||||||
if (!this._receiveTextQueue.length) return;
|
this._setDocumentTitleMessages();
|
||||||
|
changeFavicon("images/favicon-96x96-notification.png");
|
||||||
|
|
||||||
let {text, peerId} = this._receiveTextQueue.shift();
|
let {text, peerId} = this._receiveTextQueue.shift();
|
||||||
this._showReceiveTextDialog(text, peerId);
|
this._showReceiveTextDialog(text, peerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
_showReceiveTextDialog(text, peerId) {
|
_showReceiveTextDialog(text, peerId) {
|
||||||
this.$displayName.innerText = $(peerId).ui._displayName();
|
this.$displayName.innerText = $(peerId).ui._displayName();
|
||||||
this.$displayName.classList.remove(...PeerUI._badgeClassNames);
|
this.$displayName.classList.remove("badge-room-ip", "badge-room-secret", "badge-room-public-id");
|
||||||
this.$displayName.classList.add($(peerId).ui._badgeClassName());
|
this.$displayName.classList.add($(peerId).ui._badgeClassName());
|
||||||
|
|
||||||
this.$text.innerText = text;
|
this.$text.innerText = text;
|
||||||
this.$text.classList.remove('text-center');
|
|
||||||
|
|
||||||
// Beautify text if text is short
|
// Beautify text if text is not too long
|
||||||
if (text.length < 2000) {
|
if (this.$text.innerText.length <= 300000) {
|
||||||
// replace URLs with actual links
|
// Hacky workaround to replace URLs with link nodes in all cases
|
||||||
this.$text.innerHTML = this.$text.innerHTML
|
// 1. Use text variable, find all valid URLs via regex and replace URLs with placeholder
|
||||||
.replace(/(^|<br>|\s|")((https?:\/\/|www.)(([a-z]|[A-Z]|[0-9]|[\-_~:\/?#\[\]@!$&'()*+,;=%]){2,}\.)(([a-z]|[A-Z]|[0-9]|[\-_~:\/?#\[\]@!$&'()*+,;=%.]){2,}))/g,
|
// 2. Use html variable, find placeholders with regex and replace them with link nodes
|
||||||
(match, whitespace, url) => {
|
|
||||||
let link = url;
|
|
||||||
|
|
||||||
// prefix www.example.com with http protocol to prevent it from being a relative link
|
let $textShadow = document.createElement('div');
|
||||||
if (link.startsWith('www')) {
|
$textShadow.innerText = text;
|
||||||
link = "http://" + link
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if link is valid
|
let linkNodes = {};
|
||||||
if (isUrlValid(link)) {
|
let searchHTML = $textShadow.innerHTML;
|
||||||
return `${whitespace}<a href="${link}" target="_blank">${url}</a>`;
|
const p = "@";
|
||||||
}
|
const pRgx = new RegExp(`${p}\\d+`, 'g');
|
||||||
else {
|
let occP = searchHTML.match(pRgx) || [];
|
||||||
return match;
|
|
||||||
}
|
let m = 0;
|
||||||
|
|
||||||
|
const chrs = `a-zA-Z0-9áàäčçđéèêŋńñóòôöšŧüžæøåëìíîïðùúýþćěłřśţźǎǐǒǔǥǧǩǯəʒâûœÿãõāēīōūăąĉċďĕėęĝğġģĥħĩĭįıĵķĸĺļľņňŏőŕŗŝşťũŭůűųŵŷżאבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ`; // allowed chars in domain names
|
||||||
|
const rgxWhitespace = `(^|\\n|\\s)`;
|
||||||
|
const rgxScheme = `(https?:\\/\\/)`
|
||||||
|
const rgxSchemeMail = `(mailto:)`
|
||||||
|
const rgxUserinfo = `(?:(?:[${chrs}.%]*(?::[${chrs}.%]*)?)@)`;
|
||||||
|
const rgxHost = `(?:(?:[${chrs}](?:[${chrs}-]{0,61}[${chrs}])?\\.)+[${chrs}][${chrs}-]{0,61}[${chrs}])`;
|
||||||
|
const rgxPort = `(:\\d*)`;
|
||||||
|
const rgxPath = `(?:(?:\\/[${chrs}\\-\\._~!$&'\\(\\)\\*\\+,;=:@%]*)*)`;
|
||||||
|
const rgxQueryAndFragment = `(\\?[${chrs}\\-_~:\\/#\\[\\]@!$&'\\(\\)*+,;=%.]*)`;
|
||||||
|
const rgxUrl = `(${rgxScheme}?${rgxHost}${rgxPort}?${rgxPath}${rgxQueryAndFragment}?)`;
|
||||||
|
const rgxMail = `(${rgxSchemeMail}${rgxUserinfo}${rgxHost})`;
|
||||||
|
const rgxUrlAll = new RegExp(`${rgxWhitespace}${rgxUrl}`, 'g');
|
||||||
|
const rgxMailAll = new RegExp(`${rgxWhitespace}${rgxMail}`, 'g');
|
||||||
|
|
||||||
|
const replaceMatchWithPlaceholder = function(match, whitespace, url, scheme) {
|
||||||
|
let link = url;
|
||||||
|
|
||||||
|
// prefix www.example.com with http scheme to prevent it from being a relative link
|
||||||
|
if (!scheme && link.startsWith('www')) {
|
||||||
|
link = "http://" + link
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isUrlValid(link)) {
|
||||||
|
// link is not valid -> do not replace
|
||||||
|
return match;
|
||||||
|
}
|
||||||
|
|
||||||
|
// link is valid -> replace with link node placeholder
|
||||||
|
// find linkNodePlaceholder that is not yet present in text node
|
||||||
|
m++;
|
||||||
|
while (occP.includes(`${p}${m}`)) {
|
||||||
|
m++;
|
||||||
|
}
|
||||||
|
let linkNodePlaceholder = `${p}${m}`;
|
||||||
|
|
||||||
|
// add linkNodePlaceholder to text node and save a reference to linkNodes object
|
||||||
|
linkNodes[linkNodePlaceholder] = `<a href="${link}" target="_blank" rel="noreferrer">${url}</a>`;
|
||||||
|
return `${whitespace}${linkNodePlaceholder}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
text = text.replace(rgxUrlAll, replaceMatchWithPlaceholder);
|
||||||
|
$textShadow.innerText = text.replace(rgxMailAll, replaceMatchWithPlaceholder);
|
||||||
|
|
||||||
|
|
||||||
|
this.$text.innerHTML = $textShadow.innerHTML.replace(pRgx,
|
||||||
|
(m) => {
|
||||||
|
let urlNode = linkNodes[m];
|
||||||
|
return urlNode ? urlNode : m;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this._evaluateOverflowing(this.$text);
|
this._evaluateOverflowing(this.$text);
|
||||||
|
|
||||||
this._setDocumentTitleMessages();
|
|
||||||
|
|
||||||
changeFavicon("images/favicon-96x96-notification.png");
|
|
||||||
this.show();
|
this.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
_setDocumentTitleMessages() {
|
_setDocumentTitleMessages() {
|
||||||
document.title = !this._receiveTextQueue.length
|
document.title = this._receiveTextQueue.length <= 1
|
||||||
? `${ Localization.getTranslation("document-titles.message-received") } - PairDrop`
|
? `${ Localization.getTranslation("document-titles.message-received") } - PairDrop`
|
||||||
: `${ Localization.getTranslation("document-titles.message-received-plural", null, {count: this._receiveTextQueue.length + 1}) } - PairDrop`;
|
: `${ Localization.getTranslation("document-titles.message-received-plural", null, {count: this._receiveTextQueue.length + 1}) } - PairDrop`;
|
||||||
}
|
}
|
||||||
|
@ -2067,9 +2165,16 @@ class ReceiveTextDialog extends Dialog {
|
||||||
|
|
||||||
hide() {
|
hide() {
|
||||||
super.hide();
|
super.hide();
|
||||||
setTimeout(() => {
|
|
||||||
this._dequeueRequests();
|
// If queue is empty -> clear text field | else -> open next message
|
||||||
this.$text.innerHTML = "";
|
this._hideTimeout = setTimeout(() => {
|
||||||
|
if (!this._receiveTextQueue.length) {
|
||||||
|
this.$text.innerHTML = "";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this._dequeueRequests();
|
||||||
|
}
|
||||||
|
this._hideTimeout = null;
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2299,7 +2404,7 @@ class Base64Dialog extends Dialog {
|
||||||
class AboutUI {
|
class AboutUI {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.$donationBtn = $('donation-btn');
|
this.$donationBtn = $('donation-btn');
|
||||||
this.$twitterBtn = $('twitter-btn');
|
this.$twitterBtn = $('x-twitter-btn');
|
||||||
this.$mastodonBtn = $('mastodon-btn');
|
this.$mastodonBtn = $('mastodon-btn');
|
||||||
this.$blueskyBtn = $('bluesky-btn');
|
this.$blueskyBtn = $('bluesky-btn');
|
||||||
this.$customBtn = $('custom-btn');
|
this.$customBtn = $('custom-btn');
|
||||||
|
|
|
@ -392,24 +392,25 @@ const mime = (() => {
|
||||||
"vob": "video/x-ms-vob",
|
"vob": "video/x-ms-vob",
|
||||||
"wmv": "video/x-ms-wmv",
|
"wmv": "video/x-ms-wmv",
|
||||||
"avi": "video/x-msvideo",
|
"avi": "video/x-msvideo",
|
||||||
"*": "video/x-sgi-movie"
|
"*": "video/x-sgi-movie",
|
||||||
|
"kdbx": "application/x-keepass2"
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
async guessMimeByFilename(filename) {
|
guessMimeByFilename(filename) {
|
||||||
const split = filename.split('.');
|
const split = filename.split('.');
|
||||||
if (split.length === 1) {
|
if (split.length === 1) {
|
||||||
// Filename does not include suffix
|
// Filename does not include suffix
|
||||||
return "";
|
return false;
|
||||||
}
|
}
|
||||||
const suffix = split[split.length - 1].toLowerCase();
|
const suffix = split[split.length - 1].toLowerCase();
|
||||||
return suffixToMimeMap[suffix] || "";
|
return suffixToMimeMap[suffix];
|
||||||
},
|
},
|
||||||
async addMissingMimeTypesToFiles(files) {
|
addMissingMimeTypesToFiles(files) {
|
||||||
// if filetype is empty guess via suffix otherwise leave unchanged
|
// if filetype is empty guess via suffix otherwise leave unchanged
|
||||||
for (let i = 0; i < files.length; i++) {
|
for (let i = 0; i < files.length; i++) {
|
||||||
if (!files[i].type) {
|
if (!files[i].type) {
|
||||||
files[i] = new File([files[i]], files[i].name, {type: await mime.guessMimeByFilename(files[i].name) || ""});
|
files[i] = new File([files[i]], files[i].name, {type: mime.guessMimeByFilename(files[i].name) || "application/octet-stream"});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return files;
|
return files;
|
||||||
|
@ -477,13 +478,16 @@ function getThumbnailAsDataUrl(file, width = undefined, height = undefined, qual
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
if (file.type === "image/heif" || file.type === "image/heic") {
|
if (file.type === "image/heif" || file.type === "image/heic") {
|
||||||
// browsers can't show heic files --> convert to jpeg before creating thumbnail
|
// hotfix: Converting heic images taken on iOS 18 crashes page. Waiting for PR #350
|
||||||
let blob = await fileToBlob(file);
|
reject(new Error(`Hotfix: Converting of HEIC/HEIF images currently disabled.`));
|
||||||
file = await heic2any({
|
return;
|
||||||
blob,
|
// // browsers can't show heic files --> convert to jpeg before creating thumbnail
|
||||||
toType: "image/jpeg",
|
// let blob = await fileToBlob(file);
|
||||||
quality: quality
|
// file = await heic2any({
|
||||||
});
|
// blob,
|
||||||
|
// toType: "image/jpeg",
|
||||||
|
// quality: quality
|
||||||
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
let imageUrl = URL.createObjectURL(file);
|
let imageUrl = URL.createObjectURL(file);
|
||||||
|
@ -587,7 +591,7 @@ async function decodeBase64Text(base64) {
|
||||||
|
|
||||||
function isUrlValid(url) {
|
function isUrlValid(url) {
|
||||||
try {
|
try {
|
||||||
let urlObj = new URL(url);
|
new URL(url);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
self.onmessage = (e) => {
|
||||||
|
switch (e.data.type) {
|
||||||
|
case "createCanvas": createCanvas(e.data);
|
||||||
|
break;
|
||||||
|
case "initCanvas": initCanvas(e.data.footerOffsetHeight, e.data.clientWidth, e.data.clientHeight);
|
||||||
|
break;
|
||||||
|
case "startAnimation": startAnimation();
|
||||||
|
break;
|
||||||
|
case "onShareModeChange": onShareModeChange(e.data.active);
|
||||||
|
break;
|
||||||
|
case "switchAnimation": switchAnimation(e.data.animate);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let baseColorNormal;
|
||||||
|
let baseColorShareMode;
|
||||||
|
let baseOpacityNormal;
|
||||||
|
let baseOpacityShareMode;
|
||||||
|
let speed;
|
||||||
|
let fps;
|
||||||
|
|
||||||
|
let c;
|
||||||
|
let cCtx;
|
||||||
|
|
||||||
|
let x0, y0, w, h, dw, offset;
|
||||||
|
|
||||||
|
let startTime;
|
||||||
|
let animate = true;
|
||||||
|
let currentFrame = 0;
|
||||||
|
let lastFrame;
|
||||||
|
let baseColor;
|
||||||
|
let baseOpacity;
|
||||||
|
|
||||||
|
function createCanvas(data) {
|
||||||
|
baseColorNormal = data.baseColorNormal;
|
||||||
|
baseColorShareMode = data.baseColorShareMode;
|
||||||
|
baseOpacityNormal = data.baseOpacityNormal;
|
||||||
|
baseOpacityShareMode = data.baseOpacityShareMode;
|
||||||
|
speed = data.speed;
|
||||||
|
fps = data.fps;
|
||||||
|
|
||||||
|
c = data.canvas;
|
||||||
|
cCtx = c.getContext("2d");
|
||||||
|
|
||||||
|
lastFrame = fps / speed - 1;
|
||||||
|
baseColor = baseColorNormal;
|
||||||
|
baseOpacity = baseOpacityNormal;
|
||||||
|
}
|
||||||
|
|
||||||
|
function initCanvas(footerOffsetHeight, clientWidth, clientHeight) {
|
||||||
|
let oldW = w;
|
||||||
|
let oldH = h;
|
||||||
|
let oldOffset = offset;
|
||||||
|
w = clientWidth;
|
||||||
|
h = clientHeight;
|
||||||
|
offset = footerOffsetHeight - 28;
|
||||||
|
|
||||||
|
if (oldW === w && oldH === h && oldOffset === offset) return; // nothing has changed
|
||||||
|
|
||||||
|
c.width = w;
|
||||||
|
c.height = h;
|
||||||
|
x0 = w / 2;
|
||||||
|
y0 = h - offset;
|
||||||
|
dw = Math.round(Math.min(Math.max(0.6 * w, h)) / 10);
|
||||||
|
|
||||||
|
drawFrame(currentFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
function startAnimation() {
|
||||||
|
startTime = Date.now();
|
||||||
|
animateBg();
|
||||||
|
}
|
||||||
|
|
||||||
|
function switchAnimation(state) {
|
||||||
|
if (!animate && state) {
|
||||||
|
// animation starts again. Set startTime to specific value to prevent frame jump
|
||||||
|
startTime = Date.now() - 1000 * currentFrame / fps;
|
||||||
|
}
|
||||||
|
animate = state;
|
||||||
|
requestAnimationFrame(animateBg);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onShareModeChange(active) {
|
||||||
|
baseColor = active ? baseColorShareMode : baseColorNormal;
|
||||||
|
baseOpacity = active ? baseOpacityShareMode : baseOpacityNormal;
|
||||||
|
drawFrame(currentFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawCircle(ctx, radius) {
|
||||||
|
ctx.lineWidth = 2;
|
||||||
|
|
||||||
|
let opacity = Math.max(0, baseOpacity * (1 - 1.2 * radius / Math.max(w, h)));
|
||||||
|
if (radius > dw * 7) {
|
||||||
|
opacity *= (8 * dw - radius) / dw
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx.setStrokeColor) {
|
||||||
|
// older blink/webkit based browsers do not understand opacity in strokeStyle. Use deprecated setStrokeColor instead
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/strokeStyle#webkitblink-specific_note
|
||||||
|
ctx.setStrokeColor("grey", opacity);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ctx.strokeStyle = `rgb(${baseColor} / ${opacity})`;
|
||||||
|
}
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(x0, y0, radius, 0, 2 * Math.PI);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawCircles(ctx, frame) {
|
||||||
|
ctx.clearRect(0, 0, w, h);
|
||||||
|
for (let i = 7; i >= 0; i--) {
|
||||||
|
drawCircle(ctx, dw * i + speed * dw * frame / fps + 33);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawFrame(frame) {
|
||||||
|
cCtx.clearRect(0, 0, w, h);
|
||||||
|
drawCircles(cCtx, frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
function animateBg() {
|
||||||
|
let now = Date.now();
|
||||||
|
|
||||||
|
if (!animate && currentFrame === lastFrame) {
|
||||||
|
// Animation stopped and cycle finished -> stop drawing frames
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let timeSinceLastFullCycle = (now - startTime) % (1000 / speed);
|
||||||
|
let nextFrame = Math.trunc(fps * timeSinceLastFullCycle / 1000);
|
||||||
|
|
||||||
|
// Only draw frame if it differs from current frame
|
||||||
|
if (nextFrame !== currentFrame) {
|
||||||
|
drawFrame(nextFrame);
|
||||||
|
currentFrame = nextFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
requestAnimationFrame(animateBg);
|
||||||
|
}
|
|
@ -1,22 +1,24 @@
|
||||||
const cacheVersion = 'v1.10.6';
|
const cacheVersion = 'v1.11.2';
|
||||||
const cacheTitle = `pairdrop-cache-${cacheVersion}`;
|
const cacheTitle = `pairdrop-cache-${cacheVersion}`;
|
||||||
const forceFetch = false; // FOR DEVELOPMENT: Set to true to always update assets instead of using cached versions
|
|
||||||
const relativePathsToCache = [
|
const relativePathsToCache = [
|
||||||
'./',
|
'./',
|
||||||
'index.html',
|
'index.html',
|
||||||
'manifest.json',
|
'manifest.json',
|
||||||
'styles/styles-main.css',
|
'styles/styles-main.css',
|
||||||
'styles/styles-deferred.css',
|
'styles/styles-deferred.css',
|
||||||
|
'scripts/browser-tabs-connector.js',
|
||||||
'scripts/localization.js',
|
'scripts/localization.js',
|
||||||
'scripts/main.js',
|
'scripts/main.js',
|
||||||
'scripts/network.js',
|
'scripts/network.js',
|
||||||
'scripts/no-sleep.min.js',
|
|
||||||
'scripts/persistent-storage.js',
|
'scripts/persistent-storage.js',
|
||||||
'scripts/qr-code.min.js',
|
|
||||||
'scripts/ui.js',
|
'scripts/ui.js',
|
||||||
'scripts/ui-main.js',
|
'scripts/ui-main.js',
|
||||||
'scripts/util.js',
|
'scripts/util.js',
|
||||||
'scripts/zip.min.js',
|
'scripts/worker/canvas-worker.js',
|
||||||
|
'scripts/libs/heic2any.min.js',
|
||||||
|
'scripts/libs/no-sleep.min.js',
|
||||||
|
'scripts/libs/qr-code.min.js',
|
||||||
|
'scripts/libs/zip.min.js',
|
||||||
'sounds/blop.mp3',
|
'sounds/blop.mp3',
|
||||||
'sounds/blop.ogg',
|
'sounds/blop.ogg',
|
||||||
'images/favicon-96x96.png',
|
'images/favicon-96x96.png',
|
||||||
|
@ -26,37 +28,57 @@ const relativePathsToCache = [
|
||||||
'images/android-chrome-512x512.png',
|
'images/android-chrome-512x512.png',
|
||||||
'images/android-chrome-512x512-maskable.png',
|
'images/android-chrome-512x512-maskable.png',
|
||||||
'images/apple-touch-icon.png',
|
'images/apple-touch-icon.png',
|
||||||
|
'fonts/OpenSans/static/OpenSans-Medium.ttf',
|
||||||
'lang/ar.json',
|
'lang/ar.json',
|
||||||
|
'lang/be.json',
|
||||||
|
'lang/bg.json',
|
||||||
'lang/ca.json',
|
'lang/ca.json',
|
||||||
|
'lang/cs.json',
|
||||||
|
'lang/da.json',
|
||||||
'lang/de.json',
|
'lang/de.json',
|
||||||
'lang/en.json',
|
'lang/en.json',
|
||||||
'lang/es.json',
|
'lang/es.json',
|
||||||
|
'lang/et.json',
|
||||||
|
'lang/eu.json',
|
||||||
|
'lang/fa.json',
|
||||||
'lang/fr.json',
|
'lang/fr.json',
|
||||||
|
'lang/he.json',
|
||||||
|
'lang/hu.json',
|
||||||
'lang/id.json',
|
'lang/id.json',
|
||||||
'lang/it.json',
|
'lang/it.json',
|
||||||
'lang/ja.json',
|
'lang/ja.json',
|
||||||
'lang/kn.json',
|
'lang/kn.json',
|
||||||
|
'lang/ko.json',
|
||||||
'lang/nb.json',
|
'lang/nb.json',
|
||||||
'lang/nl.json',
|
'lang/nl.json',
|
||||||
|
'lang/nn.json',
|
||||||
|
'lang/pl.json',
|
||||||
'lang/pt-BR.json',
|
'lang/pt-BR.json',
|
||||||
'lang/ro.json',
|
'lang/ro.json',
|
||||||
'lang/ru.json',
|
'lang/ru.json',
|
||||||
|
'lang/sk.json',
|
||||||
|
'lang/ta.json',
|
||||||
'lang/tr.json',
|
'lang/tr.json',
|
||||||
'lang/zh-CN.json'
|
'lang/uk.json',
|
||||||
|
'lang/zh-CN.json',
|
||||||
|
'lang/zh-HK.json',
|
||||||
|
'lang/zh-TW.json'
|
||||||
];
|
];
|
||||||
const relativePathsNotToCache = [
|
const relativePathsNotToCache = [
|
||||||
'config'
|
'config'
|
||||||
]
|
]
|
||||||
|
|
||||||
self.addEventListener('install', function(event) {
|
self.addEventListener('install', function(event) {
|
||||||
// Perform install steps
|
// Perform install steps
|
||||||
|
console.log("Cache files for sw:", cacheVersion);
|
||||||
event.waitUntil(
|
event.waitUntil(
|
||||||
caches.open(cacheTitle)
|
caches.open(cacheTitle)
|
||||||
.then(function(cache) {
|
.then(function(cache) {
|
||||||
return cache
|
return cache
|
||||||
.addAll(relativePathsToCache)
|
.addAll(relativePathsToCache)
|
||||||
.then(_ => {
|
.then(_ => {
|
||||||
console.log('All files cached.');
|
console.log('All files cached for sw:', cacheVersion);
|
||||||
|
self.skipWaiting();
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
@ -66,20 +88,25 @@ self.addEventListener('install', function(event) {
|
||||||
const fromNetwork = (request, timeout) =>
|
const fromNetwork = (request, timeout) =>
|
||||||
new Promise((resolve, reject) => {
|
new Promise((resolve, reject) => {
|
||||||
const timeoutId = setTimeout(reject, timeout);
|
const timeoutId = setTimeout(reject, timeout);
|
||||||
fetch(request)
|
fetch(request, {cache: "no-store"})
|
||||||
.then(response => {
|
.then(response => {
|
||||||
|
if (response.redirected) {
|
||||||
|
throw new Error("Fetch is redirect. Abort usage and cache!");
|
||||||
|
}
|
||||||
|
|
||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
resolve(response);
|
resolve(response);
|
||||||
|
|
||||||
|
// Prevent requests that are in relativePathsNotToCache from being cached
|
||||||
if (doNotCacheRequest(request)) return;
|
if (doNotCacheRequest(request)) return;
|
||||||
|
|
||||||
update(request)
|
updateCache(request)
|
||||||
.then(() => console.log("Cache successfully updated for", request.url))
|
.then(() => console.log("Cache successfully updated for", request.url))
|
||||||
.catch(reason => console.log("Cache could not be updated for", request.url, "Reason:", reason));
|
.catch(err => console.log("Cache could not be updated for", request.url, err));
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
// Handle any errors that occurred during the fetch
|
// Handle any errors that occurred during the fetch
|
||||||
console.error(`Could not fetch ${request.url}. Are you online?`);
|
console.error(`Could not fetch ${request.url}.`);
|
||||||
reject(error);
|
reject(error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -101,16 +128,16 @@ const doNotCacheRequest = request => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// cache the current page to make it available for offline
|
// cache the current page to make it available for offline
|
||||||
const update = request => new Promise((resolve, reject) => {
|
const updateCache = request => new Promise((resolve, reject) => {
|
||||||
if (doNotCacheRequest(request)) {
|
|
||||||
reject("Url is specifically prevented from being cached in the serviceworker.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
caches
|
caches
|
||||||
.open(cacheTitle)
|
.open(cacheTitle)
|
||||||
.then(cache =>
|
.then(cache =>
|
||||||
fetch(request, {cache: "no-store"})
|
fetch(request, {cache: "no-store"})
|
||||||
.then(response => {
|
.then(response => {
|
||||||
|
if (response.redirected) {
|
||||||
|
throw new Error("Fetch is redirect. Abort usage and cache!");
|
||||||
|
}
|
||||||
|
|
||||||
cache
|
cache
|
||||||
.put(request, response)
|
.put(request, response)
|
||||||
.then(() => resolve());
|
.then(() => resolve());
|
||||||
|
@ -119,11 +146,19 @@ const update = request => new Promise((resolve, reject) => {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
// general strategy when making a request (eg if online try to fetch it
|
// general strategy when making a request:
|
||||||
// from cache, if something fails fetch from network. Update cache everytime files are fetched.
|
// 1. Try to retrieve file from cache
|
||||||
// This way files should only be fetched if cacheVersion is changed
|
// 2. If cache is not available: Fetch from network and update cache.
|
||||||
|
// This way, cached files are only updated if the cacheVersion is changed
|
||||||
self.addEventListener('fetch', function(event) {
|
self.addEventListener('fetch', function(event) {
|
||||||
if (event.request.method === "POST") {
|
const swOrigin = new URL(self.location.href).origin;
|
||||||
|
const requestOrigin = new URL(event.request.url).origin;
|
||||||
|
|
||||||
|
if (swOrigin !== requestOrigin) {
|
||||||
|
// Do not handle requests from other origin
|
||||||
|
event.respondWith(fetch(event.request));
|
||||||
|
}
|
||||||
|
else if (event.request.method === "POST") {
|
||||||
// Requests related to Web Share Target.
|
// Requests related to Web Share Target.
|
||||||
event.respondWith((async () => {
|
event.respondWith((async () => {
|
||||||
const share_url = await evaluateRequestData(event.request);
|
const share_url = await evaluateRequestData(event.request);
|
||||||
|
@ -131,39 +166,48 @@ self.addEventListener('fetch', function(event) {
|
||||||
})());
|
})());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Regular requests not related to Web Share Target.
|
// Regular requests not related to Web Share Target:
|
||||||
if (forceFetch) {
|
// If request is excluded from cache -> respondWith fromNetwork
|
||||||
event.respondWith(fromNetwork(event.request, 10000));
|
// else -> try fromCache first
|
||||||
}
|
event.respondWith(
|
||||||
else {
|
doNotCacheRequest(event.request)
|
||||||
event.respondWith(
|
? fromNetwork(event.request, 10000)
|
||||||
fromCache(event.request)
|
: fromCache(event.request)
|
||||||
.then(rsp => {
|
.then(rsp => {
|
||||||
// if fromCache resolves to undefined fetch from network instead
|
// if fromCache resolves to undefined fetch from network instead
|
||||||
return rsp || fromNetwork(event.request, 10000);
|
if (!rsp) {
|
||||||
|
throw new Error("No match found.");
|
||||||
|
}
|
||||||
|
return rsp;
|
||||||
})
|
})
|
||||||
);
|
.catch(error => {
|
||||||
}
|
console.error("Could not retrieve request from cache:", event.request.url, error);
|
||||||
|
return fromNetwork(event.request, 10000);
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// on activation, we clean up the previously registered service workers
|
// on activation, we clean up the previously registered service workers
|
||||||
self.addEventListener('activate', evt => {
|
self.addEventListener('activate', evt => {
|
||||||
return evt.waitUntil(
|
console.log("Activate sw:", cacheVersion);
|
||||||
caches.keys()
|
evt.waitUntil(clients.claim());
|
||||||
.then(cacheNames => {
|
return evt.waitUntil(
|
||||||
return Promise.all(
|
caches
|
||||||
cacheNames.map(cacheName => {
|
.keys()
|
||||||
if (cacheName !== cacheTitle) {
|
.then(cacheNames => {
|
||||||
return caches.delete(cacheName);
|
return Promise.all(
|
||||||
}
|
cacheNames.map(cacheName => {
|
||||||
})
|
if (cacheName !== cacheTitle) {
|
||||||
);
|
console.log("Delete cache:", cacheName);
|
||||||
})
|
return caches.delete(cacheName);
|
||||||
)
|
}
|
||||||
}
|
})
|
||||||
);
|
);
|
||||||
|
})
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
const evaluateRequestData = function (request) {
|
const evaluateRequestData = function (request) {
|
||||||
return new Promise(async (resolve) => {
|
return new Promise(async (resolve) => {
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
display: block;
|
display: block;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
resize: none;
|
resize: none;
|
||||||
line-height: 16px;
|
|
||||||
max-height: 350px;
|
max-height: 350px;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
word-wrap: anywhere;
|
word-wrap: anywhere;
|
||||||
|
|
|
@ -11,10 +11,6 @@ body {
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overscroll-behavior: none;
|
overscroll-behavior: none;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
/* Only allow selection on message and pair key */
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
transition: color 300ms;
|
transition: color 300ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -557,6 +553,10 @@ footer .logo {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#display-name:focus::before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
html:not([dir="rtl"]) #display-name,
|
html:not([dir="rtl"]) #display-name,
|
||||||
html:not([dir="rtl"]) .edit-pen {
|
html:not([dir="rtl"]) .edit-pen {
|
||||||
margin-left: -1rem;
|
margin-left: -1rem;
|
||||||
|
@ -587,7 +587,6 @@ x-dialog:not([show]) x-background {
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
letter-spacing: 0.12em;
|
letter-spacing: 0.12em;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
white-space: nowrap;
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
background: inherit;
|
background: inherit;
|
||||||
|
@ -626,12 +625,15 @@ x-dialog:not([show]) x-background {
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
z-index: -1;
|
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
background-color: var(--accent-color);
|
background-color: var(--accent-color);
|
||||||
transition: opacity 300ms;
|
transition: opacity 300ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon-button:before {
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
.btn:not([disabled]):hover:before,
|
.btn:not([disabled]):hover:before,
|
||||||
.icon-button:hover:before {
|
.icon-button:hover:before {
|
||||||
opacity: 0.3;
|
opacity: 0.3;
|
||||||
|
@ -689,7 +691,6 @@ button::-moz-focus-inner {
|
||||||
|
|
||||||
|
|
||||||
/* Info Animation */
|
/* Info Animation */
|
||||||
|
|
||||||
#about {
|
#about {
|
||||||
color: white;
|
color: white;
|
||||||
z-index: 32;
|
z-index: 32;
|
||||||
|
@ -745,9 +746,11 @@ button::-moz-focus-inner {
|
||||||
height: var(--size);
|
height: var(--size);
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
background: var(--primary-color);
|
background: var(--primary-color);
|
||||||
background-image: radial-gradient(circle at calc(50% - 36px), var(--accent-color) 0%, color-mix(in srgb, var(--accent-color) 40%, black) 80%);
|
background-image: radial-gradient(circle at calc(50% - 36px), var(--primary-color) 0%, black 80%);
|
||||||
--crop-size: 0px;
|
--crop-size: 0px;
|
||||||
clip-path: circle(var(--crop-size));
|
clip-path: circle(var(--crop-size));
|
||||||
|
/* For clients < iOS 13.1 */
|
||||||
|
-webkit-clip-path: circle(var(--crop-size));
|
||||||
}
|
}
|
||||||
|
|
||||||
html:not([dir="rtl"]) #about x-background {
|
html:not([dir="rtl"]) #about x-background {
|
||||||
|
@ -895,7 +898,7 @@ x-peers:empty~x-instructions {
|
||||||
|
|
||||||
@media screen and (min-height: 800px) {
|
@media screen and (min-height: 800px) {
|
||||||
footer {
|
footer {
|
||||||
margin-bottom: 16px;
|
padding-bottom: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -905,6 +908,13 @@ x-peers:empty~x-instructions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* PWA Standalone styles */
|
||||||
|
@media all and (display-mode: standalone) {
|
||||||
|
footer {
|
||||||
|
padding-bottom: 34px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Constants */
|
/* Constants */
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
|
@ -936,8 +946,8 @@ body {
|
||||||
--lt-dialog-bg-color: #fff;
|
--lt-dialog-bg-color: #fff;
|
||||||
--lt-bg-color: 255,255,255;
|
--lt-bg-color: 255,255,255;
|
||||||
--lt-bg-color-secondary: #f2f2f2;
|
--lt-bg-color-secondary: #f2f2f2;
|
||||||
--lt-border-color: #a9a9a9;
|
--lt-border-color: #757575;
|
||||||
--lt-badge-color: #a5a5a5;
|
--lt-badge-color: #757575;
|
||||||
--lt-lang-hr-color: #DDD;
|
--lt-lang-hr-color: #DDD;
|
||||||
|
|
||||||
--lt-shadow-color-secondary-rgb: 0,0,0;
|
--lt-shadow-color-secondary-rgb: 0,0,0;
|
||||||
|
@ -950,8 +960,8 @@ body {
|
||||||
--dt-dialog-bg-color: #141414;
|
--dt-dialog-bg-color: #141414;
|
||||||
--dt-bg-color: 0,0,0;
|
--dt-bg-color: 0,0,0;
|
||||||
--dt-bg-color-secondary: #262628;
|
--dt-bg-color-secondary: #262628;
|
||||||
--dt-border-color: #919191;
|
--dt-border-color: #757575;
|
||||||
--dt-badge-color: #717171;
|
--dt-badge-color: #757575;
|
||||||
--dt-lang-hr-color: #404040;
|
--dt-lang-hr-color: #404040;
|
||||||
|
|
||||||
--dt-shadow-color-secondary-rgb: 255,255,255;
|
--dt-shadow-color-secondary-rgb: 255,255,255;
|
||||||
|
|
|
@ -44,15 +44,18 @@ export default class Peer {
|
||||||
_setIP(request) {
|
_setIP(request) {
|
||||||
if (request.headers['cf-connecting-ip']) {
|
if (request.headers['cf-connecting-ip']) {
|
||||||
this.ip = request.headers['cf-connecting-ip'].split(/\s*,\s*/)[0];
|
this.ip = request.headers['cf-connecting-ip'].split(/\s*,\s*/)[0];
|
||||||
} else if (request.headers['x-forwarded-for']) {
|
}
|
||||||
|
else if (request.headers['x-forwarded-for']) {
|
||||||
this.ip = request.headers['x-forwarded-for'].split(/\s*,\s*/)[0];
|
this.ip = request.headers['x-forwarded-for'].split(/\s*,\s*/)[0];
|
||||||
} else {
|
}
|
||||||
this.ip = request.connection.remoteAddress;
|
else {
|
||||||
|
this.ip = request.socket.remoteAddress ?? '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove the prefix used for IPv4-translated addresses
|
// remove the prefix used for IPv4-translated addresses
|
||||||
if (this.ip.substring(0,7) === "::ffff:")
|
if (this.ip.substring(0,7) === "::ffff:") {
|
||||||
this.ip = this.ip.substring(7);
|
this.ip = this.ip.substring(7);
|
||||||
|
}
|
||||||
|
|
||||||
let ipv6_was_localized = false;
|
let ipv6_was_localized = false;
|
||||||
if (this.conf.ipv6Localize && this.ip.includes(':')) {
|
if (this.conf.ipv6Localize && this.ip.includes(':')) {
|
||||||
|
|
Loading…
Reference in New Issue